From be0ccadb888396f9a76893f8a424204173356ab7 Mon Sep 17 00:00:00 2001 From: Catherine Robson Date: Mon, 24 Jul 2017 21:23:10 -0400 Subject: [PATCH 1/4] Removed extra string from agenda --- .../patternfly-ng_communitymeetingagenda_2017-08.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/community-meetings/patternfly-ng_communitymeetingagenda_2017-08.md b/resources/community-meetings/patternfly-ng_communitymeetingagenda_2017-08.md index 1760d8317..9a7b727d8 100644 --- a/resources/community-meetings/patternfly-ng_communitymeetingagenda_2017-08.md +++ b/resources/community-meetings/patternfly-ng_communitymeetingagenda_2017-08.md @@ -14,7 +14,7 @@ You can also dial in using 888-847-2201 (United States - Toll Free, or [See all * Release and consumption information * Contribution process established * Showcase - * Semantic release explanation - this could fit in the top point if you’d like + * Semantic release explanation 3. Consumption process demo 4. Contribution process 5. Next steps & how to get involved From 3a154460a76794b3d43be65d587f6a8d12500cc9 Mon Sep 17 00:00:00 2001 From: Catherine Robson Date: Thu, 3 Aug 2017 16:49:57 -0400 Subject: [PATCH 2/4] Adding recording for Aug 2 community meeting and slides. Adding new community meeting agenda for Aug 22. --- ...rnfly-ng_communitymeetingagenda_2017-08.md | 21 ------------------- 1 file changed, 21 deletions(-) delete mode 100644 resources/community-meetings/patternfly-ng_communitymeetingagenda_2017-08.md diff --git a/resources/community-meetings/patternfly-ng_communitymeetingagenda_2017-08.md b/resources/community-meetings/patternfly-ng_communitymeetingagenda_2017-08.md deleted file mode 100644 index 9a7b727d8..000000000 --- a/resources/community-meetings/patternfly-ng_communitymeetingagenda_2017-08.md +++ /dev/null @@ -1,21 +0,0 @@ -# patternfly-ng Community Meeting - August 2, 2017 - -This will be our first community meeting for patternfly-ng, the Angular-ng implementation of PatternFly! Please join us to learn about this community, what we are doing, and how you can get involved. - -## Call in information: -Join on bluejeans with your browser by using the following link: -[https://bluejeans.com/421052074](https://bluejeans.com/421052074) - -You can also dial in using 888-847-2201 (United States - Toll Free, or [See all numbers](http://bluejeans.com/premium-numbers)) with participant code 421052074. - -## Agenda: -1. Welcome & Introductions -2. Repo status update - * Release and consumption information - * Contribution process established - * Showcase - * Semantic release explanation -3. Consumption process demo -4. Contribution process -5. Next steps & how to get involved -6. Open time for questions and discussion on topics the community is interested in From ed0925bedb442057f40f1f9509670b99e399f78e Mon Sep 17 00:00:00 2001 From: Catherine Robson Date: Fri, 4 Aug 2017 09:16:18 -0400 Subject: [PATCH 3/4] Adding files for community meeting slides, update agendas. --- .../2017-08-02_communitymtg_agenda.md | 25 ++++++++++++++++++ .../2017-08-02_communitymtg_slides.pdf | Bin 0 -> 641183 bytes .../2017-08-22_communitymtg_agenda.md | 13 +++++++++ 3 files changed, 38 insertions(+) create mode 100644 resources/community-meetings/2017-08-02_communitymtg_agenda.md create mode 100644 resources/community-meetings/2017-08-02_communitymtg_slides.pdf create mode 100644 resources/community-meetings/2017-08-22_communitymtg_agenda.md diff --git a/resources/community-meetings/2017-08-02_communitymtg_agenda.md b/resources/community-meetings/2017-08-02_communitymtg_agenda.md new file mode 100644 index 000000000..4a0aefb51 --- /dev/null +++ b/resources/community-meetings/2017-08-02_communitymtg_agenda.md @@ -0,0 +1,25 @@ +# patternfly-ng Community Meeting - August 2, 2017 +This will be our first community meeting for patternfly-ng, the Angular-ng implementation of PatternFly! Please join us to learn about this community, what we are doing, and how you can get involved. + +## Recording & Slides: +* [Recording](https://bluejeans.com/s/23_w6) +* [Slides](resources/community-meetings/2017-08-02_communitymtg_slides.pdf) + + +## Call in information: +Join on bluejeans with your browser by using the following link: +[https://bluejeans.com/421052074](https://bluejeans.com/421052074) + +You can also dial in using 888-847-2201 (United States - Toll Free, or [See all numbers](http://bluejeans.com/premium-numbers)) with participant code 421052074. + +## Agenda: +1. Welcome & Introductions +2. Repo status update + * Release and consumption information + * Contribution process established + * Showcase + * Semantic release explanation +3. Consumption process demo +4. Contribution process +5. Next steps & how to get involved +6. Open time for questions and discussion on topics the community is interested in diff --git a/resources/community-meetings/2017-08-02_communitymtg_slides.pdf b/resources/community-meetings/2017-08-02_communitymtg_slides.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2ef418713f93e1afc669849bcae164f6a41233c1 GIT binary patch literal 641183 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

k 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

H8Hy!V*gOn0I6fh0K?sJx^FN_J4Qp?y!t=+-N2 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∋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 z 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 LG&CZzqL}{&ZMP4y literal 0 HcmV?d00001 diff --git a/resources/community-meetings/2017-08-22_communitymtg_agenda.md b/resources/community-meetings/2017-08-22_communitymtg_agenda.md new file mode 100644 index 000000000..9277b218b --- /dev/null +++ b/resources/community-meetings/2017-08-22_communitymtg_agenda.md @@ -0,0 +1,13 @@ +# patternfly-ng Community Meeting - August 22, 2017 +During this meeting we will talk about the problems we are facing with PatternFly 3 CSS. We'll share our plan for a new CSS architecture for the next PatternFly to gather feedback. + +## Call in information: +Join on bluejeans with your browser by using the following link: +[https://bluejeans.com/876759318](https://bluejeans.com/876759318) + +You can also dial in using 888-847-2201 (United States - Toll Free, or [See all numbers](http://bluejeans.com/premium-numbers)) with participant code 876759318. + +## Agenda: +1. Repo status updates +2. PatternFly CSS discussion +3. Open time for questions and discussion on topics the community is interested in From 5cd1d19c0d1b37e89357f3ac17ed666b79808431 Mon Sep 17 00:00:00 2001 From: patternfly-build Date: Fri, 4 Aug 2017 14:39:12 +0000 Subject: [PATCH 4/4] Added files generated by Travis build --- dist-demo/app.js | 1391 ++ .../assets/fonts/OpenSans-Bold-webfont.eot | Bin 0 -> 100333 bytes .../assets/fonts/OpenSans-Bold-webfont.svg | 19028 +++++++++++++++ .../assets/fonts/OpenSans-Bold-webfont.ttf | Bin 0 -> 224592 bytes .../assets/fonts/OpenSans-Bold-webfont.woff | Bin 0 -> 98780 bytes .../assets/fonts/OpenSans-Bold-webfont.woff2 | Bin 0 -> 63732 bytes .../fonts/OpenSans-BoldItalic-webfont.eot | Bin 0 -> 96083 bytes .../fonts/OpenSans-BoldItalic-webfont.svg | 19036 +++++++++++++++ .../fonts/OpenSans-BoldItalic-webfont.ttf | Bin 0 -> 213292 bytes .../fonts/OpenSans-BoldItalic-webfont.woff | Bin 0 -> 93708 bytes .../fonts/OpenSans-BoldItalic-webfont.woff2 | Bin 0 -> 59512 bytes .../fonts/OpenSans-ExtraBold-webfont.eot | Bin 0 -> 100097 bytes .../fonts/OpenSans-ExtraBold-webfont.svg | 19030 +++++++++++++++ .../fonts/OpenSans-ExtraBold-webfont.ttf | Bin 0 -> 222584 bytes .../fonts/OpenSans-ExtraBold-webfont.woff | Bin 0 -> 98492 bytes .../fonts/OpenSans-ExtraBold-webfont.woff2 | Bin 0 -> 63664 bytes .../OpenSans-ExtraBoldItalic-webfont.eot | Bin 0 -> 96371 bytes .../OpenSans-ExtraBoldItalic-webfont.svg | 19036 +++++++++++++++ .../OpenSans-ExtraBoldItalic-webfont.ttf | Bin 0 -> 213420 bytes .../OpenSans-ExtraBoldItalic-webfont.woff | Bin 0 -> 94240 bytes .../OpenSans-ExtraBoldItalic-webfont.woff2 | Bin 0 -> 59756 bytes .../assets/fonts/OpenSans-Italic-webfont.eot | Bin 0 -> 96859 bytes .../assets/fonts/OpenSans-Italic-webfont.svg | 19043 ++++++++++++++++ .../assets/fonts/OpenSans-Italic-webfont.ttf | Bin 0 -> 212896 bytes .../assets/fonts/OpenSans-Italic-webfont.woff | Bin 0 -> 93880 bytes .../fonts/OpenSans-Italic-webfont.woff2 | Bin 0 -> 59912 bytes .../assets/fonts/OpenSans-Light-webfont.eot | Bin 0 -> 99236 bytes .../assets/fonts/OpenSans-Light-webfont.svg | 19026 +++++++++++++++ .../assets/fonts/OpenSans-Light-webfont.ttf | Bin 0 -> 222412 bytes .../assets/fonts/OpenSans-Light-webfont.woff | Bin 0 -> 97924 bytes .../assets/fonts/OpenSans-Light-webfont.woff2 | Bin 0 -> 63180 bytes .../fonts/OpenSans-LightItalic-webfont.eot | Bin 0 -> 96135 bytes .../fonts/OpenSans-LightItalic-webfont.svg | 19039 +++++++++++++++ .../fonts/OpenSans-LightItalic-webfont.ttf | Bin 0 -> 213128 bytes .../fonts/OpenSans-LightItalic-webfont.woff | Bin 0 -> 93872 bytes .../fonts/OpenSans-LightItalic-webfont.woff2 | Bin 0 -> 59176 bytes .../assets/fonts/OpenSans-Regular-webfont.eot | Bin 0 -> 98682 bytes .../assets/fonts/OpenSans-Regular-webfont.svg | 19030 +++++++++++++++ .../assets/fonts/OpenSans-Regular-webfont.ttf | Bin 0 -> 217360 bytes .../fonts/OpenSans-Regular-webfont.woff | Bin 0 -> 96116 bytes .../fonts/OpenSans-Regular-webfont.woff2 | Bin 0 -> 61980 bytes .../fonts/OpenSans-Semibold-webfont.eot | Bin 0 -> 100579 bytes .../fonts/OpenSans-Semibold-webfont.svg | 19030 +++++++++++++++ .../fonts/OpenSans-Semibold-webfont.ttf | Bin 0 -> 221328 bytes .../fonts/OpenSans-Semibold-webfont.woff | Bin 0 -> 98464 bytes .../fonts/OpenSans-Semibold-webfont.woff2 | Bin 0 -> 63736 bytes .../fonts/OpenSans-SemiboldItalic-webfont.eot | Bin 0 -> 98093 bytes .../fonts/OpenSans-SemiboldItalic-webfont.svg | 19043 ++++++++++++++++ .../fonts/OpenSans-SemiboldItalic-webfont.ttf | Bin 0 -> 212820 bytes .../OpenSans-SemiboldItalic-webfont.woff | Bin 0 -> 94548 bytes .../OpenSans-SemiboldItalic-webfont.woff2 | Bin 0 -> 60928 bytes .../assets/fonts/PatternFlyIcons-webfont.eot | Bin 0 -> 29248 bytes .../assets/fonts/PatternFlyIcons-webfont.svg | 113 + .../assets/fonts/PatternFlyIcons-webfont.ttf | Bin 0 -> 29020 bytes .../assets/fonts/PatternFlyIcons-webfont.woff | Bin 0 -> 29096 bytes dist-demo/assets/fonts/bg-login.jpg | Bin 0 -> 47664 bytes dist-demo/assets/fonts/bg-modal-about-pf.png | Bin 0 -> 10987 bytes .../assets/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes .../assets/fonts/fontawesome-webfont.svg | 2671 +++ .../assets/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../assets/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../assets/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes dist-demo/docs/assets/css/main.css | 865 + dist-demo/docs/assets/css/main.css.map | 7 + dist-demo/docs/assets/images/icons.png | Bin 0 -> 9487 bytes dist-demo/docs/assets/images/icons@2x.png | Bin 0 -> 27740 bytes dist-demo/docs/assets/images/widgets.png | Bin 0 -> 480 bytes dist-demo/docs/assets/images/widgets@2x.png | Bin 0 -> 855 bytes dist-demo/docs/assets/js/main.js | 5 + dist-demo/docs/assets/js/search.js | 3 + dist-demo/docs/classes/action.html | 340 + dist-demo/docs/classes/actioncomponent.html | 383 + dist-demo/docs/classes/actionconfig.html | 284 + dist-demo/docs/classes/actionmodule.html | 171 + .../docs/classes/emptystatecomponent.html | 352 + dist-demo/docs/classes/emptystateconfig.html | 312 + dist-demo/docs/classes/emptystatemodule.html | 171 + dist-demo/docs/classes/filter.html | 245 + dist-demo/docs/classes/filtercomponent.html | 530 + dist-demo/docs/classes/filterconfig.html | 302 + dist-demo/docs/classes/filterevent.html | 264 + dist-demo/docs/classes/filterfield.html | 283 + .../docs/classes/filterfieldscomponent.html | 478 + dist-demo/docs/classes/filtermodule.html | 171 + dist-demo/docs/classes/filterquery.html | 283 + .../docs/classes/filterresultscomponent.html | 352 + dist-demo/docs/classes/listcomponent.html | 562 + dist-demo/docs/classes/listconfig.html | 379 + dist-demo/docs/classes/listevent.html | 226 + .../classes/listexpandtogglecomponent.html | 381 + dist-demo/docs/classes/listmodule.html | 171 + dist-demo/docs/classes/notification.html | 359 + dist-demo/docs/classes/notificationevent.html | 245 + .../docs/classes/notificationmodule.html | 171 + .../docs/classes/notificationservice.html | 540 + dist-demo/docs/classes/notificationtype.html | 257 + .../classes/remainingcharscountdirective.html | 402 + .../classes/remainingcharscountmodule.html | 171 + dist-demo/docs/classes/samplecomponent.html | 260 + dist-demo/docs/classes/samplemodule.html | 171 + .../docs/classes/searchhighlightmodule.html | 171 + .../docs/classes/searchhighlightpipe.html | 255 + dist-demo/docs/classes/sortcomponent.html | 352 + dist-demo/docs/classes/sortconfig.html | 245 + dist-demo/docs/classes/sortevent.html | 226 + dist-demo/docs/classes/sortfield.html | 245 + dist-demo/docs/classes/sortmodule.html | 171 + .../classes/toastnotificationcomponent.html | 572 + .../toastnotificationlistcomponent.html | 357 + dist-demo/docs/classes/toolbarcomponent.html | 520 + dist-demo/docs/classes/toolbarconfig.html | 283 + dist-demo/docs/classes/toolbarmodule.html | 171 + dist-demo/docs/classes/toolbarview.html | 264 + dist-demo/docs/globals.html | 330 + dist-demo/docs/index.html | 342 + dist-demo/index.html | 10 + dist-demo/polyfills.js | 1977 ++ .../examples/action-example.component.css | 2 + .../examples/action-example.component.html | 73 + .../examples/action-example.component.less | 14 + .../examples/action-example.component.ts | 81 + .../action/examples/action-example.module.ts | 24 + .../empty-state-example.component.html | 45 + .../examples/empty-state-example.component.ts | 71 + .../examples/empty-state-example.module.ts | 21 + .../filter-basic-example.component.html | 71 + .../filter-basic-example.component.ts | 188 + .../examples/filter-example.component.html | 16 + .../examples/filter-example.component.ts | 21 + .../filter/examples/filter-example.module.ts | 26 + .../filter-type-ahead-example.component.html | 73 + .../filter-type-ahead-example.component.ts | 265 + .../examples/basic-content.component.html | 24 + .../list/examples/basic-content.component.ts | 24 + .../examples/clusters-content.component.html | 34 + .../examples/clusters-content.component.ts | 22 + .../examples/hosts-content.component.html | 36 + .../list/examples/hosts-content.component.ts | 22 + .../examples/images-content.component.html | 36 + .../list/examples/images-content.component.ts | 22 + .../examples/list-basic-example.component.css | 2 + .../list-basic-example.component.html | 151 + .../list-basic-example.component.less | 9 + .../examples/list-basic-example.component.ts | 327 + .../list-compound-example.component.html | 108 + .../list-compound-example.component.ts | 175 + .../list/examples/list-example.component.html | 19 + .../list/examples/list-example.component.ts | 31 + .../app/list/examples/list-example.module.ts | 48 + .../list-heading-example.component.css | 2 + .../list-heading-example.component.html | 151 + .../list-heading-example.component.less | 13 + .../list-heading-example.component.ts | 230 + .../examples/nodes-content.component.html | 38 + .../list/examples/nodes-content.component.ts | 22 + .../examples/notification-example.module.ts | 39 + ...otification-service-example.component.html | 29 + .../notification-service-example.component.ts | 34 + ...-notification-basic-example.component.html | 99 + ...st-notification-basic-example.component.ts | 98 + .../toast-notification-example.component.html | 16 + .../toast-notification-example.component.ts | 31 + ...t-notification-list-example.component.html | 105 + ...ast-notification-list-example.component.ts | 122 + ...emaining-chars-count-example.component.css | 2 + ...maining-chars-count-example.component.html | 96 + ...maining-chars-count-example.component.less | 19 + ...remaining-chars-count-example.component.ts | 45 + .../remaining-chars-count-example.module.ts | 21 + .../examples/sample-example.component.html | 51 + .../examples/sample-example.component.ts | 33 + .../sample/examples/sample-example.module.ts | 24 + .../search-highlight-example.component.html | 38 + .../search-highlight-example.component.ts | 19 + .../search-highlight-example.module.ts | 23 + .../sort/examples/sort-example.component.html | 58 + .../sort/examples/sort-example.component.ts | 105 + .../app/sort/examples/sort-example.module.ts | 24 + .../examples/toolbar-example.component.html | 113 + .../examples/toolbar-example.component.ts | 399 + .../examples/toolbar-example.module.ts | 28 + dist-demo/vendor.0.css | 18233 +++++++++++++++ dist-demo/vendor.js | 2838 +++ dist/README.md | 77 + dist/index.d.ts | 43 + dist/index.js | 54 + dist/index.js.map | 1 + dist/index.metadata.json | 1 + dist/package.json | 193 + dist/patternfly-ng.module.d.ts | 2 + dist/patternfly-ng.module.js | 45 + dist/patternfly-ng.module.js.map | 1 + dist/patternfly-ng.module.metadata.json | 1 + dist/src/app/action/action-config.d.ts | 27 + dist/src/app/action/action-config.js | 11 + dist/src/app/action/action-config.js.map | 1 + .../app/action/action-config.metadata.json | 1 + dist/src/app/action/action.component.d.ts | 59 + dist/src/app/action/action.component.html | 45 + dist/src/app/action/action.component.js | 143 + dist/src/app/action/action.component.js.map | 1 + .../app/action/action.component.metadata.json | 1 + dist/src/app/action/action.d.ts | 38 + dist/src/app/action/action.js | 10 + dist/src/app/action/action.js.map | 1 + dist/src/app/action/action.metadata.json | 1 + dist/src/app/action/action.module.d.ts | 8 + dist/src/app/action/action.module.js | 32 + dist/src/app/action/action.module.js.map | 1 + .../app/action/action.module.metadata.json | 1 + .../app/empty-state/empty-state-config.d.ts | 39 + .../src/app/empty-state/empty-state-config.js | 10 + .../app/empty-state/empty-state-config.js.map | 1 + .../empty-state-config.metadata.json | 1 + .../empty-state/empty-state.component.d.ts | 34 + .../empty-state/empty-state.component.html | 39 + .../app/empty-state/empty-state.component.js | 83 + .../empty-state/empty-state.component.js.map | 1 + .../empty-state.component.metadata.json | 1 + .../app/empty-state/empty-state.module.d.ts | 7 + .../src/app/empty-state/empty-state.module.js | 28 + .../app/empty-state/empty-state.module.js.map | 1 + .../empty-state.module.metadata.json | 1 + dist/src/app/filter/filter-config.d.ts | 31 + dist/src/app/filter/filter-config.js | 10 + dist/src/app/filter/filter-config.js.map | 1 + .../app/filter/filter-config.metadata.json | 1 + dist/src/app/filter/filter-event.d.ts | 24 + dist/src/app/filter/filter-event.js | 10 + dist/src/app/filter/filter-event.js.map | 1 + .../src/app/filter/filter-event.metadata.json | 1 + dist/src/app/filter/filter-field.d.ts | 26 + dist/src/app/filter/filter-field.js | 10 + dist/src/app/filter/filter-field.js.map | 1 + .../src/app/filter/filter-field.metadata.json | 1 + .../app/filter/filter-fields.component.d.ts | 65 + .../app/filter/filter-fields.component.html | 71 + .../src/app/filter/filter-fields.component.js | 181 + .../app/filter/filter-fields.component.js.map | 1 + .../filter-fields.component.metadata.json | 1 + dist/src/app/filter/filter-query.d.ts | 25 + dist/src/app/filter/filter-query.js | 10 + dist/src/app/filter/filter-query.js.map | 1 + .../src/app/filter/filter-query.metadata.json | 1 + .../app/filter/filter-results.component.d.ts | 35 + .../app/filter/filter-results.component.html | 20 + .../app/filter/filter-results.component.js | 103 + .../filter/filter-results.component.js.map | 1 + .../filter-results.component.metadata.json | 1 + dist/src/app/filter/filter.component.d.ts | 69 + dist/src/app/filter/filter.component.html | 7 + dist/src/app/filter/filter.component.js | 152 + dist/src/app/filter/filter.component.js.map | 1 + .../app/filter/filter.component.metadata.json | 1 + dist/src/app/filter/filter.d.ts | 19 + dist/src/app/filter/filter.js | 10 + dist/src/app/filter/filter.js.map | 1 + dist/src/app/filter/filter.metadata.json | 1 + dist/src/app/filter/filter.module.d.ts | 11 + dist/src/app/filter/filter.module.js | 45 + dist/src/app/filter/filter.module.js.map | 1 + .../app/filter/filter.module.metadata.json | 1 + dist/src/app/list/list-config.d.ts | 51 + dist/src/app/list/list-config.js | 10 + dist/src/app/list/list-config.js.map | 1 + dist/src/app/list/list-config.metadata.json | 1 + dist/src/app/list/list-event.d.ts | 13 + dist/src/app/list/list-event.js | 10 + dist/src/app/list/list-event.js.map | 1 + dist/src/app/list/list-event.metadata.json | 1 + .../list/list-expand-toggle.component.d.ts | 38 + .../list/list-expand-toggle.component.html | 6 + .../app/list/list-expand-toggle.component.js | 82 + .../list/list-expand-toggle.component.js.map | 1 + ...list-expand-toggle.component.metadata.json | 1 + dist/src/app/list/list.component.d.ts | 102 + dist/src/app/list/list.component.html | 72 + dist/src/app/list/list.component.js | 309 + dist/src/app/list/list.component.js.map | 1 + .../src/app/list/list.component.metadata.json | 1 + dist/src/app/list/list.module.d.ts | 8 + dist/src/app/list/list.module.js | 34 + dist/src/app/list/list.module.js.map | 1 + dist/src/app/list/list.module.metadata.json | 1 + .../app/notification/notification-event.d.ts | 19 + .../app/notification/notification-event.js | 10 + .../notification/notification-event.js.map | 1 + .../notification-event.metadata.json | 1 + .../app/notification/notification-type.d.ts | 18 + .../src/app/notification/notification-type.js | 26 + .../app/notification/notification-type.js.map | 1 + .../notification-type.metadata.json | 1 + dist/src/app/notification/notification.d.ts | 42 + dist/src/app/notification/notification.js | 10 + dist/src/app/notification/notification.js.map | 1 + .../notification/notification.metadata.json | 1 + .../app/notification/notification.module.d.ts | 8 + .../app/notification/notification.module.js | 33 + .../notification/notification.module.js.map | 1 + .../notification.module.metadata.json | 1 + .../notification/notification.service.d.ts | 75 + .../app/notification/notification.service.js | 169 + .../notification/notification.service.js.map | 1 + .../notification.service.metadata.json | 1 + .../toast-notification-list.component.d.ts | 41 + .../toast-notification-list.component.html | 16 + .../toast-notification-list.component.js | 83 + .../toast-notification-list.component.js.map | 1 + ...-notification-list.component.metadata.json | 1 + .../toast-notification.component.d.ts | 77 + .../toast-notification.component.html | 56 + .../toast-notification.component.js | 144 + .../toast-notification.component.js.map | 1 + ...toast-notification.component.metadata.json | 1 + .../remaining-chars-count.directive.d.ts | 75 + .../remaining-chars-count.directive.js | 160 + .../remaining-chars-count.directive.js.map | 1 + ...aining-chars-count.directive.metadata.json | 1 + .../remaining-chars-count.module.d.ts | 5 + .../remaining-chars-count.module.js | 27 + .../remaining-chars-count.module.js.map | 1 + ...remaining-chars-count.module.metadata.json | 1 + dist/src/app/sample/sample.component.d.ts | 17 + dist/src/app/sample/sample.component.html | 3 + dist/src/app/sample/sample.component.js | 40 + dist/src/app/sample/sample.component.js.map | 1 + .../app/sample/sample.component.metadata.json | 1 + dist/src/app/sample/sample.module.d.ts | 5 + dist/src/app/sample/sample.module.js | 26 + dist/src/app/sample/sample.module.js.map | 1 + .../app/sample/sample.module.metadata.json | 1 + .../search-highlight.module.d.ts | 5 + .../search-highlight.module.js | 24 + .../search-highlight.module.js.map | 1 + .../search-highlight.module.metadata.json | 1 + .../search-highlight.pipe.d.ts | 10 + .../search-highlight/search-highlight.pipe.js | 57 + .../search-highlight.pipe.js.map | 1 + .../search-highlight.pipe.metadata.json | 1 + dist/src/app/sort/sort-config.d.ts | 18 + dist/src/app/sort/sort-config.js | 10 + dist/src/app/sort/sort-config.js.map | 1 + dist/src/app/sort/sort-config.metadata.json | 1 + dist/src/app/sort/sort-event.d.ts | 14 + dist/src/app/sort/sort-event.js | 10 + dist/src/app/sort/sort-event.js.map | 1 + dist/src/app/sort/sort-event.metadata.json | 1 + dist/src/app/sort/sort-field.d.ts | 17 + dist/src/app/sort/sort-field.js | 10 + dist/src/app/sort/sort-field.js.map | 1 + dist/src/app/sort/sort-field.metadata.json | 1 + dist/src/app/sort/sort.component.d.ts | 37 + dist/src/app/sort/sort.component.html | 17 + dist/src/app/sort/sort.component.js | 120 + dist/src/app/sort/sort.component.js.map | 1 + .../src/app/sort/sort.component.metadata.json | 1 + dist/src/app/sort/sort.module.d.ts | 9 + dist/src/app/sort/sort.module.js | 32 + dist/src/app/sort/sort.module.js.map | 1 + dist/src/app/sort/sort.module.metadata.json | 1 + dist/src/app/toolbar/toolbar-config.d.ts | 29 + dist/src/app/toolbar/toolbar-config.js | 10 + dist/src/app/toolbar/toolbar-config.js.map | 1 + .../app/toolbar/toolbar-config.metadata.json | 1 + dist/src/app/toolbar/toolbar-view.d.ts | 21 + dist/src/app/toolbar/toolbar-view.js | 10 + dist/src/app/toolbar/toolbar-view.js.map | 1 + .../app/toolbar/toolbar-view.metadata.json | 1 + dist/src/app/toolbar/toolbar.component.d.ts | 77 + dist/src/app/toolbar/toolbar.component.html | 38 + dist/src/app/toolbar/toolbar.component.js | 202 + dist/src/app/toolbar/toolbar.component.js.map | 1 + .../toolbar/toolbar.component.metadata.json | 1 + dist/src/app/toolbar/toolbar.module.d.ts | 7 + dist/src/app/toolbar/toolbar.module.js | 33 + dist/src/app/toolbar/toolbar.module.js.map | 1 + .../app/toolbar/toolbar.module.metadata.json | 1 + dist/src/demo.html | 10 + dist/src/demo/app.component.html | 68 + .../demo/components/welcome.component.html | 12 + 385 files changed, 241548 insertions(+) create mode 100644 dist-demo/app.js create mode 100644 dist-demo/assets/fonts/OpenSans-Bold-webfont.eot create mode 100644 dist-demo/assets/fonts/OpenSans-Bold-webfont.svg create mode 100644 dist-demo/assets/fonts/OpenSans-Bold-webfont.ttf create mode 100644 dist-demo/assets/fonts/OpenSans-Bold-webfont.woff create mode 100644 dist-demo/assets/fonts/OpenSans-Bold-webfont.woff2 create mode 100644 dist-demo/assets/fonts/OpenSans-BoldItalic-webfont.eot create mode 100644 dist-demo/assets/fonts/OpenSans-BoldItalic-webfont.svg create mode 100644 dist-demo/assets/fonts/OpenSans-BoldItalic-webfont.ttf create mode 100644 dist-demo/assets/fonts/OpenSans-BoldItalic-webfont.woff create mode 100644 dist-demo/assets/fonts/OpenSans-BoldItalic-webfont.woff2 create mode 100644 dist-demo/assets/fonts/OpenSans-ExtraBold-webfont.eot create mode 100644 dist-demo/assets/fonts/OpenSans-ExtraBold-webfont.svg create mode 100644 dist-demo/assets/fonts/OpenSans-ExtraBold-webfont.ttf create mode 100644 dist-demo/assets/fonts/OpenSans-ExtraBold-webfont.woff create mode 100644 dist-demo/assets/fonts/OpenSans-ExtraBold-webfont.woff2 create mode 100644 dist-demo/assets/fonts/OpenSans-ExtraBoldItalic-webfont.eot create mode 100644 dist-demo/assets/fonts/OpenSans-ExtraBoldItalic-webfont.svg create mode 100644 dist-demo/assets/fonts/OpenSans-ExtraBoldItalic-webfont.ttf create mode 100644 dist-demo/assets/fonts/OpenSans-ExtraBoldItalic-webfont.woff create mode 100644 dist-demo/assets/fonts/OpenSans-ExtraBoldItalic-webfont.woff2 create mode 100644 dist-demo/assets/fonts/OpenSans-Italic-webfont.eot create mode 100644 dist-demo/assets/fonts/OpenSans-Italic-webfont.svg create mode 100644 dist-demo/assets/fonts/OpenSans-Italic-webfont.ttf create mode 100644 dist-demo/assets/fonts/OpenSans-Italic-webfont.woff create mode 100644 dist-demo/assets/fonts/OpenSans-Italic-webfont.woff2 create mode 100644 dist-demo/assets/fonts/OpenSans-Light-webfont.eot create mode 100644 dist-demo/assets/fonts/OpenSans-Light-webfont.svg create mode 100644 dist-demo/assets/fonts/OpenSans-Light-webfont.ttf create mode 100644 dist-demo/assets/fonts/OpenSans-Light-webfont.woff create mode 100644 dist-demo/assets/fonts/OpenSans-Light-webfont.woff2 create mode 100644 dist-demo/assets/fonts/OpenSans-LightItalic-webfont.eot create mode 100644 dist-demo/assets/fonts/OpenSans-LightItalic-webfont.svg create mode 100644 dist-demo/assets/fonts/OpenSans-LightItalic-webfont.ttf create mode 100644 dist-demo/assets/fonts/OpenSans-LightItalic-webfont.woff create mode 100644 dist-demo/assets/fonts/OpenSans-LightItalic-webfont.woff2 create mode 100644 dist-demo/assets/fonts/OpenSans-Regular-webfont.eot create mode 100644 dist-demo/assets/fonts/OpenSans-Regular-webfont.svg create mode 100644 dist-demo/assets/fonts/OpenSans-Regular-webfont.ttf create mode 100644 dist-demo/assets/fonts/OpenSans-Regular-webfont.woff create mode 100644 dist-demo/assets/fonts/OpenSans-Regular-webfont.woff2 create mode 100644 dist-demo/assets/fonts/OpenSans-Semibold-webfont.eot create mode 100644 dist-demo/assets/fonts/OpenSans-Semibold-webfont.svg create mode 100644 dist-demo/assets/fonts/OpenSans-Semibold-webfont.ttf create mode 100644 dist-demo/assets/fonts/OpenSans-Semibold-webfont.woff create mode 100644 dist-demo/assets/fonts/OpenSans-Semibold-webfont.woff2 create mode 100644 dist-demo/assets/fonts/OpenSans-SemiboldItalic-webfont.eot create mode 100644 dist-demo/assets/fonts/OpenSans-SemiboldItalic-webfont.svg create mode 100644 dist-demo/assets/fonts/OpenSans-SemiboldItalic-webfont.ttf create mode 100644 dist-demo/assets/fonts/OpenSans-SemiboldItalic-webfont.woff create mode 100644 dist-demo/assets/fonts/OpenSans-SemiboldItalic-webfont.woff2 create mode 100644 dist-demo/assets/fonts/PatternFlyIcons-webfont.eot create mode 100644 dist-demo/assets/fonts/PatternFlyIcons-webfont.svg create mode 100644 dist-demo/assets/fonts/PatternFlyIcons-webfont.ttf create mode 100644 dist-demo/assets/fonts/PatternFlyIcons-webfont.woff create mode 100644 dist-demo/assets/fonts/bg-login.jpg create mode 100644 dist-demo/assets/fonts/bg-modal-about-pf.png create mode 100644 dist-demo/assets/fonts/fontawesome-webfont.eot create mode 100644 dist-demo/assets/fonts/fontawesome-webfont.svg create mode 100644 dist-demo/assets/fonts/fontawesome-webfont.ttf create mode 100644 dist-demo/assets/fonts/fontawesome-webfont.woff create mode 100644 dist-demo/assets/fonts/fontawesome-webfont.woff2 create mode 100644 dist-demo/assets/fonts/glyphicons-halflings-regular.eot create mode 100644 dist-demo/assets/fonts/glyphicons-halflings-regular.svg create mode 100644 dist-demo/assets/fonts/glyphicons-halflings-regular.ttf create mode 100644 dist-demo/assets/fonts/glyphicons-halflings-regular.woff create mode 100644 dist-demo/assets/fonts/glyphicons-halflings-regular.woff2 create mode 100644 dist-demo/docs/assets/css/main.css create mode 100644 dist-demo/docs/assets/css/main.css.map create mode 100644 dist-demo/docs/assets/images/icons.png create mode 100644 dist-demo/docs/assets/images/icons@2x.png create mode 100644 dist-demo/docs/assets/images/widgets.png create mode 100644 dist-demo/docs/assets/images/widgets@2x.png create mode 100644 dist-demo/docs/assets/js/main.js create mode 100644 dist-demo/docs/assets/js/search.js create mode 100644 dist-demo/docs/classes/action.html create mode 100644 dist-demo/docs/classes/actioncomponent.html create mode 100644 dist-demo/docs/classes/actionconfig.html create mode 100644 dist-demo/docs/classes/actionmodule.html create mode 100644 dist-demo/docs/classes/emptystatecomponent.html create mode 100644 dist-demo/docs/classes/emptystateconfig.html create mode 100644 dist-demo/docs/classes/emptystatemodule.html create mode 100644 dist-demo/docs/classes/filter.html create mode 100644 dist-demo/docs/classes/filtercomponent.html create mode 100644 dist-demo/docs/classes/filterconfig.html create mode 100644 dist-demo/docs/classes/filterevent.html create mode 100644 dist-demo/docs/classes/filterfield.html create mode 100644 dist-demo/docs/classes/filterfieldscomponent.html create mode 100644 dist-demo/docs/classes/filtermodule.html create mode 100644 dist-demo/docs/classes/filterquery.html create mode 100644 dist-demo/docs/classes/filterresultscomponent.html create mode 100644 dist-demo/docs/classes/listcomponent.html create mode 100644 dist-demo/docs/classes/listconfig.html create mode 100644 dist-demo/docs/classes/listevent.html create mode 100644 dist-demo/docs/classes/listexpandtogglecomponent.html create mode 100644 dist-demo/docs/classes/listmodule.html create mode 100644 dist-demo/docs/classes/notification.html create mode 100644 dist-demo/docs/classes/notificationevent.html create mode 100644 dist-demo/docs/classes/notificationmodule.html create mode 100644 dist-demo/docs/classes/notificationservice.html create mode 100644 dist-demo/docs/classes/notificationtype.html create mode 100644 dist-demo/docs/classes/remainingcharscountdirective.html create mode 100644 dist-demo/docs/classes/remainingcharscountmodule.html create mode 100644 dist-demo/docs/classes/samplecomponent.html create mode 100644 dist-demo/docs/classes/samplemodule.html create mode 100644 dist-demo/docs/classes/searchhighlightmodule.html create mode 100644 dist-demo/docs/classes/searchhighlightpipe.html create mode 100644 dist-demo/docs/classes/sortcomponent.html create mode 100644 dist-demo/docs/classes/sortconfig.html create mode 100644 dist-demo/docs/classes/sortevent.html create mode 100644 dist-demo/docs/classes/sortfield.html create mode 100644 dist-demo/docs/classes/sortmodule.html create mode 100644 dist-demo/docs/classes/toastnotificationcomponent.html create mode 100644 dist-demo/docs/classes/toastnotificationlistcomponent.html create mode 100644 dist-demo/docs/classes/toolbarcomponent.html create mode 100644 dist-demo/docs/classes/toolbarconfig.html create mode 100644 dist-demo/docs/classes/toolbarmodule.html create mode 100644 dist-demo/docs/classes/toolbarview.html create mode 100644 dist-demo/docs/globals.html create mode 100644 dist-demo/docs/index.html create mode 100644 dist-demo/index.html create mode 100644 dist-demo/polyfills.js create mode 100644 dist-demo/src/app/action/examples/action-example.component.css create mode 100644 dist-demo/src/app/action/examples/action-example.component.html create mode 100644 dist-demo/src/app/action/examples/action-example.component.less create mode 100644 dist-demo/src/app/action/examples/action-example.component.ts create mode 100644 dist-demo/src/app/action/examples/action-example.module.ts create mode 100644 dist-demo/src/app/empty-state/examples/empty-state-example.component.html create mode 100644 dist-demo/src/app/empty-state/examples/empty-state-example.component.ts create mode 100644 dist-demo/src/app/empty-state/examples/empty-state-example.module.ts create mode 100644 dist-demo/src/app/filter/examples/filter-basic-example.component.html create mode 100644 dist-demo/src/app/filter/examples/filter-basic-example.component.ts create mode 100644 dist-demo/src/app/filter/examples/filter-example.component.html create mode 100644 dist-demo/src/app/filter/examples/filter-example.component.ts create mode 100644 dist-demo/src/app/filter/examples/filter-example.module.ts create mode 100644 dist-demo/src/app/filter/examples/filter-type-ahead-example.component.html create mode 100644 dist-demo/src/app/filter/examples/filter-type-ahead-example.component.ts create mode 100644 dist-demo/src/app/list/examples/basic-content.component.html create mode 100644 dist-demo/src/app/list/examples/basic-content.component.ts create mode 100644 dist-demo/src/app/list/examples/clusters-content.component.html create mode 100644 dist-demo/src/app/list/examples/clusters-content.component.ts create mode 100644 dist-demo/src/app/list/examples/hosts-content.component.html create mode 100644 dist-demo/src/app/list/examples/hosts-content.component.ts create mode 100644 dist-demo/src/app/list/examples/images-content.component.html create mode 100644 dist-demo/src/app/list/examples/images-content.component.ts create mode 100644 dist-demo/src/app/list/examples/list-basic-example.component.css create mode 100644 dist-demo/src/app/list/examples/list-basic-example.component.html create mode 100644 dist-demo/src/app/list/examples/list-basic-example.component.less create mode 100644 dist-demo/src/app/list/examples/list-basic-example.component.ts create mode 100644 dist-demo/src/app/list/examples/list-compound-example.component.html create mode 100644 dist-demo/src/app/list/examples/list-compound-example.component.ts create mode 100644 dist-demo/src/app/list/examples/list-example.component.html create mode 100644 dist-demo/src/app/list/examples/list-example.component.ts create mode 100644 dist-demo/src/app/list/examples/list-example.module.ts create mode 100644 dist-demo/src/app/list/examples/list-heading-example.component.css create mode 100644 dist-demo/src/app/list/examples/list-heading-example.component.html create mode 100644 dist-demo/src/app/list/examples/list-heading-example.component.less create mode 100644 dist-demo/src/app/list/examples/list-heading-example.component.ts create mode 100644 dist-demo/src/app/list/examples/nodes-content.component.html create mode 100644 dist-demo/src/app/list/examples/nodes-content.component.ts create mode 100644 dist-demo/src/app/notification/examples/notification-example.module.ts create mode 100644 dist-demo/src/app/notification/examples/notification-service-example.component.html create mode 100644 dist-demo/src/app/notification/examples/notification-service-example.component.ts create mode 100644 dist-demo/src/app/notification/examples/toast-notification-basic-example.component.html create mode 100644 dist-demo/src/app/notification/examples/toast-notification-basic-example.component.ts create mode 100644 dist-demo/src/app/notification/examples/toast-notification-example.component.html create mode 100644 dist-demo/src/app/notification/examples/toast-notification-example.component.ts create mode 100644 dist-demo/src/app/notification/examples/toast-notification-list-example.component.html create mode 100644 dist-demo/src/app/notification/examples/toast-notification-list-example.component.ts create mode 100644 dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.css create mode 100644 dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.html create mode 100644 dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.less create mode 100644 dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.ts create mode 100644 dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.module.ts create mode 100644 dist-demo/src/app/sample/examples/sample-example.component.html create mode 100644 dist-demo/src/app/sample/examples/sample-example.component.ts create mode 100644 dist-demo/src/app/sample/examples/sample-example.module.ts create mode 100644 dist-demo/src/app/search-highlight/examples/search-highlight-example.component.html create mode 100644 dist-demo/src/app/search-highlight/examples/search-highlight-example.component.ts create mode 100644 dist-demo/src/app/search-highlight/examples/search-highlight-example.module.ts create mode 100644 dist-demo/src/app/sort/examples/sort-example.component.html create mode 100644 dist-demo/src/app/sort/examples/sort-example.component.ts create mode 100644 dist-demo/src/app/sort/examples/sort-example.module.ts create mode 100644 dist-demo/src/app/toolbar/examples/toolbar-example.component.html create mode 100644 dist-demo/src/app/toolbar/examples/toolbar-example.component.ts create mode 100644 dist-demo/src/app/toolbar/examples/toolbar-example.module.ts create mode 100644 dist-demo/vendor.0.css create mode 100644 dist-demo/vendor.js create mode 100644 dist/README.md create mode 100644 dist/index.d.ts create mode 100644 dist/index.js create mode 100644 dist/index.js.map create mode 100644 dist/index.metadata.json create mode 100644 dist/package.json create mode 100644 dist/patternfly-ng.module.d.ts create mode 100644 dist/patternfly-ng.module.js create mode 100644 dist/patternfly-ng.module.js.map create mode 100644 dist/patternfly-ng.module.metadata.json create mode 100644 dist/src/app/action/action-config.d.ts create mode 100644 dist/src/app/action/action-config.js create mode 100644 dist/src/app/action/action-config.js.map create mode 100644 dist/src/app/action/action-config.metadata.json create mode 100644 dist/src/app/action/action.component.d.ts create mode 100644 dist/src/app/action/action.component.html create mode 100644 dist/src/app/action/action.component.js create mode 100644 dist/src/app/action/action.component.js.map create mode 100644 dist/src/app/action/action.component.metadata.json create mode 100644 dist/src/app/action/action.d.ts create mode 100644 dist/src/app/action/action.js create mode 100644 dist/src/app/action/action.js.map create mode 100644 dist/src/app/action/action.metadata.json create mode 100644 dist/src/app/action/action.module.d.ts create mode 100644 dist/src/app/action/action.module.js create mode 100644 dist/src/app/action/action.module.js.map create mode 100644 dist/src/app/action/action.module.metadata.json create mode 100644 dist/src/app/empty-state/empty-state-config.d.ts create mode 100644 dist/src/app/empty-state/empty-state-config.js create mode 100644 dist/src/app/empty-state/empty-state-config.js.map create mode 100644 dist/src/app/empty-state/empty-state-config.metadata.json create mode 100644 dist/src/app/empty-state/empty-state.component.d.ts create mode 100644 dist/src/app/empty-state/empty-state.component.html create mode 100644 dist/src/app/empty-state/empty-state.component.js create mode 100644 dist/src/app/empty-state/empty-state.component.js.map create mode 100644 dist/src/app/empty-state/empty-state.component.metadata.json create mode 100644 dist/src/app/empty-state/empty-state.module.d.ts create mode 100644 dist/src/app/empty-state/empty-state.module.js create mode 100644 dist/src/app/empty-state/empty-state.module.js.map create mode 100644 dist/src/app/empty-state/empty-state.module.metadata.json create mode 100644 dist/src/app/filter/filter-config.d.ts create mode 100644 dist/src/app/filter/filter-config.js create mode 100644 dist/src/app/filter/filter-config.js.map create mode 100644 dist/src/app/filter/filter-config.metadata.json create mode 100644 dist/src/app/filter/filter-event.d.ts create mode 100644 dist/src/app/filter/filter-event.js create mode 100644 dist/src/app/filter/filter-event.js.map create mode 100644 dist/src/app/filter/filter-event.metadata.json create mode 100644 dist/src/app/filter/filter-field.d.ts create mode 100644 dist/src/app/filter/filter-field.js create mode 100644 dist/src/app/filter/filter-field.js.map create mode 100644 dist/src/app/filter/filter-field.metadata.json create mode 100644 dist/src/app/filter/filter-fields.component.d.ts create mode 100644 dist/src/app/filter/filter-fields.component.html create mode 100644 dist/src/app/filter/filter-fields.component.js create mode 100644 dist/src/app/filter/filter-fields.component.js.map create mode 100644 dist/src/app/filter/filter-fields.component.metadata.json create mode 100644 dist/src/app/filter/filter-query.d.ts create mode 100644 dist/src/app/filter/filter-query.js create mode 100644 dist/src/app/filter/filter-query.js.map create mode 100644 dist/src/app/filter/filter-query.metadata.json create mode 100644 dist/src/app/filter/filter-results.component.d.ts create mode 100644 dist/src/app/filter/filter-results.component.html create mode 100644 dist/src/app/filter/filter-results.component.js create mode 100644 dist/src/app/filter/filter-results.component.js.map create mode 100644 dist/src/app/filter/filter-results.component.metadata.json create mode 100644 dist/src/app/filter/filter.component.d.ts create mode 100644 dist/src/app/filter/filter.component.html create mode 100644 dist/src/app/filter/filter.component.js create mode 100644 dist/src/app/filter/filter.component.js.map create mode 100644 dist/src/app/filter/filter.component.metadata.json create mode 100644 dist/src/app/filter/filter.d.ts create mode 100644 dist/src/app/filter/filter.js create mode 100644 dist/src/app/filter/filter.js.map create mode 100644 dist/src/app/filter/filter.metadata.json create mode 100644 dist/src/app/filter/filter.module.d.ts create mode 100644 dist/src/app/filter/filter.module.js create mode 100644 dist/src/app/filter/filter.module.js.map create mode 100644 dist/src/app/filter/filter.module.metadata.json create mode 100644 dist/src/app/list/list-config.d.ts create mode 100644 dist/src/app/list/list-config.js create mode 100644 dist/src/app/list/list-config.js.map create mode 100644 dist/src/app/list/list-config.metadata.json create mode 100644 dist/src/app/list/list-event.d.ts create mode 100644 dist/src/app/list/list-event.js create mode 100644 dist/src/app/list/list-event.js.map create mode 100644 dist/src/app/list/list-event.metadata.json create mode 100644 dist/src/app/list/list-expand-toggle.component.d.ts create mode 100644 dist/src/app/list/list-expand-toggle.component.html create mode 100644 dist/src/app/list/list-expand-toggle.component.js create mode 100644 dist/src/app/list/list-expand-toggle.component.js.map create mode 100644 dist/src/app/list/list-expand-toggle.component.metadata.json create mode 100644 dist/src/app/list/list.component.d.ts create mode 100644 dist/src/app/list/list.component.html create mode 100644 dist/src/app/list/list.component.js create mode 100644 dist/src/app/list/list.component.js.map create mode 100644 dist/src/app/list/list.component.metadata.json create mode 100644 dist/src/app/list/list.module.d.ts create mode 100644 dist/src/app/list/list.module.js create mode 100644 dist/src/app/list/list.module.js.map create mode 100644 dist/src/app/list/list.module.metadata.json create mode 100644 dist/src/app/notification/notification-event.d.ts create mode 100644 dist/src/app/notification/notification-event.js create mode 100644 dist/src/app/notification/notification-event.js.map create mode 100644 dist/src/app/notification/notification-event.metadata.json create mode 100644 dist/src/app/notification/notification-type.d.ts create mode 100644 dist/src/app/notification/notification-type.js create mode 100644 dist/src/app/notification/notification-type.js.map create mode 100644 dist/src/app/notification/notification-type.metadata.json create mode 100644 dist/src/app/notification/notification.d.ts create mode 100644 dist/src/app/notification/notification.js create mode 100644 dist/src/app/notification/notification.js.map create mode 100644 dist/src/app/notification/notification.metadata.json create mode 100644 dist/src/app/notification/notification.module.d.ts create mode 100644 dist/src/app/notification/notification.module.js create mode 100644 dist/src/app/notification/notification.module.js.map create mode 100644 dist/src/app/notification/notification.module.metadata.json create mode 100644 dist/src/app/notification/notification.service.d.ts create mode 100644 dist/src/app/notification/notification.service.js create mode 100644 dist/src/app/notification/notification.service.js.map create mode 100644 dist/src/app/notification/notification.service.metadata.json create mode 100644 dist/src/app/notification/toast-notification-list.component.d.ts create mode 100644 dist/src/app/notification/toast-notification-list.component.html create mode 100644 dist/src/app/notification/toast-notification-list.component.js create mode 100644 dist/src/app/notification/toast-notification-list.component.js.map create mode 100644 dist/src/app/notification/toast-notification-list.component.metadata.json create mode 100644 dist/src/app/notification/toast-notification.component.d.ts create mode 100644 dist/src/app/notification/toast-notification.component.html create mode 100644 dist/src/app/notification/toast-notification.component.js create mode 100644 dist/src/app/notification/toast-notification.component.js.map create mode 100644 dist/src/app/notification/toast-notification.component.metadata.json create mode 100644 dist/src/app/remaining-chars-count/remaining-chars-count.directive.d.ts create mode 100644 dist/src/app/remaining-chars-count/remaining-chars-count.directive.js create mode 100644 dist/src/app/remaining-chars-count/remaining-chars-count.directive.js.map create mode 100644 dist/src/app/remaining-chars-count/remaining-chars-count.directive.metadata.json create mode 100644 dist/src/app/remaining-chars-count/remaining-chars-count.module.d.ts create mode 100644 dist/src/app/remaining-chars-count/remaining-chars-count.module.js create mode 100644 dist/src/app/remaining-chars-count/remaining-chars-count.module.js.map create mode 100644 dist/src/app/remaining-chars-count/remaining-chars-count.module.metadata.json create mode 100644 dist/src/app/sample/sample.component.d.ts create mode 100644 dist/src/app/sample/sample.component.html create mode 100644 dist/src/app/sample/sample.component.js create mode 100644 dist/src/app/sample/sample.component.js.map create mode 100644 dist/src/app/sample/sample.component.metadata.json create mode 100644 dist/src/app/sample/sample.module.d.ts create mode 100644 dist/src/app/sample/sample.module.js create mode 100644 dist/src/app/sample/sample.module.js.map create mode 100644 dist/src/app/sample/sample.module.metadata.json create mode 100644 dist/src/app/search-highlight/search-highlight.module.d.ts create mode 100644 dist/src/app/search-highlight/search-highlight.module.js create mode 100644 dist/src/app/search-highlight/search-highlight.module.js.map create mode 100644 dist/src/app/search-highlight/search-highlight.module.metadata.json create mode 100644 dist/src/app/search-highlight/search-highlight.pipe.d.ts create mode 100644 dist/src/app/search-highlight/search-highlight.pipe.js create mode 100644 dist/src/app/search-highlight/search-highlight.pipe.js.map create mode 100644 dist/src/app/search-highlight/search-highlight.pipe.metadata.json create mode 100644 dist/src/app/sort/sort-config.d.ts create mode 100644 dist/src/app/sort/sort-config.js create mode 100644 dist/src/app/sort/sort-config.js.map create mode 100644 dist/src/app/sort/sort-config.metadata.json create mode 100644 dist/src/app/sort/sort-event.d.ts create mode 100644 dist/src/app/sort/sort-event.js create mode 100644 dist/src/app/sort/sort-event.js.map create mode 100644 dist/src/app/sort/sort-event.metadata.json create mode 100644 dist/src/app/sort/sort-field.d.ts create mode 100644 dist/src/app/sort/sort-field.js create mode 100644 dist/src/app/sort/sort-field.js.map create mode 100644 dist/src/app/sort/sort-field.metadata.json create mode 100644 dist/src/app/sort/sort.component.d.ts create mode 100644 dist/src/app/sort/sort.component.html create mode 100644 dist/src/app/sort/sort.component.js create mode 100644 dist/src/app/sort/sort.component.js.map create mode 100644 dist/src/app/sort/sort.component.metadata.json create mode 100644 dist/src/app/sort/sort.module.d.ts create mode 100644 dist/src/app/sort/sort.module.js create mode 100644 dist/src/app/sort/sort.module.js.map create mode 100644 dist/src/app/sort/sort.module.metadata.json create mode 100644 dist/src/app/toolbar/toolbar-config.d.ts create mode 100644 dist/src/app/toolbar/toolbar-config.js create mode 100644 dist/src/app/toolbar/toolbar-config.js.map create mode 100644 dist/src/app/toolbar/toolbar-config.metadata.json create mode 100644 dist/src/app/toolbar/toolbar-view.d.ts create mode 100644 dist/src/app/toolbar/toolbar-view.js create mode 100644 dist/src/app/toolbar/toolbar-view.js.map create mode 100644 dist/src/app/toolbar/toolbar-view.metadata.json create mode 100644 dist/src/app/toolbar/toolbar.component.d.ts create mode 100644 dist/src/app/toolbar/toolbar.component.html create mode 100644 dist/src/app/toolbar/toolbar.component.js create mode 100644 dist/src/app/toolbar/toolbar.component.js.map create mode 100644 dist/src/app/toolbar/toolbar.component.metadata.json create mode 100644 dist/src/app/toolbar/toolbar.module.d.ts create mode 100644 dist/src/app/toolbar/toolbar.module.js create mode 100644 dist/src/app/toolbar/toolbar.module.js.map create mode 100644 dist/src/app/toolbar/toolbar.module.metadata.json create mode 100644 dist/src/demo.html create mode 100644 dist/src/demo/app.component.html create mode 100644 dist/src/demo/components/welcome.component.html diff --git a/dist-demo/app.js b/dist-demo/app.js new file mode 100644 index 000000000..5a97079d0 --- /dev/null +++ b/dist-demo/app.js @@ -0,0 +1,1391 @@ +webpackJsonp([1],{ + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/app/action/examples/action-example.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \".my-actions {\\n display: flex;\\n justify-content: flex-end;\\n}\\n.my-actions .btn {\\n margin-left: 10px;\\n}\\n.my-actions .dropdown-kebab-pf .btn {\\n margin-left: 0;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/./home/travis/build/patternfly/patternfly-ng/src/app/action/examples/action-example.component.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/app/action/examples/action-example.component.less\"],\"names\":[],\"mappings\":\"AAEA;EACE,cAAA;EACA,0BAAA;CCDD;ADDD;EAII,kBAAA;CCAH;ADJD;EAQM,eAAA;CCDL\",\"file\":\"action-example.component.less\",\"sourcesContent\":[\"@import (reference) \\\"../../../assets/stylesheets/patternfly-ng\\\";\\n\\n.my-actions {\\n display: flex;\\n justify-content: flex-end;\\n .btn {\\n margin-left: 10px;\\n }\\n .dropdown-kebab-pf {\\n .btn {\\n margin-left: 0;\\n }\\n }\\n}\\n\",\".my-actions {\\n display: flex;\\n justify-content: flex-end;\\n}\\n.my-actions .btn {\\n margin-left: 10px;\\n}\\n.my-actions .dropdown-kebab-pf .btn {\\n margin-left: 0;\\n}\\n\"],\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvYWN0aW9uL2V4YW1wbGVzL2FjdGlvbi1leGFtcGxlLmNvbXBvbmVudC5sZXNzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hY3Rpb24vZXhhbXBsZXMvYWN0aW9uLWV4YW1wbGUuY29tcG9uZW50Lmxlc3M/MmI5NCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKCk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIubXktYWN0aW9ucyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuLm15LWFjdGlvbnMgLmJ0biB7XFxuICBtYXJnaW4tbGVmdDogMTBweDtcXG59XFxuLm15LWFjdGlvbnMgLmRyb3Bkb3duLWtlYmFiLXBmIC5idG4ge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblwiLCBcIlwiLCB7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCIvLi9ob21lL3RyYXZpcy9idWlsZC9wYXR0ZXJuZmx5L3BhdHRlcm5mbHktbmcvc3JjL2FwcC9hY3Rpb24vZXhhbXBsZXMvYWN0aW9uLWV4YW1wbGUuY29tcG9uZW50Lmxlc3NcIixcIi8uL2hvbWUvdHJhdmlzL2J1aWxkL3BhdHRlcm5mbHkvcGF0dGVybmZseS1uZy9zcmMvYXBwL2FjdGlvbi9leGFtcGxlcy9hY3Rpb24tZXhhbXBsZS5jb21wb25lbnQubGVzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFFQTtFQUNFLGNBQUE7RUFDQSwwQkFBQTtDQ0REO0FEREQ7RUFJSSxrQkFBQTtDQ0FIO0FESkQ7RUFRTSxlQUFBO0NDRExcIixcImZpbGVcIjpcImFjdGlvbi1leGFtcGxlLmNvbXBvbmVudC5sZXNzXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIkBpbXBvcnQgKHJlZmVyZW5jZSkgXFxcIi4uLy4uLy4uL2Fzc2V0cy9zdHlsZXNoZWV0cy9wYXR0ZXJuZmx5LW5nXFxcIjtcXG5cXG4ubXktYWN0aW9ucyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIC5idG4ge1xcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcXG4gIH1cXG4gIC5kcm9wZG93bi1rZWJhYi1wZiB7XFxuICAgIC5idG4ge1xcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgICB9XFxuICB9XFxufVxcblwiLFwiLm15LWFjdGlvbnMge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxufVxcbi5teS1hY3Rpb25zIC5idG4ge1xcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XFxufVxcbi5teS1hY3Rpb25zIC5kcm9wZG93bi1rZWJhYi1wZiAuYnRuIHtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJ3ZWJwYWNrOi8vXCJ9XSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jc3MtbG9hZGVyP3tcInNvdXJjZU1hcFwiOnRydWUsXCJjb250ZXh0XCI6XCIvXCJ9IS4vfi9sZXNzLWxvYWRlci9kaXN0P3tcInBhdGhzXCI6W1wiLi9+L3BhdHRlcm5mbHkvbm9kZV9tb2R1bGVzXCJdLFwic291cmNlTWFwXCI6dHJ1ZX0hLi9zcmMvYXBwL2FjdGlvbi9leGFtcGxlcy9hY3Rpb24tZXhhbXBsZS5jb21wb25lbnQubGVzc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvYWN0aW9uL2V4YW1wbGVzL2FjdGlvbi1leGFtcGxlLmNvbXBvbmVudC5sZXNzXG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/app/empty-state/empty-state.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \".blank-slate-pf {\\n margin-bottom: 0;\\n}\\n.blank-slate-pf button {\\n margin-right: 4px;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/./home/travis/build/patternfly/patternfly-ng/src/app/empty-state/empty-state.component.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/app/empty-state/empty-state.component.less\"],\"names\":[],\"mappings\":\"AAEA;EACE,iBAAA;CCDD;ADAD;EAGI,kBAAA;CCAH\",\"file\":\"empty-state.component.less\",\"sourcesContent\":[\"@import (reference) \\\"../../assets/stylesheets/patternfly-ng\\\";\\n\\n.blank-slate-pf {\\n margin-bottom: 0;\\n button {\\n margin-right: 4px;\\n }\\n}\\n\",\".blank-slate-pf {\\n margin-bottom: 0;\\n}\\n.blank-slate-pf button {\\n margin-right: 4px;\\n}\\n\"],\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50Lmxlc3MuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudC5sZXNzPzU2NDciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKSgpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmJsYW5rLXNsYXRlLXBmIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcbi5ibGFuay1zbGF0ZS1wZiBidXR0b24ge1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XFxufVxcblwiLCBcIlwiLCB7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCIvLi9ob21lL3RyYXZpcy9idWlsZC9wYXR0ZXJuZmx5L3BhdHRlcm5mbHktbmcvc3JjL2FwcC9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQubGVzc1wiLFwiLy4vaG9tZS90cmF2aXMvYnVpbGQvcGF0dGVybmZseS9wYXR0ZXJuZmx5LW5nL3NyYy9hcHAvZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50Lmxlc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUE7RUFDRSxpQkFBQTtDQ0REO0FEQUQ7RUFHSSxrQkFBQTtDQ0FIXCIsXCJmaWxlXCI6XCJlbXB0eS1zdGF0ZS5jb21wb25lbnQubGVzc1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCJAaW1wb3J0IChyZWZlcmVuY2UpIFxcXCIuLi8uLi9hc3NldHMvc3R5bGVzaGVldHMvcGF0dGVybmZseS1uZ1xcXCI7XFxuXFxuLmJsYW5rLXNsYXRlLXBmIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBidXR0b24ge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDRweDtcXG4gIH1cXG59XFxuXCIsXCIuYmxhbmstc2xhdGUtcGYge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuLmJsYW5rLXNsYXRlLXBmIGJ1dHRvbiB7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwid2VicGFjazovL1wifV0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY3NzLWxvYWRlcj97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL34vbGVzcy1sb2FkZXIvZGlzdD97XCJwYXRoc1wiOltcIi4vfi9wYXR0ZXJuZmx5L25vZGVfbW9kdWxlc1wiXSxcInNvdXJjZU1hcFwiOnRydWV9IS4vc3JjL2FwcC9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQubGVzc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50Lmxlc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/app/filter/filter-fields.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \".filter-pf a {\\n cursor: pointer;\\n}\\n.filter-pf.filter-fields .form-group {\\n padding-left: 0;\\n width: 275px;\\n}\\n.filter-pf.filter-fields .btn-default {\\n font-size: 12px;\\n}\\n.filter-pf.filter-fields .typeahead-input-container {\\n position: relative;\\n padding-right: 0;\\n}\\n.filter-pf.filter-fields .typeahead-input-container .caret {\\n position: absolute;\\n top: 10px;\\n right: 5px;\\n z-index: 2;\\n}\\n.filter-select .btn-default {\\n background-color: #fff;\\n background-image: none;\\n color: #8b8d8f;\\n font-size: 12px;\\n font-style: italic;\\n font-weight: 400;\\n}\\n.filter-select .avatar {\\n height: 20px;\\n margin-right: 5px;\\n}\\n.input-group .input-group-btn .dropdown-menu > .selected > a {\\n background-color: #0088ce !important;\\n border-color: #0088ce !important;\\n color: #fff;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/./home/travis/build/patternfly/patternfly-ng/src/app/filter/filter-fields.component.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/app/filter/filter-fields.component.less\"],\"names\":[],\"mappings\":\"AAEA;EACM,gBAAA;CCDL;ADEC;EAEI,gBAAA;EACA,aAAA;CCDL;ADFC;EAKiB,gBAAA;CCAlB;ADLC;EAOI,mBAAA;EACA,iBAAA;CCCL;ADTC;EAUM,mBAAA;EACA,UAAA;EACA,WAAA;EACA,WAAA;CCEP;ADID;EAEI,uBAAA;EACA,uBAAA;EACA,eAAA;EACA,gBAAA;EACA,mBAAA;EACA,iBAAA;CCHH;ADJD;EAUI,aAAA;EACA,kBAAA;CCHH;ADOD;EAGM,qCAAA;EACA,iCAAA;EACA,YAAA;CCPL\",\"file\":\"filter-fields.component.less\",\"sourcesContent\":[\"@import (reference) \\\"../../assets/stylesheets/patternfly-ng\\\";\\n\\n.filter-pf {\\n a { cursor: pointer; }\\n &.filter-fields {\\n .form-group {\\n padding-left: 0;\\n width: 275px;\\n }\\n .btn-default { font-size: 12px; }\\n .typeahead-input-container {\\n position: relative;\\n padding-right: 0;\\n .caret {\\n position: absolute;\\n top: 10px;\\n right: 5px;\\n z-index: 2;\\n }\\n }\\n }\\n}\\n\\n.filter-select {\\n .btn-default {\\n background-color: @color-pf-white;\\n background-image: none;\\n color: @color-pf-black-500;\\n font-size: 12px;\\n font-style: italic;\\n font-weight: 400;\\n }\\n .avatar {\\n height: 20px;\\n margin-right: 5px;\\n }\\n}\\n\\n.input-group {\\n .input-group-btn {\\n .dropdown-menu>.selected>a {\\n background-color: @color-pf-blue !important;\\n border-color: @color-pf-blue-400 !important; // was #0076b7\\n color: @color-pf-white;\\n }\\n }\\n}\\n\",\".filter-pf a {\\n cursor: pointer;\\n}\\n.filter-pf.filter-fields .form-group {\\n padding-left: 0;\\n width: 275px;\\n}\\n.filter-pf.filter-fields .btn-default {\\n font-size: 12px;\\n}\\n.filter-pf.filter-fields .typeahead-input-container {\\n position: relative;\\n padding-right: 0;\\n}\\n.filter-pf.filter-fields .typeahead-input-container .caret {\\n position: absolute;\\n top: 10px;\\n right: 5px;\\n z-index: 2;\\n}\\n.filter-select .btn-default {\\n background-color: #fff;\\n background-image: none;\\n color: #8b8d8f;\\n font-size: 12px;\\n font-style: italic;\\n font-weight: 400;\\n}\\n.filter-select .avatar {\\n height: 20px;\\n margin-right: 5px;\\n}\\n.input-group .input-group-btn .dropdown-menu > .selected > a {\\n background-color: #0088ce !important;\\n border-color: #0088ce !important;\\n color: #fff;\\n}\\n\"],\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvZmlsdGVyL2ZpbHRlci1maWVsZHMuY29tcG9uZW50Lmxlc3MuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2ZpbHRlci9maWx0ZXItZmllbGRzLmNvbXBvbmVudC5sZXNzP2JlOTUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKSgpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmZpbHRlci1wZiBhIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLmZpbHRlci1wZi5maWx0ZXItZmllbGRzIC5mb3JtLWdyb3VwIHtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG4gIHdpZHRoOiAyNzVweDtcXG59XFxuLmZpbHRlci1wZi5maWx0ZXItZmllbGRzIC5idG4tZGVmYXVsdCB7XFxuICBmb250LXNpemU6IDEycHg7XFxufVxcbi5maWx0ZXItcGYuZmlsdGVyLWZpZWxkcyAudHlwZWFoZWFkLWlucHV0LWNvbnRhaW5lciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbn1cXG4uZmlsdGVyLXBmLmZpbHRlci1maWVsZHMgLnR5cGVhaGVhZC1pbnB1dC1jb250YWluZXIgLmNhcmV0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTBweDtcXG4gIHJpZ2h0OiA1cHg7XFxuICB6LWluZGV4OiAyO1xcbn1cXG4uZmlsdGVyLXNlbGVjdCAuYnRuLWRlZmF1bHQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxuICBjb2xvcjogIzhiOGQ4ZjtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcbi5maWx0ZXItc2VsZWN0IC5hdmF0YXIge1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XFxufVxcbi5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYnRuIC5kcm9wZG93bi1tZW51ID4gLnNlbGVjdGVkID4gYSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4OGNlICFpbXBvcnRhbnQ7XFxuICBib3JkZXItY29sb3I6ICMwMDg4Y2UgIWltcG9ydGFudDtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cIiwgXCJcIiwge1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wiLy4vaG9tZS90cmF2aXMvYnVpbGQvcGF0dGVybmZseS9wYXR0ZXJuZmx5LW5nL3NyYy9hcHAvZmlsdGVyL2ZpbHRlci1maWVsZHMuY29tcG9uZW50Lmxlc3NcIixcIi8uL2hvbWUvdHJhdmlzL2J1aWxkL3BhdHRlcm5mbHkvcGF0dGVybmZseS1uZy9zcmMvYXBwL2ZpbHRlci9maWx0ZXItZmllbGRzLmNvbXBvbmVudC5sZXNzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUVBO0VBQ00sZ0JBQUE7Q0NETDtBREVDO0VBRUksZ0JBQUE7RUFDQSxhQUFBO0NDREw7QURGQztFQUtpQixnQkFBQTtDQ0FsQjtBRExDO0VBT0ksbUJBQUE7RUFDQSxpQkFBQTtDQ0NMO0FEVEM7RUFVTSxtQkFBQTtFQUNBLFVBQUE7RUFDQSxXQUFBO0VBQ0EsV0FBQTtDQ0VQO0FESUQ7RUFFSSx1QkFBQTtFQUNBLHVCQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxpQkFBQTtDQ0hIO0FESkQ7RUFVSSxhQUFBO0VBQ0Esa0JBQUE7Q0NISDtBRE9EO0VBR00scUNBQUE7RUFDQSxpQ0FBQTtFQUNBLFlBQUE7Q0NQTFwiLFwiZmlsZVwiOlwiZmlsdGVyLWZpZWxkcy5jb21wb25lbnQubGVzc1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCJAaW1wb3J0IChyZWZlcmVuY2UpIFxcXCIuLi8uLi9hc3NldHMvc3R5bGVzaGVldHMvcGF0dGVybmZseS1uZ1xcXCI7XFxuXFxuLmZpbHRlci1wZiB7XFxuICBhIHsgY3Vyc29yOiBwb2ludGVyOyB9XFxuICAmLmZpbHRlci1maWVsZHMge1xcbiAgICAuZm9ybS1ncm91cCB7XFxuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgICAgIHdpZHRoOiAyNzVweDtcXG4gICAgfVxcbiAgICAuYnRuLWRlZmF1bHQgeyBmb250LXNpemU6IDEycHg7IH1cXG4gICAgLnR5cGVhaGVhZC1pbnB1dC1jb250YWluZXIge1xcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICAgIC5jYXJldCB7XFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICB0b3A6IDEwcHg7XFxuICAgICAgICByaWdodDogNXB4O1xcbiAgICAgICAgei1pbmRleDogMjtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuLmZpbHRlci1zZWxlY3Qge1xcbiAgLmJ0bi1kZWZhdWx0IHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGNvbG9yLXBmLXdoaXRlO1xcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbiAgICBjb2xvcjogQGNvbG9yLXBmLWJsYWNrLTUwMDtcXG4gICAgZm9udC1zaXplOiAxMnB4O1xcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XFxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICB9XFxuICAuYXZhdGFyIHtcXG4gICAgaGVpZ2h0OiAyMHB4O1xcbiAgICBtYXJnaW4tcmlnaHQ6IDVweDtcXG4gIH1cXG59XFxuXFxuLmlucHV0LWdyb3VwIHtcXG4gIC5pbnB1dC1ncm91cC1idG4ge1xcbiAgICAuZHJvcGRvd24tbWVudT4uc2VsZWN0ZWQ+YSB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGNvbG9yLXBmLWJsdWUgIWltcG9ydGFudDtcXG4gICAgICBib3JkZXItY29sb3I6IEBjb2xvci1wZi1ibHVlLTQwMCAhaW1wb3J0YW50OyAvLyB3YXMgIzAwNzZiN1xcbiAgICAgIGNvbG9yOiBAY29sb3ItcGYtd2hpdGU7XFxuICAgIH1cXG4gIH1cXG59XFxuXCIsXCIuZmlsdGVyLXBmIGEge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4uZmlsdGVyLXBmLmZpbHRlci1maWVsZHMgLmZvcm0tZ3JvdXAge1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgd2lkdGg6IDI3NXB4O1xcbn1cXG4uZmlsdGVyLXBmLmZpbHRlci1maWVsZHMgLmJ0bi1kZWZhdWx0IHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG59XFxuLmZpbHRlci1wZi5maWx0ZXItZmllbGRzIC50eXBlYWhlYWQtaW5wdXQtY29udGFpbmVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHBhZGRpbmctcmlnaHQ6IDA7XFxufVxcbi5maWx0ZXItcGYuZmlsdGVyLWZpZWxkcyAudHlwZWFoZWFkLWlucHV0LWNvbnRhaW5lciAuY2FyZXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMHB4O1xcbiAgcmlnaHQ6IDVweDtcXG4gIHotaW5kZXg6IDI7XFxufVxcbi5maWx0ZXItc2VsZWN0IC5idG4tZGVmYXVsdCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG4gIGNvbG9yOiAjOGI4ZDhmO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgZm9udC1zdHlsZTogaXRhbGljO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuLmZpbHRlci1zZWxlY3QgLmF2YXRhciB7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBtYXJnaW4tcmlnaHQ6IDVweDtcXG59XFxuLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1idG4gLmRyb3Bkb3duLW1lbnUgPiAuc2VsZWN0ZWQgPiBhIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDg4Y2UgIWltcG9ydGFudDtcXG4gIGJvcmRlci1jb2xvcjogIzAwODhjZSAhaW1wb3J0YW50O1xcbiAgY29sb3I6ICNmZmY7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIndlYnBhY2s6Ly9cIn1dKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Nzcy1sb2FkZXI/e1wic291cmNlTWFwXCI6dHJ1ZSxcImNvbnRleHRcIjpcIi9cIn0hLi9+L2xlc3MtbG9hZGVyL2Rpc3Q/e1wicGF0aHNcIjpbXCIuL34vcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvZmlsdGVyL2ZpbHRlci1maWVsZHMuY29tcG9uZW50Lmxlc3Ncbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanM/e1wic291cmNlTWFwXCI6dHJ1ZSxcImNvbnRleHRcIjpcIi9cIn0hLi9ub2RlX21vZHVsZXMvbGVzcy1sb2FkZXIvZGlzdC9pbmRleC5qcz97XCJwYXRoc1wiOltcIi4vbm9kZV9tb2R1bGVzL3BhdHRlcm5mbHkvbm9kZV9tb2R1bGVzXCJdLFwic291cmNlTWFwXCI6dHJ1ZX0hLi9zcmMvYXBwL2ZpbHRlci9maWx0ZXItZmllbGRzLmNvbXBvbmVudC5sZXNzXG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/app/filter/filter-results.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \".filter-pf a {\\n cursor: pointer;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/./home/travis/build/patternfly/patternfly-ng/src/app/filter/filter-results.component.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/app/filter/filter-results.component.less\"],\"names\":[],\"mappings\":\"AAEA;EACM,gBAAA;CCDL\",\"file\":\"filter-results.component.less\",\"sourcesContent\":[\"@import (reference) \\\"../../assets/stylesheets/patternfly-ng\\\";\\n\\n.filter-pf {\\n a { cursor: pointer; }\\n}\\n\",\".filter-pf a {\\n cursor: pointer;\\n}\\n\"],\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvZmlsdGVyL2ZpbHRlci1yZXN1bHRzLmNvbXBvbmVudC5sZXNzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9maWx0ZXIvZmlsdGVyLXJlc3VsdHMuY29tcG9uZW50Lmxlc3M/OWU5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKCk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIuZmlsdGVyLXBmIGEge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cIiwgXCJcIiwge1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wiLy4vaG9tZS90cmF2aXMvYnVpbGQvcGF0dGVybmZseS9wYXR0ZXJuZmx5LW5nL3NyYy9hcHAvZmlsdGVyL2ZpbHRlci1yZXN1bHRzLmNvbXBvbmVudC5sZXNzXCIsXCIvLi9ob21lL3RyYXZpcy9idWlsZC9wYXR0ZXJuZmx5L3BhdHRlcm5mbHktbmcvc3JjL2FwcC9maWx0ZXIvZmlsdGVyLXJlc3VsdHMuY29tcG9uZW50Lmxlc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUE7RUFDTSxnQkFBQTtDQ0RMXCIsXCJmaWxlXCI6XCJmaWx0ZXItcmVzdWx0cy5jb21wb25lbnQubGVzc1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCJAaW1wb3J0IChyZWZlcmVuY2UpIFxcXCIuLi8uLi9hc3NldHMvc3R5bGVzaGVldHMvcGF0dGVybmZseS1uZ1xcXCI7XFxuXFxuLmZpbHRlci1wZiB7XFxuICBhIHsgY3Vyc29yOiBwb2ludGVyOyB9XFxufVxcblwiLFwiLmZpbHRlci1wZiBhIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwid2VicGFjazovL1wifV0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY3NzLWxvYWRlcj97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL34vbGVzcy1sb2FkZXIvZGlzdD97XCJwYXRoc1wiOltcIi4vfi9wYXR0ZXJuZmx5L25vZGVfbW9kdWxlc1wiXSxcInNvdXJjZU1hcFwiOnRydWV9IS4vc3JjL2FwcC9maWx0ZXIvZmlsdGVyLXJlc3VsdHMuY29tcG9uZW50Lmxlc3Ncbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanM/e1wic291cmNlTWFwXCI6dHJ1ZSxcImNvbnRleHRcIjpcIi9cIn0hLi9ub2RlX21vZHVsZXMvbGVzcy1sb2FkZXIvZGlzdC9pbmRleC5qcz97XCJwYXRoc1wiOltcIi4vbm9kZV9tb2R1bGVzL3BhdHRlcm5mbHkvbm9kZV9tb2R1bGVzXCJdLFwic291cmNlTWFwXCI6dHJ1ZX0hLi9zcmMvYXBwL2ZpbHRlci9maWx0ZXItcmVzdWx0cy5jb21wb25lbnQubGVzc1xuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/app/filter/filter.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \".filter-pf a {\\n cursor: pointer;\\n}\\n.dropdown-menu {\\n min-width: 176px;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/./home/travis/build/patternfly/patternfly-ng/src/app/filter/filter.component.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/app/filter/filter.component.less\"],\"names\":[],\"mappings\":\"AAEA;EACM,gBAAA;CCDL;ADGD;EAAiB,iBAAA;CCAhB\",\"file\":\"filter.component.less\",\"sourcesContent\":[\"@import (reference) \\\"../../assets/stylesheets/patternfly-ng\\\";\\n\\n.filter-pf {\\n a { cursor: pointer; }\\n}\\n.dropdown-menu { min-width: 176px; }\\n\",\".filter-pf a {\\n cursor: pointer;\\n}\\n.dropdown-menu {\\n min-width: 176px;\\n}\\n\"],\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQubGVzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9hcHAvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQubGVzcz8zNGY4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5maWx0ZXItcGYgYSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5kcm9wZG93bi1tZW51IHtcXG4gIG1pbi13aWR0aDogMTc2cHg7XFxufVxcblwiLCBcIlwiLCB7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCIvLi9ob21lL3RyYXZpcy9idWlsZC9wYXR0ZXJuZmx5L3BhdHRlcm5mbHktbmcvc3JjL2FwcC9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5sZXNzXCIsXCIvLi9ob21lL3RyYXZpcy9idWlsZC9wYXR0ZXJuZmx5L3BhdHRlcm5mbHktbmcvc3JjL2FwcC9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5sZXNzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUVBO0VBQ00sZ0JBQUE7Q0NETDtBREdEO0VBQWlCLGlCQUFBO0NDQWhCXCIsXCJmaWxlXCI6XCJmaWx0ZXIuY29tcG9uZW50Lmxlc3NcIixcInNvdXJjZXNDb250ZW50XCI6W1wiQGltcG9ydCAocmVmZXJlbmNlKSBcXFwiLi4vLi4vYXNzZXRzL3N0eWxlc2hlZXRzL3BhdHRlcm5mbHktbmdcXFwiO1xcblxcbi5maWx0ZXItcGYge1xcbiAgYSB7IGN1cnNvcjogcG9pbnRlcjsgfVxcbn1cXG4uZHJvcGRvd24tbWVudSB7IG1pbi13aWR0aDogMTc2cHg7IH1cXG5cIixcIi5maWx0ZXItcGYgYSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5kcm9wZG93bi1tZW51IHtcXG4gIG1pbi13aWR0aDogMTc2cHg7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIndlYnBhY2s6Ly9cIn1dKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Nzcy1sb2FkZXI/e1wic291cmNlTWFwXCI6dHJ1ZSxcImNvbnRleHRcIjpcIi9cIn0hLi9+L2xlc3MtbG9hZGVyL2Rpc3Q/e1wicGF0aHNcIjpbXCIuL34vcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQubGVzc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQubGVzc1xuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/app/list/examples/list-basic-example.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \".btn-default.red {\\n color: red;\\n}\\n.dropdown-kebab-pf.red .btn-link {\\n color: red;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/./home/travis/build/patternfly/patternfly-ng/src/app/list/examples/list-basic-example.component.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/app/list/examples/list-basic-example.component.less\"],\"names\":[],\"mappings\":\"AAEA;EACE,WAAA;CCDD;ADID;EACE,WAAA;CCFD\",\"file\":\"list-basic-example.component.less\",\"sourcesContent\":[\"@import (reference) \\\"../../../assets/stylesheets/patternfly-ng\\\";\\n\\n.btn-default.red {\\n color: red;\\n}\\n\\n.dropdown-kebab-pf.red .btn-link {\\n color: red;\\n}\\n\",\".btn-default.red {\\n color: red;\\n}\\n.dropdown-kebab-pf.red .btn-link {\\n color: red;\\n}\\n\"],\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvbGlzdC9leGFtcGxlcy9saXN0LWJhc2ljLWV4YW1wbGUuY29tcG9uZW50Lmxlc3MuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2xpc3QvZXhhbXBsZXMvbGlzdC1iYXNpYy1leGFtcGxlLmNvbXBvbmVudC5sZXNzPzkzMGQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKSgpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmJ0bi1kZWZhdWx0LnJlZCB7XFxuICBjb2xvcjogcmVkO1xcbn1cXG4uZHJvcGRvd24ta2ViYWItcGYucmVkIC5idG4tbGluayB7XFxuICBjb2xvcjogcmVkO1xcbn1cXG5cIiwgXCJcIiwge1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wiLy4vaG9tZS90cmF2aXMvYnVpbGQvcGF0dGVybmZseS9wYXR0ZXJuZmx5LW5nL3NyYy9hcHAvbGlzdC9leGFtcGxlcy9saXN0LWJhc2ljLWV4YW1wbGUuY29tcG9uZW50Lmxlc3NcIixcIi8uL2hvbWUvdHJhdmlzL2J1aWxkL3BhdHRlcm5mbHkvcGF0dGVybmZseS1uZy9zcmMvYXBwL2xpc3QvZXhhbXBsZXMvbGlzdC1iYXNpYy1leGFtcGxlLmNvbXBvbmVudC5sZXNzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUVBO0VBQ0UsV0FBQTtDQ0REO0FESUQ7RUFDRSxXQUFBO0NDRkRcIixcImZpbGVcIjpcImxpc3QtYmFzaWMtZXhhbXBsZS5jb21wb25lbnQubGVzc1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCJAaW1wb3J0IChyZWZlcmVuY2UpIFxcXCIuLi8uLi8uLi9hc3NldHMvc3R5bGVzaGVldHMvcGF0dGVybmZseS1uZ1xcXCI7XFxuXFxuLmJ0bi1kZWZhdWx0LnJlZCB7XFxuICBjb2xvcjogcmVkO1xcbn1cXG5cXG4uZHJvcGRvd24ta2ViYWItcGYucmVkIC5idG4tbGluayB7XFxuICBjb2xvcjogcmVkO1xcbn1cXG5cIixcIi5idG4tZGVmYXVsdC5yZWQge1xcbiAgY29sb3I6IHJlZDtcXG59XFxuLmRyb3Bkb3duLWtlYmFiLXBmLnJlZCAuYnRuLWxpbmsge1xcbiAgY29sb3I6IHJlZDtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwid2VicGFjazovL1wifV0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY3NzLWxvYWRlcj97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL34vbGVzcy1sb2FkZXIvZGlzdD97XCJwYXRoc1wiOltcIi4vfi9wYXR0ZXJuZmx5L25vZGVfbW9kdWxlc1wiXSxcInNvdXJjZU1hcFwiOnRydWV9IS4vc3JjL2FwcC9saXN0L2V4YW1wbGVzL2xpc3QtYmFzaWMtZXhhbXBsZS5jb21wb25lbnQubGVzc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvbGlzdC9leGFtcGxlcy9saXN0LWJhc2ljLWV4YW1wbGUuY29tcG9uZW50Lmxlc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/app/list/examples/list-heading-example.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \".actions-placeholder {\\n width: 220px;\\n}\\n.icon-placeholder {\\n width: 30px;\\n}\\n.margin-left-40 {\\n margin-left: 40px;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/./home/travis/build/patternfly/patternfly-ng/src/app/list/examples/list-heading-example.component.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/app/list/examples/list-heading-example.component.less\"],\"names\":[],\"mappings\":\"AAEA;EACE,aAAA;CCDD;ADID;EACE,YAAA;CCFD;ADKD;EACE,kBAAA;CCHD\",\"file\":\"list-heading-example.component.less\",\"sourcesContent\":[\"@import (reference) \\\"../../../assets/stylesheets/patternfly-ng\\\";\\n\\n.actions-placeholder {\\n width: 220px;\\n}\\n\\n.icon-placeholder {\\n width: 30px;\\n}\\n\\n.margin-left-40 {\\n margin-left: 40px;\\n}\\n\",\".actions-placeholder {\\n width: 220px;\\n}\\n.icon-placeholder {\\n width: 30px;\\n}\\n.margin-left-40 {\\n margin-left: 40px;\\n}\\n\"],\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvbGlzdC9leGFtcGxlcy9saXN0LWhlYWRpbmctZXhhbXBsZS5jb21wb25lbnQubGVzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9hcHAvbGlzdC9leGFtcGxlcy9saXN0LWhlYWRpbmctZXhhbXBsZS5jb21wb25lbnQubGVzcz9jNGIwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5hY3Rpb25zLXBsYWNlaG9sZGVyIHtcXG4gIHdpZHRoOiAyMjBweDtcXG59XFxuLmljb24tcGxhY2Vob2xkZXIge1xcbiAgd2lkdGg6IDMwcHg7XFxufVxcbi5tYXJnaW4tbGVmdC00MCB7XFxuICBtYXJnaW4tbGVmdDogNDBweDtcXG59XFxuXCIsIFwiXCIsIHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIi8uL2hvbWUvdHJhdmlzL2J1aWxkL3BhdHRlcm5mbHkvcGF0dGVybmZseS1uZy9zcmMvYXBwL2xpc3QvZXhhbXBsZXMvbGlzdC1oZWFkaW5nLWV4YW1wbGUuY29tcG9uZW50Lmxlc3NcIixcIi8uL2hvbWUvdHJhdmlzL2J1aWxkL3BhdHRlcm5mbHkvcGF0dGVybmZseS1uZy9zcmMvYXBwL2xpc3QvZXhhbXBsZXMvbGlzdC1oZWFkaW5nLWV4YW1wbGUuY29tcG9uZW50Lmxlc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUE7RUFDRSxhQUFBO0NDREQ7QURJRDtFQUNFLFlBQUE7Q0NGRDtBREtEO0VBQ0Usa0JBQUE7Q0NIRFwiLFwiZmlsZVwiOlwibGlzdC1oZWFkaW5nLWV4YW1wbGUuY29tcG9uZW50Lmxlc3NcIixcInNvdXJjZXNDb250ZW50XCI6W1wiQGltcG9ydCAocmVmZXJlbmNlKSBcXFwiLi4vLi4vLi4vYXNzZXRzL3N0eWxlc2hlZXRzL3BhdHRlcm5mbHktbmdcXFwiO1xcblxcbi5hY3Rpb25zLXBsYWNlaG9sZGVyIHtcXG4gIHdpZHRoOiAyMjBweDtcXG59XFxuXFxuLmljb24tcGxhY2Vob2xkZXIge1xcbiAgd2lkdGg6IDMwcHg7XFxufVxcblxcbi5tYXJnaW4tbGVmdC00MCB7XFxuICBtYXJnaW4tbGVmdDogNDBweDtcXG59XFxuXCIsXCIuYWN0aW9ucy1wbGFjZWhvbGRlciB7XFxuICB3aWR0aDogMjIwcHg7XFxufVxcbi5pY29uLXBsYWNlaG9sZGVyIHtcXG4gIHdpZHRoOiAzMHB4O1xcbn1cXG4ubWFyZ2luLWxlZnQtNDAge1xcbiAgbWFyZ2luLWxlZnQ6IDQwcHg7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIndlYnBhY2s6Ly9cIn1dKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Nzcy1sb2FkZXI/e1wic291cmNlTWFwXCI6dHJ1ZSxcImNvbnRleHRcIjpcIi9cIn0hLi9+L2xlc3MtbG9hZGVyL2Rpc3Q/e1wicGF0aHNcIjpbXCIuL34vcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvbGlzdC9leGFtcGxlcy9saXN0LWhlYWRpbmctZXhhbXBsZS5jb21wb25lbnQubGVzc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvbGlzdC9leGFtcGxlcy9saXN0LWhlYWRpbmctZXhhbXBsZS5jb21wb25lbnQubGVzc1xuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/app/list/list.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \".pfng-list-cb-placeholder {\\n width: 12px;\\n}\\n.pfng-list-content {\\n display: flex;\\n flex-grow: 1;\\n}\\n.pfng-list-expand-placeholder {\\n width: 8px;\\n}\\n.pfng-list-expansion {\\n position: relative;\\n}\\n.pfng-list-expansion .list-pf-content {\\n flex-grow: 1;\\n}\\n.pfng-list-heading {\\n pointer-events: none;\\n}\\n@media (max-width: 992px) {\\n .pfng-list-heading {\\n display: none;\\n }\\n}\\n.pfng-list-heading:hover {\\n background-color: #fff;\\n}\\n.pfng-list-heading i {\\n pointer-events: auto;\\n}\\n.pfng-list-heading.list-pf-item {\\n border-top: none;\\n}\\n.pfng-list-heading .list-pf-title {\\n font-size: inherit;\\n font-weight: normal;\\n}\\n.pfng-list-heading .list-pf-chevron + .list-pf-content,\\n.pfng-list-heading .list-pf-select + .list-pf-content {\\n border-left: none;\\n}\\n.pfng-list-item.disabled,\\n.pfng-list-item.disabled:hover,\\n.pfng-list-item.disabled:focus {\\n background-color: #f5f5f5;\\n color: #bbb;\\n cursor: not-allowed;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/./home/travis/build/patternfly/patternfly-ng/src/app/list/list.component.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/app/list/list.component.less\"],\"names\":[],\"mappings\":\"AAGA;EACE,YAAA;CCFD;ADMD;EACE,cAAA;EACA,aAAA;CCJD;ADQD;EACE,WAAA;CCND;ADUD;EACE,mBAAA;CCRD;ADOD;EAGI,aAAA;CCPH;ADYD;EAME,qBAAA;CCfD;ADWC;EAgDF;IA/CI,cAAA;GCRD;CACF;ADaC;EACE,uBAAA;CCXH;ADCD;EAeI,qBAAA;CCbH;ADiBC;EACE,iBAAA;CCfH;ADLD;EAyBI,mBAAA;EACA,oBAAA;CCjBH;ADTD;;EAgCM,kBAAA;CCnBL;AD6BC;;;EAGE,0BAAA;EACA,YAAA;EACA,oBAAA;CC3BH\",\"file\":\"list.component.less\",\"sourcesContent\":[\"@import (reference) \\\"../../assets/stylesheets/patternfly-ng\\\";\\n\\n// Checkbox placeholder for heading\\n.pfng-list-cb-placeholder {\\n width: 12px;\\n}\\n\\n// Container for item click events\\n.pfng-list-content {\\n display: flex;\\n flex-grow: 1;\\n}\\n\\n// Row expansion toggle placeholder for heading and hidden toggles\\n.pfng-list-expand-placeholder {\\n width: 8px;\\n}\\n\\n// For displaying close button in expansion area\\n.pfng-list-expansion {\\n position: relative;\\n .list-pf-content {\\n flex-grow: 1;\\n }\\n}\\n\\n// For displaying a heading above the list\\n.pfng-list-heading {\\n // Hide heading for small screens\\n @media (max-width: 992px) {\\n display: none;\\n }\\n // Heading should not be clickable\\n pointer-events: none;\\n\\n // Heading should not highlight on mouse hover\\n &:hover {\\n background-color: @color-pf-white;\\n }\\n\\n // Allow info icons to generate events\\n i {\\n pointer-events: auto;\\n }\\n\\n // Override top border for heading\\n &.list-pf-item {\\n border-top: none;\\n }\\n\\n // Override font for normal heading text\\n .list-pf-title {\\n font-size: inherit;\\n font-weight: normal;\\n }\\n\\n // Remove the divider line for heading\\n .list-pf-chevron, .list-pf-select {\\n + .list-pf-content {\\n border-left: none;\\n }\\n }\\n}\\n\\n// Todo: A-PF currently shows disabled rows using .list-group-item.disabled (we inherit that from Bootstrap), but\\n// there is no list-pf-item.disabled equivelent.\\n//\\n// See: https://github.com/patternfly/patternfly/issues/676\\n.pfng-list-item {\\n &.disabled,\\n &.disabled:hover,\\n &.disabled:focus {\\n background-color: @color-pf-black-150; // was #f1f1f1\\n color: @color-pf-black-400; // was #9c9c9c\\n cursor: not-allowed;\\n }\\n}\\n\",\".pfng-list-cb-placeholder {\\n width: 12px;\\n}\\n.pfng-list-content {\\n display: flex;\\n flex-grow: 1;\\n}\\n.pfng-list-expand-placeholder {\\n width: 8px;\\n}\\n.pfng-list-expansion {\\n position: relative;\\n}\\n.pfng-list-expansion .list-pf-content {\\n flex-grow: 1;\\n}\\n.pfng-list-heading {\\n pointer-events: none;\\n}\\n@media (max-width: 992px) {\\n .pfng-list-heading {\\n display: none;\\n }\\n}\\n.pfng-list-heading:hover {\\n background-color: #fff;\\n}\\n.pfng-list-heading i {\\n pointer-events: auto;\\n}\\n.pfng-list-heading.list-pf-item {\\n border-top: none;\\n}\\n.pfng-list-heading .list-pf-title {\\n font-size: inherit;\\n font-weight: normal;\\n}\\n.pfng-list-heading .list-pf-chevron + .list-pf-content,\\n.pfng-list-heading .list-pf-select + .list-pf-content {\\n border-left: none;\\n}\\n.pfng-list-item.disabled,\\n.pfng-list-item.disabled:hover,\\n.pfng-list-item.disabled:focus {\\n background-color: #f5f5f5;\\n color: #bbb;\\n cursor: not-allowed;\\n}\\n\"],\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvbGlzdC9saXN0LmNvbXBvbmVudC5sZXNzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9saXN0L2xpc3QuY29tcG9uZW50Lmxlc3M/NjUwNCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKCk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIucGZuZy1saXN0LWNiLXBsYWNlaG9sZGVyIHtcXG4gIHdpZHRoOiAxMnB4O1xcbn1cXG4ucGZuZy1saXN0LWNvbnRlbnQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuLnBmbmctbGlzdC1leHBhbmQtcGxhY2Vob2xkZXIge1xcbiAgd2lkdGg6IDhweDtcXG59XFxuLnBmbmctbGlzdC1leHBhbnNpb24ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucGZuZy1saXN0LWV4cGFuc2lvbiAubGlzdC1wZi1jb250ZW50IHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuLnBmbmctbGlzdC1oZWFkaW5nIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcXG4gIC5wZm5nLWxpc3QtaGVhZGluZyB7XFxuICAgIGRpc3BsYXk6IG5vbmU7XFxuICB9XFxufVxcbi5wZm5nLWxpc3QtaGVhZGluZzpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbn1cXG4ucGZuZy1saXN0LWhlYWRpbmcgaSB7XFxuICBwb2ludGVyLWV2ZW50czogYXV0bztcXG59XFxuLnBmbmctbGlzdC1oZWFkaW5nLmxpc3QtcGYtaXRlbSB7XFxuICBib3JkZXItdG9wOiBub25lO1xcbn1cXG4ucGZuZy1saXN0LWhlYWRpbmcgLmxpc3QtcGYtdGl0bGUge1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG59XFxuLnBmbmctbGlzdC1oZWFkaW5nIC5saXN0LXBmLWNoZXZyb24gKyAubGlzdC1wZi1jb250ZW50LFxcbi5wZm5nLWxpc3QtaGVhZGluZyAubGlzdC1wZi1zZWxlY3QgKyAubGlzdC1wZi1jb250ZW50IHtcXG4gIGJvcmRlci1sZWZ0OiBub25lO1xcbn1cXG4ucGZuZy1saXN0LWl0ZW0uZGlzYWJsZWQsXFxuLnBmbmctbGlzdC1pdGVtLmRpc2FibGVkOmhvdmVyLFxcbi5wZm5nLWxpc3QtaXRlbS5kaXNhYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xcbiAgY29sb3I6ICNiYmI7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG5cIiwgXCJcIiwge1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wiLy4vaG9tZS90cmF2aXMvYnVpbGQvcGF0dGVybmZseS9wYXR0ZXJuZmx5LW5nL3NyYy9hcHAvbGlzdC9saXN0LmNvbXBvbmVudC5sZXNzXCIsXCIvLi9ob21lL3RyYXZpcy9idWlsZC9wYXR0ZXJuZmx5L3BhdHRlcm5mbHktbmcvc3JjL2FwcC9saXN0L2xpc3QuY29tcG9uZW50Lmxlc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBR0E7RUFDRSxZQUFBO0NDRkQ7QURNRDtFQUNFLGNBQUE7RUFDQSxhQUFBO0NDSkQ7QURRRDtFQUNFLFdBQUE7Q0NORDtBRFVEO0VBQ0UsbUJBQUE7Q0NSRDtBRE9EO0VBR0ksYUFBQTtDQ1BIO0FEWUQ7RUFNRSxxQkFBQTtDQ2ZEO0FEV0M7RUFnREY7SUEvQ0ksY0FBQTtHQ1JEO0NBQ0Y7QURhQztFQUNFLHVCQUFBO0NDWEg7QURDRDtFQWVJLHFCQUFBO0NDYkg7QURpQkM7RUFDRSxpQkFBQTtDQ2ZIO0FETEQ7RUF5QkksbUJBQUE7RUFDQSxvQkFBQTtDQ2pCSDtBRFREOztFQWdDTSxrQkFBQTtDQ25CTDtBRDZCQzs7O0VBR0UsMEJBQUE7RUFDQSxZQUFBO0VBQ0Esb0JBQUE7Q0MzQkhcIixcImZpbGVcIjpcImxpc3QuY29tcG9uZW50Lmxlc3NcIixcInNvdXJjZXNDb250ZW50XCI6W1wiQGltcG9ydCAocmVmZXJlbmNlKSBcXFwiLi4vLi4vYXNzZXRzL3N0eWxlc2hlZXRzL3BhdHRlcm5mbHktbmdcXFwiO1xcblxcbi8vIENoZWNrYm94IHBsYWNlaG9sZGVyIGZvciBoZWFkaW5nXFxuLnBmbmctbGlzdC1jYi1wbGFjZWhvbGRlciB7XFxuICB3aWR0aDogMTJweDtcXG59XFxuXFxuLy8gQ29udGFpbmVyIGZvciBpdGVtIGNsaWNrIGV2ZW50c1xcbi5wZm5nLWxpc3QtY29udGVudCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1ncm93OiAxO1xcbn1cXG5cXG4vLyBSb3cgZXhwYW5zaW9uIHRvZ2dsZSBwbGFjZWhvbGRlciBmb3IgaGVhZGluZyBhbmQgaGlkZGVuIHRvZ2dsZXNcXG4ucGZuZy1saXN0LWV4cGFuZC1wbGFjZWhvbGRlciB7XFxuICB3aWR0aDogOHB4O1xcbn1cXG5cXG4vLyBGb3IgZGlzcGxheWluZyBjbG9zZSBidXR0b24gaW4gZXhwYW5zaW9uIGFyZWFcXG4ucGZuZy1saXN0LWV4cGFuc2lvbiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAubGlzdC1wZi1jb250ZW50IHtcXG4gICAgZmxleC1ncm93OiAxO1xcbiAgfVxcbn1cXG5cXG4vLyBGb3IgZGlzcGxheWluZyBhIGhlYWRpbmcgYWJvdmUgdGhlIGxpc3RcXG4ucGZuZy1saXN0LWhlYWRpbmcge1xcbiAgLy8gSGlkZSBoZWFkaW5nIGZvciBzbWFsbCBzY3JlZW5zXFxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG4gIC8vIEhlYWRpbmcgc2hvdWxkIG5vdCBiZSBjbGlja2FibGVcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcblxcbiAgLy8gSGVhZGluZyBzaG91bGQgbm90IGhpZ2hsaWdodCBvbiBtb3VzZSBob3ZlclxcbiAgJjpob3ZlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IEBjb2xvci1wZi13aGl0ZTtcXG4gIH1cXG5cXG4gIC8vIEFsbG93IGluZm8gaWNvbnMgdG8gZ2VuZXJhdGUgZXZlbnRzXFxuICBpIHtcXG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxuICB9XFxuXFxuICAvLyBPdmVycmlkZSB0b3AgYm9yZGVyIGZvciBoZWFkaW5nXFxuICAmLmxpc3QtcGYtaXRlbSB7XFxuICAgIGJvcmRlci10b3A6IG5vbmU7XFxuICB9XFxuXFxuICAvLyBPdmVycmlkZSBmb250IGZvciBub3JtYWwgaGVhZGluZyB0ZXh0XFxuICAubGlzdC1wZi10aXRsZSB7XFxuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIH1cXG5cXG4gIC8vIFJlbW92ZSB0aGUgZGl2aWRlciBsaW5lIGZvciBoZWFkaW5nXFxuICAubGlzdC1wZi1jaGV2cm9uLCAubGlzdC1wZi1zZWxlY3Qge1xcbiAgICArIC5saXN0LXBmLWNvbnRlbnQge1xcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xcbiAgICB9XFxuICB9XFxufVxcblxcbi8vIFRvZG86IEEtUEYgY3VycmVudGx5IHNob3dzIGRpc2FibGVkIHJvd3MgdXNpbmcgLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCAod2UgaW5oZXJpdCB0aGF0IGZyb20gQm9vdHN0cmFwKSwgYnV0XFxuLy8gdGhlcmUgaXMgbm8gbGlzdC1wZi1pdGVtLmRpc2FibGVkIGVxdWl2ZWxlbnQuXFxuLy9cXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wYXR0ZXJuZmx5L3BhdHRlcm5mbHkvaXNzdWVzLzY3Nlxcbi5wZm5nLWxpc3QtaXRlbSB7XFxuICAmLmRpc2FibGVkLFxcbiAgJi5kaXNhYmxlZDpob3ZlcixcXG4gICYuZGlzYWJsZWQ6Zm9jdXMge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAY29sb3ItcGYtYmxhY2stMTUwOyAvLyB3YXMgI2YxZjFmMVxcbiAgICBjb2xvcjogQGNvbG9yLXBmLWJsYWNrLTQwMDsgLy8gd2FzICM5YzljOWNcXG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gIH1cXG59XFxuXCIsXCIucGZuZy1saXN0LWNiLXBsYWNlaG9sZGVyIHtcXG4gIHdpZHRoOiAxMnB4O1xcbn1cXG4ucGZuZy1saXN0LWNvbnRlbnQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuLnBmbmctbGlzdC1leHBhbmQtcGxhY2Vob2xkZXIge1xcbiAgd2lkdGg6IDhweDtcXG59XFxuLnBmbmctbGlzdC1leHBhbnNpb24ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucGZuZy1saXN0LWV4cGFuc2lvbiAubGlzdC1wZi1jb250ZW50IHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuLnBmbmctbGlzdC1oZWFkaW5nIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcXG4gIC5wZm5nLWxpc3QtaGVhZGluZyB7XFxuICAgIGRpc3BsYXk6IG5vbmU7XFxuICB9XFxufVxcbi5wZm5nLWxpc3QtaGVhZGluZzpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbn1cXG4ucGZuZy1saXN0LWhlYWRpbmcgaSB7XFxuICBwb2ludGVyLWV2ZW50czogYXV0bztcXG59XFxuLnBmbmctbGlzdC1oZWFkaW5nLmxpc3QtcGYtaXRlbSB7XFxuICBib3JkZXItdG9wOiBub25lO1xcbn1cXG4ucGZuZy1saXN0LWhlYWRpbmcgLmxpc3QtcGYtdGl0bGUge1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG59XFxuLnBmbmctbGlzdC1oZWFkaW5nIC5saXN0LXBmLWNoZXZyb24gKyAubGlzdC1wZi1jb250ZW50LFxcbi5wZm5nLWxpc3QtaGVhZGluZyAubGlzdC1wZi1zZWxlY3QgKyAubGlzdC1wZi1jb250ZW50IHtcXG4gIGJvcmRlci1sZWZ0OiBub25lO1xcbn1cXG4ucGZuZy1saXN0LWl0ZW0uZGlzYWJsZWQsXFxuLnBmbmctbGlzdC1pdGVtLmRpc2FibGVkOmhvdmVyLFxcbi5wZm5nLWxpc3QtaXRlbS5kaXNhYmxlZDpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xcbiAgY29sb3I6ICNiYmI7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJ3ZWJwYWNrOi8vXCJ9XSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jc3MtbG9hZGVyP3tcInNvdXJjZU1hcFwiOnRydWUsXCJjb250ZXh0XCI6XCIvXCJ9IS4vfi9sZXNzLWxvYWRlci9kaXN0P3tcInBhdGhzXCI6W1wiLi9+L3BhdHRlcm5mbHkvbm9kZV9tb2R1bGVzXCJdLFwic291cmNlTWFwXCI6dHJ1ZX0hLi9zcmMvYXBwL2xpc3QvbGlzdC5jb21wb25lbnQubGVzc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvbGlzdC9saXN0LmNvbXBvbmVudC5sZXNzXG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/app/notification/toast-notification-list.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \"\", \"\", {\"version\":3,\"sources\":[],\"names\":[],\"mappings\":\"\",\"file\":\"toast-notification-list.component.less\",\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvbm90aWZpY2F0aW9uL3RvYXN0LW5vdGlmaWNhdGlvbi1saXN0LmNvbXBvbmVudC5sZXNzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9ub3RpZmljYXRpb24vdG9hc3Qtbm90aWZpY2F0aW9uLWxpc3QuY29tcG9uZW50Lmxlc3M/ZTRlOSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKCk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJcIiwgXCJcIiwge1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W10sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIlwiLFwiZmlsZVwiOlwidG9hc3Qtbm90aWZpY2F0aW9uLWxpc3QuY29tcG9uZW50Lmxlc3NcIixcInNvdXJjZVJvb3RcIjpcIndlYnBhY2s6Ly9cIn1dKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Nzcy1sb2FkZXI/e1wic291cmNlTWFwXCI6dHJ1ZSxcImNvbnRleHRcIjpcIi9cIn0hLi9+L2xlc3MtbG9hZGVyL2Rpc3Q/e1wicGF0aHNcIjpbXCIuL34vcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvbm90aWZpY2F0aW9uL3RvYXN0LW5vdGlmaWNhdGlvbi1saXN0LmNvbXBvbmVudC5sZXNzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzP3tcInNvdXJjZU1hcFwiOnRydWUsXCJjb250ZXh0XCI6XCIvXCJ9IS4vbm9kZV9tb2R1bGVzL2xlc3MtbG9hZGVyL2Rpc3QvaW5kZXguanM/e1wicGF0aHNcIjpbXCIuL25vZGVfbW9kdWxlcy9wYXR0ZXJuZmx5L25vZGVfbW9kdWxlc1wiXSxcInNvdXJjZU1hcFwiOnRydWV9IS4vc3JjL2FwcC9ub3RpZmljYXRpb24vdG9hc3Qtbm90aWZpY2F0aW9uLWxpc3QuY29tcG9uZW50Lmxlc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/app/notification/toast-notification.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \".toast-pf-action > a {\\n cursor: pointer;\\n}\\n.toast-pf .dropdown-menu > li > a {\\n cursor: pointer;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/./home/travis/build/patternfly/patternfly-ng/src/app/notification/toast-notification.component.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/app/notification/toast-notification.component.less\"],\"names\":[],\"mappings\":\"AAEA;EAAuB,gBAAA;CCAtB;ADED;EAC4B,gBAAA;CCA3B\",\"file\":\"toast-notification.component.less\",\"sourcesContent\":[\"@import (reference) \\\"../../assets/stylesheets/patternfly-ng\\\";\\n\\n.toast-pf-action > a { cursor: pointer; }\\n\\n.toast-pf {\\n .dropdown-menu > li > a { cursor: pointer; }\\n}\\n\",\".toast-pf-action > a {\\n cursor: pointer;\\n}\\n.toast-pf .dropdown-menu > li > a {\\n cursor: pointer;\\n}\\n\"],\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvbm90aWZpY2F0aW9uL3RvYXN0LW5vdGlmaWNhdGlvbi5jb21wb25lbnQubGVzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9hcHAvbm90aWZpY2F0aW9uL3RvYXN0LW5vdGlmaWNhdGlvbi5jb21wb25lbnQubGVzcz80NWI2Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi50b2FzdC1wZi1hY3Rpb24gPiBhIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnRvYXN0LXBmIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXCIsIFwiXCIsIHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIi8uL2hvbWUvdHJhdmlzL2J1aWxkL3BhdHRlcm5mbHkvcGF0dGVybmZseS1uZy9zcmMvYXBwL25vdGlmaWNhdGlvbi90b2FzdC1ub3RpZmljYXRpb24uY29tcG9uZW50Lmxlc3NcIixcIi8uL2hvbWUvdHJhdmlzL2J1aWxkL3BhdHRlcm5mbHkvcGF0dGVybmZseS1uZy9zcmMvYXBwL25vdGlmaWNhdGlvbi90b2FzdC1ub3RpZmljYXRpb24uY29tcG9uZW50Lmxlc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUE7RUFBdUIsZ0JBQUE7Q0NBdEI7QURFRDtFQUM0QixnQkFBQTtDQ0EzQlwiLFwiZmlsZVwiOlwidG9hc3Qtbm90aWZpY2F0aW9uLmNvbXBvbmVudC5sZXNzXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIkBpbXBvcnQgKHJlZmVyZW5jZSkgXFxcIi4uLy4uL2Fzc2V0cy9zdHlsZXNoZWV0cy9wYXR0ZXJuZmx5LW5nXFxcIjtcXG5cXG4udG9hc3QtcGYtYWN0aW9uID4gYSB7IGN1cnNvcjogcG9pbnRlcjsgfVxcblxcbi50b2FzdC1wZiB7XFxuICAuZHJvcGRvd24tbWVudSA+IGxpID4gYSB7IGN1cnNvcjogcG9pbnRlcjsgfVxcbn1cXG5cIixcIi50b2FzdC1wZi1hY3Rpb24gPiBhIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnRvYXN0LXBmIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwid2VicGFjazovL1wifV0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY3NzLWxvYWRlcj97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL34vbGVzcy1sb2FkZXIvZGlzdD97XCJwYXRoc1wiOltcIi4vfi9wYXR0ZXJuZmx5L25vZGVfbW9kdWxlc1wiXSxcInNvdXJjZU1hcFwiOnRydWV9IS4vc3JjL2FwcC9ub3RpZmljYXRpb24vdG9hc3Qtbm90aWZpY2F0aW9uLmNvbXBvbmVudC5sZXNzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzP3tcInNvdXJjZU1hcFwiOnRydWUsXCJjb250ZXh0XCI6XCIvXCJ9IS4vbm9kZV9tb2R1bGVzL2xlc3MtbG9hZGVyL2Rpc3QvaW5kZXguanM/e1wicGF0aHNcIjpbXCIuL25vZGVfbW9kdWxlcy9wYXR0ZXJuZmx5L25vZGVfbW9kdWxlc1wiXSxcInNvdXJjZU1hcFwiOnRydWV9IS4vc3JjL2FwcC9ub3RpZmljYXRpb24vdG9hc3Qtbm90aWZpY2F0aW9uLmNvbXBvbmVudC5sZXNzXG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/app/remaining-chars-count/examples/remaining-chars-count-example.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \".chars-remaining-pf > span {\\n vertical-align: middle;\\n}\\n.example-container {\\n width: 1180px;\\n}\\ntextarea {\\n resize: none;\\n}\\n.vert-align {\\n vertical-align: middle;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/./home/travis/build/patternfly/patternfly-ng/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.less\"],\"names\":[],\"mappings\":\"AAEA;EAEI,uBAAA;CCFH;ADMD;EACE,cAAA;CCJD;ADOD;EACE,aAAA;CCLD;ADQD;EACE,uBAAA;CCND\",\"file\":\"remaining-chars-count-example.component.less\",\"sourcesContent\":[\"@import (reference) \\\"../../../assets/stylesheets/patternfly-ng\\\";\\n\\n.chars-remaining-pf {\\n > span {\\n vertical-align: middle;\\n }\\n}\\n\\n.example-container {\\n width: 1180px;\\n}\\n\\ntextarea {\\n resize: none;\\n}\\n\\n.vert-align {\\n vertical-align: middle;\\n}\\n\",\".chars-remaining-pf > span {\\n vertical-align: middle;\\n}\\n.example-container {\\n width: 1180px;\\n}\\ntextarea {\\n resize: none;\\n}\\n.vert-align {\\n vertical-align: middle;\\n}\\n\"],\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvcmVtYWluaW5nLWNoYXJzLWNvdW50L2V4YW1wbGVzL3JlbWFpbmluZy1jaGFycy1jb3VudC1leGFtcGxlLmNvbXBvbmVudC5sZXNzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9yZW1haW5pbmctY2hhcnMtY291bnQvZXhhbXBsZXMvcmVtYWluaW5nLWNoYXJzLWNvdW50LWV4YW1wbGUuY29tcG9uZW50Lmxlc3M/MjIwNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKCk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIuY2hhcnMtcmVtYWluaW5nLXBmID4gc3BhbiB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4uZXhhbXBsZS1jb250YWluZXIge1xcbiAgd2lkdGg6IDExODBweDtcXG59XFxudGV4dGFyZWEge1xcbiAgcmVzaXplOiBub25lO1xcbn1cXG4udmVydC1hbGlnbiB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG5cIiwgXCJcIiwge1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wiLy4vaG9tZS90cmF2aXMvYnVpbGQvcGF0dGVybmZseS9wYXR0ZXJuZmx5LW5nL3NyYy9hcHAvcmVtYWluaW5nLWNoYXJzLWNvdW50L2V4YW1wbGVzL3JlbWFpbmluZy1jaGFycy1jb3VudC1leGFtcGxlLmNvbXBvbmVudC5sZXNzXCIsXCIvLi9ob21lL3RyYXZpcy9idWlsZC9wYXR0ZXJuZmx5L3BhdHRlcm5mbHktbmcvc3JjL2FwcC9yZW1haW5pbmctY2hhcnMtY291bnQvZXhhbXBsZXMvcmVtYWluaW5nLWNoYXJzLWNvdW50LWV4YW1wbGUuY29tcG9uZW50Lmxlc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUE7RUFFSSx1QkFBQTtDQ0ZIO0FETUQ7RUFDRSxjQUFBO0NDSkQ7QURPRDtFQUNFLGFBQUE7Q0NMRDtBRFFEO0VBQ0UsdUJBQUE7Q0NORFwiLFwiZmlsZVwiOlwicmVtYWluaW5nLWNoYXJzLWNvdW50LWV4YW1wbGUuY29tcG9uZW50Lmxlc3NcIixcInNvdXJjZXNDb250ZW50XCI6W1wiQGltcG9ydCAocmVmZXJlbmNlKSBcXFwiLi4vLi4vLi4vYXNzZXRzL3N0eWxlc2hlZXRzL3BhdHRlcm5mbHktbmdcXFwiO1xcblxcbi5jaGFycy1yZW1haW5pbmctcGYge1xcbiAgPiBzcGFuIHtcXG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIH1cXG59XFxuXFxuLmV4YW1wbGUtY29udGFpbmVyIHtcXG4gIHdpZHRoOiAxMTgwcHg7XFxufVxcblxcbnRleHRhcmVhIHtcXG4gIHJlc2l6ZTogbm9uZTtcXG59XFxuXFxuLnZlcnQtYWxpZ24ge1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXCIsXCIuY2hhcnMtcmVtYWluaW5nLXBmID4gc3BhbiB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4uZXhhbXBsZS1jb250YWluZXIge1xcbiAgd2lkdGg6IDExODBweDtcXG59XFxudGV4dGFyZWEge1xcbiAgcmVzaXplOiBub25lO1xcbn1cXG4udmVydC1hbGlnbiB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJ3ZWJwYWNrOi8vXCJ9XSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jc3MtbG9hZGVyP3tcInNvdXJjZU1hcFwiOnRydWUsXCJjb250ZXh0XCI6XCIvXCJ9IS4vfi9sZXNzLWxvYWRlci9kaXN0P3tcInBhdGhzXCI6W1wiLi9+L3BhdHRlcm5mbHkvbm9kZV9tb2R1bGVzXCJdLFwic291cmNlTWFwXCI6dHJ1ZX0hLi9zcmMvYXBwL3JlbWFpbmluZy1jaGFycy1jb3VudC9leGFtcGxlcy9yZW1haW5pbmctY2hhcnMtY291bnQtZXhhbXBsZS5jb21wb25lbnQubGVzc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvcmVtYWluaW5nLWNoYXJzLWNvdW50L2V4YW1wbGVzL3JlbWFpbmluZy1jaGFycy1jb3VudC1leGFtcGxlLmNvbXBvbmVudC5sZXNzXG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/app/sort/sort.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \".sort-pf .btn-link {\\n margin-left: 10px;\\n padding: 4px 0;\\n min-width: 0;\\n color: #030303;\\n font-size: 16px;\\n line-height: 1;\\n}\\n.sort-pf .btn-link:hover {\\n color: #0088ce;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/./home/travis/build/patternfly/patternfly-ng/src/app/sort/sort.component.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/app/sort/sort.component.less\"],\"names\":[],\"mappings\":\"AAEA;EAEI,kBAAA;EACA,eAAA;EACA,aAAA;EACA,eAAA;EACA,gBAAA;EACA,eAAA;CCFH;ADGG;EAAU,eAAA;CCAb\",\"file\":\"sort.component.less\",\"sourcesContent\":[\"@import (reference) \\\"../../assets/stylesheets/patternfly-ng\\\";\\n\\n.sort-pf {\\n .btn-link {\\n margin-left: 10px;\\n padding: 4px 0;\\n min-width: 0;\\n color: @color-pf-black; // was #252525;\\n font-size: 16px;\\n line-height: 1;\\n &:hover { color: @color-pf-blue-400; }\\n }\\n}\\n\",\".sort-pf .btn-link {\\n margin-left: 10px;\\n padding: 4px 0;\\n min-width: 0;\\n color: #030303;\\n font-size: 16px;\\n line-height: 1;\\n}\\n.sort-pf .btn-link:hover {\\n color: #0088ce;\\n}\\n\"],\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvc29ydC9zb3J0LmNvbXBvbmVudC5sZXNzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9zb3J0L3NvcnQuY29tcG9uZW50Lmxlc3M/MDFlNSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKCk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIuc29ydC1wZiAuYnRuLWxpbmsge1xcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XFxuICBwYWRkaW5nOiA0cHggMDtcXG4gIG1pbi13aWR0aDogMDtcXG4gIGNvbG9yOiAjMDMwMzAzO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxufVxcbi5zb3J0LXBmIC5idG4tbGluazpob3ZlciB7XFxuICBjb2xvcjogIzAwODhjZTtcXG59XFxuXCIsIFwiXCIsIHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIi8uL2hvbWUvdHJhdmlzL2J1aWxkL3BhdHRlcm5mbHkvcGF0dGVybmZseS1uZy9zcmMvYXBwL3NvcnQvc29ydC5jb21wb25lbnQubGVzc1wiLFwiLy4vaG9tZS90cmF2aXMvYnVpbGQvcGF0dGVybmZseS9wYXR0ZXJuZmx5LW5nL3NyYy9hcHAvc29ydC9zb3J0LmNvbXBvbmVudC5sZXNzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUVBO0VBRUksa0JBQUE7RUFDQSxlQUFBO0VBQ0EsYUFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7Q0NGSDtBREdHO0VBQVUsZUFBQTtDQ0FiXCIsXCJmaWxlXCI6XCJzb3J0LmNvbXBvbmVudC5sZXNzXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIkBpbXBvcnQgKHJlZmVyZW5jZSkgXFxcIi4uLy4uL2Fzc2V0cy9zdHlsZXNoZWV0cy9wYXR0ZXJuZmx5LW5nXFxcIjtcXG5cXG4uc29ydC1wZiB7XFxuICAuYnRuLWxpbmsge1xcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcXG4gICAgcGFkZGluZzogNHB4IDA7XFxuICAgIG1pbi13aWR0aDogMDtcXG4gICAgY29sb3I6IEBjb2xvci1wZi1ibGFjazsgLy8gd2FzICMyNTI1MjU7XFxuICAgIGZvbnQtc2l6ZTogMTZweDtcXG4gICAgbGluZS1oZWlnaHQ6IDE7XFxuICAgICY6aG92ZXIgeyBjb2xvcjogQGNvbG9yLXBmLWJsdWUtNDAwOyB9XFxuICB9XFxufVxcblwiLFwiLnNvcnQtcGYgLmJ0bi1saW5rIHtcXG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xcbiAgcGFkZGluZzogNHB4IDA7XFxuICBtaW4td2lkdGg6IDA7XFxuICBjb2xvcjogIzAzMDMwMztcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbn1cXG4uc29ydC1wZiAuYnRuLWxpbms6aG92ZXIge1xcbiAgY29sb3I6ICMwMDg4Y2U7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIndlYnBhY2s6Ly9cIn1dKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Nzcy1sb2FkZXI/e1wic291cmNlTWFwXCI6dHJ1ZSxcImNvbnRleHRcIjpcIi9cIn0hLi9+L2xlc3MtbG9hZGVyL2Rpc3Q/e1wicGF0aHNcIjpbXCIuL34vcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvc29ydC9zb3J0LmNvbXBvbmVudC5sZXNzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzP3tcInNvdXJjZU1hcFwiOnRydWUsXCJjb250ZXh0XCI6XCIvXCJ9IS4vbm9kZV9tb2R1bGVzL2xlc3MtbG9hZGVyL2Rpc3QvaW5kZXguanM/e1wicGF0aHNcIjpbXCIuL25vZGVfbW9kdWxlcy9wYXR0ZXJuZmx5L25vZGVfbW9kdWxlc1wiXSxcInNvdXJjZU1hcFwiOnRydWV9IS4vc3JjL2FwcC9zb3J0L3NvcnQuY29tcG9uZW50Lmxlc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/app/toolbar/toolbar.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \".dropdown-kebab-pf.invisible {\\n opacity: 0;\\n pointer-events: none;\\n}\\n.toolbar-pf-actions .btn {\\n min-width: unset;\\n}\\n.toolbar-pf-actions .toolbar-pf-view-selector a {\\n cursor: pointer;\\n}\\n.toolbar-pf-actions .dropdown-menu a {\\n cursor: pointer;\\n}\\n.toolbar-pf-actions .dropdown-kebab-pf {\\n float: right;\\n}\\n.toolbar-pf-actions .toolbar-apf-filter {\\n padding-left: 0 !important;\\n}\\n@media (min-width: 768px) {\\n .toolbar-pf-actions .toolbar-apf-filter {\\n padding-left: 0;\\n }\\n}\\n.toolbar-pf-include-actions {\\n display: inline-block;\\n margin: 0 5px;\\n}\\n.toolbar-pf-actions.no-filter-results {\\n margin-bottom: 10px;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/./home/travis/build/patternfly/patternfly-ng/src/app/toolbar/toolbar.component.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/app/toolbar/toolbar.component.less\"],\"names\":[],\"mappings\":\"AAEA;EACE,WAAA;EACA,qBAAA;CCDD;ADID;EACS,iBAAA;CCFR;ADCD;EAGQ,gBAAA;CCDP;ADFD;EAMQ,gBAAA;CCDP;ADLD;EAQuB,aAAA;CCAtB;ADRD;EAUI,2BAAA;CCCH;ADAG;EAYJ;IAXM,gBAAA;GCGH;CACF;ADCD;EACE,sBAAA;EACA,cAAA;CCCD;ADED;EAAwC,oBAAA;CCCvC\",\"file\":\"toolbar.component.less\",\"sourcesContent\":[\"@import (reference) \\\"../../assets/stylesheets/patternfly-ng\\\";\\n\\n.dropdown-kebab-pf.invisible {\\n opacity: 0;\\n pointer-events: none;\\n}\\n\\n.toolbar-pf-actions {\\n .btn { min-width: unset; }\\n .toolbar-pf-view-selector {\\n a { cursor: pointer; }\\n }\\n .dropdown-menu {\\n a { cursor: pointer; }\\n }\\n .dropdown-kebab-pf { float: right; }\\n .toolbar-apf-filter {\\n padding-left: 0 !important;\\n @media (min-width: 768px) {\\n padding-left: 0;\\n }\\n }\\n}\\n\\n.toolbar-pf-include-actions {\\n display: inline-block;\\n margin: 0 5px;\\n}\\n\\n.toolbar-pf-actions.no-filter-results { margin-bottom: 10px; }\\n\",\".dropdown-kebab-pf.invisible {\\n opacity: 0;\\n pointer-events: none;\\n}\\n.toolbar-pf-actions .btn {\\n min-width: unset;\\n}\\n.toolbar-pf-actions .toolbar-pf-view-selector a {\\n cursor: pointer;\\n}\\n.toolbar-pf-actions .dropdown-menu a {\\n cursor: pointer;\\n}\\n.toolbar-pf-actions .dropdown-kebab-pf {\\n float: right;\\n}\\n.toolbar-pf-actions .toolbar-apf-filter {\\n padding-left: 0 !important;\\n}\\n@media (min-width: 768px) {\\n .toolbar-pf-actions .toolbar-apf-filter {\\n padding-left: 0;\\n }\\n}\\n.toolbar-pf-include-actions {\\n display: inline-block;\\n margin: 0 5px;\\n}\\n.toolbar-pf-actions.no-filter-results {\\n margin-bottom: 10px;\\n}\\n\"],\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudC5sZXNzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC90b29sYmFyL3Rvb2xiYXIuY29tcG9uZW50Lmxlc3M/ZGVmMCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKCk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIuZHJvcGRvd24ta2ViYWItcGYuaW52aXNpYmxlIHtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnRvb2xiYXItcGYtYWN0aW9ucyAuYnRuIHtcXG4gIG1pbi13aWR0aDogdW5zZXQ7XFxufVxcbi50b29sYmFyLXBmLWFjdGlvbnMgLnRvb2xiYXItcGYtdmlldy1zZWxlY3RvciBhIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnRvb2xiYXItcGYtYWN0aW9ucyAuZHJvcGRvd24tbWVudSBhIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnRvb2xiYXItcGYtYWN0aW9ucyAuZHJvcGRvd24ta2ViYWItcGYge1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbn1cXG4udG9vbGJhci1wZi1hY3Rpb25zIC50b29sYmFyLWFwZi1maWx0ZXIge1xcbiAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLnRvb2xiYXItcGYtYWN0aW9ucyAudG9vbGJhci1hcGYtZmlsdGVyIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgfVxcbn1cXG4udG9vbGJhci1wZi1pbmNsdWRlLWFjdGlvbnMge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luOiAwIDVweDtcXG59XFxuLnRvb2xiYXItcGYtYWN0aW9ucy5uby1maWx0ZXItcmVzdWx0cyB7XFxuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xcbn1cXG5cIiwgXCJcIiwge1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wiLy4vaG9tZS90cmF2aXMvYnVpbGQvcGF0dGVybmZseS9wYXR0ZXJuZmx5LW5nL3NyYy9hcHAvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudC5sZXNzXCIsXCIvLi9ob21lL3RyYXZpcy9idWlsZC9wYXR0ZXJuZmx5L3BhdHRlcm5mbHktbmcvc3JjL2FwcC90b29sYmFyL3Rvb2xiYXIuY29tcG9uZW50Lmxlc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUE7RUFDRSxXQUFBO0VBQ0EscUJBQUE7Q0NERDtBRElEO0VBQ1MsaUJBQUE7Q0NGUjtBRENEO0VBR1EsZ0JBQUE7Q0NEUDtBREZEO0VBTVEsZ0JBQUE7Q0NEUDtBRExEO0VBUXVCLGFBQUE7Q0NBdEI7QURSRDtFQVVJLDJCQUFBO0NDQ0g7QURBRztFQVlKO0lBWE0sZ0JBQUE7R0NHSDtDQUNGO0FEQ0Q7RUFDRSxzQkFBQTtFQUNBLGNBQUE7Q0NDRDtBREVEO0VBQXdDLG9CQUFBO0NDQ3ZDXCIsXCJmaWxlXCI6XCJ0b29sYmFyLmNvbXBvbmVudC5sZXNzXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIkBpbXBvcnQgKHJlZmVyZW5jZSkgXFxcIi4uLy4uL2Fzc2V0cy9zdHlsZXNoZWV0cy9wYXR0ZXJuZmx5LW5nXFxcIjtcXG5cXG4uZHJvcGRvd24ta2ViYWItcGYuaW52aXNpYmxlIHtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLnRvb2xiYXItcGYtYWN0aW9ucyB7XFxuICAuYnRuIHsgbWluLXdpZHRoOiB1bnNldDsgfVxcbiAgLnRvb2xiYXItcGYtdmlldy1zZWxlY3RvciB7XFxuICAgIGEgeyBjdXJzb3I6IHBvaW50ZXI7IH1cXG4gIH1cXG4gIC5kcm9wZG93bi1tZW51IHtcXG4gICAgYSB7IGN1cnNvcjogcG9pbnRlcjsgfVxcbiAgfVxcbiAgLmRyb3Bkb3duLWtlYmFiLXBmIHsgZmxvYXQ6IHJpZ2h0OyB9XFxuICAudG9vbGJhci1hcGYtZmlsdGVyIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgICAgIHBhZGRpbmctbGVmdDogMDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cXG4udG9vbGJhci1wZi1pbmNsdWRlLWFjdGlvbnMge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luOiAwIDVweDtcXG59XFxuXFxuLnRvb2xiYXItcGYtYWN0aW9ucy5uby1maWx0ZXItcmVzdWx0cyB7IG1hcmdpbi1ib3R0b206IDEwcHg7IH1cXG5cIixcIi5kcm9wZG93bi1rZWJhYi1wZi5pbnZpc2libGUge1xcbiAgb3BhY2l0eTogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4udG9vbGJhci1wZi1hY3Rpb25zIC5idG4ge1xcbiAgbWluLXdpZHRoOiB1bnNldDtcXG59XFxuLnRvb2xiYXItcGYtYWN0aW9ucyAudG9vbGJhci1wZi12aWV3LXNlbGVjdG9yIGEge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4udG9vbGJhci1wZi1hY3Rpb25zIC5kcm9wZG93bi1tZW51IGEge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4udG9vbGJhci1wZi1hY3Rpb25zIC5kcm9wZG93bi1rZWJhYi1wZiB7XFxuICBmbG9hdDogcmlnaHQ7XFxufVxcbi50b29sYmFyLXBmLWFjdGlvbnMgLnRvb2xiYXItYXBmLWZpbHRlciB7XFxuICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAudG9vbGJhci1wZi1hY3Rpb25zIC50b29sYmFyLWFwZi1maWx0ZXIge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxufVxcbi50b29sYmFyLXBmLWluY2x1ZGUtYWN0aW9ucyB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBtYXJnaW46IDAgNXB4O1xcbn1cXG4udG9vbGJhci1wZi1hY3Rpb25zLm5vLWZpbHRlci1yZXN1bHRzIHtcXG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIndlYnBhY2s6Ly9cIn1dKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Nzcy1sb2FkZXI/e1wic291cmNlTWFwXCI6dHJ1ZSxcImNvbnRleHRcIjpcIi9cIn0hLi9+L2xlc3MtbG9hZGVyL2Rpc3Q/e1wicGF0aHNcIjpbXCIuL34vcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9hcHAvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudC5sZXNzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzP3tcInNvdXJjZU1hcFwiOnRydWUsXCJjb250ZXh0XCI6XCIvXCJ9IS4vbm9kZV9tb2R1bGVzL2xlc3MtbG9hZGVyL2Rpc3QvaW5kZXguanM/e1wicGF0aHNcIjpbXCIuL25vZGVfbW9kdWxlcy9wYXR0ZXJuZmx5L25vZGVfbW9kdWxlc1wiXSxcInNvdXJjZU1hcFwiOnRydWV9IS4vc3JjL2FwcC90b29sYmFyL3Rvb2xiYXIuY29tcG9uZW50Lmxlc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/css-loader/index.js?{\"sourceMap\":true,\"context\":\"/\"}!./node_modules/less-loader/dist/index.js?{\"paths\":[\"./node_modules/patternfly/node_modules\"],\"sourceMap\":true}!./src/demo/app.component.less": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports = module.exports = __webpack_require__(\"./node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.i, \".margin-v {\\n margin: 15px !important;\\n}\\n.margin-top-15 {\\n margin-top: 15px !important;\\n}\\n.margin-left-15 {\\n margin-left: 15px !important;\\n}\\n.margin-bottom-15 {\\n margin-bottom: 15px !important;\\n}\\n.margin-right-15 {\\n margin-right: 15px !important;\\n}\\n.margin-v {\\n margin: 14px !important;\\n}\\n.margin-top-14 {\\n margin-top: 14px !important;\\n}\\n.margin-left-14 {\\n margin-left: 14px !important;\\n}\\n.margin-bottom-14 {\\n margin-bottom: 14px !important;\\n}\\n.margin-right-14 {\\n margin-right: 14px !important;\\n}\\n.margin-v {\\n margin: 13px !important;\\n}\\n.margin-top-13 {\\n margin-top: 13px !important;\\n}\\n.margin-left-13 {\\n margin-left: 13px !important;\\n}\\n.margin-bottom-13 {\\n margin-bottom: 13px !important;\\n}\\n.margin-right-13 {\\n margin-right: 13px !important;\\n}\\n.margin-v {\\n margin: 12px !important;\\n}\\n.margin-top-12 {\\n margin-top: 12px !important;\\n}\\n.margin-left-12 {\\n margin-left: 12px !important;\\n}\\n.margin-bottom-12 {\\n margin-bottom: 12px !important;\\n}\\n.margin-right-12 {\\n margin-right: 12px !important;\\n}\\n.margin-v {\\n margin: 11px !important;\\n}\\n.margin-top-11 {\\n margin-top: 11px !important;\\n}\\n.margin-left-11 {\\n margin-left: 11px !important;\\n}\\n.margin-bottom-11 {\\n margin-bottom: 11px !important;\\n}\\n.margin-right-11 {\\n margin-right: 11px !important;\\n}\\n.margin-v {\\n margin: 10px !important;\\n}\\n.margin-top-10 {\\n margin-top: 10px !important;\\n}\\n.margin-left-10 {\\n margin-left: 10px !important;\\n}\\n.margin-bottom-10 {\\n margin-bottom: 10px !important;\\n}\\n.margin-right-10 {\\n margin-right: 10px !important;\\n}\\n.margin-v {\\n margin: 9px !important;\\n}\\n.margin-top-9 {\\n margin-top: 9px !important;\\n}\\n.margin-left-9 {\\n margin-left: 9px !important;\\n}\\n.margin-bottom-9 {\\n margin-bottom: 9px !important;\\n}\\n.margin-right-9 {\\n margin-right: 9px !important;\\n}\\n.margin-v {\\n margin: 8px !important;\\n}\\n.margin-top-8 {\\n margin-top: 8px !important;\\n}\\n.margin-left-8 {\\n margin-left: 8px !important;\\n}\\n.margin-bottom-8 {\\n margin-bottom: 8px !important;\\n}\\n.margin-right-8 {\\n margin-right: 8px !important;\\n}\\n.margin-v {\\n margin: 7px !important;\\n}\\n.margin-top-7 {\\n margin-top: 7px !important;\\n}\\n.margin-left-7 {\\n margin-left: 7px !important;\\n}\\n.margin-bottom-7 {\\n margin-bottom: 7px !important;\\n}\\n.margin-right-7 {\\n margin-right: 7px !important;\\n}\\n.margin-v {\\n margin: 6px !important;\\n}\\n.margin-top-6 {\\n margin-top: 6px !important;\\n}\\n.margin-left-6 {\\n margin-left: 6px !important;\\n}\\n.margin-bottom-6 {\\n margin-bottom: 6px !important;\\n}\\n.margin-right-6 {\\n margin-right: 6px !important;\\n}\\n.margin-v {\\n margin: 5px !important;\\n}\\n.margin-top-5 {\\n margin-top: 5px !important;\\n}\\n.margin-left-5 {\\n margin-left: 5px !important;\\n}\\n.margin-bottom-5 {\\n margin-bottom: 5px !important;\\n}\\n.margin-right-5 {\\n margin-right: 5px !important;\\n}\\n.margin-v {\\n margin: 4px !important;\\n}\\n.margin-top-4 {\\n margin-top: 4px !important;\\n}\\n.margin-left-4 {\\n margin-left: 4px !important;\\n}\\n.margin-bottom-4 {\\n margin-bottom: 4px !important;\\n}\\n.margin-right-4 {\\n margin-right: 4px !important;\\n}\\n.margin-v {\\n margin: 3px !important;\\n}\\n.margin-top-3 {\\n margin-top: 3px !important;\\n}\\n.margin-left-3 {\\n margin-left: 3px !important;\\n}\\n.margin-bottom-3 {\\n margin-bottom: 3px !important;\\n}\\n.margin-right-3 {\\n margin-right: 3px !important;\\n}\\n.margin-v {\\n margin: 2px !important;\\n}\\n.margin-top-2 {\\n margin-top: 2px !important;\\n}\\n.margin-left-2 {\\n margin-left: 2px !important;\\n}\\n.margin-bottom-2 {\\n margin-bottom: 2px !important;\\n}\\n.margin-right-2 {\\n margin-right: 2px !important;\\n}\\n.margin-v {\\n margin: 1px !important;\\n}\\n.margin-top-1 {\\n margin-top: 1px !important;\\n}\\n.margin-left-1 {\\n margin-left: 1px !important;\\n}\\n.margin-bottom-1 {\\n margin-bottom: 1px !important;\\n}\\n.margin-right-1 {\\n margin-right: 1px !important;\\n}\\n.padding-15 {\\n padding: 15px !important;\\n}\\n.padding-top-15 {\\n padding-top: 15px !important;\\n}\\n.padding-left-15 {\\n padding-left: 15px !important;\\n}\\n.padding-bottom-15 {\\n padding-bottom: 15px !important;\\n}\\n.padding-right-15 {\\n padding-right: 15px !important;\\n}\\n.padding-14 {\\n padding: 14px !important;\\n}\\n.padding-top-14 {\\n padding-top: 14px !important;\\n}\\n.padding-left-14 {\\n padding-left: 14px !important;\\n}\\n.padding-bottom-14 {\\n padding-bottom: 14px !important;\\n}\\n.padding-right-14 {\\n padding-right: 14px !important;\\n}\\n.padding-13 {\\n padding: 13px !important;\\n}\\n.padding-top-13 {\\n padding-top: 13px !important;\\n}\\n.padding-left-13 {\\n padding-left: 13px !important;\\n}\\n.padding-bottom-13 {\\n padding-bottom: 13px !important;\\n}\\n.padding-right-13 {\\n padding-right: 13px !important;\\n}\\n.padding-12 {\\n padding: 12px !important;\\n}\\n.padding-top-12 {\\n padding-top: 12px !important;\\n}\\n.padding-left-12 {\\n padding-left: 12px !important;\\n}\\n.padding-bottom-12 {\\n padding-bottom: 12px !important;\\n}\\n.padding-right-12 {\\n padding-right: 12px !important;\\n}\\n.padding-11 {\\n padding: 11px !important;\\n}\\n.padding-top-11 {\\n padding-top: 11px !important;\\n}\\n.padding-left-11 {\\n padding-left: 11px !important;\\n}\\n.padding-bottom-11 {\\n padding-bottom: 11px !important;\\n}\\n.padding-right-11 {\\n padding-right: 11px !important;\\n}\\n.padding-10 {\\n padding: 10px !important;\\n}\\n.padding-top-10 {\\n padding-top: 10px !important;\\n}\\n.padding-left-10 {\\n padding-left: 10px !important;\\n}\\n.padding-bottom-10 {\\n padding-bottom: 10px !important;\\n}\\n.padding-right-10 {\\n padding-right: 10px !important;\\n}\\n.padding-9 {\\n padding: 9px !important;\\n}\\n.padding-top-9 {\\n padding-top: 9px !important;\\n}\\n.padding-left-9 {\\n padding-left: 9px !important;\\n}\\n.padding-bottom-9 {\\n padding-bottom: 9px !important;\\n}\\n.padding-right-9 {\\n padding-right: 9px !important;\\n}\\n.padding-8 {\\n padding: 8px !important;\\n}\\n.padding-top-8 {\\n padding-top: 8px !important;\\n}\\n.padding-left-8 {\\n padding-left: 8px !important;\\n}\\n.padding-bottom-8 {\\n padding-bottom: 8px !important;\\n}\\n.padding-right-8 {\\n padding-right: 8px !important;\\n}\\n.padding-7 {\\n padding: 7px !important;\\n}\\n.padding-top-7 {\\n padding-top: 7px !important;\\n}\\n.padding-left-7 {\\n padding-left: 7px !important;\\n}\\n.padding-bottom-7 {\\n padding-bottom: 7px !important;\\n}\\n.padding-right-7 {\\n padding-right: 7px !important;\\n}\\n.padding-6 {\\n padding: 6px !important;\\n}\\n.padding-top-6 {\\n padding-top: 6px !important;\\n}\\n.padding-left-6 {\\n padding-left: 6px !important;\\n}\\n.padding-bottom-6 {\\n padding-bottom: 6px !important;\\n}\\n.padding-right-6 {\\n padding-right: 6px !important;\\n}\\n.padding-5 {\\n padding: 5px !important;\\n}\\n.padding-top-5 {\\n padding-top: 5px !important;\\n}\\n.padding-left-5 {\\n padding-left: 5px !important;\\n}\\n.padding-bottom-5 {\\n padding-bottom: 5px !important;\\n}\\n.padding-right-5 {\\n padding-right: 5px !important;\\n}\\n.padding-4 {\\n padding: 4px !important;\\n}\\n.padding-top-4 {\\n padding-top: 4px !important;\\n}\\n.padding-left-4 {\\n padding-left: 4px !important;\\n}\\n.padding-bottom-4 {\\n padding-bottom: 4px !important;\\n}\\n.padding-right-4 {\\n padding-right: 4px !important;\\n}\\n.padding-3 {\\n padding: 3px !important;\\n}\\n.padding-top-3 {\\n padding-top: 3px !important;\\n}\\n.padding-left-3 {\\n padding-left: 3px !important;\\n}\\n.padding-bottom-3 {\\n padding-bottom: 3px !important;\\n}\\n.padding-right-3 {\\n padding-right: 3px !important;\\n}\\n.padding-2 {\\n padding: 2px !important;\\n}\\n.padding-top-2 {\\n padding-top: 2px !important;\\n}\\n.padding-left-2 {\\n padding-left: 2px !important;\\n}\\n.padding-bottom-2 {\\n padding-bottom: 2px !important;\\n}\\n.padding-right-2 {\\n padding-right: 2px !important;\\n}\\n.padding-1 {\\n padding: 1px !important;\\n}\\n.padding-top-1 {\\n padding-top: 1px !important;\\n}\\n.padding-left-1 {\\n padding-left: 1px !important;\\n}\\n.padding-bottom-1 {\\n padding-bottom: 1px !important;\\n}\\n.padding-right-1 {\\n padding-right: 1px !important;\\n}\\n.tab-container {\\n border: 1px #030303;\\n}\\n.demoframe {\\n border: 0;\\n width: 100%;\\n height: 800px;\\n}\\n\", \"\", {\"version\":3,\"sources\":[\"/./home/travis/build/patternfly/patternfly-ng/src/assets/stylesheets/_mixins.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/demo/app.component.less\",\"/./home/travis/build/patternfly/patternfly-ng/src/demo/app.component.less\"],\"names\":[],\"mappings\":\"AAoBE;EACE,wBAAA;CCnBH;ADqBC;EACE,4BAAA;CCnBH;ADqBC;EACE,6BAAA;CCnBH;ADqBC;EACE,+BAAA;CCnBH;ADqBC;EACE,8BAAA;CCnBH;ADMC;EACE,wBAAA;CCJH;ADMC;EACE,4BAAA;CCJH;ADMC;EACE,6BAAA;CCJH;ADMC;EACE,+BAAA;CCJH;ADMC;EACE,8BAAA;CCJH;ADTC;EACE,wBAAA;CCWH;ADTC;EACE,4BAAA;CCWH;ADTC;EACE,6BAAA;CCWH;ADTC;EACE,+BAAA;CCWH;ADTC;EACE,8BAAA;CCWH;ADxBC;EACE,wBAAA;CC0BH;ADxBC;EACE,4BAAA;CC0BH;ADxBC;EACE,6BAAA;CC0BH;ADxBC;EACE,+BAAA;CC0BH;ADxBC;EACE,8BAAA;CC0BH;ADvCC;EACE,wBAAA;CCyCH;ADvCC;EACE,4BAAA;CCyCH;ADvCC;EACE,6BAAA;CCyCH;ADvCC;EACE,+BAAA;CCyCH;ADvCC;EACE,8BAAA;CCyCH;ADtDC;EACE,wBAAA;CCwDH;ADtDC;EACE,4BAAA;CCwDH;ADtDC;EACE,6BAAA;CCwDH;ADtDC;EACE,+BAAA;CCwDH;ADtDC;EACE,8BAAA;CCwDH;ADrEC;EACE,uBAAA;CCuEH;ADrEC;EACE,2BAAA;CCuEH;ADrEC;EACE,4BAAA;CCuEH;ADrEC;EACE,8BAAA;CCuEH;ADrEC;EACE,6BAAA;CCuEH;ADpFC;EACE,uBAAA;CCsFH;ADpFC;EACE,2BAAA;CCsFH;ADpFC;EACE,4BAAA;CCsFH;ADpFC;EACE,8BAAA;CCsFH;ADpFC;EACE,6BAAA;CCsFH;ADnGC;EACE,uBAAA;CCqGH;ADnGC;EACE,2BAAA;CCqGH;ADnGC;EACE,4BAAA;CCqGH;ADnGC;EACE,8BAAA;CCqGH;ADnGC;EACE,6BAAA;CCqGH;ADlHC;EACE,uBAAA;CCoHH;ADlHC;EACE,2BAAA;CCoHH;ADlHC;EACE,4BAAA;CCoHH;ADlHC;EACE,8BAAA;CCoHH;ADlHC;EACE,6BAAA;CCoHH;ADjIC;EACE,uBAAA;CCmIH;ADjIC;EACE,2BAAA;CCmIH;ADjIC;EACE,4BAAA;CCmIH;ADjIC;EACE,8BAAA;CCmIH;ADjIC;EACE,6BAAA;CCmIH;ADhJC;EACE,uBAAA;CCkJH;ADhJC;EACE,2BAAA;CCkJH;ADhJC;EACE,4BAAA;CCkJH;ADhJC;EACE,8BAAA;CCkJH;ADhJC;EACE,6BAAA;CCkJH;AD/JC;EACE,uBAAA;CCiKH;AD/JC;EACE,2BAAA;CCiKH;AD/JC;EACE,4BAAA;CCiKH;AD/JC;EACE,8BAAA;CCiKH;AD/JC;EACE,6BAAA;CCiKH;AD9KC;EACE,uBAAA;CCgLH;AD9KC;EACE,2BAAA;CCgLH;AD9KC;EACE,4BAAA;CCgLH;AD9KC;EACE,8BAAA;CCgLH;AD9KC;EACE,6BAAA;CCgLH;AD7LC;EACE,uBAAA;CC+LH;AD7LC;EACE,2BAAA;CC+LH;AD7LC;EACE,4BAAA;CC+LH;AD7LC;EACE,8BAAA;CC+LH;AD7LC;EACE,6BAAA;CC+LH;AD/NC;EACE,yBAAA;CCiOH;AD/NC;EACE,6BAAA;CCiOH;AD/NC;EACE,8BAAA;CCiOH;AD/NC;EACE,gCAAA;CCiOH;AD/NC;EACE,+BAAA;CCiOH;AD9OC;EACE,yBAAA;CCgPH;AD9OC;EACE,6BAAA;CCgPH;AD9OC;EACE,8BAAA;CCgPH;AD9OC;EACE,gCAAA;CCgPH;AD9OC;EACE,+BAAA;CCgPH;AD7PC;EACE,yBAAA;CC+PH;AD7PC;EACE,6BAAA;CC+PH;AD7PC;EACE,8BAAA;CC+PH;AD7PC;EACE,gCAAA;CC+PH;AD7PC;EACE,+BAAA;CC+PH;AD5QC;EACE,yBAAA;CC8QH;AD5QC;EACE,6BAAA;CC8QH;AD5QC;EACE,8BAAA;CC8QH;AD5QC;EACE,gCAAA;CC8QH;AD5QC;EACE,+BAAA;CC8QH;AD3RC;EACE,yBAAA;CC6RH;AD3RC;EACE,6BAAA;CC6RH;AD3RC;EACE,8BAAA;CC6RH;AD3RC;EACE,gCAAA;CC6RH;AD3RC;EACE,+BAAA;CC6RH;AD1SC;EACE,yBAAA;CC4SH;AD1SC;EACE,6BAAA;CC4SH;AD1SC;EACE,8BAAA;CC4SH;AD1SC;EACE,gCAAA;CC4SH;AD1SC;EACE,+BAAA;CC4SH;ADzTC;EACE,wBAAA;CC2TH;ADzTC;EACE,4BAAA;CC2TH;ADzTC;EACE,6BAAA;CC2TH;ADzTC;EACE,+BAAA;CC2TH;ADzTC;EACE,8BAAA;CC2TH;ADxUC;EACE,wBAAA;CC0UH;ADxUC;EACE,4BAAA;CC0UH;ADxUC;EACE,6BAAA;CC0UH;ADxUC;EACE,+BAAA;CC0UH;ADxUC;EACE,8BAAA;CC0UH;ADvVC;EACE,wBAAA;CCyVH;ADvVC;EACE,4BAAA;CCyVH;ADvVC;EACE,6BAAA;CCyVH;ADvVC;EACE,+BAAA;CCyVH;ADvVC;EACE,8BAAA;CCyVH;ADtWC;EACE,wBAAA;CCwWH;ADtWC;EACE,4BAAA;CCwWH;ADtWC;EACE,6BAAA;CCwWH;ADtWC;EACE,+BAAA;CCwWH;ADtWC;EACE,8BAAA;CCwWH;ADrXC;EACE,wBAAA;CCuXH;ADrXC;EACE,4BAAA;CCuXH;ADrXC;EACE,6BAAA;CCuXH;ADrXC;EACE,+BAAA;CCuXH;ADrXC;EACE,8BAAA;CCuXH;ADpYC;EACE,wBAAA;CCsYH;ADpYC;EACE,4BAAA;CCsYH;ADpYC;EACE,6BAAA;CCsYH;ADpYC;EACE,+BAAA;CCsYH;ADpYC;EACE,8BAAA;CCsYH;ADnZC;EACE,wBAAA;CCqZH;ADnZC;EACE,4BAAA;CCqZH;ADnZC;EACE,6BAAA;CCqZH;ADnZC;EACE,+BAAA;CCqZH;ADnZC;EACE,8BAAA;CCqZH;ADlaC;EACE,wBAAA;CCoaH;ADlaC;EACE,4BAAA;CCoaH;ADlaC;EACE,6BAAA;CCoaH;ADlaC;EACE,+BAAA;CCoaH;ADlaC;EACE,8BAAA;CCoaH;ADjbC;EACE,wBAAA;CCmbH;ADjbC;EACE,4BAAA;CCmbH;ADjbC;EACE,6BAAA;CCmbH;ADjbC;EACE,+BAAA;CCmbH;ADjbC;EACE,8BAAA;CCmbH;AC9bD;EACE,oBAAA;CDgcD;AC7bD;EACE,UAAA;EACA,YAAA;EACA,cAAA;CD+bD\",\"file\":\"app.component.less\",\"sourcesContent\":[\".padding-loop (@i) when (@i > 0) {\\n .padding-@{i} {\\n padding: ~\\\"@{i}px\\\" !important;\\n }\\n .padding-top-@{i} {\\n padding-top: ~\\\"@{i}px\\\" !important;\\n }\\n .padding-left-@{i} {\\n padding-left: ~\\\"@{i}px\\\" !important;\\n }\\n .padding-bottom-@{i} {\\n padding-bottom: ~\\\"@{i}px\\\" !important;\\n }\\n .padding-right-@{i} {\\n padding-right: ~\\\"@{i}px\\\" !important;\\n }\\n .padding-loop(@i - 1);\\n}\\n\\n.margin-loop (@i) when (@i > 0) {\\n .margin-v {\\n margin: ~\\\"@{i}px\\\" !important;\\n }\\n .margin-top-@{i} {\\n margin-top: ~\\\"@{i}px\\\" !important;\\n }\\n .margin-left-@{i} {\\n margin-left: ~\\\"@{i}px\\\" !important;\\n }\\n .margin-bottom-@{i} {\\n margin-bottom: ~\\\"@{i}px\\\" !important;\\n }\\n .margin-right-@{i} {\\n margin-right: ~\\\"@{i}px\\\" !important;\\n }\\n .margin-loop(@i - 1);\\n}\\n\\n.margin-loop(15);\\n.padding-loop(15);\\n\",\".margin-v {\\n margin: 15px !important;\\n}\\n.margin-top-15 {\\n margin-top: 15px !important;\\n}\\n.margin-left-15 {\\n margin-left: 15px !important;\\n}\\n.margin-bottom-15 {\\n margin-bottom: 15px !important;\\n}\\n.margin-right-15 {\\n margin-right: 15px !important;\\n}\\n.margin-v {\\n margin: 14px !important;\\n}\\n.margin-top-14 {\\n margin-top: 14px !important;\\n}\\n.margin-left-14 {\\n margin-left: 14px !important;\\n}\\n.margin-bottom-14 {\\n margin-bottom: 14px !important;\\n}\\n.margin-right-14 {\\n margin-right: 14px !important;\\n}\\n.margin-v {\\n margin: 13px !important;\\n}\\n.margin-top-13 {\\n margin-top: 13px !important;\\n}\\n.margin-left-13 {\\n margin-left: 13px !important;\\n}\\n.margin-bottom-13 {\\n margin-bottom: 13px !important;\\n}\\n.margin-right-13 {\\n margin-right: 13px !important;\\n}\\n.margin-v {\\n margin: 12px !important;\\n}\\n.margin-top-12 {\\n margin-top: 12px !important;\\n}\\n.margin-left-12 {\\n margin-left: 12px !important;\\n}\\n.margin-bottom-12 {\\n margin-bottom: 12px !important;\\n}\\n.margin-right-12 {\\n margin-right: 12px !important;\\n}\\n.margin-v {\\n margin: 11px !important;\\n}\\n.margin-top-11 {\\n margin-top: 11px !important;\\n}\\n.margin-left-11 {\\n margin-left: 11px !important;\\n}\\n.margin-bottom-11 {\\n margin-bottom: 11px !important;\\n}\\n.margin-right-11 {\\n margin-right: 11px !important;\\n}\\n.margin-v {\\n margin: 10px !important;\\n}\\n.margin-top-10 {\\n margin-top: 10px !important;\\n}\\n.margin-left-10 {\\n margin-left: 10px !important;\\n}\\n.margin-bottom-10 {\\n margin-bottom: 10px !important;\\n}\\n.margin-right-10 {\\n margin-right: 10px !important;\\n}\\n.margin-v {\\n margin: 9px !important;\\n}\\n.margin-top-9 {\\n margin-top: 9px !important;\\n}\\n.margin-left-9 {\\n margin-left: 9px !important;\\n}\\n.margin-bottom-9 {\\n margin-bottom: 9px !important;\\n}\\n.margin-right-9 {\\n margin-right: 9px !important;\\n}\\n.margin-v {\\n margin: 8px !important;\\n}\\n.margin-top-8 {\\n margin-top: 8px !important;\\n}\\n.margin-left-8 {\\n margin-left: 8px !important;\\n}\\n.margin-bottom-8 {\\n margin-bottom: 8px !important;\\n}\\n.margin-right-8 {\\n margin-right: 8px !important;\\n}\\n.margin-v {\\n margin: 7px !important;\\n}\\n.margin-top-7 {\\n margin-top: 7px !important;\\n}\\n.margin-left-7 {\\n margin-left: 7px !important;\\n}\\n.margin-bottom-7 {\\n margin-bottom: 7px !important;\\n}\\n.margin-right-7 {\\n margin-right: 7px !important;\\n}\\n.margin-v {\\n margin: 6px !important;\\n}\\n.margin-top-6 {\\n margin-top: 6px !important;\\n}\\n.margin-left-6 {\\n margin-left: 6px !important;\\n}\\n.margin-bottom-6 {\\n margin-bottom: 6px !important;\\n}\\n.margin-right-6 {\\n margin-right: 6px !important;\\n}\\n.margin-v {\\n margin: 5px !important;\\n}\\n.margin-top-5 {\\n margin-top: 5px !important;\\n}\\n.margin-left-5 {\\n margin-left: 5px !important;\\n}\\n.margin-bottom-5 {\\n margin-bottom: 5px !important;\\n}\\n.margin-right-5 {\\n margin-right: 5px !important;\\n}\\n.margin-v {\\n margin: 4px !important;\\n}\\n.margin-top-4 {\\n margin-top: 4px !important;\\n}\\n.margin-left-4 {\\n margin-left: 4px !important;\\n}\\n.margin-bottom-4 {\\n margin-bottom: 4px !important;\\n}\\n.margin-right-4 {\\n margin-right: 4px !important;\\n}\\n.margin-v {\\n margin: 3px !important;\\n}\\n.margin-top-3 {\\n margin-top: 3px !important;\\n}\\n.margin-left-3 {\\n margin-left: 3px !important;\\n}\\n.margin-bottom-3 {\\n margin-bottom: 3px !important;\\n}\\n.margin-right-3 {\\n margin-right: 3px !important;\\n}\\n.margin-v {\\n margin: 2px !important;\\n}\\n.margin-top-2 {\\n margin-top: 2px !important;\\n}\\n.margin-left-2 {\\n margin-left: 2px !important;\\n}\\n.margin-bottom-2 {\\n margin-bottom: 2px !important;\\n}\\n.margin-right-2 {\\n margin-right: 2px !important;\\n}\\n.margin-v {\\n margin: 1px !important;\\n}\\n.margin-top-1 {\\n margin-top: 1px !important;\\n}\\n.margin-left-1 {\\n margin-left: 1px !important;\\n}\\n.margin-bottom-1 {\\n margin-bottom: 1px !important;\\n}\\n.margin-right-1 {\\n margin-right: 1px !important;\\n}\\n.padding-15 {\\n padding: 15px !important;\\n}\\n.padding-top-15 {\\n padding-top: 15px !important;\\n}\\n.padding-left-15 {\\n padding-left: 15px !important;\\n}\\n.padding-bottom-15 {\\n padding-bottom: 15px !important;\\n}\\n.padding-right-15 {\\n padding-right: 15px !important;\\n}\\n.padding-14 {\\n padding: 14px !important;\\n}\\n.padding-top-14 {\\n padding-top: 14px !important;\\n}\\n.padding-left-14 {\\n padding-left: 14px !important;\\n}\\n.padding-bottom-14 {\\n padding-bottom: 14px !important;\\n}\\n.padding-right-14 {\\n padding-right: 14px !important;\\n}\\n.padding-13 {\\n padding: 13px !important;\\n}\\n.padding-top-13 {\\n padding-top: 13px !important;\\n}\\n.padding-left-13 {\\n padding-left: 13px !important;\\n}\\n.padding-bottom-13 {\\n padding-bottom: 13px !important;\\n}\\n.padding-right-13 {\\n padding-right: 13px !important;\\n}\\n.padding-12 {\\n padding: 12px !important;\\n}\\n.padding-top-12 {\\n padding-top: 12px !important;\\n}\\n.padding-left-12 {\\n padding-left: 12px !important;\\n}\\n.padding-bottom-12 {\\n padding-bottom: 12px !important;\\n}\\n.padding-right-12 {\\n padding-right: 12px !important;\\n}\\n.padding-11 {\\n padding: 11px !important;\\n}\\n.padding-top-11 {\\n padding-top: 11px !important;\\n}\\n.padding-left-11 {\\n padding-left: 11px !important;\\n}\\n.padding-bottom-11 {\\n padding-bottom: 11px !important;\\n}\\n.padding-right-11 {\\n padding-right: 11px !important;\\n}\\n.padding-10 {\\n padding: 10px !important;\\n}\\n.padding-top-10 {\\n padding-top: 10px !important;\\n}\\n.padding-left-10 {\\n padding-left: 10px !important;\\n}\\n.padding-bottom-10 {\\n padding-bottom: 10px !important;\\n}\\n.padding-right-10 {\\n padding-right: 10px !important;\\n}\\n.padding-9 {\\n padding: 9px !important;\\n}\\n.padding-top-9 {\\n padding-top: 9px !important;\\n}\\n.padding-left-9 {\\n padding-left: 9px !important;\\n}\\n.padding-bottom-9 {\\n padding-bottom: 9px !important;\\n}\\n.padding-right-9 {\\n padding-right: 9px !important;\\n}\\n.padding-8 {\\n padding: 8px !important;\\n}\\n.padding-top-8 {\\n padding-top: 8px !important;\\n}\\n.padding-left-8 {\\n padding-left: 8px !important;\\n}\\n.padding-bottom-8 {\\n padding-bottom: 8px !important;\\n}\\n.padding-right-8 {\\n padding-right: 8px !important;\\n}\\n.padding-7 {\\n padding: 7px !important;\\n}\\n.padding-top-7 {\\n padding-top: 7px !important;\\n}\\n.padding-left-7 {\\n padding-left: 7px !important;\\n}\\n.padding-bottom-7 {\\n padding-bottom: 7px !important;\\n}\\n.padding-right-7 {\\n padding-right: 7px !important;\\n}\\n.padding-6 {\\n padding: 6px !important;\\n}\\n.padding-top-6 {\\n padding-top: 6px !important;\\n}\\n.padding-left-6 {\\n padding-left: 6px !important;\\n}\\n.padding-bottom-6 {\\n padding-bottom: 6px !important;\\n}\\n.padding-right-6 {\\n padding-right: 6px !important;\\n}\\n.padding-5 {\\n padding: 5px !important;\\n}\\n.padding-top-5 {\\n padding-top: 5px !important;\\n}\\n.padding-left-5 {\\n padding-left: 5px !important;\\n}\\n.padding-bottom-5 {\\n padding-bottom: 5px !important;\\n}\\n.padding-right-5 {\\n padding-right: 5px !important;\\n}\\n.padding-4 {\\n padding: 4px !important;\\n}\\n.padding-top-4 {\\n padding-top: 4px !important;\\n}\\n.padding-left-4 {\\n padding-left: 4px !important;\\n}\\n.padding-bottom-4 {\\n padding-bottom: 4px !important;\\n}\\n.padding-right-4 {\\n padding-right: 4px !important;\\n}\\n.padding-3 {\\n padding: 3px !important;\\n}\\n.padding-top-3 {\\n padding-top: 3px !important;\\n}\\n.padding-left-3 {\\n padding-left: 3px !important;\\n}\\n.padding-bottom-3 {\\n padding-bottom: 3px !important;\\n}\\n.padding-right-3 {\\n padding-right: 3px !important;\\n}\\n.padding-2 {\\n padding: 2px !important;\\n}\\n.padding-top-2 {\\n padding-top: 2px !important;\\n}\\n.padding-left-2 {\\n padding-left: 2px !important;\\n}\\n.padding-bottom-2 {\\n padding-bottom: 2px !important;\\n}\\n.padding-right-2 {\\n padding-right: 2px !important;\\n}\\n.padding-1 {\\n padding: 1px !important;\\n}\\n.padding-top-1 {\\n padding-top: 1px !important;\\n}\\n.padding-left-1 {\\n padding-left: 1px !important;\\n}\\n.padding-bottom-1 {\\n padding-bottom: 1px !important;\\n}\\n.padding-right-1 {\\n padding-right: 1px !important;\\n}\\n.tab-container {\\n border: 1px #030303;\\n}\\n.demoframe {\\n border: 0;\\n width: 100%;\\n height: 800px;\\n}\\n\",\"@import \\\"../assets/stylesheets/patternfly-ng\\\";\\n\\n// ngx-bootstrap tab style\\n.tab-container {\\n border: 1px @color-pf-black;\\n}\\n\\n.demoframe {\\n border: 0;\\n width: 100%;\\n height: 800px;\\n}\\n\"],\"sourceRoot\":\"webpack://\"}]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9kZW1vL2FwcC5jb21wb25lbnQubGVzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9kZW1vL2FwcC5jb21wb25lbnQubGVzcz8yZTMzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5tYXJnaW4tdiB7XFxuICBtYXJnaW46IDE1cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi10b3AtMTUge1xcbiAgbWFyZ2luLXRvcDogMTVweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWxlZnQtMTUge1xcbiAgbWFyZ2luLWxlZnQ6IDE1cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1ib3R0b20tMTUge1xcbiAgbWFyZ2luLWJvdHRvbTogMTVweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXJpZ2h0LTE1IHtcXG4gIG1hcmdpbi1yaWdodDogMTVweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXYge1xcbiAgbWFyZ2luOiAxNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdG9wLTE0IHtcXG4gIG1hcmdpbi10b3A6IDE0cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1sZWZ0LTE0IHtcXG4gIG1hcmdpbi1sZWZ0OiAxNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tYm90dG9tLTE0IHtcXG4gIG1hcmdpbi1ib3R0b206IDE0cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1yaWdodC0xNCB7XFxuICBtYXJnaW4tcmlnaHQ6IDE0cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi12IHtcXG4gIG1hcmdpbjogMTNweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXRvcC0xMyB7XFxuICBtYXJnaW4tdG9wOiAxM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tbGVmdC0xMyB7XFxuICBtYXJnaW4tbGVmdDogMTNweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWJvdHRvbS0xMyB7XFxuICBtYXJnaW4tYm90dG9tOiAxM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tcmlnaHQtMTMge1xcbiAgbWFyZ2luLXJpZ2h0OiAxM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdiB7XFxuICBtYXJnaW46IDEycHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi10b3AtMTIge1xcbiAgbWFyZ2luLXRvcDogMTJweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWxlZnQtMTIge1xcbiAgbWFyZ2luLWxlZnQ6IDEycHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1ib3R0b20tMTIge1xcbiAgbWFyZ2luLWJvdHRvbTogMTJweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXJpZ2h0LTEyIHtcXG4gIG1hcmdpbi1yaWdodDogMTJweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXYge1xcbiAgbWFyZ2luOiAxMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdG9wLTExIHtcXG4gIG1hcmdpbi10b3A6IDExcHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1sZWZ0LTExIHtcXG4gIG1hcmdpbi1sZWZ0OiAxMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tYm90dG9tLTExIHtcXG4gIG1hcmdpbi1ib3R0b206IDExcHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1yaWdodC0xMSB7XFxuICBtYXJnaW4tcmlnaHQ6IDExcHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi12IHtcXG4gIG1hcmdpbjogMTBweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXRvcC0xMCB7XFxuICBtYXJnaW4tdG9wOiAxMHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tbGVmdC0xMCB7XFxuICBtYXJnaW4tbGVmdDogMTBweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWJvdHRvbS0xMCB7XFxuICBtYXJnaW4tYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tcmlnaHQtMTAge1xcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdiB7XFxuICBtYXJnaW46IDlweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXRvcC05IHtcXG4gIG1hcmdpbi10b3A6IDlweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWxlZnQtOSB7XFxuICBtYXJnaW4tbGVmdDogOXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tYm90dG9tLTkge1xcbiAgbWFyZ2luLWJvdHRvbTogOXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tcmlnaHQtOSB7XFxuICBtYXJnaW4tcmlnaHQ6IDlweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXYge1xcbiAgbWFyZ2luOiA4cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi10b3AtOCB7XFxuICBtYXJnaW4tdG9wOiA4cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1sZWZ0LTgge1xcbiAgbWFyZ2luLWxlZnQ6IDhweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWJvdHRvbS04IHtcXG4gIG1hcmdpbi1ib3R0b206IDhweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXJpZ2h0LTgge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi12IHtcXG4gIG1hcmdpbjogN3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdG9wLTcge1xcbiAgbWFyZ2luLXRvcDogN3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tbGVmdC03IHtcXG4gIG1hcmdpbi1sZWZ0OiA3cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1ib3R0b20tNyB7XFxuICBtYXJnaW4tYm90dG9tOiA3cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1yaWdodC03IHtcXG4gIG1hcmdpbi1yaWdodDogN3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdiB7XFxuICBtYXJnaW46IDZweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXRvcC02IHtcXG4gIG1hcmdpbi10b3A6IDZweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWxlZnQtNiB7XFxuICBtYXJnaW4tbGVmdDogNnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tYm90dG9tLTYge1xcbiAgbWFyZ2luLWJvdHRvbTogNnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tcmlnaHQtNiB7XFxuICBtYXJnaW4tcmlnaHQ6IDZweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXYge1xcbiAgbWFyZ2luOiA1cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi10b3AtNSB7XFxuICBtYXJnaW4tdG9wOiA1cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1sZWZ0LTUge1xcbiAgbWFyZ2luLWxlZnQ6IDVweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWJvdHRvbS01IHtcXG4gIG1hcmdpbi1ib3R0b206IDVweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXJpZ2h0LTUge1xcbiAgbWFyZ2luLXJpZ2h0OiA1cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi12IHtcXG4gIG1hcmdpbjogNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdG9wLTQge1xcbiAgbWFyZ2luLXRvcDogNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tbGVmdC00IHtcXG4gIG1hcmdpbi1sZWZ0OiA0cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1ib3R0b20tNCB7XFxuICBtYXJnaW4tYm90dG9tOiA0cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1yaWdodC00IHtcXG4gIG1hcmdpbi1yaWdodDogNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdiB7XFxuICBtYXJnaW46IDNweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXRvcC0zIHtcXG4gIG1hcmdpbi10b3A6IDNweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWxlZnQtMyB7XFxuICBtYXJnaW4tbGVmdDogM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tYm90dG9tLTMge1xcbiAgbWFyZ2luLWJvdHRvbTogM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tcmlnaHQtMyB7XFxuICBtYXJnaW4tcmlnaHQ6IDNweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXYge1xcbiAgbWFyZ2luOiAycHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi10b3AtMiB7XFxuICBtYXJnaW4tdG9wOiAycHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1sZWZ0LTIge1xcbiAgbWFyZ2luLWxlZnQ6IDJweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWJvdHRvbS0yIHtcXG4gIG1hcmdpbi1ib3R0b206IDJweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXJpZ2h0LTIge1xcbiAgbWFyZ2luLXJpZ2h0OiAycHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi12IHtcXG4gIG1hcmdpbjogMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdG9wLTEge1xcbiAgbWFyZ2luLXRvcDogMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tbGVmdC0xIHtcXG4gIG1hcmdpbi1sZWZ0OiAxcHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1ib3R0b20tMSB7XFxuICBtYXJnaW4tYm90dG9tOiAxcHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1yaWdodC0xIHtcXG4gIG1hcmdpbi1yaWdodDogMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTE1IHtcXG4gIHBhZGRpbmc6IDE1cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTE1IHtcXG4gIHBhZGRpbmctdG9wOiAxNXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMTUge1xcbiAgcGFkZGluZy1sZWZ0OiAxNXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0xNSB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTVweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0xNSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTE0IHtcXG4gIHBhZGRpbmc6IDE0cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTE0IHtcXG4gIHBhZGRpbmctdG9wOiAxNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMTQge1xcbiAgcGFkZGluZy1sZWZ0OiAxNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0xNCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTRweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0xNCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTEzIHtcXG4gIHBhZGRpbmc6IDEzcHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTEzIHtcXG4gIHBhZGRpbmctdG9wOiAxM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMTMge1xcbiAgcGFkZGluZy1sZWZ0OiAxM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0xMyB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTNweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0xMyB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTEyIHtcXG4gIHBhZGRpbmc6IDEycHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTEyIHtcXG4gIHBhZGRpbmctdG9wOiAxMnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMTIge1xcbiAgcGFkZGluZy1sZWZ0OiAxMnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0xMiB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTJweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0xMiB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxMnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTExIHtcXG4gIHBhZGRpbmc6IDExcHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTExIHtcXG4gIHBhZGRpbmctdG9wOiAxMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMTEge1xcbiAgcGFkZGluZy1sZWZ0OiAxMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0xMSB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTFweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0xMSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTEwIHtcXG4gIHBhZGRpbmc6IDEwcHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTEwIHtcXG4gIHBhZGRpbmctdG9wOiAxMHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMTAge1xcbiAgcGFkZGluZy1sZWZ0OiAxMHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0xMCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTBweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0xMCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxMHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTkge1xcbiAgcGFkZGluZzogOXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLXRvcC05IHtcXG4gIHBhZGRpbmctdG9wOiA5cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctbGVmdC05IHtcXG4gIHBhZGRpbmctbGVmdDogOXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS05IHtcXG4gIHBhZGRpbmctYm90dG9tOiA5cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctcmlnaHQtOSB7XFxuICBwYWRkaW5nLXJpZ2h0OiA5cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctOCB7XFxuICBwYWRkaW5nOiA4cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTgge1xcbiAgcGFkZGluZy10b3A6IDhweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1sZWZ0LTgge1xcbiAgcGFkZGluZy1sZWZ0OiA4cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctYm90dG9tLTgge1xcbiAgcGFkZGluZy1ib3R0b206IDhweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC04IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDhweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy03IHtcXG4gIHBhZGRpbmc6IDdweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy10b3AtNyB7XFxuICBwYWRkaW5nLXRvcDogN3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtNyB7XFxuICBwYWRkaW5nLWxlZnQ6IDdweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1ib3R0b20tNyB7XFxuICBwYWRkaW5nLWJvdHRvbTogN3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLXJpZ2h0LTcge1xcbiAgcGFkZGluZy1yaWdodDogN3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTYge1xcbiAgcGFkZGluZzogNnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLXRvcC02IHtcXG4gIHBhZGRpbmctdG9wOiA2cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctbGVmdC02IHtcXG4gIHBhZGRpbmctbGVmdDogNnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS02IHtcXG4gIHBhZGRpbmctYm90dG9tOiA2cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctcmlnaHQtNiB7XFxuICBwYWRkaW5nLXJpZ2h0OiA2cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctNSB7XFxuICBwYWRkaW5nOiA1cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTUge1xcbiAgcGFkZGluZy10b3A6IDVweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1sZWZ0LTUge1xcbiAgcGFkZGluZy1sZWZ0OiA1cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctYm90dG9tLTUge1xcbiAgcGFkZGluZy1ib3R0b206IDVweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC01IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDVweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy00IHtcXG4gIHBhZGRpbmc6IDRweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy10b3AtNCB7XFxuICBwYWRkaW5nLXRvcDogNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtNCB7XFxuICBwYWRkaW5nLWxlZnQ6IDRweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1ib3R0b20tNCB7XFxuICBwYWRkaW5nLWJvdHRvbTogNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLXJpZ2h0LTQge1xcbiAgcGFkZGluZy1yaWdodDogNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTMge1xcbiAgcGFkZGluZzogM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLXRvcC0zIHtcXG4gIHBhZGRpbmctdG9wOiAzcHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctbGVmdC0zIHtcXG4gIHBhZGRpbmctbGVmdDogM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0zIHtcXG4gIHBhZGRpbmctYm90dG9tOiAzcHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctcmlnaHQtMyB7XFxuICBwYWRkaW5nLXJpZ2h0OiAzcHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctMiB7XFxuICBwYWRkaW5nOiAycHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTIge1xcbiAgcGFkZGluZy10b3A6IDJweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1sZWZ0LTIge1xcbiAgcGFkZGluZy1sZWZ0OiAycHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctYm90dG9tLTIge1xcbiAgcGFkZGluZy1ib3R0b206IDJweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0yIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDJweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy0xIHtcXG4gIHBhZGRpbmc6IDFweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy10b3AtMSB7XFxuICBwYWRkaW5nLXRvcDogMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMSB7XFxuICBwYWRkaW5nLWxlZnQ6IDFweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1ib3R0b20tMSB7XFxuICBwYWRkaW5nLWJvdHRvbTogMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLXJpZ2h0LTEge1xcbiAgcGFkZGluZy1yaWdodDogMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi50YWItY29udGFpbmVyIHtcXG4gIGJvcmRlcjogMXB4ICMwMzAzMDM7XFxufVxcbi5kZW1vZnJhbWUge1xcbiAgYm9yZGVyOiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDgwMHB4O1xcbn1cXG5cIiwgXCJcIiwge1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wiLy4vaG9tZS90cmF2aXMvYnVpbGQvcGF0dGVybmZseS9wYXR0ZXJuZmx5LW5nL3NyYy9hc3NldHMvc3R5bGVzaGVldHMvX21peGlucy5sZXNzXCIsXCIvLi9ob21lL3RyYXZpcy9idWlsZC9wYXR0ZXJuZmx5L3BhdHRlcm5mbHktbmcvc3JjL2RlbW8vYXBwLmNvbXBvbmVudC5sZXNzXCIsXCIvLi9ob21lL3RyYXZpcy9idWlsZC9wYXR0ZXJuZmx5L3BhdHRlcm5mbHktbmcvc3JjL2RlbW8vYXBwLmNvbXBvbmVudC5sZXNzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQW9CRTtFQUNFLHdCQUFBO0NDbkJIO0FEcUJDO0VBQ0UsNEJBQUE7Q0NuQkg7QURxQkM7RUFDRSw2QkFBQTtDQ25CSDtBRHFCQztFQUNFLCtCQUFBO0NDbkJIO0FEcUJDO0VBQ0UsOEJBQUE7Q0NuQkg7QURNQztFQUNFLHdCQUFBO0NDSkg7QURNQztFQUNFLDRCQUFBO0NDSkg7QURNQztFQUNFLDZCQUFBO0NDSkg7QURNQztFQUNFLCtCQUFBO0NDSkg7QURNQztFQUNFLDhCQUFBO0NDSkg7QURUQztFQUNFLHdCQUFBO0NDV0g7QURUQztFQUNFLDRCQUFBO0NDV0g7QURUQztFQUNFLDZCQUFBO0NDV0g7QURUQztFQUNFLCtCQUFBO0NDV0g7QURUQztFQUNFLDhCQUFBO0NDV0g7QUR4QkM7RUFDRSx3QkFBQTtDQzBCSDtBRHhCQztFQUNFLDRCQUFBO0NDMEJIO0FEeEJDO0VBQ0UsNkJBQUE7Q0MwQkg7QUR4QkM7RUFDRSwrQkFBQTtDQzBCSDtBRHhCQztFQUNFLDhCQUFBO0NDMEJIO0FEdkNDO0VBQ0Usd0JBQUE7Q0N5Q0g7QUR2Q0M7RUFDRSw0QkFBQTtDQ3lDSDtBRHZDQztFQUNFLDZCQUFBO0NDeUNIO0FEdkNDO0VBQ0UsK0JBQUE7Q0N5Q0g7QUR2Q0M7RUFDRSw4QkFBQTtDQ3lDSDtBRHREQztFQUNFLHdCQUFBO0NDd0RIO0FEdERDO0VBQ0UsNEJBQUE7Q0N3REg7QUR0REM7RUFDRSw2QkFBQTtDQ3dESDtBRHREQztFQUNFLCtCQUFBO0NDd0RIO0FEdERDO0VBQ0UsOEJBQUE7Q0N3REg7QURyRUM7RUFDRSx1QkFBQTtDQ3VFSDtBRHJFQztFQUNFLDJCQUFBO0NDdUVIO0FEckVDO0VBQ0UsNEJBQUE7Q0N1RUg7QURyRUM7RUFDRSw4QkFBQTtDQ3VFSDtBRHJFQztFQUNFLDZCQUFBO0NDdUVIO0FEcEZDO0VBQ0UsdUJBQUE7Q0NzRkg7QURwRkM7RUFDRSwyQkFBQTtDQ3NGSDtBRHBGQztFQUNFLDRCQUFBO0NDc0ZIO0FEcEZDO0VBQ0UsOEJBQUE7Q0NzRkg7QURwRkM7RUFDRSw2QkFBQTtDQ3NGSDtBRG5HQztFQUNFLHVCQUFBO0NDcUdIO0FEbkdDO0VBQ0UsMkJBQUE7Q0NxR0g7QURuR0M7RUFDRSw0QkFBQTtDQ3FHSDtBRG5HQztFQUNFLDhCQUFBO0NDcUdIO0FEbkdDO0VBQ0UsNkJBQUE7Q0NxR0g7QURsSEM7RUFDRSx1QkFBQTtDQ29ISDtBRGxIQztFQUNFLDJCQUFBO0NDb0hIO0FEbEhDO0VBQ0UsNEJBQUE7Q0NvSEg7QURsSEM7RUFDRSw4QkFBQTtDQ29ISDtBRGxIQztFQUNFLDZCQUFBO0NDb0hIO0FEaklDO0VBQ0UsdUJBQUE7Q0NtSUg7QURqSUM7RUFDRSwyQkFBQTtDQ21JSDtBRGpJQztFQUNFLDRCQUFBO0NDbUlIO0FEaklDO0VBQ0UsOEJBQUE7Q0NtSUg7QURqSUM7RUFDRSw2QkFBQTtDQ21JSDtBRGhKQztFQUNFLHVCQUFBO0NDa0pIO0FEaEpDO0VBQ0UsMkJBQUE7Q0NrSkg7QURoSkM7RUFDRSw0QkFBQTtDQ2tKSDtBRGhKQztFQUNFLDhCQUFBO0NDa0pIO0FEaEpDO0VBQ0UsNkJBQUE7Q0NrSkg7QUQvSkM7RUFDRSx1QkFBQTtDQ2lLSDtBRC9KQztFQUNFLDJCQUFBO0NDaUtIO0FEL0pDO0VBQ0UsNEJBQUE7Q0NpS0g7QUQvSkM7RUFDRSw4QkFBQTtDQ2lLSDtBRC9KQztFQUNFLDZCQUFBO0NDaUtIO0FEOUtDO0VBQ0UsdUJBQUE7Q0NnTEg7QUQ5S0M7RUFDRSwyQkFBQTtDQ2dMSDtBRDlLQztFQUNFLDRCQUFBO0NDZ0xIO0FEOUtDO0VBQ0UsOEJBQUE7Q0NnTEg7QUQ5S0M7RUFDRSw2QkFBQTtDQ2dMSDtBRDdMQztFQUNFLHVCQUFBO0NDK0xIO0FEN0xDO0VBQ0UsMkJBQUE7Q0MrTEg7QUQ3TEM7RUFDRSw0QkFBQTtDQytMSDtBRDdMQztFQUNFLDhCQUFBO0NDK0xIO0FEN0xDO0VBQ0UsNkJBQUE7Q0MrTEg7QUQvTkM7RUFDRSx5QkFBQTtDQ2lPSDtBRC9OQztFQUNFLDZCQUFBO0NDaU9IO0FEL05DO0VBQ0UsOEJBQUE7Q0NpT0g7QUQvTkM7RUFDRSxnQ0FBQTtDQ2lPSDtBRC9OQztFQUNFLCtCQUFBO0NDaU9IO0FEOU9DO0VBQ0UseUJBQUE7Q0NnUEg7QUQ5T0M7RUFDRSw2QkFBQTtDQ2dQSDtBRDlPQztFQUNFLDhCQUFBO0NDZ1BIO0FEOU9DO0VBQ0UsZ0NBQUE7Q0NnUEg7QUQ5T0M7RUFDRSwrQkFBQTtDQ2dQSDtBRDdQQztFQUNFLHlCQUFBO0NDK1BIO0FEN1BDO0VBQ0UsNkJBQUE7Q0MrUEg7QUQ3UEM7RUFDRSw4QkFBQTtDQytQSDtBRDdQQztFQUNFLGdDQUFBO0NDK1BIO0FEN1BDO0VBQ0UsK0JBQUE7Q0MrUEg7QUQ1UUM7RUFDRSx5QkFBQTtDQzhRSDtBRDVRQztFQUNFLDZCQUFBO0NDOFFIO0FENVFDO0VBQ0UsOEJBQUE7Q0M4UUg7QUQ1UUM7RUFDRSxnQ0FBQTtDQzhRSDtBRDVRQztFQUNFLCtCQUFBO0NDOFFIO0FEM1JDO0VBQ0UseUJBQUE7Q0M2Ukg7QUQzUkM7RUFDRSw2QkFBQTtDQzZSSDtBRDNSQztFQUNFLDhCQUFBO0NDNlJIO0FEM1JDO0VBQ0UsZ0NBQUE7Q0M2Ukg7QUQzUkM7RUFDRSwrQkFBQTtDQzZSSDtBRDFTQztFQUNFLHlCQUFBO0NDNFNIO0FEMVNDO0VBQ0UsNkJBQUE7Q0M0U0g7QUQxU0M7RUFDRSw4QkFBQTtDQzRTSDtBRDFTQztFQUNFLGdDQUFBO0NDNFNIO0FEMVNDO0VBQ0UsK0JBQUE7Q0M0U0g7QUR6VEM7RUFDRSx3QkFBQTtDQzJUSDtBRHpUQztFQUNFLDRCQUFBO0NDMlRIO0FEelRDO0VBQ0UsNkJBQUE7Q0MyVEg7QUR6VEM7RUFDRSwrQkFBQTtDQzJUSDtBRHpUQztFQUNFLDhCQUFBO0NDMlRIO0FEeFVDO0VBQ0Usd0JBQUE7Q0MwVUg7QUR4VUM7RUFDRSw0QkFBQTtDQzBVSDtBRHhVQztFQUNFLDZCQUFBO0NDMFVIO0FEeFVDO0VBQ0UsK0JBQUE7Q0MwVUg7QUR4VUM7RUFDRSw4QkFBQTtDQzBVSDtBRHZWQztFQUNFLHdCQUFBO0NDeVZIO0FEdlZDO0VBQ0UsNEJBQUE7Q0N5Vkg7QUR2VkM7RUFDRSw2QkFBQTtDQ3lWSDtBRHZWQztFQUNFLCtCQUFBO0NDeVZIO0FEdlZDO0VBQ0UsOEJBQUE7Q0N5Vkg7QUR0V0M7RUFDRSx3QkFBQTtDQ3dXSDtBRHRXQztFQUNFLDRCQUFBO0NDd1dIO0FEdFdDO0VBQ0UsNkJBQUE7Q0N3V0g7QUR0V0M7RUFDRSwrQkFBQTtDQ3dXSDtBRHRXQztFQUNFLDhCQUFBO0NDd1dIO0FEclhDO0VBQ0Usd0JBQUE7Q0N1WEg7QURyWEM7RUFDRSw0QkFBQTtDQ3VYSDtBRHJYQztFQUNFLDZCQUFBO0NDdVhIO0FEclhDO0VBQ0UsK0JBQUE7Q0N1WEg7QURyWEM7RUFDRSw4QkFBQTtDQ3VYSDtBRHBZQztFQUNFLHdCQUFBO0NDc1lIO0FEcFlDO0VBQ0UsNEJBQUE7Q0NzWUg7QURwWUM7RUFDRSw2QkFBQTtDQ3NZSDtBRHBZQztFQUNFLCtCQUFBO0NDc1lIO0FEcFlDO0VBQ0UsOEJBQUE7Q0NzWUg7QURuWkM7RUFDRSx3QkFBQTtDQ3FaSDtBRG5aQztFQUNFLDRCQUFBO0NDcVpIO0FEblpDO0VBQ0UsNkJBQUE7Q0NxWkg7QURuWkM7RUFDRSwrQkFBQTtDQ3FaSDtBRG5aQztFQUNFLDhCQUFBO0NDcVpIO0FEbGFDO0VBQ0Usd0JBQUE7Q0NvYUg7QURsYUM7RUFDRSw0QkFBQTtDQ29hSDtBRGxhQztFQUNFLDZCQUFBO0NDb2FIO0FEbGFDO0VBQ0UsK0JBQUE7Q0NvYUg7QURsYUM7RUFDRSw4QkFBQTtDQ29hSDtBRGpiQztFQUNFLHdCQUFBO0NDbWJIO0FEamJDO0VBQ0UsNEJBQUE7Q0NtYkg7QURqYkM7RUFDRSw2QkFBQTtDQ21iSDtBRGpiQztFQUNFLCtCQUFBO0NDbWJIO0FEamJDO0VBQ0UsOEJBQUE7Q0NtYkg7QUM5YkQ7RUFDRSxvQkFBQTtDRGdjRDtBQzdiRDtFQUNFLFVBQUE7RUFDQSxZQUFBO0VBQ0EsY0FBQTtDRCtiRFwiLFwiZmlsZVwiOlwiYXBwLmNvbXBvbmVudC5sZXNzXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5wYWRkaW5nLWxvb3AgKEBpKSB3aGVuIChAaSA+IDApIHtcXG4gIC5wYWRkaW5nLUB7aX0ge1xcbiAgICBwYWRkaW5nOiB+XFxcIkB7aX1weFxcXCIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYWRkaW5nLXRvcC1Ae2l9IHtcXG4gICAgcGFkZGluZy10b3A6IH5cXFwiQHtpfXB4XFxcIiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBhZGRpbmctbGVmdC1Ae2l9IHtcXG4gICAgcGFkZGluZy1sZWZ0OiB+XFxcIkB7aX1weFxcXCIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYWRkaW5nLWJvdHRvbS1Ae2l9IHtcXG4gICAgcGFkZGluZy1ib3R0b206IH5cXFwiQHtpfXB4XFxcIiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBhZGRpbmctcmlnaHQtQHtpfSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IH5cXFwiQHtpfXB4XFxcIiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBhZGRpbmctbG9vcChAaSAtIDEpO1xcbn1cXG5cXG4ubWFyZ2luLWxvb3AgKEBpKSB3aGVuIChAaSA+IDApIHtcXG4gIC5tYXJnaW4tdiB7XFxuICAgIG1hcmdpbjogflxcXCJAe2l9cHhcXFwiICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWFyZ2luLXRvcC1Ae2l9IHtcXG4gICAgbWFyZ2luLXRvcDogflxcXCJAe2l9cHhcXFwiICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWFyZ2luLWxlZnQtQHtpfSB7XFxuICAgIG1hcmdpbi1sZWZ0OiB+XFxcIkB7aX1weFxcXCIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYXJnaW4tYm90dG9tLUB7aX0ge1xcbiAgICBtYXJnaW4tYm90dG9tOiB+XFxcIkB7aX1weFxcXCIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYXJnaW4tcmlnaHQtQHtpfSB7XFxuICAgIG1hcmdpbi1yaWdodDogflxcXCJAe2l9cHhcXFwiICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWFyZ2luLWxvb3AoQGkgLSAxKTtcXG59XFxuXFxuLm1hcmdpbi1sb29wKDE1KTtcXG4ucGFkZGluZy1sb29wKDE1KTtcXG5cIixcIi5tYXJnaW4tdiB7XFxuICBtYXJnaW46IDE1cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi10b3AtMTUge1xcbiAgbWFyZ2luLXRvcDogMTVweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWxlZnQtMTUge1xcbiAgbWFyZ2luLWxlZnQ6IDE1cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1ib3R0b20tMTUge1xcbiAgbWFyZ2luLWJvdHRvbTogMTVweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXJpZ2h0LTE1IHtcXG4gIG1hcmdpbi1yaWdodDogMTVweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXYge1xcbiAgbWFyZ2luOiAxNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdG9wLTE0IHtcXG4gIG1hcmdpbi10b3A6IDE0cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1sZWZ0LTE0IHtcXG4gIG1hcmdpbi1sZWZ0OiAxNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tYm90dG9tLTE0IHtcXG4gIG1hcmdpbi1ib3R0b206IDE0cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1yaWdodC0xNCB7XFxuICBtYXJnaW4tcmlnaHQ6IDE0cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi12IHtcXG4gIG1hcmdpbjogMTNweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXRvcC0xMyB7XFxuICBtYXJnaW4tdG9wOiAxM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tbGVmdC0xMyB7XFxuICBtYXJnaW4tbGVmdDogMTNweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWJvdHRvbS0xMyB7XFxuICBtYXJnaW4tYm90dG9tOiAxM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tcmlnaHQtMTMge1xcbiAgbWFyZ2luLXJpZ2h0OiAxM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdiB7XFxuICBtYXJnaW46IDEycHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi10b3AtMTIge1xcbiAgbWFyZ2luLXRvcDogMTJweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWxlZnQtMTIge1xcbiAgbWFyZ2luLWxlZnQ6IDEycHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1ib3R0b20tMTIge1xcbiAgbWFyZ2luLWJvdHRvbTogMTJweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXJpZ2h0LTEyIHtcXG4gIG1hcmdpbi1yaWdodDogMTJweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXYge1xcbiAgbWFyZ2luOiAxMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdG9wLTExIHtcXG4gIG1hcmdpbi10b3A6IDExcHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1sZWZ0LTExIHtcXG4gIG1hcmdpbi1sZWZ0OiAxMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tYm90dG9tLTExIHtcXG4gIG1hcmdpbi1ib3R0b206IDExcHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1yaWdodC0xMSB7XFxuICBtYXJnaW4tcmlnaHQ6IDExcHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi12IHtcXG4gIG1hcmdpbjogMTBweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXRvcC0xMCB7XFxuICBtYXJnaW4tdG9wOiAxMHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tbGVmdC0xMCB7XFxuICBtYXJnaW4tbGVmdDogMTBweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWJvdHRvbS0xMCB7XFxuICBtYXJnaW4tYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tcmlnaHQtMTAge1xcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdiB7XFxuICBtYXJnaW46IDlweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXRvcC05IHtcXG4gIG1hcmdpbi10b3A6IDlweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWxlZnQtOSB7XFxuICBtYXJnaW4tbGVmdDogOXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tYm90dG9tLTkge1xcbiAgbWFyZ2luLWJvdHRvbTogOXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tcmlnaHQtOSB7XFxuICBtYXJnaW4tcmlnaHQ6IDlweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXYge1xcbiAgbWFyZ2luOiA4cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi10b3AtOCB7XFxuICBtYXJnaW4tdG9wOiA4cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1sZWZ0LTgge1xcbiAgbWFyZ2luLWxlZnQ6IDhweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWJvdHRvbS04IHtcXG4gIG1hcmdpbi1ib3R0b206IDhweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXJpZ2h0LTgge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi12IHtcXG4gIG1hcmdpbjogN3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdG9wLTcge1xcbiAgbWFyZ2luLXRvcDogN3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tbGVmdC03IHtcXG4gIG1hcmdpbi1sZWZ0OiA3cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1ib3R0b20tNyB7XFxuICBtYXJnaW4tYm90dG9tOiA3cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1yaWdodC03IHtcXG4gIG1hcmdpbi1yaWdodDogN3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdiB7XFxuICBtYXJnaW46IDZweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXRvcC02IHtcXG4gIG1hcmdpbi10b3A6IDZweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWxlZnQtNiB7XFxuICBtYXJnaW4tbGVmdDogNnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tYm90dG9tLTYge1xcbiAgbWFyZ2luLWJvdHRvbTogNnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tcmlnaHQtNiB7XFxuICBtYXJnaW4tcmlnaHQ6IDZweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXYge1xcbiAgbWFyZ2luOiA1cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi10b3AtNSB7XFxuICBtYXJnaW4tdG9wOiA1cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1sZWZ0LTUge1xcbiAgbWFyZ2luLWxlZnQ6IDVweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWJvdHRvbS01IHtcXG4gIG1hcmdpbi1ib3R0b206IDVweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXJpZ2h0LTUge1xcbiAgbWFyZ2luLXJpZ2h0OiA1cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi12IHtcXG4gIG1hcmdpbjogNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdG9wLTQge1xcbiAgbWFyZ2luLXRvcDogNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tbGVmdC00IHtcXG4gIG1hcmdpbi1sZWZ0OiA0cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1ib3R0b20tNCB7XFxuICBtYXJnaW4tYm90dG9tOiA0cHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1yaWdodC00IHtcXG4gIG1hcmdpbi1yaWdodDogNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdiB7XFxuICBtYXJnaW46IDNweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXRvcC0zIHtcXG4gIG1hcmdpbi10b3A6IDNweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWxlZnQtMyB7XFxuICBtYXJnaW4tbGVmdDogM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tYm90dG9tLTMge1xcbiAgbWFyZ2luLWJvdHRvbTogM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tcmlnaHQtMyB7XFxuICBtYXJnaW4tcmlnaHQ6IDNweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXYge1xcbiAgbWFyZ2luOiAycHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi10b3AtMiB7XFxuICBtYXJnaW4tdG9wOiAycHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1sZWZ0LTIge1xcbiAgbWFyZ2luLWxlZnQ6IDJweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLWJvdHRvbS0yIHtcXG4gIG1hcmdpbi1ib3R0b206IDJweCAhaW1wb3J0YW50O1xcbn1cXG4ubWFyZ2luLXJpZ2h0LTIge1xcbiAgbWFyZ2luLXJpZ2h0OiAycHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi12IHtcXG4gIG1hcmdpbjogMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tdG9wLTEge1xcbiAgbWFyZ2luLXRvcDogMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5tYXJnaW4tbGVmdC0xIHtcXG4gIG1hcmdpbi1sZWZ0OiAxcHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1ib3R0b20tMSB7XFxuICBtYXJnaW4tYm90dG9tOiAxcHggIWltcG9ydGFudDtcXG59XFxuLm1hcmdpbi1yaWdodC0xIHtcXG4gIG1hcmdpbi1yaWdodDogMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTE1IHtcXG4gIHBhZGRpbmc6IDE1cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTE1IHtcXG4gIHBhZGRpbmctdG9wOiAxNXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMTUge1xcbiAgcGFkZGluZy1sZWZ0OiAxNXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0xNSB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTVweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0xNSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTE0IHtcXG4gIHBhZGRpbmc6IDE0cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTE0IHtcXG4gIHBhZGRpbmctdG9wOiAxNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMTQge1xcbiAgcGFkZGluZy1sZWZ0OiAxNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0xNCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTRweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0xNCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTEzIHtcXG4gIHBhZGRpbmc6IDEzcHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTEzIHtcXG4gIHBhZGRpbmctdG9wOiAxM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMTMge1xcbiAgcGFkZGluZy1sZWZ0OiAxM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0xMyB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTNweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0xMyB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTEyIHtcXG4gIHBhZGRpbmc6IDEycHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTEyIHtcXG4gIHBhZGRpbmctdG9wOiAxMnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMTIge1xcbiAgcGFkZGluZy1sZWZ0OiAxMnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0xMiB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTJweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0xMiB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxMnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTExIHtcXG4gIHBhZGRpbmc6IDExcHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTExIHtcXG4gIHBhZGRpbmctdG9wOiAxMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMTEge1xcbiAgcGFkZGluZy1sZWZ0OiAxMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0xMSB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTFweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0xMSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTEwIHtcXG4gIHBhZGRpbmc6IDEwcHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTEwIHtcXG4gIHBhZGRpbmctdG9wOiAxMHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMTAge1xcbiAgcGFkZGluZy1sZWZ0OiAxMHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0xMCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTBweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0xMCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxMHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTkge1xcbiAgcGFkZGluZzogOXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLXRvcC05IHtcXG4gIHBhZGRpbmctdG9wOiA5cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctbGVmdC05IHtcXG4gIHBhZGRpbmctbGVmdDogOXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS05IHtcXG4gIHBhZGRpbmctYm90dG9tOiA5cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctcmlnaHQtOSB7XFxuICBwYWRkaW5nLXJpZ2h0OiA5cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctOCB7XFxuICBwYWRkaW5nOiA4cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTgge1xcbiAgcGFkZGluZy10b3A6IDhweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1sZWZ0LTgge1xcbiAgcGFkZGluZy1sZWZ0OiA4cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctYm90dG9tLTgge1xcbiAgcGFkZGluZy1ib3R0b206IDhweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC04IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDhweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy03IHtcXG4gIHBhZGRpbmc6IDdweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy10b3AtNyB7XFxuICBwYWRkaW5nLXRvcDogN3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtNyB7XFxuICBwYWRkaW5nLWxlZnQ6IDdweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1ib3R0b20tNyB7XFxuICBwYWRkaW5nLWJvdHRvbTogN3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLXJpZ2h0LTcge1xcbiAgcGFkZGluZy1yaWdodDogN3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTYge1xcbiAgcGFkZGluZzogNnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLXRvcC02IHtcXG4gIHBhZGRpbmctdG9wOiA2cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctbGVmdC02IHtcXG4gIHBhZGRpbmctbGVmdDogNnB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS02IHtcXG4gIHBhZGRpbmctYm90dG9tOiA2cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctcmlnaHQtNiB7XFxuICBwYWRkaW5nLXJpZ2h0OiA2cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctNSB7XFxuICBwYWRkaW5nOiA1cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTUge1xcbiAgcGFkZGluZy10b3A6IDVweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1sZWZ0LTUge1xcbiAgcGFkZGluZy1sZWZ0OiA1cHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctYm90dG9tLTUge1xcbiAgcGFkZGluZy1ib3R0b206IDVweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC01IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDVweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy00IHtcXG4gIHBhZGRpbmc6IDRweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy10b3AtNCB7XFxuICBwYWRkaW5nLXRvcDogNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtNCB7XFxuICBwYWRkaW5nLWxlZnQ6IDRweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1ib3R0b20tNCB7XFxuICBwYWRkaW5nLWJvdHRvbTogNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLXJpZ2h0LTQge1xcbiAgcGFkZGluZy1yaWdodDogNHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLTMge1xcbiAgcGFkZGluZzogM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLXRvcC0zIHtcXG4gIHBhZGRpbmctdG9wOiAzcHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctbGVmdC0zIHtcXG4gIHBhZGRpbmctbGVmdDogM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWJvdHRvbS0zIHtcXG4gIHBhZGRpbmctYm90dG9tOiAzcHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctcmlnaHQtMyB7XFxuICBwYWRkaW5nLXJpZ2h0OiAzcHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctMiB7XFxuICBwYWRkaW5nOiAycHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctdG9wLTIge1xcbiAgcGFkZGluZy10b3A6IDJweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1sZWZ0LTIge1xcbiAgcGFkZGluZy1sZWZ0OiAycHggIWltcG9ydGFudDtcXG59XFxuLnBhZGRpbmctYm90dG9tLTIge1xcbiAgcGFkZGluZy1ib3R0b206IDJweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1yaWdodC0yIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDJweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy0xIHtcXG4gIHBhZGRpbmc6IDFweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy10b3AtMSB7XFxuICBwYWRkaW5nLXRvcDogMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLWxlZnQtMSB7XFxuICBwYWRkaW5nLWxlZnQ6IDFweCAhaW1wb3J0YW50O1xcbn1cXG4ucGFkZGluZy1ib3R0b20tMSB7XFxuICBwYWRkaW5nLWJvdHRvbTogMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi5wYWRkaW5nLXJpZ2h0LTEge1xcbiAgcGFkZGluZy1yaWdodDogMXB4ICFpbXBvcnRhbnQ7XFxufVxcbi50YWItY29udGFpbmVyIHtcXG4gIGJvcmRlcjogMXB4ICMwMzAzMDM7XFxufVxcbi5kZW1vZnJhbWUge1xcbiAgYm9yZGVyOiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDgwMHB4O1xcbn1cXG5cIixcIkBpbXBvcnQgXFxcIi4uL2Fzc2V0cy9zdHlsZXNoZWV0cy9wYXR0ZXJuZmx5LW5nXFxcIjtcXG5cXG4vLyBuZ3gtYm9vdHN0cmFwIHRhYiBzdHlsZVxcbi50YWItY29udGFpbmVyIHtcXG4gIGJvcmRlcjogMXB4IEBjb2xvci1wZi1ibGFjaztcXG59XFxuXFxuLmRlbW9mcmFtZSB7XFxuICBib3JkZXI6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogODAwcHg7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIndlYnBhY2s6Ly9cIn1dKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Nzcy1sb2FkZXI/e1wic291cmNlTWFwXCI6dHJ1ZSxcImNvbnRleHRcIjpcIi9cIn0hLi9+L2xlc3MtbG9hZGVyL2Rpc3Q/e1wicGF0aHNcIjpbXCIuL34vcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9kZW1vL2FwcC5jb21wb25lbnQubGVzc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJzb3VyY2VNYXBcIjp0cnVlLFwiY29udGV4dFwiOlwiL1wifSEuL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2luZGV4LmpzP3tcInBhdGhzXCI6W1wiLi9ub2RlX21vZHVsZXMvcGF0dGVybmZseS9ub2RlX21vZHVsZXNcIl0sXCJzb3VyY2VNYXBcIjp0cnVlfSEuL3NyYy9kZW1vL2FwcC5jb21wb25lbnQubGVzc1xuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/css-loader/lib/css-base.js": +/***/ (function(module, exports) { + +eval("/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function() {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\tvar result = [];\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar item = this[i];\n\t\t\tif(item[2]) {\n\t\t\t\tresult.push(\"@media \" + item[2] + \"{\" + item[1] + \"}\");\n\t\t\t} else {\n\t\t\t\tresult.push(item[1]);\n\t\t\t}\n\t\t}\n\t\treturn result.join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzP2RhMDQiXSwic291cmNlc0NvbnRlbnQiOlsiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXG5cdC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblx0bGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSB0aGlzW2ldO1xuXHRcdFx0aWYoaXRlbVsyXSkge1xuXHRcdFx0XHRyZXN1bHQucHVzaChcIkBtZWRpYSBcIiArIGl0ZW1bMl0gKyBcIntcIiArIGl0ZW1bMV0gKyBcIn1cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtWzFdKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdC5qb2luKFwiXCIpO1xuXHR9O1xuXG5cdC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cdGxpc3QuaSA9IGZ1bmN0aW9uKG1vZHVsZXMsIG1lZGlhUXVlcnkpIHtcblx0XHRpZih0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIilcblx0XHRcdG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcblx0XHR2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXHRcdFx0aWYodHlwZW9mIGlkID09PSBcIm51bWJlclwiKVxuXHRcdFx0XHRhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG5cdFx0fVxuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gbW9kdWxlc1tpXTtcblx0XHRcdC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcblx0XHRcdC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG5cdFx0XHQvLyAgd2hlbiBhIG1vZHVsZSBpcyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtZWRpYSBxdWVyaWVzLlxuXHRcdFx0Ly8gIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZlIHNtYWxsZXIgYnVuZGxlcylcblx0XHRcdGlmKHR5cGVvZiBpdGVtWzBdICE9PSBcIm51bWJlclwiIHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG5cdFx0XHRcdGlmKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gbWVkaWFRdWVyeTtcblx0XHRcdFx0fSBlbHNlIGlmKG1lZGlhUXVlcnkpIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gXCIoXCIgKyBpdGVtWzJdICsgXCIpIGFuZCAoXCIgKyBtZWRpYVF1ZXJ5ICsgXCIpXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGlzdC5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGxpc3Q7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/lodash/lodash.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_RESULT__;/**\n * @license\n * Lodash \n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.4';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:(?:1st|2nd|3rd|(?![123])\\\\dth)\\\\b)',\n rsOrdUpper = '\\\\d*(?:(?:1ST|2ND|3RD|(?![123])\\\\dTH)\\\\b)',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\n function addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n }\n\n /**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\n function addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n }\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n if (isObject(srcValue)) {\n stack || (stack = new Stack);\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(object[key], srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = object[key],\n srcValue = source[key],\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\n function cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), CLONE_DEEP_FLAG) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\n function cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), CLONE_DEEP_FLAG) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(args) {\n args.push(undefined, customDefaultsAssignIn);\n return apply(assignInWith, undefined, args);\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': ' + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/actioncomponent.html b/dist-demo/docs/classes/actioncomponent.html new file mode 100644 index 000000000..e8f02637a --- /dev/null +++ b/dist-demo/docs/classes/actioncomponent.html @@ -0,0 +1,383 @@ + + + + + + ActionComponent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ActionComponent

+
+
+
+
+
+
+
+
+
+

List actions component.

+
+

By default, buttons and kebab have no padding so they may inherit stying from components such as list and toolbar.

+
+
+
+

Hierarchy

+
    +
  • + ActionComponent +
  • +
+
+
+

Implements

+
    +
  • OnInit
  • +
+
+
+

Index

+
+
+
+

Constructors

+ +
+
+

Properties

+ +
+
+

Methods

+ +
+
+
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Properties

+
+ +

config

+
config: ActionConfig
+ +
+
+

The action config containing component properties

+
+
+
+
+ +

onActionSelect

+
onActionSelect: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when an action has been selected

+
+
+
+
+ +

template

+
template: TemplateRef<any>
+ +
+
+

Action template for custom actions

+
+
+
+
+
+

Methods

+
+ +

ngDoCheck

+
    +
  • ngDoCheck(): void
  • +
+ +
+
+ +

ngOnInit

+
    +
  • ngOnInit(): void
  • +
+ +
+
+ +

Protected setupConfig

+
    +
  • setupConfig(): void
  • +
+ +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/actionconfig.html b/dist-demo/docs/classes/actionconfig.html new file mode 100644 index 000000000..2fcf84281 --- /dev/null +++ b/dist-demo/docs/classes/actionconfig.html @@ -0,0 +1,284 @@ + + + + + + ActionConfig | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ActionConfig

+
+
+
+
+
+
+
+
+
+

An action config containing properties for primary and secondary actions such as + multiple buttons and kebab menu options

+
+
+
+
+

Hierarchy

+
    +
  • + ActionConfig +
  • +
+
+
+

Index

+
+ +
+
+
+

Properties

+
+ +

Optional moreActions

+
moreActions: Action[]
+ +
+
+

A list of secondary actions (e.g., menu options for a kebab)

+
+
+
+
+ +

moreActionsDisabled

+
moreActionsDisabled: boolean
+ +
+
+

Set to true to disable secondary actions

+
+
+
+
+ +

moreActionsStyleClass

+
moreActionsStyleClass: string
+ +
+
+

Style class for the secondary actions container

+
+
+
+
+ +

moreActionsVisible

+
moreActionsVisible: boolean
+ +
+
+

Set to false to hide secondary actions

+
+
+
+
+ +

primaryActions

+
primaryActions: Action[]
+ +
+
+

List of primary actions (e.g., for buttons)

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/actionmodule.html b/dist-demo/docs/classes/actionmodule.html new file mode 100644 index 000000000..963153fe1 --- /dev/null +++ b/dist-demo/docs/classes/actionmodule.html @@ -0,0 +1,171 @@ + + + + + + ActionModule | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ActionModule

+
+
+
+
+
+
+
+
+
+

A module containing objects associated with action components

+
+
+
+
+

Hierarchy

+
    +
  • + ActionModule +
  • +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/emptystatecomponent.html b/dist-demo/docs/classes/emptystatecomponent.html new file mode 100644 index 000000000..a476f11bd --- /dev/null +++ b/dist-demo/docs/classes/emptystatecomponent.html @@ -0,0 +1,352 @@ + + + + + + EmptyStateComponent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class EmptyStateComponent

+
+
+
+
+
+
+
+
+
+

Component for rendering an empty state.

+
+
+
+
+

Hierarchy

+
    +
  • + EmptyStateComponent +
  • +
+
+
+

Implements

+
    +
  • OnInit
  • +
+
+
+

Index

+
+
+
+

Constructors

+ +
+
+

Properties

+ +
+
+

Methods

+ +
+
+
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Properties

+
+ +

config

+ + +
+
+

The empty state config containing component properties

+
+
+
+
+ +

onActionSelect

+
onActionSelect: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when an action is selected

+
+
+
+
+
+

Methods

+
+ +

ngDoCheck

+
    +
  • ngDoCheck(): void
  • +
+ +
+
+ +

ngOnInit

+
    +
  • ngOnInit(): void
  • +
+ +
+
+ +

Protected setupConfig

+
    +
  • setupConfig(): void
  • +
+ +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/emptystateconfig.html b/dist-demo/docs/classes/emptystateconfig.html new file mode 100644 index 000000000..654c6344d --- /dev/null +++ b/dist-demo/docs/classes/emptystateconfig.html @@ -0,0 +1,312 @@ + + + + + + EmptyStateConfig | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class EmptyStateConfig

+
+
+
+
+
+
+
+
+
+

An empty state config containing component properties

+
+
+
+
+

Hierarchy

+
    +
  • + EmptyStateConfig +
  • +
+
+
+

Index

+
+
+
+

Properties

+ +
+
+
+
+
+

Properties

+
+ +

Optional actions

+
actions: ActionConfig
+ +
+
+

The action config containing button properties

+
+
+
+
+ +

Optional helpLink

+
helpLink: object
+ +
+
+

Config properties for the help link

+
+
+
+

Type declaration

+
    +
  • +
    hypertext: string
    +
    +
    +

    Help link text

    +
    +
    +
  • +
  • +
    Optional text?: string
    +
    +
    +

    Help link description

    +
    +
    +
  • +
  • +
    url: string
    +
    +
    +

    Help link URL

    +
    +
    +
  • +
+
+
+
+ +

Optional iconStyleClass

+
iconStyleClass: string
+ +
+
+

Style class for main icon (e.g., 'pficon pficon-add-circle-o')

+
+
+
+
+ +

Optional info

+
info: string
+ +
+
+

Text for the main informational paragraph

+
+
+
+
+ +

title

+
title: string
+ +
+
+

Text for the main title

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/emptystatemodule.html b/dist-demo/docs/classes/emptystatemodule.html new file mode 100644 index 000000000..b519ed09c --- /dev/null +++ b/dist-demo/docs/classes/emptystatemodule.html @@ -0,0 +1,171 @@ + + + + + + EmptyStateModule | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class EmptyStateModule

+
+
+
+
+
+
+
+
+
+

A module containing objects associated with the empty state component

+
+
+
+
+

Hierarchy

+
    +
  • + EmptyStateModule +
  • +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/filter.html b/dist-demo/docs/classes/filter.html new file mode 100644 index 000000000..8c18a7812 --- /dev/null +++ b/dist-demo/docs/classes/filter.html @@ -0,0 +1,245 @@ + + + + + + Filter | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class Filter

+
+
+
+
+
+
+
+
+
+

An object containing filter properties

+
+
+
+
+

Hierarchy

+
    +
  • + Filter +
  • +
+
+
+

Index

+
+
+
+

Properties

+ +
+
+
+
+
+

Properties

+
+ +

field

+ + +
+
+

A filterable field, used to select categories of filters

+
+
+
+
+ +

Optional query

+ + +
+
+

A filterable query, if applicable

+
+
+
+
+ +

value

+
value: string
+ +
+
+

Filter value

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/filtercomponent.html b/dist-demo/docs/classes/filtercomponent.html new file mode 100644 index 000000000..3cb195ac8 --- /dev/null +++ b/dist-demo/docs/classes/filtercomponent.html @@ -0,0 +1,530 @@ + + + + + + FilterComponent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class FilterComponent

+
+
+
+
+
+
+
+
+
+

Filter component

+
+
+
+
+

Hierarchy

+
    +
  • + FilterComponent +
  • +
+
+
+

Implements

+
    +
  • OnInit
  • +
+
+
+

Index

+
+
+
+

Constructors

+ +
+
+

Properties

+ +
+
+

Methods

+ +
+
+
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Properties

+
+ +

config

+
config: FilterConfig
+ +
+
+

The filter config containing component properties

+
+
+
+
+ +

onChange

+
onChange: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when a filter has been changed

+
+
+
+
+ +

onFilterSelect

+
onFilterSelect: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when a field menu option is selected

+
+
+
+
+ +

onTypeAhead

+
onTypeAhead: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when the user types ahead in the query input field

+
+
+
+
+
+

Methods

+
+ +

addFilter

+ + +
+
+ +

clear

+
    +
  • clear($event: Filter[]): void
  • +
+ +
+
+ +

fieldSelected

+ + +
+
+ +

ngDoCheck

+
    +
  • ngDoCheck(): void
  • +
+ +
+
+ +

ngOnInit

+
    +
  • ngOnInit(): void
  • +
+ +
+
+ +

Protected setupConfig

+
    +
  • setupConfig(): void
  • +
+ +
+
+ +

typeAhead

+ + +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/filterconfig.html b/dist-demo/docs/classes/filterconfig.html new file mode 100644 index 000000000..3dcc61f71 --- /dev/null +++ b/dist-demo/docs/classes/filterconfig.html @@ -0,0 +1,302 @@ + + + + + + FilterConfig | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class FilterConfig

+
+
+
+
+
+
+
+
+
+

A config containing properties for filters

+
+
+
+
+

Hierarchy

+
    +
  • + FilterConfig +
  • +
+
+
+

Index

+
+ +
+
+
+

Properties

+
+ +

Optional appliedFilters

+
appliedFilters: Filter[]
+ +
+
+

A list of the currently applied filters

+
+
+
+
+ +

fields

+
fields: FilterField[]
+ +
+
+

A list of filterable fields

+
+
+
+
+ +

Optional resultsCount

+
resultsCount: number
+ +
+
+

The number of results returned after the current applied filters have been applied

+
+
+
+
+ +

Optional selectedCount

+
selectedCount: number
+ +
+
+

The number selected items

+
+
+
+
+ +

Optional tooltipPlacement

+
tooltipPlacement: string
+ +
+
+

The tooltip placement (e.g., bottom, left, top, right)

+
+
+
+
+ +

Optional totalCount

+
totalCount: number
+ +
+
+

The total number of items before any filters have been applied

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/filterevent.html b/dist-demo/docs/classes/filterevent.html new file mode 100644 index 000000000..532405fdf --- /dev/null +++ b/dist-demo/docs/classes/filterevent.html @@ -0,0 +1,264 @@ + + + + + + FilterEvent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class FilterEvent

+
+
+
+
+
+
+
+
+
+

An object containing properties for filter events

+
+
+
+
+

Hierarchy

+
    +
  • + FilterEvent +
  • +
+
+
+

Index

+
+
+
+

Properties

+ +
+
+
+
+
+

Properties

+
+ +

Optional appliedFilters

+
appliedFilters: Filter[]
+ +
+
+

A list of the currently applied filters

+
+
+
+
+ +

field

+ + +
+
+

The currently selected filter field

+
+
+
+
+ +

Optional query

+ + +
+
+

The currently selected filter query, if applicable

+
+
+
+
+ +

Optional value

+
value: string
+ +
+
+

The filter input field value, if applicable

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/filterfield.html b/dist-demo/docs/classes/filterfield.html new file mode 100644 index 000000000..ad2b0265e --- /dev/null +++ b/dist-demo/docs/classes/filterfield.html @@ -0,0 +1,283 @@ + + + + + + FilterField | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class FilterField

+
+
+
+
+
+
+
+
+
+

An object containing properties for a filterable field, used to select categories of filters

+
+
+
+
+

Hierarchy

+
    +
  • + FilterField +
  • +
+
+
+

Index

+
+
+
+

Properties

+ +
+
+
+
+
+

Properties

+
+ +

Optional id

+
id: string
+ +
+
+

A unique Id for the filter field

+
+
+
+
+ +

Optional placeholder

+
placeholder: string
+ +
+
+

Text to display when no filter value has been entered

+
+
+
+
+ +

Optional queries

+
queries: FilterQuery[]
+ +
+
+

A list of filter queries used when filterType is 'select'

+
+
+
+
+ +

Optional title

+
title: string
+ +
+
+

The title to display for the filter field

+
+
+
+
+ +

type

+
type: string
+ +
+
+

The filter input field type (e.g., 'select' for a select box, 'typeahead' to filter queries)

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/filterfieldscomponent.html b/dist-demo/docs/classes/filterfieldscomponent.html new file mode 100644 index 000000000..d13c85f9d --- /dev/null +++ b/dist-demo/docs/classes/filterfieldscomponent.html @@ -0,0 +1,478 @@ + + + + + + FilterFieldsComponent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class FilterFieldsComponent

+
+
+
+
+
+
+
+
+
+

Component for the filter query field and filter query dropdown

+
+
+
+
+

Hierarchy

+
    +
  • + FilterFieldsComponent +
  • +
+
+
+

Implements

+
    +
  • OnInit
  • +
+
+
+

Index

+
+
+
+

Constructors

+ +
+
+

Properties

+ +
+
+

Accessors

+ +
+
+

Methods

+ +
+
+
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Properties

+
+ +

config

+
config: FilterConfig
+ +
+
+

The filter config containing component properties

+
+
+
+
+ +

onAdd

+
onAdd: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when a filter has been added

+
+
+
+
+ +

onFieldSelect

+
onFieldSelect: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when a field menu option is selected

+
+
+
+
+ +

onTypeAhead

+
onTypeAhead: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when the user types ahead in the query input field

+
+
+
+
+
+

Accessors

+
+ +

currentField

+ + +
+
+ +

currentValue

+
    +
  • get currentValue(): string
  • +
  • set currentValue(val: string): void
  • +
+ +
+
+
+

Methods

+
+ +

ngDoCheck

+
    +
  • ngDoCheck(): void
  • +
+ +
+
+ +

ngOnInit

+
    +
  • ngOnInit(): void
  • +
+ +
+
+ +

Protected setupConfig

+
    +
  • setupConfig(): void
  • +
+ +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/filtermodule.html b/dist-demo/docs/classes/filtermodule.html new file mode 100644 index 000000000..97a24f41b --- /dev/null +++ b/dist-demo/docs/classes/filtermodule.html @@ -0,0 +1,171 @@ + + + + + + FilterModule | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class FilterModule

+
+
+
+
+
+
+
+
+
+

A module containing objects associated with filter components

+
+
+
+
+

Hierarchy

+
    +
  • + FilterModule +
  • +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/filterquery.html b/dist-demo/docs/classes/filterquery.html new file mode 100644 index 000000000..80911bab3 --- /dev/null +++ b/dist-demo/docs/classes/filterquery.html @@ -0,0 +1,283 @@ + + + + + + FilterQuery | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class FilterQuery

+
+
+
+
+
+
+
+
+
+

An object containing properties for a filterable query, used when filterType is 'select'

+
+
+
+
+

Hierarchy

+
    +
  • + FilterQuery +
  • +
+
+
+

Index

+
+
+
+

Properties

+ +
+
+
+
+
+

Properties

+
+ +

Optional iconStyleClass

+
iconStyleClass: string
+ +
+
+

Style class used to show an icon (e.g., 'fa fa-bookmark')

+
+
+
+
+ +

Optional id

+
id: string
+ +
+
+

A unique Id for the filter query

+
+
+
+
+ +

Optional imageUrl

+
imageUrl: string
+ +
+
+

The URL used to show an image

+
+
+
+
+ +

Optional separator

+
separator: boolean
+ +
+
+

Set to true when a separator should be shown instead of a menu option

+
+
+
+
+ +

value

+
value: string
+ +
+
+

Filter query value used when filterType is 'select'

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/filterresultscomponent.html b/dist-demo/docs/classes/filterresultscomponent.html new file mode 100644 index 000000000..f717bd953 --- /dev/null +++ b/dist-demo/docs/classes/filterresultscomponent.html @@ -0,0 +1,352 @@ + + + + + + FilterResultsComponent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class FilterResultsComponent

+
+
+
+
+
+
+
+
+
+

Component for the filter results

+
+
+
+
+

Hierarchy

+
    +
  • + FilterResultsComponent +
  • +
+
+
+

Implements

+
    +
  • OnInit
  • +
+
+
+

Index

+
+
+
+

Constructors

+ +
+
+

Properties

+ +
+
+

Methods

+ +
+
+
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Properties

+
+ +

config

+
config: FilterConfig
+ +
+
+

The filter config containing component properties

+
+
+
+
+ +

onClear

+
onClear: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when the clear action is selected

+
+
+
+
+
+

Methods

+
+ +

ngDoCheck

+
    +
  • ngDoCheck(): void
  • +
+ +
+
+ +

ngOnInit

+
    +
  • ngOnInit(): void
  • +
+ +
+
+ +

Protected setupConfig

+
    +
  • setupConfig(): void
  • +
+ +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/listcomponent.html b/dist-demo/docs/classes/listcomponent.html new file mode 100644 index 000000000..dcd7f9097 --- /dev/null +++ b/dist-demo/docs/classes/listcomponent.html @@ -0,0 +1,562 @@ + + + + + + ListComponent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ListComponent

+
+
+
+
+
+
+
+
+
+

List component

+
+

For items, use a template named itemTemplate to contain content for each item. For each item in the items array, the + expansion can be disabled by setting disabled to true on the item. If using actions, use a template named + actionTemplate to contain expandable content for the actions of each item. If using expand items, use a template + named itemExpandedTemplate to contain expandable content for each item.

+
+
+
+

Hierarchy

+
    +
  • + ListComponent +
  • +
+
+
+

Implements

+
    +
  • OnInit
  • +
+
+
+

Index

+
+
+
+

Constructors

+ +
+
+

Properties

+ +
+
+

Accessors

+ +
+
+

Methods

+ +
+
+
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Properties

+
+ +

actionTemplate

+
actionTemplate: TemplateRef<any>
+ +
+
+

The name of the template containing actions for each item

+
+
+
+
+ +

config

+
config: ListConfig
+ +
+
+

The list config containing component properties

+
+
+
+
+ +

expandTemplate

+
expandTemplate: TemplateRef<any>
+ +
+
+

The name of the template used to contain expandable content for each item

+
+
+
+
+ +

itemTemplate

+
itemTemplate: TemplateRef<any>
+ +
+
+

The name of the template containing items for each item

+
+
+
+
+ +

items

+
items: any[]
+ +
+
+

An array of items to display in the list

+
+
+
+
+ +

onActionSelect

+
onActionSelect: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when an action (e.g., button, kebab, etc.) has been selected

+
+
+
+
+ +

onCheckboxChange

+
onCheckboxChange: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when a checkbox has been selected

+
+
+
+
+ +

onClick

+
onClick: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when an item has been clicked

+
+
+
+
+ +

onDblClick

+
onDblClick: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when an item is double clicked

+
+
+
+
+ +

onSelect

+
onSelect: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when an item has been selected

+
+
+
+
+ +

onSelectionChange

+
onSelectionChange: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when an item selection has been changed

+
+
+
+
+
+

Accessors

+
+ +

itemsEmpty

+
    +
  • get itemsEmpty(): boolean
  • +
+
    +
  • + +
    +
    +

    Get the flag indicating list has no items

    +
    +
    +

    Returns boolean

    +

    The flag indicating list has no items

    +
  • +
+
+
+
+

Methods

+
+ +

ngDoCheck

+
    +
  • ngDoCheck(): void
  • +
+ +
+
+ +

ngOnInit

+
    +
  • ngOnInit(): void
  • +
+ +
+
+ +

Protected setupConfig

+
    +
  • setupConfig(): void
  • +
+ +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/listconfig.html b/dist-demo/docs/classes/listconfig.html new file mode 100644 index 000000000..86fb5b7ec --- /dev/null +++ b/dist-demo/docs/classes/listconfig.html @@ -0,0 +1,379 @@ + + + + + + ListConfig | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ListConfig

+
+
+
+
+
+
+
+
+
+

A config containing properties for list

+
+
+
+
+

Hierarchy

+
    +
  • + ListConfig +
  • +
+
+
+

Index

+
+ +
+
+
+

Properties

+
+ +

Optional dblClick

+
dblClick: boolean
+ +
+
+

Handle double clicking (item remains selected on a double click). Default is false

+
+
+
+
+ +

Optional emptyStateConfig

+
emptyStateConfig: EmptyStateConfig
+ +
+
+

A config containing properties for empty state when no items are available

+
+
+
+
+ +

Optional hideClose

+
hideClose: boolean
+ +
+
+

Set to true to hide the close button in the expansion area. Default is false

+
+
+
+
+ +

Optional multiSelect

+
multiSelect: boolean
+ +
+
+

Allow multiple item selections -- showCheckbox must also be set.

+
+

Not applicable when dblClick is true. Default is false

+
+
+
+ +

Optional selectItems

+
selectItems: boolean
+ +
+
+

Allow item selection. Default is false

+
+
+
+
+ +

Optional selectedItems

+
selectedItems: any[]
+ +
+
+

Current set of selected items

+
+
+
+
+ +

Optional selectionMatchProp

+
selectionMatchProp: string
+ +
+
+

Property of the items to use for determining matching. Default is 'uuid'

+
+
+
+
+ +

Optional showCheckbox

+
showCheckbox: boolean
+ +
+
+

Show checkbox for selecting items. Default is true

+
+
+
+
+ +

Optional useExpandItems

+
useExpandItems: boolean
+ +
+
+

Allow expansion for each list item

+
+
+
+
+ +

Optional useHeading

+
useHeading: boolean
+ +
+
+

Show list heading. First object in items array is be used to define heading content

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/listevent.html b/dist-demo/docs/classes/listevent.html new file mode 100644 index 000000000..4145cdaf2 --- /dev/null +++ b/dist-demo/docs/classes/listevent.html @@ -0,0 +1,226 @@ + + + + + + ListEvent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ListEvent

+
+
+
+
+
+
+
+
+
+

An object containing properties for list events

+
+
+
+
+

Hierarchy

+
    +
  • + ListEvent +
  • +
+
+
+

Index

+
+
+
+

Properties

+ +
+
+
+
+
+

Properties

+
+ +

item

+
item: any
+ +
+
+

The item associated with the current list row

+
+
+
+
+ +

Optional selectedItems

+
selectedItems: any[]
+ +
+
+

The currently selected items, if applicable

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/listexpandtogglecomponent.html b/dist-demo/docs/classes/listexpandtogglecomponent.html new file mode 100644 index 000000000..36d899c42 --- /dev/null +++ b/dist-demo/docs/classes/listexpandtogglecomponent.html @@ -0,0 +1,381 @@ + + + + + + ListExpandToggleComponent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ListExpandToggleComponent

+
+
+
+
+
+
+
+
+
+

List compund expansion toggle component.

+
+

This is intended to be used with the list component's itemExpandTemplate

+
+
+
+

Hierarchy

+
    +
  • + ListExpandToggleComponent +
  • +
+
+
+

Implements

+
    +
  • OnInit
  • +
+
+
+

Index

+
+
+
+

Constructors

+ +
+
+

Properties

+ +
+
+

Accessors

+ +
+
+

Methods

+ +
+
+
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Properties

+
+ +

expandId

+
expandId: string
+ +
+
+

The id of the template used to contain expandable content for each item

+
+
+
+
+ +

item

+
item: any
+ +
+
+

The items displayed in the current list item

+
+
+
+
+ +

template

+
template: TemplateRef<any>
+ +
+
+

The name of the template containing elements shown in the toggle body

+
+
+
+
+
+

Accessors

+
+ +

isExpanded

+
    +
  • get isExpanded(): boolean
  • +
+ +
+
+
+

Methods

+
+ +

ngOnInit

+
    +
  • ngOnInit(): void
  • +
+ +
+
+ +

toggleExpand

+
    +
  • toggleExpand(): void
  • +
+ +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/listmodule.html b/dist-demo/docs/classes/listmodule.html new file mode 100644 index 000000000..85ca77e3b --- /dev/null +++ b/dist-demo/docs/classes/listmodule.html @@ -0,0 +1,171 @@ + + + + + + ListModule | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ListModule

+
+
+
+
+
+
+
+
+
+

A module containing objects associated with list components

+
+
+
+
+

Hierarchy

+
    +
  • + ListModule +
  • +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/notification.html b/dist-demo/docs/classes/notification.html new file mode 100644 index 000000000..d9322c5b8 --- /dev/null +++ b/dist-demo/docs/classes/notification.html @@ -0,0 +1,359 @@ + + + + + + Notification | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class Notification

+
+
+
+
+
+
+
+
+
+

An object containing properties for notification messages

+
+
+
+
+

Hierarchy

+
    +
  • + Notification +
  • +
+
+
+

Index

+
+ +
+
+
+

Properties

+
+ +

Optional header

+
header: string
+ +
+
+

The header to display for the notification

+
+
+
+
+ +

Optional isPersistent

+
isPersistent: boolean
+ +
+
+

Flag to show close button for the notification even if showClose is false

+
+
+
+
+ +

Optional isViewing

+
isViewing: boolean
+ +
+
+

Flag indicating user is actively viewing notification

+
+
+
+
+ +

message

+
message: string
+ +
+
+

The main text message of the notification

+
+
+
+
+ +

Optional moreActions

+
moreActions: Action[]
+ +
+
+

More actions to show in a kebab menu

+
+
+
+
+ +

Optional primaryAction

+
primaryAction: Action
+ +
+
+

The primary action for the notification

+
+
+
+
+ +

Optional showClose

+
showClose: boolean
+ +
+
+

Flag to show the close button on all notifications (not shown with menu actions)

+
+
+
+
+ +

type

+
type: string
+ +
+
+

The type of the notification message (e.g., 'success', 'info', 'danger', 'warning')

+
+
+
+
+ +

Optional visible

+
visible: boolean
+ +
+
+

Flag indicating notification should be visible

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/notificationevent.html b/dist-demo/docs/classes/notificationevent.html new file mode 100644 index 000000000..bc39016e1 --- /dev/null +++ b/dist-demo/docs/classes/notificationevent.html @@ -0,0 +1,245 @@ + + + + + + NotificationEvent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class NotificationEvent

+
+
+
+
+
+
+
+
+
+

An object containing properties for notification events

+
+
+
+
+

Hierarchy

+
    +
  • + NotificationEvent +
  • +
+
+
+

Index

+
+
+
+

Properties

+ +
+
+
+
+
+

Properties

+
+ +

Optional action

+
action: Action
+ +
+
+

Configuration properties for notification actions

+
+
+
+
+ +

Optional isViewing

+
isViewing: boolean
+ +
+
+

Flag indicating user is actively viewing notification

+
+
+
+
+ +

notification

+
notification: Notification
+ +
+
+

Configuration properties for a notification message

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/notificationmodule.html b/dist-demo/docs/classes/notificationmodule.html new file mode 100644 index 000000000..6a42ca5a0 --- /dev/null +++ b/dist-demo/docs/classes/notificationmodule.html @@ -0,0 +1,171 @@ + + + + + + NotificationModule | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class NotificationModule

+
+
+
+
+
+
+
+
+
+

A module containing objects associated with notification components

+
+
+
+
+

Hierarchy

+
    +
  • + NotificationModule +
  • +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/notificationservice.html b/dist-demo/docs/classes/notificationservice.html new file mode 100644 index 000000000..8a51f152b --- /dev/null +++ b/dist-demo/docs/classes/notificationservice.html @@ -0,0 +1,540 @@ + + + + + + NotificationService | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class NotificationService

+
+
+
+
+
+
+
+
+
+

Notification service used to notify user about important events in the application.

+
+

You may configure the service with: setDelay, setVerbose and setPersist.

+
+
+
+

Hierarchy

+
    +
  • + NotificationService +
  • +
+
+
+

Index

+
+
+
+

Constructors

+ +
+
+

Methods

+ +
+
+
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Methods

+
+ +

getNotifications

+ + +
+
+ +

httpError

+
    +
  • httpError(message: string, httpResponse: any): void
  • +
+
    +
  • + +
    +
    +

    Generate a notification for the given HTTP Response

    +
    +
    +

    Parameters

    +
      +
    • +
      message: string
      +
      +

      The notification message

      +
      +
    • +
    • +
      httpResponse: any
      +
      +

      The HTTP Response

      +
      +
    • +
    +

    Returns void

    +
  • +
+
+
+ +

message

+
    +
  • message(type: string, header: string, message: string, isPersistent: boolean, primaryAction: Action, moreActions: Action[]): void
  • +
+
    +
  • + +
    +
    +

    Generate a notification message

    +
    +
    +

    Parameters

    +
      +
    • +
      type: string
      +
      +

      The notification type

      +
      +
    • +
    • +
      header: string
      +
      +

      The notification header

      +
      +
    • +
    • +
      message: string
      +
      +

      The notification message

      +
      +
    • +
    • +
      isPersistent: boolean
      +
      +

      True if the notification should be persistent

      +
      +
    • +
    • +
      primaryAction: Action
      +
      +

      The primary action for the notifiaction

      +
      +
    • +
    • +
      moreActions: Action[]
      +
      +

      More actions for the kebab

      +
      +
    • +
    +

    Returns void

    +
  • +
+
+
+ +

remove

+ + +
+
+ +

setDelay

+
    +
  • setDelay(delay: number): void
  • +
+
    +
  • + +
    +
    +

    Set the delay after which the notification is dismissed. The argument of this method expects miliseconds. Default + delay is 8000 ms.

    +
    +
    +

    Parameters

    +
      +
    • +
      delay: number
      +
      +

      The delay in ms

      +
      +
    • +
    +

    Returns void

    +
  • +
+
+
+ +

setPersist

+
    +
  • setPersist(persist: boolean): void
  • +
+
    +
  • + +
    +
    +

    Sets persist option for particular modes. Notification with persistent mode won't be dismissed after delay, but has + to be closed manually with the close button. By default, the "error" and "httpError" modes are set to persistent.

    +
    +
    +

    Parameters

    +
      +
    • +
      persist: boolean
      +
      +
      +

      Set to true to persist notifications

      +
      +
      +
    • +
    +

    Returns void

    +
  • +
+
+
+ +

setVerbose

+
    +
  • setVerbose(verbose: boolean): void
  • +
+
    +
  • + +
    +
    +

    Set the verbose mode to on (default) or off. During the verbose mode, each notification is printed in the console.

    +
    +
    +

    Parameters

    +
      +
    • +
      verbose: boolean
      +
      +

      Set to true for verbose mode

      +
      +
    • +
    +

    Returns void

    +
  • +
+
+
+ +

setViewing

+
    +
  • setViewing(notification: Notification, isViewing: boolean): void
  • +
+
    +
  • + +
    +
    +

    Set a flag indicating user is viewing the given notification

    +
    +
    +

    Parameters

    +
      +
    • +
      notification: Notification
      +
      +

      The notification currently being viewed

      +
      +
    • +
    • +
      isViewing: boolean
      +
      +

      True if the notification is being viewed

      +
      +
    • +
    +

    Returns void

    +
  • +
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/notificationtype.html b/dist-demo/docs/classes/notificationtype.html new file mode 100644 index 000000000..e06fc92ad --- /dev/null +++ b/dist-demo/docs/classes/notificationtype.html @@ -0,0 +1,257 @@ + + + + + + NotificationType | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class NotificationType

+
+
+
+
+
+
+
+

Hierarchy

+
    +
  • + NotificationType +
  • +
+
+
+

Index

+
+
+
+

Properties

+ +
+
+
+
+
+

Properties

+
+ +

Static DANGER

+
DANGER: string = "danger"
+ +
+
+

Danger notification type

+
+
+
+
+ +

Static INFO

+
INFO: string = "info"
+ +
+
+

Information notification type

+
+
+
+
+ +

Static SUCCESS

+
SUCCESS: string = "success"
+ +
+
+

Success notification type

+
+
+
+
+ +

Static WARNING

+
WARNING: string = "warning"
+ +
+
+

Warning notification type

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/remainingcharscountdirective.html b/dist-demo/docs/classes/remainingcharscountdirective.html new file mode 100644 index 000000000..41771db86 --- /dev/null +++ b/dist-demo/docs/classes/remainingcharscountdirective.html @@ -0,0 +1,402 @@ + + + + + + RemainingCharsCountDirective | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class RemainingCharsCountDirective

+
+
+
+
+
+
+
+
+
+

Remaining Characters directive for showing a characters remaining count and triggering warning and error + behavior when passing specified thresholds. When the charsRemainingWarning threshold is passed, + the chars-warn-remaining-pf css class is applied to the charsRemainingElement, which by + default, turns the remaining count number red. By default, characters may be entered into + the text field after the charsMaxLimit limit has been reached, the remaining count number will become a + negative value. Setting the blockInputAtMaxLimit to true, will block additional input into the + text field after the max has been reached; additionally a right-click 'paste' will only paste characters until the + maximum character limit is reached.

+
+
+
+
+

Hierarchy

+
    +
  • + RemainingCharsCountDirective +
  • +
+
+
+

Implements

+
    +
  • OnInit
  • +
+
+
+

Index

+
+
+
+

Constructors

+ +
+
+

Properties

+ +
+
+

Methods

+ +
+
+
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Properties

+
+ +

blockInputAtMaxLimit

+
blockInputAtMaxLimit: boolean
+ +
+
+

If true, no more characters can be entered into the text field

+
+
+
+
+ +

charsMaxLimit

+
charsMaxLimit: number = 100
+ +
+
+

Number representing the maximum number of characters allowed. Default is 100

+
+
+
+
+ +

charsRemainingElement

+
charsRemainingElement: any
+ +
+
+

The ElementRef used to display the characters remaining count

+
+
+
+
+ +

charsRemainingWarning

+
charsRemainingWarning: number = 5
+ +
+
+

Number of remaining characters to warn upon. Default is 5

+
+
+
+
+ +

onOverCharsMaxLimit

+
onOverCharsMaxLimit: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when a remaining characters is over max limit

+
+
+
+
+ +

onUnderCharsMaxLimit

+
onUnderCharsMaxLimit: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when a remaining characters is under max limit

+
+
+
+
+
+

Methods

+
+ +

ngOnInit

+
    +
  • ngOnInit(): void
  • +
+ +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/remainingcharscountmodule.html b/dist-demo/docs/classes/remainingcharscountmodule.html new file mode 100644 index 000000000..6f8ca8f45 --- /dev/null +++ b/dist-demo/docs/classes/remainingcharscountmodule.html @@ -0,0 +1,171 @@ + + + + + + RemainingCharsCountModule | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class RemainingCharsCountModule

+
+
+
+
+
+
+
+
+
+

A module containing objects associated with the remaining characters directive

+
+
+
+
+

Hierarchy

+
    +
  • + RemainingCharsCountModule +
  • +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/samplecomponent.html b/dist-demo/docs/classes/samplecomponent.html new file mode 100644 index 000000000..eff94b269 --- /dev/null +++ b/dist-demo/docs/classes/samplecomponent.html @@ -0,0 +1,260 @@ + + + + + + SampleComponent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class SampleComponent

+
+
+
+
+
+
+
+
+
+

Sample component

+
+
+
+
+

Hierarchy

+
    +
  • + SampleComponent +
  • +
+
+
+

Index

+
+
+
+

Constructors

+ +
+
+

Properties

+ +
+
+
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Properties

+
+ +

disabled

+
disabled: Boolean
+ +
+
+

Set to true to disable

+
+
+
+
+ +

label

+
label: string
+ +
+
+

The label

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/samplemodule.html b/dist-demo/docs/classes/samplemodule.html new file mode 100644 index 000000000..947112068 --- /dev/null +++ b/dist-demo/docs/classes/samplemodule.html @@ -0,0 +1,171 @@ + + + + + + SampleModule | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class SampleModule

+
+
+
+
+
+
+
+
+
+

A module containing objects associated with the sample component

+
+
+
+
+

Hierarchy

+
    +
  • + SampleModule +
  • +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/searchhighlightmodule.html b/dist-demo/docs/classes/searchhighlightmodule.html new file mode 100644 index 000000000..bc413e5d2 --- /dev/null +++ b/dist-demo/docs/classes/searchhighlightmodule.html @@ -0,0 +1,171 @@ + + + + + + SearchHighlightModule | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class SearchHighlightModule

+
+
+
+
+
+
+
+
+
+

A module containing objects associated with the search highlight pipe

+
+
+
+
+

Hierarchy

+
    +
  • + SearchHighlightModule +
  • +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/searchhighlightpipe.html b/dist-demo/docs/classes/searchhighlightpipe.html new file mode 100644 index 000000000..e0535c2d8 --- /dev/null +++ b/dist-demo/docs/classes/searchhighlightpipe.html @@ -0,0 +1,255 @@ + + + + + + SearchHighlightPipe | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class SearchHighlightPipe

+
+
+
+
+
+
+
+
+
+

Search highlight pipe

+
+

This is currently used with the type ahead feature of the filter fields component

+
+
+
+

Hierarchy

+
    +
  • + SearchHighlightPipe +
  • +
+
+
+

Implements

+
    +
  • PipeTransform
  • +
+
+
+

Index

+
+
+
+

Methods

+ +
+
+
+
+
+

Methods

+
+ +

convertToOriginal

+
    +
  • convertToOriginal(str: string, original: string): string
  • +
+ +
+
+ +

transform

+
    +
  • transform(val: string, search: string): any
  • +
+ +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/sortcomponent.html b/dist-demo/docs/classes/sortcomponent.html new file mode 100644 index 000000000..de63133c6 --- /dev/null +++ b/dist-demo/docs/classes/sortcomponent.html @@ -0,0 +1,352 @@ + + + + + + SortComponent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class SortComponent

+
+
+
+
+
+
+
+
+
+

Sort component

+
+
+
+
+

Hierarchy

+
    +
  • + SortComponent +
  • +
+
+
+

Implements

+
    +
  • OnInit
  • +
+
+
+

Index

+
+
+
+

Constructors

+ +
+
+

Properties

+ +
+
+

Methods

+ +
+
+
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Properties

+
+ +

config

+
config: SortConfig
+ +
+
+

The sort config containing component properties

+
+
+
+
+ +

onChange

+
onChange: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when the sort has changed

+
+
+
+
+
+

Methods

+
+ +

ngDoCheck

+
    +
  • ngDoCheck(): void
  • +
+ +
+
+ +

ngOnInit

+
    +
  • ngOnInit(): void
  • +
+ +
+
+ +

Protected setupConfig

+
    +
  • setupConfig(): void
  • +
+ +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/sortconfig.html b/dist-demo/docs/classes/sortconfig.html new file mode 100644 index 000000000..190dcc2be --- /dev/null +++ b/dist-demo/docs/classes/sortconfig.html @@ -0,0 +1,245 @@ + + + + + + SortConfig | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class SortConfig

+
+
+
+
+
+
+
+
+
+

A config containing properties for sort

+
+
+
+
+

Hierarchy

+
    +
  • + SortConfig +
  • +
+
+
+

Index

+
+
+
+

Properties

+ +
+
+
+
+
+

Properties

+
+ +

fields

+
fields: SortField[]
+ +
+
+

A list of sortable fields

+
+
+
+
+ +

Optional isAscending

+
isAscending: boolean
+ +
+
+

True if sort is ascending

+
+
+
+
+ +

Optional visible

+
visible: boolean
+ +
+
+

True if sort should be shown

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/sortevent.html b/dist-demo/docs/classes/sortevent.html new file mode 100644 index 000000000..693961145 --- /dev/null +++ b/dist-demo/docs/classes/sortevent.html @@ -0,0 +1,226 @@ + + + + + + SortEvent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class SortEvent

+
+
+
+
+
+
+
+
+
+

An object containing properties for sort events

+
+
+
+
+

Hierarchy

+
    +
  • + SortEvent +
  • +
+
+
+

Index

+
+
+
+

Properties

+ +
+
+
+
+
+

Properties

+
+ +

field

+
field: SortField
+ +
+
+

The currently selected filterable field

+
+
+
+
+ +

isAscending

+
isAscending: boolean
+ +
+
+

True if sort is ascending

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/sortfield.html b/dist-demo/docs/classes/sortfield.html new file mode 100644 index 000000000..1a76ecec7 --- /dev/null +++ b/dist-demo/docs/classes/sortfield.html @@ -0,0 +1,245 @@ + + + + + + SortField | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class SortField

+
+
+
+
+
+
+
+
+
+

An object containing properties for a sortable field, used to select categories of sorting

+
+
+
+
+

Hierarchy

+
    +
  • + SortField +
  • +
+
+
+

Index

+
+
+
+

Properties

+ +
+
+
+
+
+

Properties

+
+ +

Optional id

+
id: string
+ +
+
+

A unique Id for the sort field

+
+
+
+
+ +

sortType

+
sortType: string
+ +
+
+

The sort field type (e.g., 'alpha' or 'numeric' )

+
+
+
+
+ +

Optional title

+
title: string
+ +
+
+

The title to display for the sort field

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/sortmodule.html b/dist-demo/docs/classes/sortmodule.html new file mode 100644 index 000000000..81c88fab1 --- /dev/null +++ b/dist-demo/docs/classes/sortmodule.html @@ -0,0 +1,171 @@ + + + + + + SortModule | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class SortModule

+
+
+
+
+
+
+
+
+
+

A module containing objects associated with the sort component

+
+
+
+
+

Hierarchy

+
    +
  • + SortModule +
  • +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/toastnotificationcomponent.html b/dist-demo/docs/classes/toastnotificationcomponent.html new file mode 100644 index 000000000..9c85b1958 --- /dev/null +++ b/dist-demo/docs/classes/toastnotificationcomponent.html @@ -0,0 +1,572 @@ + + + + + + ToastNotificationComponent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ToastNotificationComponent

+
+
+
+
+
+
+
+
+
+

Toast notifications are used to notify users of a system occurrence. Toast notifications should be transient and stay + on the screen for 8 seconds, so that they do not block the information behind them for too long, but allows the user + to read the message. The ToastNotification component allows status, header, message, primary action and menu actions + for the notification. The notification can also allow the user to close the notification.

+
+

Note: Using the kebab menu (more actions) with the close button is not currently supported. If both are specified the + close button will not be shown. Add a close menu item if you want to have both capabilities.

+
+
+
+

Hierarchy

+
    +
  • + ToastNotificationComponent +
  • +
+
+
+

Implements

+
    +
  • OnInit
  • +
+
+
+

Index

+
+
+
+

Constructors

+ +
+
+

Properties

+ +
+
+

Accessors

+ +
+
+

Methods

+ +
+
+
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Properties

+
+ +

header

+
header: string
+ +
+
+

The notification header

+
+
+
+
+ +

message

+
message: string
+ +
+
+

The notification message

+
+
+
+
+ +

moreActions

+
moreActions: Action[]
+ +
+
+

The notification kebab actions

+
+
+
+
+ +

notification

+
notification: Notification
+ +
+
+

An object containing notifications properties

+
+
+
+
+ +

onActionSelect

+
onActionSelect: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when an action has been selected

+
+
+
+
+ +

onCloseSelect

+
onCloseSelect: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when the close button has been selected

+
+
+
+
+ +

onViewingChange

+
onViewingChange: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when the mouse hovers over and leaves a notification

+
+
+
+
+ +

primaryAction

+
primaryAction: Action
+ +
+
+

The primary action

+
+
+
+
+ +

showClose

+
showClose: boolean
+ +
+
+

Set to true to show close button

+
+
+
+
+ +

type

+
type: string
+ +
+
+

The notification type (e.g., NotificationType.SUCCESS, NotificationType.INFO, etc.)

+
+
+
+
+
+

Accessors

+
+ +

showCloseButton

+
    +
  • get showCloseButton(): boolean
  • +
+ +
+
+
+

Methods

+
+ +

handleEnter

+
    +
  • handleEnter($event: MouseEvent): void
  • +
+ +
+
+ +

handleLeave

+
    +
  • handleLeave($event: MouseEvent): void
  • +
+ +
+
+ +

ngDoCheck

+
    +
  • ngDoCheck(): void
  • +
+ +
+
+ +

ngOnInit

+
    +
  • ngOnInit(): void
  • +
+ +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/toastnotificationlistcomponent.html b/dist-demo/docs/classes/toastnotificationlistcomponent.html new file mode 100644 index 000000000..9c1a86f4a --- /dev/null +++ b/dist-demo/docs/classes/toastnotificationlistcomponent.html @@ -0,0 +1,357 @@ + + + + + + ToastNotificationListComponent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ToastNotificationListComponent

+
+
+
+
+
+
+
+
+
+

Component to display a list of toast notifications

+
+
+
+
+

Hierarchy

+
    +
  • + ToastNotificationListComponent +
  • +
+
+
+

Implements

+
    +
  • OnInit
  • +
+
+
+

Index

+
+
+
+

Constructors

+ +
+
+

Properties

+ +
+
+

Methods

+ +
+
+
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Properties

+
+ +

notifications

+
notifications: Notification[]
+ +
+
+

A list of notifiactions to display

+
+
+
+
+ +

onActionSelect

+
onActionSelect: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when an action has been selected

+
+
+
+
+ +

onCloseSelect

+
onCloseSelect: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when the close button has been selected

+
+
+
+
+ +

onViewingChange

+
onViewingChange: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when the mouse hovers over and leaves a notification

+
+
+
+
+ +

showClose

+
showClose: boolean
+ +
+
+

Set to true to show close button

+
+
+
+
+
+

Methods

+
+ +

ngOnInit

+
    +
  • ngOnInit(): void
  • +
+ +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/toolbarcomponent.html b/dist-demo/docs/classes/toolbarcomponent.html new file mode 100644 index 000000000..3c51ea049 --- /dev/null +++ b/dist-demo/docs/classes/toolbarcomponent.html @@ -0,0 +1,520 @@ + + + + + + ToolbarComponent | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ToolbarComponent

+
+
+
+
+
+
+
+
+
+

Toolbar component

+
+
+
+
+

Hierarchy

+
    +
  • + ToolbarComponent +
  • +
+
+
+

Implements

+
    +
  • OnInit
  • +
+
+
+

Index

+
+ +
+
+
+

Constructors

+
+ +

constructor

+ + +
+
+
+

Properties

+
+ +

actionTemplate

+
actionTemplate: TemplateRef<any>
+ +
+
+

The name of the template containing actions

+
+
+
+
+ +

config

+ + +
+
+

The toolbar config containing component properties

+
+
+
+
+ +

onActionSelect

+
onActionSelect: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when an action (e.g., button, kebab, etc.) has been selected

+
+
+
+
+ +

onFilterChange

+
onFilterChange: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when a filter has been changed

+
+
+
+
+ +

onFilterFieldSelect

+
onFilterFieldSelect: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when a field menu option is selected

+
+
+
+
+ +

onFilterTypeAhead

+
onFilterTypeAhead: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when the user types ahead in the query input field

+
+
+
+
+ +

onSortChange

+
onSortChange: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when the sort has changed

+
+
+
+
+ +

onViewSelect

+
onViewSelect: EventEmitter<Object> = new EventEmitter()
+ +
+
+

The event emitted when a view has been selected

+
+
+
+
+ +

viewTemplate

+
viewTemplate: TemplateRef<any>
+ +
+
+

The name of the template containing views

+
+
+
+
+
+

Methods

+
+ +

clearFilter

+
    +
  • clearFilter($event: Filter[]): void
  • +
+ +
+
+ +

ngDoCheck

+
    +
  • ngDoCheck(): void
  • +
+ +
+
+ +

ngOnInit

+
    +
  • ngOnInit(): void
  • +
+ +
+
+ +

Protected setupConfig

+
    +
  • setupConfig(): void
  • +
+ +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/toolbarconfig.html b/dist-demo/docs/classes/toolbarconfig.html new file mode 100644 index 000000000..981ce3d47 --- /dev/null +++ b/dist-demo/docs/classes/toolbarconfig.html @@ -0,0 +1,283 @@ + + + + + + ToolbarConfig | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ToolbarConfig

+
+
+
+
+
+
+
+
+
+

A config containing properties for toolbar

+
+
+
+
+

Hierarchy

+
    +
  • + ToolbarConfig +
  • +
+
+
+

Index

+
+
+
+

Properties

+ +
+
+
+
+
+

Properties

+
+ +

Optional actionConfig

+
actionConfig: ActionConfig
+ +
+
+

Config properties for toolbar actions

+
+
+
+
+ +

Optional filterConfig

+
filterConfig: FilterConfig
+ +
+
+

Config properties for toolbar filter. If undefined, filter features are not shown.

+
+
+
+
+ +

Optional sortConfig

+
sortConfig: SortConfig
+ +
+
+

Config properties for toolbar sort. If undefined, sort features are not shown.

+
+
+
+
+ +

Optional view

+ + +
+
+

The currently selected view

+
+
+
+
+ +

views

+
views: ToolbarView[]
+ +
+
+

List of available views.

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/toolbarmodule.html b/dist-demo/docs/classes/toolbarmodule.html new file mode 100644 index 000000000..85ea018a1 --- /dev/null +++ b/dist-demo/docs/classes/toolbarmodule.html @@ -0,0 +1,171 @@ + + + + + + ToolbarModule | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ToolbarModule

+
+
+
+
+
+
+
+
+
+

A module containing objects associated with the toolbar component

+
+
+
+
+

Hierarchy

+
    +
  • + ToolbarModule +
  • +
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/classes/toolbarview.html b/dist-demo/docs/classes/toolbarview.html new file mode 100644 index 000000000..821455a2d --- /dev/null +++ b/dist-demo/docs/classes/toolbarview.html @@ -0,0 +1,264 @@ + + + + + + ToolbarView | PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

Class ToolbarView

+
+
+
+
+
+
+
+
+
+

An view containing common properties

+
+
+
+
+

Hierarchy

+
    +
  • + ToolbarView +
  • +
+
+
+

Index

+
+
+
+

Properties

+ +
+
+
+
+
+

Properties

+
+ +

Optional disabled

+
disabled: boolean
+ +
+
+

True if view is disabled

+
+
+
+
+ +

iconStyleClass

+
iconStyleClass: string
+ +
+
+

Style class to use for the view selector

+
+
+
+
+ +

Optional id

+
id: string
+ +
+
+

Unique id for the view

+
+
+
+
+ +

Optional tooltip

+
tooltip: string
+ +
+
+

A tooltip for the view selector

+
+
+
+
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/globals.html b/dist-demo/docs/globals.html new file mode 100644 index 000000000..93bf80d1e --- /dev/null +++ b/dist-demo/docs/globals.html @@ -0,0 +1,330 @@ + + + + + + PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

PatternFly NG

+
+
+
+
+
+ + +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/docs/index.html b/dist-demo/docs/index.html new file mode 100644 index 000000000..dfa26728c --- /dev/null +++ b/dist-demo/docs/index.html @@ -0,0 +1,342 @@ + + + + + + PatternFly NG + + + + + +
+
+
+
+ +
+
+ Options +
+
+ All +
    +
  • Public
  • +
  • Public/Protected
  • +
  • All
  • +
+
+ + + + +
+
+ Menu +
+
+
+
+
+
+ +

PatternFly NG

+
+
+
+
+
+
+
+

Build Status semantic-release

+

Welcome to PatternFly-Ng. This is a library of common Angular components for use with the PatternFly reference implementation. Below is information on how to get started using PatternFly-ng. If you wish to contribute to PatternFly-ng, please go to our Contributions page.

+ +

Using PatternFly-ng In Your Application

+

This example demonstrates using the Angular-cli to get started with PatternFly-ng

+
    +
  1. Installing angular-cli
    Note: you can skip this part if you already have generated an Angular application using ng-cli and webpack

    +
    npm i -g @angular/cli
    +ng new patternfly-ng-app
    +cd patternfly-ng-app
    +ng serve
    +
    +
  2. +
  3. Install patternfly-ng

    +
      npm install patternfly-ng --save
    +
    +
  4. +
  5. Add patternfly-ng dependencies

    +
      +
    • install patternfly and ngx-bootstrap
    • +
    +
    npm install patternfly ngx-bootstrap --save
    +
    +
  6. +
  7. Add a patternfly-ng component

    +
  8. +
  9. open src/app/app.module.ts and add
  10. +
+
import { NotificationModule } from 'patternfly-ng';
+...
+
+@NgModule({
+   ...
+   imports: [NotificationModule, ... ],
+    ... 
+})
+
+
    +
  • open .angular-cli.json and insert a new entry into the styles array
  • +
+
      "styles": [
+         "../node_modules/patternfly/dist/css/patternfly.min.css",
+         "../node_modules/patternfly/dist/css/patternfly-additions.min.css",
+        "styles.css",
+      ],
+
+
    +
  • open src/app/app.component.html and add
    <pfng-toast-notification
    +[header]="'test header'"
    +[message]="'this is a notification'"
    +[showClose]="'true'"
    +[type]="'success'">
    +</pfng-toast-notification>
    +
  • +
+

Do you have a question?

+ +
+
+ +
+
+
+
+

Legend

+
+
    +
  • Module
  • +
  • Object literal
  • +
  • Variable
  • +
  • Function
  • +
  • Function with type parameter
  • +
  • Index signature
  • +
  • Type alias
  • +
+
    +
  • Enumeration
  • +
  • Enumeration member
  • +
  • Property
  • +
  • Method
  • +
+
    +
  • Interface
  • +
  • Interface with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Index signature
  • +
+
    +
  • Class
  • +
  • Class with type parameter
  • +
  • Constructor
  • +
  • Property
  • +
  • Method
  • +
  • Accessor
  • +
  • Index signature
  • +
+
    +
  • Inherited constructor
  • +
  • Inherited property
  • +
  • Inherited method
  • +
  • Inherited accessor
  • +
+
    +
  • Protected property
  • +
  • Protected method
  • +
  • Protected accessor
  • +
+
    +
  • Private property
  • +
  • Private method
  • +
  • Private accessor
  • +
+
    +
  • Static property
  • +
  • Static method
  • +
+
+
+
+
+

Generated using TypeDoc

+
+
+ + + + \ No newline at end of file diff --git a/dist-demo/index.html b/dist-demo/index.html new file mode 100644 index 000000000..720d044c6 --- /dev/null +++ b/dist-demo/index.html @@ -0,0 +1,10 @@ + + + + + PatternFly Ng + + +Loading... + + diff --git a/dist-demo/polyfills.js b/dist-demo/polyfills.js new file mode 100644 index 000000000..0d73a57d0 --- /dev/null +++ b/dist-demo/polyfills.js @@ -0,0 +1,1977 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // install a JSONP callback for chunk loading +/******/ var parentJsonpFunction = window["webpackJsonp"]; +/******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) { +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0, resolves = [], result; +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(installedChunks[chunkId]) +/******/ resolves.push(installedChunks[chunkId][0]); +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ for(moduleId in moreModules) { +/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { +/******/ modules[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules); +/******/ while(resolves.length) +/******/ resolves.shift()(); +/******/ if(executeModules) { +/******/ for(i=0; i < executeModules.length; i++) { +/******/ result = __webpack_require__(__webpack_require__.s = executeModules[i]); +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // objects to store loaded and loading chunks +/******/ var installedChunks = { +/******/ 2: 0 +/******/ }; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = function requireEnsure(chunkId) { +/******/ if(installedChunks[chunkId] === 0) +/******/ return Promise.resolve(); +/******/ +/******/ // an Promise means "currently loading". +/******/ if(installedChunks[chunkId]) { +/******/ return installedChunks[chunkId][2]; +/******/ } +/******/ // start chunk loading +/******/ var head = document.getElementsByTagName('head')[0]; +/******/ var script = document.createElement('script'); +/******/ script.type = 'text/javascript'; +/******/ script.charset = 'utf-8'; +/******/ script.async = true; +/******/ script.timeout = 120000; +/******/ +/******/ if (__webpack_require__.nc) { +/******/ script.setAttribute("nonce", __webpack_require__.nc); +/******/ } +/******/ script.src = __webpack_require__.p + "" + chunkId + ".chunk.js"; +/******/ var timeout = setTimeout(onScriptComplete, 120000); +/******/ script.onerror = script.onload = onScriptComplete; +/******/ function onScriptComplete() { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var chunk = installedChunks[chunkId]; +/******/ if(chunk !== 0) { +/******/ if(chunk) chunk[1](new Error('Loading chunk ' + chunkId + ' failed.')); +/******/ installedChunks[chunkId] = undefined; +/******/ } +/******/ }; +/******/ +/******/ var promise = new Promise(function(resolve, reject) { +/******/ installedChunks[chunkId] = [resolve, reject]; +/******/ }); +/******/ installedChunks[chunkId][2] = promise; +/******/ +/******/ head.appendChild(script); +/******/ return promise; +/******/ }; +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // on error function for async loading +/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./src/polyfills.ts"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./node_modules/core-js/es6/index.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("__webpack_require__(\"./node_modules/core-js/modules/es6.symbol.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.create.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.define-property.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.define-properties.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.get-prototype-of.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.keys.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.get-own-property-names.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.freeze.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.seal.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.prevent-extensions.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.is-frozen.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.is-sealed.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.is-extensible.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.assign.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.is.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.set-prototype-of.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.object.to-string.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.function.bind.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.function.name.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.function.has-instance.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.parse-int.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.parse-float.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.number.constructor.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.number.to-fixed.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.number.to-precision.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.number.epsilon.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.number.is-finite.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.number.is-integer.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.number.is-nan.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.number.is-safe-integer.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.number.max-safe-integer.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.number.min-safe-integer.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.number.parse-float.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.number.parse-int.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.acosh.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.asinh.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.atanh.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.cbrt.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.clz32.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.cosh.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.expm1.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.fround.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.hypot.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.imul.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.log10.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.log1p.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.log2.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.sign.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.sinh.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.tanh.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.math.trunc.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.from-code-point.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.raw.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.trim.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.iterator.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.code-point-at.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.ends-with.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.includes.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.repeat.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.starts-with.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.anchor.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.big.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.blink.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.bold.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.fixed.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.fontcolor.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.fontsize.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.italics.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.link.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.small.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.strike.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.sub.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.string.sup.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.date.now.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.date.to-json.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.date.to-iso-string.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.date.to-string.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.date.to-primitive.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.is-array.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.from.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.of.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.join.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.slice.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.sort.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.for-each.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.map.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.filter.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.some.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.every.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.reduce.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.reduce-right.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.index-of.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.last-index-of.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.copy-within.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.fill.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.find.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.find-index.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.species.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.array.iterator.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.regexp.constructor.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.regexp.to-string.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.regexp.flags.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.regexp.match.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.regexp.replace.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.regexp.search.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.regexp.split.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.promise.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.map.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.set.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.weak-map.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.weak-set.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.typed.array-buffer.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.typed.data-view.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.typed.int8-array.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.typed.uint8-array.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.typed.int16-array.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.typed.uint16-array.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.typed.int32-array.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.typed.uint32-array.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.typed.float32-array.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.typed.float64-array.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.apply.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.construct.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.define-property.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.delete-property.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.enumerate.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.get.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.get-prototype-of.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.has.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.is-extensible.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.own-keys.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.prevent-extensions.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.set.js\");\n__webpack_require__(\"./node_modules/core-js/modules/es6.reflect.set-prototype-of.js\");\nmodule.exports = __webpack_require__(\"./node_modules/core-js/modules/_core.js\");//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9lczYvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvZXM2L2luZGV4LmpzP2JkMjciXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYub2JqZWN0LmlzJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm51bWJlci50by1maXhlZCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24nKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYubWF0aC5hY29zaCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYubWF0aC5hc2luaCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYubWF0aC5jYnJ0Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5tYXRoLmNsejMyJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5tYXRoLmltdWwnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm1hdGgubG9nMicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYubWF0aC5zaWduJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm1hdGgudGFuaCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYubWF0aC50cnVuYycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLnJhdycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0nKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGgnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuZml4ZWQnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5saW5rJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5zdHJpa2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5zdWInKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LmRhdGUubm93Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuYXJyYXkuZnJvbScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuYXJyYXkub2YnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5hcnJheS5zb3J0Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuYXJyYXkubWFwJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXInKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LmFycmF5LmV2ZXJ5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5hcnJheS5maWxsJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYubWFwJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LndlYWstbWFwJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi53ZWFrLXNldCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvX2NvcmUnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9lczYvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZXM2L2luZGV4LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_a-function.js": +/***/ (function(module, exports) { + +eval("module.exports = function(it){\n if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n return it;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2EtZnVuY3Rpb24uanM/NWMxNiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2EtZnVuY3Rpb24uanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_a-number-value.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var cof = __webpack_require__(\"./node_modules/core-js/modules/_cof.js\");\nmodule.exports = function(it, msg){\n if(typeof it != 'number' && cof(it) != 'Number')throw TypeError(msg);\n return +it;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcz83ZTk3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIG1zZyl7XG4gIGlmKHR5cGVvZiBpdCAhPSAnbnVtYmVyJyAmJiBjb2YoaXQpICE9ICdOdW1iZXInKXRocm93IFR5cGVFcnJvcihtc2cpO1xuICByZXR1cm4gK2l0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_add-to-unscopables.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('unscopables')\n , ArrayProto = Array.prototype;\nif(ArrayProto[UNSCOPABLES] == undefined)__webpack_require__(\"./node_modules/core-js/modules/_hide.js\")(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function(key){\n ArrayProto[UNSCOPABLES][key] = true;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzP2YyZjQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJylcbiAgLCBBcnJheVByb3RvICA9IEFycmF5LnByb3RvdHlwZTtcbmlmKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZClyZXF1aXJlKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_an-instance.js": +/***/ (function(module, exports) { + +eval("module.exports = function(it, Constructor, name, forbiddenField){\n if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1pbnN0YW5jZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19hbi1pbnN0YW5jZS5qcz9jNzg3Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCl7XG4gIGlmKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKXtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_an-object.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\");\nmodule.exports = function(it){\n if(!isObject(it))throw TypeError(it + ' is not an object!');\n return it;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzP2EwYjYiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoIWlzT2JqZWN0KGl0KSl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_array-copy-within.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n\nvar toObject = __webpack_require__(\"./node_modules/core-js/modules/_to-object.js\")\n , toIndex = __webpack_require__(\"./node_modules/core-js/modules/_to-index.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\");\n\nmodule.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){\n var O = toObject(this)\n , len = toLength(O.length)\n , to = toIndex(target, len)\n , from = toIndex(start, len)\n , end = arguments.length > 2 ? arguments[2] : undefined\n , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to)\n , inc = 1;\n if(from < to && to < from + count){\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while(count-- > 0){\n if(from in O)O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1jb3B5LXdpdGhpbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19hcnJheS1jb3B5LXdpdGhpbi5qcz9kMmFhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCB0b0luZGV4ICA9IHJlcXVpcmUoJy4vX3RvLWluZGV4JylcbiAgLCB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtdLmNvcHlXaXRoaW4gfHwgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQvKj0gMCovLCBzdGFydC8qPSAwLCBlbmQgPSBAbGVuZ3RoKi8pe1xuICB2YXIgTyAgICAgPSB0b09iamVjdCh0aGlzKVxuICAgICwgbGVuICAgPSB0b0xlbmd0aChPLmxlbmd0aClcbiAgICAsIHRvICAgID0gdG9JbmRleCh0YXJnZXQsIGxlbilcbiAgICAsIGZyb20gID0gdG9JbmRleChzdGFydCwgbGVuKVxuICAgICwgZW5kICAgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZFxuICAgICwgY291bnQgPSBNYXRoLm1pbigoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB0b0luZGV4KGVuZCwgbGVuKSkgLSBmcm9tLCBsZW4gLSB0bylcbiAgICAsIGluYyAgID0gMTtcbiAgaWYoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KXtcbiAgICBpbmMgID0gLTE7XG4gICAgZnJvbSArPSBjb3VudCAtIDE7XG4gICAgdG8gICArPSBjb3VudCAtIDE7XG4gIH1cbiAgd2hpbGUoY291bnQtLSA+IDApe1xuICAgIGlmKGZyb20gaW4gTylPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gICArPSBpbmM7XG4gICAgZnJvbSArPSBpbmM7XG4gIH0gcmV0dXJuIE87XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_array-fill.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nvar toObject = __webpack_require__(\"./node_modules/core-js/modules/_to-object.js\")\n , toIndex = __webpack_require__(\"./node_modules/core-js/modules/_to-index.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\");\nmodule.exports = function fill(value /*, start = 0, end = @length */){\n var O = toObject(this)\n , length = toLength(O.length)\n , aLen = arguments.length\n , index = toIndex(aLen > 1 ? arguments[1] : undefined, length)\n , end = aLen > 2 ? arguments[2] : undefined\n , endPos = end === undefined ? length : toIndex(end, length);\n while(endPos > index)O[index++] = value;\n return O;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZpbGwuanM/ZmViYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgdG9JbmRleCAgPSByZXF1aXJlKCcuL190by1pbmRleCcpXG4gICwgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKXtcbiAgdmFyIE8gICAgICA9IHRvT2JqZWN0KHRoaXMpXG4gICAgLCBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aClcbiAgICAsIGFMZW4gICA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGluZGV4ICA9IHRvSW5kZXgoYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aClcbiAgICAsIGVuZCAgICA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkXG4gICAgLCBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZShlbmRQb3MgPiBpbmRleClPW2luZGV4KytdID0gdmFsdWU7XG4gIHJldHVybiBPO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZpbGwuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_array-includes.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(\"./node_modules/core-js/modules/_to-iobject.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\")\n , toIndex = __webpack_require__(\"./node_modules/core-js/modules/_to-index.js\");\nmodule.exports = function(IS_INCLUDES){\n return function($this, el, fromIndex){\n var O = toIObject($this)\n , length = toLength(O.length)\n , index = toIndex(fromIndex, length)\n , value;\n // Array#includes uses SameValueZero equality algorithm\n if(IS_INCLUDES && el != el)while(length > index){\n value = O[index++];\n if(value != value)return true;\n // Array#toIndex ignores holes, Array#includes - not\n } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n if(O[index] === el)return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcz83OWVmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgdG9MZW5ndGggID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCB0b0luZGV4ICAgPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihJU19JTkNMVURFUyl7XG4gIHJldHVybiBmdW5jdGlvbigkdGhpcywgZWwsIGZyb21JbmRleCl7XG4gICAgdmFyIE8gICAgICA9IHRvSU9iamVjdCgkdGhpcylcbiAgICAgICwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpXG4gICAgICAsIGluZGV4ICA9IHRvSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpXG4gICAgICAsIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICBpZihJU19JTkNMVURFUyAmJiBlbCAhPSBlbCl3aGlsZShsZW5ndGggPiBpbmRleCl7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICBpZih2YWx1ZSAhPSB2YWx1ZSlyZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSN0b0luZGV4IGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvcig7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspaWYoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTyl7XG4gICAgICBpZihPW2luZGV4XSA9PT0gZWwpcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_array-methods.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(\"./node_modules/core-js/modules/_ctx.js\")\n , IObject = __webpack_require__(\"./node_modules/core-js/modules/_iobject.js\")\n , toObject = __webpack_require__(\"./node_modules/core-js/modules/_to-object.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\")\n , asc = __webpack_require__(\"./node_modules/core-js/modules/_array-species-create.js\");\nmodule.exports = function(TYPE, $create){\n var IS_MAP = TYPE == 1\n , IS_FILTER = TYPE == 2\n , IS_SOME = TYPE == 3\n , IS_EVERY = TYPE == 4\n , IS_FIND_INDEX = TYPE == 6\n , NO_HOLES = TYPE == 5 || IS_FIND_INDEX\n , create = $create || asc;\n return function($this, callbackfn, that){\n var O = toObject($this)\n , self = IObject(O)\n , f = ctx(callbackfn, that, 3)\n , length = toLength(self.length)\n , index = 0\n , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined\n , val, res;\n for(;length > index; index++)if(NO_HOLES || index in self){\n val = self[index];\n res = f(val, index, O);\n if(TYPE){\n if(IS_MAP)result[index] = res; // map\n else if(res)switch(TYPE){\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if(IS_EVERY)return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2FycmF5LW1ldGhvZHMuanM/M2MyMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsIElPYmplY3QgID0gcmVxdWlyZSgnLi9faW9iamVjdCcpXG4gICwgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCBhc2MgICAgICA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFRZUEUsICRjcmVhdGUpe1xuICB2YXIgSVNfTUFQICAgICAgICA9IFRZUEUgPT0gMVxuICAgICwgSVNfRklMVEVSICAgICA9IFRZUEUgPT0gMlxuICAgICwgSVNfU09NRSAgICAgICA9IFRZUEUgPT0gM1xuICAgICwgSVNfRVZFUlkgICAgICA9IFRZUEUgPT0gNFxuICAgICwgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNlxuICAgICwgTk9fSE9MRVMgICAgICA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYXG4gICAgLCBjcmVhdGUgICAgICAgID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbigkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCl7XG4gICAgdmFyIE8gICAgICA9IHRvT2JqZWN0KCR0aGlzKVxuICAgICAgLCBzZWxmICAgPSBJT2JqZWN0KE8pXG4gICAgICAsIGYgICAgICA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKVxuICAgICAgLCBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aClcbiAgICAgICwgaW5kZXggID0gMFxuICAgICAgLCByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkXG4gICAgICAsIHZhbCwgcmVzO1xuICAgIGZvcig7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspaWYoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZil7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZihUWVBFKXtcbiAgICAgICAgaWYoSVNfTUFQKXJlc3VsdFtpbmRleF0gPSByZXM7ICAgICAgICAgICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYocmVzKXN3aXRjaChUWVBFKXtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmKElTX0VWRVJZKXJldHVybiBmYWxzZTsgICAgICAgICAgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_array-reduce.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var aFunction = __webpack_require__(\"./node_modules/core-js/modules/_a-function.js\")\n , toObject = __webpack_require__(\"./node_modules/core-js/modules/_to-object.js\")\n , IObject = __webpack_require__(\"./node_modules/core-js/modules/_iobject.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\");\n\nmodule.exports = function(that, callbackfn, aLen, memo, isRight){\n aFunction(callbackfn);\n var O = toObject(that)\n , self = IObject(O)\n , length = toLength(O.length)\n , index = isRight ? length - 1 : 0\n , i = isRight ? -1 : 1;\n if(aLen < 2)for(;;){\n if(index in self){\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if(isRight ? index < 0 : length <= index){\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for(;isRight ? index >= 0 : length > index; index += i)if(index in self){\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1yZWR1Y2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzP2FhMGUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKVxuICAsIHRvT2JqZWN0ICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgSU9iamVjdCAgID0gcmVxdWlyZSgnLi9faW9iamVjdCcpXG4gICwgdG9MZW5ndGggID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odGhhdCwgY2FsbGJhY2tmbiwgYUxlbiwgbWVtbywgaXNSaWdodCl7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gICAgICA9IHRvT2JqZWN0KHRoYXQpXG4gICAgLCBzZWxmICAgPSBJT2JqZWN0KE8pXG4gICAgLCBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aClcbiAgICAsIGluZGV4ICA9IGlzUmlnaHQgPyBsZW5ndGggLSAxIDogMFxuICAgICwgaSAgICAgID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYoYUxlbiA8IDIpZm9yKDs7KXtcbiAgICBpZihpbmRleCBpbiBzZWxmKXtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZihpc1JpZ2h0ID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KXtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgIH1cbiAgfVxuICBmb3IoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpaWYoaW5kZXggaW4gc2VsZil7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXJlZHVjZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_array-species-constructor.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , isArray = __webpack_require__(\"./node_modules/core-js/modules/_is-array.js\")\n , SPECIES = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('species');\n\nmodule.exports = function(original){\n var C;\n if(isArray(original)){\n C = original.constructor;\n // cross-realm fallback\n if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined;\n if(isObject(C)){\n C = C[SPECIES];\n if(C === null)C = undefined;\n }\n } return C === undefined ? Array : C;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanM/OGExZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGlzQXJyYXkgID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKVxuICAsIFNQRUNJRVMgID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbCl7XG4gIHZhciBDO1xuICBpZihpc0FycmF5KG9yaWdpbmFsKSl7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKUMgPSB1bmRlZmluZWQ7XG4gICAgaWYoaXNPYmplY3QoQykpe1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZihDID09PSBudWxsKUMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_array-species-create.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(\"./node_modules/core-js/modules/_array-species-constructor.js\");\n\nmodule.exports = function(original, length){\n return new (speciesConstructor(original))(length);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcz9hN2VlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3JpZ2luYWwsIGxlbmd0aCl7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_bind.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar aFunction = __webpack_require__(\"./node_modules/core-js/modules/_a-function.js\")\n , isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , invoke = __webpack_require__(\"./node_modules/core-js/modules/_invoke.js\")\n , arraySlice = [].slice\n , factories = {};\n\nvar construct = function(F, len, args){\n if(!(len in factories)){\n for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']';\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /*, args... */){\n var fn = aFunction(this)\n , partArgs = arraySlice.call(arguments, 1);\n var bound = function(/* args... */){\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if(isObject(fn.prototype))bound.prototype = fn.prototype;\n return bound;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19iaW5kLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2JpbmQuanM/ZDM5YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uICA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKVxuICAsIGlzT2JqZWN0ICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGludm9rZSAgICAgPSByZXF1aXJlKCcuL19pbnZva2UnKVxuICAsIGFycmF5U2xpY2UgPSBbXS5zbGljZVxuICAsIGZhY3RvcmllcyAgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uKEYsIGxlbiwgYXJncyl7XG4gIGlmKCEobGVuIGluIGZhY3Rvcmllcykpe1xuICAgIGZvcih2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKW5baV0gPSAnYVsnICsgaSArICddJztcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiwgYXJncy4uLiAqLyl7XG4gIHZhciBmbiAgICAgICA9IGFGdW5jdGlvbih0aGlzKVxuICAgICwgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24oLyogYXJncy4uLiAqLyl7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2JpbmQuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_classof.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(\"./node_modules/core-js/modules/_cof.js\")\n , TAG = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('toStringTag')\n // ES3 wrong here\n , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function(it, key){\n try {\n return it[key];\n } catch(e){ /* empty */ }\n};\n\nmodule.exports = function(it){\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanM/NjRjZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpXG4gICwgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJylcbiAgLy8gRVMzIHdyb25nIGhlcmVcbiAgLCBBUkcgPSBjb2YoZnVuY3Rpb24oKXsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbihpdCwga2V5KXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_cof.js": +/***/ (function(module, exports) { + +eval("var toString = {}.toString;\n\nmodule.exports = function(it){\n return toString.call(it).slice(8, -1);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fY29mLmpzPzExYmIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19jb2YuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_collection-strong.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar dP = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\").f\n , create = __webpack_require__(\"./node_modules/core-js/modules/_object-create.js\")\n , redefineAll = __webpack_require__(\"./node_modules/core-js/modules/_redefine-all.js\")\n , ctx = __webpack_require__(\"./node_modules/core-js/modules/_ctx.js\")\n , anInstance = __webpack_require__(\"./node_modules/core-js/modules/_an-instance.js\")\n , defined = __webpack_require__(\"./node_modules/core-js/modules/_defined.js\")\n , forOf = __webpack_require__(\"./node_modules/core-js/modules/_for-of.js\")\n , $iterDefine = __webpack_require__(\"./node_modules/core-js/modules/_iter-define.js\")\n , step = __webpack_require__(\"./node_modules/core-js/modules/_iter-step.js\")\n , setSpecies = __webpack_require__(\"./node_modules/core-js/modules/_set-species.js\")\n , DESCRIPTORS = __webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\")\n , fastKey = __webpack_require__(\"./node_modules/core-js/modules/_meta.js\").fastKey\n , SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function(that, key){\n // fast case\n var index = fastKey(key), entry;\n if(index !== 'F')return that._i[index];\n // frozen object case\n for(entry = that._f; entry; entry = entry.n){\n if(entry.k == key)return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function(wrapper, NAME, IS_MAP, ADDER){\n var C = wrapper(function(that, iterable){\n anInstance(that, C, NAME, '_i');\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear(){\n for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){\n entry.r = true;\n if(entry.p)entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function(key){\n var that = this\n , entry = getEntry(that, key);\n if(entry){\n var next = entry.n\n , prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if(prev)prev.n = next;\n if(next)next.p = prev;\n if(that._f == entry)that._f = next;\n if(that._l == entry)that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /*, that = undefined */){\n anInstance(this, C, 'forEach');\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3)\n , entry;\n while(entry = entry ? entry.n : this._f){\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while(entry && entry.r)entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key){\n return !!getEntry(this, key);\n }\n });\n if(DESCRIPTORS)dP(C.prototype, 'size', {\n get: function(){\n return defined(this[SIZE]);\n }\n });\n return C;\n },\n def: function(that, key, value){\n var entry = getEntry(that, key)\n , prev, index;\n // change existing entry\n if(entry){\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if(!that._f)that._f = entry;\n if(prev)prev.n = entry;\n that[SIZE]++;\n // add to index\n if(index !== 'F')that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function(C, NAME, IS_MAP){\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function(iterated, kind){\n this._t = iterated; // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function(){\n var that = this\n , kind = that._k\n , entry = that._l;\n // revert to the last existing entry\n while(entry && entry.r)entry = entry.p;\n // get next entry\n if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if(kind == 'keys' )return step(0, entry.k);\n if(kind == 'values')return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcz9kMTAwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBkUCAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBjcmVhdGUgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKVxuICAsIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJylcbiAgLCBjdHggICAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgYW5JbnN0YW5jZSAgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpXG4gICwgZGVmaW5lZCAgICAgPSByZXF1aXJlKCcuL19kZWZpbmVkJylcbiAgLCBmb3JPZiAgICAgICA9IHJlcXVpcmUoJy4vX2Zvci1vZicpXG4gICwgJGl0ZXJEZWZpbmUgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpXG4gICwgc3RlcCAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKVxuICAsIHNldFNwZWNpZXMgID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKVxuICAsIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKVxuICAsIGZhc3RLZXkgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXlcbiAgLCBTSVpFICAgICAgICA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24odGhhdCwga2V5KXtcbiAgLy8gZmFzdCBjYXNlXG4gIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KSwgZW50cnk7XG4gIGlmKGluZGV4ICE9PSAnRicpcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgZm9yKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubil7XG4gICAgaWYoZW50cnkuayA9PSBrZXkpcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpe1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbih0aGF0LCBpdGVyYWJsZSl7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZihpdGVyYWJsZSAhPSB1bmRlZmluZWQpZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCl7XG4gICAgICAgIGZvcih2YXIgdGhhdCA9IHRoaXMsIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pe1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmKGVudHJ5LnApZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcbiAgICAgICAgfVxuICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24oa2V5KXtcbiAgICAgICAgdmFyIHRoYXQgID0gdGhpc1xuICAgICAgICAgICwgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZihlbnRyeSl7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uXG4gICAgICAgICAgICAsIHByZXYgPSBlbnRyeS5wO1xuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmKHByZXYpcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZihuZXh0KW5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYodGhhdC5fZiA9PSBlbnRyeSl0aGF0Ll9mID0gbmV4dDtcbiAgICAgICAgICBpZih0aGF0Ll9sID09IGVudHJ5KXRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qLCB0aGF0ID0gdW5kZWZpbmVkICovKXtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGlzLCBDLCAnZm9yRWFjaCcpO1xuICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMylcbiAgICAgICAgICAsIGVudHJ5O1xuICAgICAgICB3aGlsZShlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2Ype1xuICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUoZW50cnkgJiYgZW50cnkucillbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSl7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYoREVTQ1JJUFRPUlMpZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gZGVmaW5lZCh0aGlzW1NJWkVdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbih0aGF0LCBrZXksIHZhbHVlKXtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpXG4gICAgICAsIHByZXYsIGluZGV4O1xuICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgIGlmKGVudHJ5KXtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmKCF0aGF0Ll9mKXRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmKHByZXYpcHJldi5uID0gZW50cnk7XG4gICAgICB0aGF0W1NJWkVdKys7XG4gICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgIGlmKGluZGV4ICE9PSAnRicpdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24oQywgTkFNRSwgSVNfTUFQKXtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24oaXRlcmF0ZWQsIGtpbmQpe1xuICAgICAgdGhpcy5fdCA9IGl0ZXJhdGVkOyAgLy8gdGFyZ2V0XG4gICAgICB0aGlzLl9rID0ga2luZDsgICAgICAvLyBraW5kXG4gICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAvLyBwcmV2aW91c1xuICAgIH0sIGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgdGhhdCAgPSB0aGlzXG4gICAgICAgICwga2luZCAgPSB0aGF0Ll9rXG4gICAgICAgICwgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZShlbnRyeSAmJiBlbnRyeS5yKWVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZighdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKXtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZihraW5kID09ICdrZXlzJyAgKXJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuICAgICAgaWYoa2luZCA9PSAndmFsdWVzJylyZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycgLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_collection-weak.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar redefineAll = __webpack_require__(\"./node_modules/core-js/modules/_redefine-all.js\")\n , getWeak = __webpack_require__(\"./node_modules/core-js/modules/_meta.js\").getWeak\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , anInstance = __webpack_require__(\"./node_modules/core-js/modules/_an-instance.js\")\n , forOf = __webpack_require__(\"./node_modules/core-js/modules/_for-of.js\")\n , createArrayMethod = __webpack_require__(\"./node_modules/core-js/modules/_array-methods.js\")\n , $has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , arrayFind = createArrayMethod(5)\n , arrayFindIndex = createArrayMethod(6)\n , id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function(that){\n return that._l || (that._l = new UncaughtFrozenStore);\n};\nvar UncaughtFrozenStore = function(){\n this.a = [];\n};\nvar findUncaughtFrozen = function(store, key){\n return arrayFind(store.a, function(it){\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function(key){\n var entry = findUncaughtFrozen(this, key);\n if(entry)return entry[1];\n },\n has: function(key){\n return !!findUncaughtFrozen(this, key);\n },\n set: function(key, value){\n var entry = findUncaughtFrozen(this, key);\n if(entry)entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function(key){\n var index = arrayFindIndex(this.a, function(it){\n return it[0] === key;\n });\n if(~index)this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function(wrapper, NAME, IS_MAP, ADDER){\n var C = wrapper(function(that, iterable){\n anInstance(that, C, NAME, '_i');\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function(key){\n if(!isObject(key))return false;\n var data = getWeak(key);\n if(data === true)return uncaughtFrozenStore(this)['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key){\n if(!isObject(key))return false;\n var data = getWeak(key);\n if(data === true)return uncaughtFrozenStore(this).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function(that, key, value){\n var data = getWeak(anObject(key), true);\n if(data === true)uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi13ZWFrLmpzPzk1MmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZGVmaW5lQWxsICAgICAgID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJylcbiAgLCBnZXRXZWFrICAgICAgICAgICA9IHJlcXVpcmUoJy4vX21ldGEnKS5nZXRXZWFrXG4gICwgYW5PYmplY3QgICAgICAgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIGlzT2JqZWN0ICAgICAgICAgID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBhbkluc3RhbmNlICAgICAgICA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJylcbiAgLCBmb3JPZiAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2Zvci1vZicpXG4gICwgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJylcbiAgLCAkaGFzICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgYXJyYXlGaW5kICAgICAgICAgPSBjcmVhdGVBcnJheU1ldGhvZCg1KVxuICAsIGFycmF5RmluZEluZGV4ICAgID0gY3JlYXRlQXJyYXlNZXRob2QoNilcbiAgLCBpZCAgICAgICAgICAgICAgICA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbih0aGF0KXtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSk7XG59O1xudmFyIFVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbigpe1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24oc3RvcmUsIGtleSl7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24oaXQpe1xuICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICB9KTtcbn07XG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbihrZXkpe1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmKGVudHJ5KXJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbihrZXkpe1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmKGVudHJ5KWVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24oa2V5KXtcbiAgICB2YXIgaW5kZXggPSBhcnJheUZpbmRJbmRleCh0aGlzLmEsIGZ1bmN0aW9uKGl0KXtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmKH5pbmRleCl0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24od3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUil7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uKHRoYXQsIGl0ZXJhYmxlKXtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYoaXRlcmFibGUgIT0gdW5kZWZpbmVkKWZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMy4zLjIgV2Vha01hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjQuMy4zIFdlYWtTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbihrZXkpe1xuICAgICAgICBpZighaXNPYmplY3Qoa2V5KSlyZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZihkYXRhID09PSB0cnVlKXJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHRoaXMpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpe1xuICAgICAgICBpZighaXNPYmplY3Qoa2V5KSlyZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZihkYXRhID09PSB0cnVlKXJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHRoaXMpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uKHRoYXQsIGtleSwgdmFsdWUpe1xuICAgIHZhciBkYXRhID0gZ2V0V2Vhayhhbk9iamVjdChrZXkpLCB0cnVlKTtcbiAgICBpZihkYXRhID09PSB0cnVlKXVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_collection.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , redefine = __webpack_require__(\"./node_modules/core-js/modules/_redefine.js\")\n , redefineAll = __webpack_require__(\"./node_modules/core-js/modules/_redefine-all.js\")\n , meta = __webpack_require__(\"./node_modules/core-js/modules/_meta.js\")\n , forOf = __webpack_require__(\"./node_modules/core-js/modules/_for-of.js\")\n , anInstance = __webpack_require__(\"./node_modules/core-js/modules/_an-instance.js\")\n , isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")\n , $iterDetect = __webpack_require__(\"./node_modules/core-js/modules/_iter-detect.js\")\n , setToStringTag = __webpack_require__(\"./node_modules/core-js/modules/_set-to-string-tag.js\")\n , inheritIfRequired = __webpack_require__(\"./node_modules/core-js/modules/_inherit-if-required.js\");\n\nmodule.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){\n var Base = global[NAME]\n , C = Base\n , ADDER = IS_MAP ? 'set' : 'add'\n , proto = C && C.prototype\n , O = {};\n var fixMethod = function(KEY){\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function(a){\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a){\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a){\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){\n new C().entries().next();\n }))){\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C\n // early implementations not supports chaining\n , HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); })\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n , ACCEPT_ITERABLES = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n , BUGGY_ZERO = !IS_WEAK && fails(function(){\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C()\n , index = 5;\n while(index--)$instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if(!ACCEPT_ITERABLES){ \n C = wrapper(function(target, iterable){\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base, target, C);\n if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER);\n // weak collections should not contains .clear method\n if(IS_WEAK && proto.clear)delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24uanM/NjMxOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsICAgICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsICRleHBvcnQgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCByZWRlZmluZSAgICAgICAgICA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJylcbiAgLCByZWRlZmluZUFsbCAgICAgICA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpXG4gICwgbWV0YSAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19tZXRhJylcbiAgLCBmb3JPZiAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2Zvci1vZicpXG4gICwgYW5JbnN0YW5jZSAgICAgICAgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpXG4gICwgaXNPYmplY3QgICAgICAgICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGZhaWxzICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKVxuICAsICRpdGVyRGV0ZWN0ICAgICAgID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKVxuICAsIHNldFRvU3RyaW5nVGFnICAgID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKXtcbiAgdmFyIEJhc2UgID0gZ2xvYmFsW05BTUVdXG4gICAgLCBDICAgICA9IEJhc2VcbiAgICAsIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJ1xuICAgICwgcHJvdG8gPSBDICYmIEMucHJvdG90eXBlXG4gICAgLCBPICAgICA9IHt9O1xuICB2YXIgZml4TWV0aG9kID0gZnVuY3Rpb24oS0VZKXtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbihhKXtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpe1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSl7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IHVuZGVmaW5lZCA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2FkZCcgPyBmdW5jdGlvbiBhZGQoYSl7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYil7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZih0eXBlb2YgQyAhPSAnZnVuY3Rpb24nIHx8ICEoSVNfV0VBSyB8fCBwcm90by5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbigpe1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKXtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICAgIG1ldGEuTkVFRCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGluc3RhbmNlICAgICAgICAgICAgID0gbmV3IENcbiAgICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICAgICwgSEFTTlRfQ0hBSU5JTkcgICAgICAgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlXG4gICAgICAvLyBWOCB+ICBDaHJvbWl1bSA0MC0gd2Vhay1jb2xsZWN0aW9ucyB0aHJvd3Mgb24gcHJpbWl0aXZlcywgYnV0IHNob3VsZCByZXR1cm4gZmFsc2VcbiAgICAgICwgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbigpeyBpbnN0YW5jZS5oYXMoMSk7IH0pXG4gICAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgICAsIEFDQ0VQVF9JVEVSQUJMRVMgICAgID0gJGl0ZXJEZXRlY3QoZnVuY3Rpb24oaXRlcil7IG5ldyBDKGl0ZXIpOyB9KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgICAsIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbigpe1xuICAgICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKClcbiAgICAgICAgICAsIGluZGV4ICAgICA9IDU7XG4gICAgICAgIHdoaWxlKGluZGV4LS0pJGluc3RhbmNlW0FEREVSXShpbmRleCwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgICAgfSk7XG4gICAgaWYoIUFDQ0VQVF9JVEVSQUJMRVMpeyBcbiAgICAgIEMgPSB3cmFwcGVyKGZ1bmN0aW9uKHRhcmdldCwgaXRlcmFibGUpe1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UsIHRhcmdldCwgQyk7XG4gICAgICAgIGlmKGl0ZXJhYmxlICE9IHVuZGVmaW5lZClmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgfSk7XG4gICAgICBDLnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgcHJvdG8uY29uc3RydWN0b3IgPSBDO1xuICAgIH1cbiAgICBpZihUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKXtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmKEJVR0dZX1pFUk8gfHwgSEFTTlRfQ0hBSU5JTkcpZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpZGVsZXRlIHByb3RvLmNsZWFyO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQywgTkFNRSk7XG5cbiAgT1tOQU1FXSA9IEM7XG4gICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEMgIT0gQmFzZSksIE8pO1xuXG4gIGlmKCFJU19XRUFLKWNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_core.js": +/***/ (function(module, exports) { + +eval("var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanM/YTAzMiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0ge3ZlcnNpb246ICcyLjQuMCd9O1xuaWYodHlwZW9mIF9fZSA9PSAnbnVtYmVyJylfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fY29yZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_create-property.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $defineProperty = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\")\n , createDesc = __webpack_require__(\"./node_modules/core-js/modules/_property-desc.js\");\n\nmodule.exports = function(object, index, value){\n if(index in object)$defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzP2RlY2QiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgY3JlYXRlRGVzYyAgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iamVjdCwgaW5kZXgsIHZhbHVlKXtcbiAgaWYoaW5kZXggaW4gb2JqZWN0KSRkZWZpbmVQcm9wZXJ0eS5mKG9iamVjdCwgaW5kZXgsIGNyZWF0ZURlc2MoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbaW5kZXhdID0gdmFsdWU7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_ctx.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// optional / simple context binding\nvar aFunction = __webpack_require__(\"./node_modules/core-js/modules/_a-function.js\");\nmodule.exports = function(fn, that, length){\n aFunction(fn);\n if(that === undefined)return fn;\n switch(length){\n case 1: return function(a){\n return fn.call(that, a);\n };\n case 2: return function(a, b){\n return fn.call(that, a, b);\n };\n case 3: return function(a, b, c){\n return fn.call(that, a, b, c);\n };\n }\n return function(/* ...args */){\n return fn.apply(that, arguments);\n };\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jdHguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzPzIzNzkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgdGhhdCwgbGVuZ3RoKXtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYodGhhdCA9PT0gdW5kZWZpbmVkKXJldHVybiBmbjtcbiAgc3dpdGNoKGxlbmd0aCl7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24oYSl7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbihhLCBiLCBjKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKC8qIC4uLmFyZ3MgKi8pe1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19jdHguanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_date-to-primitive.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , toPrimitive = __webpack_require__(\"./node_modules/core-js/modules/_to-primitive.js\")\n , NUMBER = 'number';\n\nmodule.exports = function(hint){\n if(hint !== 'string' && hint !== NUMBER && hint !== 'default')throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLXByaW1pdGl2ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLXByaW1pdGl2ZS5qcz81ZGI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKVxuICAsIE5VTUJFUiAgICAgID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGludCl7XG4gIGlmKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gdG9QcmltaXRpdmUoYW5PYmplY3QodGhpcyksIGhpbnQgIT0gTlVNQkVSKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_defined.js": +/***/ (function(module, exports) { + +eval("// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n if(it == undefined)throw TypeError(\"Can't call method on \" + it);\n return it;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanM/NDI5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKGl0ID09IHVuZGVmaW5lZCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_descriptors.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcz84MmJhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7Z2V0OiBmdW5jdGlvbigpeyByZXR1cm4gNzsgfX0pLmEgIT0gNztcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_dom-create.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , document = __webpack_require__(\"./node_modules/core-js/modules/_global.js\").document\n // in old IE typeof document.createElement is 'object'\n , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n return is ? document.createElement(it) : {};\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2RvbS1jcmVhdGUuanM/YjAzZCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnRcbiAgLy8gaW4gb2xkIElFIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnXG4gICwgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_enum-bug-keys.js": +/***/ (function(module, exports) { + +eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2VudW0tYnVnLWtleXMuanM/MTQ4MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0tYnVnLWtleXMuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_enum-keys.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(\"./node_modules/core-js/modules/_object-keys.js\")\n , gOPS = __webpack_require__(\"./node_modules/core-js/modules/_object-gops.js\")\n , pIE = __webpack_require__(\"./node_modules/core-js/modules/_object-pie.js\");\nmodule.exports = function(it){\n var result = getKeys(it)\n , getSymbols = gOPS.f;\n if(getSymbols){\n var symbols = getSymbols(it)\n , isEnum = pIE.f\n , i = 0\n , key;\n while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);\n } return result;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzPzgzMGIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIGdPUFMgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpXG4gICwgcElFICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICB2YXIgcmVzdWx0ICAgICA9IGdldEtleXMoaXQpXG4gICAgLCBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZihnZXRTeW1ib2xzKXtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpXG4gICAgICAsIGlzRW51bSAgPSBwSUUuZlxuICAgICAgLCBpICAgICAgID0gMFxuICAgICAgLCBrZXk7XG4gICAgd2hpbGUoc3ltYm9scy5sZW5ndGggPiBpKWlmKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKXJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_export.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , core = __webpack_require__(\"./node_modules/core-js/modules/_core.js\")\n , hide = __webpack_require__(\"./node_modules/core-js/modules/_hide.js\")\n , redefine = __webpack_require__(\"./node_modules/core-js/modules/_redefine.js\")\n , ctx = __webpack_require__(\"./node_modules/core-js/modules/_ctx.js\")\n , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n var IS_FORCED = type & $export.F\n , IS_GLOBAL = type & $export.G\n , IS_STATIC = type & $export.S\n , IS_PROTO = type & $export.P\n , IS_BIND = type & $export.B\n , target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]\n , exports = IS_GLOBAL ? core : core[name] || (core[name] = {})\n , expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {})\n , key, own, out, exp;\n if(IS_GLOBAL)source = name;\n for(key in source){\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if(target)redefine(target, key, out, type & $export.U);\n // export\n if(exports[key] != out)hide(exports, key, exp);\n if(IS_PROTO && expProto[key] != out)expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzPzM4NzAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgY29yZSAgICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgaGlkZSAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgcmVkZWZpbmUgID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKVxuICAsIGN0eCAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgc291cmNlKXtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkZcbiAgICAsIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0LkdcbiAgICAsIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlNcbiAgICAsIElTX1BST1RPICA9IHR5cGUgJiAkZXhwb3J0LlBcbiAgICAsIElTX0JJTkQgICA9IHR5cGUgJiAkZXhwb3J0LkJcbiAgICAsIHRhcmdldCAgICA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXVxuICAgICwgZXhwb3J0cyAgID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSlcbiAgICAsIGV4cFByb3RvICA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pXG4gICAgLCBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmKElTX0dMT0JBTClzb3VyY2UgPSBuYW1lO1xuICBmb3Ioa2V5IGluIHNvdXJjZSl7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYodGFyZ2V0KXJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmKGV4cG9ydHNba2V5XSAhPSBvdXQpaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWAgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_fails-is-regexp.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var MATCH = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('match');\nmodule.exports = function(KEY){\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch(e){\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch(f){ /* empty */ }\n } return true;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy1pcy1yZWdleHAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzPzdhOGEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEtFWSl7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaChlKXtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2goZil7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_fails.js": +/***/ (function(module, exports) { + +eval("module.exports = function(exec){\n try {\n return !!exec();\n } catch(e){\n return true;\n }\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19mYWlscy5qcz8yZjNmIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZXhlYyl7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_fix-re-wks.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar hide = __webpack_require__(\"./node_modules/core-js/modules/_hide.js\")\n , redefine = __webpack_require__(\"./node_modules/core-js/modules/_redefine.js\")\n , fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")\n , defined = __webpack_require__(\"./node_modules/core-js/modules/_defined.js\")\n , wks = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\");\n\nmodule.exports = function(KEY, length, exec){\n var SYMBOL = wks(KEY)\n , fns = exec(defined, SYMBOL, ''[KEY])\n , strfn = fns[0]\n , rxfn = fns[1];\n if(fails(function(){\n var O = {};\n O[SYMBOL] = function(){ return 7; };\n return ''[KEY](O) != 7;\n })){\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function(string, arg){ return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function(string){ return rxfn.call(string, this); }\n );\n }\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19maXgtcmUtd2tzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanM/MDY0NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgaGlkZSAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJylcbiAgLCBmYWlscyAgICA9IHJlcXVpcmUoJy4vX2ZhaWxzJylcbiAgLCBkZWZpbmVkICA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKVxuICAsIHdrcyAgICAgID0gcmVxdWlyZSgnLi9fd2tzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZLCBsZW5ndGgsIGV4ZWMpe1xuICB2YXIgU1lNQk9MICAgPSB3a3MoS0VZKVxuICAgICwgZm5zICAgICAgPSBleGVjKGRlZmluZWQsIFNZTUJPTCwgJydbS0VZXSlcbiAgICAsIHN0cmZuICAgID0gZm5zWzBdXG4gICAgLCByeGZuICAgICA9IGZuc1sxXTtcbiAgaWYoZmFpbHMoZnVuY3Rpb24oKXtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pKXtcbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uKHN0cmluZywgYXJnKXsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbihzdHJpbmcpeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_flags.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\");\nmodule.exports = function(){\n var that = anObject(this)\n , result = '';\n if(that.global) result += 'g';\n if(that.ignoreCase) result += 'i';\n if(that.multiline) result += 'm';\n if(that.unicode) result += 'u';\n if(that.sticky) result += 'y';\n return result;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGFncy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19mbGFncy5qcz9lNTY4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKXtcbiAgdmFyIHRoYXQgICA9IGFuT2JqZWN0KHRoaXMpXG4gICAgLCByZXN1bHQgPSAnJztcbiAgaWYodGhhdC5nbG9iYWwpICAgICByZXN1bHQgKz0gJ2cnO1xuICBpZih0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmKHRoYXQubXVsdGlsaW5lKSAgcmVzdWx0ICs9ICdtJztcbiAgaWYodGhhdC51bmljb2RlKSAgICByZXN1bHQgKz0gJ3UnO1xuICBpZih0aGF0LnN0aWNreSkgICAgIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_for-of.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var ctx = __webpack_require__(\"./node_modules/core-js/modules/_ctx.js\")\n , call = __webpack_require__(\"./node_modules/core-js/modules/_iter-call.js\")\n , isArrayIter = __webpack_require__(\"./node_modules/core-js/modules/_is-array-iter.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\")\n , getIterFn = __webpack_require__(\"./node_modules/core-js/modules/core.get-iterator-method.js\")\n , BREAK = {}\n , RETURN = {};\nvar exports = module.exports = function(iterable, entries, fn, that, ITERATOR){\n var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable)\n , f = ctx(fn, that, entries ? 2 : 1)\n , index = 0\n , length, step, iterator, result;\n if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if(result === BREAK || result === RETURN)return result;\n } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){\n result = call(iterator, f, step.value, entries);\n if(result === BREAK || result === RETURN)return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mb3Itb2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzPzA3NWIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBjYWxsICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpXG4gICwgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJylcbiAgLCBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgdG9MZW5ndGggICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGdldEl0ZXJGbiAgID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKVxuICAsIEJSRUFLICAgICAgID0ge31cbiAgLCBSRVRVUk4gICAgICA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1Ipe1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbigpeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpXG4gICAgLCBmICAgICAgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSlcbiAgICAsIGluZGV4ICA9IDBcbiAgICAsIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYoaXNBcnJheUl0ZXIoaXRlckZuKSlmb3IobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4Kyspe1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZihyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKXJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgKXtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZihyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKXJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLICA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_global.js": +/***/ (function(module, exports) { + +eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzP2Q0MjkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZiA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZih0eXBlb2YgX19nID09ICdudW1iZXInKV9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_has.js": +/***/ (function(module, exports) { + +eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n return hasOwnProperty.call(it, key);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oYXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9faGFzLmpzPzc0MTciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBrZXkpe1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9faGFzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_hide.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var dP = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\")\n , createDesc = __webpack_require__(\"./node_modules/core-js/modules/_property-desc.js\");\nmodule.exports = __webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\") ? function(object, key, value){\n return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n object[key] = value;\n return object;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2hpZGUuanM/NzE3MSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZFAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uKG9iamVjdCwga2V5LCB2YWx1ZSl7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9faGlkZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_html.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("module.exports = __webpack_require__(\"./node_modules/core-js/modules/_global.js\").document && document.documentElement;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19odG1sLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2h0bWwuanM/MWZkNiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19odG1sLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2h0bWwuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_ie8-dom-define.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("module.exports = !__webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\") && !__webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n return Object.defineProperty(__webpack_require__(\"./node_modules/core-js/modules/_dom-create.js\")('div'), 'a', {get: function(){ return 7; }}).a != 7;\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcz9kZTYzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_inherit-if-required.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , setPrototypeOf = __webpack_require__(\"./node_modules/core-js/modules/_set-proto.js\").set;\nmodule.exports = function(that, target, C){\n var P, S = target.constructor;\n if(S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf){\n setPrototypeOf(that, P);\n } return that;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbmhlcml0LWlmLXJlcXVpcmVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanM/NzU5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih0aGF0LCB0YXJnZXQsIEMpe1xuICB2YXIgUCwgUyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgaWYoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZil7XG4gICAgc2V0UHJvdG90eXBlT2YodGhhdCwgUCk7XG4gIH0gcmV0dXJuIHRoYXQ7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_invoke.js": +/***/ (function(module, exports) { + +eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function(fn, args, that){\n var un = that === undefined;\n switch(args.length){\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbnZva2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzPzJiNDUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuLCBhcmdzLCB0aGF0KXtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2goYXJncy5sZW5ndGgpe1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbnZva2UuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iobject.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(\"./node_modules/core-js/modules/_cof.js\");\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n return cof(it) == 'String' ? it.split('') : Object(it);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2lvYmplY3QuanM/OTUyMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lvYmplY3QuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_is-array-iter.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// check on default Array iterator\nvar Iterators = __webpack_require__(\"./node_modules/core-js/modules/_iterators.js\")\n , ITERATOR = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('iterator')\n , ArrayProto = Array.prototype;\n\nmodule.exports = function(it){\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LWl0ZXIuanM/MzM5MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgSVRFUkFUT1IgICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LWl0ZXIuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_is-array.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(\"./node_modules/core-js/modules/_cof.js\");\nmodule.exports = Array.isArray || function isArray(arg){\n return cof(arg) == 'Array';\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcz82YzAyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpe1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_is-integer.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , floor = Math.floor;\nmodule.exports = function isInteger(it){\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1pbnRlZ2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanM/NWM0NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgZmxvb3IgICAgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpe1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1pbnRlZ2VyLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_is-object.js": +/***/ (function(module, exports) { + +eval("module.exports = function(it){\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzPzZlZjIiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_is-regexp.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , cof = __webpack_require__(\"./node_modules/core-js/modules/_cof.js\")\n , MATCH = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('match');\nmodule.exports = function(it){\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzP2E0YjgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGNvZiAgICAgID0gcmVxdWlyZSgnLi9fY29mJylcbiAgLCBNQVRDSCAgICA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iter-call.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\");\nmodule.exports = function(iterator, fn, value, entries){\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch(e){\n var ret = iterator['return'];\n if(ret !== undefined)anObject(ret.call(iterator));\n throw e;\n }\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzP2UyN2UiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpe1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2goZSl7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZihyZXQgIT09IHVuZGVmaW5lZClhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iter-create.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar create = __webpack_require__(\"./node_modules/core-js/modules/_object-create.js\")\n , descriptor = __webpack_require__(\"./node_modules/core-js/modules/_property-desc.js\")\n , setToStringTag = __webpack_require__(\"./node_modules/core-js/modules/_set-to-string-tag.js\")\n , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(\"./node_modules/core-js/modules/_hide.js\")(IteratorPrototype, __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n setToStringTag(Constructor, NAME + ' Iterator');\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcz85YjY4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKVxuICAsIGRlc2NyaXB0b3IgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCl7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwge25leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCl9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iter-define.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar LIBRARY = __webpack_require__(\"./node_modules/core-js/modules/_library.js\")\n , $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , redefine = __webpack_require__(\"./node_modules/core-js/modules/_redefine.js\")\n , hide = __webpack_require__(\"./node_modules/core-js/modules/_hide.js\")\n , has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , Iterators = __webpack_require__(\"./node_modules/core-js/modules/_iterators.js\")\n , $iterCreate = __webpack_require__(\"./node_modules/core-js/modules/_iter-create.js\")\n , setToStringTag = __webpack_require__(\"./node_modules/core-js/modules/_set-to-string-tag.js\")\n , getPrototypeOf = __webpack_require__(\"./node_modules/core-js/modules/_object-gpo.js\")\n , ITERATOR = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('iterator')\n , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n , FF_ITERATOR = '@@iterator'\n , KEYS = 'keys'\n , VALUES = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n $iterCreate(Constructor, NAME, next);\n var getMethod = function(kind){\n if(!BUGGY && kind in proto)return proto[kind];\n switch(kind){\n case KEYS: return function keys(){ return new Constructor(this, kind); };\n case VALUES: return function values(){ return new Constructor(this, kind); };\n } return function entries(){ return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator'\n , DEF_VALUES = DEFAULT == VALUES\n , VALUES_BUG = false\n , proto = Base.prototype\n , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n , $default = $native || getMethod(DEFAULT)\n , $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n , methods, key, IteratorPrototype;\n // Fix native\n if($anyNative){\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n if(IteratorPrototype !== Object.prototype){\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if(DEF_VALUES && $native && $native.name !== VALUES){\n VALUES_BUG = true;\n $default = function values(){ return $native.call(this); };\n }\n // Define iterator\n if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if(DEFAULT){\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if(FORCED)for(key in methods){\n if(!(key in proto))redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcz80ZWUzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZICAgICAgICA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCByZWRlZmluZSAgICAgICA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJylcbiAgLCBoaWRlICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIGhhcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBJdGVyYXRvcnMgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpXG4gICwgJGl0ZXJDcmVhdGUgICAgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJylcbiAgLCBJVEVSQVRPUiAgICAgICA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpXG4gICwgQlVHR1kgICAgICAgICAgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSkgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICAsIEZGX0lURVJBVE9SICAgID0gJ0BAaXRlcmF0b3InXG4gICwgS0VZUyAgICAgICAgICAgPSAna2V5cydcbiAgLCBWQUxVRVMgICAgICAgICA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCl7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uKGtpbmQpe1xuICAgIGlmKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKXJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2goa2luZCl7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyAgICAgICAgPSBOQU1FICsgJyBJdGVyYXRvcidcbiAgICAsIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFU1xuICAgICwgVkFMVUVTX0JVRyA9IGZhbHNlXG4gICAgLCBwcm90byAgICAgID0gQmFzZS5wcm90b3R5cGVcbiAgICAsICRuYXRpdmUgICAgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF1cbiAgICAsICRkZWZhdWx0ICAgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKVxuICAgICwgJGVudHJpZXMgICA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWRcbiAgICAsICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlXG4gICAgLCBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmKCRhbnlOYXRpdmUpe1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKSk7XG4gICAgaWYoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpe1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmKCFMSUJSQVJZICYmICFoYXMoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SKSloaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKXtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZigoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSl7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSAgPSByZXR1cm5UaGlzO1xuICBpZihERUZBVUxUKXtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiAgREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiAgICBJU19TRVQgICAgID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYoRk9SQ0VEKWZvcihrZXkgaW4gbWV0aG9kcyl7XG4gICAgICBpZighKGtleSBpbiBwcm90bykpcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iter-detect.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var ITERATOR = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('iterator')\n , SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function(){ SAFE_CLOSING = true; };\n Array.from(riter, function(){ throw 2; });\n} catch(e){ /* empty */ }\n\nmodule.exports = function(exec, skipClosing){\n if(!skipClosing && !SAFE_CLOSING)return false;\n var safe = false;\n try {\n var arr = [7]\n , iter = arr[ITERATOR]();\n iter.next = function(){ return {done: safe = true}; };\n arr[ITERATOR] = function(){ return iter; };\n exec(arr);\n } catch(e){ /* empty */ }\n return safe;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcz8xNWRhIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBJVEVSQVRPUiAgICAgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKVxuICAsIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uKCl7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uKCl7IHRocm93IDI7IH0pO1xufSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMsIHNraXBDbG9zaW5nKXtcbiAgaWYoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgID0gWzddXG4gICAgICAsIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24oKXsgcmV0dXJuIHtkb25lOiBzYWZlID0gdHJ1ZX07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uKCl7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iter-step.js": +/***/ (function(module, exports) { + +eval("module.exports = function(done, value){\n return {value: value, done: !!done};\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzPzAwMzgiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkb25lLCB2YWx1ZSl7XG4gIHJldHVybiB7dmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmV9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_iterators.js": +/***/ (function(module, exports) { + +eval("module.exports = {};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzP2EyMzEiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_keyof.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var getKeys = __webpack_require__(\"./node_modules/core-js/modules/_object-keys.js\")\n , toIObject = __webpack_require__(\"./node_modules/core-js/modules/_to-iobject.js\");\nmodule.exports = function(object, el){\n var O = toIObject(object)\n , keys = getKeys(O)\n , length = keys.length\n , index = 0\n , key;\n while(length > index)if(O[key = keys[index++]] === el)return key;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19rZXlvZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19rZXlvZi5qcz85NDY1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBnZXRLZXlzICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpXG4gICwgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIGVsKXtcbiAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG4gICAgLCBrZXlzICAgPSBnZXRLZXlzKE8pXG4gICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICwgaW5kZXggID0gMFxuICAgICwga2V5O1xuICB3aGlsZShsZW5ndGggPiBpbmRleClpZihPW2tleSA9IGtleXNbaW5kZXgrK11dID09PSBlbClyZXR1cm4ga2V5O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19rZXlvZi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19rZXlvZi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_library.js": +/***/ (function(module, exports) { + +eval("module.exports = false;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanM/MWI5YyJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_math-expm1.js": +/***/ (function(module, exports) { + +eval("// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x){\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX21hdGgtZXhwbTEuanM/NjczNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCl7XG4gIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IHggPiAtMWUtNiAmJiB4IDwgMWUtNiA/IHggKyB4ICogeCAvIDIgOiBNYXRoLmV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX21hdGgtZXhwbTEuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_math-log1p.js": +/***/ (function(module, exports) { + +eval("// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x){\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX21hdGgtbG9nMXAuanM/YWRjMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmxvZzFwIHx8IGZ1bmN0aW9uIGxvZzFwKHgpe1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX21hdGgtbG9nMXAuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_math-sign.js": +/***/ (function(module, exports) { + +eval("// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x){\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNpZ24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzPzQyNGQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24gc2lnbih4KXtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgfHwgeCAhPSB4ID8geCA6IHggPCAwID8gLTEgOiAxO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19tYXRoLXNpZ24uanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_meta.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var META = __webpack_require__(\"./node_modules/core-js/modules/_uid.js\")('meta')\n , isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , setDesc = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\").f\n , id = 0;\nvar isExtensible = Object.isExtensible || function(){\n return true;\n};\nvar FREEZE = !__webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function(it){\n setDesc(it, META, {value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n }});\n};\nvar fastKey = function(it, create){\n // return primitive with prefix\n if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if(!has(it, META)){\n // can't set metadata to uncaught frozen object\n if(!isExtensible(it))return 'F';\n // not necessary to add metadata\n if(!create)return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function(it, create){\n if(!has(it, META)){\n // can't set metadata to uncaught frozen object\n if(!isExtensible(it))return true;\n // not necessary to add metadata\n if(!create)return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function(it){\n if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX21ldGEuanM/ZDNjYyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTUVUQSAgICAgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpXG4gICwgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGhhcyAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBzZXREZXNjICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBpZCAgICAgICA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbigpe1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbihpdCl7XG4gIHNldERlc2MoaXQsIE1FVEEsIHt2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH19KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uKGl0LCBjcmVhdGUpe1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYoIWhhcyhpdCwgTUVUQSkpe1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYoIWlzRXh0ZW5zaWJsZShpdCkpcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmKCFjcmVhdGUpcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbihpdCwgY3JlYXRlKXtcbiAgaWYoIWhhcyhpdCwgTUVUQSkpe1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYoIWlzRXh0ZW5zaWJsZShpdCkpcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZighY3JlYXRlKXJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24oaXQpe1xuICBpZihGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6ICAgICAgTUVUQSxcbiAgTkVFRDogICAgIGZhbHNlLFxuICBmYXN0S2V5OiAgZmFzdEtleSxcbiAgZ2V0V2VhazogIGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_microtask.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , macrotask = __webpack_require__(\"./node_modules/core-js/modules/_task.js\").set\n , Observer = global.MutationObserver || global.WebKitMutationObserver\n , process = global.process\n , Promise = global.Promise\n , isNode = __webpack_require__(\"./node_modules/core-js/modules/_cof.js\")(process) == 'process';\n\nmodule.exports = function(){\n var head, last, notify;\n\n var flush = function(){\n var parent, fn;\n if(isNode && (parent = process.domain))parent.exit();\n while(head){\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch(e){\n if(head)notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if(parent)parent.enter();\n };\n\n // Node.js\n if(isNode){\n notify = function(){\n process.nextTick(flush);\n };\n // browsers with MutationObserver\n } else if(Observer){\n var toggle = true\n , node = document.createTextNode('');\n new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new\n notify = function(){\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if(Promise && Promise.resolve){\n var promise = Promise.resolve();\n notify = function(){\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function(){\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function(fn){\n var task = {fn: fn, next: undefined};\n if(last)last.next = task;\n if(!head){\n head = task;\n notify();\n } last = task;\n };\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19taWNyb3Rhc2suanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzP2Q5MDEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldFxuICAsIE9ic2VydmVyICA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyXG4gICwgcHJvY2VzcyAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBQcm9taXNlICAgPSBnbG9iYWwuUHJvbWlzZVxuICAsIGlzTm9kZSAgICA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpe1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uKCl7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZShoZWFkKXtcbiAgICAgIGZuICAgPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoKGUpe1xuICAgICAgICBpZihoZWFkKW5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmKHBhcmVudClwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmKGlzTm9kZSl7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlclxuICB9IGVsc2UgaWYoT2JzZXJ2ZXIpe1xuICAgIHZhciB0b2dnbGUgPSB0cnVlXG4gICAgICAsIG5vZGUgICA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwge2NoYXJhY3RlckRhdGE6IHRydWV9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbigpe1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpe1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uKCl7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGZuKXtcbiAgICB2YXIgdGFzayA9IHtmbjogZm4sIG5leHQ6IHVuZGVmaW5lZH07XG4gICAgaWYobGFzdClsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmKCFoZWFkKXtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21pY3JvdGFzay5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-assign.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = __webpack_require__(\"./node_modules/core-js/modules/_object-keys.js\")\n , gOPS = __webpack_require__(\"./node_modules/core-js/modules/_object-gops.js\")\n , pIE = __webpack_require__(\"./node_modules/core-js/modules/_object-pie.js\")\n , toObject = __webpack_require__(\"./node_modules/core-js/modules/_to-object.js\")\n , IObject = __webpack_require__(\"./node_modules/core-js/modules/_iobject.js\")\n , $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n var A = {}\n , B = {}\n , S = Symbol()\n , K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function(k){ B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n var T = toObject(target)\n , aLen = arguments.length\n , index = 1\n , getSymbols = gOPS.f\n , isEnum = pIE.f;\n while(aLen > index){\n var S = IObject(arguments[index++])\n , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n , length = keys.length\n , j = 0\n , key;\n while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n } return T;\n} : $assign;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanM/NTIzMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgZ2V0S2V5cyAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpXG4gICwgZ09QUyAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpXG4gICwgcElFICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJylcbiAgLCB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgSU9iamVjdCAgPSByZXF1aXJlKCcuL19pb2JqZWN0JylcbiAgLCAkYXNzaWduICA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHZhciBBID0ge31cbiAgICAsIEIgPSB7fVxuICAgICwgUyA9IFN5bWJvbCgpXG4gICAgLCBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24oayl7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSl7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgICAgID0gdG9PYmplY3QodGFyZ2V0KVxuICAgICwgYUxlbiAgPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBpbmRleCA9IDFcbiAgICAsIGdldFN5bWJvbHMgPSBnT1BTLmZcbiAgICAsIGlzRW51bSAgICAgPSBwSUUuZjtcbiAgd2hpbGUoYUxlbiA+IGluZGV4KXtcbiAgICB2YXIgUyAgICAgID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pXG4gICAgICAsIGtleXMgICA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUylcbiAgICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAgICwgaiAgICAgID0gMFxuICAgICAgLCBrZXk7XG4gICAgd2hpbGUobGVuZ3RoID4gailpZihpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKVRba2V5XSA9IFNba2V5XTtcbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-create.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , dPs = __webpack_require__(\"./node_modules/core-js/modules/_object-dps.js\")\n , enumBugKeys = __webpack_require__(\"./node_modules/core-js/modules/_enum-bug-keys.js\")\n , IE_PROTO = __webpack_require__(\"./node_modules/core-js/modules/_shared-key.js\")('IE_PROTO')\n , Empty = function(){ /* empty */ }\n , PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function(){\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(\"./node_modules/core-js/modules/_dom-create.js\")('iframe')\n , i = enumBugKeys.length\n , lt = '<'\n , gt = '>'\n , iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(\"./node_modules/core-js/modules/_html.js\").appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties){\n var result;\n if(O !== null){\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty;\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1jcmVhdGUuanM/OGI4NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgZFBzICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJylcbiAgLCBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKVxuICAsIElFX1BST1RPICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpXG4gICwgRW1wdHkgICAgICAgPSBmdW5jdGlvbigpeyAvKiBlbXB0eSAqLyB9XG4gICwgUFJPVE9UWVBFICAgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbigpe1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKVxuICAgICwgaSAgICAgID0gZW51bUJ1Z0tleXMubGVuZ3RoXG4gICAgLCBsdCAgICAgPSAnPCdcbiAgICAsIGd0ICAgICA9ICc+J1xuICAgICwgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUoaS0tKWRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKXtcbiAgdmFyIHJlc3VsdDtcbiAgaWYoTyAhPT0gbnVsbCl7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1jcmVhdGUuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-dp.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , IE8_DOM_DEFINE = __webpack_require__(\"./node_modules/core-js/modules/_ie8-dom-define.js\")\n , toPrimitive = __webpack_require__(\"./node_modules/core-js/modules/_to-primitive.js\")\n , dP = Object.defineProperty;\n\nexports.f = __webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\") ? Object.defineProperty : function defineProperty(O, P, Attributes){\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if(IE8_DOM_DEFINE)try {\n return dP(O, P, Attributes);\n } catch(e){ /* empty */ }\n if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n if('value' in Attributes)O[P] = Attributes.value;\n return O;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzP2M0MjYiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJylcbiAgLCB0b1ByaW1pdGl2ZSAgICA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpXG4gICwgZFAgICAgICAgICAgICAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKXtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmKElFOF9ET01fREVGSU5FKXRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG4gIGlmKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcyl0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZigndmFsdWUnIGluIEF0dHJpYnV0ZXMpT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-dps.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var dP = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , getKeys = __webpack_require__(\"./node_modules/core-js/modules/_object-keys.js\");\n\nmodule.exports = __webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\") ? Object.defineProperties : function defineProperties(O, Properties){\n anObject(O);\n var keys = getKeys(Properties)\n , length = keys.length\n , i = 0\n , P;\n while(length > i)dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanM/Y2JhYiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZFAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBnZXRLZXlzICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKXtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzICAgPSBnZXRLZXlzKFByb3BlcnRpZXMpXG4gICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICwgaSA9IDBcbiAgICAsIFA7XG4gIHdoaWxlKGxlbmd0aCA+IGkpZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-gopd.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var pIE = __webpack_require__(\"./node_modules/core-js/modules/_object-pie.js\")\n , createDesc = __webpack_require__(\"./node_modules/core-js/modules/_property-desc.js\")\n , toIObject = __webpack_require__(\"./node_modules/core-js/modules/_to-iobject.js\")\n , toPrimitive = __webpack_require__(\"./node_modules/core-js/modules/_to-primitive.js\")\n , has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , IE8_DOM_DEFINE = __webpack_require__(\"./node_modules/core-js/modules/_ie8-dom-define.js\")\n , gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\") ? gOPD : function getOwnPropertyDescriptor(O, P){\n O = toIObject(O);\n P = toPrimitive(P, true);\n if(IE8_DOM_DEFINE)try {\n return gOPD(O, P);\n } catch(e){ /* empty */ }\n if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcz85YTdlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBwSUUgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKVxuICAsIGNyZWF0ZURlc2MgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgdG9JT2JqZWN0ICAgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCB0b1ByaW1pdGl2ZSAgICA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKVxuICAsIGdPUEQgICAgICAgICAgID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCl7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYoSUU4X0RPTV9ERUZJTkUpdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuICBpZihoYXMoTywgUCkpcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-gopn-ext.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(\"./node_modules/core-js/modules/_to-iobject.js\")\n , gOPN = __webpack_require__(\"./node_modules/core-js/modules/_object-gopn.js\").f\n , toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function(it){\n try {\n return gOPN(it);\n } catch(e){\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it){\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzP2NjMjciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIGdPUE4gICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZlxuICAsIHRvU3RyaW5nICA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24oaXQpe1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpe1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-gopn.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(\"./node_modules/core-js/modules/_object-keys-internal.js\")\n , hiddenKeys = __webpack_require__(\"./node_modules/core-js/modules/_enum-bug-keys.js\").concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){\n return $keys(O, hiddenKeys);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcz85NTc2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKVxuICAsIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTyl7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-gops.js": +/***/ (function(module, exports) { + +eval("exports.f = Object.getOwnPropertySymbols;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcz8zMmMwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-gpo.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , toObject = __webpack_require__(\"./node_modules/core-js/modules/_to-object.js\")\n , IE_PROTO = __webpack_require__(\"./node_modules/core-js/modules/_shared-key.js\")('IE_PROTO')\n , ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function(O){\n O = toObject(O);\n if(has(O, IE_PROTO))return O[IE_PROTO];\n if(typeof O.constructor == 'function' && O instanceof O.constructor){\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanM/MWQ1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCB0b09iamVjdCAgICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgSUVfUFJPVE8gICAgPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJylcbiAgLCBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uKE8pe1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmKGhhcyhPLCBJRV9QUk9UTykpcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZih0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKXtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-keys-internal.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , toIObject = __webpack_require__(\"./node_modules/core-js/modules/_to-iobject.js\")\n , arrayIndexOf = __webpack_require__(\"./node_modules/core-js/modules/_array-includes.js\")(false)\n , IE_PROTO = __webpack_require__(\"./node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\n\nmodule.exports = function(object, names){\n var O = toIObject(object)\n , i = 0\n , result = []\n , key;\n for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while(names.length > i)if(has(O, key = names[i++])){\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcz8xMWI4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXMgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIHRvSU9iamVjdCAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpXG4gICwgSUVfUFJPVE8gICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iamVjdCwgbmFtZXMpe1xuICB2YXIgTyAgICAgID0gdG9JT2JqZWN0KG9iamVjdClcbiAgICAsIGkgICAgICA9IDBcbiAgICAsIHJlc3VsdCA9IFtdXG4gICAgLCBrZXk7XG4gIGZvcihrZXkgaW4gTylpZihrZXkgIT0gSUVfUFJPVE8paGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKWlmKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSl7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-keys.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(\"./node_modules/core-js/modules/_object-keys-internal.js\")\n , enumBugKeys = __webpack_require__(\"./node_modules/core-js/modules/_enum-bug-keys.js\");\n\nmodule.exports = Object.keys || function keys(O){\n return $keys(O, enumBugKeys);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcz8yMDI4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKVxuICAsIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTyl7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-pie.js": +/***/ (function(module, exports) { + +eval("exports.f = {}.propertyIsEnumerable;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1waWUuanM/NzljZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1waWUuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_object-sap.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , core = __webpack_require__(\"./node_modules/core-js/modules/_core.js\")\n , fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\");\nmodule.exports = function(KEY, exec){\n var fn = (core.Object || {})[KEY] || Object[KEY]\n , exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qtc2FwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1zYXAuanM/ZTgxYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBjb3JlICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgZmFpbHMgICA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEtFWSwgZXhlYyl7XG4gIHZhciBmbiAgPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV1cbiAgICAsIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uKCl7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1zYXAuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_own-keys.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(\"./node_modules/core-js/modules/_object-gopn.js\")\n , gOPS = __webpack_require__(\"./node_modules/core-js/modules/_object-gops.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , Reflect = __webpack_require__(\"./node_modules/core-js/modules/_global.js\").Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it){\n var keys = gOPN.f(anObject(it))\n , getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcz83ZjRmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbnZhciBnT1BOICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJylcbiAgLCBnT1BTICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJylcbiAgLCBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgUmVmbGVjdCAgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZWZsZWN0ICYmIFJlZmxlY3Qub3duS2V5cyB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KXtcbiAgdmFyIGtleXMgICAgICAgPSBnT1BOLmYoYW5PYmplY3QoaXQpKVxuICAgICwgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_parse-float.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $parseFloat = __webpack_require__(\"./node_modules/core-js/modules/_global.js\").parseFloat\n , $trim = __webpack_require__(\"./node_modules/core-js/modules/_string-trim.js\").trim;\n\nmodule.exports = 1 / $parseFloat(__webpack_require__(\"./node_modules/core-js/modules/_string-ws.js\") + '-0') !== -Infinity ? function parseFloat(str){\n var string = $trim(String(str), 3)\n , result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wYXJzZS1mbG9hdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19wYXJzZS1mbG9hdC5qcz81MmZhIl0sInNvdXJjZXNDb250ZW50IjpbInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXRcbiAgLCAkdHJpbSAgICAgICA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQocmVxdWlyZSgnLi9fc3RyaW5nLXdzJykgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpe1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpXG4gICAgLCByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_parse-int.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $parseInt = __webpack_require__(\"./node_modules/core-js/modules/_global.js\").parseInt\n , $trim = __webpack_require__(\"./node_modules/core-js/modules/_string-trim.js\").trim\n , ws = __webpack_require__(\"./node_modules/core-js/modules/_string-ws.js\")\n , hex = /^[\\-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix){\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wYXJzZS1pbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzPzE4ODEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlSW50XG4gICwgJHRyaW0gICAgID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltXG4gICwgd3MgICAgICAgID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJylcbiAgLCBoZXggICAgICAgPSAvXltcXC0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KXtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgcmV0dXJuICRwYXJzZUludChzdHJpbmcsIChyYWRpeCA+Pj4gMCkgfHwgKGhleC50ZXN0KHN0cmluZykgPyAxNiA6IDEwKSk7XG59IDogJHBhcnNlSW50O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wYXJzZS1pbnQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_property-desc.js": +/***/ (function(module, exports) { + +eval("module.exports = function(bitmap, value){\n return {\n enumerable : !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable : !(bitmap & 4),\n value : value\n };\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanM/NzY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGJpdG1hcCwgdmFsdWUpe1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGUgIDogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGUgICAgOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlICAgICAgIDogdmFsdWVcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_redefine-all.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var redefine = __webpack_require__(\"./node_modules/core-js/modules/_redefine.js\");\nmodule.exports = function(target, src, safe){\n for(var key in src)redefine(target, key, src[key], safe);\n return target;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzPzgwNjUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odGFyZ2V0LCBzcmMsIHNhZmUpe1xuICBmb3IodmFyIGtleSBpbiBzcmMpcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_redefine.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , hide = __webpack_require__(\"./node_modules/core-js/modules/_hide.js\")\n , has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , SRC = __webpack_require__(\"./node_modules/core-js/modules/_uid.js\")('src')\n , TO_STRING = 'toString'\n , $toString = Function[TO_STRING]\n , TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(\"./node_modules/core-js/modules/_core.js\").inspectSource = function(it){\n return $toString.call(it);\n};\n\n(module.exports = function(O, key, val, safe){\n var isFunction = typeof val == 'function';\n if(isFunction)has(val, 'name') || hide(val, 'name', key);\n if(O[key] === val)return;\n if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if(O === global){\n O[key] = val;\n } else {\n if(!safe){\n delete O[key];\n hide(O, key, val);\n } else {\n if(O[key])O[key] = val;\n else hide(O, key, val);\n }\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString(){\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcz8yMTNlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGhpZGUgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIGhhcyAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgU1JDICAgICAgID0gcmVxdWlyZSgnLi9fdWlkJykoJ3NyYycpXG4gICwgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJ1xuICAsICR0b1N0cmluZyA9IEZ1bmN0aW9uW1RPX1NUUklOR11cbiAgLCBUUEwgICAgICAgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gJHRvU3RyaW5nLmNhbGwoaXQpO1xufTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTywga2V5LCB2YWwsIHNhZmUpe1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYoaXNGdW5jdGlvbiloYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmKE9ba2V5XSA9PT0gdmFsKXJldHVybjtcbiAgaWYoaXNGdW5jdGlvbiloYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYoTyA9PT0gZ2xvYmFsKXtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSB7XG4gICAgaWYoIXNhZmUpe1xuICAgICAgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZihPW2tleV0pT1trZXldID0gdmFsO1xuICAgICAgZWxzZSBoaWRlKE8sIGtleSwgdmFsKTtcbiAgICB9XG4gIH1cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCl7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_same-value.js": +/***/ (function(module, exports) { + +eval("// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y){\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanM/NDdkYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuOSBTYW1lVmFsdWUoeCwgeSlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpe1xuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_set-proto.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\");\nvar check = function(O, proto){\n anObject(O);\n if(!isObject(proto) && proto !== null)throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function(test, buggy, set){\n try {\n set = __webpack_require__(\"./node_modules/core-js/modules/_ctx.js\")(Function.call, __webpack_require__(\"./node_modules/core-js/modules/_object-gopd.js\").f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch(e){ buggy = true; }\n return function setPrototypeOf(O, proto){\n check(O, proto);\n if(buggy)O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzPzI3OGQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24oTywgcHJvdG8pe1xuICBhbk9iamVjdChPKTtcbiAgaWYoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCl0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmdW5jdGlvbih0ZXN0LCBidWdneSwgc2V0KXtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoKGUpeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90byl7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYoYnVnZ3kpTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX3NldC1wcm90by5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_set-species.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , dP = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\")\n , DESCRIPTORS = __webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\")\n , SPECIES = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('species');\n\nmodule.exports = function(KEY){\n var C = global[KEY];\n if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, {\n configurable: true,\n get: function(){ return this; }\n });\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcz9iMzcyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgZFAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKVxuICAsIFNQRUNJRVMgICAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihLRVkpe1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZihERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKWRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_set-to-string-tag.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var def = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\").f\n , has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , TAG = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcz9jMDJkIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mXG4gICwgaGFzID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgdGFnLCBzdGF0KXtcbiAgaWYoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSlkZWYoaXQsIFRBRywge2NvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZ30pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_shared-key.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var shared = __webpack_require__(\"./node_modules/core-js/modules/_shared.js\")('keys')\n , uid = __webpack_require__(\"./node_modules/core-js/modules/_uid.js\");\nmodule.exports = function(key){\n return shared[key] || (shared[key] = uid(key));\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanM/MTk1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKVxuICAsIHVpZCAgICA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihrZXkpe1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_shared.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , SHARED = '__core-js_shared__'\n , store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n return store[key] || (store[key] = {});\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzP2FiOGQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXydcbiAgLCBzdG9yZSAgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0ge30pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19zaGFyZWQuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_species-constructor.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , aFunction = __webpack_require__(\"./node_modules/core-js/modules/_a-function.js\")\n , SPECIES = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('species');\nmodule.exports = function(O, D){\n var C = anObject(O).constructor, S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanM/MDhmYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKVxuICAsIFNQRUNJRVMgICA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE8sIEQpe1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yLCBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_strict-method.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\");\n\nmodule.exports = function(method, arg){\n return !!method && fails(function(){\n arg ? method.call(null, function(){}, 1) : method.call(null);\n });\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX3N0cmljdC1tZXRob2QuanM/MTkyMyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1ldGhvZCwgYXJnKXtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uKCl7XG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24oKXt9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_string-at.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var toInteger = __webpack_require__(\"./node_modules/core-js/modules/_to-integer.js\")\n , defined = __webpack_require__(\"./node_modules/core-js/modules/_defined.js\");\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n return function(that, pos){\n var s = String(defined(that))\n , i = toInteger(pos)\n , l = s.length\n , a, b;\n if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctYXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzPzdlNWQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIGRlZmluZWQgICA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFRPX1NUUklORyl7XG4gIHJldHVybiBmdW5jdGlvbih0aGF0LCBwb3Mpe1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpXG4gICAgICAsIGkgPSB0b0ludGVnZXIocG9zKVxuICAgICAgLCBsID0gcy5sZW5ndGhcbiAgICAgICwgYSwgYjtcbiAgICBpZihpIDwgMCB8fCBpID49IGwpcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_string-context.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(\"./node_modules/core-js/modules/_is-regexp.js\")\n , defined = __webpack_require__(\"./node_modules/core-js/modules/_defined.js\");\n\nmodule.exports = function(that, searchString, NAME){\n if(isRegExp(searchString))throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcz8yOGUyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGhlbHBlciBmb3IgU3RyaW5nI3tzdGFydHNXaXRoLCBlbmRzV2l0aCwgaW5jbHVkZXN9XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKVxuICAsIGRlZmluZWQgID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSl7XG4gIGlmKGlzUmVnRXhwKHNlYXJjaFN0cmluZykpdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1jb250ZXh0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1jb250ZXh0LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_string-html.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")\n , defined = __webpack_require__(\"./node_modules/core-js/modules/_defined.js\")\n , quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function(string, tag, attribute, value) {\n var S = String(defined(string))\n , p1 = '<' + tag;\n if(attribute !== '')p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function(NAME, exec){\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function(){\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcz81ZTljIl0sInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBmYWlscyAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKVxuICAsIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJylcbiAgLCBxdW90ICAgID0gL1wiL2c7XG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbnZhciBjcmVhdGVIVE1MID0gZnVuY3Rpb24oc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSlcbiAgICAsIHAxID0gJzwnICsgdGFnO1xuICBpZihhdHRyaWJ1dGUgIT09ICcnKXAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTkFNRSwgZXhlYyl7XG4gIHZhciBPID0ge307XG4gIE9bTkFNRV0gPSBleGVjKGNyZWF0ZUhUTUwpO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uKCl7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_string-repeat.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar toInteger = __webpack_require__(\"./node_modules/core-js/modules/_to-integer.js\")\n , defined = __webpack_require__(\"./node_modules/core-js/modules/_defined.js\");\n\nmodule.exports = function repeat(count){\n var str = String(defined(this))\n , res = ''\n , n = toInteger(count);\n if(n < 0 || n == Infinity)throw RangeError(\"Count can't be negative\");\n for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str;\n return res;\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcmVwZWF0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanM/NmM1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpXG4gICwgZGVmaW5lZCAgID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCl7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSlcbiAgICAsIHJlcyA9ICcnXG4gICAgLCBuICAgPSB0b0ludGVnZXIoY291bnQpO1xuICBpZihuIDwgMCB8fCBuID09IEluZmluaXR5KXRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpaWYobiAmIDEpcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcmVwZWF0LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_string-trim.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , defined = __webpack_require__(\"./node_modules/core-js/modules/_defined.js\")\n , fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")\n , spaces = __webpack_require__(\"./node_modules/core-js/modules/_string-ws.js\")\n , space = '[' + spaces + ']'\n , non = '\\u200b\\u0085'\n , ltrim = RegExp('^' + space + space + '*')\n , rtrim = RegExp(space + space + '*$');\n\nvar exporter = function(KEY, exec, ALIAS){\n var exp = {};\n var FORCE = fails(function(){\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if(ALIAS)exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function(string, TYPE){\n string = String(defined(string));\n if(TYPE & 1)string = string.replace(ltrim, '');\n if(TYPE & 2)string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctdHJpbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL19zdHJpbmctdHJpbS5qcz9mM2IwIl0sInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpXG4gICwgZmFpbHMgICA9IHJlcXVpcmUoJy4vX2ZhaWxzJylcbiAgLCBzcGFjZXMgID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJylcbiAgLCBzcGFjZSAgID0gJ1snICsgc3BhY2VzICsgJ10nXG4gICwgbm9uICAgICA9ICdcXHUyMDBiXFx1MDA4NSdcbiAgLCBsdHJpbSAgID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpXG4gICwgcnRyaW0gICA9IFJlZ0V4cChzcGFjZSArIHNwYWNlICsgJyokJyk7XG5cbnZhciBleHBvcnRlciA9IGZ1bmN0aW9uKEtFWSwgZXhlYywgQUxJQVMpe1xuICB2YXIgZXhwICAgPSB7fTtcbiAgdmFyIEZPUkNFID0gZmFpbHMoZnVuY3Rpb24oKXtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYoQUxJQVMpZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uKHN0cmluZywgVFlQRSl7XG4gIHN0cmluZyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICBpZihUWVBFICYgMSlzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZihUWVBFICYgMilzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL19zdHJpbmctdHJpbS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctdHJpbS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_string-ws.js": +/***/ (function(module, exports) { + +eval("module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzPzIzYzAiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSAnXFx4MDlcXHgwQVxceDBCXFx4MENcXHgwRFxceDIwXFx4QTBcXHUxNjgwXFx1MTgwRVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDMnICtcbiAgJ1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy13cy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_task.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var ctx = __webpack_require__(\"./node_modules/core-js/modules/_ctx.js\")\n , invoke = __webpack_require__(\"./node_modules/core-js/modules/_invoke.js\")\n , html = __webpack_require__(\"./node_modules/core-js/modules/_html.js\")\n , cel = __webpack_require__(\"./node_modules/core-js/modules/_dom-create.js\")\n , global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , process = global.process\n , setTask = global.setImmediate\n , clearTask = global.clearImmediate\n , MessageChannel = global.MessageChannel\n , counter = 0\n , queue = {}\n , ONREADYSTATECHANGE = 'onreadystatechange'\n , defer, channel, port;\nvar run = function(){\n var id = +this;\n if(queue.hasOwnProperty(id)){\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function(event){\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif(!setTask || !clearTask){\n setTask = function setImmediate(fn){\n var args = [], i = 1;\n while(arguments.length > i)args.push(arguments[i++]);\n queue[++counter] = function(){\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id){\n delete queue[id];\n };\n // Node.js 0.8-\n if(__webpack_require__(\"./node_modules/core-js/modules/_cof.js\")(process) == 'process'){\n defer = function(id){\n process.nextTick(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if(MessageChannel){\n channel = new MessageChannel;\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){\n defer = function(id){\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if(ONREADYSTATECHANGE in cel('script')){\n defer = function(id){\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function(id){\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190YXNrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanM/MzZmYyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY3R4ICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBpbnZva2UgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19pbnZva2UnKVxuICAsIGh0bWwgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2h0bWwnKVxuICAsIGNlbCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKVxuICAsIGdsb2JhbCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3NcbiAgLCBzZXRUYXNrICAgICAgICAgICAgPSBnbG9iYWwuc2V0SW1tZWRpYXRlXG4gICwgY2xlYXJUYXNrICAgICAgICAgID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlXG4gICwgTWVzc2FnZUNoYW5uZWwgICAgID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsXG4gICwgY291bnRlciAgICAgICAgICAgID0gMFxuICAsIHF1ZXVlICAgICAgICAgICAgICA9IHt9XG4gICwgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSdcbiAgLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbigpe1xuICB2YXIgaWQgPSArdGhpcztcbiAgaWYocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKXtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQpe1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZighc2V0VGFzayB8fCAhY2xlYXJUYXNrKXtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbil7XG4gICAgdmFyIGFyZ3MgPSBbXSwgaSA9IDE7XG4gICAgd2hpbGUoYXJndW1lbnRzLmxlbmd0aCA+IGkpYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24oKXtcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCl7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJyl7XG4gICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYoTWVzc2FnZUNoYW5uZWwpe1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7XG4gICAgcG9ydCAgICA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZihnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpe1xuICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKXtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiAgIHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fdGFzay5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190YXNrLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_to-index.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var toInteger = __webpack_require__(\"./node_modules/core-js/modules/_to-integer.js\")\n , max = Math.max\n , min = Math.min;\nmodule.exports = function(index, length){\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcz9jMzE3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBtYXggICAgICAgPSBNYXRoLm1heFxuICAsIG1pbiAgICAgICA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpbmRleCwgbGVuZ3RoKXtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_to-integer.js": +/***/ (function(module, exports) { + +eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil\n , floor = Math.floor;\nmodule.exports = function(it){\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanM/MmE1MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsICA9IE1hdGguY2VpbFxuICAsIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_to-iobject.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(\"./node_modules/core-js/modules/_iobject.js\")\n , defined = __webpack_require__(\"./node_modules/core-js/modules/_defined.js\");\nmodule.exports = function(it){\n return IObject(defined(it));\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX3RvLWlvYmplY3QuanM/NzJmZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpXG4gICwgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX3RvLWlvYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_to-length.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(\"./node_modules/core-js/modules/_to-integer.js\")\n , min = Math.min;\nmodule.exports = function(it){\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzP2YwODAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpXG4gICwgbWluICAgICAgID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_to-object.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(\"./node_modules/core-js/modules/_defined.js\");\nmodule.exports = function(it){\n return Object(defined(it));\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzPzBjNzMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX3RvLW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_to-primitive.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\");\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n if(!isObject(it))return it;\n var fn, val;\n if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1wcmltaXRpdmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzP2Q2MmEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgUyl7XG4gIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICBpZih0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIGlmKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_typed-array.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nif(__webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\")){\n var LIBRARY = __webpack_require__(\"./node_modules/core-js/modules/_library.js\")\n , global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")\n , $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $typed = __webpack_require__(\"./node_modules/core-js/modules/_typed.js\")\n , $buffer = __webpack_require__(\"./node_modules/core-js/modules/_typed-buffer.js\")\n , ctx = __webpack_require__(\"./node_modules/core-js/modules/_ctx.js\")\n , anInstance = __webpack_require__(\"./node_modules/core-js/modules/_an-instance.js\")\n , propertyDesc = __webpack_require__(\"./node_modules/core-js/modules/_property-desc.js\")\n , hide = __webpack_require__(\"./node_modules/core-js/modules/_hide.js\")\n , redefineAll = __webpack_require__(\"./node_modules/core-js/modules/_redefine-all.js\")\n , toInteger = __webpack_require__(\"./node_modules/core-js/modules/_to-integer.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\")\n , toIndex = __webpack_require__(\"./node_modules/core-js/modules/_to-index.js\")\n , toPrimitive = __webpack_require__(\"./node_modules/core-js/modules/_to-primitive.js\")\n , has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , same = __webpack_require__(\"./node_modules/core-js/modules/_same-value.js\")\n , classof = __webpack_require__(\"./node_modules/core-js/modules/_classof.js\")\n , isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , toObject = __webpack_require__(\"./node_modules/core-js/modules/_to-object.js\")\n , isArrayIter = __webpack_require__(\"./node_modules/core-js/modules/_is-array-iter.js\")\n , create = __webpack_require__(\"./node_modules/core-js/modules/_object-create.js\")\n , getPrototypeOf = __webpack_require__(\"./node_modules/core-js/modules/_object-gpo.js\")\n , gOPN = __webpack_require__(\"./node_modules/core-js/modules/_object-gopn.js\").f\n , getIterFn = __webpack_require__(\"./node_modules/core-js/modules/core.get-iterator-method.js\")\n , uid = __webpack_require__(\"./node_modules/core-js/modules/_uid.js\")\n , wks = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")\n , createArrayMethod = __webpack_require__(\"./node_modules/core-js/modules/_array-methods.js\")\n , createArrayIncludes = __webpack_require__(\"./node_modules/core-js/modules/_array-includes.js\")\n , speciesConstructor = __webpack_require__(\"./node_modules/core-js/modules/_species-constructor.js\")\n , ArrayIterators = __webpack_require__(\"./node_modules/core-js/modules/es6.array.iterator.js\")\n , Iterators = __webpack_require__(\"./node_modules/core-js/modules/_iterators.js\")\n , $iterDetect = __webpack_require__(\"./node_modules/core-js/modules/_iter-detect.js\")\n , setSpecies = __webpack_require__(\"./node_modules/core-js/modules/_set-species.js\")\n , arrayFill = __webpack_require__(\"./node_modules/core-js/modules/_array-fill.js\")\n , arrayCopyWithin = __webpack_require__(\"./node_modules/core-js/modules/_array-copy-within.js\")\n , $DP = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\")\n , $GOPD = __webpack_require__(\"./node_modules/core-js/modules/_object-gopd.js\")\n , dP = $DP.f\n , gOPD = $GOPD.f\n , RangeError = global.RangeError\n , TypeError = global.TypeError\n , Uint8Array = global.Uint8Array\n , ARRAY_BUFFER = 'ArrayBuffer'\n , SHARED_BUFFER = 'Shared' + ARRAY_BUFFER\n , BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT'\n , PROTOTYPE = 'prototype'\n , ArrayProto = Array[PROTOTYPE]\n , $ArrayBuffer = $buffer.ArrayBuffer\n , $DataView = $buffer.DataView\n , arrayForEach = createArrayMethod(0)\n , arrayFilter = createArrayMethod(2)\n , arraySome = createArrayMethod(3)\n , arrayEvery = createArrayMethod(4)\n , arrayFind = createArrayMethod(5)\n , arrayFindIndex = createArrayMethod(6)\n , arrayIncludes = createArrayIncludes(true)\n , arrayIndexOf = createArrayIncludes(false)\n , arrayValues = ArrayIterators.values\n , arrayKeys = ArrayIterators.keys\n , arrayEntries = ArrayIterators.entries\n , arrayLastIndexOf = ArrayProto.lastIndexOf\n , arrayReduce = ArrayProto.reduce\n , arrayReduceRight = ArrayProto.reduceRight\n , arrayJoin = ArrayProto.join\n , arraySort = ArrayProto.sort\n , arraySlice = ArrayProto.slice\n , arrayToString = ArrayProto.toString\n , arrayToLocaleString = ArrayProto.toLocaleString\n , ITERATOR = wks('iterator')\n , TAG = wks('toStringTag')\n , TYPED_CONSTRUCTOR = uid('typed_constructor')\n , DEF_CONSTRUCTOR = uid('def_constructor')\n , ALL_CONSTRUCTORS = $typed.CONSTR\n , TYPED_ARRAY = $typed.TYPED\n , VIEW = $typed.VIEW\n , WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function(O, length){\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function(){\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function(){\n new Uint8Array(1).set({});\n });\n\n var strictToLength = function(it, SAME){\n if(it === undefined)throw TypeError(WRONG_LENGTH);\n var number = +it\n , length = toLength(it);\n if(SAME && !same(number, length))throw RangeError(WRONG_LENGTH);\n return length;\n };\n\n var toOffset = function(it, BYTES){\n var offset = toInteger(it);\n if(offset < 0 || offset % BYTES)throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function(it){\n if(isObject(it) && TYPED_ARRAY in it)return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function(C, length){\n if(!(isObject(C) && TYPED_CONSTRUCTOR in C)){\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function(O, list){\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function(C, list){\n var index = 0\n , length = list.length\n , result = allocate(C, length);\n while(length > index)result[index] = list[index++];\n return result;\n };\n\n var addGetter = function(it, key, internal){\n dP(it, key, {get: function(){ return this._d[internal]; }});\n };\n\n var $from = function from(source /*, mapfn, thisArg */){\n var O = toObject(source)\n , aLen = arguments.length\n , mapfn = aLen > 1 ? arguments[1] : undefined\n , mapping = mapfn !== undefined\n , iterFn = getIterFn(O)\n , i, length, values, result, step, iterator;\n if(iterFn != undefined && !isArrayIter(iterFn)){\n for(iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++){\n values.push(step.value);\n } O = values;\n }\n if(mapping && aLen > 2)mapfn = ctx(mapfn, arguments[2], 2);\n for(i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++){\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/*...items*/){\n var index = 0\n , length = arguments.length\n , result = allocate(this, length);\n while(length > index)result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function(){ arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString(){\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /*, end */){\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /*, thisArg */){\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /*, start, end */){ // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /*, thisArg */){\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /*, thisArg */){\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /*, thisArg */){\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /*, thisArg */){\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /*, fromIndex */){\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /*, fromIndex */){\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator){ // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */){ // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /*, thisArg */){\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse(){\n var that = this\n , length = validate(that).length\n , middle = Math.floor(length / 2)\n , index = 0\n , value;\n while(index < middle){\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /*, thisArg */){\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn){\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end){\n var O = validate(this)\n , length = O.length\n , $begin = toIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end){\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /*, offset */){\n validate(this);\n var offset = toOffset(arguments[1], 1)\n , length = this.length\n , src = toObject(arrayLike)\n , len = toLength(src.length)\n , index = 0;\n if(len + offset > length)throw RangeError(WRONG_LENGTH);\n while(index < len)this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries(){\n return arrayEntries.call(validate(this));\n },\n keys: function keys(){\n return arrayKeys.call(validate(this));\n },\n values: function values(){\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function(target, key){\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key){\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc){\n if(isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ){\n target[key] = desc.value;\n return target;\n } else return dP(target, key, desc);\n };\n\n if(!ALL_CONSTRUCTORS){\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if(fails(function(){ arrayToString.call({}); })){\n arrayToString = arrayToLocaleString = function toString(){\n return arrayJoin.call(this);\n }\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function(){ /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function(){ return this[TYPED_ARRAY]; }\n });\n\n module.exports = function(KEY, BYTES, wrapper, CLAMPED){\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array'\n , ISNT_UINT8 = NAME != 'Uint8Array'\n , GETTER = 'get' + KEY\n , SETTER = 'set' + KEY\n , TypedArray = global[NAME]\n , Base = TypedArray || {}\n , TAC = TypedArray && getPrototypeOf(TypedArray)\n , FORCED = !TypedArray || !$typed.ABV\n , O = {}\n , TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function(that, index){\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function(that, index, value){\n var data = that._d;\n if(CLAMPED)value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function(that, index){\n dP(that, index, {\n get: function(){\n return getter(this, index);\n },\n set: function(value){\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if(FORCED){\n TypedArray = wrapper(function(that, data, $offset, $length){\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0\n , offset = 0\n , buffer, byteLength, length, klass;\n if(!isObject(data)){\n length = strictToLength(data, true)\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if($length === undefined){\n if($len % BYTES)throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if(byteLength < 0)throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if(byteLength + offset > $len)throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if(TYPED_ARRAY in data){\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while(index < length)addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if(!$iterDetect(function(iter){\n // V8 works with iterators, but fails in many other cases\n // https://code.google.com/p/v8/issues/detail?id=4552\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)){\n TypedArray = wrapper(function(that, data, $offset, $length){\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if(!isObject(data))return new Base(strictToLength(data, ISNT_UINT8));\n if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if(TYPED_ARRAY in data)return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function(key){\n if(!(key in TypedArray))hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if(!LIBRARY)TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR]\n , CORRECT_ITER_NAME = !!$nativeIterator && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined)\n , $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if(CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)){\n dP(TypedArrayPrototype, TAG, {\n get: function(){ return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES,\n from: $from,\n of: $of\n });\n\n if(!(BYTES_PER_ELEMENT in TypedArrayPrototype))hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, {set: $set});\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n $export($export.P + $export.F * (TypedArrayPrototype.toString != arrayToString), NAME, {toString: arrayToString});\n\n $export($export.P + $export.F * fails(function(){\n new TypedArray(1).slice();\n }), NAME, {slice: $slice});\n\n $export($export.P + $export.F * (fails(function(){\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString()\n }) || !fails(function(){\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, {toLocaleString: $toLocaleString});\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if(!LIBRARY && !CORRECT_ITER_NAME)hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function(){ /* empty */ };//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL190eXBlZC1hcnJheS5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbmlmKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykpe1xuICB2YXIgTElCUkFSWSAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKVxuICAgICwgZ2xvYmFsICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICAgLCBmYWlscyAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKVxuICAgICwgJGV4cG9ydCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICAgLCAkdHlwZWQgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fdHlwZWQnKVxuICAgICwgJGJ1ZmZlciAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpXG4gICAgLCBjdHggICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgICAsIGFuSW5zdGFuY2UgICAgICAgICAgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpXG4gICAgLCBwcm9wZXJ0eURlc2MgICAgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICAgLCBoaWRlICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICAgLCByZWRlZmluZUFsbCAgICAgICAgID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJylcbiAgICAsIHRvSW50ZWdlciAgICAgICAgICAgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgICAsIHRvTGVuZ3RoICAgICAgICAgICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAgICwgdG9JbmRleCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3RvLWluZGV4JylcbiAgICAsIHRvUHJpbWl0aXZlICAgICAgICAgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKVxuICAgICwgaGFzICAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICAgLCBzYW1lICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpXG4gICAgLCBjbGFzc29mICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICAgLCBpc09iamVjdCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgICAsIHRvT2JqZWN0ICAgICAgICAgICAgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAgICwgaXNBcnJheUl0ZXIgICAgICAgICA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKVxuICAgICwgY3JlYXRlICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKVxuICAgICwgZ2V0UHJvdG90eXBlT2YgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKVxuICAgICwgZ09QTiAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZlxuICAgICwgZ2V0SXRlckZuICAgICAgICAgICA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJylcbiAgICAsIHVpZCAgICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL191aWQnKVxuICAgICwgd2tzICAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3drcycpXG4gICAgLCBjcmVhdGVBcnJheU1ldGhvZCAgID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpXG4gICAgLCBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKVxuICAgICwgc3BlY2llc0NvbnN0cnVjdG9yICA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKVxuICAgICwgQXJyYXlJdGVyYXRvcnMgICAgICA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJylcbiAgICAsIEl0ZXJhdG9ycyAgICAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKVxuICAgICwgJGl0ZXJEZXRlY3QgICAgICAgICA9IHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JylcbiAgICAsIHNldFNwZWNpZXMgICAgICAgICAgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpXG4gICAgLCBhcnJheUZpbGwgICAgICAgICAgID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpXG4gICAgLCBhcnJheUNvcHlXaXRoaW4gICAgID0gcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKVxuICAgICwgJERQICAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICAgLCAkR09QRCAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKVxuICAgICwgZFAgICAgICAgICAgICAgICAgICA9ICREUC5mXG4gICAgLCBnT1BEICAgICAgICAgICAgICAgID0gJEdPUEQuZlxuICAgICwgUmFuZ2VFcnJvciAgICAgICAgICA9IGdsb2JhbC5SYW5nZUVycm9yXG4gICAgLCBUeXBlRXJyb3IgICAgICAgICAgID0gZ2xvYmFsLlR5cGVFcnJvclxuICAgICwgVWludDhBcnJheSAgICAgICAgICA9IGdsb2JhbC5VaW50OEFycmF5XG4gICAgLCBBUlJBWV9CVUZGRVIgICAgICAgID0gJ0FycmF5QnVmZmVyJ1xuICAgICwgU0hBUkVEX0JVRkZFUiAgICAgICA9ICdTaGFyZWQnICsgQVJSQVlfQlVGRkVSXG4gICAgLCBCWVRFU19QRVJfRUxFTUVOVCAgID0gJ0JZVEVTX1BFUl9FTEVNRU5UJ1xuICAgICwgUFJPVE9UWVBFICAgICAgICAgICA9ICdwcm90b3R5cGUnXG4gICAgLCBBcnJheVByb3RvICAgICAgICAgID0gQXJyYXlbUFJPVE9UWVBFXVxuICAgICwgJEFycmF5QnVmZmVyICAgICAgICA9ICRidWZmZXIuQXJyYXlCdWZmZXJcbiAgICAsICREYXRhVmlldyAgICAgICAgICAgPSAkYnVmZmVyLkRhdGFWaWV3XG4gICAgLCBhcnJheUZvckVhY2ggICAgICAgID0gY3JlYXRlQXJyYXlNZXRob2QoMClcbiAgICAsIGFycmF5RmlsdGVyICAgICAgICAgPSBjcmVhdGVBcnJheU1ldGhvZCgyKVxuICAgICwgYXJyYXlTb21lICAgICAgICAgICA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpXG4gICAgLCBhcnJheUV2ZXJ5ICAgICAgICAgID0gY3JlYXRlQXJyYXlNZXRob2QoNClcbiAgICAsIGFycmF5RmluZCAgICAgICAgICAgPSBjcmVhdGVBcnJheU1ldGhvZCg1KVxuICAgICwgYXJyYXlGaW5kSW5kZXggICAgICA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpXG4gICAgLCBhcnJheUluY2x1ZGVzICAgICAgID0gY3JlYXRlQXJyYXlJbmNsdWRlcyh0cnVlKVxuICAgICwgYXJyYXlJbmRleE9mICAgICAgICA9IGNyZWF0ZUFycmF5SW5jbHVkZXMoZmFsc2UpXG4gICAgLCBhcnJheVZhbHVlcyAgICAgICAgID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzXG4gICAgLCBhcnJheUtleXMgICAgICAgICAgID0gQXJyYXlJdGVyYXRvcnMua2V5c1xuICAgICwgYXJyYXlFbnRyaWVzICAgICAgICA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXNcbiAgICAsIGFycmF5TGFzdEluZGV4T2YgICAgPSBBcnJheVByb3RvLmxhc3RJbmRleE9mXG4gICAgLCBhcnJheVJlZHVjZSAgICAgICAgID0gQXJyYXlQcm90by5yZWR1Y2VcbiAgICAsIGFycmF5UmVkdWNlUmlnaHQgICAgPSBBcnJheVByb3RvLnJlZHVjZVJpZ2h0XG4gICAgLCBhcnJheUpvaW4gICAgICAgICAgID0gQXJyYXlQcm90by5qb2luXG4gICAgLCBhcnJheVNvcnQgICAgICAgICAgID0gQXJyYXlQcm90by5zb3J0XG4gICAgLCBhcnJheVNsaWNlICAgICAgICAgID0gQXJyYXlQcm90by5zbGljZVxuICAgICwgYXJyYXlUb1N0cmluZyAgICAgICA9IEFycmF5UHJvdG8udG9TdHJpbmdcbiAgICAsIGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBBcnJheVByb3RvLnRvTG9jYWxlU3RyaW5nXG4gICAgLCBJVEVSQVRPUiAgICAgICAgICAgID0gd2tzKCdpdGVyYXRvcicpXG4gICAgLCBUQUcgICAgICAgICAgICAgICAgID0gd2tzKCd0b1N0cmluZ1RhZycpXG4gICAgLCBUWVBFRF9DT05TVFJVQ1RPUiAgID0gdWlkKCd0eXBlZF9jb25zdHJ1Y3RvcicpXG4gICAgLCBERUZfQ09OU1RSVUNUT1IgICAgID0gdWlkKCdkZWZfY29uc3RydWN0b3InKVxuICAgICwgQUxMX0NPTlNUUlVDVE9SUyAgICA9ICR0eXBlZC5DT05TVFJcbiAgICAsIFRZUEVEX0FSUkFZICAgICAgICAgPSAkdHlwZWQuVFlQRURcbiAgICAsIFZJRVcgICAgICAgICAgICAgICAgPSAkdHlwZWQuVklFV1xuICAgICwgV1JPTkdfTEVOR1RIICAgICAgICA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uKE8sIGxlbmd0aCl7XG4gICAgcmV0dXJuIGFsbG9jYXRlKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsZW5ndGgpO1xuICB9KTtcblxuICB2YXIgTElUVExFX0VORElBTiA9IGZhaWxzKGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG5ldyBVaW50MTZBcnJheShbMV0pLmJ1ZmZlcilbMF0gPT09IDE7XG4gIH0pO1xuXG4gIHZhciBGT1JDRURfU0VUID0gISFVaW50OEFycmF5ICYmICEhVWludDhBcnJheVtQUk9UT1RZUEVdLnNldCAmJiBmYWlscyhmdW5jdGlvbigpe1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciBzdHJpY3RUb0xlbmd0aCA9IGZ1bmN0aW9uKGl0LCBTQU1FKXtcbiAgICBpZihpdCA9PT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHZhciBudW1iZXIgPSAraXRcbiAgICAgICwgbGVuZ3RoID0gdG9MZW5ndGgoaXQpO1xuICAgIGlmKFNBTUUgJiYgIXNhbWUobnVtYmVyLCBsZW5ndGgpKXRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9O1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uKGl0LCBCWVRFUyl7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihpdCk7XG4gICAgaWYob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUyl0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfTtcblxuICB2YXIgdmFsaWRhdGUgPSBmdW5jdGlvbihpdCl7XG4gICAgaWYoaXNPYmplY3QoaXQpICYmIFRZUEVEX0FSUkFZIGluIGl0KXJldHVybiBpdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IScpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uKEMsIGxlbmd0aCl7XG4gICAgaWYoIShpc09iamVjdChDKSAmJiBUWVBFRF9DT05TVFJVQ1RPUiBpbiBDKSl7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uKE8sIGxpc3Qpe1xuICAgIHJldHVybiBmcm9tTGlzdChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGlzdCk7XG4gIH07XG5cbiAgdmFyIGZyb21MaXN0ID0gZnVuY3Rpb24oQywgbGlzdCl7XG4gICAgdmFyIGluZGV4ICA9IDBcbiAgICAgICwgbGVuZ3RoID0gbGlzdC5sZW5ndGhcbiAgICAgICwgcmVzdWx0ID0gYWxsb2NhdGUoQywgbGVuZ3RoKTtcbiAgICB3aGlsZShsZW5ndGggPiBpbmRleClyZXN1bHRbaW5kZXhdID0gbGlzdFtpbmRleCsrXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbihpdCwga2V5LCBpbnRlcm5hbCl7XG4gICAgZFAoaXQsIGtleSwge2dldDogZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9fSk7XG4gIH07XG5cbiAgdmFyICRmcm9tID0gZnVuY3Rpb24gZnJvbShzb3VyY2UgLyosIG1hcGZuLCB0aGlzQXJnICovKXtcbiAgICB2YXIgTyAgICAgICA9IHRvT2JqZWN0KHNvdXJjZSlcbiAgICAgICwgYUxlbiAgICA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgICwgbWFwZm4gICA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkXG4gICAgICAsIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAsIGl0ZXJGbiAgPSBnZXRJdGVyRm4oTylcbiAgICAgICwgaSwgbGVuZ3RoLCB2YWx1ZXMsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSl7XG4gICAgICBmb3IoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgdmFsdWVzID0gW10sIGkgPSAwOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGkrKyl7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZihtYXBwaW5nICYmIGFMZW4gPiAyKW1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgIGZvcihpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspe1xuICAgICAgcmVzdWx0W2ldID0gbWFwcGluZyA/IG1hcGZuKE9baV0sIGkpIDogT1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgJG9mID0gZnVuY3Rpb24gb2YoLyouLi5pdGVtcyovKXtcbiAgICB2YXIgaW5kZXggID0gMFxuICAgICAgLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAsIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7XG4gICAgd2hpbGUobGVuZ3RoID4gaW5kZXgpcmVzdWx0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIGlPUyBTYWZhcmkgNi54IGZhaWxzIGhlcmVcbiAgdmFyIFRPX0xPQ0FMRV9CVUcgPSAhIVVpbnQ4QXJyYXkgJiYgZmFpbHMoZnVuY3Rpb24oKXsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCl7XG4gICAgcmV0dXJuIGFycmF5VG9Mb2NhbGVTdHJpbmcuYXBwbHkoVE9fTE9DQUxFX0JVRyA/IGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSkgOiB2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgfTtcblxuICB2YXIgcHJvdG8gPSB7XG4gICAgY29weVdpdGhpbjogZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0IC8qLCBlbmQgKi8pe1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiwgdGhpc0FyZyAqLyl7XG4gICAgICByZXR1cm4gYXJyYXlFdmVyeSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmlsbDogZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiwgc3RhcnQsIGVuZCAqLyl7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUZpbGwuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qLCB0aGlzQXJnICovKXtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiwgdGhpc0FyZyAqLyl7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kKHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiwgdGhpc0FyZyAqLyl7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kSW5kZXgodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qLCB0aGlzQXJnICovKXtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qLCBmcm9tSW5kZXggKi8pe1xuICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZih2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyosIGZyb21JbmRleCAqLyl7XG4gICAgICByZXR1cm4gYXJyYXlJbmNsdWRlcyh2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlKb2luLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyosIGZyb21JbmRleCAqLyl7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUxhc3RJbmRleE9mLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbWFwOiBmdW5jdGlvbiBtYXAobWFwZm4gLyosIHRoaXNBcmcgKi8pe1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qLCBpbml0aWFsVmFsdWUgKi8peyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiwgaW5pdGlhbFZhbHVlICovKXsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlUmlnaHQuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCl7XG4gICAgICB2YXIgdGhhdCAgID0gdGhpc1xuICAgICAgICAsIGxlbmd0aCA9IHZhbGlkYXRlKHRoYXQpLmxlbmd0aFxuICAgICAgICAsIG1pZGRsZSA9IE1hdGguZmxvb3IobGVuZ3RoIC8gMilcbiAgICAgICAgLCBpbmRleCAgPSAwXG4gICAgICAgICwgdmFsdWU7XG4gICAgICB3aGlsZShpbmRleCA8IG1pZGRsZSl7XG4gICAgICAgIHZhbHVlICAgICAgICAgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gID0gdmFsdWU7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH0sXG4gICAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qLCB0aGlzQXJnICovKXtcbiAgICAgIHJldHVybiBhcnJheVNvbWUodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKXtcbiAgICAgIHJldHVybiBhcnJheVNvcnQuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgY29tcGFyZWZuKTtcbiAgICB9LFxuICAgIHN1YmFycmF5OiBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKXtcbiAgICAgIHZhciBPICAgICAgPSB2YWxpZGF0ZSh0aGlzKVxuICAgICAgICAsIGxlbmd0aCA9IE8ubGVuZ3RoXG4gICAgICAgICwgJGJlZ2luID0gdG9JbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pKShcbiAgICAgICAgTy5idWZmZXIsXG4gICAgICAgIE8uYnl0ZU9mZnNldCArICRiZWdpbiAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW5kZXgoZW5kLCBsZW5ndGgpKSAtICRiZWdpbilcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIHZhciAkc2xpY2UgPSBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKXtcbiAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgc3RhcnQsIGVuZCkpO1xuICB9O1xuXG4gIHZhciAkc2V0ID0gZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiwgb2Zmc2V0ICovKXtcbiAgICB2YWxpZGF0ZSh0aGlzKTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9PZmZzZXQoYXJndW1lbnRzWzFdLCAxKVxuICAgICAgLCBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgICAgLCBzcmMgICAgPSB0b09iamVjdChhcnJheUxpa2UpXG4gICAgICAsIGxlbiAgICA9IHRvTGVuZ3RoKHNyYy5sZW5ndGgpXG4gICAgICAsIGluZGV4ICA9IDA7XG4gICAgaWYobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZShpbmRleCA8IGxlbil0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbiAgfTtcblxuICB2YXIgJGl0ZXJhdG9ycyA9IHtcbiAgICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCl7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpe1xuICAgICAgcmV0dXJuIGFycmF5S2V5cy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKCl7XG4gICAgICByZXR1cm4gYXJyYXlWYWx1ZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc1RBSW5kZXggPSBmdW5jdGlvbih0YXJnZXQsIGtleSl7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHRhcmdldClcbiAgICAgICYmIHRhcmdldFtUWVBFRF9BUlJBWV1cbiAgICAgICYmIHR5cGVvZiBrZXkgIT0gJ3N5bWJvbCdcbiAgICAgICYmIGtleSBpbiB0YXJnZXRcbiAgICAgICYmIFN0cmluZygra2V5KSA9PSBTdHJpbmcoa2V5KTtcbiAgfTtcbiAgdmFyICRnZXREZXNjID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KXtcbiAgICByZXR1cm4gaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgID8gcHJvcGVydHlEZXNjKDIsIHRhcmdldFtrZXldKVxuICAgICAgOiBnT1BEKHRhcmdldCwga2V5KTtcbiAgfTtcbiAgdmFyICRzZXREZXNjID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2Mpe1xuICAgIGlmKGlzVEFJbmRleCh0YXJnZXQsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpXG4gICAgICAmJiBpc09iamVjdChkZXNjKVxuICAgICAgJiYgaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgICAmJiAhaGFzKGRlc2MsICdnZXQnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnc2V0JylcbiAgICAgIC8vIFRPRE86IGFkZCB2YWxpZGF0aW9uIGRlc2NyaXB0b3Igdy9vIGNhbGxpbmcgYWNjZXNzb3JzXG4gICAgICAmJiAhZGVzYy5jb25maWd1cmFibGVcbiAgICAgICYmICghaGFzKGRlc2MsICd3cml0YWJsZScpIHx8IGRlc2Mud3JpdGFibGUpXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnZW51bWVyYWJsZScpIHx8IGRlc2MuZW51bWVyYWJsZSlcbiAgICApe1xuICAgICAgdGFyZ2V0W2tleV0gPSBkZXNjLnZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IGVsc2UgcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZighQUxMX0NPTlNUUlVDVE9SUyl7XG4gICAgJEdPUEQuZiA9ICRnZXREZXNjO1xuICAgICREUC5mICAgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogICAgICAgICAgICRzZXREZXNjXG4gIH0pO1xuXG4gIGlmKGZhaWxzKGZ1bmN0aW9uKCl7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKXtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCl7XG4gICAgICByZXR1cm4gYXJyYXlKb2luLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgdmFyICRUeXBlZEFycmF5UHJvdG90eXBlJCA9IHJlZGVmaW5lQWxsKHt9LCBwcm90byk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJGl0ZXJhdG9ycyk7XG4gIGhpZGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBJVEVSQVRPUiwgJGl0ZXJhdG9ycy52YWx1ZXMpO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIHtcbiAgICBzbGljZTogICAgICAgICAgJHNsaWNlLFxuICAgIHNldDogICAgICAgICAgICAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiAgICBmdW5jdGlvbigpeyAvKiBub29wICovIH0sXG4gICAgdG9TdHJpbmc6ICAgICAgIGFycmF5VG9TdHJpbmcsXG4gICAgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ1xuICB9KTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J1ZmZlcicsICdiJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlT2Zmc2V0JywgJ28nKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVMZW5ndGgnLCAnbCcpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnbGVuZ3RoJywgJ2UnKTtcbiAgZFAoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBUQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzW1RZUEVEX0FSUkFZXTsgfVxuICB9KTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpe1xuICAgIENMQU1QRUQgPSAhIUNMQU1QRUQ7XG4gICAgdmFyIE5BTUUgICAgICAgPSBLRVkgKyAoQ0xBTVBFRCA/ICdDbGFtcGVkJyA6ICcnKSArICdBcnJheSdcbiAgICAgICwgSVNOVF9VSU5UOCA9IE5BTUUgIT0gJ1VpbnQ4QXJyYXknXG4gICAgICAsIEdFVFRFUiAgICAgPSAnZ2V0JyArIEtFWVxuICAgICAgLCBTRVRURVIgICAgID0gJ3NldCcgKyBLRVlcbiAgICAgICwgVHlwZWRBcnJheSA9IGdsb2JhbFtOQU1FXVxuICAgICAgLCBCYXNlICAgICAgID0gVHlwZWRBcnJheSB8fCB7fVxuICAgICAgLCBUQUMgICAgICAgID0gVHlwZWRBcnJheSAmJiBnZXRQcm90b3R5cGVPZihUeXBlZEFycmF5KVxuICAgICAgLCBGT1JDRUQgICAgID0gIVR5cGVkQXJyYXkgfHwgISR0eXBlZC5BQlZcbiAgICAgICwgTyAgICAgICAgICA9IHt9XG4gICAgICAsIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBUeXBlZEFycmF5ICYmIFR5cGVkQXJyYXlbUFJPVE9UWVBFXTtcbiAgICB2YXIgZ2V0dGVyID0gZnVuY3Rpb24odGhhdCwgaW5kZXgpe1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uKHRoYXQsIGluZGV4LCB2YWx1ZSl7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICBpZihDTEFNUEVEKXZhbHVlID0gKHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSkpIDwgMCA/IDAgOiB2YWx1ZSA+IDB4ZmYgPyAweGZmIDogdmFsdWUgJiAweGZmO1xuICAgICAgZGF0YS52W1NFVFRFUl0oaW5kZXggKiBCWVRFUyArIGRhdGEubywgdmFsdWUsIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIGFkZEVsZW1lbnQgPSBmdW5jdGlvbih0aGF0LCBpbmRleCl7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpe1xuICAgICAgICAgIHJldHVybiBzZXR0ZXIodGhpcywgaW5kZXgsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBpZihGT1JDRUQpe1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24odGhhdCwgZGF0YSwgJG9mZnNldCwgJGxlbmd0aCl7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSwgJ19kJyk7XG4gICAgICAgIHZhciBpbmRleCAgPSAwXG4gICAgICAgICAgLCBvZmZzZXQgPSAwXG4gICAgICAgICAgLCBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmKCFpc09iamVjdChkYXRhKSl7XG4gICAgICAgICAgbGVuZ3RoICAgICA9IHN0cmljdFRvTGVuZ3RoKGRhdGEsIHRydWUpXG4gICAgICAgICAgYnl0ZUxlbmd0aCA9IGxlbmd0aCAqIEJZVEVTO1xuICAgICAgICAgIGJ1ZmZlciAgICAgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUil7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBvZmZzZXQgPSB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIGlmKCRsZW4gJSBCWVRFUyl0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmKGJ5dGVMZW5ndGggPCAwKXRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZihieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbil0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxlbmd0aCA9IGJ5dGVMZW5ndGggLyBCWVRFUztcbiAgICAgICAgfSBlbHNlIGlmKFRZUEVEX0FSUkFZIGluIGRhdGEpe1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUoaW5kZXggPCBsZW5ndGgpYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IGNyZWF0ZSgkVHlwZWRBcnJheVByb3RvdHlwZSQpO1xuICAgICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5KTtcbiAgICB9IGVsc2UgaWYoISRpdGVyRGV0ZWN0KGZ1bmN0aW9uKGl0ZXIpe1xuICAgICAgLy8gVjggd29ya3Mgd2l0aCBpdGVyYXRvcnMsIGJ1dCBmYWlscyBpbiBtYW55IG90aGVyIGNhc2VzXG4gICAgICAvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDU1MlxuICAgICAgbmV3IFR5cGVkQXJyYXkobnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSl7XG4gICAgICBUeXBlZEFycmF5ID0gd3JhcHBlcihmdW5jdGlvbih0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKXtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZighaXNPYmplY3QoZGF0YSkpcmV0dXJuIG5ldyBCYXNlKHN0cmljdFRvTGVuZ3RoKGRhdGEsIElTTlRfVUlOVDgpKTtcbiAgICAgICAgaWYoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUil7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZihUWVBFRF9BUlJBWSBpbiBkYXRhKXJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFycmF5Rm9yRWFjaChUQUMgIT09IEZ1bmN0aW9uLnByb3RvdHlwZSA/IGdPUE4oQmFzZSkuY29uY2F0KGdPUE4oVEFDKSkgOiBnT1BOKEJhc2UpLCBmdW5jdGlvbihrZXkpe1xuICAgICAgICBpZighKGtleSBpbiBUeXBlZEFycmF5KSloaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmKCFMSUJSQVJZKVR5cGVkQXJyYXlQcm90b3R5cGUuY29uc3RydWN0b3IgPSBUeXBlZEFycmF5O1xuICAgIH1cbiAgICB2YXIgJG5hdGl2ZUl0ZXJhdG9yICAgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXVxuICAgICAgLCBDT1JSRUNUX0lURVJfTkFNRSA9ICEhJG5hdGl2ZUl0ZXJhdG9yICYmICgkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSAndmFsdWVzJyB8fCAkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSB1bmRlZmluZWQpXG4gICAgICAsICRpdGVyYXRvciAgICAgICAgID0gJGl0ZXJhdG9ycy52YWx1ZXM7XG4gICAgaGlkZShUeXBlZEFycmF5LCBUWVBFRF9DT05TVFJVQ1RPUiwgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBUWVBFRF9BUlJBWSwgTkFNRSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIERFRl9DT05TVFJVQ1RPUiwgVHlwZWRBcnJheSk7XG5cbiAgICBpZihDTEFNUEVEID8gbmV3IFR5cGVkQXJyYXkoMSlbVEFHXSAhPSBOQU1FIDogIShUQUcgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpe1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKXsgcmV0dXJuIE5BTUU7IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9bTkFNRV0gPSBUeXBlZEFycmF5O1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoVHlwZWRBcnJheSAhPSBCYXNlKSwgTyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUywgTkFNRSwge1xuICAgICAgQllURVNfUEVSX0VMRU1FTlQ6IEJZVEVTLFxuICAgICAgZnJvbTogJGZyb20sXG4gICAgICBvZjogJG9mXG4gICAgfSk7XG5cbiAgICBpZighKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKWhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgQllURVNfUEVSX0VMRU1FTlQsIEJZVEVTKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QLCBOQU1FLCBwcm90byk7XG5cbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRURfU0VULCBOQU1FLCB7c2V0OiAkc2V0fSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nICE9IGFycmF5VG9TdHJpbmcpLCBOQU1FLCB7dG9TdHJpbmc6IGFycmF5VG9TdHJpbmd9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24oKXtcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEpLnNsaWNlKCk7XG4gICAgfSksIE5BTUUsIHtzbGljZTogJHNsaWNlfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbigpe1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKVxuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbigpe1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7dG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ30pO1xuXG4gICAgSXRlcmF0b3JzW05BTUVdID0gQ09SUkVDVF9JVEVSX05BTUUgPyAkbmF0aXZlSXRlcmF0b3IgOiAkaXRlcmF0b3I7XG4gICAgaWYoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKWhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgSVRFUkFUT1IsICRpdGVyYXRvcik7XG4gIH07XG59IGVsc2UgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpeyAvKiBlbXB0eSAqLyB9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWFycmF5LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWFycmF5LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_typed-buffer.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , DESCRIPTORS = __webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\")\n , LIBRARY = __webpack_require__(\"./node_modules/core-js/modules/_library.js\")\n , $typed = __webpack_require__(\"./node_modules/core-js/modules/_typed.js\")\n , hide = __webpack_require__(\"./node_modules/core-js/modules/_hide.js\")\n , redefineAll = __webpack_require__(\"./node_modules/core-js/modules/_redefine-all.js\")\n , fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")\n , anInstance = __webpack_require__(\"./node_modules/core-js/modules/_an-instance.js\")\n , toInteger = __webpack_require__(\"./node_modules/core-js/modules/_to-integer.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\")\n , gOPN = __webpack_require__(\"./node_modules/core-js/modules/_object-gopn.js\").f\n , dP = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\").f\n , arrayFill = __webpack_require__(\"./node_modules/core-js/modules/_array-fill.js\")\n , setToStringTag = __webpack_require__(\"./node_modules/core-js/modules/_set-to-string-tag.js\")\n , ARRAY_BUFFER = 'ArrayBuffer'\n , DATA_VIEW = 'DataView'\n , PROTOTYPE = 'prototype'\n , WRONG_LENGTH = 'Wrong length!'\n , WRONG_INDEX = 'Wrong index!'\n , $ArrayBuffer = global[ARRAY_BUFFER]\n , $DataView = global[DATA_VIEW]\n , Math = global.Math\n , RangeError = global.RangeError\n , Infinity = global.Infinity\n , BaseBuffer = $ArrayBuffer\n , abs = Math.abs\n , pow = Math.pow\n , floor = Math.floor\n , log = Math.log\n , LN2 = Math.LN2\n , BUFFER = 'buffer'\n , BYTE_LENGTH = 'byteLength'\n , BYTE_OFFSET = 'byteOffset'\n , $BUFFER = DESCRIPTORS ? '_b' : BUFFER\n , $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH\n , $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nvar packIEEE754 = function(value, mLen, nBytes){\n var buffer = Array(nBytes)\n , eLen = nBytes * 8 - mLen - 1\n , eMax = (1 << eLen) - 1\n , eBias = eMax >> 1\n , rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0\n , i = 0\n , s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0\n , e, m, c;\n value = abs(value)\n if(value != value || value === Infinity){\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if(value * (c = pow(2, -e)) < 1){\n e--;\n c *= 2;\n }\n if(e + eBias >= 1){\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if(value * c >= 2){\n e++;\n c /= 2;\n }\n if(e + eBias >= eMax){\n m = 0;\n e = eMax;\n } else if(e + eBias >= 1){\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for(; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for(; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n};\nvar unpackIEEE754 = function(buffer, mLen, nBytes){\n var eLen = nBytes * 8 - mLen - 1\n , eMax = (1 << eLen) - 1\n , eBias = eMax >> 1\n , nBits = eLen - 7\n , i = nBytes - 1\n , s = buffer[i--]\n , e = s & 127\n , m;\n s >>= 7;\n for(; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for(; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if(e === 0){\n e = 1 - eBias;\n } else if(e === eMax){\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n};\n\nvar unpackI32 = function(bytes){\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n};\nvar packI8 = function(it){\n return [it & 0xff];\n};\nvar packI16 = function(it){\n return [it & 0xff, it >> 8 & 0xff];\n};\nvar packI32 = function(it){\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n};\nvar packF64 = function(it){\n return packIEEE754(it, 52, 8);\n};\nvar packF32 = function(it){\n return packIEEE754(it, 23, 4);\n};\n\nvar addGetter = function(C, key, internal){\n dP(C[PROTOTYPE], key, {get: function(){ return this[internal]; }});\n};\n\nvar get = function(view, bytes, index, isLittleEndian){\n var numIndex = +index\n , intIndex = toInteger(numIndex);\n if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b\n , start = intIndex + view[$OFFSET]\n , pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n};\nvar set = function(view, bytes, index, conversion, value, isLittleEndian){\n var numIndex = +index\n , intIndex = toInteger(numIndex);\n if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b\n , start = intIndex + view[$OFFSET]\n , pack = conversion(+value);\n for(var i = 0; i < bytes; i++)store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n};\n\nvar validateArrayBufferArguments = function(that, length){\n anInstance(that, $ArrayBuffer, ARRAY_BUFFER);\n var numberLength = +length\n , byteLength = toLength(numberLength);\n if(numberLength != byteLength)throw RangeError(WRONG_LENGTH);\n return byteLength;\n};\n\nif(!$typed.ABV){\n $ArrayBuffer = function ArrayBuffer(length){\n var byteLength = validateArrayBufferArguments(this, length);\n this._b = arrayFill.call(Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength){\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH]\n , offset = toInteger(byteOffset);\n if(offset < 0 || offset > bufferLength)throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if(offset + byteLength > bufferLength)throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if(DESCRIPTORS){\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset){\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset){\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /*, littleEndian */){\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /*, littleEndian */){\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /*, littleEndian */){\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /*, littleEndian */){\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /*, littleEndian */){\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /*, littleEndian */){\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value){\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value){\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /*, littleEndian */){\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /*, littleEndian */){\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /*, littleEndian */){\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /*, littleEndian */){\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /*, littleEndian */){\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /*, littleEndian */){\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if(!fails(function(){\n new $ArrayBuffer; // eslint-disable-line no-new\n }) || !fails(function(){\n new $ArrayBuffer(.5); // eslint-disable-line no-new\n })){\n $ArrayBuffer = function ArrayBuffer(length){\n return new BaseBuffer(validateArrayBufferArguments(this, length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for(var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j; ){\n if(!((key = keys[j++]) in $ArrayBuffer))hide($ArrayBuffer, key, BaseBuffer[key]);\n };\n if(!LIBRARY)ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2))\n , $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if(view.getInt8(0) || !view.getInt8(1))redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value){\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value){\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1idWZmZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzPzEyOGUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBERVNDUklQVE9SUyAgICA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJylcbiAgLCBMSUJSQVJZICAgICAgICA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKVxuICAsICR0eXBlZCAgICAgICAgID0gcmVxdWlyZSgnLi9fdHlwZWQnKVxuICAsIGhpZGUgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgcmVkZWZpbmVBbGwgICAgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKVxuICAsIGZhaWxzICAgICAgICAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKVxuICAsIGFuSW5zdGFuY2UgICAgID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKVxuICAsIHRvSW50ZWdlciAgICAgID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpXG4gICwgdG9MZW5ndGggICAgICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGdPUE4gICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mXG4gICwgZFAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mXG4gICwgYXJyYXlGaWxsICAgICAgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCBBUlJBWV9CVUZGRVIgICA9ICdBcnJheUJ1ZmZlcidcbiAgLCBEQVRBX1ZJRVcgICAgICA9ICdEYXRhVmlldydcbiAgLCBQUk9UT1RZUEUgICAgICA9ICdwcm90b3R5cGUnXG4gICwgV1JPTkdfTEVOR1RIICAgPSAnV3JvbmcgbGVuZ3RoISdcbiAgLCBXUk9OR19JTkRFWCAgICA9ICdXcm9uZyBpbmRleCEnXG4gICwgJEFycmF5QnVmZmVyICAgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXVxuICAsICREYXRhVmlldyAgICAgID0gZ2xvYmFsW0RBVEFfVklFV11cbiAgLCBNYXRoICAgICAgICAgICA9IGdsb2JhbC5NYXRoXG4gICwgUmFuZ2VFcnJvciAgICAgPSBnbG9iYWwuUmFuZ2VFcnJvclxuICAsIEluZmluaXR5ICAgICAgID0gZ2xvYmFsLkluZmluaXR5XG4gICwgQmFzZUJ1ZmZlciAgICAgPSAkQXJyYXlCdWZmZXJcbiAgLCBhYnMgICAgICAgICAgICA9IE1hdGguYWJzXG4gICwgcG93ICAgICAgICAgICAgPSBNYXRoLnBvd1xuICAsIGZsb29yICAgICAgICAgID0gTWF0aC5mbG9vclxuICAsIGxvZyAgICAgICAgICAgID0gTWF0aC5sb2dcbiAgLCBMTjIgICAgICAgICAgICA9IE1hdGguTE4yXG4gICwgQlVGRkVSICAgICAgICAgPSAnYnVmZmVyJ1xuICAsIEJZVEVfTEVOR1RIICAgID0gJ2J5dGVMZW5ndGgnXG4gICwgQllURV9PRkZTRVQgICAgPSAnYnl0ZU9mZnNldCdcbiAgLCAkQlVGRkVSICAgICAgICA9IERFU0NSSVBUT1JTID8gJ19iJyA6IEJVRkZFUlxuICAsICRMRU5HVEggICAgICAgID0gREVTQ1JJUFRPUlMgPyAnX2wnIDogQllURV9MRU5HVEhcbiAgLCAkT0ZGU0VUICAgICAgICA9IERFU0NSSVBUT1JTID8gJ19vJyA6IEJZVEVfT0ZGU0VUO1xuXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxudmFyIHBhY2tJRUVFNzU0ID0gZnVuY3Rpb24odmFsdWUsIG1MZW4sIG5CeXRlcyl7XG4gIHZhciBidWZmZXIgPSBBcnJheShuQnl0ZXMpXG4gICAgLCBlTGVuICAgPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDFcbiAgICAsIGVNYXggICA9ICgxIDw8IGVMZW4pIC0gMVxuICAgICwgZUJpYXMgID0gZU1heCA+PiAxXG4gICAgLCBydCAgICAgPSBtTGVuID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCBzICAgICAgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwXG4gICAgLCBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSlcbiAgaWYodmFsdWUgIT0gdmFsdWUgfHwgdmFsdWUgPT09IEluZmluaXR5KXtcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYodmFsdWUgKiAoYyA9IHBvdygyLCAtZSkpIDwgMSl7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmKGUgKyBlQmlhcyA+PSAxKXtcbiAgICAgIHZhbHVlICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYodmFsdWUgKiBjID49IDIpe1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZihlICsgZUJpYXMgPj0gZU1heCl7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZihlICsgZUJpYXMgPj0gMSl7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IGUgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn07XG52YXIgdW5wYWNrSUVFRTc1NCA9IGZ1bmN0aW9uKGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKXtcbiAgdmFyIGVMZW4gID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gICAgLCBlTWF4ICA9ICgxIDw8IGVMZW4pIC0gMVxuICAgICwgZUJpYXMgPSBlTWF4ID4+IDFcbiAgICAsIG5CaXRzID0gZUxlbiAtIDdcbiAgICAsIGkgICAgID0gbkJ5dGVzIC0gMVxuICAgICwgcyAgICAgPSBidWZmZXJbaS0tXVxuICAgICwgZSAgICAgPSBzICYgMTI3XG4gICAgLCBtO1xuICBzID4+PSA3O1xuICBmb3IoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvcig7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIGlmKGUgPT09IDApe1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZihlID09PSBlTWF4KXtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn07XG5cbnZhciB1bnBhY2tJMzIgPSBmdW5jdGlvbihieXRlcyl7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufTtcbnZhciBwYWNrSTggPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn07XG52YXIgcGFja0kxNiA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn07XG52YXIgcGFja0kzMiA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59O1xudmFyIHBhY2tGNjQgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufTtcbnZhciBwYWNrRjMyID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn07XG5cbnZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbihDLCBrZXksIGludGVybmFsKXtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfX0pO1xufTtcblxudmFyIGdldCA9IGZ1bmN0aW9uKHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pe1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXhcbiAgICAsIGludEluZGV4ID0gdG9JbnRlZ2VyKG51bUluZGV4KTtcbiAgaWYobnVtSW5kZXggIT0gaW50SW5kZXggfHwgaW50SW5kZXggPCAwIHx8IGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKXRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iXG4gICAgLCBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXVxuICAgICwgcGFjayAgPSBzdG9yZS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcyk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn07XG52YXIgc2V0ID0gZnVuY3Rpb24odmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pe1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXhcbiAgICAsIGludEluZGV4ID0gdG9JbnRlZ2VyKG51bUluZGV4KTtcbiAgaWYobnVtSW5kZXggIT0gaW50SW5kZXggfHwgaW50SW5kZXggPCAwIHx8IGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKXRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iXG4gICAgLCBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXVxuICAgICwgcGFjayAgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKXN0b3JlW3N0YXJ0ICsgaV0gPSBwYWNrW2lzTGl0dGxlRW5kaWFuID8gaSA6IGJ5dGVzIC0gaSAtIDFdO1xufTtcblxudmFyIHZhbGlkYXRlQXJyYXlCdWZmZXJBcmd1bWVudHMgPSBmdW5jdGlvbih0aGF0LCBsZW5ndGgpe1xuICBhbkluc3RhbmNlKHRoYXQsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgdmFyIG51bWJlckxlbmd0aCA9ICtsZW5ndGhcbiAgICAsIGJ5dGVMZW5ndGggICA9IHRvTGVuZ3RoKG51bWJlckxlbmd0aCk7XG4gIGlmKG51bWJlckxlbmd0aCAhPSBieXRlTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgcmV0dXJuIGJ5dGVMZW5ndGg7XG59O1xuXG5pZighJHR5cGVkLkFCVil7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCl7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB2YWxpZGF0ZUFycmF5QnVmZmVyQXJndW1lbnRzKHRoaXMsIGxlbmd0aCk7XG4gICAgdGhpcy5fYiAgICAgICA9IGFycmF5RmlsbC5jYWxsKEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpe1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXVxuICAgICAgLCBvZmZzZXQgICAgICAgPSB0b0ludGVnZXIoYnl0ZU9mZnNldCk7XG4gICAgaWYob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZihvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYoREVTQ1JJUFRPUlMpe1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCVUZGRVIsICdfYicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX09GRlNFVCwgJ19vJyk7XG4gIH1cblxuICByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCl7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpe1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qLCBsaXR0bGVFbmRpYW4gKi8pe1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qLCBsaXR0bGVFbmRpYW4gKi8pe1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyosIGxpdHRsZUVuZGlhbiAqLyl7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyosIGxpdHRsZUVuZGlhbiAqLyl7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiwgbGl0dGxlRW5kaWFuICovKXtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCAyMywgNCk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyosIGxpdHRsZUVuZGlhbiAqLyl7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSl7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpe1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qLCBsaXR0bGVFbmRpYW4gKi8pe1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyosIGxpdHRsZUVuZGlhbiAqLyl7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyosIGxpdHRsZUVuZGlhbiAqLyl7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiwgbGl0dGxlRW5kaWFuICovKXtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyosIGxpdHRsZUVuZGlhbiAqLyl7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qLCBsaXR0bGVFbmRpYW4gKi8pe1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZighZmFpbHMoZnVuY3Rpb24oKXtcbiAgICBuZXcgJEFycmF5QnVmZmVyOyAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uKCl7XG4gICAgbmV3ICRBcnJheUJ1ZmZlciguNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pKXtcbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpe1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHZhbGlkYXRlQXJyYXlCdWZmZXJBcmd1bWVudHModGhpcywgbGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvcih2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgKXtcbiAgICAgIGlmKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSloaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH07XG4gICAgaWYoIUxJQlJBUlkpQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpXG4gICAgLCAkc2V0SW50OCA9ICREYXRhVmlld1tQUk9UT1RZUEVdLnNldEludDg7XG4gIHZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZih2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSlyZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpe1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpe1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL190eXBlZC1idWZmZXIuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_typed.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , hide = __webpack_require__(\"./node_modules/core-js/modules/_hide.js\")\n , uid = __webpack_require__(\"./node_modules/core-js/modules/_uid.js\")\n , TYPED = uid('typed_array')\n , VIEW = uid('view')\n , ABV = !!(global.ArrayBuffer && global.DataView)\n , CONSTR = ABV\n , i = 0, l = 9, Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile(i < l){\n if(Typed = global[TypedArrayConstructors[i++]]){\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcz9jMjZhIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGhpZGUgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIHVpZCAgICA9IHJlcXVpcmUoJy4vX3VpZCcpXG4gICwgVFlQRUQgID0gdWlkKCd0eXBlZF9hcnJheScpXG4gICwgVklFVyAgID0gdWlkKCd2aWV3JylcbiAgLCBBQlYgICAgPSAhIShnbG9iYWwuQXJyYXlCdWZmZXIgJiYgZ2xvYmFsLkRhdGFWaWV3KVxuICAsIENPTlNUUiA9IEFCVlxuICAsIGkgPSAwLCBsID0gOSwgVHlwZWQ7XG5cbnZhciBUeXBlZEFycmF5Q29uc3RydWN0b3JzID0gKFxuICAnSW50OEFycmF5LFVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXknXG4pLnNwbGl0KCcsJyk7XG5cbndoaWxlKGkgPCBsKXtcbiAgaWYoVHlwZWQgPSBnbG9iYWxbVHlwZWRBcnJheUNvbnN0cnVjdG9yc1tpKytdXSl7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogICAgQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6ICBUWVBFRCxcbiAgVklFVzogICBWSUVXXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_uid.js": +/***/ (function(module, exports) { + +eval("var id = 0\n , px = Math.random();\nmodule.exports = function(key){\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191aWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzPzM3ODciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGlkID0gMFxuICAsIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_wks-define.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , core = __webpack_require__(\"./node_modules/core-js/modules/_core.js\")\n , LIBRARY = __webpack_require__(\"./node_modules/core-js/modules/_library.js\")\n , wksExt = __webpack_require__(\"./node_modules/core-js/modules/_wks-ext.js\")\n , defineProperty = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\").f;\nmodule.exports = function(name){\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZGVmaW5lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX3drcy1kZWZpbmUuanM/ODgzNCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsICAgICAgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGNvcmUgICAgICAgICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgTElCUkFSWSAgICAgICAgPSByZXF1aXJlKCcuL19saWJyYXJ5JylcbiAgLCB3a3NFeHQgICAgICAgICA9IHJlcXVpcmUoJy4vX3drcy1leHQnKVxuICAsIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSl7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwge3ZhbHVlOiB3a3NFeHQuZihuYW1lKX0pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL193a3MtZGVmaW5lLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1kZWZpbmUuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_wks-ext.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("exports.f = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\");//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZXh0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvX3drcy1leHQuanM/OWY1YiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSByZXF1aXJlKCcuL193a3MnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL193a3MtZXh0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1leHQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/_wks.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var store = __webpack_require__(\"./node_modules/core-js/modules/_shared.js\")('wks')\n , uid = __webpack_require__(\"./node_modules/core-js/modules/_uid.js\")\n , Symbol = __webpack_require__(\"./node_modules/core-js/modules/_global.js\").Symbol\n , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzPzJlOWMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHN0b3JlICAgICAgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJylcbiAgLCB1aWQgICAgICAgID0gcmVxdWlyZSgnLi9fdWlkJylcbiAgLCBTeW1ib2wgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sXG4gICwgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lKXtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/core.get-iterator-method.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var classof = __webpack_require__(\"./node_modules/core-js/modules/_classof.js\")\n , ITERATOR = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('iterator')\n , Iterators = __webpack_require__(\"./node_modules/core-js/modules/_iterators.js\");\nmodule.exports = __webpack_require__(\"./node_modules/core-js/modules/_core.js\").getIteratorMethod = function(it){\n if(it != undefined)return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcz82OTNhIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBjbGFzc29mICAgPSByZXF1aXJlKCcuL19jbGFzc29mJylcbiAgLCBJVEVSQVRPUiAgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKVxuICAsIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbihpdCl7XG4gIGlmKGl0ICE9IHVuZGVmaW5lZClyZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.copy-within.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.P, 'Array', {copyWithin: __webpack_require__(\"./node_modules/core-js/modules/_array-copy-within.js\")});\n\n__webpack_require__(\"./node_modules/core-js/modules/_add-to-unscopables.js\")('copyWithin');//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5jb3B5LXdpdGhpbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5jb3B5LXdpdGhpbi5qcz9mZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdjb3B5V2l0aGluJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.every.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $every = __webpack_require__(\"./node_modules/core-js/modules/_array-methods.js\")(4);\n\n$export($export.P + $export.F * !__webpack_require__(\"./node_modules/core-js/modules/_strict-method.js\")([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */){\n return $every(this, callbackfn, arguments[1]);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcz9lYjZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCAkZXZlcnkgID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pe1xuICAgIHJldHVybiAkZXZlcnkodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.fill.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.P, 'Array', {fill: __webpack_require__(\"./node_modules/core-js/modules/_array-fill.js\")});\n\n__webpack_require__(\"./node_modules/core-js/modules/_add-to-unscopables.js\")('fill');//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbGwuanM/Yzc5NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7ZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWxsLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.filter.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $filter = __webpack_require__(\"./node_modules/core-js/modules/_array-methods.js\")(2);\n\n$export($export.P + $export.F * !__webpack_require__(\"./node_modules/core-js/modules/_strict-method.js\")([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */){\n return $filter(this, callbackfn, arguments[1]);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzP2RjYjUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pe1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbHRlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.find-index.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $find = __webpack_require__(\"./node_modules/core-js/modules/_array-methods.js\")(6)\n , KEY = 'findIndex'\n , forced = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn/*, that = undefined */){\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(\"./node_modules/core-js/modules/_add-to-unscopables.js\")(KEY);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXguanM/N2Y2OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOSBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCAkZmluZCAgID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpXG4gICwgS0VZICAgICA9ICdmaW5kSW5kZXgnXG4gICwgZm9yY2VkICA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYoS0VZIGluIFtdKUFycmF5KDEpW0tFWV0oZnVuY3Rpb24oKXsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgoY2FsbGJhY2tmbi8qLCB0aGF0ID0gdW5kZWZpbmVkICovKXtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.find.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $find = __webpack_require__(\"./node_modules/core-js/modules/_array-methods.js\")(5)\n , KEY = 'find'\n , forced = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn/*, that = undefined */){\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(\"./node_modules/core-js/modules/_add-to-unscopables.js\")(KEY);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQuanM/MGQ2OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgJGZpbmQgICA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KVxuICAsIEtFWSAgICAgPSAnZmluZCdcbiAgLCBmb3JjZWQgID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZihLRVkgaW4gW10pQXJyYXkoMSlbS0VZXShmdW5jdGlvbigpeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4vKiwgdGhhdCA9IHVuZGVmaW5lZCAqLyl7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.for-each.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $forEach = __webpack_require__(\"./node_modules/core-js/modules/_array-methods.js\")(0)\n , STRICT = __webpack_require__(\"./node_modules/core-js/modules/_strict-method.js\")([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */){\n return $forEach(this, callbackfn, arguments[1]);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaC5qcz80ZDkwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgJGZvckVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMClcbiAgLCBTVFJJQ1QgICA9IHJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5mb3JFYWNoLCB0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhU1RSSUNULCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMCAvIDE1LjQuNC4xOCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKXtcbiAgICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.from.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar ctx = __webpack_require__(\"./node_modules/core-js/modules/_ctx.js\")\n , $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , toObject = __webpack_require__(\"./node_modules/core-js/modules/_to-object.js\")\n , call = __webpack_require__(\"./node_modules/core-js/modules/_iter-call.js\")\n , isArrayIter = __webpack_require__(\"./node_modules/core-js/modules/_is-array-iter.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\")\n , createProperty = __webpack_require__(\"./node_modules/core-js/modules/_create-property.js\")\n , getIterFn = __webpack_require__(\"./node_modules/core-js/modules/core.get-iterator-method.js\");\n\n$export($export.S + $export.F * !__webpack_require__(\"./node_modules/core-js/modules/_iter-detect.js\")(function(iter){ Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n var O = toObject(arrayLike)\n , C = typeof this == 'function' ? this : Array\n , aLen = arguments.length\n , mapfn = aLen > 1 ? arguments[1] : undefined\n , mapping = mapfn !== undefined\n , index = 0\n , iterFn = getIterFn(O)\n , length, result, step, iterator;\n if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for(result = new C(length); length > index; index++){\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZyb20uanM/YzU4NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY3R4ICAgICAgICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCB0b09iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgY2FsbCAgICAgICAgICAgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKVxuICAsIGlzQXJyYXlJdGVyICAgID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpXG4gICwgdG9MZW5ndGggICAgICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5JylcbiAgLCBnZXRJdGVyRm4gICAgICA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24oaXRlcil7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UvKiwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQqLyl7XG4gICAgdmFyIE8gICAgICAgPSB0b09iamVjdChhcnJheUxpa2UpXG4gICAgICAsIEMgICAgICAgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5XG4gICAgICAsIGFMZW4gICAgPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAsIG1hcGZuICAgPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICAgLCBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZFxuICAgICAgLCBpbmRleCAgID0gMFxuICAgICAgLCBpdGVyRm4gID0gZ2V0SXRlckZuKE8pXG4gICAgICAsIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZihtYXBwaW5nKW1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpe1xuICAgICAgZm9yKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4Kyspe1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvcihyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKyl7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZyb20uanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.index-of.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $indexOf = __webpack_require__(\"./node_modules/core-js/modules/_array-includes.js\")(false)\n , $native = [].indexOf\n , NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(\"./node_modules/core-js/modules/_strict-method.js\")($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /*, fromIndex = 0 */){\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZi5qcz85OWE3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCAkaW5kZXhPZiAgICAgID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSlcbiAgLCAkbmF0aXZlICAgICAgID0gW10uaW5kZXhPZlxuICAsIE5FR0FUSVZFX1pFUk8gPSAhISRuYXRpdmUgJiYgMSAvIFsxXS5pbmRleE9mKDEsIC0wKSA8IDA7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKE5FR0FUSVZFX1pFUk8gfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjExIC8gMTUuNC40LjE0IEFycmF5LnByb3RvdHlwZS5pbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qLCBmcm9tSW5kZXggPSAwICovKXtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.is-array.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Array', {isArray: __webpack_require__(\"./node_modules/core-js/modules/_is-array.js\")});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheS5qcz85NWQzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5Jywge2lzQXJyYXk6IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyl9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.iterator.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar addToUnscopables = __webpack_require__(\"./node_modules/core-js/modules/_add-to-unscopables.js\")\n , step = __webpack_require__(\"./node_modules/core-js/modules/_iter-step.js\")\n , Iterators = __webpack_require__(\"./node_modules/core-js/modules/_iterators.js\")\n , toIObject = __webpack_require__(\"./node_modules/core-js/modules/_to-iobject.js\");\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(\"./node_modules/core-js/modules/_iter-define.js\")(Array, 'Array', function(iterated, kind){\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , kind = this._k\n , index = this._i++;\n if(!O || index >= O.length){\n this._t = undefined;\n return step(1);\n }\n if(kind == 'keys' )return step(0, index);\n if(kind == 'values')return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcz83MDhiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJylcbiAgLCBzdGVwICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJylcbiAgLCBJdGVyYXRvcnMgICAgICAgID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJylcbiAgLCB0b0lPYmplY3QgICAgICAgID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uKGl0ZXJhdGVkLCBraW5kKXtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbigpe1xuICB2YXIgTyAgICAgPSB0aGlzLl90XG4gICAgLCBraW5kICA9IHRoaXMuX2tcbiAgICAsIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZighTyB8fCBpbmRleCA+PSBPLmxlbmd0aCl7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZihraW5kID09ICdrZXlzJyAgKXJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYoa2luZCA9PSAndmFsdWVzJylyZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.join.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , toIObject = __webpack_require__(\"./node_modules/core-js/modules/_to-iobject.js\")\n , arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (__webpack_require__(\"./node_modules/core-js/modules/_iobject.js\") != Object || !__webpack_require__(\"./node_modules/core-js/modules/_strict-method.js\")(arrayJoin)), 'Array', {\n join: function join(separator){\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5qb2luLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmpvaW4uanM/NmVlYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmpvaW4oc2VwYXJhdG9yKVxudmFyICRleHBvcnQgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgYXJyYXlKb2luID0gW10uam9pbjtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIHN0cmluZ3NcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKHJlcXVpcmUoJy4vX2lvYmplY3QnKSAhPSBPYmplY3QgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcil7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5qb2luLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmpvaW4uanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.last-index-of.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , toIObject = __webpack_require__(\"./node_modules/core-js/modules/_to-iobject.js\")\n , toInteger = __webpack_require__(\"./node_modules/core-js/modules/_to-integer.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\")\n , $native = [].lastIndexOf\n , NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(\"./node_modules/core-js/modules/_strict-method.js\")($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /*, fromIndex = @[*-1] */){\n // convert -0 to +0\n if(NEGATIVE_ZERO)return $native.apply(this, arguments) || 0;\n var O = toIObject(this)\n , length = toLength(O.length)\n , index = length - 1;\n if(arguments.length > 1)index = Math.min(index, toInteger(arguments[1]));\n if(index < 0)index = length + index;\n for(;index >= 0; index--)if(index in O)if(O[index] === searchElement)return index || 0;\n return -1;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lmxhc3QtaW5kZXgtb2YuanM/MDg4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgdG9JT2JqZWN0ICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvSW50ZWdlciAgICAgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCB0b0xlbmd0aCAgICAgID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCAkbmF0aXZlICAgICAgID0gW10ubGFzdEluZGV4T2ZcbiAgLCBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyosIGZyb21JbmRleCA9IEBbKi0xXSAqLyl7XG4gICAgLy8gY29udmVydCAtMCB0byArMFxuICAgIGlmKE5FR0FUSVZFX1pFUk8pcmV0dXJuICRuYXRpdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwO1xuICAgIHZhciBPICAgICAgPSB0b0lPYmplY3QodGhpcylcbiAgICAgICwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpXG4gICAgICAsIGluZGV4ICA9IGxlbmd0aCAtIDE7XG4gICAgaWYoYXJndW1lbnRzLmxlbmd0aCA+IDEpaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICAgIGlmKGluZGV4IDwgMClpbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICAgIGZvcig7aW5kZXggPj0gMDsgaW5kZXgtLSlpZihpbmRleCBpbiBPKWlmKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KXJldHVybiBpbmRleCB8fCAwO1xuICAgIHJldHVybiAtMTtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.map.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $map = __webpack_require__(\"./node_modules/core-js/modules/_array-methods.js\")(1);\n\n$export($export.P + $export.F * !__webpack_require__(\"./node_modules/core-js/modules/_strict-method.js\")([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */){\n return $map(this, callbackfn, arguments[1]);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5tYXAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzP2UwNWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRtYXAgICAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKXtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5tYXAuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.of.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , createProperty = __webpack_require__(\"./node_modules/core-js/modules/_create-property.js\");\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n function F(){}\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */){\n var index = 0\n , aLen = arguments.length\n , result = new (typeof this == 'function' ? this : Array)(aLen);\n while(aLen > index)createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcz9lODc0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gV2ViS2l0IEFycmF5Lm9mIGlzbid0IGdlbmVyaWNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICBmdW5jdGlvbiBGKCl7fVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKXtcbiAgICB2YXIgaW5kZXggID0gMFxuICAgICAgLCBhTGVuICAgPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAsIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUoYUxlbiA+IGluZGV4KWNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGFMZW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.reduce-right.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $reduce = __webpack_require__(\"./node_modules/core-js/modules/_array-reduce.js\");\n\n$export($export.P + $export.F * !__webpack_require__(\"./node_modules/core-js/modules/_strict-method.js\")([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */){\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzP2FmNDIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pe1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgdHJ1ZSk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.reduce.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $reduce = __webpack_require__(\"./node_modules/core-js/modules/_array-reduce.js\");\n\n$export($export.P + $export.F * !__webpack_require__(\"./node_modules/core-js/modules/_strict-method.js\")([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */){\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzPzRmNDUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE4IC8gMTUuNC40LjIxIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKXtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.slice.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , html = __webpack_require__(\"./node_modules/core-js/modules/_html.js\")\n , cof = __webpack_require__(\"./node_modules/core-js/modules/_cof.js\")\n , toIndex = __webpack_require__(\"./node_modules/core-js/modules/_to-index.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\")\n , arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n if(html)arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end){\n var len = toLength(this.length)\n , klass = cof(this);\n end = end === undefined ? len : end;\n if(klass == 'Array')return arraySlice.call(this, begin, end);\n var start = toIndex(begin, len)\n , upTo = toIndex(end, len)\n , size = toLength(upTo - start)\n , cloned = Array(size)\n , i = 0;\n for(; i < size; i++)cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zbGljZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zbGljZS5qcz82MzgxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBodG1sICAgICAgID0gcmVxdWlyZSgnLi9faHRtbCcpXG4gICwgY29mICAgICAgICA9IHJlcXVpcmUoJy4vX2NvZicpXG4gICwgdG9JbmRleCAgICA9IHJlcXVpcmUoJy4vX3RvLWluZGV4JylcbiAgLCB0b0xlbmd0aCAgID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCBhcnJheVNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICBpZihodG1sKWFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKXtcbiAgICB2YXIgbGVuICAgPSB0b0xlbmd0aCh0aGlzLmxlbmd0aClcbiAgICAgICwga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYoa2xhc3MgPT0gJ0FycmF5JylyZXR1cm4gYXJyYXlTbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIHZhciBzdGFydCAgPSB0b0luZGV4KGJlZ2luLCBsZW4pXG4gICAgICAsIHVwVG8gICA9IHRvSW5kZXgoZW5kLCBsZW4pXG4gICAgICAsIHNpemUgICA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydClcbiAgICAgICwgY2xvbmVkID0gQXJyYXkoc2l6ZSlcbiAgICAgICwgaSAgICAgID0gMDtcbiAgICBmb3IoOyBpIDwgc2l6ZTsgaSsrKWNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.some.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $some = __webpack_require__(\"./node_modules/core-js/modules/_array-methods.js\")(3);\n\n$export($export.P + $export.F * !__webpack_require__(\"./node_modules/core-js/modules/_strict-method.js\")([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */){\n return $some(this, callbackfn, arguments[1]);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvbWUuanM/MDJmYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgJHNvbWUgICA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKXtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29tZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.sort.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , aFunction = __webpack_require__(\"./node_modules/core-js/modules/_a-function.js\")\n , toObject = __webpack_require__(\"./node_modules/core-js/modules/_to-object.js\")\n , fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")\n , $sort = [].sort\n , test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function(){\n // IE8-\n test.sort(undefined);\n}) || !fails(function(){\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !__webpack_require__(\"./node_modules/core-js/modules/_strict-method.js\")($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn){\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvcnQuanM/YWU3MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJylcbiAgLCB0b09iamVjdCAgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsIGZhaWxzICAgICA9IHJlcXVpcmUoJy4vX2ZhaWxzJylcbiAgLCAkc29ydCAgICAgPSBbXS5zb3J0XG4gICwgdGVzdCAgICAgID0gWzEsIDIsIDNdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbigpe1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uKCl7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbil7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcykpXG4gICAgICA6ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcyksIGFGdW5jdGlvbihjb21wYXJlZm4pKTtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.array.species.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("__webpack_require__(\"./node_modules/core-js/modules/_set-species.js\")('Array');//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMuanM/MDA3NSJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdBcnJheScpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.date.now.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Date', {now: function(){ return new Date().getTime(); }});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcz9kNGIyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjMuMy4xIC8gMTUuOS40LjQgRGF0ZS5ub3coKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdEYXRlJywge25vdzogZnVuY3Rpb24oKXsgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9fSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.date.to-iso-string.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")\n , getTime = Date.prototype.getTime;\n\nvar lz = function(num){\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (fails(function(){\n return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z';\n}) || !fails(function(){\n new Date(NaN).toISOString();\n})), 'Date', {\n toISOString: function toISOString(){\n if(!isFinite(getTime.call(this)))throw RangeError('Invalid time value');\n var d = this\n , y = d.getUTCFullYear()\n , m = d.getUTCMilliseconds()\n , s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzP2Y5N2MiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBmYWlscyAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKVxuICAsIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xuXG52YXIgbHogPSBmdW5jdGlvbihudW0pe1xuICByZXR1cm4gbnVtID4gOSA/IG51bSA6ICcwJyArIG51bTtcbn07XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIG5ldyBEYXRlKC01ZTEzIC0gMSkudG9JU09TdHJpbmcoKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbigpe1xuICBuZXcgRGF0ZShOYU4pLnRvSVNPU3RyaW5nKCk7XG59KSksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogZnVuY3Rpb24gdG9JU09TdHJpbmcoKXtcbiAgICBpZighaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSl0aHJvdyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgICB2YXIgZCA9IHRoaXNcbiAgICAgICwgeSA9IGQuZ2V0VVRDRnVsbFllYXIoKVxuICAgICAgLCBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKVxuICAgICAgLCBzID0geSA8IDAgPyAnLScgOiB5ID4gOTk5OSA/ICcrJyA6ICcnO1xuICAgIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAgICctJyArIGx6KGQuZ2V0VVRDTW9udGgoKSArIDEpICsgJy0nICsgbHooZC5nZXRVVENEYXRlKCkpICtcbiAgICAgICdUJyArIGx6KGQuZ2V0VVRDSG91cnMoKSkgKyAnOicgKyBseihkLmdldFVUQ01pbnV0ZXMoKSkgK1xuICAgICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.date.to-json.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , toObject = __webpack_require__(\"./node_modules/core-js/modules/_to-object.js\")\n , toPrimitive = __webpack_require__(\"./node_modules/core-js/modules/_to-primitive.js\");\n\n$export($export.P + $export.F * __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({toISOString: function(){ return 1; }}) !== 1;\n}), 'Date', {\n toJSON: function toJSON(key){\n var O = toObject(this)\n , pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzP2MzOTAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCB0b09iamVjdCAgICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsIHx8IERhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHt0b0lTT1N0cmluZzogZnVuY3Rpb24oKXsgcmV0dXJuIDE7IH19KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oa2V5KXtcbiAgICB2YXIgTyAgPSB0b09iamVjdCh0aGlzKVxuICAgICAgLCBwdiA9IHRvUHJpbWl0aXZlKE8pO1xuICAgIHJldHVybiB0eXBlb2YgcHYgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHB2KSA/IG51bGwgOiBPLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tanNvbi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.date.to-primitive.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var TO_PRIMITIVE = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('toPrimitive')\n , proto = Date.prototype;\n\nif(!(TO_PRIMITIVE in proto))__webpack_require__(\"./node_modules/core-js/modules/_hide.js\")(proto, TO_PRIMITIVE, __webpack_require__(\"./node_modules/core-js/modules/_date-to-primitive.js\"));//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZS5qcz9iYjc5Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBUT19QUklNSVRJVkUgPSByZXF1aXJlKCcuL193a3MnKSgndG9QcmltaXRpdmUnKVxuICAsIHByb3RvICAgICAgICA9IERhdGUucHJvdG90eXBlO1xuXG5pZighKFRPX1BSSU1JVElWRSBpbiBwcm90bykpcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.date.to-string.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var DateProto = Date.prototype\n , INVALID_DATE = 'Invalid Date'\n , TO_STRING = 'toString'\n , $toString = DateProto[TO_STRING]\n , getTime = DateProto.getTime;\nif(new Date(NaN) + '' != INVALID_DATE){\n __webpack_require__(\"./node_modules/core-js/modules/_redefine.js\")(DateProto, TO_STRING, function toString(){\n var value = getTime.call(this);\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcz81NGQ3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBEYXRlUHJvdG8gICAgPSBEYXRlLnByb3RvdHlwZVxuICAsIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnXG4gICwgVE9fU1RSSU5HICAgID0gJ3RvU3RyaW5nJ1xuICAsICR0b1N0cmluZyAgICA9IERhdGVQcm90b1tUT19TVFJJTkddXG4gICwgZ2V0VGltZSAgICAgID0gRGF0ZVByb3RvLmdldFRpbWU7XG5pZihuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKXtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKXtcbiAgICB2YXIgdmFsdWUgPSBnZXRUaW1lLmNhbGwodGhpcyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.function.bind.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.P, 'Function', {bind: __webpack_require__(\"./node_modules/core-js/modules/_bind.js\")});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQuanM/OTFjYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4yLjMuMiAvIDE1LjMuNC41IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKHRoaXNBcmcsIGFyZ3MuLi4pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0Z1bmN0aW9uJywge2JpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKX0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.function.has-instance.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , getPrototypeOf = __webpack_require__(\"./node_modules/core-js/modules/_object-gpo.js\")\n , HAS_INSTANCE = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('hasInstance')\n , FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif(!(HAS_INSTANCE in FunctionProto))__webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\").f(FunctionProto, HAS_INSTANCE, {value: function(O){\n if(typeof this != 'function' || !isObject(O))return false;\n if(!isObject(this.prototype))return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while(O = getPrototypeOf(O))if(this.prototype === O)return true;\n return false;\n}});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzPzQ4ZTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKVxuICAsIEhBU19JTlNUQU5DRSAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJylcbiAgLCBGdW5jdGlvblByb3RvICA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYoIShIQVNfSU5TVEFOQ0UgaW4gRnVuY3Rpb25Qcm90bykpcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihGdW5jdGlvblByb3RvLCBIQVNfSU5TVEFOQ0UsIHt2YWx1ZTogZnVuY3Rpb24oTyl7XG4gIGlmKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKXJldHVybiBmYWxzZTtcbiAgaWYoIWlzT2JqZWN0KHRoaXMucHJvdG90eXBlKSlyZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlKE8gPSBnZXRQcm90b3R5cGVPZihPKSlpZih0aGlzLnByb3RvdHlwZSA9PT0gTylyZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufX0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.function.name.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var dP = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\").f\n , createDesc = __webpack_require__(\"./node_modules/core-js/modules/_property-desc.js\")\n , has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , FProto = Function.prototype\n , nameRE = /^\\s*function ([^ (]*)/\n , NAME = 'name';\n\nvar isExtensible = Object.isExtensible || function(){\n return true;\n};\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\") && dP(FProto, NAME, {\n configurable: true,\n get: function(){\n try {\n var that = this\n , name = ('' + that).match(nameRE)[1];\n has(that, NAME) || !isExtensible(that) || dP(that, NAME, createDesc(5, name));\n return name;\n } catch(e){\n return '';\n }\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUuanM/OWQ3MSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZFAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgaGFzICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgRlByb3RvICAgICA9IEZ1bmN0aW9uLnByb3RvdHlwZVxuICAsIG5hbWVSRSAgICAgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS9cbiAgLCBOQU1FICAgICAgID0gJ25hbWUnO1xuXG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbigpe1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpe1xuICAgIHRyeSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICAgICAgLCBuYW1lID0gKCcnICsgdGhhdCkubWF0Y2gobmFtZVJFKVsxXTtcbiAgICAgIGhhcyh0aGF0LCBOQU1FKSB8fCAhaXNFeHRlbnNpYmxlKHRoYXQpIHx8IGRQKHRoYXQsIE5BTUUsIGNyZWF0ZURlc2MoNSwgbmFtZSkpO1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.map.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar strong = __webpack_require__(\"./node_modules/core-js/modules/_collection-strong.js\");\n\n// 23.1 Map Objects\nmodule.exports = __webpack_require__(\"./node_modules/core-js/modules/_collection.js\")('Map', function(get){\n return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key){\n var entry = strong.getEntry(this, key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value){\n return strong.def(this, key === 0 ? 0 : key, value);\n }\n}, strong, true);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzP2ZjYzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKCdNYXAnLCBmdW5jdGlvbihnZXQpe1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCl7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSl7XG4gICAgdmFyIGVudHJ5ID0gc3Ryb25nLmdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnY7XG4gIH0sXG4gIC8vIDIzLjEuMy45IE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpe1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.acosh.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.3 Math.acosh(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , log1p = __webpack_require__(\"./node_modules/core-js/modules/_math-log1p.js\")\n , sqrt = Math.sqrt\n , $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN \n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x){\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanM/NzM5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMyBNYXRoLmFjb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgbG9nMXAgICA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKVxuICAsIHNxcnQgICAgPSBNYXRoLnNxcnRcbiAgLCAkYWNvc2ggID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU4gXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCl7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.asinh.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.5 Math.asinh(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $asinh = Math.asinh;\n\nfunction asinh(x){\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0 \n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {asinh: asinh});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanM/ODZmYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuNSBNYXRoLmFzaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgJGFzaW5oICA9IE1hdGguYXNpbmg7XG5cbmZ1bmN0aW9uIGFzaW5oKHgpe1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMCBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXNpbmggJiYgMSAvICRhc2luaCgwKSA+IDApLCAnTWF0aCcsIHthc2luaDogYXNpbmh9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.atanh.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.7 Math.atanh(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0 \n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x){\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanM/MTgzYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgJGF0YW5oICA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMCBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KXtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.cbrt.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.9 Math.cbrt(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , sign = __webpack_require__(\"./node_modules/core-js/modules/_math-sign.js\");\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x){\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNicnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzPzQ5YjAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjkgTWF0aC5jYnJ0KHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgc2lnbiAgICA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNicnQ6IGZ1bmN0aW9uIGNicnQoeCl7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNicnQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.clz32.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.11 Math.clz32(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n clz32: function clz32(x){\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNsejMyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2x6MzIuanM/MjNhMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTEgTWF0aC5jbHozMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCl7XG4gICAgcmV0dXJuICh4ID4+Pj0gMCkgPyAzMSAtIE1hdGguZmxvb3IoTWF0aC5sb2coeCArIDAuNSkgKiBNYXRoLkxPRzJFKSA6IDMyO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNsejMyLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2x6MzIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.cosh.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.12 Math.cosh(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x){\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNvc2guanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzPzMwOTAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGV4cCAgICAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpe1xuICAgIHJldHVybiAoZXhwKHggPSAreCkgKyBleHAoLXgpKSAvIDI7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY29zaC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNvc2guanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.expm1.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.14 Math.expm1(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $expm1 = __webpack_require__(\"./node_modules/core-js/modules/_math-expm1.js\");\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {expm1: $expm1});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEuanM/N2NjYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRleHBtMSAgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCRleHBtMSAhPSBNYXRoLmV4cG0xKSwgJ01hdGgnLCB7ZXhwbTE6ICRleHBtMX0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5leHBtMS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.fround.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.16 Math.fround(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , sign = __webpack_require__(\"./node_modules/core-js/modules/_math-sign.js\")\n , pow = Math.pow\n , EPSILON = pow(2, -52)\n , EPSILON32 = pow(2, -23)\n , MAX32 = pow(2, 127) * (2 - EPSILON32)\n , MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function(n){\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\n\n$export($export.S, 'Math', {\n fround: function fround(x){\n var $abs = Math.abs(x)\n , $sign = sign(x)\n , a, result;\n if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n if(result > MAX32 || result != result)return $sign * Infinity;\n return $sign * result;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcz9iN2M0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgc2lnbiAgICAgID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJylcbiAgLCBwb3cgICAgICAgPSBNYXRoLnBvd1xuICAsIEVQU0lMT04gICA9IHBvdygyLCAtNTIpXG4gICwgRVBTSUxPTjMyID0gcG93KDIsIC0yMylcbiAgLCBNQVgzMiAgICAgPSBwb3coMiwgMTI3KSAqICgyIC0gRVBTSUxPTjMyKVxuICAsIE1JTjMyICAgICA9IHBvdygyLCAtMTI2KTtcblxudmFyIHJvdW5kVGllc1RvRXZlbiA9IGZ1bmN0aW9uKG4pe1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnJvdW5kOiBmdW5jdGlvbiBmcm91bmQoeCl7XG4gICAgdmFyICRhYnMgID0gTWF0aC5hYnMoeClcbiAgICAgICwgJHNpZ24gPSBzaWduKHgpXG4gICAgICAsIGEsIHJlc3VsdDtcbiAgICBpZigkYWJzIDwgTUlOMzIpcmV0dXJuICRzaWduICogcm91bmRUaWVzVG9FdmVuKCRhYnMgLyBNSU4zMiAvIEVQU0lMT04zMikgKiBNSU4zMiAqIEVQU0lMT04zMjtcbiAgICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gICAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gICAgaWYocmVzdWx0ID4gTUFYMzIgfHwgcmVzdWx0ICE9IHJlc3VsdClyZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.hypot.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars\n var sum = 0\n , i = 0\n , aLen = arguments.length\n , larg = 0\n , arg, div;\n while(i < aLen){\n arg = abs(arguments[i++]);\n if(larg < arg){\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if(arg > 0){\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmh5cG90LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QuanM/OWZkZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBhYnMgICAgID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKXsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciBzdW0gID0gMFxuICAgICAgLCBpICAgID0gMFxuICAgICAgLCBhTGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgLCBsYXJnID0gMFxuICAgICAgLCBhcmcsIGRpdjtcbiAgICB3aGlsZShpIDwgYUxlbil7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYobGFyZyA8IGFyZyl7XG4gICAgICAgIGRpdiAgPSBsYXJnIC8gYXJnO1xuICAgICAgICBzdW0gID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZihhcmcgPiAwKXtcbiAgICAgICAgZGl2ICA9IGFyZyAvIGxhcmc7XG4gICAgICAgIHN1bSArPSBkaXYgKiBkaXY7XG4gICAgICB9IGVsc2Ugc3VtICs9IGFyZztcbiAgICB9XG4gICAgcmV0dXJuIGxhcmcgPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBsYXJnICogTWF0aC5zcXJ0KHN1bSk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.imul.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.18 Math.imul(x, y)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y){\n var UINT16 = 0xffff\n , xn = +x\n , yn = +y\n , xl = UINT16 & xn\n , yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmltdWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzPzUzMzYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE4IE1hdGguaW11bCh4LCB5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRpbXVsICAgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuICRpbXVsKDB4ZmZmZmZmZmYsIDUpICE9IC01IHx8ICRpbXVsLmxlbmd0aCAhPSAyO1xufSksICdNYXRoJywge1xuICBpbXVsOiBmdW5jdGlvbiBpbXVsKHgsIHkpe1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmZcbiAgICAgICwgeG4gPSAreFxuICAgICAgLCB5biA9ICt5XG4gICAgICAsIHhsID0gVUlOVDE2ICYgeG5cbiAgICAgICwgeWwgPSBVSU5UMTYgJiB5bjtcbiAgICByZXR1cm4gMCB8IHhsICogeWwgKyAoKFVJTlQxNiAmIHhuID4+PiAxNikgKiB5bCArIHhsICogKFVJTlQxNiAmIHluID4+PiAxNikgPDwgMTYgPj4+IDApO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmltdWwuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.log10.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.21 Math.log10(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n log10: function log10(x){\n return Math.log(x) / Math.LN10;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAuanM/ZGJlMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCl7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjEwO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.log1p.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.20 Math.log1p(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {log1p: __webpack_require__(\"./node_modules/core-js/modules/_math-log1p.js\")});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAuanM/YTgwNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge2xvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJyl9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.log2.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.22 Math.log2(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n log2: function log2(x){\n return Math.log(x) / Math.LN2;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzP2YzMDUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjIyIE1hdGgubG9nMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cyOiBmdW5jdGlvbiBsb2cyKHgpe1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.sign.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.28 Math.sign(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {sign: __webpack_require__(\"./node_modules/core-js/modules/_math-sign.js\")});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpZ24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzP2U5ZTgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge3NpZ246IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.sinh.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.30 Math.sinh(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , expm1 = __webpack_require__(\"./node_modules/core-js/modules/_math-expm1.js\")\n , exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x){\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpbmguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzPzRlNDYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGV4cG0xICAgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJylcbiAgLCBleHAgICAgID0gTWF0aC5leHA7XG5cbi8vIFY4IG5lYXIgQ2hyb21pdW0gMzggaGFzIGEgcHJvYmxlbSB3aXRoIHZlcnkgc21hbGwgbnVtYmVyc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpe1xuICAgIHJldHVybiBNYXRoLmFicyh4ID0gK3gpIDwgMVxuICAgICAgPyAoZXhwbTEoeCkgLSBleHBtMSgteCkpIC8gMlxuICAgICAgOiAoZXhwKHggLSAxKSAtIGV4cCgteCAtIDEpKSAqIChNYXRoLkUgLyAyKTtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2luaC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.tanh.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.33 Math.tanh(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , expm1 = __webpack_require__(\"./node_modules/core-js/modules/_math-expm1.js\")\n , exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x){\n var a = expm1(x = +x)\n , b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50YW5oLmpzPzcxNjQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGV4cG0xICAgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJylcbiAgLCBleHAgICAgID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KXtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreClcbiAgICAgICwgYiA9IGV4cG0xKC14KTtcbiAgICByZXR1cm4gYSA9PSBJbmZpbml0eSA/IDEgOiBiID09IEluZmluaXR5ID8gLTEgOiAoYSAtIGIpIC8gKGV4cCh4KSArIGV4cCgteCkpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50YW5oLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.math.trunc.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.2.2.34 Math.trunc(x)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n trunc: function trunc(it){\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRydW5jLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanM/NmUxNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpe1xuICAgIHJldHVybiAoaXQgPiAwID8gTWF0aC5mbG9vciA6IE1hdGguY2VpbCkoaXQpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRydW5jLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.number.constructor.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , cof = __webpack_require__(\"./node_modules/core-js/modules/_cof.js\")\n , inheritIfRequired = __webpack_require__(\"./node_modules/core-js/modules/_inherit-if-required.js\")\n , toPrimitive = __webpack_require__(\"./node_modules/core-js/modules/_to-primitive.js\")\n , fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")\n , gOPN = __webpack_require__(\"./node_modules/core-js/modules/_object-gopn.js\").f\n , gOPD = __webpack_require__(\"./node_modules/core-js/modules/_object-gopd.js\").f\n , dP = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\").f\n , $trim = __webpack_require__(\"./node_modules/core-js/modules/_string-trim.js\").trim\n , NUMBER = 'Number'\n , $Number = global[NUMBER]\n , Base = $Number\n , proto = $Number.prototype\n // Opera ~12 has broken Object#toString\n , BROKEN_COF = cof(__webpack_require__(\"./node_modules/core-js/modules/_object-create.js\")(proto)) == NUMBER\n , TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function(argument){\n var it = toPrimitive(argument, false);\n if(typeof it == 'string' && it.length > 2){\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0)\n , third, radix, maxCode;\n if(first === 43 || first === 45){\n third = it.charCodeAt(2);\n if(third === 88 || third === 120)return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if(first === 48){\n switch(it.charCodeAt(1)){\n case 66 : case 98 : radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79 : case 111 : radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default : return +it;\n }\n for(var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++){\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if(code < 48 || code > maxCode)return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){\n $Number = function Number(value){\n var it = arguments.length < 1 ? 0 : value\n , that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function(){ proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for(var keys = __webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\") ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++){\n if(has(Base, key = keys[j]) && !has($Number, key)){\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n __webpack_require__(\"./node_modules/core-js/modules/_redefine.js\")(global, NUMBER, $Number);\n}//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3IuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzPzM5YjgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBoYXMgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgY29mICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19jb2YnKVxuICAsIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpXG4gICwgdG9QcmltaXRpdmUgICAgICAgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKVxuICAsIGZhaWxzICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKVxuICAsIGdPUE4gICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mXG4gICwgZ09QRCAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmZcbiAgLCBkUCAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZcbiAgLCAkdHJpbSAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbVxuICAsIE5VTUJFUiAgICAgICAgICAgID0gJ051bWJlcidcbiAgLCAkTnVtYmVyICAgICAgICAgICA9IGdsb2JhbFtOVU1CRVJdXG4gICwgQmFzZSAgICAgICAgICAgICAgPSAkTnVtYmVyXG4gICwgcHJvdG8gICAgICAgICAgICAgPSAkTnVtYmVyLnByb3RvdHlwZVxuICAvLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbiAgLCBCUk9LRU5fQ09GICAgICAgICA9IGNvZihyZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJykocHJvdG8pKSA9PSBOVU1CRVJcbiAgLCBUUklNICAgICAgICAgICAgICA9ICd0cmltJyBpbiBTdHJpbmcucHJvdG90eXBlO1xuXG4vLyA3LjEuMyBUb051bWJlcihhcmd1bWVudClcbnZhciB0b051bWJlciA9IGZ1bmN0aW9uKGFyZ3VtZW50KXtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpe1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApXG4gICAgICAsIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZihmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KXtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKXJldHVybiBOYU47IC8vIE51bWJlcignKzB4MScpIHNob3VsZCBiZSBOYU4sIG9sZCBWOCBmaXhcbiAgICB9IGVsc2UgaWYoZmlyc3QgPT09IDQ4KXtcbiAgICAgIHN3aXRjaChpdC5jaGFyQ29kZUF0KDEpKXtcbiAgICAgICAgY2FzZSA2NiA6IGNhc2UgOTggIDogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5IDogY2FzZSAxMTEgOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0IDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvcih2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKyl7XG4gICAgICAgIGNvZGUgPSBkaWdpdHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSlyZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZighJE51bWJlcignIDBvMScpIHx8ICEkTnVtYmVyKCcwYjEnKSB8fCAkTnVtYmVyKCcrMHgxJykpe1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKXtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZVxuICAgICAgLCB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gdGhhdCBpbnN0YW5jZW9mICROdW1iZXJcbiAgICAgIC8vIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICAgICAgJiYgKEJST0tFTl9DT0YgPyBmYWlscyhmdW5jdGlvbigpeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yKHZhciBrZXlzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUE4oQmFzZSkgOiAoXG4gICAgLy8gRVMzOlxuICAgICdNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSwnICtcbiAgICAvLyBFUzYgKGluIGNhc2UsIGlmIG1vZHVsZXMgd2l0aCBFUzYgTnVtYmVyIHN0YXRpY3MgcmVxdWlyZWQgYmVmb3JlKTpcbiAgICAnRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLCcgK1xuICAgICdNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKXtcbiAgICBpZihoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKXtcbiAgICAgIGRQKCROdW1iZXIsIGtleSwgZ09QRChCYXNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgJE51bWJlci5wcm90b3R5cGUgPSBwcm90bztcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkTnVtYmVyO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgTlVNQkVSLCAkTnVtYmVyKTtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3IuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.number.epsilon.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.1.2.1 Number.EPSILON\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', {EPSILON: Math.pow(2, -52)});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcz82ZWQxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xIE51bWJlci5FUFNJTE9OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtFUFNJTE9OOiBNYXRoLnBvdygyLCAtNTIpfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.number.is-finite.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.1.2.2 Number.isFinite(number)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , _isFinite = __webpack_require__(\"./node_modules/core-js/modules/_global.js\").isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it){\n return typeof it == 'number' && _isFinite(it);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUuanM/NDcxZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgX2lzRmluaXRlID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuaXNGaW5pdGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc0Zpbml0ZTogZnVuY3Rpb24gaXNGaW5pdGUoaXQpe1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.number.is-integer.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.1.2.3 Number.isInteger(number)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', {isInteger: __webpack_require__(\"./node_modules/core-js/modules/_is-integer.js\")});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlci5qcz9kZjc4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7aXNJbnRlZ2VyOiByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyl9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.number.is-nan.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.1.2.4 Number.isNaN(number)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number){\n return number != number;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanM/NDE4MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuNCBOdW1iZXIuaXNOYU4obnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpe1xuICAgIHJldHVybiBudW1iZXIgIT0gbnVtYmVyO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.number.is-safe-integer.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , isInteger = __webpack_require__(\"./node_modules/core-js/modules/_is-integer.js\")\n , abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number){\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXIuanM/ZTdiZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJylcbiAgLCBhYnMgICAgICAgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKXtcbiAgICByZXR1cm4gaXNJbnRlZ2VyKG51bWJlcikgJiYgYWJzKG51bWJlcikgPD0gMHgxZmZmZmZmZmZmZmZmZjtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.number.max-safe-integer.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcz82YjU3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.number.min-safe-integer.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcz83ODExIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7TUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmZ9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.number.parse-float.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $parseFloat = __webpack_require__(\"./node_modules/core-js/modules/_parse-float.js\");\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', {parseFloat: $parseFloat});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzPzY0YzEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAyMC4xLjIuMTIgTnVtYmVyLnBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCAnTnVtYmVyJywge3BhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0fSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.number.parse-int.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $parseInt = __webpack_require__(\"./node_modules/core-js/modules/_parse-int.js\");\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', {parseInt: $parseInt});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQuanM/MGUwYiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywge3BhcnNlSW50OiAkcGFyc2VJbnR9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.number.to-fixed.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , toInteger = __webpack_require__(\"./node_modules/core-js/modules/_to-integer.js\")\n , aNumberValue = __webpack_require__(\"./node_modules/core-js/modules/_a-number-value.js\")\n , repeat = __webpack_require__(\"./node_modules/core-js/modules/_string-repeat.js\")\n , $toFixed = 1..toFixed\n , floor = Math.floor\n , data = [0, 0, 0, 0, 0, 0]\n , ERROR = 'Number.toFixed: incorrect invocation!'\n , ZERO = '0';\n\nvar multiply = function(n, c){\n var i = -1\n , c2 = c;\n while(++i < 6){\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function(n){\n var i = 6\n , c = 0;\n while(--i >= 0){\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function(){\n var i = 6\n , s = '';\n while(--i >= 0){\n if(s !== '' || i === 0 || data[i] !== 0){\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function(x, n, acc){\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function(x){\n var n = 0\n , x2 = x;\n while(x2 >= 4096){\n n += 12;\n x2 /= 4096;\n }\n while(x2 >= 2){\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128..toFixed(0) !== '1000000000000000128'\n) || !__webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits){\n var x = aNumberValue(this, ERROR)\n , f = toInteger(fractionDigits)\n , s = ''\n , m = ZERO\n , e, z, j, k;\n if(f < 0 || f > 20)throw RangeError(ERROR);\n if(x != x)return 'NaN';\n if(x <= -1e21 || x >= 1e21)return String(x);\n if(x < 0){\n s = '-';\n x = -x;\n }\n if(x > 1e-21){\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if(e > 0){\n multiply(0, z);\n j = f;\n while(j >= 7){\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while(j >= 23){\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if(f > 0){\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzPzc3ZmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgdG9JbnRlZ2VyICAgID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpXG4gICwgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKVxuICAsIHJlcGVhdCAgICAgICA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxuICAsICR0b0ZpeGVkICAgICA9IDEuLnRvRml4ZWRcbiAgLCBmbG9vciAgICAgICAgPSBNYXRoLmZsb29yXG4gICwgZGF0YSAgICAgICAgID0gWzAsIDAsIDAsIDAsIDAsIDBdXG4gICwgRVJST1IgICAgICAgID0gJ051bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnXG4gICwgWkVSTyAgICAgICAgID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbihuLCBjKXtcbiAgdmFyIGkgID0gLTFcbiAgICAsIGMyID0gYztcbiAgd2hpbGUoKytpIDwgNil7XG4gICAgYzIgKz0gbiAqIGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xudmFyIGRpdmlkZSA9IGZ1bmN0aW9uKG4pe1xuICB2YXIgaSA9IDZcbiAgICAsIGMgPSAwO1xuICB3aGlsZSgtLWkgPj0gMCl7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbigpe1xuICB2YXIgaSA9IDZcbiAgICAsIHMgPSAnJztcbiAgd2hpbGUoLS1pID49IDApe1xuICAgIGlmKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCl7XG4gICAgICB2YXIgdCA9IFN0cmluZyhkYXRhW2ldKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0LmNhbGwoWkVSTywgNyAtIHQubGVuZ3RoKSArIHQ7XG4gICAgfVxuICB9IHJldHVybiBzO1xufTtcbnZhciBwb3cgPSBmdW5jdGlvbih4LCBuLCBhY2Mpe1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uKHgpe1xuICB2YXIgbiAgPSAwXG4gICAgLCB4MiA9IHg7XG4gIHdoaWxlKHgyID49IDQwOTYpe1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSh4MiA+PSAyKXtcbiAgICBuICArPSAxO1xuICAgIHgyIC89IDI7XG4gIH0gcmV0dXJuIG47XG59O1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICghISR0b0ZpeGVkICYmIChcbiAgMC4wMDAwOC50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8XG4gIDAuOS50b0ZpeGVkKDApICE9PSAnMScgfHxcbiAgMS4yNTUudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8XG4gIDEwMDAwMDAwMDAwMDAwMDAxMjguLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9GaXhlZC5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cyl7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpXG4gICAgICAsIGYgPSB0b0ludGVnZXIoZnJhY3Rpb25EaWdpdHMpXG4gICAgICAsIHMgPSAnJ1xuICAgICAgLCBtID0gWkVST1xuICAgICAgLCBlLCB6LCBqLCBrO1xuICAgIGlmKGYgPCAwIHx8IGYgPiAyMCl0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICBpZih4ICE9IHgpcmV0dXJuICdOYU4nO1xuICAgIGlmKHggPD0gLTFlMjEgfHwgeCA+PSAxZTIxKXJldHVybiBTdHJpbmcoeCk7XG4gICAgaWYoeCA8IDApe1xuICAgICAgcyA9ICctJztcbiAgICAgIHggPSAteDtcbiAgICB9XG4gICAgaWYoeCA+IDFlLTIxKXtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYoZSA+IDApe1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgaiA9IGY7XG4gICAgICAgIHdoaWxlKGogPj0gNyl7XG4gICAgICAgICAgbXVsdGlwbHkoMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkocG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUoaiA+PSAyMyl7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZihmID4gMCl7XG4gICAgICBrID0gbS5sZW5ndGg7XG4gICAgICBtID0gcyArIChrIDw9IGYgPyAnMC4nICsgcmVwZWF0LmNhbGwoWkVSTywgZiAtIGspICsgbSA6IG0uc2xpY2UoMCwgayAtIGYpICsgJy4nICsgbS5zbGljZShrIC0gZikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gcyArIG07XG4gICAgfSByZXR1cm4gbTtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci50by1maXhlZC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.number.to-precision.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")\n , aNumberValue = __webpack_require__(\"./node_modules/core-js/modules/_a-number-value.js\")\n , $toPrecision = 1..toPrecision;\n\n$export($export.P + $export.F * ($fails(function(){\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function(){\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision){\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); \n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24uanM/OTA4NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCAkZmFpbHMgICAgICAgPSByZXF1aXJlKCcuL19mYWlscycpXG4gICwgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKVxuICAsICR0b1ByZWNpc2lvbiA9IDEuLnRvUHJlY2lzaW9uO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICgkZmFpbHMoZnVuY3Rpb24oKXtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbigpe1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9QcmVjaXNpb24uY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihwcmVjaXNpb24pe1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTsgXG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24uanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.assign.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S + $export.F, 'Object', {assign: __webpack_require__(\"./node_modules/core-js/modules/_object-assign.js\")});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanM/YjFiZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7YXNzaWduOiByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyl9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.create.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', {create: __webpack_require__(\"./node_modules/core-js/modules/_object-create.js\")});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanM/YjMxNSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge2NyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.define-properties.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !__webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\"), 'Object', {defineProperties: __webpack_require__(\"./node_modules/core-js/modules/_object-dps.js\")});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzPzU3NDYiXSwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4zIC8gMTUuMi4zLjcgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7ZGVmaW5lUHJvcGVydGllczogcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.define-property.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\"), 'Object', {defineProperty: __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\").f});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanM/MDdiNyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7ZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmZ9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.freeze.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.5 Object.freeze(O)\nvar isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , meta = __webpack_require__(\"./node_modules/core-js/modules/_meta.js\").onFreeze;\n\n__webpack_require__(\"./node_modules/core-js/modules/_object-sap.js\")('freeze', function($freeze){\n return function freeze(it){\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanM/NDY4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNSBPYmplY3QuZnJlZXplKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIG1ldGEgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2ZyZWV6ZScsIGZ1bmN0aW9uKCRmcmVlemUpe1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KXtcbiAgICByZXR1cm4gJGZyZWV6ZSAmJiBpc09iamVjdChpdCkgPyAkZnJlZXplKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(\"./node_modules/core-js/modules/_to-iobject.js\")\n , $getOwnPropertyDescriptor = __webpack_require__(\"./node_modules/core-js/modules/_object-gopd.js\").f;\n\n__webpack_require__(\"./node_modules/core-js/modules/_object-sap.js\")('getOwnPropertyDescriptor', function(){\n return function getOwnPropertyDescriptor(it, key){\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanM/ZmFiNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ICAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KXtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.get-own-property-names.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.7 Object.getOwnPropertyNames(O)\n__webpack_require__(\"./node_modules/core-js/modules/_object-sap.js\")('getOwnPropertyNames', function(){\n return __webpack_require__(\"./node_modules/core-js/modules/_object-gopn-ext.js\").f;\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcz85OGM1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5TmFtZXMnLCBmdW5jdGlvbigpe1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.get-prototype-of.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(\"./node_modules/core-js/modules/_to-object.js\")\n , $getPrototypeOf = __webpack_require__(\"./node_modules/core-js/modules/_object-gpo.js\");\n\n__webpack_require__(\"./node_modules/core-js/modules/_object-sap.js\")('getPrototypeOf', function(){\n return function getPrototypeOf(it){\n return $getPrototypeOf(toObject(it));\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcz85YjhmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ICAgICAgICA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KXtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.is-extensible.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.11 Object.isExtensible(O)\nvar isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\");\n\n__webpack_require__(\"./node_modules/core-js/modules/_object-sap.js\")('isExtensible', function($isExtensible){\n return function isExtensible(it){\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZS5qcz9lZDgxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMSBPYmplY3QuaXNFeHRlbnNpYmxlKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0V4dGVuc2libGUnLCBmdW5jdGlvbigkaXNFeHRlbnNpYmxlKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCl7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWUgOiBmYWxzZTtcbiAgfTtcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.is-frozen.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.12 Object.isFrozen(O)\nvar isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\");\n\n__webpack_require__(\"./node_modules/core-js/modules/_object-sap.js\")('isFrozen', function($isFrozen){\n return function isFrozen(it){\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanM/ZGFhYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uKCRpc0Zyb3plbil7XG4gIHJldHVybiBmdW5jdGlvbiBpc0Zyb3plbihpdCl7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.is-sealed.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.13 Object.isSealed(O)\nvar isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\");\n\n__webpack_require__(\"./node_modules/core-js/modules/_object-sap.js\")('isSealed', function($isSealed){\n return function isSealed(it){\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanM/NmY1NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTMgT2JqZWN0LmlzU2VhbGVkKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc1NlYWxlZCcsIGZ1bmN0aW9uKCRpc1NlYWxlZCl7XG4gIHJldHVybiBmdW5jdGlvbiBpc1NlYWxlZChpdCl7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc1NlYWxlZCA/ICRpc1NlYWxlZChpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.is.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.3.10 Object.is(value1, value2)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n$export($export.S, 'Object', {is: __webpack_require__(\"./node_modules/core-js/modules/_same-value.js\")});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzP2FmNzMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtpczogcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.keys.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(\"./node_modules/core-js/modules/_to-object.js\")\n , $keys = __webpack_require__(\"./node_modules/core-js/modules/_object-keys.js\");\n\n__webpack_require__(\"./node_modules/core-js/modules/_object-sap.js\")('keys', function(){\n return function keys(it){\n return $keys(toObject(it));\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcz82OTVmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0JylcbiAgLCAka2V5cyAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uKCl7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KXtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.prevent-extensions.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , meta = __webpack_require__(\"./node_modules/core-js/modules/_meta.js\").onFreeze;\n\n__webpack_require__(\"./node_modules/core-js/modules/_object-sap.js\")('preventExtensions', function($preventExtensions){\n return function preventExtensions(it){\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanM/YjdlNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTUgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIG1ldGEgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3ByZXZlbnRFeHRlbnNpb25zJywgZnVuY3Rpb24oJHByZXZlbnRFeHRlbnNpb25zKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKGl0KXtcbiAgICByZXR1cm4gJHByZXZlbnRFeHRlbnNpb25zICYmIGlzT2JqZWN0KGl0KSA/ICRwcmV2ZW50RXh0ZW5zaW9ucyhtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.seal.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.2.17 Object.seal(O)\nvar isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , meta = __webpack_require__(\"./node_modules/core-js/modules/_meta.js\").onFreeze;\n\n__webpack_require__(\"./node_modules/core-js/modules/_object-sap.js\")('seal', function($seal){\n return function seal(it){\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbC5qcz8wNWI0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNyBPYmplY3Quc2VhbChPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBtZXRhICAgICA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdzZWFsJywgZnVuY3Rpb24oJHNlYWwpe1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCl7XG4gICAgcmV0dXJuICRzZWFsICYmIGlzT2JqZWN0KGl0KSA/ICRzZWFsKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.set-prototype-of.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n$export($export.S, 'Object', {setPrototypeOf: __webpack_require__(\"./node_modules/core-js/modules/_set-proto.js\").set});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcz9jNTVlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7c2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldH0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.object.to-string.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// 19.1.3.6 Object.prototype.toString()\nvar classof = __webpack_require__(\"./node_modules/core-js/modules/_classof.js\")\n , test = {};\ntest[__webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('toStringTag')] = 'z';\nif(test + '' != '[object z]'){\n __webpack_require__(\"./node_modules/core-js/modules/_redefine.js\")(Object.prototype, 'toString', function toString(){\n return '[object ' + classof(this) + ']';\n }, true);\n}//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcuanM/NDE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpXG4gICwgdGVzdCAgICA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZih0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKXtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpe1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.parse-float.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $parseFloat = __webpack_require__(\"./node_modules/core-js/modules/_parse-float.js\");\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), {parseFloat: $parseFloat});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdC5qcz82MjYwIl0sInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMTguMi40IHBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksIHtwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdH0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.parse-int.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $parseInt = __webpack_require__(\"./node_modules/core-js/modules/_parse-int.js\");\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), {parseInt: $parseInt});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1pbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzP2E0ZWIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAxOC4yLjUgcGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlSW50ICE9ICRwYXJzZUludCksIHtwYXJzZUludDogJHBhcnNlSW50fSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.promise.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar LIBRARY = __webpack_require__(\"./node_modules/core-js/modules/_library.js\")\n , global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , ctx = __webpack_require__(\"./node_modules/core-js/modules/_ctx.js\")\n , classof = __webpack_require__(\"./node_modules/core-js/modules/_classof.js\")\n , $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , aFunction = __webpack_require__(\"./node_modules/core-js/modules/_a-function.js\")\n , anInstance = __webpack_require__(\"./node_modules/core-js/modules/_an-instance.js\")\n , forOf = __webpack_require__(\"./node_modules/core-js/modules/_for-of.js\")\n , speciesConstructor = __webpack_require__(\"./node_modules/core-js/modules/_species-constructor.js\")\n , task = __webpack_require__(\"./node_modules/core-js/modules/_task.js\").set\n , microtask = __webpack_require__(\"./node_modules/core-js/modules/_microtask.js\")()\n , PROMISE = 'Promise'\n , TypeError = global.TypeError\n , process = global.process\n , $Promise = global[PROMISE]\n , process = global.process\n , isNode = classof(process) == 'process'\n , empty = function(){ /* empty */ }\n , Internal, GenericPromiseCapability, Wrapper;\n\nvar USE_NATIVE = !!function(){\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1)\n , FakePromise = (promise.constructor = {})[__webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('species')] = function(exec){ exec(empty, empty); };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch(e){ /* empty */ }\n}();\n\n// helpers\nvar sameConstructor = function(a, b){\n // with library wrapper special case\n return a === b || a === $Promise && b === Wrapper;\n};\nvar isThenable = function(it){\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar newPromiseCapability = function(C){\n return sameConstructor($Promise, C)\n ? new PromiseCapability(C)\n : new GenericPromiseCapability(C);\n};\nvar PromiseCapability = GenericPromiseCapability = function(C){\n var resolve, reject;\n this.promise = new C(function($$resolve, $$reject){\n if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n};\nvar perform = function(exec){\n try {\n exec();\n } catch(e){\n return {error: e};\n }\n};\nvar notify = function(promise, isReject){\n if(promise._n)return;\n promise._n = true;\n var chain = promise._c;\n microtask(function(){\n var value = promise._v\n , ok = promise._s == 1\n , i = 0;\n var run = function(reaction){\n var handler = ok ? reaction.ok : reaction.fail\n , resolve = reaction.resolve\n , reject = reaction.reject\n , domain = reaction.domain\n , result, then;\n try {\n if(handler){\n if(!ok){\n if(promise._h == 2)onHandleUnhandled(promise);\n promise._h = 1;\n }\n if(handler === true)result = value;\n else {\n if(domain)domain.enter();\n result = handler(value);\n if(domain)domain.exit();\n }\n if(result === reaction.promise){\n reject(TypeError('Promise-chain cycle'));\n } else if(then = isThenable(result)){\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch(e){\n reject(e);\n }\n };\n while(chain.length > i)run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if(isReject && !promise._h)onUnhandled(promise);\n });\n};\nvar onUnhandled = function(promise){\n task.call(global, function(){\n var value = promise._v\n , abrupt, handler, console;\n if(isUnhandled(promise)){\n abrupt = perform(function(){\n if(isNode){\n process.emit('unhandledRejection', value, promise);\n } else if(handler = global.onunhandledrejection){\n handler({promise: promise, reason: value});\n } else if((console = global.console) && console.error){\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if(abrupt)throw abrupt.error;\n });\n};\nvar isUnhandled = function(promise){\n if(promise._h == 1)return false;\n var chain = promise._a || promise._c\n , i = 0\n , reaction;\n while(chain.length > i){\n reaction = chain[i++];\n if(reaction.fail || !isUnhandled(reaction.promise))return false;\n } return true;\n};\nvar onHandleUnhandled = function(promise){\n task.call(global, function(){\n var handler;\n if(isNode){\n process.emit('rejectionHandled', promise);\n } else if(handler = global.onrejectionhandled){\n handler({promise: promise, reason: promise._v});\n }\n });\n};\nvar $reject = function(value){\n var promise = this;\n if(promise._d)return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if(!promise._a)promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function(value){\n var promise = this\n , then;\n if(promise._d)return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if(promise === value)throw TypeError(\"Promise can't be resolved itself\");\n if(then = isThenable(value)){\n microtask(function(){\n var wrapper = {_w: promise, _d: false}; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch(e){\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch(e){\n $reject.call({_w: promise, _d: false}, e); // wrap\n }\n};\n\n// constructor polyfill\nif(!USE_NATIVE){\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor){\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch(err){\n $reject.call(this, err);\n }\n };\n Internal = function Promise(executor){\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = __webpack_require__(\"./node_modules/core-js/modules/_redefine-all.js\")($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected){\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if(this._a)this._a.push(reaction);\n if(this._s)notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function(onRejected){\n return this.then(undefined, onRejected);\n }\n });\n PromiseCapability = function(){\n var promise = new Internal;\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: $Promise});\n__webpack_require__(\"./node_modules/core-js/modules/_set-to-string-tag.js\")($Promise, PROMISE);\n__webpack_require__(\"./node_modules/core-js/modules/_set-species.js\")(PROMISE);\nWrapper = __webpack_require__(\"./node_modules/core-js/modules/_core.js\")[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r){\n var capability = newPromiseCapability(this)\n , $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x){\n // instanceof instead of internal slot check because we should fix it without replacement native Promise core\n if(x instanceof $Promise && sameConstructor(x.constructor, this))return x;\n var capability = newPromiseCapability(this)\n , $$resolve = capability.resolve;\n $$resolve(x);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(\"./node_modules/core-js/modules/_iter-detect.js\")(function(iter){\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable){\n var C = this\n , capability = newPromiseCapability(C)\n , resolve = capability.resolve\n , reject = capability.reject;\n var abrupt = perform(function(){\n var values = []\n , index = 0\n , remaining = 1;\n forOf(iterable, false, function(promise){\n var $index = index++\n , alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function(value){\n if(alreadyCalled)return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if(abrupt)reject(abrupt.error);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable){\n var C = this\n , capability = newPromiseCapability(C)\n , reject = capability.reject;\n var abrupt = perform(function(){\n forOf(iterable, false, function(promise){\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if(abrupt)reject(abrupt.error);\n return capability.promise;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnByb21pc2UuanM/YmMwMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fbGlicmFyeScpXG4gICwgZ2xvYmFsICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBjdHggICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsIGNsYXNzb2YgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKVxuICAsICRleHBvcnQgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgaXNPYmplY3QgICAgICAgICAgID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBhRnVuY3Rpb24gICAgICAgICAgPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJylcbiAgLCBhbkluc3RhbmNlICAgICAgICAgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpXG4gICwgZm9yT2YgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZm9yLW9mJylcbiAgLCBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJylcbiAgLCB0YXNrICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL190YXNrJykuc2V0XG4gICwgbWljcm90YXNrICAgICAgICAgID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKVxuICAsIFBST01JU0UgICAgICAgICAgICA9ICdQcm9taXNlJ1xuICAsIFR5cGVFcnJvciAgICAgICAgICA9IGdsb2JhbC5UeXBlRXJyb3JcbiAgLCBwcm9jZXNzICAgICAgICAgICAgPSBnbG9iYWwucHJvY2Vzc1xuICAsICRQcm9taXNlICAgICAgICAgICA9IGdsb2JhbFtQUk9NSVNFXVxuICAsIHByb2Nlc3MgICAgICAgICAgICA9IGdsb2JhbC5wcm9jZXNzXG4gICwgaXNOb2RlICAgICAgICAgICAgID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2VzcydcbiAgLCBlbXB0eSAgICAgICAgICAgICAgPSBmdW5jdGlvbigpeyAvKiBlbXB0eSAqLyB9XG4gICwgSW50ZXJuYWwsIEdlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcblxudmFyIFVTRV9OQVRJVkUgPSAhIWZ1bmN0aW9uKCl7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgICAgID0gJFByb21pc2UucmVzb2x2ZSgxKVxuICAgICAgLCBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24oZXhlYyl7IGV4ZWMoZW1wdHksIGVtcHR5KTsgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKSAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2U7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIHNhbWVDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKGEsIGIpe1xuICAvLyB3aXRoIGxpYnJhcnkgd3JhcHBlciBzcGVjaWFsIGNhc2VcbiAgcmV0dXJuIGEgPT09IGIgfHwgYSA9PT0gJFByb21pc2UgJiYgYiA9PT0gV3JhcHBlcjtcbn07XG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbihDKXtcbiAgcmV0dXJuIHNhbWVDb25zdHJ1Y3RvcigkUHJvbWlzZSwgQylcbiAgICA/IG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgIDogbmV3IEdlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbihDKXtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24oJCRyZXNvbHZlLCAkJHJlamVjdCl7XG4gICAgaWYocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCAgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59O1xudmFyIHBlcmZvcm0gPSBmdW5jdGlvbihleGVjKXtcbiAgdHJ5IHtcbiAgICBleGVjKCk7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIHtlcnJvcjogZX07XG4gIH1cbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24ocHJvbWlzZSwgaXNSZWplY3Qpe1xuICBpZihwcm9taXNlLl9uKXJldHVybjtcbiAgcHJvbWlzZS5fbiA9IHRydWU7XG4gIHZhciBjaGFpbiA9IHByb21pc2UuX2M7XG4gIG1pY3JvdGFzayhmdW5jdGlvbigpe1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3ZcbiAgICAgICwgb2sgICAgPSBwcm9taXNlLl9zID09IDFcbiAgICAgICwgaSAgICAgPSAwO1xuICAgIHZhciBydW4gPSBmdW5jdGlvbihyZWFjdGlvbil7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsXG4gICAgICAgICwgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmVcbiAgICAgICAgLCByZWplY3QgID0gcmVhY3Rpb24ucmVqZWN0XG4gICAgICAgICwgZG9tYWluICA9IHJlYWN0aW9uLmRvbWFpblxuICAgICAgICAsIHJlc3VsdCwgdGhlbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmKGhhbmRsZXIpe1xuICAgICAgICAgIGlmKCFvayl7XG4gICAgICAgICAgICBpZihwcm9taXNlLl9oID09IDIpb25IYW5kbGVVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgICAgICAgICBwcm9taXNlLl9oID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoaGFuZGxlciA9PT0gdHJ1ZSlyZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmKGRvbWFpbilkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpO1xuICAgICAgICAgICAgaWYoZG9tYWluKWRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSl7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZih0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKXtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoKGUpe1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZShjaGFpbi5sZW5ndGggPiBpKXJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKW9uVW5oYW5kbGVkKHByb21pc2UpO1xuICB9KTtcbn07XG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbihwcm9taXNlKXtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24oKXtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92XG4gICAgICAsIGFicnVwdCwgaGFuZGxlciwgY29uc29sZTtcbiAgICBpZihpc1VuaGFuZGxlZChwcm9taXNlKSl7XG4gICAgICBhYnJ1cHQgPSBwZXJmb3JtKGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKGlzTm9kZSl7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZihoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKXtcbiAgICAgICAgICBoYW5kbGVyKHtwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlfSk7XG4gICAgICAgIH0gZWxzZSBpZigoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKXtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYoYWJydXB0KXRocm93IGFicnVwdC5lcnJvcjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24ocHJvbWlzZSl7XG4gIGlmKHByb21pc2UuX2ggPT0gMSlyZXR1cm4gZmFsc2U7XG4gIHZhciBjaGFpbiA9IHByb21pc2UuX2EgfHwgcHJvbWlzZS5fY1xuICAgICwgaSAgICAgPSAwXG4gICAgLCByZWFjdGlvbjtcbiAgd2hpbGUoY2hhaW4ubGVuZ3RoID4gaSl7XG4gICAgcmVhY3Rpb24gPSBjaGFpbltpKytdO1xuICAgIGlmKHJlYWN0aW9uLmZhaWwgfHwgIWlzVW5oYW5kbGVkKHJlYWN0aW9uLnByb21pc2UpKXJldHVybiBmYWxzZTtcbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbihwcm9taXNlKXtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24oKXtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZihpc05vZGUpe1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKXtcbiAgICAgIGhhbmRsZXIoe3Byb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdn0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbih2YWx1ZSl7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYocHJvbWlzZS5fZClyZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICBwcm9taXNlLl9zID0gMjtcbiAgaWYoIXByb21pc2UuX2EpcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uKHZhbHVlKXtcbiAgdmFyIHByb21pc2UgPSB0aGlzXG4gICAgLCB0aGVuO1xuICBpZihwcm9taXNlLl9kKXJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmKHByb21pc2UgPT09IHZhbHVlKXRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIGlmKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSl7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7X3c6IHByb21pc2UsIF9kOiBmYWxzZX07IC8vIHdyYXBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaChlKXtcbiAgICAkcmVqZWN0LmNhbGwoe193OiBwcm9taXNlLCBfZDogZmFsc2V9LCBlKTsgLy8gd3JhcFxuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYoIVVTRV9OQVRJVkUpe1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3Ipe1xuICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICB9IGNhdGNoKGVycil7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcil7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKXtcbiAgICAgIHZhciByZWFjdGlvbiAgICA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgICAgID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsICAgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZih0aGlzLl9hKXRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZih0aGlzLl9zKW5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3RlZCl7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbigpe1xuICAgIHZhciBwcm9taXNlICA9IG5ldyBJbnRlcm5hbDtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7UHJvbWlzZTogJFByb21pc2V9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocil7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKVxuICAgICAgLCAkJHJlamVjdCAgID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KXtcbiAgICAvLyBpbnN0YW5jZW9mIGluc3RlYWQgb2YgaW50ZXJuYWwgc2xvdCBjaGVjayBiZWNhdXNlIHdlIHNob3VsZCBmaXggaXQgd2l0aG91dCByZXBsYWNlbWVudCBuYXRpdmUgUHJvbWlzZSBjb3JlXG4gICAgaWYoeCBpbnN0YW5jZW9mICRQcm9taXNlICYmIHNhbWVDb25zdHJ1Y3Rvcih4LmNvbnN0cnVjdG9yLCB0aGlzKSlyZXR1cm4geDtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpXG4gICAgICAsICQkcmVzb2x2ZSAgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgJCRyZXNvbHZlKHgpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbihpdGVyKXtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpe1xuICAgIHZhciBDICAgICAgICAgID0gdGhpc1xuICAgICAgLCBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgICwgcmVzb2x2ZSAgICA9IGNhcGFiaWxpdHkucmVzb2x2ZVxuICAgICAgLCByZWplY3QgICAgID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIGFicnVwdCA9IHBlcmZvcm0oZnVuY3Rpb24oKXtcbiAgICAgIHZhciB2YWx1ZXMgICAgPSBbXVxuICAgICAgICAsIGluZGV4ICAgICA9IDBcbiAgICAgICAgLCByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbihwcm9taXNlKXtcbiAgICAgICAgdmFyICRpbmRleCAgICAgICAgPSBpbmRleCsrXG4gICAgICAgICAgLCBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihmdW5jdGlvbih2YWx1ZSl7XG4gICAgICAgICAgaWYoYWxyZWFkeUNhbGxlZClyZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCAgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1skaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYoYWJydXB0KXJlamVjdChhYnJ1cHQuZXJyb3IpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIDI1LjQuNC40IFByb21pc2UucmFjZShpdGVyYWJsZSlcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSl7XG4gICAgdmFyIEMgICAgICAgICAgPSB0aGlzXG4gICAgICAsIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgLCByZWplY3QgICAgID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIGFicnVwdCA9IHBlcmZvcm0oZnVuY3Rpb24oKXtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24ocHJvbWlzZSl7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmKGFicnVwdClyZWplY3QoYWJydXB0LmVycm9yKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnByb21pc2UuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.apply.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , aFunction = __webpack_require__(\"./node_modules/core-js/modules/_a-function.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , rApply = (__webpack_require__(\"./node_modules/core-js/modules/_global.js\").Reflect || {}).apply\n , fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !__webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n rApply(function(){});\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList){\n var T = aFunction(target)\n , L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuYXBwbHkuanM/MTk3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKVxuICAsIGFuT2JqZWN0ICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgckFwcGx5ICAgID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5XG4gICwgZkFwcGx5ICAgID0gRnVuY3Rpb24uYXBwbHk7XG4vLyBNUyBFZGdlIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgckFwcGx5KGZ1bmN0aW9uKCl7fSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCl7XG4gICAgdmFyIFQgPSBhRnVuY3Rpb24odGFyZ2V0KVxuICAgICAgLCBMID0gYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIHJBcHBseSA/IHJBcHBseShULCB0aGlzQXJndW1lbnQsIEwpIDogZkFwcGx5LmNhbGwoVCwgdGhpc0FyZ3VtZW50LCBMKTtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.construct.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , create = __webpack_require__(\"./node_modules/core-js/modules/_object-create.js\")\n , aFunction = __webpack_require__(\"./node_modules/core-js/modules/_a-function.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")\n , bind = __webpack_require__(\"./node_modules/core-js/modules/_bind.js\")\n , rConstruct = (__webpack_require__(\"./node_modules/core-js/modules/_global.js\").Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function(){\n function F(){}\n return !(rConstruct(function(){}, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function(){\n rConstruct(function(){});\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /*, newTarget*/){\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if(ARGS_BUG && !NEW_TARGET_BUG)return rConstruct(Target, args, newTarget);\n if(Target == newTarget){\n // w/o altered newTarget, optimization for 0-4 arguments\n switch(args.length){\n case 0: return new Target;\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args));\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype\n , instance = create(isObject(proto) ? proto : Object.prototype)\n , result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdC5qcz9hMDA1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBjcmVhdGUgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpXG4gICwgYUZ1bmN0aW9uICA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKVxuICAsIGFuT2JqZWN0ICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIGlzT2JqZWN0ICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGZhaWxzICAgICAgPSByZXF1aXJlKCcuL19mYWlscycpXG4gICwgYmluZCAgICAgICA9IHJlcXVpcmUoJy4vX2JpbmQnKVxuICAsIHJDb25zdHJ1Y3QgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuY29uc3RydWN0O1xuXG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uKCl7XG4gIGZ1bmN0aW9uIEYoKXt9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24oKXt9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uKCl7XG4gIHJDb25zdHJ1Y3QoZnVuY3Rpb24oKXt9KTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRyksICdSZWZsZWN0Jywge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyosIG5ld1RhcmdldCovKXtcbiAgICBhRnVuY3Rpb24oVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhRnVuY3Rpb24oYXJndW1lbnRzWzJdKTtcbiAgICBpZihBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmKFRhcmdldCA9PSBuZXdUYXJnZXQpe1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaChhcmdzLmxlbmd0aCl7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQ7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvICAgID0gbmV3VGFyZ2V0LnByb3RvdHlwZVxuICAgICAgLCBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpXG4gICAgICAsIHJlc3VsdCAgID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.define-property.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\")\n , $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , toPrimitive = __webpack_require__(\"./node_modules/core-js/modules/_to-primitive.js\");\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n Reflect.defineProperty(dP.f({}, 1, {value: 1}), 1, {value: 2});\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes){\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch(e){\n return false;\n }\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eS5qcz9jMjk2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsICRleHBvcnQgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwge3ZhbHVlOiAxfSksIDEsIHt2YWx1ZTogMn0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyl7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICBwcm9wZXJ0eUtleSA9IHRvUHJpbWl0aXZlKHByb3BlcnR5S2V5LCB0cnVlKTtcbiAgICBhbk9iamVjdChhdHRyaWJ1dGVzKTtcbiAgICB0cnkge1xuICAgICAgZFAuZih0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.delete-property.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , gOPD = __webpack_require__(\"./node_modules/core-js/modules/_object-gopd.js\").f\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\");\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey){\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcz81MWQyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGdPUEQgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mXG4gICwgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSl7XG4gICAgdmFyIGRlc2MgPSBnT1BEKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUgPyBmYWxzZSA6IGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.enumerate.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// 26.1.5 Reflect.enumerate(target)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\");\nvar Enumerate = function(iterated){\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = [] // keys\n , key;\n for(key in iterated)keys.push(key);\n};\n__webpack_require__(\"./node_modules/core-js/modules/_iter-create.js\")(Enumerate, 'Object', function(){\n var that = this\n , keys = that._k\n , key;\n do {\n if(that._i >= keys.length)return {value: undefined, done: true};\n } while(!((key = keys[that._i++]) in that._t));\n return {value: key, done: false};\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target){\n return new Enumerate(target);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZS5qcz81NGVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDI2LjEuNSBSZWZsZWN0LmVudW1lcmF0ZSh0YXJnZXQpXG52YXIgJGV4cG9ydCAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgRW51bWVyYXRlID0gZnVuY3Rpb24oaXRlcmF0ZWQpe1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXSAgICAgICAvLyBrZXlzXG4gICAgLCBrZXk7XG4gIGZvcihrZXkgaW4gaXRlcmF0ZWQpa2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbigpe1xuICB2YXIgdGhhdCA9IHRoaXNcbiAgICAsIGtleXMgPSB0aGF0Ll9rXG4gICAgLCBrZXk7XG4gIGRvIHtcbiAgICBpZih0aGF0Ll9pID49IGtleXMubGVuZ3RoKXJldHVybiB7dmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZX07XG4gIH0gd2hpbGUoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7dmFsdWU6IGtleSwgZG9uZTogZmFsc2V9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZW51bWVyYXRlOiBmdW5jdGlvbiBlbnVtZXJhdGUodGFyZ2V0KXtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = __webpack_require__(\"./node_modules/core-js/modules/_object-gopd.js\")\n , $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\");\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){\n return gOPD.f(anObject(target), propertyKey);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcz83NDE1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKVxuICAsICRleHBvcnQgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpe1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.get-prototype-of.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , getProto = __webpack_require__(\"./node_modules/core-js/modules/_object-gpo.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\");\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target){\n return getProto(anObject(target));\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzPzQ4NTAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS44IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KVxudmFyICRleHBvcnQgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBnZXRQcm90byA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKVxuICAsIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCl7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.get.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = __webpack_require__(\"./node_modules/core-js/modules/_object-gopd.js\")\n , getPrototypeOf = __webpack_require__(\"./node_modules/core-js/modules/_object-gpo.js\")\n , has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\");\n\nfunction get(target, propertyKey/*, receiver*/){\n var receiver = arguments.length < 3 ? target : arguments[2]\n , desc, proto;\n if(anObject(target) === receiver)return target[propertyKey];\n if(desc = gOPD.f(target, propertyKey))return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if(isObject(proto = getPrototypeOf(target)))return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', {get: get});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC5qcz8yZDBlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEICAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJylcbiAgLCBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKVxuICAsIGhhcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgaXNPYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGFuT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5LyosIHJlY2VpdmVyKi8pe1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IGFyZ3VtZW50c1syXVxuICAgICwgZGVzYywgcHJvdG87XG4gIGlmKGFuT2JqZWN0KHRhcmdldCkgPT09IHJlY2VpdmVyKXJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBpZihkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKXJldHVybiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICA/IGRlc2MudmFsdWVcbiAgICA6IGRlc2MuZ2V0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gZGVzYy5nZXQuY2FsbChyZWNlaXZlcilcbiAgICAgIDogdW5kZWZpbmVkO1xuICBpZihpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKXJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtnZXQ6IGdldH0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.has.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey){\n return propertyKey in target;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcz9lZDIxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuOSBSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBoYXM6IGZ1bmN0aW9uIGhhcyh0YXJnZXQsIHByb3BlcnR5S2V5KXtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.is-extensible.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 26.1.10 Reflect.isExtensible(target)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target){\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzP2Q4MDMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCAgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgYW5PYmplY3QgICAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KXtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaXMtZXh0ZW5zaWJsZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.own-keys.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 26.1.11 Reflect.ownKeys(target)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Reflect', {ownKeys: __webpack_require__(\"./node_modules/core-js/modules/_own-keys.js\")});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMuanM/NWZmZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjExIFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7b3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKX0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.prevent-extensions.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 26.1.12 Reflect.preventExtensions(target)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target){\n anObject(target);\n try {\n if($preventExtensions)$preventExtensions(target);\n return true;\n } catch(e){\n return false;\n }\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcz81NTg1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBhbk9iamVjdCAgICAgICAgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsICRwcmV2ZW50RXh0ZW5zaW9ucyA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBwcmV2ZW50RXh0ZW5zaW9uczogZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KXtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZigkcHJldmVudEV4dGVuc2lvbnMpJHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.set-prototype-of.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , setProto = __webpack_require__(\"./node_modules/core-js/modules/_set-proto.js\");\n\nif(setProto)$export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto){\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch(e){\n return false;\n }\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzPzYyNWQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmKHNldFByb3RvKSRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgc2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pe1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LXByb3RvdHlwZS1vZi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.reflect.set.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\")\n , gOPD = __webpack_require__(\"./node_modules/core-js/modules/_object-gopd.js\")\n , getPrototypeOf = __webpack_require__(\"./node_modules/core-js/modules/_object-gpo.js\")\n , has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , createDesc = __webpack_require__(\"./node_modules/core-js/modules/_property-desc.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\");\n\nfunction set(target, propertyKey, V/*, receiver*/){\n var receiver = arguments.length < 4 ? target : arguments[3]\n , ownDesc = gOPD.f(anObject(target), propertyKey)\n , existingDescriptor, proto;\n if(!ownDesc){\n if(isObject(proto = getPrototypeOf(target))){\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if(has(ownDesc, 'value')){\n if(ownDesc.writable === false || !isObject(receiver))return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', {set: set});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcz82ZTE5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTMgUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViBbLCByZWNlaXZlcl0pXG52YXIgZFAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsIGdPUEQgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKVxuICAsIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCBjcmVhdGVEZXNjICAgICA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKVxuICAsIGFuT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBpc09iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgVi8qLCByZWNlaXZlciovKXtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDQgPyB0YXJnZXQgOiBhcmd1bWVudHNbM11cbiAgICAsIG93bkRlc2MgID0gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KVxuICAgICwgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYoIW93bkRlc2Mpe1xuICAgIGlmKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpe1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYoaGFzKG93bkRlc2MsICd2YWx1ZScpKXtcbiAgICBpZihvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKXJldHVybiBmYWxzZTtcbiAgICBleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSB8fCBjcmVhdGVEZXNjKDApO1xuICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG93bkRlc2Muc2V0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IChvd25EZXNjLnNldC5jYWxsKHJlY2VpdmVyLCBWKSwgdHJ1ZSk7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtzZXQ6IHNldH0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.regexp.constructor.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , inheritIfRequired = __webpack_require__(\"./node_modules/core-js/modules/_inherit-if-required.js\")\n , dP = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\").f\n , gOPN = __webpack_require__(\"./node_modules/core-js/modules/_object-gopn.js\").f\n , isRegExp = __webpack_require__(\"./node_modules/core-js/modules/_is-regexp.js\")\n , $flags = __webpack_require__(\"./node_modules/core-js/modules/_flags.js\")\n , $RegExp = global.RegExp\n , Base = $RegExp\n , proto = $RegExp.prototype\n , re1 = /a/g\n , re2 = /a/g\n // \"new\" creates a new object, old webkit buggy here\n , CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif(__webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\") && (!CORRECT_NEW || __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n re2[__webpack_require__(\"./node_modules/core-js/modules/_wks.js\")('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))){\n $RegExp = function RegExp(p, f){\n var tiRE = this instanceof $RegExp\n , piRE = isRegExp(p)\n , fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function(key){\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function(){ return Base[key]; },\n set: function(it){ Base[key] = it; }\n });\n };\n for(var keys = gOPN(Base), i = 0; keys.length > i; )proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n __webpack_require__(\"./node_modules/core-js/modules/_redefine.js\")(global, 'RegExp', $RegExp);\n}\n\n__webpack_require__(\"./node_modules/core-js/modules/_set-species.js\")('RegExp');//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzPzBkM2MiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKVxuICAsIGRQICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZlxuICAsIGdPUE4gICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mXG4gICwgaXNSZWdFeHAgICAgICAgICAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKVxuICAsICRmbGFncyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fZmxhZ3MnKVxuICAsICRSZWdFeHAgICAgICAgICAgID0gZ2xvYmFsLlJlZ0V4cFxuICAsIEJhc2UgICAgICAgICAgICAgID0gJFJlZ0V4cFxuICAsIHByb3RvICAgICAgICAgICAgID0gJFJlZ0V4cC5wcm90b3R5cGVcbiAgLCByZTEgICAgICAgICAgICAgICA9IC9hL2dcbiAgLCByZTIgICAgICAgICAgICAgICA9IC9hL2dcbiAgLy8gXCJuZXdcIiBjcmVhdGVzIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdneSBoZXJlXG4gICwgQ09SUkVDVF9ORVcgICAgICAgPSBuZXcgJFJlZ0V4cChyZTEpICE9PSByZTE7XG5cbmlmKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJlMltyZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKV0gPSBmYWxzZTtcbiAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgcmV0dXJuICRSZWdFeHAocmUxKSAhPSByZTEgfHwgJFJlZ0V4cChyZTIpID09IHJlMiB8fCAkUmVnRXhwKHJlMSwgJ2knKSAhPSAnL2EvaSc7XG59KSkpe1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpe1xuICAgIHZhciB0aVJFID0gdGhpcyBpbnN0YW5jZW9mICRSZWdFeHBcbiAgICAgICwgcGlSRSA9IGlzUmVnRXhwKHApXG4gICAgICAsIGZpVSAgPSBmID09PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICF0aVJFICYmIHBpUkUgJiYgcC5jb25zdHJ1Y3RvciA9PT0gJFJlZ0V4cCAmJiBmaVUgPyBwXG4gICAgICA6IGluaGVyaXRJZlJlcXVpcmVkKENPUlJFQ1RfTkVXXG4gICAgICAgID8gbmV3IEJhc2UocGlSRSAmJiAhZmlVID8gcC5zb3VyY2UgOiBwLCBmKVxuICAgICAgICA6IEJhc2UoKHBpUkUgPSBwIGluc3RhbmNlb2YgJFJlZ0V4cCkgPyBwLnNvdXJjZSA6IHAsIHBpUkUgJiYgZmlVID8gJGZsYWdzLmNhbGwocCkgOiBmKVxuICAgICAgLCB0aVJFID8gdGhpcyA6IHByb3RvLCAkUmVnRXhwKTtcbiAgfTtcbiAgdmFyIHByb3h5ID0gZnVuY3Rpb24oa2V5KXtcbiAgICBrZXkgaW4gJFJlZ0V4cCB8fCBkUCgkUmVnRXhwLCBrZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKXsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24oaXQpeyBCYXNlW2tleV0gPSBpdDsgfVxuICAgIH0pO1xuICB9O1xuICBmb3IodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOyApcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.regexp.flags.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// 21.2.5.3 get RegExp.prototype.flags()\nif(__webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\") && /./g.flags != 'g')__webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\").f(RegExp.prototype, 'flags', {\n configurable: true,\n get: __webpack_require__(\"./node_modules/core-js/modules/_flags.js\")\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzPzgzYjQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJylyZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlcXVpcmUoJy4vX2ZsYWdzJylcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.regexp.match.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// @@match logic\n__webpack_require__(\"./node_modules/core-js/modules/_fix-re-wks.js\")('match', 1, function(defined, MATCH, $match){\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp){\n 'use strict';\n var O = defined(this)\n , fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzPzgwYzAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uKGRlZmluZWQsIE1BVENILCAkbWF0Y2gpe1xuICAvLyAyMS4xLjMuMTEgU3RyaW5nLnByb3RvdHlwZS5tYXRjaChyZWdleHApXG4gIHJldHVybiBbZnVuY3Rpb24gbWF0Y2gocmVnZXhwKXtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgdmFyIE8gID0gZGVmaW5lZCh0aGlzKVxuICAgICAgLCBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbTUFUQ0hdO1xuICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICB9LCAkbWF0Y2hdO1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.regexp.replace.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// @@replace logic\n__webpack_require__(\"./node_modules/core-js/modules/_fix-re-wks.js\")('replace', 2, function(defined, REPLACE, $replace){\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue){\n 'use strict';\n var O = defined(this)\n , fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qcz9kZDE5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBAcmVwbGFjZSBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24oZGVmaW5lZCwgUkVQTEFDRSwgJHJlcGxhY2Upe1xuICAvLyAyMS4xLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpXG4gIHJldHVybiBbZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKXtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgdmFyIE8gID0gZGVmaW5lZCh0aGlzKVxuICAgICAgLCBmbiA9IHNlYXJjaFZhbHVlID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlYXJjaFZhbHVlW1JFUExBQ0VdO1xuICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGZuLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgIDogJHJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICB9LCAkcmVwbGFjZV07XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.regexp.search.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// @@search logic\n__webpack_require__(\"./node_modules/core-js/modules/_fix-re-wks.js\")('search', 1, function(defined, SEARCH, $search){\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp){\n 'use strict';\n var O = defined(this)\n , fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2guanM/YWZmNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbihkZWZpbmVkLCBTRUFSQ0gsICRzZWFyY2gpe1xuICAvLyAyMS4xLjMuMTUgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2gocmVnZXhwKVxuICByZXR1cm4gW2Z1bmN0aW9uIHNlYXJjaChyZWdleHApe1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICB2YXIgTyAgPSBkZWZpbmVkKHRoaXMpXG4gICAgICAsIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgfSwgJHNlYXJjaF07XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2guanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.regexp.split.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("// @@split logic\n__webpack_require__(\"./node_modules/core-js/modules/_fix-re-wks.js\")('split', 2, function(defined, SPLIT, $split){\n 'use strict';\n var isRegExp = __webpack_require__(\"./node_modules/core-js/modules/_is-regexp.js\")\n , _split = $split\n , $push = [].push\n , $SPLIT = 'split'\n , LENGTH = 'length'\n , LAST_INDEX = 'lastIndex';\n if(\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ){\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function(separator, limit){\n var string = String(this);\n if(separator === undefined && limit === 0)return [];\n // If `separator` is not a regex, use native split\n if(!isRegExp(separator))return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if(!NPCG)separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while(match = separatorCopy.exec(string)){\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if(lastIndex > lastLastIndex){\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n if(!NPCG && match[LENGTH] > 1)match[0].replace(separator2, function(){\n for(i = 1; i < arguments[LENGTH] - 2; i++)if(arguments[i] === undefined)match[i] = undefined;\n });\n if(match[LENGTH] > 1 && match.index < string[LENGTH])$push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if(output[LENGTH] >= splitLimit)break;\n }\n if(separatorCopy[LAST_INDEX] === match.index)separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if(lastLastIndex === string[LENGTH]){\n if(lastLength || !separatorCopy.test(''))output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if('0'[$SPLIT](undefined, 0)[LENGTH]){\n $split = function(separator, limit){\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit){\n var O = defined(this)\n , fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzPzRhMDIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uKGRlZmluZWQsIFNQTElULCAkc3BsaXQpe1xuICAndXNlIHN0cmljdCc7XG4gIHZhciBpc1JlZ0V4cCAgID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJylcbiAgICAsIF9zcGxpdCAgICAgPSAkc3BsaXRcbiAgICAsICRwdXNoICAgICAgPSBbXS5wdXNoXG4gICAgLCAkU1BMSVQgICAgID0gJ3NwbGl0J1xuICAgICwgTEVOR1RIICAgICA9ICdsZW5ndGgnXG4gICAgLCBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG4gIGlmKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApe1xuICAgIHZhciBOUENHID0gLygpPz8vLmV4ZWMoJycpWzFdID09PSB1bmRlZmluZWQ7IC8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwXG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgJHNwbGl0ID0gZnVuY3Rpb24oc2VwYXJhdG9yLCBsaW1pdCl7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmKCFpc1JlZ0V4cChzZXBhcmF0b3IpKXJldHVybiBfc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IDQyOTQ5NjcyOTUgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIHNlcGFyYXRvcjIsIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGgsIGk7XG4gICAgICAvLyBEb2Vzbid0IG5lZWQgZmxhZ3MgZ3ksIGJ1dCB0aGV5IGRvbid0IGh1cnRcbiAgICAgIGlmKCFOUENHKXNlcGFyYXRvcjIgPSBuZXcgUmVnRXhwKCdeJyArIHNlcGFyYXRvckNvcHkuc291cmNlICsgJyQoPyFcXFxccyknLCBmbGFncyk7XG4gICAgICB3aGlsZShtYXRjaCA9IHNlcGFyYXRvckNvcHkuZXhlYyhzdHJpbmcpKXtcbiAgICAgICAgLy8gYHNlcGFyYXRvckNvcHkubGFzdEluZGV4YCBpcyBub3QgcmVsaWFibGUgY3Jvc3MtYnJvd3NlclxuICAgICAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgIGlmKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpe1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgIGZvciBOUENHXG4gICAgICAgICAgaWYoIU5QQ0cgJiYgbWF0Y2hbTEVOR1RIXSA+IDEpbWF0Y2hbMF0ucmVwbGFjZShzZXBhcmF0b3IyLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgZm9yKGkgPSAxOyBpIDwgYXJndW1lbnRzW0xFTkdUSF0gLSAyOyBpKyspaWYoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZihsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSl7XG4gICAgICAgIGlmKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSl7XG4gICAgJHNwbGl0ID0gZnVuY3Rpb24oc2VwYXJhdG9yLCBsaW1pdCl7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6IF9zcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH1cbiAgLy8gMjEuMS4zLjE3IFN0cmluZy5wcm90b3R5cGUuc3BsaXQoc2VwYXJhdG9yLCBsaW1pdClcbiAgcmV0dXJuIFtmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KXtcbiAgICB2YXIgTyAgPSBkZWZpbmVkKHRoaXMpXG4gICAgICAsIGZuID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpIDogJHNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgfSwgJHNwbGl0XTtcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.regexp.to-string.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n__webpack_require__(\"./node_modules/core-js/modules/es6.regexp.flags.js\");\nvar anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , $flags = __webpack_require__(\"./node_modules/core-js/modules/_flags.js\")\n , DESCRIPTORS = __webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\")\n , TO_STRING = 'toString'\n , $toString = /./[TO_STRING];\n\nvar define = function(fn){\n __webpack_require__(\"./node_modules/core-js/modules/_redefine.js\")(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif(__webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){ return $toString.call({source: 'a', flags: 'b'}) != '/a/b'; })){\n define(function toString(){\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if($toString.name != TO_STRING){\n define(function toString(){\n return $toString.call(this);\n });\n}//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanM/YzE5OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnZhciBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgJGZsYWdzICAgICAgPSByZXF1aXJlKCcuL19mbGFncycpXG4gICwgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpXG4gICwgVE9fU1RSSU5HICAgPSAndG9TdHJpbmcnXG4gICwgJHRvU3RyaW5nICAgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uKGZuKXtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHtzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJ30pICE9ICcvYS9iJzsgfSkpe1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKXtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZigkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpe1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKXtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.set.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar strong = __webpack_require__(\"./node_modules/core-js/modules/_collection-strong.js\");\n\n// 23.2 Set Objects\nmodule.exports = __webpack_require__(\"./node_modules/core-js/modules/_collection.js\")('Set', function(get){\n return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value){\n return strong.def(this, value = value === 0 ? 0 : value, value);\n }\n}, strong);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzPzk4YjUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKCdTZXQnLCBmdW5jdGlvbihnZXQpe1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCl7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4yLjMuMSBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpe1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zZXQuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.anchor.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// B.2.3.2 String.prototype.anchor(name)\n__webpack_require__(\"./node_modules/core-js/modules/_string-html.js\")('anchor', function(createHTML){\n return function anchor(name){\n return createHTML(this, 'a', 'name', name);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3IuanM/OGNhMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4yIFN0cmluZy5wcm90b3R5cGUuYW5jaG9yKG5hbWUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdhbmNob3InLCBmdW5jdGlvbihjcmVhdGVIVE1MKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKXtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICduYW1lJywgbmFtZSk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3IuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.big.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// B.2.3.3 String.prototype.big()\n__webpack_require__(\"./node_modules/core-js/modules/_string-html.js\")('big', function(createHTML){\n return function big(){\n return createHTML(this, 'big', '', '');\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5iaWcuanM/ZWIzMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4zIFN0cmluZy5wcm90b3R5cGUuYmlnKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JpZycsIGZ1bmN0aW9uKGNyZWF0ZUhUTUwpe1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCl7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5iaWcuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.blink.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// B.2.3.4 String.prototype.blink()\n__webpack_require__(\"./node_modules/core-js/modules/_string-html.js\")('blink', function(createHTML){\n return function blink(){\n return createHTML(this, 'blink', '', '');\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzPzJkZmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNCBTdHJpbmcucHJvdG90eXBlLmJsaW5rKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JsaW5rJywgZnVuY3Rpb24oY3JlYXRlSFRNTCl7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpe1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdibGluaycsICcnLCAnJyk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ibGluay5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.bold.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// B.2.3.5 String.prototype.bold()\n__webpack_require__(\"./node_modules/core-js/modules/_string-html.js\")('bold', function(createHTML){\n return function bold(){\n return createHTML(this, 'b', '', '');\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcz9jZWU4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbihjcmVhdGVIVE1MKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKXtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.code-point-at.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $at = __webpack_require__(\"./node_modules/core-js/modules/_string-at.js\")(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos){\n return $at(this, pos);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdC5qcz9jNzlkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCAkYXQgICAgID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKXtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.ends-with.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\")\n , context = __webpack_require__(\"./node_modules/core-js/modules/_string-context.js\")\n , ENDS_WITH = 'endsWith'\n , $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(\"./node_modules/core-js/modules/_fails-is-regexp.js\")(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /*, endPosition = @length */){\n var that = context(this, searchString, ENDS_WITH)\n , endPosition = arguments.length > 1 ? arguments[1] : undefined\n , len = toLength(that.length)\n , end = endPosition === undefined ? len : Math.min(toLength(endPosition), len)\n , search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanM/NjNkZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCB0b0xlbmd0aCAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGNvbnRleHQgICA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0JylcbiAgLCBFTkRTX1dJVEggPSAnZW5kc1dpdGgnXG4gICwgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pe1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIEVORFNfV0lUSClcbiAgICAgICwgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICAgLCBsZW4gICAgPSB0b0xlbmd0aCh0aGF0Lmxlbmd0aClcbiAgICAgICwgZW5kICAgID0gZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IGxlbiA6IE1hdGgubWluKHRvTGVuZ3RoKGVuZFBvc2l0aW9uKSwgbGVuKVxuICAgICAgLCBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.fixed.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// B.2.3.6 String.prototype.fixed()\n__webpack_require__(\"./node_modules/core-js/modules/_string-html.js\")('fixed', function(createHTML){\n return function fixed(){\n return createHTML(this, 'tt', '', '');\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZml4ZWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzPzA0MWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNiBTdHJpbmcucHJvdG90eXBlLmZpeGVkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZpeGVkJywgZnVuY3Rpb24oY3JlYXRlSFRNTCl7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpe1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICd0dCcsICcnLCAnJyk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZml4ZWQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.fontcolor.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// B.2.3.7 String.prototype.fontcolor(color)\n__webpack_require__(\"./node_modules/core-js/modules/_string-html.js\")('fontcolor', function(createHTML){\n return function fontcolor(color){\n return createHTML(this, 'font', 'color', color);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3IuanM/OTdkNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24oY3JlYXRlSFRNTCl7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3Ipe1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3IuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.fontsize.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// B.2.3.8 String.prototype.fontsize(size)\n__webpack_require__(\"./node_modules/core-js/modules/_string-html.js\")('fontsize', function(createHTML){\n return function fontsize(size){\n return createHTML(this, 'font', 'size', size);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udHNpemUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzPzJjZWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOCBTdHJpbmcucHJvdG90eXBlLmZvbnRzaXplKHNpemUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmb250c2l6ZScsIGZ1bmN0aW9uKGNyZWF0ZUhUTUwpe1xuICByZXR1cm4gZnVuY3Rpb24gZm9udHNpemUoc2l6ZSl7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnc2l6ZScsIHNpemUpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udHNpemUuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.from-code-point.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , toIndex = __webpack_require__(\"./node_modules/core-js/modules/_to-index.js\")\n , fromCharCode = String.fromCharCode\n , $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars\n var res = []\n , aLen = arguments.length\n , i = 0\n , code;\n while(aLen > i){\n code = +arguments[i++];\n if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanM/MGIzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIHRvSW5kZXggICAgICAgID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKVxuICAsIGZyb21DaGFyQ29kZSAgID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuICAsICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHJlcyAgPSBbXVxuICAgICAgLCBhTGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgLCBpICAgID0gMFxuICAgICAgLCBjb2RlO1xuICAgIHdoaWxlKGFMZW4gPiBpKXtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZih0b0luZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSl0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.includes.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , context = __webpack_require__(\"./node_modules/core-js/modules/_string-context.js\")\n , INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(\"./node_modules/core-js/modules/_fails-is-regexp.js\")(INCLUDES), 'String', {\n includes: function includes(searchString /*, position = 0 */){\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzPzk1ZjUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgY29udGV4dCAgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpXG4gICwgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiwgcG9zaXRpb24gPSAwICovKXtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.italics.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// B.2.3.9 String.prototype.italics()\n__webpack_require__(\"./node_modules/core-js/modules/_string-html.js\")('italics', function(createHTML){\n return function italics(){\n return createHTML(this, 'i', '', '');\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcy5qcz9jY2RhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbihjcmVhdGVIVE1MKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIGl0YWxpY3MoKXtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.iterator.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $at = __webpack_require__(\"./node_modules/core-js/modules/_string-at.js\")(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(\"./node_modules/core-js/modules/_iter-define.js\")(String, 'String', function(iterated){\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , index = this._i\n , point;\n if(index >= O.length)return {value: undefined, done: true};\n point = $at(O, index);\n this._i += point.length;\n return {value: point, done: false};\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzPzIzZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCAgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbihpdGVyYXRlZCl7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uKCl7XG4gIHZhciBPICAgICA9IHRoaXMuX3RcbiAgICAsIGluZGV4ID0gdGhpcy5faVxuICAgICwgcG9pbnQ7XG4gIGlmKGluZGV4ID49IE8ubGVuZ3RoKXJldHVybiB7dmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZX07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7dmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZX07XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.link.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// B.2.3.10 String.prototype.link(url)\n__webpack_require__(\"./node_modules/core-js/modules/_string-html.js\")('link', function(createHTML){\n return function link(url){\n return createHTML(this, 'a', 'href', url);\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcubGluay5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcubGluay5qcz8yOWY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24oY3JlYXRlSFRNTCl7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCl7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.raw.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , toIObject = __webpack_require__(\"./node_modules/core-js/modules/_to-iobject.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\");\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite){\n var tpl = toIObject(callSite.raw)\n , len = toLength(tpl.length)\n , aLen = arguments.length\n , res = []\n , i = 0;\n while(len > i){\n res.push(String(tpl[i++]));\n if(i < aLen)res.push(String(arguments[i]));\n } return res.join('');\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yYXcuanM/YmRkOCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCB0b0xlbmd0aCAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi40IFN0cmluZy5yYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpXG4gIHJhdzogZnVuY3Rpb24gcmF3KGNhbGxTaXRlKXtcbiAgICB2YXIgdHBsICA9IHRvSU9iamVjdChjYWxsU2l0ZS5yYXcpXG4gICAgICAsIGxlbiAgPSB0b0xlbmd0aCh0cGwubGVuZ3RoKVxuICAgICAgLCBhTGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgLCByZXMgID0gW11cbiAgICAgICwgaSAgICA9IDA7XG4gICAgd2hpbGUobGVuID4gaSl7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmKGkgPCBhTGVuKXJlcy5wdXNoKFN0cmluZyhhcmd1bWVudHNbaV0pKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yYXcuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.repeat.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: __webpack_require__(\"./node_modules/core-js/modules/_string-repeat.js\")\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanM/NTBmMyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.small.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// B.2.3.11 String.prototype.small()\n__webpack_require__(\"./node_modules/core-js/modules/_string-html.js\")('small', function(createHTML){\n return function small(){\n return createHTML(this, 'small', '', '');\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzP2NkNDAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTEgU3RyaW5nLnByb3RvdHlwZS5zbWFsbCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzbWFsbCcsIGZ1bmN0aW9uKGNyZWF0ZUhUTUwpe1xuICByZXR1cm4gZnVuY3Rpb24gc21hbGwoKXtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc21hbGwnLCAnJywgJycpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.starts-with.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\")\n , context = __webpack_require__(\"./node_modules/core-js/modules/_string-context.js\")\n , STARTS_WITH = 'startsWith'\n , $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(\"./node_modules/core-js/modules/_fails-is-regexp.js\")(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /*, position = 0 */){\n var that = context(this, searchString, STARTS_WITH)\n , index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length))\n , search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzPzY3MmYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjE4IFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgWywgcG9zaXRpb24gXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgdG9MZW5ndGggICAgPSByZXF1aXJlKCcuL190by1sZW5ndGgnKVxuICAsIGNvbnRleHQgICAgID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKVxuICAsIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnXG4gICwgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiwgcG9zaXRpb24gPSAwICovKXtcbiAgICB2YXIgdGhhdCAgID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKVxuICAgICAgLCBpbmRleCAgPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKVxuICAgICAgLCBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJHN0YXJ0c1dpdGhcbiAgICAgID8gJHN0YXJ0c1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGluZGV4KVxuICAgICAgOiB0aGF0LnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGguanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.strike.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// B.2.3.12 String.prototype.strike()\n__webpack_require__(\"./node_modules/core-js/modules/_string-html.js\")('strike', function(createHTML){\n return function strike(){\n return createHTML(this, 'strike', '', '');\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdHJpa2UuanM/MWI4MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMiBTdHJpbmcucHJvdG90eXBlLnN0cmlrZSgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdHJpa2UnLCBmdW5jdGlvbihjcmVhdGVIVE1MKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpe1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdHJpa2UnLCAnJywgJycpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdHJpa2UuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.sub.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// B.2.3.13 String.prototype.sub()\n__webpack_require__(\"./node_modules/core-js/modules/_string-html.js\")('sub', function(createHTML){\n return function sub(){\n return createHTML(this, 'sub', '', '');\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdWIuanM/MDRlYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMyBTdHJpbmcucHJvdG90eXBlLnN1YigpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdWInLCBmdW5jdGlvbihjcmVhdGVIVE1MKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1Yigpe1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdWInLCAnJywgJycpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdWIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.sup.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// B.2.3.14 String.prototype.sup()\n__webpack_require__(\"./node_modules/core-js/modules/_string-html.js\")('sup', function(createHTML){\n return function sup(){\n return createHTML(this, 'sup', '', '');\n }\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdXAuanM/YTdmZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xNCBTdHJpbmcucHJvdG90eXBlLnN1cCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdXAnLCBmdW5jdGlvbihjcmVhdGVIVE1MKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpe1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdXAnLCAnJywgJycpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdXAuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.string.trim.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// 21.1.3.25 String.prototype.trim()\n__webpack_require__(\"./node_modules/core-js/modules/_string-trim.js\")('trim', function($trim){\n return function trim(){\n return $trim(this, 3);\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcz80YmUxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uKCR0cmltKXtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKXtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.symbol.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(\"./node_modules/core-js/modules/_global.js\")\n , has = __webpack_require__(\"./node_modules/core-js/modules/_has.js\")\n , DESCRIPTORS = __webpack_require__(\"./node_modules/core-js/modules/_descriptors.js\")\n , $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , redefine = __webpack_require__(\"./node_modules/core-js/modules/_redefine.js\")\n , META = __webpack_require__(\"./node_modules/core-js/modules/_meta.js\").KEY\n , $fails = __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")\n , shared = __webpack_require__(\"./node_modules/core-js/modules/_shared.js\")\n , setToStringTag = __webpack_require__(\"./node_modules/core-js/modules/_set-to-string-tag.js\")\n , uid = __webpack_require__(\"./node_modules/core-js/modules/_uid.js\")\n , wks = __webpack_require__(\"./node_modules/core-js/modules/_wks.js\")\n , wksExt = __webpack_require__(\"./node_modules/core-js/modules/_wks-ext.js\")\n , wksDefine = __webpack_require__(\"./node_modules/core-js/modules/_wks-define.js\")\n , keyOf = __webpack_require__(\"./node_modules/core-js/modules/_keyof.js\")\n , enumKeys = __webpack_require__(\"./node_modules/core-js/modules/_enum-keys.js\")\n , isArray = __webpack_require__(\"./node_modules/core-js/modules/_is-array.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , toIObject = __webpack_require__(\"./node_modules/core-js/modules/_to-iobject.js\")\n , toPrimitive = __webpack_require__(\"./node_modules/core-js/modules/_to-primitive.js\")\n , createDesc = __webpack_require__(\"./node_modules/core-js/modules/_property-desc.js\")\n , _create = __webpack_require__(\"./node_modules/core-js/modules/_object-create.js\")\n , gOPNExt = __webpack_require__(\"./node_modules/core-js/modules/_object-gopn-ext.js\")\n , $GOPD = __webpack_require__(\"./node_modules/core-js/modules/_object-gopd.js\")\n , $DP = __webpack_require__(\"./node_modules/core-js/modules/_object-dp.js\")\n , $keys = __webpack_require__(\"./node_modules/core-js/modules/_object-keys.js\")\n , gOPD = $GOPD.f\n , dP = $DP.f\n , gOPN = gOPNExt.f\n , $Symbol = global.Symbol\n , $JSON = global.JSON\n , _stringify = $JSON && $JSON.stringify\n , PROTOTYPE = 'prototype'\n , HIDDEN = wks('_hidden')\n , TO_PRIMITIVE = wks('toPrimitive')\n , isEnum = {}.propertyIsEnumerable\n , SymbolRegistry = shared('symbol-registry')\n , AllSymbols = shared('symbols')\n , OPSymbols = shared('op-symbols')\n , ObjectProto = Object[PROTOTYPE]\n , USE_NATIVE = typeof $Symbol == 'function'\n , QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n return _create(dP({}, 'a', {\n get: function(){ return dP(this, 'a', {value: 7}).a; }\n })).a != 7;\n}) ? function(it, key, D){\n var protoDesc = gOPD(ObjectProto, key);\n if(protoDesc)delete ObjectProto[key];\n dP(it, key, D);\n if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function(tag){\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){\n return typeof it == 'symbol';\n} : function(it){\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D){\n if(it === ObjectProto)$defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if(has(AllSymbols, key)){\n if(!D.enumerable){\n if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n D = _create(D, {enumerable: createDesc(0, false)});\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P){\n anObject(it);\n var keys = enumKeys(P = toIObject(P))\n , i = 0\n , l = keys.length\n , key;\n while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P){\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n it = toIObject(it);\n key = toPrimitive(key, true);\n if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;\n var D = gOPD(it, key);\n if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n var names = gOPN(toIObject(it))\n , result = []\n , i = 0\n , key;\n while(names.length > i){\n if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n var IS_OP = it === ObjectProto\n , names = gOPN(IS_OP ? OPSymbols : toIObject(it))\n , result = []\n , i = 0\n , key;\n while(names.length > i){\n if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif(!USE_NATIVE){\n $Symbol = function Symbol(){\n if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function(value){\n if(this === ObjectProto)$set.call(OPSymbols, value);\n if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString(){\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(\"./node_modules/core-js/modules/_object-gopn.js\").f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(\"./node_modules/core-js/modules/_object-pie.js\").f = $propertyIsEnumerable;\n __webpack_require__(\"./node_modules/core-js/modules/_object-gops.js\").f = $getOwnPropertySymbols;\n\n if(DESCRIPTORS && !__webpack_require__(\"./node_modules/core-js/modules/_library.js\")){\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function(name){\n return wrap(wks(name));\n }\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});\n\nfor(var symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);\n\nfor(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function(key){\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(key){\n if(isSymbol(key))return keyOf(SymbolRegistry, key);\n throw TypeError(key + ' is not a symbol!');\n },\n useSetter: function(){ setter = true; },\n useSimple: function(){ setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it){\n if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n var args = [it]\n , i = 1\n , replacer, $replacer;\n while(arguments.length > i)args.push(arguments[i++]);\n replacer = args[1];\n if(typeof replacer == 'function')$replacer = replacer;\n if($replacer || !isArray(replacer))replacer = function(key, value){\n if($replacer)value = $replacer.call(this, key, value);\n if(!isSymbol(value))return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(\"./node_modules/core-js/modules/_hide.js\")($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zeW1ib2wuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzP2E2NTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBoYXMgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgREVTQ1JJUFRPUlMgICAgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIHJlZGVmaW5lICAgICAgID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKVxuICAsIE1FVEEgICAgICAgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWVxuICAsICRmYWlscyAgICAgICAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKVxuICAsIHNoYXJlZCAgICAgICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkJylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCB1aWQgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX3VpZCcpXG4gICwgd2tzICAgICAgICAgICAgPSByZXF1aXJlKCcuL193a3MnKVxuICAsIHdrc0V4dCAgICAgICAgID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpXG4gICwgd2tzRGVmaW5lICAgICAgPSByZXF1aXJlKCcuL193a3MtZGVmaW5lJylcbiAgLCBrZXlPZiAgICAgICAgICA9IHJlcXVpcmUoJy4vX2tleW9mJylcbiAgLCBlbnVtS2V5cyAgICAgICA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpXG4gICwgaXNBcnJheSAgICAgICAgPSByZXF1aXJlKCcuL19pcy1hcnJheScpXG4gICwgYW5PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIHRvSU9iamVjdCAgICAgID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgdG9QcmltaXRpdmUgICAgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKVxuICAsIGNyZWF0ZURlc2MgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgX2NyZWF0ZSAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJylcbiAgLCBnT1BORXh0ICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpXG4gICwgJEdPUEQgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpXG4gICwgJERQICAgICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKVxuICAsICRrZXlzICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIGdPUEQgICAgICAgICAgID0gJEdPUEQuZlxuICAsIGRQICAgICAgICAgICAgID0gJERQLmZcbiAgLCBnT1BOICAgICAgICAgICA9IGdPUE5FeHQuZlxuICAsICRTeW1ib2wgICAgICAgID0gZ2xvYmFsLlN5bWJvbFxuICAsICRKU09OICAgICAgICAgID0gZ2xvYmFsLkpTT05cbiAgLCBfc3RyaW5naWZ5ICAgICA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeVxuICAsIFBST1RPVFlQRSAgICAgID0gJ3Byb3RvdHlwZSdcbiAgLCBISURERU4gICAgICAgICA9IHdrcygnX2hpZGRlbicpXG4gICwgVE9fUFJJTUlUSVZFICAgPSB3a3MoJ3RvUHJpbWl0aXZlJylcbiAgLCBpc0VudW0gICAgICAgICA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlXG4gICwgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpXG4gICwgQWxsU3ltYm9scyAgICAgPSBzaGFyZWQoJ3N5bWJvbHMnKVxuICAsIE9QU3ltYm9scyAgICAgID0gc2hhcmVkKCdvcC1zeW1ib2xzJylcbiAgLCBPYmplY3RQcm90byAgICA9IE9iamVjdFtQUk9UT1RZUEVdXG4gICwgVVNFX05BVElWRSAgICAgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nXG4gICwgUU9iamVjdCAgICAgICAgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24oKXsgcmV0dXJuIGRQKHRoaXMsICdhJywge3ZhbHVlOiA3fSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbihpdCwga2V5LCBEKXtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmKHByb3RvRGVzYylkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbih0YWcpe1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKXtcbiAgaWYoaXQgPT09IE9iamVjdFByb3RvKSRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmKGhhcyhBbGxTeW1ib2xzLCBrZXkpKXtcbiAgICBpZighRC5lbnVtZXJhYmxlKXtcbiAgICAgIGlmKCFoYXMoaXQsIEhJRERFTikpZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSlpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHtlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKX0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApe1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSlcbiAgICAsIGkgICAgPSAwXG4gICAgLCBsID0ga2V5cy5sZW5ndGhcbiAgICAsIGtleTtcbiAgd2hpbGUobCA+IGkpJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCl7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KXtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSl7XG4gIGl0ICA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSlyZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKUQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpe1xuICB2YXIgbmFtZXMgID0gZ09QTih0b0lPYmplY3QoaXQpKVxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGkgICAgICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSl7XG4gICAgaWYoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKXJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCl7XG4gIHZhciBJU19PUCAgPSBpdCA9PT0gT2JqZWN0UHJvdG9cbiAgICAsIG5hbWVzICA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKVxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGkgICAgICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSl7XG4gICAgaWYoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKXJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYoIVVTRV9OQVRJVkUpe1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCl7XG4gICAgaWYodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICBpZih0aGlzID09PSBPYmplY3RQcm90bykkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZihoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKXRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKXNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywge2NvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0fSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpe1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgICA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mICA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZihERVNDUklQVE9SUyAmJiAhcmVxdWlyZSgnLi9fbGlicmFyeScpKXtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24obmFtZSl7XG4gICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgfVxufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7U3ltYm9sOiAkU3ltYm9sfSk7XG5cbmZvcih2YXIgc3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBpID0gMDsgc3ltYm9scy5sZW5ndGggPiBpOyApd2tzKHN5bWJvbHNbaSsrXSk7XG5cbmZvcih2YXIgc3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGkgPSAwOyBzeW1ib2xzLmxlbmd0aCA+IGk7ICl3a3NEZWZpbmUoc3ltYm9sc1tpKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbihrZXkpe1xuICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcbiAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICB9LFxuICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioa2V5KXtcbiAgICBpZihpc1N5bWJvbChrZXkpKXJldHVybiBrZXlPZihTeW1ib2xSZWdpc3RyeSwga2V5KTtcbiAgICB0aHJvdyBUeXBlRXJyb3Ioa2V5ICsgJyBpcyBub3QgYSBzeW1ib2whJyk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24oKXsgc2V0dGVyID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbigpeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbigpe1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7YTogU30pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCl7XG4gICAgaWYoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgdmFyIGFyZ3MgPSBbaXRdXG4gICAgICAsIGkgICAgPSAxXG4gICAgICAsIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUoYXJndW1lbnRzLmxlbmd0aCA+IGkpYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYodHlwZW9mIHJlcGxhY2VyID09ICdmdW5jdGlvbicpJHJlcGxhY2VyID0gcmVwbGFjZXI7XG4gICAgaWYoJHJlcGxhY2VyIHx8ICFpc0FycmF5KHJlcGxhY2VyKSlyZXBsYWNlciA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuICAgICAgaWYoJHJlcGxhY2VyKXZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZighaXNTeW1ib2wodmFsdWUpKXJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.typed.array-buffer.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\")\n , $typed = __webpack_require__(\"./node_modules/core-js/modules/_typed.js\")\n , buffer = __webpack_require__(\"./node_modules/core-js/modules/_typed-buffer.js\")\n , anObject = __webpack_require__(\"./node_modules/core-js/modules/_an-object.js\")\n , toIndex = __webpack_require__(\"./node_modules/core-js/modules/_to-index.js\")\n , toLength = __webpack_require__(\"./node_modules/core-js/modules/_to-length.js\")\n , isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , ArrayBuffer = __webpack_require__(\"./node_modules/core-js/modules/_global.js\").ArrayBuffer\n , speciesConstructor = __webpack_require__(\"./node_modules/core-js/modules/_species-constructor.js\")\n , $ArrayBuffer = buffer.ArrayBuffer\n , $DataView = buffer.DataView\n , $isView = $typed.ABV && ArrayBuffer.isView\n , $slice = $ArrayBuffer.prototype.slice\n , VIEW = $typed.VIEW\n , ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {ArrayBuffer: $ArrayBuffer});\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it){\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * __webpack_require__(\"./node_modules/core-js/modules/_fails.js\")(function(){\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end){\n if($slice !== undefined && end === undefined)return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength\n , first = toIndex(start, len)\n , final = toIndex(end === undefined ? len : end, len)\n , result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first))\n , viewS = new $DataView(this)\n , viewT = new $DataView(result)\n , index = 0;\n while(first < final){\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\n__webpack_require__(\"./node_modules/core-js/modules/_set-species.js\")(ARRAY_BUFFER);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzPzI0YWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgICAgICA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpXG4gICwgJHR5cGVkICAgICAgID0gcmVxdWlyZSgnLi9fdHlwZWQnKVxuICAsIGJ1ZmZlciAgICAgICA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpXG4gICwgYW5PYmplY3QgICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCB0b0luZGV4ICAgICAgPSByZXF1aXJlKCcuL190by1pbmRleCcpXG4gICwgdG9MZW5ndGggICAgID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCBpc09iamVjdCAgICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIEFycmF5QnVmZmVyICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyXG4gICwgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpXG4gICwgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyXG4gICwgJERhdGFWaWV3ICAgID0gYnVmZmVyLkRhdGFWaWV3XG4gICwgJGlzVmlldyAgICAgID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXdcbiAgLCAkc2xpY2UgICAgICAgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlXG4gICwgVklFVyAgICAgICAgID0gJHR5cGVkLlZJRVdcbiAgLCBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwge0FycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXJ9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KXtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpe1xuICAgIGlmKCRzbGljZSAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKXJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuICAgID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aFxuICAgICAgLCBmaXJzdCAgPSB0b0luZGV4KHN0YXJ0LCBsZW4pXG4gICAgICAsIGZpbmFsICA9IHRvSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQsIGxlbilcbiAgICAgICwgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluYWwgLSBmaXJzdCkpXG4gICAgICAsIHZpZXdTICA9IG5ldyAkRGF0YVZpZXcodGhpcylcbiAgICAgICwgdmlld1QgID0gbmV3ICREYXRhVmlldyhyZXN1bHQpXG4gICAgICAsIGluZGV4ICA9IDA7XG4gICAgd2hpbGUoZmlyc3QgPCBmaW5hbCl7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmFycmF5LWJ1ZmZlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.typed.data-view.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("var $export = __webpack_require__(\"./node_modules/core-js/modules/_export.js\");\n$export($export.G + $export.W + $export.F * !__webpack_require__(\"./node_modules/core-js/modules/_typed.js\").ABV, {\n DataView: __webpack_require__(\"./node_modules/core-js/modules/_typed-buffer.js\").DataView\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3LmpzPzA1ZDUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3R5cGVkJykuQUJWLCB7XG4gIERhdGFWaWV3OiByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKS5EYXRhVmlld1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.typed.float32-array.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("__webpack_require__(\"./node_modules/core-js/modules/_typed-array.js\")('Float32', 4, function(init){\n return function Float32Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanM/ZThkNCJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24oaW5pdCl7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKXtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.typed.float64-array.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("__webpack_require__(\"./node_modules/core-js/modules/_typed-array.js\")('Float64', 8, function(init){\n return function Float64Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanM/MjQwMCJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24oaW5pdCl7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKXtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.typed.int16-array.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("__webpack_require__(\"./node_modules/core-js/modules/_typed-array.js\")('Int16', 2, function(init){\n return function Int16Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheS5qcz8yOTI4Il0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDE2JywgMiwgZnVuY3Rpb24oaW5pdCl7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCl7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.typed.int32-array.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("__webpack_require__(\"./node_modules/core-js/modules/_typed-array.js\")('Int32', 4, function(init){\n return function Int32Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcz81NjI3Il0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDMyJywgNCwgZnVuY3Rpb24oaW5pdCl7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCl7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.typed.int8-array.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("__webpack_require__(\"./node_modules/core-js/modules/_typed-array.js\")('Int8', 1, function(init){\n return function Int8Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXkuanM/NjM2MSJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24oaW5pdCl7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKXtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.typed.uint16-array.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("__webpack_require__(\"./node_modules/core-js/modules/_typed-array.js\")('Uint16', 2, function(init){\n return function Uint16Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzPzIzMzIiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDE2JywgMiwgZnVuY3Rpb24oaW5pdCl7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpe1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.typed.uint32-array.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("__webpack_require__(\"./node_modules/core-js/modules/_typed-array.js\")('Uint32', 4, function(init){\n return function Uint32Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzPzgyZWYiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDMyJywgNCwgZnVuY3Rpb24oaW5pdCl7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpe1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.typed.uint8-array.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("__webpack_require__(\"./node_modules/core-js/modules/_typed-array.js\")('Uint8', 1, function(init){\n return function Uint8Array(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1hcnJheS5qcz9kZDNjIl0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24oaW5pdCl7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCl7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("__webpack_require__(\"./node_modules/core-js/modules/_typed-array.js\")('Uint8', 1, function(init){\n return function Uint8ClampedArray(data, byteOffset, length){\n return init(this, data, byteOffset, length);\n };\n}, true);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanM/ZWJhMSJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uKGluaXQpe1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhDbGFtcGVkQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKXtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.weak-map.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar each = __webpack_require__(\"./node_modules/core-js/modules/_array-methods.js\")(0)\n , redefine = __webpack_require__(\"./node_modules/core-js/modules/_redefine.js\")\n , meta = __webpack_require__(\"./node_modules/core-js/modules/_meta.js\")\n , assign = __webpack_require__(\"./node_modules/core-js/modules/_object-assign.js\")\n , weak = __webpack_require__(\"./node_modules/core-js/modules/_collection-weak.js\")\n , isObject = __webpack_require__(\"./node_modules/core-js/modules/_is-object.js\")\n , getWeak = meta.getWeak\n , isExtensible = Object.isExtensible\n , uncaughtFrozenStore = weak.ufstore\n , tmp = {}\n , InternalMap;\n\nvar wrapper = function(get){\n return function WeakMap(){\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key){\n if(isObject(key)){\n var data = getWeak(key);\n if(data === true)return uncaughtFrozenStore(this).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value){\n return weak.def(this, key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = __webpack_require__(\"./node_modules/core-js/modules/_collection.js\")('WeakMap', wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){\n InternalMap = weak.getConstructor(wrapper);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function(key){\n var proto = $WeakMap.prototype\n , method = proto[key];\n redefine(proto, key, function(a, b){\n // store frozen objects on internal weakmap shim\n if(isObject(a) && !isExtensible(a)){\n if(!this._f)this._f = new InternalMap;\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcz8yNzU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBlYWNoICAgICAgICAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMClcbiAgLCByZWRlZmluZSAgICAgPSByZXF1aXJlKCcuL19yZWRlZmluZScpXG4gICwgbWV0YSAgICAgICAgID0gcmVxdWlyZSgnLi9fbWV0YScpXG4gICwgYXNzaWduICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpXG4gICwgd2VhayAgICAgICAgID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJylcbiAgLCBpc09iamVjdCAgICAgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGdldFdlYWsgICAgICA9IG1ldGEuZ2V0V2Vha1xuICAsIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGVcbiAgLCB1bmNhdWdodEZyb3plblN0b3JlID0gd2Vhay51ZnN0b3JlXG4gICwgdG1wICAgICAgICAgID0ge31cbiAgLCBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbihnZXQpe1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpe1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSl7XG4gICAgaWYoaXNPYmplY3Qoa2V5KSl7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmKGRhdGEgPT09IHRydWUpcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhpcykuZ2V0KGtleSk7XG4gICAgICByZXR1cm4gZGF0YSA/IGRhdGFbdGhpcy5faV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9LFxuICAvLyAyMy4zLjMuNSBXZWFrTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSl7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHRoaXMsIGtleSwgdmFsdWUpO1xuICB9XG59O1xuXG4vLyAyMy4zIFdlYWtNYXAgT2JqZWN0c1xudmFyICRXZWFrTWFwID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoJ1dlYWtNYXAnLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYobmV3ICRXZWFrTWFwKCkuc2V0KChPYmplY3QuZnJlZXplIHx8IE9iamVjdCkodG1wKSwgNykuZ2V0KHRtcCkgIT0gNyl7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyKTtcbiAgYXNzaWduKEludGVybmFsTWFwLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gIG1ldGEuTkVFRCA9IHRydWU7XG4gIGVhY2goWydkZWxldGUnLCAnaGFzJywgJ2dldCcsICdzZXQnXSwgZnVuY3Rpb24oa2V5KXtcbiAgICB2YXIgcHJvdG8gID0gJFdlYWtNYXAucHJvdG90eXBlXG4gICAgICAsIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24oYSwgYil7XG4gICAgICAvLyBzdG9yZSBmcm96ZW4gb2JqZWN0cyBvbiBpbnRlcm5hbCB3ZWFrbWFwIHNoaW1cbiAgICAgIGlmKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpe1xuICAgICAgICBpZighdGhpcy5fZil0aGlzLl9mID0gbmV3IEludGVybmFsTWFwO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZltrZXldKGEsIGIpO1xuICAgICAgICByZXR1cm4ga2V5ID09ICdzZXQnID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIC8vIHN0b3JlIGFsbCB0aGUgcmVzdCBvbiBuYXRpdmUgd2Vha21hcFxuICAgICAgfSByZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgYSwgYik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstbWFwLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstbWFwLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/core-js/modules/es6.weak-set.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar weak = __webpack_require__(\"./node_modules/core-js/modules/_collection-weak.js\");\n\n// 23.4 WeakSet Objects\n__webpack_require__(\"./node_modules/core-js/modules/_collection.js\")('WeakSet', function(get){\n return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value){\n return weak.def(this, value, true);\n }\n}, weak, false, true);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLXNldC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLXNldC5qcz83NzllIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoJ1dlYWtTZXQnLCBmdW5jdGlvbihnZXQpe1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha1NldCgpeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSl7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHRoaXMsIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstc2V0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstc2V0LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/process/browser.js": +/***/ (function(module, exports) { + +eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9wcm9jZXNzL2Jyb3dzZXIuanM/ODJlNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Byb2Nlc3MvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/reflect-metadata/Reflect.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("/* WEBPACK VAR INJECTION */(function(process, global) {/*! *****************************************************************************\r\nCopyright (C) Microsoft. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\nvar Reflect;\r\n(function (Reflect) {\r\n \"use strict\";\r\n var hasOwn = Object.prototype.hasOwnProperty;\r\n // feature test for Symbol support\r\n var supportsSymbol = typeof Symbol === \"function\";\r\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\r\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\r\n var HashMap;\r\n (function (HashMap) {\r\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\r\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\r\n var downLevel = !supportsCreate && !supportsProto;\r\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\r\n HashMap.create = supportsCreate\r\n ? function () { return MakeDictionary(Object.create(null)); }\r\n : supportsProto\r\n ? function () { return MakeDictionary({ __proto__: null }); }\r\n : function () { return MakeDictionary({}); };\r\n HashMap.has = downLevel\r\n ? function (map, key) { return hasOwn.call(map, key); }\r\n : function (map, key) { return key in map; };\r\n HashMap.get = downLevel\r\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\r\n : function (map, key) { return map[key]; };\r\n })(HashMap || (HashMap = {}));\r\n // Load global or shim versions of Map, Set, and WeakMap\r\n var functionPrototype = Object.getPrototypeOf(Function);\r\n var usePolyfill = typeof process === \"object\" && process.env && process.env[\"REFLECT_METADATA_USE_MAP_POLYFILL\"] === \"true\";\r\n var _Map = !usePolyfill && typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\r\n var _Set = !usePolyfill && typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\r\n var _WeakMap = !usePolyfill && typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\r\n // [[Metadata]] internal slot\r\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\r\n var Metadata = new _WeakMap();\r\n /**\r\n * Applies a set of decorators to a property of a target object.\r\n * @param decorators An array of decorators.\r\n * @param target The target object.\r\n * @param propertyKey (Optional) The property key to decorate.\r\n * @param attributes (Optional) The property descriptor for the target key.\r\n * @remarks Decorators are applied in reverse order.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * Example = Reflect.decorate(decoratorsArray, Example);\r\n *\r\n * // property (on constructor)\r\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * Object.defineProperty(Example, \"staticMethod\",\r\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\r\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\r\n *\r\n * // method (on prototype)\r\n * Object.defineProperty(Example.prototype, \"method\",\r\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\r\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\r\n *\r\n */\r\n function decorate(decorators, target, propertyKey, attributes) {\r\n if (!IsUndefined(propertyKey)) {\r\n if (!IsArray(decorators))\r\n throw new TypeError();\r\n if (!IsObject(target))\r\n throw new TypeError();\r\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\r\n throw new TypeError();\r\n if (IsNull(attributes))\r\n attributes = undefined;\r\n propertyKey = ToPropertyKey(propertyKey);\r\n return DecorateProperty(decorators, target, propertyKey, attributes);\r\n }\r\n else {\r\n if (!IsArray(decorators))\r\n throw new TypeError();\r\n if (!IsConstructor(target))\r\n throw new TypeError();\r\n return DecorateConstructor(decorators, target);\r\n }\r\n }\r\n Reflect.decorate = decorate;\r\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\r\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\r\n /**\r\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\r\n * @param metadataKey The key for the metadata entry.\r\n * @param metadataValue The value for the metadata entry.\r\n * @returns A decorator function.\r\n * @remarks\r\n * If `metadataKey` is already defined for the target and target key, the\r\n * metadataValue for that key will be overwritten.\r\n * @example\r\n *\r\n * // constructor\r\n * @Reflect.metadata(key, value)\r\n * class Example {\r\n * }\r\n *\r\n * // property (on constructor, TypeScript only)\r\n * class Example {\r\n * @Reflect.metadata(key, value)\r\n * static staticProperty;\r\n * }\r\n *\r\n * // property (on prototype, TypeScript only)\r\n * class Example {\r\n * @Reflect.metadata(key, value)\r\n * property;\r\n * }\r\n *\r\n * // method (on constructor)\r\n * class Example {\r\n * @Reflect.metadata(key, value)\r\n * static staticMethod() { }\r\n * }\r\n *\r\n * // method (on prototype)\r\n * class Example {\r\n * @Reflect.metadata(key, value)\r\n * method() { }\r\n * }\r\n *\r\n */\r\n function metadata(metadataKey, metadataValue) {\r\n function decorator(target, propertyKey) {\r\n if (!IsObject(target))\r\n throw new TypeError();\r\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\r\n throw new TypeError();\r\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\r\n }\r\n return decorator;\r\n }\r\n Reflect.metadata = metadata;\r\n /**\r\n * Define a unique metadata entry on the target.\r\n * @param metadataKey A key used to store and retrieve metadata.\r\n * @param metadataValue A value that contains attached metadata.\r\n * @param target The target object on which to define metadata.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\r\n *\r\n * // property (on constructor)\r\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\r\n *\r\n * // decorator factory as metadata-producing annotation.\r\n * function MyAnnotation(options): Decorator {\r\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\r\n * }\r\n *\r\n */\r\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\r\n if (!IsObject(target))\r\n throw new TypeError();\r\n if (!IsUndefined(propertyKey))\r\n propertyKey = ToPropertyKey(propertyKey);\r\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\r\n }\r\n Reflect.defineMetadata = defineMetadata;\r\n /**\r\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\r\n * @param metadataKey A key used to store and retrieve metadata.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n *\r\n */\r\n function hasMetadata(metadataKey, target, propertyKey) {\r\n if (!IsObject(target))\r\n throw new TypeError();\r\n if (!IsUndefined(propertyKey))\r\n propertyKey = ToPropertyKey(propertyKey);\r\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\r\n }\r\n Reflect.hasMetadata = hasMetadata;\r\n /**\r\n * Gets a value indicating whether the target object has the provided metadata key defined.\r\n * @param metadataKey A key used to store and retrieve metadata.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n *\r\n */\r\n function hasOwnMetadata(metadataKey, target, propertyKey) {\r\n if (!IsObject(target))\r\n throw new TypeError();\r\n if (!IsUndefined(propertyKey))\r\n propertyKey = ToPropertyKey(propertyKey);\r\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\r\n }\r\n Reflect.hasOwnMetadata = hasOwnMetadata;\r\n /**\r\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\r\n * @param metadataKey A key used to store and retrieve metadata.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n *\r\n */\r\n function getMetadata(metadataKey, target, propertyKey) {\r\n if (!IsObject(target))\r\n throw new TypeError();\r\n if (!IsUndefined(propertyKey))\r\n propertyKey = ToPropertyKey(propertyKey);\r\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\r\n }\r\n Reflect.getMetadata = getMetadata;\r\n /**\r\n * Gets the metadata value for the provided metadata key on the target object.\r\n * @param metadataKey A key used to store and retrieve metadata.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n *\r\n */\r\n function getOwnMetadata(metadataKey, target, propertyKey) {\r\n if (!IsObject(target))\r\n throw new TypeError();\r\n if (!IsUndefined(propertyKey))\r\n propertyKey = ToPropertyKey(propertyKey);\r\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\r\n }\r\n Reflect.getOwnMetadata = getOwnMetadata;\r\n /**\r\n * Gets the metadata keys defined on the target object or its prototype chain.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns An array of unique metadata keys.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.getMetadataKeys(Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\r\n *\r\n */\r\n function getMetadataKeys(target, propertyKey) {\r\n if (!IsObject(target))\r\n throw new TypeError();\r\n if (!IsUndefined(propertyKey))\r\n propertyKey = ToPropertyKey(propertyKey);\r\n return OrdinaryMetadataKeys(target, propertyKey);\r\n }\r\n Reflect.getMetadataKeys = getMetadataKeys;\r\n /**\r\n * Gets the unique metadata keys defined on the target object.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns An array of unique metadata keys.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.getOwnMetadataKeys(Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\r\n *\r\n */\r\n function getOwnMetadataKeys(target, propertyKey) {\r\n if (!IsObject(target))\r\n throw new TypeError();\r\n if (!IsUndefined(propertyKey))\r\n propertyKey = ToPropertyKey(propertyKey);\r\n return OrdinaryOwnMetadataKeys(target, propertyKey);\r\n }\r\n Reflect.getOwnMetadataKeys = getOwnMetadataKeys;\r\n /**\r\n * Deletes the metadata entry from the target object with the provided key.\r\n * @param metadataKey A key used to store and retrieve metadata.\r\n * @param target The target object on which the metadata is defined.\r\n * @param propertyKey (Optional) The property key for the target.\r\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\r\n * @example\r\n *\r\n * class Example {\r\n * // property declarations are not part of ES6, though they are valid in TypeScript:\r\n * // static staticProperty;\r\n * // property;\r\n *\r\n * constructor(p) { }\r\n * static staticMethod(p) { }\r\n * method(p) { }\r\n * }\r\n *\r\n * // constructor\r\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\r\n *\r\n * // property (on constructor)\r\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n *\r\n * // property (on prototype)\r\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n *\r\n * // method (on constructor)\r\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n *\r\n * // method (on prototype)\r\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n *\r\n */\r\n function deleteMetadata(metadataKey, target, propertyKey) {\r\n if (!IsObject(target))\r\n throw new TypeError();\r\n if (!IsUndefined(propertyKey))\r\n propertyKey = ToPropertyKey(propertyKey);\r\n var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);\r\n if (IsUndefined(metadataMap))\r\n return false;\r\n if (!metadataMap.delete(metadataKey))\r\n return false;\r\n if (metadataMap.size > 0)\r\n return true;\r\n var targetMetadata = Metadata.get(target);\r\n targetMetadata.delete(propertyKey);\r\n if (targetMetadata.size > 0)\r\n return true;\r\n Metadata.delete(target);\r\n return true;\r\n }\r\n Reflect.deleteMetadata = deleteMetadata;\r\n function DecorateConstructor(decorators, target) {\r\n for (var i = decorators.length - 1; i >= 0; --i) {\r\n var decorator = decorators[i];\r\n var decorated = decorator(target);\r\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\r\n if (!IsConstructor(decorated))\r\n throw new TypeError();\r\n target = decorated;\r\n }\r\n }\r\n return target;\r\n }\r\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\r\n for (var i = decorators.length - 1; i >= 0; --i) {\r\n var decorator = decorators[i];\r\n var decorated = decorator(target, propertyKey, descriptor);\r\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\r\n if (!IsObject(decorated))\r\n throw new TypeError();\r\n descriptor = decorated;\r\n }\r\n }\r\n return descriptor;\r\n }\r\n function GetOrCreateMetadataMap(O, P, Create) {\r\n var targetMetadata = Metadata.get(O);\r\n if (IsUndefined(targetMetadata)) {\r\n if (!Create)\r\n return undefined;\r\n targetMetadata = new _Map();\r\n Metadata.set(O, targetMetadata);\r\n }\r\n var metadataMap = targetMetadata.get(P);\r\n if (IsUndefined(metadataMap)) {\r\n if (!Create)\r\n return undefined;\r\n metadataMap = new _Map();\r\n targetMetadata.set(P, metadataMap);\r\n }\r\n return metadataMap;\r\n }\r\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\r\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\r\n function OrdinaryHasMetadata(MetadataKey, O, P) {\r\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\r\n if (hasOwn)\r\n return true;\r\n var parent = OrdinaryGetPrototypeOf(O);\r\n if (!IsNull(parent))\r\n return OrdinaryHasMetadata(MetadataKey, parent, P);\r\n return false;\r\n }\r\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\r\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\r\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\r\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\r\n if (IsUndefined(metadataMap))\r\n return false;\r\n return ToBoolean(metadataMap.has(MetadataKey));\r\n }\r\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\r\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\r\n function OrdinaryGetMetadata(MetadataKey, O, P) {\r\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\r\n if (hasOwn)\r\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\r\n var parent = OrdinaryGetPrototypeOf(O);\r\n if (!IsNull(parent))\r\n return OrdinaryGetMetadata(MetadataKey, parent, P);\r\n return undefined;\r\n }\r\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\r\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\r\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\r\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\r\n if (IsUndefined(metadataMap))\r\n return undefined;\r\n return metadataMap.get(MetadataKey);\r\n }\r\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\r\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\r\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\r\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\r\n metadataMap.set(MetadataKey, MetadataValue);\r\n }\r\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\r\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\r\n function OrdinaryMetadataKeys(O, P) {\r\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\r\n var parent = OrdinaryGetPrototypeOf(O);\r\n if (parent === null)\r\n return ownKeys;\r\n var parentKeys = OrdinaryMetadataKeys(parent, P);\r\n if (parentKeys.length <= 0)\r\n return ownKeys;\r\n if (ownKeys.length <= 0)\r\n return parentKeys;\r\n var set = new _Set();\r\n var keys = [];\r\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\r\n var key = ownKeys_1[_i];\r\n var hasKey = set.has(key);\r\n if (!hasKey) {\r\n set.add(key);\r\n keys.push(key);\r\n }\r\n }\r\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\r\n var key = parentKeys_1[_a];\r\n var hasKey = set.has(key);\r\n if (!hasKey) {\r\n set.add(key);\r\n keys.push(key);\r\n }\r\n }\r\n return keys;\r\n }\r\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\r\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\r\n function OrdinaryOwnMetadataKeys(O, P) {\r\n var keys = [];\r\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\r\n if (IsUndefined(metadataMap))\r\n return keys;\r\n var keysObj = metadataMap.keys();\r\n var iterator = GetIterator(keysObj);\r\n var k = 0;\r\n while (true) {\r\n var next = IteratorStep(iterator);\r\n if (!next) {\r\n keys.length = k;\r\n return keys;\r\n }\r\n var nextValue = IteratorValue(next);\r\n try {\r\n keys[k] = nextValue;\r\n }\r\n catch (e) {\r\n try {\r\n IteratorClose(iterator);\r\n }\r\n finally {\r\n throw e;\r\n }\r\n }\r\n k++;\r\n }\r\n }\r\n // 6 ECMAScript Data Typ0es and Values\r\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\r\n function Type(x) {\r\n if (x === null)\r\n return 1 /* Null */;\r\n switch (typeof x) {\r\n case \"undefined\": return 0 /* Undefined */;\r\n case \"boolean\": return 2 /* Boolean */;\r\n case \"string\": return 3 /* String */;\r\n case \"symbol\": return 4 /* Symbol */;\r\n case \"number\": return 5 /* Number */;\r\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\r\n default: return 6 /* Object */;\r\n }\r\n }\r\n // 6.1.1 The Undefined Type\r\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\r\n function IsUndefined(x) {\r\n return x === undefined;\r\n }\r\n // 6.1.2 The Null Type\r\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\r\n function IsNull(x) {\r\n return x === null;\r\n }\r\n // 6.1.5 The Symbol Type\r\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\r\n function IsSymbol(x) {\r\n return typeof x === \"symbol\";\r\n }\r\n // 6.1.7 The Object Type\r\n // https://tc39.github.io/ecma262/#sec-object-type\r\n function IsObject(x) {\r\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\r\n }\r\n // 7.1 Type Conversion\r\n // https://tc39.github.io/ecma262/#sec-type-conversion\r\n // 7.1.1 ToPrimitive(input [, PreferredType])\r\n // https://tc39.github.io/ecma262/#sec-toprimitive\r\n function ToPrimitive(input, PreferredType) {\r\n switch (Type(input)) {\r\n case 0 /* Undefined */: return input;\r\n case 1 /* Null */: return input;\r\n case 2 /* Boolean */: return input;\r\n case 3 /* String */: return input;\r\n case 4 /* Symbol */: return input;\r\n case 5 /* Number */: return input;\r\n }\r\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\r\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\r\n if (exoticToPrim !== undefined) {\r\n var result = exoticToPrim.call(input, hint);\r\n if (IsObject(result))\r\n throw new TypeError();\r\n return result;\r\n }\r\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\r\n }\r\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\r\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\r\n function OrdinaryToPrimitive(O, hint) {\r\n if (hint === \"string\") {\r\n var toString_1 = O.toString;\r\n if (IsCallable(toString_1)) {\r\n var result = toString_1.call(O);\r\n if (!IsObject(result))\r\n return result;\r\n }\r\n var valueOf = O.valueOf;\r\n if (IsCallable(valueOf)) {\r\n var result = valueOf.call(O);\r\n if (!IsObject(result))\r\n return result;\r\n }\r\n }\r\n else {\r\n var valueOf = O.valueOf;\r\n if (IsCallable(valueOf)) {\r\n var result = valueOf.call(O);\r\n if (!IsObject(result))\r\n return result;\r\n }\r\n var toString_2 = O.toString;\r\n if (IsCallable(toString_2)) {\r\n var result = toString_2.call(O);\r\n if (!IsObject(result))\r\n return result;\r\n }\r\n }\r\n throw new TypeError();\r\n }\r\n // 7.1.2 ToBoolean(argument)\r\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\r\n function ToBoolean(argument) {\r\n return !!argument;\r\n }\r\n // 7.1.12 ToString(argument)\r\n // https://tc39.github.io/ecma262/#sec-tostring\r\n function ToString(argument) {\r\n return \"\" + argument;\r\n }\r\n // 7.1.14 ToPropertyKey(argument)\r\n // https://tc39.github.io/ecma262/#sec-topropertykey\r\n function ToPropertyKey(argument) {\r\n var key = ToPrimitive(argument, 3 /* String */);\r\n if (IsSymbol(key))\r\n return key;\r\n return ToString(key);\r\n }\r\n // 7.2 Testing and Comparison Operations\r\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\r\n // 7.2.2 IsArray(argument)\r\n // https://tc39.github.io/ecma262/#sec-isarray\r\n function IsArray(argument) {\r\n return Array.isArray\r\n ? Array.isArray(argument)\r\n : argument instanceof Object\r\n ? argument instanceof Array\r\n : Object.prototype.toString.call(argument) === \"[object Array]\";\r\n }\r\n // 7.2.3 IsCallable(argument)\r\n // https://tc39.github.io/ecma262/#sec-iscallable\r\n function IsCallable(argument) {\r\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\r\n return typeof argument === \"function\";\r\n }\r\n // 7.2.4 IsConstructor(argument)\r\n // https://tc39.github.io/ecma262/#sec-isconstructor\r\n function IsConstructor(argument) {\r\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\r\n return typeof argument === \"function\";\r\n }\r\n // 7.2.7 IsPropertyKey(argument)\r\n // https://tc39.github.io/ecma262/#sec-ispropertykey\r\n function IsPropertyKey(argument) {\r\n switch (Type(argument)) {\r\n case 3 /* String */: return true;\r\n case 4 /* Symbol */: return true;\r\n default: return false;\r\n }\r\n }\r\n // 7.3 Operations on Objects\r\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\r\n // 7.3.9 GetMethod(V, P)\r\n // https://tc39.github.io/ecma262/#sec-getmethod\r\n function GetMethod(V, P) {\r\n var func = V[P];\r\n if (func === undefined || func === null)\r\n return undefined;\r\n if (!IsCallable(func))\r\n throw new TypeError();\r\n return func;\r\n }\r\n // 7.4 Operations on Iterator Objects\r\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\r\n function GetIterator(obj) {\r\n var method = GetMethod(obj, iteratorSymbol);\r\n if (!IsCallable(method))\r\n throw new TypeError(); // from Call\r\n var iterator = method.call(obj);\r\n if (!IsObject(iterator))\r\n throw new TypeError();\r\n return iterator;\r\n }\r\n // 7.4.4 IteratorValue(iterResult)\r\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\r\n function IteratorValue(iterResult) {\r\n return iterResult.value;\r\n }\r\n // 7.4.5 IteratorStep(iterator)\r\n // https://tc39.github.io/ecma262/#sec-iteratorstep\r\n function IteratorStep(iterator) {\r\n var result = iterator.next();\r\n return result.done ? false : result;\r\n }\r\n // 7.4.6 IteratorClose(iterator, completion)\r\n // https://tc39.github.io/ecma262/#sec-iteratorclose\r\n function IteratorClose(iterator) {\r\n var f = iterator[\"return\"];\r\n if (f)\r\n f.call(iterator);\r\n }\r\n // 9.1 Ordinary Object Internal Methods and Internal Slots\r\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\r\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\r\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\r\n function OrdinaryGetPrototypeOf(O) {\r\n var proto = Object.getPrototypeOf(O);\r\n if (typeof O !== \"function\" || O === functionPrototype)\r\n return proto;\r\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\r\n // Try to determine the superclass constructor. Compatible implementations\r\n // must either set __proto__ on a subclass constructor to the superclass constructor,\r\n // or ensure each class has a valid `constructor` property on its prototype that\r\n // points back to the constructor.\r\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\r\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\r\n if (proto !== functionPrototype)\r\n return proto;\r\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\r\n var prototype = O.prototype;\r\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\r\n if (prototypeProto == null || prototypeProto === Object.prototype)\r\n return proto;\r\n // If the constructor was not a function, then we cannot determine the heritage.\r\n var constructor = prototypeProto.constructor;\r\n if (typeof constructor !== \"function\")\r\n return proto;\r\n // If we have some kind of self-reference, then we cannot determine the heritage.\r\n if (constructor === O)\r\n return proto;\r\n // we have a pretty good guess at the heritage.\r\n return constructor;\r\n }\r\n // naive Map shim\r\n function CreateMapPolyfill() {\r\n var cacheSentinel = {};\r\n var arraySentinel = [];\r\n var MapIterator = (function () {\r\n function MapIterator(keys, values, selector) {\r\n this._index = 0;\r\n this._keys = keys;\r\n this._values = values;\r\n this._selector = selector;\r\n }\r\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\r\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\r\n MapIterator.prototype.next = function () {\r\n var index = this._index;\r\n if (index >= 0 && index < this._keys.length) {\r\n var result = this._selector(this._keys[index], this._values[index]);\r\n if (index + 1 >= this._keys.length) {\r\n this._index = -1;\r\n this._keys = arraySentinel;\r\n this._values = arraySentinel;\r\n }\r\n else {\r\n this._index++;\r\n }\r\n return { value: result, done: false };\r\n }\r\n return { value: undefined, done: true };\r\n };\r\n MapIterator.prototype.throw = function (error) {\r\n if (this._index >= 0) {\r\n this._index = -1;\r\n this._keys = arraySentinel;\r\n this._values = arraySentinel;\r\n }\r\n throw error;\r\n };\r\n MapIterator.prototype.return = function (value) {\r\n if (this._index >= 0) {\r\n this._index = -1;\r\n this._keys = arraySentinel;\r\n this._values = arraySentinel;\r\n }\r\n return { value: value, done: true };\r\n };\r\n return MapIterator;\r\n }());\r\n return (function () {\r\n function Map() {\r\n this._keys = [];\r\n this._values = [];\r\n this._cacheKey = cacheSentinel;\r\n this._cacheIndex = -2;\r\n }\r\n Object.defineProperty(Map.prototype, \"size\", {\r\n get: function () { return this._keys.length; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\r\n Map.prototype.get = function (key) {\r\n var index = this._find(key, /*insert*/ false);\r\n return index >= 0 ? this._values[index] : undefined;\r\n };\r\n Map.prototype.set = function (key, value) {\r\n var index = this._find(key, /*insert*/ true);\r\n this._values[index] = value;\r\n return this;\r\n };\r\n Map.prototype.delete = function (key) {\r\n var index = this._find(key, /*insert*/ false);\r\n if (index >= 0) {\r\n var size = this._keys.length;\r\n for (var i = index + 1; i < size; i++) {\r\n this._keys[i - 1] = this._keys[i];\r\n this._values[i - 1] = this._values[i];\r\n }\r\n this._keys.length--;\r\n this._values.length--;\r\n if (key === this._cacheKey) {\r\n this._cacheKey = cacheSentinel;\r\n this._cacheIndex = -2;\r\n }\r\n return true;\r\n }\r\n return false;\r\n };\r\n Map.prototype.clear = function () {\r\n this._keys.length = 0;\r\n this._values.length = 0;\r\n this._cacheKey = cacheSentinel;\r\n this._cacheIndex = -2;\r\n };\r\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\r\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\r\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\r\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\r\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\r\n Map.prototype._find = function (key, insert) {\r\n if (this._cacheKey !== key) {\r\n this._cacheIndex = this._keys.indexOf(this._cacheKey = key);\r\n }\r\n if (this._cacheIndex < 0 && insert) {\r\n this._cacheIndex = this._keys.length;\r\n this._keys.push(key);\r\n this._values.push(undefined);\r\n }\r\n return this._cacheIndex;\r\n };\r\n return Map;\r\n }());\r\n function getKey(key, _) {\r\n return key;\r\n }\r\n function getValue(_, value) {\r\n return value;\r\n }\r\n function getEntry(key, value) {\r\n return [key, value];\r\n }\r\n }\r\n // naive Set shim\r\n function CreateSetPolyfill() {\r\n return (function () {\r\n function Set() {\r\n this._map = new _Map();\r\n }\r\n Object.defineProperty(Set.prototype, \"size\", {\r\n get: function () { return this._map.size; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Set.prototype.has = function (value) { return this._map.has(value); };\r\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\r\n Set.prototype.delete = function (value) { return this._map.delete(value); };\r\n Set.prototype.clear = function () { this._map.clear(); };\r\n Set.prototype.keys = function () { return this._map.keys(); };\r\n Set.prototype.values = function () { return this._map.values(); };\r\n Set.prototype.entries = function () { return this._map.entries(); };\r\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\r\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\r\n return Set;\r\n }());\r\n }\r\n // naive WeakMap shim\r\n function CreateWeakMapPolyfill() {\r\n var UUID_SIZE = 16;\r\n var keys = HashMap.create();\r\n var rootKey = CreateUniqueKey();\r\n return (function () {\r\n function WeakMap() {\r\n this._key = CreateUniqueKey();\r\n }\r\n WeakMap.prototype.has = function (target) {\r\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\r\n return table !== undefined ? HashMap.has(table, this._key) : false;\r\n };\r\n WeakMap.prototype.get = function (target) {\r\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\r\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\r\n };\r\n WeakMap.prototype.set = function (target, value) {\r\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\r\n table[this._key] = value;\r\n return this;\r\n };\r\n WeakMap.prototype.delete = function (target) {\r\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\r\n return table !== undefined ? delete table[this._key] : false;\r\n };\r\n WeakMap.prototype.clear = function () {\r\n // NOTE: not a real clear, just makes the previous data unreachable\r\n this._key = CreateUniqueKey();\r\n };\r\n return WeakMap;\r\n }());\r\n function CreateUniqueKey() {\r\n var key;\r\n do\r\n key = \"@@WeakMap@@\" + CreateUUID();\r\n while (HashMap.has(keys, key));\r\n keys[key] = true;\r\n return key;\r\n }\r\n function GetOrCreateWeakMapTable(target, create) {\r\n if (!hasOwn.call(target, rootKey)) {\r\n if (!create)\r\n return undefined;\r\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\r\n }\r\n return target[rootKey];\r\n }\r\n function FillRandomBytes(buffer, size) {\r\n for (var i = 0; i < size; ++i)\r\n buffer[i] = Math.random() * 0xff | 0;\r\n return buffer;\r\n }\r\n function GenRandomBytes(size) {\r\n if (typeof Uint8Array === \"function\") {\r\n if (typeof crypto !== \"undefined\")\r\n return crypto.getRandomValues(new Uint8Array(size));\r\n if (typeof msCrypto !== \"undefined\")\r\n return msCrypto.getRandomValues(new Uint8Array(size));\r\n return FillRandomBytes(new Uint8Array(size), size);\r\n }\r\n return FillRandomBytes(new Array(size), size);\r\n }\r\n function CreateUUID() {\r\n var data = GenRandomBytes(UUID_SIZE);\r\n // mark as random - RFC 4122 § 4.4\r\n data[6] = data[6] & 0x4f | 0x40;\r\n data[8] = data[8] & 0xbf | 0x80;\r\n var result = \"\";\r\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\r\n var byte = data[offset];\r\n if (offset === 4 || offset === 6 || offset === 8)\r\n result += \"-\";\r\n if (byte < 16)\r\n result += \"0\";\r\n result += byte.toString(16).toLowerCase();\r\n }\r\n return result;\r\n }\r\n }\r\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\r\n function MakeDictionary(obj) {\r\n obj.__ = undefined;\r\n delete obj.__;\r\n return obj;\r\n }\r\n // patch global Reflect\r\n (function (__global) {\r\n if (typeof __global.Reflect !== \"undefined\") {\r\n if (__global.Reflect !== Reflect) {\r\n for (var p in Reflect) {\r\n if (hasOwn.call(Reflect, p)) {\r\n __global.Reflect[p] = Reflect[p];\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n __global.Reflect = Reflect;\r\n }\r\n })(typeof global !== \"undefined\" ? global :\r\n typeof self !== \"undefined\" ? self :\r\n Function(\"return this;\")());\r\n})(Reflect || (Reflect = {}));\r\n//# sourceMappingURL=Reflect.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"./node_modules/process/browser.js\"), __webpack_require__(\"./node_modules/webpack/buildin/global.js\")))//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVmbGVjdC1tZXRhZGF0YS9SZWZsZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vfi9yZWZsZWN0LW1ldGFkYXRhL1JlZmxlY3QuanM/YWU2MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChDKSBNaWNyb3NvZnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG52YXIgUmVmbGVjdDtcclxuKGZ1bmN0aW9uIChSZWZsZWN0KSB7XHJcbiAgICBcInVzZSBzdHJpY3RcIjtcclxuICAgIHZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG4gICAgLy8gZmVhdHVyZSB0ZXN0IGZvciBTeW1ib2wgc3VwcG9ydFxyXG4gICAgdmFyIHN1cHBvcnRzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiO1xyXG4gICAgdmFyIHRvUHJpbWl0aXZlU3ltYm9sID0gc3VwcG9ydHNTeW1ib2wgJiYgdHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZSAhPT0gXCJ1bmRlZmluZWRcIiA/IFN5bWJvbC50b1ByaW1pdGl2ZSA6IFwiQEB0b1ByaW1pdGl2ZVwiO1xyXG4gICAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gc3VwcG9ydHNTeW1ib2wgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciAhPT0gXCJ1bmRlZmluZWRcIiA/IFN5bWJvbC5pdGVyYXRvciA6IFwiQEBpdGVyYXRvclwiO1xyXG4gICAgdmFyIEhhc2hNYXA7XHJcbiAgICAoZnVuY3Rpb24gKEhhc2hNYXApIHtcclxuICAgICAgICB2YXIgc3VwcG9ydHNDcmVhdGUgPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gXCJmdW5jdGlvblwiOyAvLyBmZWF0dXJlIHRlc3QgZm9yIE9iamVjdC5jcmVhdGUgc3VwcG9ydFxyXG4gICAgICAgIHZhciBzdXBwb3J0c1Byb3RvID0geyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheTsgLy8gZmVhdHVyZSB0ZXN0IGZvciBfX3Byb3RvX18gc3VwcG9ydFxyXG4gICAgICAgIHZhciBkb3duTGV2ZWwgPSAhc3VwcG9ydHNDcmVhdGUgJiYgIXN1cHBvcnRzUHJvdG87XHJcbiAgICAgICAgLy8gY3JlYXRlIGFuIG9iamVjdCBpbiBkaWN0aW9uYXJ5IG1vZGUgKGEuay5hLiBcInNsb3dcIiBtb2RlIGluIHY4KVxyXG4gICAgICAgIEhhc2hNYXAuY3JlYXRlID0gc3VwcG9ydHNDcmVhdGVcclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBNYWtlRGljdGlvbmFyeShPYmplY3QuY3JlYXRlKG51bGwpKTsgfVxyXG4gICAgICAgICAgICA6IHN1cHBvcnRzUHJvdG9cclxuICAgICAgICAgICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gTWFrZURpY3Rpb25hcnkoeyBfX3Byb3RvX186IG51bGwgfSk7IH1cclxuICAgICAgICAgICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTWFrZURpY3Rpb25hcnkoe30pOyB9O1xyXG4gICAgICAgIEhhc2hNYXAuaGFzID0gZG93bkxldmVsXHJcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKG1hcCwga2V5KSB7IHJldHVybiBoYXNPd24uY2FsbChtYXAsIGtleSk7IH1cclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAobWFwLCBrZXkpIHsgcmV0dXJuIGtleSBpbiBtYXA7IH07XHJcbiAgICAgICAgSGFzaE1hcC5nZXQgPSBkb3duTGV2ZWxcclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAobWFwLCBrZXkpIHsgcmV0dXJuIGhhc093bi5jYWxsKG1hcCwga2V5KSA/IG1hcFtrZXldIDogdW5kZWZpbmVkOyB9XHJcbiAgICAgICAgICAgIDogZnVuY3Rpb24gKG1hcCwga2V5KSB7IHJldHVybiBtYXBba2V5XTsgfTtcclxuICAgIH0pKEhhc2hNYXAgfHwgKEhhc2hNYXAgPSB7fSkpO1xyXG4gICAgLy8gTG9hZCBnbG9iYWwgb3Igc2hpbSB2ZXJzaW9ucyBvZiBNYXAsIFNldCwgYW5kIFdlYWtNYXBcclxuICAgIHZhciBmdW5jdGlvblByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihGdW5jdGlvbik7XHJcbiAgICB2YXIgdXNlUG9seWZpbGwgPSB0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudltcIlJFRkxFQ1RfTUVUQURBVEFfVVNFX01BUF9QT0xZRklMTFwiXSA9PT0gXCJ0cnVlXCI7XHJcbiAgICB2YXIgX01hcCA9ICF1c2VQb2x5ZmlsbCAmJiB0eXBlb2YgTWFwID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIE1hcC5wcm90b3R5cGUuZW50cmllcyA9PT0gXCJmdW5jdGlvblwiID8gTWFwIDogQ3JlYXRlTWFwUG9seWZpbGwoKTtcclxuICAgIHZhciBfU2V0ID0gIXVzZVBvbHlmaWxsICYmIHR5cGVvZiBTZXQgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU2V0LnByb3RvdHlwZS5lbnRyaWVzID09PSBcImZ1bmN0aW9uXCIgPyBTZXQgOiBDcmVhdGVTZXRQb2x5ZmlsbCgpO1xyXG4gICAgdmFyIF9XZWFrTWFwID0gIXVzZVBvbHlmaWxsICYmIHR5cGVvZiBXZWFrTWFwID09PSBcImZ1bmN0aW9uXCIgPyBXZWFrTWFwIDogQ3JlYXRlV2Vha01hcFBvbHlmaWxsKCk7XHJcbiAgICAvLyBbW01ldGFkYXRhXV0gaW50ZXJuYWwgc2xvdFxyXG4gICAgLy8gaHR0cHM6Ly9yYnVja3Rvbi5naXRodWIuaW8vcmVmbGVjdC1tZXRhZGF0YS8jb3JkaW5hcnktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzXHJcbiAgICB2YXIgTWV0YWRhdGEgPSBuZXcgX1dlYWtNYXAoKTtcclxuICAgIC8qKlxyXG4gICAgICAqIEFwcGxpZXMgYSBzZXQgb2YgZGVjb3JhdG9ycyB0byBhIHByb3BlcnR5IG9mIGEgdGFyZ2V0IG9iamVjdC5cclxuICAgICAgKiBAcGFyYW0gZGVjb3JhdG9ycyBBbiBhcnJheSBvZiBkZWNvcmF0b3JzLlxyXG4gICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3QuXHJcbiAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSB0byBkZWNvcmF0ZS5cclxuICAgICAgKiBAcGFyYW0gYXR0cmlidXRlcyAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgdGFyZ2V0IGtleS5cclxuICAgICAgKiBAcmVtYXJrcyBEZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluIHJldmVyc2Ugb3JkZXIuXHJcbiAgICAgICogQGV4YW1wbGVcclxuICAgICAgKlxyXG4gICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcclxuICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcclxuICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcclxuICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xyXG4gICAgICAqXHJcbiAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cclxuICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XHJcbiAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XHJcbiAgICAgICogICAgIH1cclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxyXG4gICAgICAqICAgICBFeGFtcGxlID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzQXJyYXksIEV4YW1wbGUpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcclxuICAgICAgKiAgICAgUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzQXJyYXksIEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcclxuICAgICAgKiAgICAgUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzQXJyYXksIEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXHJcbiAgICAgICogICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiLFxyXG4gICAgICAqICAgICAgICAgUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzQXJyYXksIEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIsXHJcbiAgICAgICogICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKSkpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxyXG4gICAgICAqICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIsXHJcbiAgICAgICogICAgICAgICBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnNBcnJheSwgRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIsXHJcbiAgICAgICogICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIikpKTtcclxuICAgICAgKlxyXG4gICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xyXG4gICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKSB7XHJcbiAgICAgICAgICAgIGlmICghSXNBcnJheShkZWNvcmF0b3JzKSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcclxuICAgICAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xyXG4gICAgICAgICAgICBpZiAoIUlzT2JqZWN0KGF0dHJpYnV0ZXMpICYmICFJc1VuZGVmaW5lZChhdHRyaWJ1dGVzKSAmJiAhSXNOdWxsKGF0dHJpYnV0ZXMpKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xyXG4gICAgICAgICAgICBpZiAoSXNOdWxsKGF0dHJpYnV0ZXMpKVxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcclxuICAgICAgICAgICAgcmV0dXJuIERlY29yYXRlUHJvcGVydHkoZGVjb3JhdG9ycywgdGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIUlzQXJyYXkoZGVjb3JhdG9ycykpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgICAgIGlmICghSXNDb25zdHJ1Y3Rvcih0YXJnZXQpKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xyXG4gICAgICAgICAgICByZXR1cm4gRGVjb3JhdGVDb25zdHJ1Y3RvcihkZWNvcmF0b3JzLCB0YXJnZXQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFJlZmxlY3QuZGVjb3JhdGUgPSBkZWNvcmF0ZTtcclxuICAgIC8vIDQuMS4yIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpXHJcbiAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNyZWZsZWN0Lm1ldGFkYXRhXHJcbiAgICAvKipcclxuICAgICAgKiBBIGRlZmF1bHQgbWV0YWRhdGEgZGVjb3JhdG9yIGZhY3RvcnkgdGhhdCBjYW4gYmUgdXNlZCBvbiBhIGNsYXNzLCBjbGFzcyBtZW1iZXIsIG9yIHBhcmFtZXRlci5cclxuICAgICAgKiBAcGFyYW0gbWV0YWRhdGFLZXkgVGhlIGtleSBmb3IgdGhlIG1ldGFkYXRhIGVudHJ5LlxyXG4gICAgICAqIEBwYXJhbSBtZXRhZGF0YVZhbHVlIFRoZSB2YWx1ZSBmb3IgdGhlIG1ldGFkYXRhIGVudHJ5LlxyXG4gICAgICAqIEByZXR1cm5zIEEgZGVjb3JhdG9yIGZ1bmN0aW9uLlxyXG4gICAgICAqIEByZW1hcmtzXHJcbiAgICAgICogSWYgYG1ldGFkYXRhS2V5YCBpcyBhbHJlYWR5IGRlZmluZWQgZm9yIHRoZSB0YXJnZXQgYW5kIHRhcmdldCBrZXksIHRoZVxyXG4gICAgICAqIG1ldGFkYXRhVmFsdWUgZm9yIHRoYXQga2V5IHdpbGwgYmUgb3ZlcndyaXR0ZW4uXHJcbiAgICAgICogQGV4YW1wbGVcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxyXG4gICAgICAqICAgICBAUmVmbGVjdC5tZXRhZGF0YShrZXksIHZhbHVlKVxyXG4gICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcclxuICAgICAgKiAgICAgfVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvciwgVHlwZVNjcmlwdCBvbmx5KVxyXG4gICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcclxuICAgICAgKiAgICAgICAgIEBSZWZsZWN0Lm1ldGFkYXRhKGtleSwgdmFsdWUpXHJcbiAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljUHJvcGVydHk7XHJcbiAgICAgICogICAgIH1cclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlLCBUeXBlU2NyaXB0IG9ubHkpXHJcbiAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xyXG4gICAgICAqICAgICAgICAgQFJlZmxlY3QubWV0YWRhdGEoa2V5LCB2YWx1ZSlcclxuICAgICAgKiAgICAgICAgIHByb3BlcnR5O1xyXG4gICAgICAqICAgICB9XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcclxuICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XHJcbiAgICAgICogICAgICAgICBAUmVmbGVjdC5tZXRhZGF0YShrZXksIHZhbHVlKVxyXG4gICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZCgpIHsgfVxyXG4gICAgICAqICAgICB9XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xyXG4gICAgICAqICAgICAgICAgQFJlZmxlY3QubWV0YWRhdGEoa2V5LCB2YWx1ZSlcclxuICAgICAgKiAgICAgICAgIG1ldGhvZCgpIHsgfVxyXG4gICAgICAqICAgICB9XHJcbiAgICAgICpcclxuICAgICAgKi9cclxuICAgIGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcclxuICAgICAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xyXG4gICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSAmJiAhSXNQcm9wZXJ0eUtleShwcm9wZXJ0eUtleSkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgICAgIE9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVjb3JhdG9yO1xyXG4gICAgfVxyXG4gICAgUmVmbGVjdC5tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgLyoqXHJcbiAgICAgICogRGVmaW5lIGEgdW5pcXVlIG1ldGFkYXRhIGVudHJ5IG9uIHRoZSB0YXJnZXQuXHJcbiAgICAgICogQHBhcmFtIG1ldGFkYXRhS2V5IEEga2V5IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIG1ldGFkYXRhLlxyXG4gICAgICAqIEBwYXJhbSBtZXRhZGF0YVZhbHVlIEEgdmFsdWUgdGhhdCBjb250YWlucyBhdHRhY2hlZCBtZXRhZGF0YS5cclxuICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRvIGRlZmluZSBtZXRhZGF0YS5cclxuICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IGZvciB0aGUgdGFyZ2V0LlxyXG4gICAgICAqIEBleGFtcGxlXHJcbiAgICAgICpcclxuICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XHJcbiAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XHJcbiAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XHJcbiAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XHJcbiAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxyXG4gICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxyXG4gICAgICAqICAgICB9XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcclxuICAgICAgKiAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIG9wdGlvbnMsIEV4YW1wbGUpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcclxuICAgICAgKiAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIG9wdGlvbnMsIEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcclxuICAgICAgKiAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIG9wdGlvbnMsIEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXHJcbiAgICAgICogICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBvcHRpb25zLCBFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcclxuICAgICAgKiAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIG9wdGlvbnMsIEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBkZWNvcmF0b3IgZmFjdG9yeSBhcyBtZXRhZGF0YS1wcm9kdWNpbmcgYW5ub3RhdGlvbi5cclxuICAgICAgKiAgICAgZnVuY3Rpb24gTXlBbm5vdGF0aW9uKG9wdGlvbnMpOiBEZWNvcmF0b3Ige1xyXG4gICAgICAqICAgICAgICAgcmV0dXJuICh0YXJnZXQsIGtleT8pID0+IFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBvcHRpb25zLCB0YXJnZXQsIGtleSk7XHJcbiAgICAgICogICAgIH1cclxuICAgICAgKlxyXG4gICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgcHJvcGVydHlLZXkpIHtcclxuICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcclxuICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSlcclxuICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcclxuICAgICAgICByZXR1cm4gT3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XHJcbiAgICB9XHJcbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhID0gZGVmaW5lTWV0YWRhdGE7XHJcbiAgICAvKipcclxuICAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB0YXJnZXQgb2JqZWN0IG9yIGl0cyBwcm90b3R5cGUgY2hhaW4gaGFzIHRoZSBwcm92aWRlZCBtZXRhZGF0YSBrZXkgZGVmaW5lZC5cclxuICAgICAgKiBAcGFyYW0gbWV0YWRhdGFLZXkgQSBrZXkgdXNlZCB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEuXHJcbiAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0aGUgbWV0YWRhdGEgaXMgZGVmaW5lZC5cclxuICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IGZvciB0aGUgdGFyZ2V0LlxyXG4gICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbWV0YWRhdGEga2V5IHdhcyBkZWZpbmVkIG9uIHRoZSB0YXJnZXQgb2JqZWN0IG9yIGl0cyBwcm90b3R5cGUgY2hhaW47IG90aGVyd2lzZSwgYGZhbHNlYC5cclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxyXG4gICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxyXG4gICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgfVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0Lmhhc01ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XHJcbiAgICAgICpcclxuICAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KSB7XHJcbiAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXHJcbiAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XHJcbiAgICAgICAgcmV0dXJuIE9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgfVxyXG4gICAgUmVmbGVjdC5oYXNNZXRhZGF0YSA9IGhhc01ldGFkYXRhO1xyXG4gICAgLyoqXHJcbiAgICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgdGFyZ2V0IG9iamVjdCBoYXMgdGhlIHByb3ZpZGVkIG1ldGFkYXRhIGtleSBkZWZpbmVkLlxyXG4gICAgICAqIEBwYXJhbSBtZXRhZGF0YUtleSBBIGtleSB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YS5cclxuICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRhZGF0YSBpcyBkZWZpbmVkLlxyXG4gICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXHJcbiAgICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBtZXRhZGF0YSBrZXkgd2FzIGRlZmluZWQgb24gdGhlIHRhcmdldCBvYmplY3Q7IG90aGVyd2lzZSwgYGZhbHNlYC5cclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxyXG4gICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxyXG4gICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgfVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzT3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzT3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzT3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0Lmhhc093bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzT3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XHJcbiAgICAgICpcclxuICAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KSB7XHJcbiAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXHJcbiAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XHJcbiAgICAgICAgcmV0dXJuIE9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgfVxyXG4gICAgUmVmbGVjdC5oYXNPd25NZXRhZGF0YSA9IGhhc093bk1ldGFkYXRhO1xyXG4gICAgLyoqXHJcbiAgICAgICogR2V0cyB0aGUgbWV0YWRhdGEgdmFsdWUgZm9yIHRoZSBwcm92aWRlZCBtZXRhZGF0YSBrZXkgb24gdGhlIHRhcmdldCBvYmplY3Qgb3IgaXRzIHByb3RvdHlwZSBjaGFpbi5cclxuICAgICAgKiBAcGFyYW0gbWV0YWRhdGFLZXkgQSBrZXkgdXNlZCB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEuXHJcbiAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0aGUgbWV0YWRhdGEgaXMgZGVmaW5lZC5cclxuICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IGZvciB0aGUgdGFyZ2V0LlxyXG4gICAgICAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSB2YWx1ZSBmb3IgdGhlIG1ldGFkYXRhIGtleSBpZiBmb3VuZDsgb3RoZXJ3aXNlLCBgdW5kZWZpbmVkYC5cclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxyXG4gICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxyXG4gICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgfVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XHJcbiAgICAgICpcclxuICAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KSB7XHJcbiAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXHJcbiAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XHJcbiAgICAgICAgcmV0dXJuIE9yZGluYXJ5R2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgfVxyXG4gICAgUmVmbGVjdC5nZXRNZXRhZGF0YSA9IGdldE1ldGFkYXRhO1xyXG4gICAgLyoqXHJcbiAgICAgICogR2V0cyB0aGUgbWV0YWRhdGEgdmFsdWUgZm9yIHRoZSBwcm92aWRlZCBtZXRhZGF0YSBrZXkgb24gdGhlIHRhcmdldCBvYmplY3QuXHJcbiAgICAgICogQHBhcmFtIG1ldGFkYXRhS2V5IEEga2V5IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIG1ldGFkYXRhLlxyXG4gICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGFkYXRhIGlzIGRlZmluZWQuXHJcbiAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cclxuICAgICAgKiBAcmV0dXJucyBUaGUgbWV0YWRhdGEgdmFsdWUgZm9yIHRoZSBtZXRhZGF0YSBrZXkgaWYgZm91bmQ7IG90aGVyd2lzZSwgYHVuZGVmaW5lZGAuXHJcbiAgICAgICogQGV4YW1wbGVcclxuICAgICAgKlxyXG4gICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcclxuICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcclxuICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcclxuICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xyXG4gICAgICAqXHJcbiAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cclxuICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XHJcbiAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XHJcbiAgICAgICogICAgIH1cclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpO1xyXG4gICAgICAqXHJcbiAgICAgICovXHJcbiAgICBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xyXG4gICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xyXG4gICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxyXG4gICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xyXG4gICAgICAgIHJldHVybiBPcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcclxuICAgIH1cclxuICAgIFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEgPSBnZXRPd25NZXRhZGF0YTtcclxuICAgIC8qKlxyXG4gICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGtleXMgZGVmaW5lZCBvbiB0aGUgdGFyZ2V0IG9iamVjdCBvciBpdHMgcHJvdG90eXBlIGNoYWluLlxyXG4gICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGFkYXRhIGlzIGRlZmluZWQuXHJcbiAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cclxuICAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bmlxdWUgbWV0YWRhdGEga2V5cy5cclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxyXG4gICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xyXG4gICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxyXG4gICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cclxuICAgICAgKiAgICAgfVxyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGFLZXlzKEV4YW1wbGUpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YUtleXMoRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhS2V5cyhFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhS2V5cyhFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YUtleXMoRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpO1xyXG4gICAgICAqXHJcbiAgICAgICovXHJcbiAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xyXG4gICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xyXG4gICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxyXG4gICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xyXG4gICAgICAgIHJldHVybiBPcmRpbmFyeU1ldGFkYXRhS2V5cyh0YXJnZXQsIHByb3BlcnR5S2V5KTtcclxuICAgIH1cclxuICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGFLZXlzID0gZ2V0TWV0YWRhdGFLZXlzO1xyXG4gICAgLyoqXHJcbiAgICAgICogR2V0cyB0aGUgdW5pcXVlIG1ldGFkYXRhIGtleXMgZGVmaW5lZCBvbiB0aGUgdGFyZ2V0IG9iamVjdC5cclxuICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRhZGF0YSBpcyBkZWZpbmVkLlxyXG4gICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXHJcbiAgICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdW5pcXVlIG1ldGFkYXRhIGtleXMuXHJcbiAgICAgICogQGV4YW1wbGVcclxuICAgICAgKlxyXG4gICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcclxuICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcclxuICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcclxuICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xyXG4gICAgICAqXHJcbiAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cclxuICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XHJcbiAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XHJcbiAgICAgICogICAgIH1cclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cyhFeGFtcGxlKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzKEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXHJcbiAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzKEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKTtcclxuICAgICAgKlxyXG4gICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGFLZXlzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcclxuICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcclxuICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSlcclxuICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcclxuICAgICAgICByZXR1cm4gT3JkaW5hcnlPd25NZXRhZGF0YUtleXModGFyZ2V0LCBwcm9wZXJ0eUtleSk7XHJcbiAgICB9XHJcbiAgICBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cyA9IGdldE93bk1ldGFkYXRhS2V5cztcclxuICAgIC8qKlxyXG4gICAgICAqIERlbGV0ZXMgdGhlIG1ldGFkYXRhIGVudHJ5IGZyb20gdGhlIHRhcmdldCBvYmplY3Qgd2l0aCB0aGUgcHJvdmlkZWQga2V5LlxyXG4gICAgICAqIEBwYXJhbSBtZXRhZGF0YUtleSBBIGtleSB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YS5cclxuICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRhZGF0YSBpcyBkZWZpbmVkLlxyXG4gICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXHJcbiAgICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBtZXRhZGF0YSBlbnRyeSB3YXMgZm91bmQgYW5kIGRlbGV0ZWQ7IG90aGVyd2lzZSwgZmFsc2UuXHJcbiAgICAgICogQGV4YW1wbGVcclxuICAgICAgKlxyXG4gICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcclxuICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcclxuICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcclxuICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xyXG4gICAgICAqXHJcbiAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cclxuICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XHJcbiAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XHJcbiAgICAgICogICAgIH1cclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmRlbGV0ZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmRlbGV0ZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmRlbGV0ZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcclxuICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5kZWxldGVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxyXG4gICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmRlbGV0ZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpO1xyXG4gICAgICAqXHJcbiAgICAgICovXHJcbiAgICBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xyXG4gICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xyXG4gICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxyXG4gICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xyXG4gICAgICAgIHZhciBtZXRhZGF0YU1hcCA9IEdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCBwcm9wZXJ0eUtleSwgLypDcmVhdGUqLyBmYWxzZSk7XHJcbiAgICAgICAgaWYgKElzVW5kZWZpbmVkKG1ldGFkYXRhTWFwKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICghbWV0YWRhdGFNYXAuZGVsZXRlKG1ldGFkYXRhS2V5KSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChtZXRhZGF0YU1hcC5zaXplID4gMClcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgdmFyIHRhcmdldE1ldGFkYXRhID0gTWV0YWRhdGEuZ2V0KHRhcmdldCk7XHJcbiAgICAgICAgdGFyZ2V0TWV0YWRhdGEuZGVsZXRlKHByb3BlcnR5S2V5KTtcclxuICAgICAgICBpZiAodGFyZ2V0TWV0YWRhdGEuc2l6ZSA+IDApXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIE1ldGFkYXRhLmRlbGV0ZSh0YXJnZXQpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgUmVmbGVjdC5kZWxldGVNZXRhZGF0YSA9IGRlbGV0ZU1ldGFkYXRhO1xyXG4gICAgZnVuY3Rpb24gRGVjb3JhdGVDb25zdHJ1Y3RvcihkZWNvcmF0b3JzLCB0YXJnZXQpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xyXG4gICAgICAgICAgICB2YXIgZGVjb3JhdG9yID0gZGVjb3JhdG9yc1tpXTtcclxuICAgICAgICAgICAgdmFyIGRlY29yYXRlZCA9IGRlY29yYXRvcih0YXJnZXQpO1xyXG4gICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKGRlY29yYXRlZCkgJiYgIUlzTnVsbChkZWNvcmF0ZWQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIUlzQ29uc3RydWN0b3IoZGVjb3JhdGVkKSlcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBkZWNvcmF0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIERlY29yYXRlUHJvcGVydHkoZGVjb3JhdG9ycywgdGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XHJcbiAgICAgICAgICAgIHZhciBkZWNvcmF0b3IgPSBkZWNvcmF0b3JzW2ldO1xyXG4gICAgICAgICAgICB2YXIgZGVjb3JhdGVkID0gZGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xyXG4gICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKGRlY29yYXRlZCkgJiYgIUlzTnVsbChkZWNvcmF0ZWQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIUlzT2JqZWN0KGRlY29yYXRlZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IGRlY29yYXRlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIEdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgQ3JlYXRlKSB7XHJcbiAgICAgICAgdmFyIHRhcmdldE1ldGFkYXRhID0gTWV0YWRhdGEuZ2V0KE8pO1xyXG4gICAgICAgIGlmIChJc1VuZGVmaW5lZCh0YXJnZXRNZXRhZGF0YSkpIHtcclxuICAgICAgICAgICAgaWYgKCFDcmVhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0YXJnZXRNZXRhZGF0YSA9IG5ldyBfTWFwKCk7XHJcbiAgICAgICAgICAgIE1ldGFkYXRhLnNldChPLCB0YXJnZXRNZXRhZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBtZXRhZGF0YU1hcCA9IHRhcmdldE1ldGFkYXRhLmdldChQKTtcclxuICAgICAgICBpZiAoSXNVbmRlZmluZWQobWV0YWRhdGFNYXApKSB7XHJcbiAgICAgICAgICAgIGlmICghQ3JlYXRlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgbWV0YWRhdGFNYXAgPSBuZXcgX01hcCgpO1xyXG4gICAgICAgICAgICB0YXJnZXRNZXRhZGF0YS5zZXQoUCwgbWV0YWRhdGFNYXApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWV0YWRhdGFNYXA7XHJcbiAgICB9XHJcbiAgICAvLyAzLjEuMS4xIE9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApXHJcbiAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeWhhc21ldGFkYXRhXHJcbiAgICBmdW5jdGlvbiBPcmRpbmFyeUhhc01ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKSB7XHJcbiAgICAgICAgdmFyIGhhc093biA9IE9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xyXG4gICAgICAgIGlmIChoYXNPd24pXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHZhciBwYXJlbnQgPSBPcmRpbmFyeUdldFByb3RvdHlwZU9mKE8pO1xyXG4gICAgICAgIGlmICghSXNOdWxsKHBhcmVudCkpXHJcbiAgICAgICAgICAgIHJldHVybiBPcmRpbmFyeUhhc01ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIDMuMS4yLjEgT3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUClcclxuICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5aGFzb3dubWV0YWRhdGFcclxuICAgIGZ1bmN0aW9uIE9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApIHtcclxuICAgICAgICB2YXIgbWV0YWRhdGFNYXAgPSBHZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIC8qQ3JlYXRlKi8gZmFsc2UpO1xyXG4gICAgICAgIGlmIChJc1VuZGVmaW5lZChtZXRhZGF0YU1hcCkpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gVG9Cb29sZWFuKG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSkpO1xyXG4gICAgfVxyXG4gICAgLy8gMy4xLjMuMSBPcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKVxyXG4gICAgLy8gaHR0cHM6Ly9yYnVja3Rvbi5naXRodWIuaW8vcmVmbGVjdC1tZXRhZGF0YS8jb3JkaW5hcnlnZXRtZXRhZGF0YVxyXG4gICAgZnVuY3Rpb24gT3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCkge1xyXG4gICAgICAgIHZhciBoYXNPd24gPSBPcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcclxuICAgICAgICBpZiAoaGFzT3duKVxyXG4gICAgICAgICAgICByZXR1cm4gT3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9IE9yZGluYXJ5R2V0UHJvdG90eXBlT2YoTyk7XHJcbiAgICAgICAgaWYgKCFJc051bGwocGFyZW50KSlcclxuICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCk7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIC8vIDMuMS40LjEgT3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUClcclxuICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5Z2V0b3dubWV0YWRhdGFcclxuICAgIGZ1bmN0aW9uIE9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApIHtcclxuICAgICAgICB2YXIgbWV0YWRhdGFNYXAgPSBHZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIC8qQ3JlYXRlKi8gZmFsc2UpO1xyXG4gICAgICAgIGlmIChJc1VuZGVmaW5lZChtZXRhZGF0YU1hcCkpXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmV0dXJuIG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XHJcbiAgICB9XHJcbiAgICAvLyAzLjEuNS4xIE9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApXHJcbiAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeWRlZmluZW93bm1ldGFkYXRhXHJcbiAgICBmdW5jdGlvbiBPcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKSB7XHJcbiAgICAgICAgdmFyIG1ldGFkYXRhTWFwID0gR2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCAvKkNyZWF0ZSovIHRydWUpO1xyXG4gICAgICAgIG1ldGFkYXRhTWFwLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyAzLjEuNi4xIE9yZGluYXJ5TWV0YWRhdGFLZXlzKE8sIFApXHJcbiAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeW1ldGFkYXRha2V5c1xyXG4gICAgZnVuY3Rpb24gT3JkaW5hcnlNZXRhZGF0YUtleXMoTywgUCkge1xyXG4gICAgICAgIHZhciBvd25LZXlzID0gT3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCk7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9IE9yZGluYXJ5R2V0UHJvdG90eXBlT2YoTyk7XHJcbiAgICAgICAgaWYgKHBhcmVudCA9PT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIG93bktleXM7XHJcbiAgICAgICAgdmFyIHBhcmVudEtleXMgPSBPcmRpbmFyeU1ldGFkYXRhS2V5cyhwYXJlbnQsIFApO1xyXG4gICAgICAgIGlmIChwYXJlbnRLZXlzLmxlbmd0aCA8PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gb3duS2V5cztcclxuICAgICAgICBpZiAob3duS2V5cy5sZW5ndGggPD0gMClcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudEtleXM7XHJcbiAgICAgICAgdmFyIHNldCA9IG5ldyBfU2V0KCk7XHJcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIG93bktleXNfMSA9IG93bktleXM7IF9pIDwgb3duS2V5c18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gb3duS2V5c18xW19pXTtcclxuICAgICAgICAgICAgdmFyIGhhc0tleSA9IHNldC5oYXMoa2V5KTtcclxuICAgICAgICAgICAgaWYgKCFoYXNLZXkpIHtcclxuICAgICAgICAgICAgICAgIHNldC5hZGQoa2V5KTtcclxuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIF9hID0gMCwgcGFyZW50S2V5c18xID0gcGFyZW50S2V5czsgX2EgPCBwYXJlbnRLZXlzXzEubGVuZ3RoOyBfYSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBwYXJlbnRLZXlzXzFbX2FdO1xyXG4gICAgICAgICAgICB2YXIgaGFzS2V5ID0gc2V0LmhhcyhrZXkpO1xyXG4gICAgICAgICAgICBpZiAoIWhhc0tleSkge1xyXG4gICAgICAgICAgICAgICAgc2V0LmFkZChrZXkpO1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGtleXM7XHJcbiAgICB9XHJcbiAgICAvLyAzLjEuNy4xIE9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApXHJcbiAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeW93bm1ldGFkYXRha2V5c1xyXG4gICAgZnVuY3Rpb24gT3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCkge1xyXG4gICAgICAgIHZhciBrZXlzID0gW107XHJcbiAgICAgICAgdmFyIG1ldGFkYXRhTWFwID0gR2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCAvKkNyZWF0ZSovIGZhbHNlKTtcclxuICAgICAgICBpZiAoSXNVbmRlZmluZWQobWV0YWRhdGFNYXApKVxyXG4gICAgICAgICAgICByZXR1cm4ga2V5cztcclxuICAgICAgICB2YXIga2V5c09iaiA9IG1ldGFkYXRhTWFwLmtleXMoKTtcclxuICAgICAgICB2YXIgaXRlcmF0b3IgPSBHZXRJdGVyYXRvcihrZXlzT2JqKTtcclxuICAgICAgICB2YXIgayA9IDA7XHJcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICAgICAgdmFyIG5leHQgPSBJdGVyYXRvclN0ZXAoaXRlcmF0b3IpO1xyXG4gICAgICAgICAgICBpZiAoIW5leHQpIHtcclxuICAgICAgICAgICAgICAgIGtleXMubGVuZ3RoID0gaztcclxuICAgICAgICAgICAgICAgIHJldHVybiBrZXlzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBuZXh0VmFsdWUgPSBJdGVyYXRvclZhbHVlKG5leHQpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAga2V5c1trXSA9IG5leHRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaysrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIDYgRUNNQVNjcmlwdCBEYXRhIFR5cDBlcyBhbmQgVmFsdWVzXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWRhdGEtdHlwZXMtYW5kLXZhbHVlc1xyXG4gICAgZnVuY3Rpb24gVHlwZSh4KSB7XHJcbiAgICAgICAgaWYgKHggPT09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiAxIC8qIE51bGwgKi87XHJcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgeCkge1xyXG4gICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6IHJldHVybiAwIC8qIFVuZGVmaW5lZCAqLztcclxuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjogcmV0dXJuIDIgLyogQm9vbGVhbiAqLztcclxuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOiByZXR1cm4gMyAvKiBTdHJpbmcgKi87XHJcbiAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjogcmV0dXJuIDQgLyogU3ltYm9sICovO1xyXG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6IHJldHVybiA1IC8qIE51bWJlciAqLztcclxuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOiByZXR1cm4geCA9PT0gbnVsbCA/IDEgLyogTnVsbCAqLyA6IDYgLyogT2JqZWN0ICovO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gNiAvKiBPYmplY3QgKi87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gNi4xLjEgVGhlIFVuZGVmaW5lZCBUeXBlXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzLXVuZGVmaW5lZC10eXBlXHJcbiAgICBmdW5jdGlvbiBJc1VuZGVmaW5lZCh4KSB7XHJcbiAgICAgICAgcmV0dXJuIHggPT09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIC8vIDYuMS4yIFRoZSBOdWxsIFR5cGVcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMtbnVsbC10eXBlXHJcbiAgICBmdW5jdGlvbiBJc051bGwoeCkge1xyXG4gICAgICAgIHJldHVybiB4ID09PSBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gNi4xLjUgVGhlIFN5bWJvbCBUeXBlXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzLXN5bWJvbC10eXBlXHJcbiAgICBmdW5jdGlvbiBJc1N5bWJvbCh4KSB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiO1xyXG4gICAgfVxyXG4gICAgLy8gNi4xLjcgVGhlIE9iamVjdCBUeXBlXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QtdHlwZVxyXG4gICAgZnVuY3Rpb24gSXNPYmplY3QoeCkge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiA/IHggIT09IG51bGwgOiB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiO1xyXG4gICAgfVxyXG4gICAgLy8gNy4xIFR5cGUgQ29udmVyc2lvblxyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdHlwZS1jb252ZXJzaW9uXHJcbiAgICAvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXHJcbiAgICBmdW5jdGlvbiBUb1ByaW1pdGl2ZShpbnB1dCwgUHJlZmVycmVkVHlwZSkge1xyXG4gICAgICAgIHN3aXRjaCAoVHlwZShpbnB1dCkpIHtcclxuICAgICAgICAgICAgY2FzZSAwIC8qIFVuZGVmaW5lZCAqLzogcmV0dXJuIGlucHV0O1xyXG4gICAgICAgICAgICBjYXNlIDEgLyogTnVsbCAqLzogcmV0dXJuIGlucHV0O1xyXG4gICAgICAgICAgICBjYXNlIDIgLyogQm9vbGVhbiAqLzogcmV0dXJuIGlucHV0O1xyXG4gICAgICAgICAgICBjYXNlIDMgLyogU3RyaW5nICovOiByZXR1cm4gaW5wdXQ7XHJcbiAgICAgICAgICAgIGNhc2UgNCAvKiBTeW1ib2wgKi86IHJldHVybiBpbnB1dDtcclxuICAgICAgICAgICAgY2FzZSA1IC8qIE51bWJlciAqLzogcmV0dXJuIGlucHV0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaGludCA9IFByZWZlcnJlZFR5cGUgPT09IDMgLyogU3RyaW5nICovID8gXCJzdHJpbmdcIiA6IFByZWZlcnJlZFR5cGUgPT09IDUgLyogTnVtYmVyICovID8gXCJudW1iZXJcIiA6IFwiZGVmYXVsdFwiO1xyXG4gICAgICAgIHZhciBleG90aWNUb1ByaW0gPSBHZXRNZXRob2QoaW5wdXQsIHRvUHJpbWl0aXZlU3ltYm9sKTtcclxuICAgICAgICBpZiAoZXhvdGljVG9QcmltICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGV4b3RpY1RvUHJpbS5jYWxsKGlucHV0LCBoaW50KTtcclxuICAgICAgICAgICAgaWYgKElzT2JqZWN0KHJlc3VsdCkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBPcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSBcImRlZmF1bHRcIiA/IFwibnVtYmVyXCIgOiBoaW50KTtcclxuICAgIH1cclxuICAgIC8vIDcuMS4xLjEgT3JkaW5hcnlUb1ByaW1pdGl2ZShPLCBoaW50KVxyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxyXG4gICAgZnVuY3Rpb24gT3JkaW5hcnlUb1ByaW1pdGl2ZShPLCBoaW50KSB7XHJcbiAgICAgICAgaWYgKGhpbnQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgdmFyIHRvU3RyaW5nXzEgPSBPLnRvU3RyaW5nO1xyXG4gICAgICAgICAgICBpZiAoSXNDYWxsYWJsZSh0b1N0cmluZ18xKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRvU3RyaW5nXzEuY2FsbChPKTtcclxuICAgICAgICAgICAgICAgIGlmICghSXNPYmplY3QocmVzdWx0KSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZU9mID0gTy52YWx1ZU9mO1xyXG4gICAgICAgICAgICBpZiAoSXNDYWxsYWJsZSh2YWx1ZU9mKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlT2YuY2FsbChPKTtcclxuICAgICAgICAgICAgICAgIGlmICghSXNPYmplY3QocmVzdWx0KSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWVPZiA9IE8udmFsdWVPZjtcclxuICAgICAgICAgICAgaWYgKElzQ2FsbGFibGUodmFsdWVPZikpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB2YWx1ZU9mLmNhbGwoTyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHJlc3VsdCkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdG9TdHJpbmdfMiA9IE8udG9TdHJpbmc7XHJcbiAgICAgICAgICAgIGlmIChJc0NhbGxhYmxlKHRvU3RyaW5nXzIpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdG9TdHJpbmdfMi5jYWxsKE8pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFJc09iamVjdChyZXN1bHQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xyXG4gICAgfVxyXG4gICAgLy8gNy4xLjIgVG9Cb29sZWFuKGFyZ3VtZW50KVxyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLzIwMTYvI3NlYy10b2Jvb2xlYW5cclxuICAgIGZ1bmN0aW9uIFRvQm9vbGVhbihhcmd1bWVudCkge1xyXG4gICAgICAgIHJldHVybiAhIWFyZ3VtZW50O1xyXG4gICAgfVxyXG4gICAgLy8gNy4xLjEyIFRvU3RyaW5nKGFyZ3VtZW50KVxyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9zdHJpbmdcclxuICAgIGZ1bmN0aW9uIFRvU3RyaW5nKGFyZ3VtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIFwiXCIgKyBhcmd1bWVudDtcclxuICAgIH1cclxuICAgIC8vIDcuMS4xNCBUb1Byb3BlcnR5S2V5KGFyZ3VtZW50KVxyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxyXG4gICAgZnVuY3Rpb24gVG9Qcm9wZXJ0eUtleShhcmd1bWVudCkge1xyXG4gICAgICAgIHZhciBrZXkgPSBUb1ByaW1pdGl2ZShhcmd1bWVudCwgMyAvKiBTdHJpbmcgKi8pO1xyXG4gICAgICAgIGlmIChJc1N5bWJvbChrZXkpKVxyXG4gICAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIHJldHVybiBUb1N0cmluZyhrZXkpO1xyXG4gICAgfVxyXG4gICAgLy8gNy4yIFRlc3RpbmcgYW5kIENvbXBhcmlzb24gT3BlcmF0aW9uc1xyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdGVzdGluZy1hbmQtY29tcGFyaXNvbi1vcGVyYXRpb25zXHJcbiAgICAvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNhcnJheVxyXG4gICAgZnVuY3Rpb24gSXNBcnJheShhcmd1bWVudCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5XHJcbiAgICAgICAgICAgID8gQXJyYXkuaXNBcnJheShhcmd1bWVudClcclxuICAgICAgICAgICAgOiBhcmd1bWVudCBpbnN0YW5jZW9mIE9iamVjdFxyXG4gICAgICAgICAgICAgICAgPyBhcmd1bWVudCBpbnN0YW5jZW9mIEFycmF5XHJcbiAgICAgICAgICAgICAgICA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09IFwiW29iamVjdCBBcnJheV1cIjtcclxuICAgIH1cclxuICAgIC8vIDcuMi4zIElzQ2FsbGFibGUoYXJndW1lbnQpXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXHJcbiAgICBmdW5jdGlvbiBJc0NhbGxhYmxlKGFyZ3VtZW50KSB7XHJcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGFzIHdlIGNhbm5vdCBjaGVjayBmb3IgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kLlxyXG4gICAgICAgIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09IFwiZnVuY3Rpb25cIjtcclxuICAgIH1cclxuICAgIC8vIDcuMi40IElzQ29uc3RydWN0b3IoYXJndW1lbnQpXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXHJcbiAgICBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XHJcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGFzIHdlIGNhbm5vdCBjaGVjayBmb3IgW1tDb25zdHJ1Y3RdXSBpbnRlcm5hbCBtZXRob2QuXHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PT0gXCJmdW5jdGlvblwiO1xyXG4gICAgfVxyXG4gICAgLy8gNy4yLjcgSXNQcm9wZXJ0eUtleShhcmd1bWVudClcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzcHJvcGVydHlrZXlcclxuICAgIGZ1bmN0aW9uIElzUHJvcGVydHlLZXkoYXJndW1lbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKFR5cGUoYXJndW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMyAvKiBTdHJpbmcgKi86IHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBjYXNlIDQgLyogU3ltYm9sICovOiByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIDcuMyBPcGVyYXRpb25zIG9uIE9iamVjdHNcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9wZXJhdGlvbnMtb24tb2JqZWN0c1xyXG4gICAgLy8gNy4zLjkgR2V0TWV0aG9kKFYsIFApXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRtZXRob2RcclxuICAgIGZ1bmN0aW9uIEdldE1ldGhvZChWLCBQKSB7XHJcbiAgICAgICAgdmFyIGZ1bmMgPSBWW1BdO1xyXG4gICAgICAgIGlmIChmdW5jID09PSB1bmRlZmluZWQgfHwgZnVuYyA9PT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAoIUlzQ2FsbGFibGUoZnVuYykpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcclxuICAgICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuICAgIC8vIDcuNCBPcGVyYXRpb25zIG9uIEl0ZXJhdG9yIE9iamVjdHNcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9wZXJhdGlvbnMtb24taXRlcmF0b3Itb2JqZWN0c1xyXG4gICAgZnVuY3Rpb24gR2V0SXRlcmF0b3Iob2JqKSB7XHJcbiAgICAgICAgdmFyIG1ldGhvZCA9IEdldE1ldGhvZChvYmosIGl0ZXJhdG9yU3ltYm9sKTtcclxuICAgICAgICBpZiAoIUlzQ2FsbGFibGUobWV0aG9kKSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBmcm9tIENhbGxcclxuICAgICAgICB2YXIgaXRlcmF0b3IgPSBtZXRob2QuY2FsbChvYmopO1xyXG4gICAgICAgIGlmICghSXNPYmplY3QoaXRlcmF0b3IpKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yO1xyXG4gICAgfVxyXG4gICAgLy8gNy40LjQgSXRlcmF0b3JWYWx1ZShpdGVyUmVzdWx0KVxyXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLzIwMTYvI3NlYy1pdGVyYXRvcnZhbHVlXHJcbiAgICBmdW5jdGlvbiBJdGVyYXRvclZhbHVlKGl0ZXJSZXN1bHQpIHtcclxuICAgICAgICByZXR1cm4gaXRlclJlc3VsdC52YWx1ZTtcclxuICAgIH1cclxuICAgIC8vIDcuNC41IEl0ZXJhdG9yU3RlcChpdGVyYXRvcilcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWl0ZXJhdG9yc3RlcFxyXG4gICAgZnVuY3Rpb24gSXRlcmF0b3JTdGVwKGl0ZXJhdG9yKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyBmYWxzZSA6IHJlc3VsdDtcclxuICAgIH1cclxuICAgIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pdGVyYXRvcmNsb3NlXHJcbiAgICBmdW5jdGlvbiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yKSB7XHJcbiAgICAgICAgdmFyIGYgPSBpdGVyYXRvcltcInJldHVyblwiXTtcclxuICAgICAgICBpZiAoZilcclxuICAgICAgICAgICAgZi5jYWxsKGl0ZXJhdG9yKTtcclxuICAgIH1cclxuICAgIC8vIDkuMSBPcmRpbmFyeSBPYmplY3QgSW50ZXJuYWwgTWV0aG9kcyBhbmQgSW50ZXJuYWwgU2xvdHNcclxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9yZGluYXJ5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90c1xyXG4gICAgLy8gOS4xLjEuMSBPcmRpbmFyeUdldFByb3RvdHlwZU9mKE8pXHJcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcmRpbmFyeWdldHByb3RvdHlwZW9mXHJcbiAgICBmdW5jdGlvbiBPcmRpbmFyeUdldFByb3RvdHlwZU9mKE8pIHtcclxuICAgICAgICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBPICE9PSBcImZ1bmN0aW9uXCIgfHwgTyA9PT0gZnVuY3Rpb25Qcm90b3R5cGUpXHJcbiAgICAgICAgICAgIHJldHVybiBwcm90bztcclxuICAgICAgICAvLyBUeXBlU2NyaXB0IGRvZXNuJ3Qgc2V0IF9fcHJvdG9fXyBpbiBFUzUsIGFzIGl0J3Mgbm9uLXN0YW5kYXJkLlxyXG4gICAgICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHN1cGVyY2xhc3MgY29uc3RydWN0b3IuIENvbXBhdGlibGUgaW1wbGVtZW50YXRpb25zXHJcbiAgICAgICAgLy8gbXVzdCBlaXRoZXIgc2V0IF9fcHJvdG9fXyBvbiBhIHN1YmNsYXNzIGNvbnN0cnVjdG9yIHRvIHRoZSBzdXBlcmNsYXNzIGNvbnN0cnVjdG9yLFxyXG4gICAgICAgIC8vIG9yIGVuc3VyZSBlYWNoIGNsYXNzIGhhcyBhIHZhbGlkIGBjb25zdHJ1Y3RvcmAgcHJvcGVydHkgb24gaXRzIHByb3RvdHlwZSB0aGF0XHJcbiAgICAgICAgLy8gcG9pbnRzIGJhY2sgdG8gdGhlIGNvbnN0cnVjdG9yLlxyXG4gICAgICAgIC8vIElmIHRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIEZ1bmN0aW9uLltbUHJvdG90eXBlXV0sIHRoZW4gdGhpcyBpcyBkZWZpbmF0ZWx5IGluaGVyaXRlZC5cclxuICAgICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gaW4gRVM2IG9yIHdoZW4gdXNpbmcgX19wcm90b19fIGluIGEgY29tcGF0aWJsZSBicm93c2VyLlxyXG4gICAgICAgIGlmIChwcm90byAhPT0gZnVuY3Rpb25Qcm90b3R5cGUpXHJcbiAgICAgICAgICAgIHJldHVybiBwcm90bztcclxuICAgICAgICAvLyBJZiB0aGUgc3VwZXIgcHJvdG90eXBlIGlzIE9iamVjdC5wcm90b3R5cGUsIG51bGwsIG9yIHVuZGVmaW5lZCwgdGhlbiB3ZSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBoZXJpdGFnZS5cclxuICAgICAgICB2YXIgcHJvdG90eXBlID0gTy5wcm90b3R5cGU7XHJcbiAgICAgICAgdmFyIHByb3RvdHlwZVByb3RvID0gcHJvdG90eXBlICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpO1xyXG4gICAgICAgIGlmIChwcm90b3R5cGVQcm90byA9PSBudWxsIHx8IHByb3RvdHlwZVByb3RvID09PSBPYmplY3QucHJvdG90eXBlKVxyXG4gICAgICAgICAgICByZXR1cm4gcHJvdG87XHJcbiAgICAgICAgLy8gSWYgdGhlIGNvbnN0cnVjdG9yIHdhcyBub3QgYSBmdW5jdGlvbiwgdGhlbiB3ZSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBoZXJpdGFnZS5cclxuICAgICAgICB2YXIgY29uc3RydWN0b3IgPSBwcm90b3R5cGVQcm90by5jb25zdHJ1Y3RvcjtcclxuICAgICAgICBpZiAodHlwZW9mIGNvbnN0cnVjdG9yICE9PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgICAgIHJldHVybiBwcm90bztcclxuICAgICAgICAvLyBJZiB3ZSBoYXZlIHNvbWUga2luZCBvZiBzZWxmLXJlZmVyZW5jZSwgdGhlbiB3ZSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBoZXJpdGFnZS5cclxuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT09IE8pXHJcbiAgICAgICAgICAgIHJldHVybiBwcm90bztcclxuICAgICAgICAvLyB3ZSBoYXZlIGEgcHJldHR5IGdvb2QgZ3Vlc3MgYXQgdGhlIGhlcml0YWdlLlxyXG4gICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjtcclxuICAgIH1cclxuICAgIC8vIG5haXZlIE1hcCBzaGltXHJcbiAgICBmdW5jdGlvbiBDcmVhdGVNYXBQb2x5ZmlsbCgpIHtcclxuICAgICAgICB2YXIgY2FjaGVTZW50aW5lbCA9IHt9O1xyXG4gICAgICAgIHZhciBhcnJheVNlbnRpbmVsID0gW107XHJcbiAgICAgICAgdmFyIE1hcEl0ZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gTWFwSXRlcmF0b3Ioa2V5cywgdmFsdWVzLCBzZWxlY3Rvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cyA9IGtleXM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSB2YWx1ZXM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RvciA9IHNlbGVjdG9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIE1hcEl0ZXJhdG9yLnByb3RvdHlwZVtcIkBAaXRlcmF0b3JcIl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xyXG4gICAgICAgICAgICBNYXBJdGVyYXRvci5wcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcclxuICAgICAgICAgICAgTWFwSXRlcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pbmRleDtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5fa2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fc2VsZWN0b3IodGhpcy5fa2V5c1tpbmRleF0sIHRoaXMuX3ZhbHVlc1tpbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCArIDEgPj0gdGhpcy5fa2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5kZXggPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fa2V5cyA9IGFycmF5U2VudGluZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IGFycmF5U2VudGluZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBNYXBJdGVyYXRvci5wcm90b3R5cGUudGhyb3cgPSBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5kZXggPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0gYXJyYXlTZW50aW5lbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBhcnJheVNlbnRpbmVsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIE1hcEl0ZXJhdG9yLnByb3RvdHlwZS5yZXR1cm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5kZXggPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0gYXJyYXlTZW50aW5lbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBhcnJheVNlbnRpbmVsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBNYXBJdGVyYXRvcjtcclxuICAgICAgICB9KCkpO1xyXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBNYXAoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlS2V5ID0gY2FjaGVTZW50aW5lbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlSW5kZXggPSAtMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWFwLnByb3RvdHlwZSwgXCJzaXplXCIsIHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fa2V5cy5sZW5ndGg7IH0sXHJcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHRoaXMuX2ZpbmQoa2V5LCAvKmluc2VydCovIGZhbHNlKSA+PSAwOyB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmQoa2V5LCAvKmluc2VydCovIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA+PSAwID8gdGhpcy5fdmFsdWVzW2luZGV4XSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZChrZXksIC8qaW5zZXJ0Ki8gdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXNbaW5kZXhdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kKGtleSwgLyppbnNlcnQqLyBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gdGhpcy5fa2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4ICsgMTsgaSA8IHNpemU7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzW2kgLSAxXSA9IHRoaXMuX2tleXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1tpIC0gMV0gPSB0aGlzLl92YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXMubGVuZ3RoLS07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzLmxlbmd0aC0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IHRoaXMuX2NhY2hlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlS2V5ID0gY2FjaGVTZW50aW5lbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVJbmRleCA9IC0yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2tleXMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBjYWNoZVNlbnRpbmVsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVJbmRleCA9IC0yO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgTWFwSXRlcmF0b3IodGhpcy5fa2V5cywgdGhpcy5fdmFsdWVzLCBnZXRLZXkpOyB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBNYXBJdGVyYXRvcih0aGlzLl9rZXlzLCB0aGlzLl92YWx1ZXMsIGdldFZhbHVlKTsgfTtcclxuICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IE1hcEl0ZXJhdG9yKHRoaXMuX2tleXMsIHRoaXMuX3ZhbHVlcywgZ2V0RW50cnkpOyB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlW1wiQEBpdGVyYXRvclwiXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZW50cmllcygpOyB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZW50cmllcygpOyB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLl9maW5kID0gZnVuY3Rpb24gKGtleSwgaW5zZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVLZXkgIT09IGtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlSW5kZXggPSB0aGlzLl9rZXlzLmluZGV4T2YodGhpcy5fY2FjaGVLZXkgPSBrZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlSW5kZXggPCAwICYmIGluc2VydCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlSW5kZXggPSB0aGlzLl9rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlSW5kZXg7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBNYXA7XHJcbiAgICAgICAgfSgpKTtcclxuICAgICAgICBmdW5jdGlvbiBnZXRLZXkoa2V5LCBfKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIGdldFZhbHVlKF8sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0RW50cnkoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gW2tleSwgdmFsdWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIG5haXZlIFNldCBzaGltXHJcbiAgICBmdW5jdGlvbiBDcmVhdGVTZXRQb2x5ZmlsbCgpIHtcclxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gU2V0KCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwID0gbmV3IF9NYXAoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2V0LnByb3RvdHlwZSwgXCJzaXplXCIsIHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fbWFwLnNpemU7IH0sXHJcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdGhpcy5fbWFwLmhhcyh2YWx1ZSk7IH07XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0aGlzLl9tYXAuc2V0KHZhbHVlLCB2YWx1ZSksIHRoaXM7IH07XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0aGlzLl9tYXAuZGVsZXRlKHZhbHVlKTsgfTtcclxuICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHsgdGhpcy5fbWFwLmNsZWFyKCk7IH07XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX21hcC5rZXlzKCk7IH07XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fbWFwLnZhbHVlcygpOyB9O1xyXG4gICAgICAgICAgICBTZXQucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9tYXAuZW50cmllcygpOyB9O1xyXG4gICAgICAgICAgICBTZXQucHJvdG90eXBlW1wiQEBpdGVyYXRvclwiXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMua2V5cygpOyB9O1xyXG4gICAgICAgICAgICBTZXQucHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMua2V5cygpOyB9O1xyXG4gICAgICAgICAgICByZXR1cm4gU2V0O1xyXG4gICAgICAgIH0oKSk7XHJcbiAgICB9XHJcbiAgICAvLyBuYWl2ZSBXZWFrTWFwIHNoaW1cclxuICAgIGZ1bmN0aW9uIENyZWF0ZVdlYWtNYXBQb2x5ZmlsbCgpIHtcclxuICAgICAgICB2YXIgVVVJRF9TSVpFID0gMTY7XHJcbiAgICAgICAgdmFyIGtleXMgPSBIYXNoTWFwLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciByb290S2V5ID0gQ3JlYXRlVW5pcXVlS2V5KCk7XHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIFdlYWtNYXAoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXkgPSBDcmVhdGVVbmlxdWVLZXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBXZWFrTWFwLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGFibGUgPSBHZXRPckNyZWF0ZVdlYWtNYXBUYWJsZSh0YXJnZXQsIC8qY3JlYXRlKi8gZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlICE9PSB1bmRlZmluZWQgPyBIYXNoTWFwLmhhcyh0YWJsZSwgdGhpcy5fa2V5KSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBXZWFrTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGFibGUgPSBHZXRPckNyZWF0ZVdlYWtNYXBUYWJsZSh0YXJnZXQsIC8qY3JlYXRlKi8gZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlICE9PSB1bmRlZmluZWQgPyBIYXNoTWFwLmdldCh0YWJsZSwgdGhpcy5fa2V5KSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgV2Vha01hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHRhcmdldCwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0YWJsZSA9IEdldE9yQ3JlYXRlV2Vha01hcFRhYmxlKHRhcmdldCwgLypjcmVhdGUqLyB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRhYmxlW3RoaXMuX2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGFibGUgPSBHZXRPckNyZWF0ZVdlYWtNYXBUYWJsZSh0YXJnZXQsIC8qY3JlYXRlKi8gZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlICE9PSB1bmRlZmluZWQgPyBkZWxldGUgdGFibGVbdGhpcy5fa2V5XSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBXZWFrTWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5PVEU6IG5vdCBhIHJlYWwgY2xlYXIsIGp1c3QgbWFrZXMgdGhlIHByZXZpb3VzIGRhdGEgdW5yZWFjaGFibGVcclxuICAgICAgICAgICAgICAgIHRoaXMuX2tleSA9IENyZWF0ZVVuaXF1ZUtleSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gV2Vha01hcDtcclxuICAgICAgICB9KCkpO1xyXG4gICAgICAgIGZ1bmN0aW9uIENyZWF0ZVVuaXF1ZUtleSgpIHtcclxuICAgICAgICAgICAgdmFyIGtleTtcclxuICAgICAgICAgICAgZG9cclxuICAgICAgICAgICAgICAgIGtleSA9IFwiQEBXZWFrTWFwQEBcIiArIENyZWF0ZVVVSUQoKTtcclxuICAgICAgICAgICAgd2hpbGUgKEhhc2hNYXAuaGFzKGtleXMsIGtleSkpO1xyXG4gICAgICAgICAgICBrZXlzW2tleV0gPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmdW5jdGlvbiBHZXRPckNyZWF0ZVdlYWtNYXBUYWJsZSh0YXJnZXQsIGNyZWF0ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWhhc093bi5jYWxsKHRhcmdldCwgcm9vdEtleSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghY3JlYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCByb290S2V5LCB7IHZhbHVlOiBIYXNoTWFwLmNyZWF0ZSgpIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRbcm9vdEtleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIEZpbGxSYW5kb21CeXRlcyhidWZmZXIsIHNpemUpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpXHJcbiAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSBNYXRoLnJhbmRvbSgpICogMHhmZiB8IDA7XHJcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIEdlblJhbmRvbUJ5dGVzKHNpemUpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBVaW50OEFycmF5ID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3J5cHRvICE9PSBcInVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KHNpemUpKTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbXNDcnlwdG8gIT09IFwidW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShzaXplKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsbFJhbmRvbUJ5dGVzKG5ldyBVaW50OEFycmF5KHNpemUpLCBzaXplKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gRmlsbFJhbmRvbUJ5dGVzKG5ldyBBcnJheShzaXplKSwgc2l6ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIENyZWF0ZVVVSUQoKSB7XHJcbiAgICAgICAgICAgIHZhciBkYXRhID0gR2VuUmFuZG9tQnl0ZXMoVVVJRF9TSVpFKTtcclxuICAgICAgICAgICAgLy8gbWFyayBhcyByYW5kb20gLSBSRkMgNDEyMiDCpyA0LjRcclxuICAgICAgICAgICAgZGF0YVs2XSA9IGRhdGFbNl0gJiAweDRmIHwgMHg0MDtcclxuICAgICAgICAgICAgZGF0YVs4XSA9IGRhdGFbOF0gJiAweGJmIHwgMHg4MDtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IFVVSURfU0laRTsgKytvZmZzZXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBieXRlID0gZGF0YVtvZmZzZXRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA9PT0gNCB8fCBvZmZzZXQgPT09IDYgfHwgb2Zmc2V0ID09PSA4KVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBcIi1cIjtcclxuICAgICAgICAgICAgICAgIGlmIChieXRlIDwgMTYpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiMFwiO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGJ5dGUudG9TdHJpbmcoMTYpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyB1c2VzIGEgaGV1cmlzdGljIHVzZWQgYnkgdjggYW5kIGNoYWtyYSB0byBmb3JjZSBhbiBvYmplY3QgaW50byBkaWN0aW9uYXJ5IG1vZGUuXHJcbiAgICBmdW5jdGlvbiBNYWtlRGljdGlvbmFyeShvYmopIHtcclxuICAgICAgICBvYmouX18gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgZGVsZXRlIG9iai5fXztcclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gICAgLy8gcGF0Y2ggZ2xvYmFsIFJlZmxlY3RcclxuICAgIChmdW5jdGlvbiAoX19nbG9iYWwpIHtcclxuICAgICAgICBpZiAodHlwZW9mIF9fZ2xvYmFsLlJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgaWYgKF9fZ2xvYmFsLlJlZmxlY3QgIT09IFJlZmxlY3QpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHAgaW4gUmVmbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChSZWZsZWN0LCBwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfX2dsb2JhbC5SZWZsZWN0W3BdID0gUmVmbGVjdFtwXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF9fZ2xvYmFsLlJlZmxlY3QgPSBSZWZsZWN0O1xyXG4gICAgICAgIH1cclxuICAgIH0pKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOlxyXG4gICAgICAgIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6XHJcbiAgICAgICAgICAgIEZ1bmN0aW9uKFwicmV0dXJuIHRoaXM7XCIpKCkpO1xyXG59KShSZWZsZWN0IHx8IChSZWZsZWN0ID0ge30pKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVmbGVjdC5qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcmVmbGVjdC1tZXRhZGF0YS9SZWZsZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9yZWZsZWN0LW1ldGFkYXRhL1JlZmxlY3QuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/webpack/buildin/global.js": +/***/ (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//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanM/MzY5OCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZztcclxuXHJcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXHJcbmcgPSAoZnVuY3Rpb24oKSB7XHJcblx0cmV0dXJuIHRoaXM7XHJcbn0pKCk7XHJcblxyXG50cnkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxyXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNcIik7XHJcbn0gY2F0Y2goZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilcclxuXHRcdGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnO1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanNcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/zone.js/dist/long-stack-trace-zone.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("/**\n* @license\n* Copyright Google Inc. All Rights Reserved.\n*\n* Use of this source code is governed by an MIT-style license that can be\n* found in the LICENSE file at https://angular.io/license\n*/\n(function (global, factory) {\n true ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar NEWLINE = '\\n';\nvar SEP = ' ------------- ';\nvar IGNORE_FRAMES = [];\nvar creationTrace = '__creationTrace__';\nvar LongStackTrace = (function () {\n function LongStackTrace() {\n this.error = getStacktrace();\n this.timestamp = new Date();\n }\n return LongStackTrace;\n}());\nfunction getStacktraceWithUncaughtError() {\n return new Error('STACKTRACE TRACKING');\n}\nfunction getStacktraceWithCaughtError() {\n try {\n throw getStacktraceWithUncaughtError();\n }\n catch (error) {\n return error;\n }\n}\n// Some implementations of exception handling don't create a stack trace if the exception\n// isn't thrown, however it's faster not to actually throw the exception.\nvar error = getStacktraceWithUncaughtError();\nvar coughtError = getStacktraceWithCaughtError();\nvar getStacktrace = error.stack ?\n getStacktraceWithUncaughtError :\n (coughtError.stack ? getStacktraceWithCaughtError : getStacktraceWithUncaughtError);\nfunction getFrames(error) {\n return error.stack ? error.stack.split(NEWLINE) : [];\n}\nfunction addErrorStack(lines, error) {\n var trace = getFrames(error);\n for (var i = 0; i < trace.length; i++) {\n var frame = trace[i];\n // Filter out the Frames which are part of stack capturing.\n if (!(i < IGNORE_FRAMES.length && IGNORE_FRAMES[i] === frame)) {\n lines.push(trace[i]);\n }\n }\n}\nfunction renderLongStackTrace(frames, stack) {\n var longTrace = [stack];\n if (frames) {\n var timestamp = new Date().getTime();\n for (var i = 0; i < frames.length; i++) {\n var traceFrames = frames[i];\n var lastTime = traceFrames.timestamp;\n longTrace.push(SEP + \" Elapsed: \" + (timestamp - lastTime.getTime()) + \" ms; At: \" + lastTime + \" \" + SEP);\n addErrorStack(longTrace, traceFrames.error);\n timestamp = lastTime.getTime();\n }\n }\n return longTrace.join(NEWLINE);\n}\nZone['longStackTraceZoneSpec'] = {\n name: 'long-stack-trace',\n longStackTraceLimit: 10,\n onScheduleTask: function (parentZoneDelegate, currentZone, targetZone, task) {\n var currentTask = Zone.currentTask;\n var trace = currentTask && currentTask.data && currentTask.data[creationTrace] || [];\n trace = [new LongStackTrace()].concat(trace);\n if (trace.length > this.longStackTraceLimit) {\n trace.length = this.longStackTraceLimit;\n }\n if (!task.data)\n task.data = {};\n task.data[creationTrace] = trace;\n return parentZoneDelegate.scheduleTask(targetZone, task);\n },\n onHandleError: function (parentZoneDelegate, currentZone, targetZone, error) {\n var parentTask = Zone.currentTask || error.task;\n if (error instanceof Error && parentTask) {\n var stackSetSucceeded = null;\n try {\n var descriptor = Object.getOwnPropertyDescriptor(error, 'stack');\n if (descriptor && descriptor.configurable) {\n var delegateGet_1 = descriptor.get;\n var value_1 = descriptor.value;\n descriptor = {\n get: function () {\n return renderLongStackTrace(parentTask.data && parentTask.data[creationTrace], delegateGet_1 ? delegateGet_1.apply(this) : value_1);\n }\n };\n Object.defineProperty(error, 'stack', descriptor);\n stackSetSucceeded = true;\n }\n }\n catch (err) {\n }\n var longStack = stackSetSucceeded ?\n null :\n renderLongStackTrace(parentTask.data && parentTask.data[creationTrace], error.stack);\n if (!stackSetSucceeded) {\n try {\n stackSetSucceeded = error.stack = longStack;\n }\n catch (err) {\n }\n }\n if (!stackSetSucceeded) {\n try {\n stackSetSucceeded = error.longStack = longStack;\n }\n catch (err) {\n }\n }\n }\n return parentZoneDelegate.handleError(targetZone, error);\n }\n};\nfunction captureStackTraces(stackTraces, count) {\n if (count > 0) {\n stackTraces.push(getFrames((new LongStackTrace()).error));\n captureStackTraces(stackTraces, count - 1);\n }\n}\nfunction computeIgnoreFrames() {\n var frames = [];\n captureStackTraces(frames, 2);\n var frames1 = frames[0];\n var frames2 = frames[1];\n for (var i = 0; i < frames1.length; i++) {\n var frame1 = frames1[i];\n var frame2 = frames2[i];\n if (frame1 === frame2) {\n IGNORE_FRAMES.push(frame1);\n }\n else {\n break;\n }\n }\n}\ncomputeIgnoreFrames();\n\n})));\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvem9uZS5qcy9kaXN0L2xvbmctc3RhY2stdHJhY2Utem9uZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vem9uZS5qcy9kaXN0L2xvbmctc3RhY2stdHJhY2Utem9uZS5qcz9mY2MzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuKiBAbGljZW5zZVxuKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbipcbiogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIChmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbnZhciBORVdMSU5FID0gJ1xcbic7XG52YXIgU0VQID0gJyAgLS0tLS0tLS0tLS0tLSAgJztcbnZhciBJR05PUkVfRlJBTUVTID0gW107XG52YXIgY3JlYXRpb25UcmFjZSA9ICdfX2NyZWF0aW9uVHJhY2VfXyc7XG52YXIgTG9uZ1N0YWNrVHJhY2UgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExvbmdTdGFja1RyYWNlKCkge1xuICAgICAgICB0aGlzLmVycm9yID0gZ2V0U3RhY2t0cmFjZSgpO1xuICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IG5ldyBEYXRlKCk7XG4gICAgfVxuICAgIHJldHVybiBMb25nU3RhY2tUcmFjZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRTdGFja3RyYWNlV2l0aFVuY2F1Z2h0RXJyb3IoKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcignU1RBQ0tUUkFDRSBUUkFDS0lORycpO1xufVxuZnVuY3Rpb24gZ2V0U3RhY2t0cmFjZVdpdGhDYXVnaHRFcnJvcigpIHtcbiAgICB0cnkge1xuICAgICAgICB0aHJvdyBnZXRTdGFja3RyYWNlV2l0aFVuY2F1Z2h0RXJyb3IoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG59XG4vLyBTb21lIGltcGxlbWVudGF0aW9ucyBvZiBleGNlcHRpb24gaGFuZGxpbmcgZG9uJ3QgY3JlYXRlIGEgc3RhY2sgdHJhY2UgaWYgdGhlIGV4Y2VwdGlvblxuLy8gaXNuJ3QgdGhyb3duLCBob3dldmVyIGl0J3MgZmFzdGVyIG5vdCB0byBhY3R1YWxseSB0aHJvdyB0aGUgZXhjZXB0aW9uLlxudmFyIGVycm9yID0gZ2V0U3RhY2t0cmFjZVdpdGhVbmNhdWdodEVycm9yKCk7XG52YXIgY291Z2h0RXJyb3IgPSBnZXRTdGFja3RyYWNlV2l0aENhdWdodEVycm9yKCk7XG52YXIgZ2V0U3RhY2t0cmFjZSA9IGVycm9yLnN0YWNrID9cbiAgICBnZXRTdGFja3RyYWNlV2l0aFVuY2F1Z2h0RXJyb3IgOlxuICAgIChjb3VnaHRFcnJvci5zdGFjayA/IGdldFN0YWNrdHJhY2VXaXRoQ2F1Z2h0RXJyb3IgOiBnZXRTdGFja3RyYWNlV2l0aFVuY2F1Z2h0RXJyb3IpO1xuZnVuY3Rpb24gZ2V0RnJhbWVzKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yLnN0YWNrID8gZXJyb3Iuc3RhY2suc3BsaXQoTkVXTElORSkgOiBbXTtcbn1cbmZ1bmN0aW9uIGFkZEVycm9yU3RhY2sobGluZXMsIGVycm9yKSB7XG4gICAgdmFyIHRyYWNlID0gZ2V0RnJhbWVzKGVycm9yKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmcmFtZSA9IHRyYWNlW2ldO1xuICAgICAgICAvLyBGaWx0ZXIgb3V0IHRoZSBGcmFtZXMgd2hpY2ggYXJlIHBhcnQgb2Ygc3RhY2sgY2FwdHVyaW5nLlxuICAgICAgICBpZiAoIShpIDwgSUdOT1JFX0ZSQU1FUy5sZW5ndGggJiYgSUdOT1JFX0ZSQU1FU1tpXSA9PT0gZnJhbWUpKSB7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKHRyYWNlW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHJlbmRlckxvbmdTdGFja1RyYWNlKGZyYW1lcywgc3RhY2spIHtcbiAgICB2YXIgbG9uZ1RyYWNlID0gW3N0YWNrXTtcbiAgICBpZiAoZnJhbWVzKSB7XG4gICAgICAgIHZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB0cmFjZUZyYW1lcyA9IGZyYW1lc1tpXTtcbiAgICAgICAgICAgIHZhciBsYXN0VGltZSA9IHRyYWNlRnJhbWVzLnRpbWVzdGFtcDtcbiAgICAgICAgICAgIGxvbmdUcmFjZS5wdXNoKFNFUCArIFwiIEVsYXBzZWQ6IFwiICsgKHRpbWVzdGFtcCAtIGxhc3RUaW1lLmdldFRpbWUoKSkgKyBcIiBtczsgQXQ6IFwiICsgbGFzdFRpbWUgKyBcIiBcIiArIFNFUCk7XG4gICAgICAgICAgICBhZGRFcnJvclN0YWNrKGxvbmdUcmFjZSwgdHJhY2VGcmFtZXMuZXJyb3IpO1xuICAgICAgICAgICAgdGltZXN0YW1wID0gbGFzdFRpbWUuZ2V0VGltZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsb25nVHJhY2Uuam9pbihORVdMSU5FKTtcbn1cblpvbmVbJ2xvbmdTdGFja1RyYWNlWm9uZVNwZWMnXSA9IHtcbiAgICBuYW1lOiAnbG9uZy1zdGFjay10cmFjZScsXG4gICAgbG9uZ1N0YWNrVHJhY2VMaW1pdDogMTAsXG4gICAgb25TY2hlZHVsZVRhc2s6IGZ1bmN0aW9uIChwYXJlbnRab25lRGVsZWdhdGUsIGN1cnJlbnRab25lLCB0YXJnZXRab25lLCB0YXNrKSB7XG4gICAgICAgIHZhciBjdXJyZW50VGFzayA9IFpvbmUuY3VycmVudFRhc2s7XG4gICAgICAgIHZhciB0cmFjZSA9IGN1cnJlbnRUYXNrICYmIGN1cnJlbnRUYXNrLmRhdGEgJiYgY3VycmVudFRhc2suZGF0YVtjcmVhdGlvblRyYWNlXSB8fCBbXTtcbiAgICAgICAgdHJhY2UgPSBbbmV3IExvbmdTdGFja1RyYWNlKCldLmNvbmNhdCh0cmFjZSk7XG4gICAgICAgIGlmICh0cmFjZS5sZW5ndGggPiB0aGlzLmxvbmdTdGFja1RyYWNlTGltaXQpIHtcbiAgICAgICAgICAgIHRyYWNlLmxlbmd0aCA9IHRoaXMubG9uZ1N0YWNrVHJhY2VMaW1pdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2suZGF0YSlcbiAgICAgICAgICAgIHRhc2suZGF0YSA9IHt9O1xuICAgICAgICB0YXNrLmRhdGFbY3JlYXRpb25UcmFjZV0gPSB0cmFjZTtcbiAgICAgICAgcmV0dXJuIHBhcmVudFpvbmVEZWxlZ2F0ZS5zY2hlZHVsZVRhc2sodGFyZ2V0Wm9uZSwgdGFzayk7XG4gICAgfSxcbiAgICBvbkhhbmRsZUVycm9yOiBmdW5jdGlvbiAocGFyZW50Wm9uZURlbGVnYXRlLCBjdXJyZW50Wm9uZSwgdGFyZ2V0Wm9uZSwgZXJyb3IpIHtcbiAgICAgICAgdmFyIHBhcmVudFRhc2sgPSBab25lLmN1cnJlbnRUYXNrIHx8IGVycm9yLnRhc2s7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIHBhcmVudFRhc2spIHtcbiAgICAgICAgICAgIHZhciBzdGFja1NldFN1Y2NlZWRlZCA9IG51bGw7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlcnJvciwgJ3N0YWNrJyk7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlbGVnYXRlR2V0XzEgPSBkZXNjcmlwdG9yLmdldDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlXzEgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlckxvbmdTdGFja1RyYWNlKHBhcmVudFRhc2suZGF0YSAmJiBwYXJlbnRUYXNrLmRhdGFbY3JlYXRpb25UcmFjZV0sIGRlbGVnYXRlR2V0XzEgPyBkZWxlZ2F0ZUdldF8xLmFwcGx5KHRoaXMpIDogdmFsdWVfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrU2V0U3VjY2VlZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbG9uZ1N0YWNrID0gc3RhY2tTZXRTdWNjZWVkZWQgP1xuICAgICAgICAgICAgICAgIG51bGwgOlxuICAgICAgICAgICAgICAgIHJlbmRlckxvbmdTdGFja1RyYWNlKHBhcmVudFRhc2suZGF0YSAmJiBwYXJlbnRUYXNrLmRhdGFbY3JlYXRpb25UcmFjZV0sIGVycm9yLnN0YWNrKTtcbiAgICAgICAgICAgIGlmICghc3RhY2tTZXRTdWNjZWVkZWQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzdGFja1NldFN1Y2NlZWRlZCA9IGVycm9yLnN0YWNrID0gbG9uZ1N0YWNrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdGFja1NldFN1Y2NlZWRlZCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrU2V0U3VjY2VlZGVkID0gZXJyb3IubG9uZ1N0YWNrID0gbG9uZ1N0YWNrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnRab25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGFyZ2V0Wm9uZSwgZXJyb3IpO1xuICAgIH1cbn07XG5mdW5jdGlvbiBjYXB0dXJlU3RhY2tUcmFjZXMoc3RhY2tUcmFjZXMsIGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICBzdGFja1RyYWNlcy5wdXNoKGdldEZyYW1lcygobmV3IExvbmdTdGFja1RyYWNlKCkpLmVycm9yKSk7XG4gICAgICAgIGNhcHR1cmVTdGFja1RyYWNlcyhzdGFja1RyYWNlcywgY291bnQgLSAxKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjb21wdXRlSWdub3JlRnJhbWVzKCkge1xuICAgIHZhciBmcmFtZXMgPSBbXTtcbiAgICBjYXB0dXJlU3RhY2tUcmFjZXMoZnJhbWVzLCAyKTtcbiAgICB2YXIgZnJhbWVzMSA9IGZyYW1lc1swXTtcbiAgICB2YXIgZnJhbWVzMiA9IGZyYW1lc1sxXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lczEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZyYW1lMSA9IGZyYW1lczFbaV07XG4gICAgICAgIHZhciBmcmFtZTIgPSBmcmFtZXMyW2ldO1xuICAgICAgICBpZiAoZnJhbWUxID09PSBmcmFtZTIpIHtcbiAgICAgICAgICAgIElHTk9SRV9GUkFNRVMucHVzaChmcmFtZTEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5jb21wdXRlSWdub3JlRnJhbWVzKCk7XG5cbn0pKSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vem9uZS5qcy9kaXN0L2xvbmctc3RhY2stdHJhY2Utem9uZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvem9uZS5qcy9kaXN0L2xvbmctc3RhY2stdHJhY2Utem9uZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./node_modules/zone.js/dist/zone.js": +/***/ (function(module, exports, __webpack_require__) { + +eval("/* WEBPACK VAR INJECTION */(function(global, process) {/**\n* @license\n* Copyright Google Inc. All Rights Reserved.\n*\n* Use of this source code is governed by an MIT-style license that can be\n* found in the LICENSE file at https://angular.io/license\n*/\n(function (global, factory) {\n true ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nvar Zone$1 = (function (global) {\n if (global['Zone']) {\n throw new Error('Zone already loaded.');\n }\n var NO_ZONE = { name: 'NO ZONE' };\n var notScheduled = 'notScheduled', scheduling = 'scheduling', scheduled = 'scheduled', running = 'running', canceling = 'canceling';\n var microTask = 'microTask', macroTask = 'macroTask', eventTask = 'eventTask';\n var Zone = (function () {\n function Zone(parent, zoneSpec) {\n this._properties = null;\n this._parent = parent;\n this._name = zoneSpec ? zoneSpec.name || 'unnamed' : '';\n this._properties = zoneSpec && zoneSpec.properties || {};\n this._zoneDelegate =\n new ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec);\n }\n Zone.assertZonePatched = function () {\n if (global.Promise !== ZoneAwarePromise) {\n throw new Error('Zone.js has detected that ZoneAwarePromise `(window|global).Promise` ' +\n 'has been overwritten.\\n' +\n 'Most likely cause is that a Promise polyfill has been loaded ' +\n 'after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. ' +\n 'If you must load one, do so before loading zone.js.)');\n }\n };\n Object.defineProperty(Zone, \"root\", {\n get: function () {\n var zone = Zone.current;\n while (zone.parent) {\n zone = zone.parent;\n }\n return zone;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Zone, \"current\", {\n get: function () {\n return _currentZoneFrame.zone;\n },\n enumerable: true,\n configurable: true\n });\n \n Object.defineProperty(Zone, \"currentTask\", {\n get: function () {\n return _currentTask;\n },\n enumerable: true,\n configurable: true\n });\n \n Object.defineProperty(Zone.prototype, \"parent\", {\n get: function () {\n return this._parent;\n },\n enumerable: true,\n configurable: true\n });\n \n Object.defineProperty(Zone.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n enumerable: true,\n configurable: true\n });\n \n Zone.prototype.get = function (key) {\n var zone = this.getZoneWith(key);\n if (zone)\n return zone._properties[key];\n };\n Zone.prototype.getZoneWith = function (key) {\n var current = this;\n while (current) {\n if (current._properties.hasOwnProperty(key)) {\n return current;\n }\n current = current._parent;\n }\n return null;\n };\n Zone.prototype.fork = function (zoneSpec) {\n if (!zoneSpec)\n throw new Error('ZoneSpec required!');\n return this._zoneDelegate.fork(this, zoneSpec);\n };\n Zone.prototype.wrap = function (callback, source) {\n if (typeof callback !== 'function') {\n throw new Error('Expecting function got: ' + callback);\n }\n var _callback = this._zoneDelegate.intercept(this, callback, source);\n var zone = this;\n return function () {\n return zone.runGuarded(_callback, this, arguments, source);\n };\n };\n Zone.prototype.run = function (callback, applyThis, applyArgs, source) {\n if (applyThis === void 0) { applyThis = undefined; }\n if (applyArgs === void 0) { applyArgs = null; }\n if (source === void 0) { source = null; }\n _currentZoneFrame = new ZoneFrame(_currentZoneFrame, this);\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n };\n Zone.prototype.runGuarded = function (callback, applyThis, applyArgs, source) {\n if (applyThis === void 0) { applyThis = null; }\n if (applyArgs === void 0) { applyArgs = null; }\n if (source === void 0) { source = null; }\n _currentZoneFrame = new ZoneFrame(_currentZoneFrame, this);\n try {\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n };\n Zone.prototype.runTask = function (task, applyThis, applyArgs) {\n if (task.zone != this)\n throw new Error('A task can only be run in the zone of creation! (Creation: ' +\n (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')');\n var reEntryGuard = task.state != running;\n reEntryGuard && task._transitionTo(running, scheduled);\n task.runCount++;\n var previousTask = _currentTask;\n _currentTask = task;\n _currentZoneFrame = new ZoneFrame(_currentZoneFrame, this);\n try {\n if (task.type == macroTask && task.data && !task.data.isPeriodic) {\n task.cancelFn = null;\n }\n try {\n return this._zoneDelegate.invokeTask(this, task, applyThis, applyArgs);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n if (task.type == eventTask || (task.data && task.data.isPeriodic)) {\n reEntryGuard && task._transitionTo(scheduled, running, notScheduled);\n }\n else {\n task.runCount = 0;\n this._updateTaskCount(task, -1);\n reEntryGuard && task._transitionTo(notScheduled, running, notScheduled);\n }\n _currentZoneFrame = _currentZoneFrame.parent;\n _currentTask = previousTask;\n }\n };\n Zone.prototype.scheduleTask = function (task) {\n task._transitionTo(scheduling, notScheduled);\n var zoneDelegates = [];\n task._zoneDelegates = zoneDelegates;\n task.zone = this;\n task = this._zoneDelegate.scheduleTask(this, task);\n if (task._zoneDelegates === zoneDelegates) {\n // we have to check because internally the delegate can reschedule the task.\n this._updateTaskCount(task, 1);\n }\n if (task.state == scheduling) {\n task._transitionTo(scheduled, scheduling);\n }\n return task;\n };\n Zone.prototype.scheduleMicroTask = function (source, callback, data, customSchedule) {\n return this.scheduleTask(new ZoneTask(microTask, source, callback, data, customSchedule, null));\n };\n Zone.prototype.scheduleMacroTask = function (source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(macroTask, source, callback, data, customSchedule, customCancel));\n };\n Zone.prototype.scheduleEventTask = function (source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(eventTask, source, callback, data, customSchedule, customCancel));\n };\n Zone.prototype.cancelTask = function (task) {\n task._transitionTo(canceling, scheduled, running);\n this._zoneDelegate.cancelTask(this, task);\n this._updateTaskCount(task, -1);\n task._transitionTo(notScheduled, canceling);\n task.runCount = 0;\n return task;\n };\n Zone.prototype._updateTaskCount = function (task, count) {\n var zoneDelegates = task._zoneDelegates;\n if (count == -1) {\n task._zoneDelegates = null;\n }\n for (var i = 0; i < zoneDelegates.length; i++) {\n zoneDelegates[i]._updateTaskCount(task.type, count);\n }\n };\n Zone.__symbol__ = __symbol__;\n return Zone;\n }());\n var DELEGATE_ZS = {\n name: '',\n onHasTask: function (delegate, _, target, hasTaskState) {\n return delegate.hasTask(target, hasTaskState);\n },\n onScheduleTask: function (delegate, _, target, task) {\n return delegate.scheduleTask(target, task);\n },\n onInvokeTask: function (delegate, _, target, task, applyThis, applyArgs) {\n return delegate.invokeTask(target, task, applyThis, applyArgs);\n },\n onCancelTask: function (delegate, _, target, task) {\n return delegate.cancelTask(target, task);\n }\n };\n var ZoneDelegate = (function () {\n function ZoneDelegate(zone, parentDelegate, zoneSpec) {\n this._taskCounts = { microTask: 0, macroTask: 0, eventTask: 0 };\n this.zone = zone;\n this._parentDelegate = parentDelegate;\n this._forkZS = zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS);\n this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt);\n this._forkCurrZone = zoneSpec && (zoneSpec.onFork ? this.zone : parentDelegate.zone);\n this._interceptZS =\n zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS);\n this._interceptDlgt =\n zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt);\n this._interceptCurrZone =\n zoneSpec && (zoneSpec.onIntercept ? this.zone : parentDelegate.zone);\n this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS);\n this._invokeDlgt =\n zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt);\n this._invokeCurrZone = zoneSpec && (zoneSpec.onInvoke ? this.zone : parentDelegate.zone);\n this._handleErrorZS =\n zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS);\n this._handleErrorDlgt =\n zoneSpec && (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt);\n this._handleErrorCurrZone =\n zoneSpec && (zoneSpec.onHandleError ? this.zone : parentDelegate.zone);\n this._scheduleTaskZS =\n zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS);\n this._scheduleTaskDlgt =\n zoneSpec && (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt);\n this._scheduleTaskCurrZone =\n zoneSpec && (zoneSpec.onScheduleTask ? this.zone : parentDelegate.zone);\n this._invokeTaskZS =\n zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS);\n this._invokeTaskDlgt =\n zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt);\n this._invokeTaskCurrZone =\n zoneSpec && (zoneSpec.onInvokeTask ? this.zone : parentDelegate.zone);\n this._cancelTaskZS =\n zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS);\n this._cancelTaskDlgt =\n zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt);\n this._cancelTaskCurrZone =\n zoneSpec && (zoneSpec.onCancelTask ? this.zone : parentDelegate.zone);\n this._hasTaskZS = null;\n this._hasTaskDlgt = null;\n this._hasTaskDlgtOwner = null;\n this._hasTaskCurrZone = null;\n var zoneSpecHasTask = zoneSpec && zoneSpec.onHasTask;\n var parentHasTask = parentDelegate && parentDelegate._hasTaskZS;\n if (zoneSpecHasTask || parentHasTask) {\n // If we need to report hasTask, than this ZS needs to do ref counting on tasks. In such\n // a case all task related interceptors must go through this ZD. We can't short circuit it.\n this._hasTaskZS = zoneSpecHasTask ? zoneSpec : DELEGATE_ZS;\n this._hasTaskDlgt = parentDelegate;\n this._hasTaskDlgtOwner = this;\n this._hasTaskCurrZone = zone;\n if (!zoneSpec.onScheduleTask) {\n this._scheduleTaskZS = DELEGATE_ZS;\n this._scheduleTaskDlgt = parentDelegate;\n this._scheduleTaskCurrZone = this.zone;\n }\n if (!zoneSpec.onInvokeTask) {\n this._invokeTaskZS = DELEGATE_ZS;\n this._invokeTaskDlgt = parentDelegate;\n this._invokeTaskCurrZone = this.zone;\n }\n if (!zoneSpec.onCancelTask) {\n this._cancelTaskZS = DELEGATE_ZS;\n this._cancelTaskDlgt = parentDelegate;\n this._cancelTaskCurrZone = this.zone;\n }\n }\n }\n ZoneDelegate.prototype.fork = function (targetZone, zoneSpec) {\n return this._forkZS ? this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec) :\n new Zone(targetZone, zoneSpec);\n };\n ZoneDelegate.prototype.intercept = function (targetZone, callback, source) {\n return this._interceptZS ?\n this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, targetZone, callback, source) :\n callback;\n };\n ZoneDelegate.prototype.invoke = function (targetZone, callback, applyThis, applyArgs, source) {\n return this._invokeZS ?\n this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, targetZone, callback, applyThis, applyArgs, source) :\n callback.apply(applyThis, applyArgs);\n };\n ZoneDelegate.prototype.handleError = function (targetZone, error) {\n return this._handleErrorZS ?\n this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, targetZone, error) :\n true;\n };\n ZoneDelegate.prototype.scheduleTask = function (targetZone, task) {\n var returnTask = task;\n if (this._scheduleTaskZS) {\n if (this._hasTaskZS) {\n returnTask._zoneDelegates.push(this._hasTaskDlgtOwner);\n }\n returnTask = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, targetZone, task);\n if (!returnTask)\n returnTask = task;\n }\n else {\n if (task.scheduleFn) {\n task.scheduleFn(task);\n }\n else if (task.type == microTask) {\n scheduleMicroTask(task);\n }\n else {\n throw new Error('Task is missing scheduleFn.');\n }\n }\n return returnTask;\n };\n ZoneDelegate.prototype.invokeTask = function (targetZone, task, applyThis, applyArgs) {\n return this._invokeTaskZS ?\n this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, targetZone, task, applyThis, applyArgs) :\n task.callback.apply(applyThis, applyArgs);\n };\n ZoneDelegate.prototype.cancelTask = function (targetZone, task) {\n var value;\n if (this._cancelTaskZS) {\n value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, targetZone, task);\n }\n else {\n value = task.cancelFn(task);\n }\n return value;\n };\n ZoneDelegate.prototype.hasTask = function (targetZone, isEmpty) {\n return this._hasTaskZS &&\n this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, targetZone, isEmpty);\n };\n ZoneDelegate.prototype._updateTaskCount = function (type, count) {\n var counts = this._taskCounts;\n var prev = counts[type];\n var next = counts[type] = prev + count;\n if (next < 0) {\n throw new Error('More tasks executed then were scheduled.');\n }\n if (prev == 0 || next == 0) {\n var isEmpty = {\n microTask: counts.microTask > 0,\n macroTask: counts.macroTask > 0,\n eventTask: counts.eventTask > 0,\n change: type\n };\n // TODO(misko): what should happen if it throws?\n this.hasTask(this.zone, isEmpty);\n }\n };\n return ZoneDelegate;\n }());\n var ZoneTask = (function () {\n function ZoneTask(type, source, callback, options, scheduleFn, cancelFn) {\n this.zone = null;\n this.runCount = 0;\n this._zoneDelegates = null;\n this._state = 'notScheduled';\n this.type = type;\n this.source = source;\n this.data = options;\n this.scheduleFn = scheduleFn;\n this.cancelFn = cancelFn;\n this.callback = callback;\n var self = this;\n this.invoke = function () {\n _numberOfNestedTaskFrames++;\n try {\n self.runCount++;\n return self.zone.runTask(self, this, arguments);\n }\n finally {\n if (_numberOfNestedTaskFrames == 1) {\n drainMicroTaskQueue();\n }\n _numberOfNestedTaskFrames--;\n }\n };\n }\n Object.defineProperty(ZoneTask.prototype, \"state\", {\n get: function () {\n return this._state;\n },\n enumerable: true,\n configurable: true\n });\n ZoneTask.prototype.cancelScheduleRequest = function () {\n this._transitionTo(notScheduled, scheduling);\n };\n ZoneTask.prototype._transitionTo = function (toState, fromState1, fromState2) {\n if (this._state === fromState1 || this._state === fromState2) {\n this._state = toState;\n if (toState == notScheduled) {\n this._zoneDelegates = null;\n }\n }\n else {\n debugger;\n throw new Error(this.type + \" '\" + this.source + \"': can not transition to '\" + toState + \"', expecting state '\" + fromState1 + \"'\" + (fromState2 ?\n ' or \\'' + fromState2 + '\\'' :\n '') + \", was '\" + this._state + \"'.\");\n }\n };\n ZoneTask.prototype.toString = function () {\n if (this.data && typeof this.data.handleId !== 'undefined') {\n return this.data.handleId;\n }\n else {\n return Object.prototype.toString.call(this);\n }\n };\n // add toJSON method to prevent cyclic error when\n // call JSON.stringify(zoneTask)\n ZoneTask.prototype.toJSON = function () {\n return {\n type: this.type,\n state: this.state,\n source: this.source,\n data: this.data,\n zone: this.zone.name,\n invoke: this.invoke,\n scheduleFn: this.scheduleFn,\n cancelFn: this.cancelFn,\n runCount: this.runCount,\n callback: this.callback\n };\n };\n return ZoneTask;\n }());\n var ZoneFrame = (function () {\n function ZoneFrame(parent, zone) {\n this.parent = parent;\n this.zone = zone;\n }\n return ZoneFrame;\n }());\n function __symbol__(name) {\n return '__zone_symbol__' + name;\n }\n \n var symbolSetTimeout = __symbol__('setTimeout');\n var symbolPromise = __symbol__('Promise');\n var symbolThen = __symbol__('then');\n var _currentZoneFrame = new ZoneFrame(null, new Zone(null, null));\n var _currentTask = null;\n var _microTaskQueue = [];\n var _isDrainingMicrotaskQueue = false;\n var _uncaughtPromiseErrors = [];\n var _numberOfNestedTaskFrames = 0;\n function scheduleQueueDrain() {\n // if we are not running in any task, and there has not been anything scheduled\n // we must bootstrap the initial task creation by manually scheduling the drain\n if (_numberOfNestedTaskFrames === 0 && _microTaskQueue.length === 0) {\n // We are not running in Task, so we need to kickstart the microtask queue.\n if (global[symbolPromise]) {\n global[symbolPromise].resolve(0)[symbolThen](drainMicroTaskQueue);\n }\n else {\n global[symbolSetTimeout](drainMicroTaskQueue, 0);\n }\n }\n }\n function scheduleMicroTask(task) {\n scheduleQueueDrain();\n _microTaskQueue.push(task);\n }\n function consoleError(e) {\n var rejection = e && e.rejection;\n if (rejection) {\n console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined);\n }\n console.error(e);\n }\n function drainMicroTaskQueue() {\n if (!_isDrainingMicrotaskQueue) {\n _isDrainingMicrotaskQueue = true;\n while (_microTaskQueue.length) {\n var queue = _microTaskQueue;\n _microTaskQueue = [];\n for (var i = 0; i < queue.length; i++) {\n var task = queue[i];\n try {\n task.zone.runTask(task, null, null);\n }\n catch (error) {\n consoleError(error);\n }\n }\n }\n while (_uncaughtPromiseErrors.length) {\n var _loop_1 = function() {\n var uncaughtPromiseError = _uncaughtPromiseErrors.shift();\n try {\n uncaughtPromiseError.zone.runGuarded(function () {\n throw uncaughtPromiseError;\n });\n }\n catch (error) {\n consoleError(error);\n }\n };\n while (_uncaughtPromiseErrors.length) {\n _loop_1();\n }\n }\n _isDrainingMicrotaskQueue = false;\n }\n }\n function isThenable(value) {\n return value && value.then;\n }\n function forwardResolution(value) {\n return value;\n }\n function forwardRejection(rejection) {\n return ZoneAwarePromise.reject(rejection);\n }\n var symbolState = __symbol__('state');\n var symbolValue = __symbol__('value');\n var source = 'Promise.then';\n var UNRESOLVED = null;\n var RESOLVED = true;\n var REJECTED = false;\n var REJECTED_NO_CATCH = 0;\n function makeResolver(promise, state) {\n return function (v) {\n try {\n resolvePromise(promise, state, v);\n }\n catch (err) {\n resolvePromise(promise, false, err);\n }\n // Do not return value or you will break the Promise spec.\n };\n }\n var once = function () {\n var wasCalled = false;\n return function wrapper(wrappedFunction) {\n return function () {\n if (wasCalled) {\n return;\n }\n wasCalled = true;\n wrappedFunction.apply(null, arguments);\n };\n };\n };\n // Promise Resolution\n function resolvePromise(promise, state, value) {\n var onceWrapper = once();\n if (promise === value) {\n throw new TypeError('Promise resolved with itself');\n }\n if (promise[symbolState] === UNRESOLVED) {\n // should only get value.then once based on promise spec.\n var then = null;\n try {\n if (typeof value === 'object' || typeof value === 'function') {\n then = value && value.then;\n }\n }\n catch (err) {\n onceWrapper(function () {\n resolvePromise(promise, false, err);\n })();\n return promise;\n }\n // if (value instanceof ZoneAwarePromise) {\n if (state !== REJECTED && value instanceof ZoneAwarePromise &&\n value.hasOwnProperty(symbolState) && value.hasOwnProperty(symbolValue) &&\n value[symbolState] !== UNRESOLVED) {\n clearRejectedNoCatch(value);\n resolvePromise(promise, value[symbolState], value[symbolValue]);\n }\n else if (state !== REJECTED && typeof then === 'function') {\n try {\n then.apply(value, [\n onceWrapper(makeResolver(promise, state)), onceWrapper(makeResolver(promise, false))\n ]);\n }\n catch (err) {\n onceWrapper(function () {\n resolvePromise(promise, false, err);\n })();\n }\n }\n else {\n promise[symbolState] = state;\n var queue = promise[symbolValue];\n promise[symbolValue] = value;\n for (var i = 0; i < queue.length;) {\n scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]);\n }\n if (queue.length == 0 && state == REJECTED) {\n promise[symbolState] = REJECTED_NO_CATCH;\n try {\n throw new Error('Uncaught (in promise): ' + value +\n (value && value.stack ? '\\n' + value.stack : ''));\n }\n catch (err) {\n var error_1 = err;\n error_1.rejection = value;\n error_1.promise = promise;\n error_1.zone = Zone.current;\n error_1.task = Zone.currentTask;\n _uncaughtPromiseErrors.push(error_1);\n scheduleQueueDrain();\n }\n }\n }\n }\n // Resolving an already resolved promise is a noop.\n return promise;\n }\n function clearRejectedNoCatch(promise) {\n if (promise[symbolState] === REJECTED_NO_CATCH) {\n promise[symbolState] = REJECTED;\n for (var i = 0; i < _uncaughtPromiseErrors.length; i++) {\n if (promise === _uncaughtPromiseErrors[i].promise) {\n _uncaughtPromiseErrors.splice(i, 1);\n break;\n }\n }\n }\n }\n function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) {\n clearRejectedNoCatch(promise);\n var delegate = promise[symbolState] ?\n (typeof onFulfilled === 'function') ? onFulfilled : forwardResolution :\n (typeof onRejected === 'function') ? onRejected : forwardRejection;\n zone.scheduleMicroTask(source, function () {\n try {\n resolvePromise(chainPromise, true, zone.run(delegate, undefined, [promise[symbolValue]]));\n }\n catch (error) {\n resolvePromise(chainPromise, false, error);\n }\n });\n }\n var ZoneAwarePromise = (function () {\n function ZoneAwarePromise(executor) {\n var promise = this;\n if (!(promise instanceof ZoneAwarePromise)) {\n throw new Error('Must be an instanceof Promise.');\n }\n promise[symbolState] = UNRESOLVED;\n promise[symbolValue] = []; // queue;\n try {\n executor && executor(makeResolver(promise, RESOLVED), makeResolver(promise, REJECTED));\n }\n catch (error) {\n resolvePromise(promise, false, error);\n }\n }\n ZoneAwarePromise.toString = function () {\n return 'function ZoneAwarePromise() { [native code] }';\n };\n ZoneAwarePromise.resolve = function (value) {\n return resolvePromise(new this(null), RESOLVED, value);\n };\n ZoneAwarePromise.reject = function (error) {\n return resolvePromise(new this(null), REJECTED, error);\n };\n ZoneAwarePromise.race = function (values) {\n var resolve;\n var reject;\n var promise = new this(function (res, rej) {\n _a = [res, rej], resolve = _a[0], reject = _a[1];\n var _a;\n });\n function onResolve(value) {\n promise && (promise = null || resolve(value));\n }\n function onReject(error) {\n promise && (promise = null || reject(error));\n }\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n if (!isThenable(value)) {\n value = this.resolve(value);\n }\n value.then(onResolve, onReject);\n }\n return promise;\n };\n ZoneAwarePromise.all = function (values) {\n var resolve;\n var reject;\n var promise = new this(function (res, rej) {\n resolve = res;\n reject = rej;\n });\n var count = 0;\n var resolvedValues = [];\n for (var _i = 0, values_2 = values; _i < values_2.length; _i++) {\n var value = values_2[_i];\n if (!isThenable(value)) {\n value = this.resolve(value);\n }\n value.then((function (index) { return function (value) {\n resolvedValues[index] = value;\n count--;\n if (!count) {\n resolve(resolvedValues);\n }\n }; })(count), reject);\n count++;\n }\n if (!count)\n resolve(resolvedValues);\n return promise;\n };\n ZoneAwarePromise.prototype.then = function (onFulfilled, onRejected) {\n var chainPromise = new this.constructor(null);\n var zone = Zone.current;\n if (this[symbolState] == UNRESOLVED) {\n this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected);\n }\n else {\n scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected);\n }\n return chainPromise;\n };\n ZoneAwarePromise.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n };\n return ZoneAwarePromise;\n }());\n // Protect against aggressive optimizers dropping seemingly unused properties.\n // E.g. Closure Compiler in advanced mode.\n ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve;\n ZoneAwarePromise['reject'] = ZoneAwarePromise.reject;\n ZoneAwarePromise['race'] = ZoneAwarePromise.race;\n ZoneAwarePromise['all'] = ZoneAwarePromise.all;\n var NativePromise = global[symbolPromise] = global['Promise'];\n global['Promise'] = ZoneAwarePromise;\n var symbolThenPatched = __symbol__('thenPatched');\n function patchThen(Ctor) {\n var proto = Ctor.prototype;\n var originalThen = proto.then;\n // Keep a reference to the original method.\n proto[symbolThen] = originalThen;\n Ctor.prototype.then = function (onResolve, onReject) {\n var _this = this;\n var wrapped = new ZoneAwarePromise(function (resolve, reject) {\n originalThen.call(_this, resolve, reject);\n });\n return wrapped.then(onResolve, onReject);\n };\n Ctor[symbolThenPatched] = true;\n }\n function zoneify(fn) {\n return function () {\n var resultPromise = fn.apply(this, arguments);\n if (resultPromise instanceof ZoneAwarePromise) {\n return resultPromise;\n }\n var Ctor = resultPromise.constructor;\n if (!Ctor[symbolThenPatched]) {\n patchThen(Ctor);\n }\n return resultPromise;\n };\n }\n if (NativePromise) {\n patchThen(NativePromise);\n var fetch = global['fetch'];\n if (typeof fetch == 'function') {\n global['fetch'] = zoneify(fetch);\n }\n }\n // This is not part of public API, but it is usefull for tests, so we expose it.\n Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors;\n /*\n * This code patches Error so that:\n * - It ignores un-needed stack frames.\n * - It Shows the associated Zone for reach frame.\n */\n var FrameType;\n (function (FrameType) {\n /// Skip this frame when printing out stack\n FrameType[FrameType[\"blackList\"] = 0] = \"blackList\";\n /// This frame marks zone transition\n FrameType[FrameType[\"transition\"] = 1] = \"transition\";\n })(FrameType || (FrameType = {}));\n var NativeError = global[__symbol__('Error')] = global.Error;\n // Store the frames which should be removed from the stack frames\n var blackListedStackFrames = {};\n // We must find the frame where Error was created, otherwise we assume we don't understand stack\n var zoneAwareFrame;\n global.Error = ZoneAwareError;\n // How should the stack frames be parsed.\n var frameParserStrategy = null;\n var stackRewrite = 'stackRewrite';\n // fix #595, create property descriptor\n // for error properties\n var createProperty = function (props, key) {\n // if property is already defined, skip it.\n if (props[key]) {\n return;\n }\n // define a local property\n // in case error property is not settable\n var name = __symbol__(key);\n props[key] = {\n configurable: true,\n enumerable: true,\n get: function () {\n // if local property has no value\n // use internal error's property value\n if (!this[name]) {\n var error_2 = this[__symbol__('error')];\n if (error_2) {\n this[name] = error_2[key];\n }\n }\n return this[name];\n },\n set: function (value) {\n // setter will set value to local property value\n this[name] = value;\n }\n };\n };\n // fix #595, create property descriptor\n // for error method properties\n var createMethodProperty = function (props, key) {\n if (props[key]) {\n return;\n }\n props[key] = {\n configurable: true,\n enumerable: true,\n writable: true,\n value: function () {\n var error = this[__symbol__('error')];\n var errorMethod = (error && error[key]) || this[key];\n if (errorMethod) {\n return errorMethod.apply(error, arguments);\n }\n }\n };\n };\n var createErrorProperties = function () {\n var props = Object.create(null);\n var error = new NativeError();\n var keys = Object.getOwnPropertyNames(error);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(error, key)) {\n createProperty(props, key);\n }\n }\n var proto = NativeError.prototype;\n if (proto) {\n var pKeys = Object.getOwnPropertyNames(proto);\n for (var i = 0; i < pKeys.length; i++) {\n var key = pKeys[i];\n // skip constructor\n if (key !== 'constructor' && key !== 'toString' && key !== 'toSource') {\n createProperty(props, key);\n }\n }\n }\n // some other properties are not\n // in NativeError\n createProperty(props, 'originalStack');\n createProperty(props, 'zoneAwareStack');\n // define toString, toSource as method property\n createMethodProperty(props, 'toString');\n createMethodProperty(props, 'toSource');\n return props;\n };\n var errorProperties = createErrorProperties();\n // for derived Error class which extends ZoneAwareError\n // we should not override the derived class's property\n // so we create a new props object only copy the properties\n // from errorProperties which not exist in derived Error's prototype\n var getErrorPropertiesForPrototype = function (prototype) {\n // if the prototype is ZoneAwareError.prototype\n // we just return the prebuilt errorProperties.\n if (prototype === ZoneAwareError.prototype) {\n return errorProperties;\n }\n var newProps = Object.create(null);\n var cKeys = Object.getOwnPropertyNames(errorProperties);\n var keys = Object.getOwnPropertyNames(prototype);\n cKeys.forEach(function (cKey) {\n if (keys.filter(function (key) {\n return key === cKey;\n })\n .length === 0) {\n newProps[cKey] = errorProperties[cKey];\n }\n });\n return newProps;\n };\n /**\n * This is ZoneAwareError which processes the stack frame and cleans up extra frames as well as\n * adds zone information to it.\n */\n function ZoneAwareError() {\n // make sure we have a valid this\n // if this is undefined(call Error without new) or this is global\n // or this is some other objects, we should force to create a\n // valid ZoneAwareError by call Object.create()\n if (!(this instanceof ZoneAwareError)) {\n return ZoneAwareError.apply(Object.create(ZoneAwareError.prototype), arguments);\n }\n // Create an Error.\n var error = NativeError.apply(this, arguments);\n this[__symbol__('error')] = error;\n // Save original stack trace\n error.originalStack = error.stack;\n // Process the stack trace and rewrite the frames.\n if (ZoneAwareError[stackRewrite] && error.originalStack) {\n var frames_1 = error.originalStack.split('\\n');\n var zoneFrame = _currentZoneFrame;\n var i = 0;\n // Find the first frame\n while (frames_1[i] !== zoneAwareFrame && i < frames_1.length) {\n i++;\n }\n for (; i < frames_1.length && zoneFrame; i++) {\n var frame = frames_1[i];\n if (frame.trim()) {\n var frameType = blackListedStackFrames.hasOwnProperty(frame) && blackListedStackFrames[frame];\n if (frameType === FrameType.blackList) {\n frames_1.splice(i, 1);\n i--;\n }\n else if (frameType === FrameType.transition) {\n if (zoneFrame.parent) {\n // This is the special frame where zone changed. Print and process it accordingly\n frames_1[i] += \" [\" + zoneFrame.parent.zone.name + \" => \" + zoneFrame.zone.name + \"]\";\n zoneFrame = zoneFrame.parent;\n }\n else {\n zoneFrame = null;\n }\n }\n else {\n frames_1[i] += \" [\" + zoneFrame.zone.name + \"]\";\n }\n }\n }\n error.stack = error.zoneAwareStack = frames_1.join('\\n');\n }\n // use defineProperties here instead of copy property value\n // because of issue #595 which will break angular2.\n Object.defineProperties(this, getErrorPropertiesForPrototype(Object.getPrototypeOf(this)));\n return this;\n }\n // Copy the prototype so that instanceof operator works as expected\n ZoneAwareError.prototype = NativeError.prototype;\n ZoneAwareError[Zone.__symbol__('blacklistedStackFrames')] = blackListedStackFrames;\n ZoneAwareError[stackRewrite] = false;\n if (NativeError.hasOwnProperty('stackTraceLimit')) {\n // Extend default stack limit as we will be removing few frames.\n NativeError.stackTraceLimit = Math.max(NativeError.stackTraceLimit, 15);\n // make sure that ZoneAwareError has the same property which forwards to NativeError.\n Object.defineProperty(ZoneAwareError, 'stackTraceLimit', {\n get: function () {\n return NativeError.stackTraceLimit;\n },\n set: function (value) {\n return NativeError.stackTraceLimit = value;\n }\n });\n }\n if (NativeError.hasOwnProperty('captureStackTrace')) {\n Object.defineProperty(ZoneAwareError, 'captureStackTrace', {\n // add named function here because we need to remove this\n // stack frame when prepareStackTrace below\n value: function zoneCaptureStackTrace(targetObject, constructorOpt) {\n NativeError.captureStackTrace(targetObject, constructorOpt);\n }\n });\n }\n Object.defineProperty(ZoneAwareError, 'prepareStackTrace', {\n get: function () {\n return NativeError.prepareStackTrace;\n },\n set: function (value) {\n if (!value || typeof value !== 'function') {\n return NativeError.prepareStackTrace = value;\n }\n return NativeError.prepareStackTrace = function (error, structuredStackTrace) {\n // remove additional stack information from ZoneAwareError.captureStackTrace\n if (structuredStackTrace) {\n for (var i = 0; i < structuredStackTrace.length; i++) {\n var st = structuredStackTrace[i];\n // remove the first function which name is zoneCaptureStackTrace\n if (st.getFunctionName() === 'zoneCaptureStackTrace') {\n structuredStackTrace.splice(i, 1);\n break;\n }\n }\n }\n return value.apply(this, [error, structuredStackTrace]);\n };\n }\n });\n // Now we need to populet the `blacklistedStackFrames` as well as find the\n // run/runGuraded/runTask frames. This is done by creating a detect zone and then threading\n // the execution through all of the above methods so that we can look at the stack trace and\n // find the frames of interest.\n var detectZone = Zone.current.fork({\n name: 'detect',\n onInvoke: function (parentZoneDelegate, currentZone, targetZone, delegate, applyThis, applyArgs, source) {\n // Here only so that it will show up in the stack frame so that it can be black listed.\n return parentZoneDelegate.invoke(targetZone, delegate, applyThis, applyArgs, source);\n },\n onHandleError: function (parentZD, current, target, error) {\n if (error.originalStack && Error === ZoneAwareError) {\n var frames_2 = error.originalStack.split(/\\n/);\n var runFrame = false, runGuardedFrame = false, runTaskFrame = false;\n while (frames_2.length) {\n var frame = frames_2.shift();\n // On safari it is possible to have stack frame with no line number.\n // This check makes sure that we don't filter frames on name only (must have\n // linenumber)\n if (/:\\d+:\\d+/.test(frame)) {\n // Get rid of the path so that we don't accidintely find function name in path.\n // In chrome the seperator is `(` and `@` in FF and safari\n // Chrome: at Zone.run (zone.js:100)\n // Chrome: at Zone.run (http://localhost:9876/base/build/lib/zone.js:100:24)\n // FireFox: Zone.prototype.run@http://localhost:9876/base/build/lib/zone.js:101:24\n // Safari: run@http://localhost:9876/base/build/lib/zone.js:101:24\n var fnName = frame.split('(')[0].split('@')[0];\n var frameType = FrameType.transition;\n if (fnName.indexOf('ZoneAwareError') !== -1) {\n zoneAwareFrame = frame;\n }\n if (fnName.indexOf('runGuarded') !== -1) {\n runGuardedFrame = true;\n }\n else if (fnName.indexOf('runTask') !== -1) {\n runTaskFrame = true;\n }\n else if (fnName.indexOf('run') !== -1) {\n runFrame = true;\n }\n else {\n frameType = FrameType.blackList;\n }\n blackListedStackFrames[frame] = frameType;\n // Once we find all of the frames we can stop looking.\n if (runFrame && runGuardedFrame && runTaskFrame) {\n ZoneAwareError[stackRewrite] = true;\n break;\n }\n }\n }\n }\n return false;\n }\n });\n // carefully constructor a stack frame which contains all of the frames of interest which\n // need to be detected and blacklisted.\n var detectRunFn = function () {\n detectZone.run(function () {\n detectZone.runGuarded(function () {\n throw new Error('blacklistStackFrames');\n });\n });\n };\n // Cause the error to extract the stack frames.\n detectZone.runTask(detectZone.scheduleMacroTask('detect', detectRunFn, null, function () { return null; }, null));\n return global['Zone'] = Zone;\n})(typeof window === 'object' && window || typeof self === 'object' && self || global);\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Suppress closure compiler errors about unknown 'Zone' variable\n * @fileoverview\n * @suppress {undefinedVars}\n */\nvar zoneSymbol = function (n) { return (\"__zone_symbol__\" + n); };\nvar _global$1 = typeof window === 'object' && window || typeof self === 'object' && self || global;\nfunction bindArguments(args, source) {\n for (var i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === 'function') {\n args[i] = Zone.current.wrap(args[i], source + '_' + i);\n }\n }\n return args;\n}\nfunction patchPrototype(prototype, fnNames) {\n var source = prototype.constructor['name'];\n var _loop_1 = function(i) {\n var name_1 = fnNames[i];\n var delegate = prototype[name_1];\n if (delegate) {\n prototype[name_1] = (function (delegate) {\n return function () {\n return delegate.apply(this, bindArguments(arguments, source + '.' + name_1));\n };\n })(delegate);\n }\n };\n for (var i = 0; i < fnNames.length; i++) {\n _loop_1(i);\n }\n}\nvar isWebWorker = (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope);\nvar isNode = (!('nw' in _global$1) && typeof process !== 'undefined' &&\n {}.toString.call(process) === '[object process]');\nvar isBrowser = !isNode && !isWebWorker && !!(typeof window !== 'undefined' && window['HTMLElement']);\n// we are in electron of nw, so we are both browser and nodejs\nvar isMix = typeof process !== 'undefined' &&\n {}.toString.call(process) === '[object process]' && !isWebWorker &&\n !!(typeof window !== 'undefined' && window['HTMLElement']);\nfunction patchProperty(obj, prop) {\n var desc = Object.getOwnPropertyDescriptor(obj, prop) || { enumerable: true, configurable: true };\n var originalDesc = Object.getOwnPropertyDescriptor(obj, 'original' + prop);\n if (!originalDesc && desc.get) {\n Object.defineProperty(obj, 'original' + prop, { enumerable: false, configurable: true, get: desc.get });\n }\n // A property descriptor cannot have getter/setter and be writable\n // deleting the writable and value properties avoids this error:\n //\n // TypeError: property descriptors must not specify a value or be writable when a\n // getter or setter has been specified\n delete desc.writable;\n delete desc.value;\n // substr(2) cuz 'onclick' -> 'click', etc\n var eventName = prop.substr(2);\n var _prop = '_' + prop;\n desc.set = function (fn) {\n if (this[_prop]) {\n this.removeEventListener(eventName, this[_prop]);\n }\n if (typeof fn === 'function') {\n var wrapFn = function (event) {\n var result;\n result = fn.apply(this, arguments);\n if (result != undefined && !result)\n event.preventDefault();\n };\n this[_prop] = wrapFn;\n this.addEventListener(eventName, wrapFn, false);\n }\n else {\n this[_prop] = null;\n }\n };\n // The getter would return undefined for unassigned properties but the default value of an\n // unassigned property is null\n desc.get = function () {\n var r = this[_prop] || null;\n // result will be null when use inline event attribute,\n // such as \n // because the onclick function is internal raw uncompiled handler\n // the onclick will be evaluated when first time event was triggered or\n // the property is accessed, https://github.com/angular/zone.js/issues/525\n // so we should use original native get to retrieve the handler\n if (r === null) {\n if (originalDesc && originalDesc.get) {\n r = originalDesc.get.apply(this, arguments);\n if (r) {\n desc.set.apply(this, [r]);\n if (typeof this['removeAttribute'] === 'function') {\n this.removeAttribute(prop);\n }\n }\n }\n }\n return this[_prop] || null;\n };\n Object.defineProperty(obj, prop, desc);\n}\n\nfunction patchOnProperties(obj, properties) {\n var onProperties = [];\n for (var prop in obj) {\n if (prop.substr(0, 2) == 'on') {\n onProperties.push(prop);\n }\n }\n for (var j = 0; j < onProperties.length; j++) {\n patchProperty(obj, onProperties[j]);\n }\n if (properties) {\n for (var i = 0; i < properties.length; i++) {\n patchProperty(obj, 'on' + properties[i]);\n }\n }\n}\n\nvar EVENT_TASKS = zoneSymbol('eventTasks');\n// For EventTarget\nvar ADD_EVENT_LISTENER = 'addEventListener';\nvar REMOVE_EVENT_LISTENER = 'removeEventListener';\nfunction findExistingRegisteredTask(target, handler, name, capture, remove) {\n var eventTasks = target[EVENT_TASKS];\n if (eventTasks) {\n for (var i = 0; i < eventTasks.length; i++) {\n var eventTask = eventTasks[i];\n var data = eventTask.data;\n var listener = data.handler;\n if ((data.handler === handler || listener.listener === handler) &&\n data.useCapturing === capture && data.eventName === name) {\n if (remove) {\n eventTasks.splice(i, 1);\n }\n return eventTask;\n }\n }\n }\n return null;\n}\nfunction findAllExistingRegisteredTasks(target, name, capture, remove) {\n var eventTasks = target[EVENT_TASKS];\n if (eventTasks) {\n var result = [];\n for (var i = eventTasks.length - 1; i >= 0; i--) {\n var eventTask = eventTasks[i];\n var data = eventTask.data;\n if (data.eventName === name && data.useCapturing === capture) {\n result.push(eventTask);\n if (remove) {\n eventTasks.splice(i, 1);\n }\n }\n }\n return result;\n }\n return null;\n}\nfunction attachRegisteredEvent(target, eventTask, isPrepend) {\n var eventTasks = target[EVENT_TASKS];\n if (!eventTasks) {\n eventTasks = target[EVENT_TASKS] = [];\n }\n if (isPrepend) {\n eventTasks.unshift(eventTask);\n }\n else {\n eventTasks.push(eventTask);\n }\n}\nvar defaultListenerMetaCreator = function (self, args) {\n return {\n useCapturing: args[2],\n eventName: args[0],\n handler: args[1],\n target: self || _global$1,\n name: args[0],\n invokeAddFunc: function (addFnSymbol, delegate) {\n if (delegate && delegate.invoke) {\n return this.target[addFnSymbol](this.eventName, delegate.invoke, this.useCapturing);\n }\n else {\n return this.target[addFnSymbol](this.eventName, delegate, this.useCapturing);\n }\n },\n invokeRemoveFunc: function (removeFnSymbol, delegate) {\n if (delegate && delegate.invoke) {\n return this.target[removeFnSymbol](this.eventName, delegate.invoke, this.useCapturing);\n }\n else {\n return this.target[removeFnSymbol](this.eventName, delegate, this.useCapturing);\n }\n }\n };\n};\nfunction makeZoneAwareAddListener(addFnName, removeFnName, useCapturingParam, allowDuplicates, isPrepend, metaCreator) {\n if (useCapturingParam === void 0) { useCapturingParam = true; }\n if (allowDuplicates === void 0) { allowDuplicates = false; }\n if (isPrepend === void 0) { isPrepend = false; }\n if (metaCreator === void 0) { metaCreator = defaultListenerMetaCreator; }\n var addFnSymbol = zoneSymbol(addFnName);\n var removeFnSymbol = zoneSymbol(removeFnName);\n var defaultUseCapturing = useCapturingParam ? false : undefined;\n function scheduleEventListener(eventTask) {\n var meta = eventTask.data;\n attachRegisteredEvent(meta.target, eventTask, isPrepend);\n return meta.invokeAddFunc(addFnSymbol, eventTask);\n }\n function cancelEventListener(eventTask) {\n var meta = eventTask.data;\n findExistingRegisteredTask(meta.target, eventTask.invoke, meta.eventName, meta.useCapturing, true);\n return meta.invokeRemoveFunc(removeFnSymbol, eventTask);\n }\n return function zoneAwareAddListener(self, args) {\n var data = metaCreator(self, args);\n data.useCapturing = data.useCapturing || defaultUseCapturing;\n // - Inside a Web Worker, `this` is undefined, the context is `global`\n // - When `addEventListener` is called on the global context in strict mode, `this` is undefined\n // see https://github.com/angular/zone.js/issues/190\n var delegate = null;\n if (typeof data.handler == 'function') {\n delegate = data.handler;\n }\n else if (data.handler && data.handler.handleEvent) {\n delegate = function (event) { return data.handler.handleEvent(event); };\n }\n var validZoneHandler = false;\n try {\n // In cross site contexts (such as WebDriver frameworks like Selenium),\n // accessing the handler object here will cause an exception to be thrown which\n // will fail tests prematurely.\n validZoneHandler = data.handler && data.handler.toString() === '[object FunctionWrapper]';\n }\n catch (error) {\n // Returning nothing here is fine, because objects in a cross-site context are unusable\n return;\n }\n // Ignore special listeners of IE11 & Edge dev tools, see\n // https://github.com/angular/zone.js/issues/150\n if (!delegate || validZoneHandler) {\n return data.invokeAddFunc(addFnSymbol, data.handler);\n }\n if (!allowDuplicates) {\n var eventTask = findExistingRegisteredTask(data.target, data.handler, data.eventName, data.useCapturing, false);\n if (eventTask) {\n // we already registered, so this will have noop.\n return data.invokeAddFunc(addFnSymbol, eventTask);\n }\n }\n var zone = Zone.current;\n var source = data.target.constructor['name'] + '.' + addFnName + ':' + data.eventName;\n zone.scheduleEventTask(source, delegate, data, scheduleEventListener, cancelEventListener);\n };\n}\nfunction makeZoneAwareRemoveListener(fnName, useCapturingParam, metaCreator) {\n if (useCapturingParam === void 0) { useCapturingParam = true; }\n if (metaCreator === void 0) { metaCreator = defaultListenerMetaCreator; }\n var symbol = zoneSymbol(fnName);\n var defaultUseCapturing = useCapturingParam ? false : undefined;\n return function zoneAwareRemoveListener(self, args) {\n var data = metaCreator(self, args);\n data.useCapturing = data.useCapturing || defaultUseCapturing;\n // - Inside a Web Worker, `this` is undefined, the context is `global`\n // - When `addEventListener` is called on the global context in strict mode, `this` is undefined\n // see https://github.com/angular/zone.js/issues/190\n var eventTask = findExistingRegisteredTask(data.target, data.handler, data.eventName, data.useCapturing, true);\n if (eventTask) {\n eventTask.zone.cancelTask(eventTask);\n }\n else {\n data.invokeRemoveFunc(symbol, data.handler);\n }\n };\n}\n\n\nvar zoneAwareAddEventListener = makeZoneAwareAddListener(ADD_EVENT_LISTENER, REMOVE_EVENT_LISTENER);\nvar zoneAwareRemoveEventListener = makeZoneAwareRemoveListener(REMOVE_EVENT_LISTENER);\nfunction patchEventTargetMethods(obj, addFnName, removeFnName, metaCreator) {\n if (addFnName === void 0) { addFnName = ADD_EVENT_LISTENER; }\n if (removeFnName === void 0) { removeFnName = REMOVE_EVENT_LISTENER; }\n if (metaCreator === void 0) { metaCreator = defaultListenerMetaCreator; }\n if (obj && obj[addFnName]) {\n patchMethod(obj, addFnName, function () { return makeZoneAwareAddListener(addFnName, removeFnName, true, false, false, metaCreator); });\n patchMethod(obj, removeFnName, function () { return makeZoneAwareRemoveListener(removeFnName, true, metaCreator); });\n return true;\n }\n else {\n return false;\n }\n}\nvar originalInstanceKey = zoneSymbol('originalInstance');\n// wrap some native API on `window`\nfunction patchClass(className) {\n var OriginalClass = _global$1[className];\n if (!OriginalClass)\n return;\n _global$1[className] = function () {\n var a = bindArguments(arguments, className);\n switch (a.length) {\n case 0:\n this[originalInstanceKey] = new OriginalClass();\n break;\n case 1:\n this[originalInstanceKey] = new OriginalClass(a[0]);\n break;\n case 2:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1]);\n break;\n case 3:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]);\n break;\n case 4:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]);\n break;\n default:\n throw new Error('Arg list too long.');\n }\n };\n var instance = new OriginalClass(function () { });\n var prop;\n for (prop in instance) {\n // https://bugs.webkit.org/show_bug.cgi?id=44721\n if (className === 'XMLHttpRequest' && prop === 'responseBlob')\n continue;\n (function (prop) {\n if (typeof instance[prop] === 'function') {\n _global$1[className].prototype[prop] = function () {\n return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments);\n };\n }\n else {\n Object.defineProperty(_global$1[className].prototype, prop, {\n set: function (fn) {\n if (typeof fn === 'function') {\n this[originalInstanceKey][prop] = Zone.current.wrap(fn, className + '.' + prop);\n }\n else {\n this[originalInstanceKey][prop] = fn;\n }\n },\n get: function () {\n return this[originalInstanceKey][prop];\n }\n });\n }\n }(prop));\n }\n for (prop in OriginalClass) {\n if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) {\n _global$1[className][prop] = OriginalClass[prop];\n }\n }\n}\n\nfunction createNamedFn(name, delegate) {\n try {\n return (Function('f', \"return function \" + name + \"(){return f(this, arguments)}\"))(delegate);\n }\n catch (error) {\n // if we fail, we must be CSP, just return delegate.\n return function () {\n return delegate(this, arguments);\n };\n }\n}\nfunction patchMethod(target, name, patchFn) {\n var proto = target;\n while (proto && Object.getOwnPropertyNames(proto).indexOf(name) === -1) {\n proto = Object.getPrototypeOf(proto);\n }\n if (!proto && target[name]) {\n // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n proto = target;\n }\n var delegateName = zoneSymbol(name);\n var delegate;\n if (proto && !(delegate = proto[delegateName])) {\n delegate = proto[delegateName] = proto[name];\n proto[name] = createNamedFn(name, patchFn(delegate, delegateName, name));\n }\n return delegate;\n}\n// TODO: @JiaLiPassion, support cancel task later if necessary\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction patchTimer(window, setName, cancelName, nameSuffix) {\n var setNative = null;\n var clearNative = null;\n setName += nameSuffix;\n cancelName += nameSuffix;\n var tasksByHandleId = {};\n function scheduleTask(task) {\n var data = task.data;\n data.args[0] = function () {\n task.invoke.apply(this, arguments);\n delete tasksByHandleId[data.handleId];\n };\n data.handleId = setNative.apply(window, data.args);\n tasksByHandleId[data.handleId] = task;\n return task;\n }\n function clearTask(task) {\n delete tasksByHandleId[task.data.handleId];\n return clearNative(task.data.handleId);\n }\n setNative =\n patchMethod(window, setName, function (delegate) { return function (self, args) {\n if (typeof args[0] === 'function') {\n var zone = Zone.current;\n var options = {\n handleId: null,\n isPeriodic: nameSuffix === 'Interval',\n delay: (nameSuffix === 'Timeout' || nameSuffix === 'Interval') ? args[1] || 0 : null,\n args: args\n };\n var task = zone.scheduleMacroTask(setName, args[0], options, scheduleTask, clearTask);\n if (!task) {\n return task;\n }\n // Node.js must additionally support the ref and unref functions.\n var handle = task.data.handleId;\n // check whether handle is null, because some polyfill or browser\n // may return undefined from setTimeout/setInterval/setImmediate/requestAnimationFrame\n if (handle && handle.ref && handle.unref && typeof handle.ref === 'function' &&\n typeof handle.unref === 'function') {\n task.ref = handle.ref.bind(handle);\n task.unref = handle.unref.bind(handle);\n }\n return task;\n }\n else {\n // cause an error by calling it directly.\n return delegate.apply(window, args);\n }\n }; });\n clearNative =\n patchMethod(window, cancelName, function (delegate) { return function (self, args) {\n var task = typeof args[0] === 'number' ? tasksByHandleId[args[0]] : args[0];\n if (task && typeof task.type === 'string') {\n if (task.state !== 'notScheduled' &&\n (task.cancelFn && task.data.isPeriodic || task.runCount === 0)) {\n // Do not cancel already canceled functions\n task.zone.cancelTask(task);\n }\n }\n else {\n // cause an error by calling it directly.\n delegate.apply(window, args);\n }\n }; });\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/*\n * This is necessary for Chrome and Chrome mobile, to enable\n * things like redefining `createdCallback` on an element.\n */\nvar _defineProperty = Object[zoneSymbol('defineProperty')] = Object.defineProperty;\nvar _getOwnPropertyDescriptor = Object[zoneSymbol('getOwnPropertyDescriptor')] =\n Object.getOwnPropertyDescriptor;\nvar _create = Object.create;\nvar unconfigurablesKey = zoneSymbol('unconfigurables');\nfunction propertyPatch() {\n Object.defineProperty = function (obj, prop, desc) {\n if (isUnconfigurable(obj, prop)) {\n throw new TypeError('Cannot assign to read only property \\'' + prop + '\\' of ' + obj);\n }\n var originalConfigurableFlag = desc.configurable;\n if (prop !== 'prototype') {\n desc = rewriteDescriptor(obj, prop, desc);\n }\n return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);\n };\n Object.defineProperties = function (obj, props) {\n Object.keys(props).forEach(function (prop) {\n Object.defineProperty(obj, prop, props[prop]);\n });\n return obj;\n };\n Object.create = function (obj, proto) {\n if (typeof proto === 'object' && !Object.isFrozen(proto)) {\n Object.keys(proto).forEach(function (prop) {\n proto[prop] = rewriteDescriptor(obj, prop, proto[prop]);\n });\n }\n return _create(obj, proto);\n };\n Object.getOwnPropertyDescriptor = function (obj, prop) {\n var desc = _getOwnPropertyDescriptor(obj, prop);\n if (isUnconfigurable(obj, prop)) {\n desc.configurable = false;\n }\n return desc;\n };\n}\n\nfunction _redefineProperty(obj, prop, desc) {\n var originalConfigurableFlag = desc.configurable;\n desc = rewriteDescriptor(obj, prop, desc);\n return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);\n}\n\nfunction isUnconfigurable(obj, prop) {\n return obj && obj[unconfigurablesKey] && obj[unconfigurablesKey][prop];\n}\nfunction rewriteDescriptor(obj, prop, desc) {\n desc.configurable = true;\n if (!desc.configurable) {\n if (!obj[unconfigurablesKey]) {\n _defineProperty(obj, unconfigurablesKey, { writable: true, value: {} });\n }\n obj[unconfigurablesKey][prop] = true;\n }\n return desc;\n}\nfunction _tryDefineProperty(obj, prop, desc, originalConfigurableFlag) {\n try {\n return _defineProperty(obj, prop, desc);\n }\n catch (error) {\n if (desc.configurable) {\n // In case of errors, when the configurable flag was likely set by rewriteDescriptor(), let's\n // retry with the original flag value\n if (typeof originalConfigurableFlag == 'undefined') {\n delete desc.configurable;\n }\n else {\n desc.configurable = originalConfigurableFlag;\n }\n try {\n return _defineProperty(obj, prop, desc);\n }\n catch (error) {\n var descJson = null;\n try {\n descJson = JSON.stringify(desc);\n }\n catch (error) {\n descJson = descJson.toString();\n }\n console.log(\"Attempting to configure '\" + prop + \"' with descriptor '\" + descJson + \"' on object '\" + obj + \"' and got error, giving up: \" + error);\n }\n }\n else {\n throw error;\n }\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar WTF_ISSUE_555 = 'Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video';\nvar NO_EVENT_TARGET = 'ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket'\n .split(',');\nvar EVENT_TARGET = 'EventTarget';\nfunction eventTargetPatch(_global) {\n var apis = [];\n var isWtf = _global['wtf'];\n if (isWtf) {\n // Workaround for: https://github.com/google/tracing-framework/issues/555\n apis = WTF_ISSUE_555.split(',').map(function (v) { return 'HTML' + v + 'Element'; }).concat(NO_EVENT_TARGET);\n }\n else if (_global[EVENT_TARGET]) {\n apis.push(EVENT_TARGET);\n }\n else {\n // Note: EventTarget is not available in all browsers,\n // if it's not available, we instead patch the APIs in the IDL that inherit from EventTarget\n apis = NO_EVENT_TARGET;\n }\n for (var i = 0; i < apis.length; i++) {\n var type = _global[apis[i]];\n patchEventTargetMethods(type && type.prototype);\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// we have to patch the instance since the proto is non-configurable\nfunction apply(_global) {\n var WS = _global.WebSocket;\n // On Safari window.EventTarget doesn't exist so need to patch WS add/removeEventListener\n // On older Chrome, no need since EventTarget was already patched\n if (!_global.EventTarget) {\n patchEventTargetMethods(WS.prototype);\n }\n _global.WebSocket = function (a, b) {\n var socket = arguments.length > 1 ? new WS(a, b) : new WS(a);\n var proxySocket;\n // Safari 7.0 has non-configurable own 'onmessage' and friends properties on the socket instance\n var onmessageDesc = Object.getOwnPropertyDescriptor(socket, 'onmessage');\n if (onmessageDesc && onmessageDesc.configurable === false) {\n proxySocket = Object.create(socket);\n ['addEventListener', 'removeEventListener', 'send', 'close'].forEach(function (propName) {\n proxySocket[propName] = function () {\n return socket[propName].apply(socket, arguments);\n };\n });\n }\n else {\n // we can patch the real socket\n proxySocket = socket;\n }\n patchOnProperties(proxySocket, ['close', 'error', 'message', 'open']);\n return proxySocket;\n };\n for (var prop in WS) {\n _global.WebSocket[prop] = WS[prop];\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar eventNames = 'copy cut paste abort blur focus canplay canplaythrough change click contextmenu dblclick drag dragend dragenter dragleave dragover dragstart drop durationchange emptied ended input invalid keydown keypress keyup load loadeddata loadedmetadata loadstart message mousedown mouseenter mouseleave mousemove mouseout mouseover mouseup pause play playing progress ratechange reset scroll seeked seeking select show stalled submit suspend timeupdate volumechange waiting mozfullscreenchange mozfullscreenerror mozpointerlockchange mozpointerlockerror error webglcontextrestored webglcontextlost webglcontextcreationerror'\n .split(' ');\nfunction propertyDescriptorPatch(_global) {\n if (isNode && !isMix) {\n return;\n }\n var supportsWebSocket = typeof WebSocket !== 'undefined';\n if (canPatchViaPropertyDescriptor()) {\n // for browsers that we can patch the descriptor: Chrome & Firefox\n if (isBrowser) {\n patchOnProperties(HTMLElement.prototype, eventNames);\n }\n patchOnProperties(XMLHttpRequest.prototype, null);\n if (typeof IDBIndex !== 'undefined') {\n patchOnProperties(IDBIndex.prototype, null);\n patchOnProperties(IDBRequest.prototype, null);\n patchOnProperties(IDBOpenDBRequest.prototype, null);\n patchOnProperties(IDBDatabase.prototype, null);\n patchOnProperties(IDBTransaction.prototype, null);\n patchOnProperties(IDBCursor.prototype, null);\n }\n if (supportsWebSocket) {\n patchOnProperties(WebSocket.prototype, null);\n }\n }\n else {\n // Safari, Android browsers (Jelly Bean)\n patchViaCapturingAllTheEvents();\n patchClass('XMLHttpRequest');\n if (supportsWebSocket) {\n apply(_global);\n }\n }\n}\nfunction canPatchViaPropertyDescriptor() {\n if ((isBrowser || isMix) && !Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'onclick') &&\n typeof Element !== 'undefined') {\n // WebKit https://bugs.webkit.org/show_bug.cgi?id=134364\n // IDL interface attributes are not configurable\n var desc = Object.getOwnPropertyDescriptor(Element.prototype, 'onclick');\n if (desc && !desc.configurable)\n return false;\n }\n var xhrDesc = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, 'onreadystatechange');\n // add enumerable and configurable here because in opera\n // by default XMLHttpRequest.prototype.onreadystatechange is undefined\n // without adding enumerable and configurable will cause onreadystatechange\n // non-configurable\n Object.defineProperty(XMLHttpRequest.prototype, 'onreadystatechange', {\n enumerable: true,\n configurable: true,\n get: function () {\n return true;\n }\n });\n var req = new XMLHttpRequest();\n var result = !!req.onreadystatechange;\n // restore original desc\n Object.defineProperty(XMLHttpRequest.prototype, 'onreadystatechange', xhrDesc || {});\n return result;\n}\n\nvar unboundKey = zoneSymbol('unbound');\n// Whenever any eventListener fires, we check the eventListener target and all parents\n// for `onwhatever` properties and replace them with zone-bound functions\n// - Chrome (for now)\nfunction patchViaCapturingAllTheEvents() {\n var _loop_1 = function(i) {\n var property = eventNames[i];\n var onproperty = 'on' + property;\n self.addEventListener(property, function (event) {\n var elt = event.target, bound, source;\n if (elt) {\n source = elt.constructor['name'] + '.' + onproperty;\n }\n else {\n source = 'unknown.' + onproperty;\n }\n while (elt) {\n if (elt[onproperty] && !elt[onproperty][unboundKey]) {\n bound = Zone.current.wrap(elt[onproperty], source);\n bound[unboundKey] = elt[onproperty];\n elt[onproperty] = bound;\n }\n elt = elt.parentElement;\n }\n }, true);\n };\n for (var i = 0; i < eventNames.length; i++) {\n _loop_1(i);\n }\n \n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction registerElementPatch(_global) {\n if ((!isBrowser && !isMix) || !('registerElement' in _global.document)) {\n return;\n }\n var _registerElement = document.registerElement;\n var callbacks = ['createdCallback', 'attachedCallback', 'detachedCallback', 'attributeChangedCallback'];\n document.registerElement = function (name, opts) {\n if (opts && opts.prototype) {\n callbacks.forEach(function (callback) {\n var source = 'Document.registerElement::' + callback;\n if (opts.prototype.hasOwnProperty(callback)) {\n var descriptor = Object.getOwnPropertyDescriptor(opts.prototype, callback);\n if (descriptor && descriptor.value) {\n descriptor.value = Zone.current.wrap(descriptor.value, source);\n _redefineProperty(opts.prototype, callback, descriptor);\n }\n else {\n opts.prototype[callback] = Zone.current.wrap(opts.prototype[callback], source);\n }\n }\n else if (opts.prototype[callback]) {\n opts.prototype[callback] = Zone.current.wrap(opts.prototype[callback], source);\n }\n });\n }\n return _registerElement.apply(document, [name, opts]);\n };\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar set = 'set';\nvar clear = 'clear';\nvar blockingMethods = ['alert', 'prompt', 'confirm'];\nvar _global = typeof window === 'object' && window || typeof self === 'object' && self || global;\npatchTimer(_global, set, clear, 'Timeout');\npatchTimer(_global, set, clear, 'Interval');\npatchTimer(_global, set, clear, 'Immediate');\npatchTimer(_global, 'request', 'cancel', 'AnimationFrame');\npatchTimer(_global, 'mozRequest', 'mozCancel', 'AnimationFrame');\npatchTimer(_global, 'webkitRequest', 'webkitCancel', 'AnimationFrame');\nfor (var i = 0; i < blockingMethods.length; i++) {\n var name_1 = blockingMethods[i];\n patchMethod(_global, name_1, function (delegate, symbol, name) {\n return function (s, args) {\n return Zone.current.run(delegate, _global, args, name);\n };\n });\n}\neventTargetPatch(_global);\npropertyDescriptorPatch(_global);\npatchClass('MutationObserver');\npatchClass('WebKitMutationObserver');\npatchClass('FileReader');\npropertyPatch();\nregisterElementPatch(_global);\n// Treat XMLHTTPRequest as a macrotask.\npatchXHR(_global);\nvar XHR_TASK = zoneSymbol('xhrTask');\nvar XHR_SYNC = zoneSymbol('xhrSync');\nvar XHR_LISTENER = zoneSymbol('xhrListener');\nvar XHR_SCHEDULED = zoneSymbol('xhrScheduled');\nfunction patchXHR(window) {\n function findPendingTask(target) {\n var pendingTask = target[XHR_TASK];\n return pendingTask;\n }\n function scheduleTask(task) {\n self[XHR_SCHEDULED] = false;\n var data = task.data;\n // remove existing event listener\n var listener = data.target[XHR_LISTENER];\n if (listener) {\n data.target.removeEventListener('readystatechange', listener);\n }\n var newListener = data.target[XHR_LISTENER] = function () {\n if (data.target.readyState === data.target.DONE) {\n if (!data.aborted && self[XHR_SCHEDULED]) {\n task.invoke();\n }\n }\n };\n data.target.addEventListener('readystatechange', newListener);\n var storedTask = data.target[XHR_TASK];\n if (!storedTask) {\n data.target[XHR_TASK] = task;\n }\n sendNative.apply(data.target, data.args);\n self[XHR_SCHEDULED] = true;\n return task;\n }\n function placeholderCallback() { }\n function clearTask(task) {\n var data = task.data;\n // Note - ideally, we would call data.target.removeEventListener here, but it's too late\n // to prevent it from firing. So instead, we store info for the event listener.\n data.aborted = true;\n return abortNative.apply(data.target, data.args);\n }\n var openNative = patchMethod(window.XMLHttpRequest.prototype, 'open', function () { return function (self, args) {\n self[XHR_SYNC] = args[2] == false;\n return openNative.apply(self, args);\n }; });\n var sendNative = patchMethod(window.XMLHttpRequest.prototype, 'send', function () { return function (self, args) {\n var zone = Zone.current;\n if (self[XHR_SYNC]) {\n // if the XHR is sync there is no task to schedule, just execute the code.\n return sendNative.apply(self, args);\n }\n else {\n var options = { target: self, isPeriodic: false, delay: null, args: args, aborted: false };\n return zone.scheduleMacroTask('XMLHttpRequest.send', placeholderCallback, options, scheduleTask, clearTask);\n }\n }; });\n var abortNative = patchMethod(window.XMLHttpRequest.prototype, 'abort', function (delegate) { return function (self, args) {\n var task = findPendingTask(self);\n if (task && typeof task.type == 'string') {\n // If the XHR has already completed, do nothing.\n // If the XHR has already been aborted, do nothing.\n // Fix #569, call abort multiple times before done will cause\n // macroTask task count be negative number\n if (task.cancelFn == null || (task.data && task.data.aborted)) {\n return;\n }\n task.zone.cancelTask(task);\n }\n // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no task\n // to cancel. Do nothing.\n }; });\n}\n/// GEO_LOCATION\nif (_global['navigator'] && _global['navigator'].geolocation) {\n patchPrototype(_global['navigator'].geolocation, ['getCurrentPosition', 'watchPosition']);\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n})));\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"./node_modules/webpack/buildin/global.js\"), __webpack_require__(\"./node_modules/process/browser.js\")))//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvem9uZS5qcy9kaXN0L3pvbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3pvbmUuanMvZGlzdC96b25lLmpzP2ZhZDMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4qIEBsaWNlbnNlXG4qIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuKlxuKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4qL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgKGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG52YXIgWm9uZSQxID0gKGZ1bmN0aW9uIChnbG9iYWwpIHtcbiAgICBpZiAoZ2xvYmFsWydab25lJ10pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdab25lIGFscmVhZHkgbG9hZGVkLicpO1xuICAgIH1cbiAgICB2YXIgTk9fWk9ORSA9IHsgbmFtZTogJ05PIFpPTkUnIH07XG4gICAgdmFyIG5vdFNjaGVkdWxlZCA9ICdub3RTY2hlZHVsZWQnLCBzY2hlZHVsaW5nID0gJ3NjaGVkdWxpbmcnLCBzY2hlZHVsZWQgPSAnc2NoZWR1bGVkJywgcnVubmluZyA9ICdydW5uaW5nJywgY2FuY2VsaW5nID0gJ2NhbmNlbGluZyc7XG4gICAgdmFyIG1pY3JvVGFzayA9ICdtaWNyb1Rhc2snLCBtYWNyb1Rhc2sgPSAnbWFjcm9UYXNrJywgZXZlbnRUYXNrID0gJ2V2ZW50VGFzayc7XG4gICAgdmFyIFpvbmUgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBab25lKHBhcmVudCwgem9uZVNwZWMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IHpvbmVTcGVjID8gem9uZVNwZWMubmFtZSB8fCAndW5uYW1lZCcgOiAnPHJvb3Q+JztcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSB6b25lU3BlYyAmJiB6b25lU3BlYy5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5fem9uZURlbGVnYXRlID1cbiAgICAgICAgICAgICAgICBuZXcgWm9uZURlbGVnYXRlKHRoaXMsIHRoaXMuX3BhcmVudCAmJiB0aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSwgem9uZVNwZWMpO1xuICAgICAgICB9XG4gICAgICAgIFpvbmUuYXNzZXJ0Wm9uZVBhdGNoZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoZ2xvYmFsLlByb21pc2UgIT09IFpvbmVBd2FyZVByb21pc2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1pvbmUuanMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgICcgK1xuICAgICAgICAgICAgICAgICAgICAnaGFzIGJlZW4gb3ZlcndyaXR0ZW4uXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdNb3N0IGxpa2VseSBjYXVzZSBpcyB0aGF0IGEgUHJvbWlzZSBwb2x5ZmlsbCBoYXMgYmVlbiBsb2FkZWQgJyArXG4gICAgICAgICAgICAgICAgICAgICdhZnRlciBab25lLmpzIChQb2x5ZmlsbGluZyBQcm9taXNlIGFwaSBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gem9uZS5qcyBpcyBsb2FkZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAnSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJlZm9yZSBsb2FkaW5nIHpvbmUuanMuKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWm9uZSwgXCJyb290XCIsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciB6b25lID0gWm9uZS5jdXJyZW50O1xuICAgICAgICAgICAgICAgIHdoaWxlICh6b25lLnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICB6b25lID0gem9uZS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB6b25lO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShab25lLCBcImN1cnJlbnRcIiwge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jdXJyZW50Wm9uZUZyYW1lLnpvbmU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShab25lLCBcImN1cnJlbnRUYXNrXCIsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfY3VycmVudFRhc2s7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShab25lLnByb3RvdHlwZSwgXCJwYXJlbnRcIiwge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFpvbmUucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIFpvbmUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHZhciB6b25lID0gdGhpcy5nZXRab25lV2l0aChrZXkpO1xuICAgICAgICAgICAgaWYgKHpvbmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHpvbmUuX3Byb3BlcnRpZXNba2V5XTtcbiAgICAgICAgfTtcbiAgICAgICAgWm9uZS5wcm90b3R5cGUuZ2V0Wm9uZVdpdGggPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXM7XG4gICAgICAgICAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Ll9wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Ll9wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICAgICAgWm9uZS5wcm90b3R5cGUuZm9yayA9IGZ1bmN0aW9uICh6b25lU3BlYykge1xuICAgICAgICAgICAgaWYgKCF6b25lU3BlYylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1pvbmVTcGVjIHJlcXVpcmVkIScpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5mb3JrKHRoaXMsIHpvbmVTcGVjKTtcbiAgICAgICAgfTtcbiAgICAgICAgWm9uZS5wcm90b3R5cGUud3JhcCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgc291cmNlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAnICsgY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9jYWxsYmFjayA9IHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcywgY2FsbGJhY2ssIHNvdXJjZSk7XG4gICAgICAgICAgICB2YXIgem9uZSA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6b25lLnJ1bkd1YXJkZWQoX2NhbGxiYWNrLCB0aGlzLCBhcmd1bWVudHMsIHNvdXJjZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICBab25lLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGFwcGx5VGhpcywgYXBwbHlBcmdzLCBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChhcHBseVRoaXMgPT09IHZvaWQgMCkgeyBhcHBseVRoaXMgPSB1bmRlZmluZWQ7IH1cbiAgICAgICAgICAgIGlmIChhcHBseUFyZ3MgPT09IHZvaWQgMCkgeyBhcHBseUFyZ3MgPSBudWxsOyB9XG4gICAgICAgICAgICBpZiAoc291cmNlID09PSB2b2lkIDApIHsgc291cmNlID0gbnVsbDsgfVxuICAgICAgICAgICAgX2N1cnJlbnRab25lRnJhbWUgPSBuZXcgWm9uZUZyYW1lKF9jdXJyZW50Wm9uZUZyYW1lLCB0aGlzKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcywgY2FsbGJhY2ssIGFwcGx5VGhpcywgYXBwbHlBcmdzLCBzb3VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgX2N1cnJlbnRab25lRnJhbWUgPSBfY3VycmVudFpvbmVGcmFtZS5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFpvbmUucHJvdG90eXBlLnJ1bkd1YXJkZWQgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGFwcGx5VGhpcywgYXBwbHlBcmdzLCBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChhcHBseVRoaXMgPT09IHZvaWQgMCkgeyBhcHBseVRoaXMgPSBudWxsOyB9XG4gICAgICAgICAgICBpZiAoYXBwbHlBcmdzID09PSB2b2lkIDApIHsgYXBwbHlBcmdzID0gbnVsbDsgfVxuICAgICAgICAgICAgaWYgKHNvdXJjZSA9PT0gdm9pZCAwKSB7IHNvdXJjZSA9IG51bGw7IH1cbiAgICAgICAgICAgIF9jdXJyZW50Wm9uZUZyYW1lID0gbmV3IFpvbmVGcmFtZShfY3VycmVudFpvbmVGcmFtZSwgdGhpcyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsIGNhbGxiYWNrLCBhcHBseVRoaXMsIGFwcGx5QXJncywgc291cmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcywgZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIF9jdXJyZW50Wm9uZUZyYW1lID0gX2N1cnJlbnRab25lRnJhbWUucGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBab25lLnByb3RvdHlwZS5ydW5UYXNrID0gZnVuY3Rpb24gKHRhc2ssIGFwcGx5VGhpcywgYXBwbHlBcmdzKSB7XG4gICAgICAgICAgICBpZiAodGFzay56b25lICE9IHRoaXMpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIHRhc2sgY2FuIG9ubHkgYmUgcnVuIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICcgK1xuICAgICAgICAgICAgICAgICAgICAodGFzay56b25lIHx8IE5PX1pPTkUpLm5hbWUgKyAnOyBFeGVjdXRpb246ICcgKyB0aGlzLm5hbWUgKyAnKScpO1xuICAgICAgICAgICAgdmFyIHJlRW50cnlHdWFyZCA9IHRhc2suc3RhdGUgIT0gcnVubmluZztcbiAgICAgICAgICAgIHJlRW50cnlHdWFyZCAmJiB0YXNrLl90cmFuc2l0aW9uVG8ocnVubmluZywgc2NoZWR1bGVkKTtcbiAgICAgICAgICAgIHRhc2sucnVuQ291bnQrKztcbiAgICAgICAgICAgIHZhciBwcmV2aW91c1Rhc2sgPSBfY3VycmVudFRhc2s7XG4gICAgICAgICAgICBfY3VycmVudFRhc2sgPSB0YXNrO1xuICAgICAgICAgICAgX2N1cnJlbnRab25lRnJhbWUgPSBuZXcgWm9uZUZyYW1lKF9jdXJyZW50Wm9uZUZyYW1lLCB0aGlzKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2sudHlwZSA9PSBtYWNyb1Rhc2sgJiYgdGFzay5kYXRhICYmICF0YXNrLmRhdGEuaXNQZXJpb2RpYykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrLmNhbmNlbEZuID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsIHRhc2ssIGFwcGx5VGhpcywgYXBwbHlBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcywgZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGlmICh0YXNrLnR5cGUgPT0gZXZlbnRUYXNrIHx8ICh0YXNrLmRhdGEgJiYgdGFzay5kYXRhLmlzUGVyaW9kaWMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlRW50cnlHdWFyZCAmJiB0YXNrLl90cmFuc2l0aW9uVG8oc2NoZWR1bGVkLCBydW5uaW5nLCBub3RTY2hlZHVsZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5ydW5Db3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRhc2tDb3VudCh0YXNrLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIHJlRW50cnlHdWFyZCAmJiB0YXNrLl90cmFuc2l0aW9uVG8obm90U2NoZWR1bGVkLCBydW5uaW5nLCBub3RTY2hlZHVsZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfY3VycmVudFpvbmVGcmFtZSA9IF9jdXJyZW50Wm9uZUZyYW1lLnBhcmVudDtcbiAgICAgICAgICAgICAgICBfY3VycmVudFRhc2sgPSBwcmV2aW91c1Rhc2s7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFpvbmUucHJvdG90eXBlLnNjaGVkdWxlVGFzayA9IGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICB0YXNrLl90cmFuc2l0aW9uVG8oc2NoZWR1bGluZywgbm90U2NoZWR1bGVkKTtcbiAgICAgICAgICAgIHZhciB6b25lRGVsZWdhdGVzID0gW107XG4gICAgICAgICAgICB0YXNrLl96b25lRGVsZWdhdGVzID0gem9uZURlbGVnYXRlcztcbiAgICAgICAgICAgIHRhc2suem9uZSA9IHRoaXM7XG4gICAgICAgICAgICB0YXNrID0gdGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLCB0YXNrKTtcbiAgICAgICAgICAgIGlmICh0YXNrLl96b25lRGVsZWdhdGVzID09PSB6b25lRGVsZWdhdGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBjaGVjayBiZWNhdXNlIGludGVybmFsbHkgdGhlIGRlbGVnYXRlIGNhbiByZXNjaGVkdWxlIHRoZSB0YXNrLlxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRhc2tDb3VudCh0YXNrLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0YXNrLnN0YXRlID09IHNjaGVkdWxpbmcpIHtcbiAgICAgICAgICAgICAgICB0YXNrLl90cmFuc2l0aW9uVG8oc2NoZWR1bGVkLCBzY2hlZHVsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0YXNrO1xuICAgICAgICB9O1xuICAgICAgICBab25lLnByb3RvdHlwZS5zY2hlZHVsZU1pY3JvVGFzayA9IGZ1bmN0aW9uIChzb3VyY2UsIGNhbGxiYWNrLCBkYXRhLCBjdXN0b21TY2hlZHVsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBab25lVGFzayhtaWNyb1Rhc2ssIHNvdXJjZSwgY2FsbGJhY2ssIGRhdGEsIGN1c3RvbVNjaGVkdWxlLCBudWxsKSk7XG4gICAgICAgIH07XG4gICAgICAgIFpvbmUucHJvdG90eXBlLnNjaGVkdWxlTWFjcm9UYXNrID0gZnVuY3Rpb24gKHNvdXJjZSwgY2FsbGJhY2ssIGRhdGEsIGN1c3RvbVNjaGVkdWxlLCBjdXN0b21DYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgWm9uZVRhc2sobWFjcm9UYXNrLCBzb3VyY2UsIGNhbGxiYWNrLCBkYXRhLCBjdXN0b21TY2hlZHVsZSwgY3VzdG9tQ2FuY2VsKSk7XG4gICAgICAgIH07XG4gICAgICAgIFpvbmUucHJvdG90eXBlLnNjaGVkdWxlRXZlbnRUYXNrID0gZnVuY3Rpb24gKHNvdXJjZSwgY2FsbGJhY2ssIGRhdGEsIGN1c3RvbVNjaGVkdWxlLCBjdXN0b21DYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgWm9uZVRhc2soZXZlbnRUYXNrLCBzb3VyY2UsIGNhbGxiYWNrLCBkYXRhLCBjdXN0b21TY2hlZHVsZSwgY3VzdG9tQ2FuY2VsKSk7XG4gICAgICAgIH07XG4gICAgICAgIFpvbmUucHJvdG90eXBlLmNhbmNlbFRhc2sgPSBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgdGFzay5fdHJhbnNpdGlvblRvKGNhbmNlbGluZywgc2NoZWR1bGVkLCBydW5uaW5nKTtcbiAgICAgICAgICAgIHRoaXMuX3pvbmVEZWxlZ2F0ZS5jYW5jZWxUYXNrKHRoaXMsIHRhc2spO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGFza0NvdW50KHRhc2ssIC0xKTtcbiAgICAgICAgICAgIHRhc2suX3RyYW5zaXRpb25Ubyhub3RTY2hlZHVsZWQsIGNhbmNlbGluZyk7XG4gICAgICAgICAgICB0YXNrLnJ1bkNvdW50ID0gMDtcbiAgICAgICAgICAgIHJldHVybiB0YXNrO1xuICAgICAgICB9O1xuICAgICAgICBab25lLnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50ID0gZnVuY3Rpb24gKHRhc2ssIGNvdW50KSB7XG4gICAgICAgICAgICB2YXIgem9uZURlbGVnYXRlcyA9IHRhc2suX3pvbmVEZWxlZ2F0ZXM7XG4gICAgICAgICAgICBpZiAoY291bnQgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0YXNrLl96b25lRGVsZWdhdGVzID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgem9uZURlbGVnYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHpvbmVEZWxlZ2F0ZXNbaV0uX3VwZGF0ZVRhc2tDb3VudCh0YXNrLnR5cGUsIGNvdW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgWm9uZS5fX3N5bWJvbF9fID0gX19zeW1ib2xfXztcbiAgICAgICAgcmV0dXJuIFpvbmU7XG4gICAgfSgpKTtcbiAgICB2YXIgREVMRUdBVEVfWlMgPSB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBvbkhhc1Rhc2s6IGZ1bmN0aW9uIChkZWxlZ2F0ZSwgXywgdGFyZ2V0LCBoYXNUYXNrU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5oYXNUYXNrKHRhcmdldCwgaGFzVGFza1N0YXRlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TY2hlZHVsZVRhc2s6IGZ1bmN0aW9uIChkZWxlZ2F0ZSwgXywgdGFyZ2V0LCB0YXNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuc2NoZWR1bGVUYXNrKHRhcmdldCwgdGFzayk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSW52b2tlVGFzazogZnVuY3Rpb24gKGRlbGVnYXRlLCBfLCB0YXJnZXQsIHRhc2ssIGFwcGx5VGhpcywgYXBwbHlBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuaW52b2tlVGFzayh0YXJnZXQsIHRhc2ssIGFwcGx5VGhpcywgYXBwbHlBcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25DYW5jZWxUYXNrOiBmdW5jdGlvbiAoZGVsZWdhdGUsIF8sIHRhcmdldCwgdGFzaykge1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNhbmNlbFRhc2sodGFyZ2V0LCB0YXNrKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIFpvbmVEZWxlZ2F0ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIFpvbmVEZWxlZ2F0ZSh6b25lLCBwYXJlbnREZWxlZ2F0ZSwgem9uZVNwZWMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2tDb3VudHMgPSB7IG1pY3JvVGFzazogMCwgbWFjcm9UYXNrOiAwLCBldmVudFRhc2s6IDAgfTtcbiAgICAgICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnREZWxlZ2F0ZSA9IHBhcmVudERlbGVnYXRlO1xuICAgICAgICAgICAgdGhpcy5fZm9ya1pTID0gem9uZVNwZWMgJiYgKHpvbmVTcGVjICYmIHpvbmVTcGVjLm9uRm9yayA/IHpvbmVTcGVjIDogcGFyZW50RGVsZWdhdGUuX2ZvcmtaUyk7XG4gICAgICAgICAgICB0aGlzLl9mb3JrRGxndCA9IHpvbmVTcGVjICYmICh6b25lU3BlYy5vbkZvcmsgPyBwYXJlbnREZWxlZ2F0ZSA6IHBhcmVudERlbGVnYXRlLl9mb3JrRGxndCk7XG4gICAgICAgICAgICB0aGlzLl9mb3JrQ3VyclpvbmUgPSB6b25lU3BlYyAmJiAoem9uZVNwZWMub25Gb3JrID8gdGhpcy56b25lIDogcGFyZW50RGVsZWdhdGUuem9uZSk7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcmNlcHRaUyA9XG4gICAgICAgICAgICAgICAgem9uZVNwZWMgJiYgKHpvbmVTcGVjLm9uSW50ZXJjZXB0ID8gem9uZVNwZWMgOiBwYXJlbnREZWxlZ2F0ZS5faW50ZXJjZXB0WlMpO1xuICAgICAgICAgICAgdGhpcy5faW50ZXJjZXB0RGxndCA9XG4gICAgICAgICAgICAgICAgem9uZVNwZWMgJiYgKHpvbmVTcGVjLm9uSW50ZXJjZXB0ID8gcGFyZW50RGVsZWdhdGUgOiBwYXJlbnREZWxlZ2F0ZS5faW50ZXJjZXB0RGxndCk7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZSA9XG4gICAgICAgICAgICAgICAgem9uZVNwZWMgJiYgKHpvbmVTcGVjLm9uSW50ZXJjZXB0ID8gdGhpcy56b25lIDogcGFyZW50RGVsZWdhdGUuem9uZSk7XG4gICAgICAgICAgICB0aGlzLl9pbnZva2VaUyA9IHpvbmVTcGVjICYmICh6b25lU3BlYy5vbkludm9rZSA/IHpvbmVTcGVjIDogcGFyZW50RGVsZWdhdGUuX2ludm9rZVpTKTtcbiAgICAgICAgICAgIHRoaXMuX2ludm9rZURsZ3QgPVxuICAgICAgICAgICAgICAgIHpvbmVTcGVjICYmICh6b25lU3BlYy5vbkludm9rZSA/IHBhcmVudERlbGVnYXRlIDogcGFyZW50RGVsZWdhdGUuX2ludm9rZURsZ3QpO1xuICAgICAgICAgICAgdGhpcy5faW52b2tlQ3VyclpvbmUgPSB6b25lU3BlYyAmJiAoem9uZVNwZWMub25JbnZva2UgPyB0aGlzLnpvbmUgOiBwYXJlbnREZWxlZ2F0ZS56b25lKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yWlMgPVxuICAgICAgICAgICAgICAgIHpvbmVTcGVjICYmICh6b25lU3BlYy5vbkhhbmRsZUVycm9yID8gem9uZVNwZWMgOiBwYXJlbnREZWxlZ2F0ZS5faGFuZGxlRXJyb3JaUyk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvckRsZ3QgPVxuICAgICAgICAgICAgICAgIHpvbmVTcGVjICYmICh6b25lU3BlYy5vbkhhbmRsZUVycm9yID8gcGFyZW50RGVsZWdhdGUgOiBwYXJlbnREZWxlZ2F0ZS5faGFuZGxlRXJyb3JEbGd0KTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUgPVxuICAgICAgICAgICAgICAgIHpvbmVTcGVjICYmICh6b25lU3BlYy5vbkhhbmRsZUVycm9yID8gdGhpcy56b25lIDogcGFyZW50RGVsZWdhdGUuem9uZSk7XG4gICAgICAgICAgICB0aGlzLl9zY2hlZHVsZVRhc2taUyA9XG4gICAgICAgICAgICAgICAgem9uZVNwZWMgJiYgKHpvbmVTcGVjLm9uU2NoZWR1bGVUYXNrID8gem9uZVNwZWMgOiBwYXJlbnREZWxlZ2F0ZS5fc2NoZWR1bGVUYXNrWlMpO1xuICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVUYXNrRGxndCA9XG4gICAgICAgICAgICAgICAgem9uZVNwZWMgJiYgKHpvbmVTcGVjLm9uU2NoZWR1bGVUYXNrID8gcGFyZW50RGVsZWdhdGUgOiBwYXJlbnREZWxlZ2F0ZS5fc2NoZWR1bGVUYXNrRGxndCk7XG4gICAgICAgICAgICB0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSA9XG4gICAgICAgICAgICAgICAgem9uZVNwZWMgJiYgKHpvbmVTcGVjLm9uU2NoZWR1bGVUYXNrID8gdGhpcy56b25lIDogcGFyZW50RGVsZWdhdGUuem9uZSk7XG4gICAgICAgICAgICB0aGlzLl9pbnZva2VUYXNrWlMgPVxuICAgICAgICAgICAgICAgIHpvbmVTcGVjICYmICh6b25lU3BlYy5vbkludm9rZVRhc2sgPyB6b25lU3BlYyA6IHBhcmVudERlbGVnYXRlLl9pbnZva2VUYXNrWlMpO1xuICAgICAgICAgICAgdGhpcy5faW52b2tlVGFza0RsZ3QgPVxuICAgICAgICAgICAgICAgIHpvbmVTcGVjICYmICh6b25lU3BlYy5vbkludm9rZVRhc2sgPyBwYXJlbnREZWxlZ2F0ZSA6IHBhcmVudERlbGVnYXRlLl9pbnZva2VUYXNrRGxndCk7XG4gICAgICAgICAgICB0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUgPVxuICAgICAgICAgICAgICAgIHpvbmVTcGVjICYmICh6b25lU3BlYy5vbkludm9rZVRhc2sgPyB0aGlzLnpvbmUgOiBwYXJlbnREZWxlZ2F0ZS56b25lKTtcbiAgICAgICAgICAgIHRoaXMuX2NhbmNlbFRhc2taUyA9XG4gICAgICAgICAgICAgICAgem9uZVNwZWMgJiYgKHpvbmVTcGVjLm9uQ2FuY2VsVGFzayA/IHpvbmVTcGVjIDogcGFyZW50RGVsZWdhdGUuX2NhbmNlbFRhc2taUyk7XG4gICAgICAgICAgICB0aGlzLl9jYW5jZWxUYXNrRGxndCA9XG4gICAgICAgICAgICAgICAgem9uZVNwZWMgJiYgKHpvbmVTcGVjLm9uQ2FuY2VsVGFzayA/IHBhcmVudERlbGVnYXRlIDogcGFyZW50RGVsZWdhdGUuX2NhbmNlbFRhc2tEbGd0KTtcbiAgICAgICAgICAgIHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZSA9XG4gICAgICAgICAgICAgICAgem9uZVNwZWMgJiYgKHpvbmVTcGVjLm9uQ2FuY2VsVGFzayA/IHRoaXMuem9uZSA6IHBhcmVudERlbGVnYXRlLnpvbmUpO1xuICAgICAgICAgICAgdGhpcy5faGFzVGFza1pTID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2hhc1Rhc2tEbGd0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2hhc1Rhc2tEbGd0T3duZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5faGFzVGFza0N1cnJab25lID0gbnVsbDtcbiAgICAgICAgICAgIHZhciB6b25lU3BlY0hhc1Rhc2sgPSB6b25lU3BlYyAmJiB6b25lU3BlYy5vbkhhc1Rhc2s7XG4gICAgICAgICAgICB2YXIgcGFyZW50SGFzVGFzayA9IHBhcmVudERlbGVnYXRlICYmIHBhcmVudERlbGVnYXRlLl9oYXNUYXNrWlM7XG4gICAgICAgICAgICBpZiAoem9uZVNwZWNIYXNUYXNrIHx8IHBhcmVudEhhc1Rhc2spIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBuZWVkIHRvIHJlcG9ydCBoYXNUYXNrLCB0aGFuIHRoaXMgWlMgbmVlZHMgdG8gZG8gcmVmIGNvdW50aW5nIG9uIHRhc2tzLiBJbiBzdWNoXG4gICAgICAgICAgICAgICAgLy8gYSBjYXNlIGFsbCB0YXNrIHJlbGF0ZWQgaW50ZXJjZXB0b3JzIG11c3QgZ28gdGhyb3VnaCB0aGlzIFpELiBXZSBjYW4ndCBzaG9ydCBjaXJjdWl0IGl0LlxuICAgICAgICAgICAgICAgIHRoaXMuX2hhc1Rhc2taUyA9IHpvbmVTcGVjSGFzVGFzayA/IHpvbmVTcGVjIDogREVMRUdBVEVfWlM7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFzVGFza0RsZ3QgPSBwYXJlbnREZWxlZ2F0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNUYXNrRGxndE93bmVyID0gdGhpcztcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNUYXNrQ3VyclpvbmUgPSB6b25lO1xuICAgICAgICAgICAgICAgIGlmICghem9uZVNwZWMub25TY2hlZHVsZVRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVUYXNrWlMgPSBERUxFR0FURV9aUztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVUYXNrRGxndCA9IHBhcmVudERlbGVnYXRlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSA9IHRoaXMuem9uZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF6b25lU3BlYy5vbkludm9rZVRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW52b2tlVGFza1pTID0gREVMRUdBVEVfWlM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludm9rZVRhc2tEbGd0ID0gcGFyZW50RGVsZWdhdGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZSA9IHRoaXMuem9uZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF6b25lU3BlYy5vbkNhbmNlbFRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FuY2VsVGFza1pTID0gREVMRUdBVEVfWlM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbmNlbFRhc2tEbGd0ID0gcGFyZW50RGVsZWdhdGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZSA9IHRoaXMuem9uZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgWm9uZURlbGVnYXRlLnByb3RvdHlwZS5mb3JrID0gZnVuY3Rpb24gKHRhcmdldFpvbmUsIHpvbmVTcGVjKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9ya1pTID8gdGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCwgdGhpcy56b25lLCB0YXJnZXRab25lLCB6b25lU3BlYykgOlxuICAgICAgICAgICAgICAgIG5ldyBab25lKHRhcmdldFpvbmUsIHpvbmVTcGVjKTtcbiAgICAgICAgfTtcbiAgICAgICAgWm9uZURlbGVnYXRlLnByb3RvdHlwZS5pbnRlcmNlcHQgPSBmdW5jdGlvbiAodGFyZ2V0Wm9uZSwgY2FsbGJhY2ssIHNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVyY2VwdFpTID9cbiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LCB0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZSwgdGFyZ2V0Wm9uZSwgY2FsbGJhY2ssIHNvdXJjZSkgOlxuICAgICAgICAgICAgICAgIGNhbGxiYWNrO1xuICAgICAgICB9O1xuICAgICAgICBab25lRGVsZWdhdGUucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uICh0YXJnZXRab25lLCBjYWxsYmFjaywgYXBwbHlUaGlzLCBhcHBseUFyZ3MsIHNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZVpTID9cbiAgICAgICAgICAgICAgICB0aGlzLl9pbnZva2VaUy5vbkludm9rZSh0aGlzLl9pbnZva2VEbGd0LCB0aGlzLl9pbnZva2VDdXJyWm9uZSwgdGFyZ2V0Wm9uZSwgY2FsbGJhY2ssIGFwcGx5VGhpcywgYXBwbHlBcmdzLCBzb3VyY2UpIDpcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShhcHBseVRoaXMsIGFwcGx5QXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIFpvbmVEZWxlZ2F0ZS5wcm90b3R5cGUuaGFuZGxlRXJyb3IgPSBmdW5jdGlvbiAodGFyZ2V0Wm9uZSwgZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVFcnJvclpTID9cbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvclpTLm9uSGFuZGxlRXJyb3IodGhpcy5faGFuZGxlRXJyb3JEbGd0LCB0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lLCB0YXJnZXRab25lLCBlcnJvcikgOlxuICAgICAgICAgICAgICAgIHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIFpvbmVEZWxlZ2F0ZS5wcm90b3R5cGUuc2NoZWR1bGVUYXNrID0gZnVuY3Rpb24gKHRhcmdldFpvbmUsIHRhc2spIHtcbiAgICAgICAgICAgIHZhciByZXR1cm5UYXNrID0gdGFzaztcbiAgICAgICAgICAgIGlmICh0aGlzLl9zY2hlZHVsZVRhc2taUykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9oYXNUYXNrWlMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVGFzay5fem9uZURlbGVnYXRlcy5wdXNoKHRoaXMuX2hhc1Rhc2tEbGd0T3duZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm5UYXNrID0gdGhpcy5fc2NoZWR1bGVUYXNrWlMub25TY2hlZHVsZVRhc2sodGhpcy5fc2NoZWR1bGVUYXNrRGxndCwgdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmUsIHRhcmdldFpvbmUsIHRhc2spO1xuICAgICAgICAgICAgICAgIGlmICghcmV0dXJuVGFzaylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVGFzayA9IHRhc2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGFzay5zY2hlZHVsZUZuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2suc2NoZWR1bGVGbih0YXNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGFzay50eXBlID09IG1pY3JvVGFzaykge1xuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZU1pY3JvVGFzayh0YXNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblRhc2s7XG4gICAgICAgIH07XG4gICAgICAgIFpvbmVEZWxlZ2F0ZS5wcm90b3R5cGUuaW52b2tlVGFzayA9IGZ1bmN0aW9uICh0YXJnZXRab25lLCB0YXNrLCBhcHBseVRoaXMsIGFwcGx5QXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZVRhc2taUyA/XG4gICAgICAgICAgICAgICAgdGhpcy5faW52b2tlVGFza1pTLm9uSW52b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCwgdGhpcy5faW52b2tlVGFza0N1cnJab25lLCB0YXJnZXRab25lLCB0YXNrLCBhcHBseVRoaXMsIGFwcGx5QXJncykgOlxuICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkoYXBwbHlUaGlzLCBhcHBseUFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBab25lRGVsZWdhdGUucHJvdG90eXBlLmNhbmNlbFRhc2sgPSBmdW5jdGlvbiAodGFyZ2V0Wm9uZSwgdGFzaykge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhbmNlbFRhc2taUykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fY2FuY2VsVGFza1pTLm9uQ2FuY2VsVGFzayh0aGlzLl9jYW5jZWxUYXNrRGxndCwgdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLCB0YXJnZXRab25lLCB0YXNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGFzay5jYW5jZWxGbih0YXNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgWm9uZURlbGVnYXRlLnByb3RvdHlwZS5oYXNUYXNrID0gZnVuY3Rpb24gKHRhcmdldFpvbmUsIGlzRW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYXNUYXNrWlMgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LCB0aGlzLl9oYXNUYXNrQ3VyclpvbmUsIHRhcmdldFpvbmUsIGlzRW1wdHkpO1xuICAgICAgICB9O1xuICAgICAgICBab25lRGVsZWdhdGUucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQgPSBmdW5jdGlvbiAodHlwZSwgY291bnQpIHtcbiAgICAgICAgICAgIHZhciBjb3VudHMgPSB0aGlzLl90YXNrQ291bnRzO1xuICAgICAgICAgICAgdmFyIHByZXYgPSBjb3VudHNbdHlwZV07XG4gICAgICAgICAgICB2YXIgbmV4dCA9IGNvdW50c1t0eXBlXSA9IHByZXYgKyBjb3VudDtcbiAgICAgICAgICAgIGlmIChuZXh0IDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTW9yZSB0YXNrcyBleGVjdXRlZCB0aGVuIHdlcmUgc2NoZWR1bGVkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByZXYgPT0gMCB8fCBuZXh0ID09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNFbXB0eSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWljcm9UYXNrOiBjb3VudHMubWljcm9UYXNrID4gMCxcbiAgICAgICAgICAgICAgICAgICAgbWFjcm9UYXNrOiBjb3VudHMubWFjcm9UYXNrID4gMCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXNrOiBjb3VudHMuZXZlbnRUYXNrID4gMCxcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiB0eXBlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPKG1pc2tvKTogd2hhdCBzaG91bGQgaGFwcGVuIGlmIGl0IHRocm93cz9cbiAgICAgICAgICAgICAgICB0aGlzLmhhc1Rhc2sodGhpcy56b25lLCBpc0VtcHR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFpvbmVEZWxlZ2F0ZTtcbiAgICB9KCkpO1xuICAgIHZhciBab25lVGFzayA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIFpvbmVUYXNrKHR5cGUsIHNvdXJjZSwgY2FsbGJhY2ssIG9wdGlvbnMsIHNjaGVkdWxlRm4sIGNhbmNlbEZuKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5ydW5Db3VudCA9IDA7XG4gICAgICAgICAgICB0aGlzLl96b25lRGVsZWdhdGVzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ25vdFNjaGVkdWxlZCc7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBvcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZUZuID0gc2NoZWR1bGVGbjtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsRm4gPSBjYW5jZWxGbjtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuaW52b2tlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF9udW1iZXJPZk5lc3RlZFRhc2tGcmFtZXMrKztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bkNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnpvbmUucnVuVGFzayhzZWxmLCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9udW1iZXJPZk5lc3RlZFRhc2tGcmFtZXMgPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZHJhaW5NaWNyb1Rhc2tRdWV1ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9udW1iZXJPZk5lc3RlZFRhc2tGcmFtZXMtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShab25lVGFzay5wcm90b3R5cGUsIFwic3RhdGVcIiwge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIFpvbmVUYXNrLnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZVJlcXVlc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uVG8obm90U2NoZWR1bGVkLCBzY2hlZHVsaW5nKTtcbiAgICAgICAgfTtcbiAgICAgICAgWm9uZVRhc2sucHJvdG90eXBlLl90cmFuc2l0aW9uVG8gPSBmdW5jdGlvbiAodG9TdGF0ZSwgZnJvbVN0YXRlMSwgZnJvbVN0YXRlMikge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBmcm9tU3RhdGUxIHx8IHRoaXMuX3N0YXRlID09PSBmcm9tU3RhdGUyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSB0b1N0YXRlO1xuICAgICAgICAgICAgICAgIGlmICh0b1N0YXRlID09IG5vdFNjaGVkdWxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl96b25lRGVsZWdhdGVzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlICsgXCIgJ1wiICsgdGhpcy5zb3VyY2UgKyBcIic6IGNhbiBub3QgdHJhbnNpdGlvbiB0byAnXCIgKyB0b1N0YXRlICsgXCInLCBleHBlY3Rpbmcgc3RhdGUgJ1wiICsgZnJvbVN0YXRlMSArIFwiJ1wiICsgKGZyb21TdGF0ZTIgP1xuICAgICAgICAgICAgICAgICAgICAnIG9yIFxcJycgKyBmcm9tU3RhdGUyICsgJ1xcJycgOlxuICAgICAgICAgICAgICAgICAgICAnJykgKyBcIiwgd2FzICdcIiArIHRoaXMuX3N0YXRlICsgXCInLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgWm9uZVRhc2sucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiB0eXBlb2YgdGhpcy5kYXRhLmhhbmRsZUlkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGEuaGFuZGxlSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBhZGQgdG9KU09OIG1ldGhvZCB0byBwcmV2ZW50IGN5Y2xpYyBlcnJvciB3aGVuXG4gICAgICAgIC8vIGNhbGwgSlNPTi5zdHJpbmdpZnkoem9uZVRhc2spXG4gICAgICAgIFpvbmVUYXNrLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuc291cmNlLFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgICAgICAgICB6b25lOiB0aGlzLnpvbmUubmFtZSxcbiAgICAgICAgICAgICAgICBpbnZva2U6IHRoaXMuaW52b2tlLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlRm46IHRoaXMuc2NoZWR1bGVGbixcbiAgICAgICAgICAgICAgICBjYW5jZWxGbjogdGhpcy5jYW5jZWxGbixcbiAgICAgICAgICAgICAgICBydW5Db3VudDogdGhpcy5ydW5Db3VudCxcbiAgICAgICAgICAgICAgICBjYWxsYmFjazogdGhpcy5jYWxsYmFja1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFpvbmVUYXNrO1xuICAgIH0oKSk7XG4gICAgdmFyIFpvbmVGcmFtZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIFpvbmVGcmFtZShwYXJlbnQsIHpvbmUpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWm9uZUZyYW1lO1xuICAgIH0oKSk7XG4gICAgZnVuY3Rpb24gX19zeW1ib2xfXyhuYW1lKSB7XG4gICAgICAgIHJldHVybiAnX196b25lX3N5bWJvbF9fJyArIG5hbWU7XG4gICAgfVxuICAgIFxuICAgIHZhciBzeW1ib2xTZXRUaW1lb3V0ID0gX19zeW1ib2xfXygnc2V0VGltZW91dCcpO1xuICAgIHZhciBzeW1ib2xQcm9taXNlID0gX19zeW1ib2xfXygnUHJvbWlzZScpO1xuICAgIHZhciBzeW1ib2xUaGVuID0gX19zeW1ib2xfXygndGhlbicpO1xuICAgIHZhciBfY3VycmVudFpvbmVGcmFtZSA9IG5ldyBab25lRnJhbWUobnVsbCwgbmV3IFpvbmUobnVsbCwgbnVsbCkpO1xuICAgIHZhciBfY3VycmVudFRhc2sgPSBudWxsO1xuICAgIHZhciBfbWljcm9UYXNrUXVldWUgPSBbXTtcbiAgICB2YXIgX2lzRHJhaW5pbmdNaWNyb3Rhc2tRdWV1ZSA9IGZhbHNlO1xuICAgIHZhciBfdW5jYXVnaHRQcm9taXNlRXJyb3JzID0gW107XG4gICAgdmFyIF9udW1iZXJPZk5lc3RlZFRhc2tGcmFtZXMgPSAwO1xuICAgIGZ1bmN0aW9uIHNjaGVkdWxlUXVldWVEcmFpbigpIHtcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBydW5uaW5nIGluIGFueSB0YXNrLCBhbmQgdGhlcmUgaGFzIG5vdCBiZWVuIGFueXRoaW5nIHNjaGVkdWxlZFxuICAgICAgICAvLyB3ZSBtdXN0IGJvb3RzdHJhcCB0aGUgaW5pdGlhbCB0YXNrIGNyZWF0aW9uIGJ5IG1hbnVhbGx5IHNjaGVkdWxpbmcgdGhlIGRyYWluXG4gICAgICAgIGlmIChfbnVtYmVyT2ZOZXN0ZWRUYXNrRnJhbWVzID09PSAwICYmIF9taWNyb1Rhc2tRdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIFdlIGFyZSBub3QgcnVubmluZyBpbiBUYXNrLCBzbyB3ZSBuZWVkIHRvIGtpY2tzdGFydCB0aGUgbWljcm90YXNrIHF1ZXVlLlxuICAgICAgICAgICAgaWYgKGdsb2JhbFtzeW1ib2xQcm9taXNlXSkge1xuICAgICAgICAgICAgICAgIGdsb2JhbFtzeW1ib2xQcm9taXNlXS5yZXNvbHZlKDApW3N5bWJvbFRoZW5dKGRyYWluTWljcm9UYXNrUXVldWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsW3N5bWJvbFNldFRpbWVvdXRdKGRyYWluTWljcm9UYXNrUXVldWUsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlTWljcm9UYXNrKHRhc2spIHtcbiAgICAgICAgc2NoZWR1bGVRdWV1ZURyYWluKCk7XG4gICAgICAgIF9taWNyb1Rhc2tRdWV1ZS5wdXNoKHRhc2spO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb25zb2xlRXJyb3IoZSkge1xuICAgICAgICB2YXIgcmVqZWN0aW9uID0gZSAmJiBlLnJlamVjdGlvbjtcbiAgICAgICAgaWYgKHJlamVjdGlvbikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIFByb21pc2UgcmVqZWN0aW9uOicsIHJlamVjdGlvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVqZWN0aW9uLm1lc3NhZ2UgOiByZWplY3Rpb24sICc7IFpvbmU6JywgZS56b25lLm5hbWUsICc7IFRhc2s6JywgZS50YXNrICYmIGUudGFzay5zb3VyY2UsICc7IFZhbHVlOicsIHJlamVjdGlvbiwgcmVqZWN0aW9uIGluc3RhbmNlb2YgRXJyb3IgPyByZWplY3Rpb24uc3RhY2sgOiB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRyYWluTWljcm9UYXNrUXVldWUoKSB7XG4gICAgICAgIGlmICghX2lzRHJhaW5pbmdNaWNyb3Rhc2tRdWV1ZSkge1xuICAgICAgICAgICAgX2lzRHJhaW5pbmdNaWNyb3Rhc2tRdWV1ZSA9IHRydWU7XG4gICAgICAgICAgICB3aGlsZSAoX21pY3JvVGFza1F1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IF9taWNyb1Rhc2tRdWV1ZTtcbiAgICAgICAgICAgICAgICBfbWljcm9UYXNrUXVldWUgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcXVldWVbaV07XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrLnpvbmUucnVuVGFzayh0YXNrLCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoX3VuY2F1Z2h0UHJvbWlzZUVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdW5jYXVnaHRQcm9taXNlRXJyb3IgPSBfdW5jYXVnaHRQcm9taXNlRXJyb3JzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmNhdWdodFByb21pc2VFcnJvci56b25lLnJ1bkd1YXJkZWQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHVuY2F1Z2h0UHJvbWlzZUVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoX3VuY2F1Z2h0UHJvbWlzZUVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvb3BfMSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9pc0RyYWluaW5nTWljcm90YXNrUXVldWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS50aGVuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmb3J3YXJkUmVzb2x1dGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcndhcmRSZWplY3Rpb24ocmVqZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBab25lQXdhcmVQcm9taXNlLnJlamVjdChyZWplY3Rpb24pO1xuICAgIH1cbiAgICB2YXIgc3ltYm9sU3RhdGUgPSBfX3N5bWJvbF9fKCdzdGF0ZScpO1xuICAgIHZhciBzeW1ib2xWYWx1ZSA9IF9fc3ltYm9sX18oJ3ZhbHVlJyk7XG4gICAgdmFyIHNvdXJjZSA9ICdQcm9taXNlLnRoZW4nO1xuICAgIHZhciBVTlJFU09MVkVEID0gbnVsbDtcbiAgICB2YXIgUkVTT0xWRUQgPSB0cnVlO1xuICAgIHZhciBSRUpFQ1RFRCA9IGZhbHNlO1xuICAgIHZhciBSRUpFQ1RFRF9OT19DQVRDSCA9IDA7XG4gICAgZnVuY3Rpb24gbWFrZVJlc29sdmVyKHByb21pc2UsIHN0YXRlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlUHJvbWlzZShwcm9taXNlLCBzdGF0ZSwgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZVByb21pc2UocHJvbWlzZSwgZmFsc2UsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBEbyBub3QgcmV0dXJuIHZhbHVlIG9yIHlvdSB3aWxsIGJyZWFrIHRoZSBQcm9taXNlIHNwZWMuXG4gICAgICAgIH07XG4gICAgfVxuICAgIHZhciBvbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd2FzQ2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiB3cmFwcGVyKHdyYXBwZWRGdW5jdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAod2FzQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2FzQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB3cmFwcGVkRnVuY3Rpb24uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvLyBQcm9taXNlIFJlc29sdXRpb25cbiAgICBmdW5jdGlvbiByZXNvbHZlUHJvbWlzZShwcm9taXNlLCBzdGF0ZSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIG9uY2VXcmFwcGVyID0gb25jZSgpO1xuICAgICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvbWlzZVtzeW1ib2xTdGF0ZV0gPT09IFVOUkVTT0xWRUQpIHtcbiAgICAgICAgICAgIC8vIHNob3VsZCBvbmx5IGdldCB2YWx1ZS50aGVuIG9uY2UgYmFzZWQgb24gcHJvbWlzZSBzcGVjLlxuICAgICAgICAgICAgdmFyIHRoZW4gPSBudWxsO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhlbiA9IHZhbHVlICYmIHZhbHVlLnRoZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIG9uY2VXcmFwcGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVByb21pc2UocHJvbWlzZSwgZmFsc2UsIGVycik7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFpvbmVBd2FyZVByb21pc2UpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gUkVKRUNURUQgJiYgdmFsdWUgaW5zdGFuY2VvZiBab25lQXdhcmVQcm9taXNlICYmXG4gICAgICAgICAgICAgICAgdmFsdWUuaGFzT3duUHJvcGVydHkoc3ltYm9sU3RhdGUpICYmIHZhbHVlLmhhc093blByb3BlcnR5KHN5bWJvbFZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIHZhbHVlW3N5bWJvbFN0YXRlXSAhPT0gVU5SRVNPTFZFRCkge1xuICAgICAgICAgICAgICAgIGNsZWFyUmVqZWN0ZWROb0NhdGNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlUHJvbWlzZShwcm9taXNlLCB2YWx1ZVtzeW1ib2xTdGF0ZV0sIHZhbHVlW3N5bWJvbFZhbHVlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdGF0ZSAhPT0gUkVKRUNURUQgJiYgdHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGVuLmFwcGx5KHZhbHVlLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBvbmNlV3JhcHBlcihtYWtlUmVzb2x2ZXIocHJvbWlzZSwgc3RhdGUpKSwgb25jZVdyYXBwZXIobWFrZVJlc29sdmVyKHByb21pc2UsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgb25jZVdyYXBwZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVByb21pc2UocHJvbWlzZSwgZmFsc2UsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZVtzeW1ib2xTdGF0ZV0gPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSBwcm9taXNlW3N5bWJvbFZhbHVlXTtcbiAgICAgICAgICAgICAgICBwcm9taXNlW3N5bWJvbFZhbHVlXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZVJlc29sdmVPclJlamVjdChwcm9taXNlLCBxdWV1ZVtpKytdLCBxdWV1ZVtpKytdLCBxdWV1ZVtpKytdLCBxdWV1ZVtpKytdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA9PSAwICYmIHN0YXRlID09IFJFSkVDVEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2Vbc3ltYm9sU3RhdGVdID0gUkVKRUNURURfTk9fQ0FUQ0g7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuY2F1Z2h0IChpbiBwcm9taXNlKTogJyArIHZhbHVlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgJiYgdmFsdWUuc3RhY2sgPyAnXFxuJyArIHZhbHVlLnN0YWNrIDogJycpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JfMSA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXzEucmVqZWN0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl8xLnByb21pc2UgPSBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfMS56b25lID0gWm9uZS5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfMS50YXNrID0gWm9uZS5jdXJyZW50VGFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgIF91bmNhdWdodFByb21pc2VFcnJvcnMucHVzaChlcnJvcl8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlUXVldWVEcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJlc29sdmluZyBhbiBhbHJlYWR5IHJlc29sdmVkIHByb21pc2UgaXMgYSBub29wLlxuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xlYXJSZWplY3RlZE5vQ2F0Y2gocHJvbWlzZSkge1xuICAgICAgICBpZiAocHJvbWlzZVtzeW1ib2xTdGF0ZV0gPT09IFJFSkVDVEVEX05PX0NBVENIKSB7XG4gICAgICAgICAgICBwcm9taXNlW3N5bWJvbFN0YXRlXSA9IFJFSkVDVEVEO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfdW5jYXVnaHRQcm9taXNlRXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb21pc2UgPT09IF91bmNhdWdodFByb21pc2VFcnJvcnNbaV0ucHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICBfdW5jYXVnaHRQcm9taXNlRXJyb3JzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlUmVzb2x2ZU9yUmVqZWN0KHByb21pc2UsIHpvbmUsIGNoYWluUHJvbWlzZSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgY2xlYXJSZWplY3RlZE5vQ2F0Y2gocHJvbWlzZSk7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IHByb21pc2Vbc3ltYm9sU3RhdGVdID9cbiAgICAgICAgICAgICh0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicpID8gb25GdWxmaWxsZWQgOiBmb3J3YXJkUmVzb2x1dGlvbiA6XG4gICAgICAgICAgICAodHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicpID8gb25SZWplY3RlZCA6IGZvcndhcmRSZWplY3Rpb247XG4gICAgICAgIHpvbmUuc2NoZWR1bGVNaWNyb1Rhc2soc291cmNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc29sdmVQcm9taXNlKGNoYWluUHJvbWlzZSwgdHJ1ZSwgem9uZS5ydW4oZGVsZWdhdGUsIHVuZGVmaW5lZCwgW3Byb21pc2Vbc3ltYm9sVmFsdWVdXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZVByb21pc2UoY2hhaW5Qcm9taXNlLCBmYWxzZSwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdmFyIFpvbmVBd2FyZVByb21pc2UgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gICAgICAgICAgICBpZiAoIShwcm9taXNlIGluc3RhbmNlb2YgWm9uZUF3YXJlUHJvbWlzZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgYmUgYW4gaW5zdGFuY2VvZiBQcm9taXNlLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvbWlzZVtzeW1ib2xTdGF0ZV0gPSBVTlJFU09MVkVEO1xuICAgICAgICAgICAgcHJvbWlzZVtzeW1ib2xWYWx1ZV0gPSBbXTsgLy8gcXVldWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGV4ZWN1dG9yICYmIGV4ZWN1dG9yKG1ha2VSZXNvbHZlcihwcm9taXNlLCBSRVNPTFZFRCksIG1ha2VSZXNvbHZlcihwcm9taXNlLCBSRUpFQ1RFRCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZVByb21pc2UocHJvbWlzZSwgZmFsc2UsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBab25lQXdhcmVQcm9taXNlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNvZGVdIH0nO1xuICAgICAgICB9O1xuICAgICAgICBab25lQXdhcmVQcm9taXNlLnJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlUHJvbWlzZShuZXcgdGhpcyhudWxsKSwgUkVTT0xWRUQsIHZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgWm9uZUF3YXJlUHJvbWlzZS5yZWplY3QgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlUHJvbWlzZShuZXcgdGhpcyhudWxsKSwgUkVKRUNURUQsIGVycm9yKTtcbiAgICAgICAgfTtcbiAgICAgICAgWm9uZUF3YXJlUHJvbWlzZS5yYWNlID0gZnVuY3Rpb24gKHZhbHVlcykge1xuICAgICAgICAgICAgdmFyIHJlc29sdmU7XG4gICAgICAgICAgICB2YXIgcmVqZWN0O1xuICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgdGhpcyhmdW5jdGlvbiAocmVzLCByZWopIHtcbiAgICAgICAgICAgICAgICBfYSA9IFtyZXMsIHJlal0sIHJlc29sdmUgPSBfYVswXSwgcmVqZWN0ID0gX2FbMV07XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmdW5jdGlvbiBvblJlc29sdmUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlICYmIChwcm9taXNlID0gbnVsbCB8fCByZXNvbHZlKHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBvblJlamVjdChlcnJvcikge1xuICAgICAgICAgICAgICAgIHByb21pc2UgJiYgKHByb21pc2UgPSBudWxsIHx8IHJlamVjdChlcnJvcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCB2YWx1ZXNfMSA9IHZhbHVlczsgX2kgPCB2YWx1ZXNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNfMVtfaV07XG4gICAgICAgICAgICAgICAgaWYgKCFpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlLnRoZW4ob25SZXNvbHZlLCBvblJlamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfTtcbiAgICAgICAgWm9uZUF3YXJlUHJvbWlzZS5hbGwgPSBmdW5jdGlvbiAodmFsdWVzKSB7XG4gICAgICAgICAgICB2YXIgcmVzb2x2ZTtcbiAgICAgICAgICAgIHZhciByZWplY3Q7XG4gICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzKGZ1bmN0aW9uIChyZXMsIHJlaikge1xuICAgICAgICAgICAgICAgIHJlc29sdmUgPSByZXM7XG4gICAgICAgICAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICAgICAgdmFyIHJlc29sdmVkVmFsdWVzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIHZhbHVlc18yID0gdmFsdWVzOyBfaSA8IHZhbHVlc18yLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc18yW19pXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5yZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWUudGhlbigoZnVuY3Rpb24gKGluZGV4KSB7IHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50LS07XG4gICAgICAgICAgICAgICAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzb2x2ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTsgfSkoY291bnQpLCByZWplY3QpO1xuICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNvdW50KVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzb2x2ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgIH07XG4gICAgICAgIFpvbmVBd2FyZVByb21pc2UucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgIHZhciBjaGFpblByb21pc2UgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihudWxsKTtcbiAgICAgICAgICAgIHZhciB6b25lID0gWm9uZS5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKHRoaXNbc3ltYm9sU3RhdGVdID09IFVOUkVTT0xWRUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbFZhbHVlXS5wdXNoKHpvbmUsIGNoYWluUHJvbWlzZSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVSZXNvbHZlT3JSZWplY3QodGhpcywgem9uZSwgY2hhaW5Qcm9taXNlLCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hhaW5Qcm9taXNlO1xuICAgICAgICB9O1xuICAgICAgICBab25lQXdhcmVQcm9taXNlLnByb3RvdHlwZS5jYXRjaCA9IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gWm9uZUF3YXJlUHJvbWlzZTtcbiAgICB9KCkpO1xuICAgIC8vIFByb3RlY3QgYWdhaW5zdCBhZ2dyZXNzaXZlIG9wdGltaXplcnMgZHJvcHBpbmcgc2VlbWluZ2x5IHVudXNlZCBwcm9wZXJ0aWVzLlxuICAgIC8vIEUuZy4gQ2xvc3VyZSBDb21waWxlciBpbiBhZHZhbmNlZCBtb2RlLlxuICAgIFpvbmVBd2FyZVByb21pc2VbJ3Jlc29sdmUnXSA9IFpvbmVBd2FyZVByb21pc2UucmVzb2x2ZTtcbiAgICBab25lQXdhcmVQcm9taXNlWydyZWplY3QnXSA9IFpvbmVBd2FyZVByb21pc2UucmVqZWN0O1xuICAgIFpvbmVBd2FyZVByb21pc2VbJ3JhY2UnXSA9IFpvbmVBd2FyZVByb21pc2UucmFjZTtcbiAgICBab25lQXdhcmVQcm9taXNlWydhbGwnXSA9IFpvbmVBd2FyZVByb21pc2UuYWxsO1xuICAgIHZhciBOYXRpdmVQcm9taXNlID0gZ2xvYmFsW3N5bWJvbFByb21pc2VdID0gZ2xvYmFsWydQcm9taXNlJ107XG4gICAgZ2xvYmFsWydQcm9taXNlJ10gPSBab25lQXdhcmVQcm9taXNlO1xuICAgIHZhciBzeW1ib2xUaGVuUGF0Y2hlZCA9IF9fc3ltYm9sX18oJ3RoZW5QYXRjaGVkJyk7XG4gICAgZnVuY3Rpb24gcGF0Y2hUaGVuKEN0b3IpIHtcbiAgICAgICAgdmFyIHByb3RvID0gQ3Rvci5wcm90b3R5cGU7XG4gICAgICAgIHZhciBvcmlnaW5hbFRoZW4gPSBwcm90by50aGVuO1xuICAgICAgICAvLyBLZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBtZXRob2QuXG4gICAgICAgIHByb3RvW3N5bWJvbFRoZW5dID0gb3JpZ2luYWxUaGVuO1xuICAgICAgICBDdG9yLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKG9uUmVzb2x2ZSwgb25SZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgd3JhcHBlZCA9IG5ldyBab25lQXdhcmVQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFRoZW4uY2FsbChfdGhpcywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudGhlbihvblJlc29sdmUsIG9uUmVqZWN0KTtcbiAgICAgICAgfTtcbiAgICAgICAgQ3RvcltzeW1ib2xUaGVuUGF0Y2hlZF0gPSB0cnVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB6b25laWZ5KGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0UHJvbWlzZSA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0UHJvbWlzZSBpbnN0YW5jZW9mIFpvbmVBd2FyZVByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0UHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBDdG9yID0gcmVzdWx0UHJvbWlzZS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIGlmICghQ3RvcltzeW1ib2xUaGVuUGF0Y2hlZF0pIHtcbiAgICAgICAgICAgICAgICBwYXRjaFRoZW4oQ3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0UHJvbWlzZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKE5hdGl2ZVByb21pc2UpIHtcbiAgICAgICAgcGF0Y2hUaGVuKE5hdGl2ZVByb21pc2UpO1xuICAgICAgICB2YXIgZmV0Y2ggPSBnbG9iYWxbJ2ZldGNoJ107XG4gICAgICAgIGlmICh0eXBlb2YgZmV0Y2ggPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gem9uZWlmeShmZXRjaCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVGhpcyBpcyBub3QgcGFydCBvZiBwdWJsaWMgQVBJLCBidXQgaXQgaXMgdXNlZnVsbCBmb3IgdGVzdHMsIHNvIHdlIGV4cG9zZSBpdC5cbiAgICBQcm9taXNlW1pvbmUuX19zeW1ib2xfXygndW5jYXVnaHRQcm9taXNlRXJyb3JzJyldID0gX3VuY2F1Z2h0UHJvbWlzZUVycm9ycztcbiAgICAvKlxuICAgICAqIFRoaXMgY29kZSBwYXRjaGVzIEVycm9yIHNvIHRoYXQ6XG4gICAgICogICAtIEl0IGlnbm9yZXMgdW4tbmVlZGVkIHN0YWNrIGZyYW1lcy5cbiAgICAgKiAgIC0gSXQgU2hvd3MgdGhlIGFzc29jaWF0ZWQgWm9uZSBmb3IgcmVhY2ggZnJhbWUuXG4gICAgICovXG4gICAgdmFyIEZyYW1lVHlwZTtcbiAgICAoZnVuY3Rpb24gKEZyYW1lVHlwZSkge1xuICAgICAgICAvLy8gU2tpcCB0aGlzIGZyYW1lIHdoZW4gcHJpbnRpbmcgb3V0IHN0YWNrXG4gICAgICAgIEZyYW1lVHlwZVtGcmFtZVR5cGVbXCJibGFja0xpc3RcIl0gPSAwXSA9IFwiYmxhY2tMaXN0XCI7XG4gICAgICAgIC8vLyBUaGlzIGZyYW1lIG1hcmtzIHpvbmUgdHJhbnNpdGlvblxuICAgICAgICBGcmFtZVR5cGVbRnJhbWVUeXBlW1widHJhbnNpdGlvblwiXSA9IDFdID0gXCJ0cmFuc2l0aW9uXCI7XG4gICAgfSkoRnJhbWVUeXBlIHx8IChGcmFtZVR5cGUgPSB7fSkpO1xuICAgIHZhciBOYXRpdmVFcnJvciA9IGdsb2JhbFtfX3N5bWJvbF9fKCdFcnJvcicpXSA9IGdsb2JhbC5FcnJvcjtcbiAgICAvLyBTdG9yZSB0aGUgZnJhbWVzIHdoaWNoIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIHN0YWNrIGZyYW1lc1xuICAgIHZhciBibGFja0xpc3RlZFN0YWNrRnJhbWVzID0ge307XG4gICAgLy8gV2UgbXVzdCBmaW5kIHRoZSBmcmFtZSB3aGVyZSBFcnJvciB3YXMgY3JlYXRlZCwgb3RoZXJ3aXNlIHdlIGFzc3VtZSB3ZSBkb24ndCB1bmRlcnN0YW5kIHN0YWNrXG4gICAgdmFyIHpvbmVBd2FyZUZyYW1lO1xuICAgIGdsb2JhbC5FcnJvciA9IFpvbmVBd2FyZUVycm9yO1xuICAgIC8vIEhvdyBzaG91bGQgdGhlIHN0YWNrIGZyYW1lcyBiZSBwYXJzZWQuXG4gICAgdmFyIGZyYW1lUGFyc2VyU3RyYXRlZ3kgPSBudWxsO1xuICAgIHZhciBzdGFja1Jld3JpdGUgPSAnc3RhY2tSZXdyaXRlJztcbiAgICAvLyBmaXggIzU5NSwgY3JlYXRlIHByb3BlcnR5IGRlc2NyaXB0b3JcbiAgICAvLyBmb3IgZXJyb3IgcHJvcGVydGllc1xuICAgIHZhciBjcmVhdGVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wcywga2V5KSB7XG4gICAgICAgIC8vIGlmIHByb3BlcnR5IGlzIGFscmVhZHkgZGVmaW5lZCwgc2tpcCBpdC5cbiAgICAgICAgaWYgKHByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBkZWZpbmUgYSBsb2NhbCBwcm9wZXJ0eVxuICAgICAgICAvLyBpbiBjYXNlIGVycm9yIHByb3BlcnR5IGlzIG5vdCBzZXR0YWJsZVxuICAgICAgICB2YXIgbmFtZSA9IF9fc3ltYm9sX18oa2V5KTtcbiAgICAgICAgcHJvcHNba2V5XSA9IHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBsb2NhbCBwcm9wZXJ0eSBoYXMgbm8gdmFsdWVcbiAgICAgICAgICAgICAgICAvLyB1c2UgaW50ZXJuYWwgZXJyb3IncyBwcm9wZXJ0eSB2YWx1ZVxuICAgICAgICAgICAgICAgIGlmICghdGhpc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JfMiA9IHRoaXNbX19zeW1ib2xfXygnZXJyb3InKV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcl8yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW25hbWVdID0gZXJyb3JfMltrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW25hbWVdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0dGVyIHdpbGwgc2V0IHZhbHVlIHRvIGxvY2FsIHByb3BlcnR5IHZhbHVlXG4gICAgICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG4gICAgLy8gZml4ICM1OTUsIGNyZWF0ZSBwcm9wZXJ0eSBkZXNjcmlwdG9yXG4gICAgLy8gZm9yIGVycm9yIG1ldGhvZCBwcm9wZXJ0aWVzXG4gICAgdmFyIGNyZWF0ZU1ldGhvZFByb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BzLCBrZXkpIHtcbiAgICAgICAgaWYgKHByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwcm9wc1trZXldID0ge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSB0aGlzW19fc3ltYm9sX18oJ2Vycm9yJyldO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvck1ldGhvZCA9IChlcnJvciAmJiBlcnJvcltrZXldKSB8fCB0aGlzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1ldGhvZC5hcHBseShlcnJvciwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgY3JlYXRlRXJyb3JQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJvcHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgTmF0aXZlRXJyb3IoKTtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAvLyBBdm9pZCBidWdzIHdoZW4gaGFzT3duUHJvcGVydHkgaXMgc2hhZG93ZWRcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXJyb3IsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVQcm9wZXJ0eShwcm9wcywga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJvdG8gPSBOYXRpdmVFcnJvci5wcm90b3R5cGU7XG4gICAgICAgIGlmIChwcm90bykge1xuICAgICAgICAgICAgdmFyIHBLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBwS2V5c1tpXTtcbiAgICAgICAgICAgICAgICAvLyBza2lwIGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ2NvbnN0cnVjdG9yJyAmJiBrZXkgIT09ICd0b1N0cmluZycgJiYga2V5ICE9PSAndG9Tb3VyY2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb3BlcnR5KHByb3BzLCBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBzb21lIG90aGVyIHByb3BlcnRpZXMgYXJlIG5vdFxuICAgICAgICAvLyBpbiBOYXRpdmVFcnJvclxuICAgICAgICBjcmVhdGVQcm9wZXJ0eShwcm9wcywgJ29yaWdpbmFsU3RhY2snKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocHJvcHMsICd6b25lQXdhcmVTdGFjaycpO1xuICAgICAgICAvLyBkZWZpbmUgdG9TdHJpbmcsIHRvU291cmNlIGFzIG1ldGhvZCBwcm9wZXJ0eVxuICAgICAgICBjcmVhdGVNZXRob2RQcm9wZXJ0eShwcm9wcywgJ3RvU3RyaW5nJyk7XG4gICAgICAgIGNyZWF0ZU1ldGhvZFByb3BlcnR5KHByb3BzLCAndG9Tb3VyY2UnKTtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH07XG4gICAgdmFyIGVycm9yUHJvcGVydGllcyA9IGNyZWF0ZUVycm9yUHJvcGVydGllcygpO1xuICAgIC8vIGZvciBkZXJpdmVkIEVycm9yIGNsYXNzIHdoaWNoIGV4dGVuZHMgWm9uZUF3YXJlRXJyb3JcbiAgICAvLyB3ZSBzaG91bGQgbm90IG92ZXJyaWRlIHRoZSBkZXJpdmVkIGNsYXNzJ3MgcHJvcGVydHlcbiAgICAvLyBzbyB3ZSBjcmVhdGUgYSBuZXcgcHJvcHMgb2JqZWN0IG9ubHkgY29weSB0aGUgcHJvcGVydGllc1xuICAgIC8vIGZyb20gZXJyb3JQcm9wZXJ0aWVzIHdoaWNoIG5vdCBleGlzdCBpbiBkZXJpdmVkIEVycm9yJ3MgcHJvdG90eXBlXG4gICAgdmFyIGdldEVycm9yUHJvcGVydGllc0ZvclByb3RvdHlwZSA9IGZ1bmN0aW9uIChwcm90b3R5cGUpIHtcbiAgICAgICAgLy8gaWYgdGhlIHByb3RvdHlwZSBpcyBab25lQXdhcmVFcnJvci5wcm90b3R5cGVcbiAgICAgICAgLy8gd2UganVzdCByZXR1cm4gdGhlIHByZWJ1aWx0IGVycm9yUHJvcGVydGllcy5cbiAgICAgICAgaWYgKHByb3RvdHlwZSA9PT0gWm9uZUF3YXJlRXJyb3IucHJvdG90eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JQcm9wZXJ0aWVzO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZXdQcm9wcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHZhciBjS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yUHJvcGVydGllcyk7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlKTtcbiAgICAgICAgY0tleXMuZm9yRWFjaChmdW5jdGlvbiAoY0tleSkge1xuICAgICAgICAgICAgaWYgKGtleXMuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5ID09PSBjS2V5O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbmV3UHJvcHNbY0tleV0gPSBlcnJvclByb3BlcnRpZXNbY0tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3UHJvcHM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIFpvbmVBd2FyZUVycm9yIHdoaWNoIHByb2Nlc3NlcyB0aGUgc3RhY2sgZnJhbWUgYW5kIGNsZWFucyB1cCBleHRyYSBmcmFtZXMgYXMgd2VsbCBhc1xuICAgICAqIGFkZHMgem9uZSBpbmZvcm1hdGlvbiB0byBpdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBab25lQXdhcmVFcnJvcigpIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCB0aGlzXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgdW5kZWZpbmVkKGNhbGwgRXJyb3Igd2l0aG91dCBuZXcpIG9yIHRoaXMgaXMgZ2xvYmFsXG4gICAgICAgIC8vIG9yIHRoaXMgaXMgc29tZSBvdGhlciBvYmplY3RzLCB3ZSBzaG91bGQgZm9yY2UgdG8gY3JlYXRlIGFcbiAgICAgICAgLy8gdmFsaWQgWm9uZUF3YXJlRXJyb3IgYnkgY2FsbCBPYmplY3QuY3JlYXRlKClcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFpvbmVBd2FyZUVycm9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIFpvbmVBd2FyZUVycm9yLmFwcGx5KE9iamVjdC5jcmVhdGUoWm9uZUF3YXJlRXJyb3IucHJvdG90eXBlKSwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDcmVhdGUgYW4gRXJyb3IuXG4gICAgICAgIHZhciBlcnJvciA9IE5hdGl2ZUVycm9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXNbX19zeW1ib2xfXygnZXJyb3InKV0gPSBlcnJvcjtcbiAgICAgICAgLy8gU2F2ZSBvcmlnaW5hbCBzdGFjayB0cmFjZVxuICAgICAgICBlcnJvci5vcmlnaW5hbFN0YWNrID0gZXJyb3Iuc3RhY2s7XG4gICAgICAgIC8vIFByb2Nlc3MgdGhlIHN0YWNrIHRyYWNlIGFuZCByZXdyaXRlIHRoZSBmcmFtZXMuXG4gICAgICAgIGlmIChab25lQXdhcmVFcnJvcltzdGFja1Jld3JpdGVdICYmIGVycm9yLm9yaWdpbmFsU3RhY2spIHtcbiAgICAgICAgICAgIHZhciBmcmFtZXNfMSA9IGVycm9yLm9yaWdpbmFsU3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHpvbmVGcmFtZSA9IF9jdXJyZW50Wm9uZUZyYW1lO1xuICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgZnJhbWVcbiAgICAgICAgICAgIHdoaWxlIChmcmFtZXNfMVtpXSAhPT0gem9uZUF3YXJlRnJhbWUgJiYgaSA8IGZyYW1lc18xLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoOyBpIDwgZnJhbWVzXzEubGVuZ3RoICYmIHpvbmVGcmFtZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZyYW1lID0gZnJhbWVzXzFbaV07XG4gICAgICAgICAgICAgICAgaWYgKGZyYW1lLnRyaW0oKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZnJhbWVUeXBlID0gYmxhY2tMaXN0ZWRTdGFja0ZyYW1lcy5oYXNPd25Qcm9wZXJ0eShmcmFtZSkgJiYgYmxhY2tMaXN0ZWRTdGFja0ZyYW1lc1tmcmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZVR5cGUgPT09IEZyYW1lVHlwZS5ibGFja0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc18xLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmcmFtZVR5cGUgPT09IEZyYW1lVHlwZS50cmFuc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoem9uZUZyYW1lLnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgZnJhbWUgd2hlcmUgem9uZSBjaGFuZ2VkLiBQcmludCBhbmQgcHJvY2VzcyBpdCBhY2NvcmRpbmdseVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc18xW2ldICs9IFwiIFtcIiArIHpvbmVGcmFtZS5wYXJlbnQuem9uZS5uYW1lICsgXCIgPT4gXCIgKyB6b25lRnJhbWUuem9uZS5uYW1lICsgXCJdXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZyYW1lID0gem9uZUZyYW1lLnBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGcmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNfMVtpXSArPSBcIiBbXCIgKyB6b25lRnJhbWUuem9uZS5uYW1lICsgXCJdXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcnJvci5zdGFjayA9IGVycm9yLnpvbmVBd2FyZVN0YWNrID0gZnJhbWVzXzEuam9pbignXFxuJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdXNlIGRlZmluZVByb3BlcnRpZXMgaGVyZSBpbnN0ZWFkIG9mIGNvcHkgcHJvcGVydHkgdmFsdWVcbiAgICAgICAgLy8gYmVjYXVzZSBvZiBpc3N1ZSAjNTk1IHdoaWNoIHdpbGwgYnJlYWsgYW5ndWxhcjIuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIGdldEVycm9yUHJvcGVydGllc0ZvclByb3RvdHlwZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIENvcHkgdGhlIHByb3RvdHlwZSBzbyB0aGF0IGluc3RhbmNlb2Ygb3BlcmF0b3Igd29ya3MgYXMgZXhwZWN0ZWRcbiAgICBab25lQXdhcmVFcnJvci5wcm90b3R5cGUgPSBOYXRpdmVFcnJvci5wcm90b3R5cGU7XG4gICAgWm9uZUF3YXJlRXJyb3JbWm9uZS5fX3N5bWJvbF9fKCdibGFja2xpc3RlZFN0YWNrRnJhbWVzJyldID0gYmxhY2tMaXN0ZWRTdGFja0ZyYW1lcztcbiAgICBab25lQXdhcmVFcnJvcltzdGFja1Jld3JpdGVdID0gZmFsc2U7XG4gICAgaWYgKE5hdGl2ZUVycm9yLmhhc093blByb3BlcnR5KCdzdGFja1RyYWNlTGltaXQnKSkge1xuICAgICAgICAvLyBFeHRlbmQgZGVmYXVsdCBzdGFjayBsaW1pdCBhcyB3ZSB3aWxsIGJlIHJlbW92aW5nIGZldyBmcmFtZXMuXG4gICAgICAgIE5hdGl2ZUVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IE1hdGgubWF4KE5hdGl2ZUVycm9yLnN0YWNrVHJhY2VMaW1pdCwgMTUpO1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBab25lQXdhcmVFcnJvciBoYXMgdGhlIHNhbWUgcHJvcGVydHkgd2hpY2ggZm9yd2FyZHMgdG8gTmF0aXZlRXJyb3IuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShab25lQXdhcmVFcnJvciwgJ3N0YWNrVHJhY2VMaW1pdCcsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBOYXRpdmVFcnJvci5zdGFja1RyYWNlTGltaXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoTmF0aXZlRXJyb3IuaGFzT3duUHJvcGVydHkoJ2NhcHR1cmVTdGFja1RyYWNlJykpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFpvbmVBd2FyZUVycm9yLCAnY2FwdHVyZVN0YWNrVHJhY2UnLCB7XG4gICAgICAgICAgICAvLyBhZGQgbmFtZWQgZnVuY3Rpb24gaGVyZSBiZWNhdXNlIHdlIG5lZWQgdG8gcmVtb3ZlIHRoaXNcbiAgICAgICAgICAgIC8vIHN0YWNrIGZyYW1lIHdoZW4gcHJlcGFyZVN0YWNrVHJhY2UgYmVsb3dcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB6b25lQ2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0T2JqZWN0LCBjb25zdHJ1Y3Rvck9wdCkge1xuICAgICAgICAgICAgICAgIE5hdGl2ZUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRhcmdldE9iamVjdCwgY29uc3RydWN0b3JPcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFpvbmVBd2FyZUVycm9yLCAncHJlcGFyZVN0YWNrVHJhY2UnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZUVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBOYXRpdmVFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIChlcnJvciwgc3RydWN0dXJlZFN0YWNrVHJhY2UpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgYWRkaXRpb25hbCBzdGFjayBpbmZvcm1hdGlvbiBmcm9tIFpvbmVBd2FyZUVycm9yLmNhcHR1cmVTdGFja1RyYWNlXG4gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZWRTdGFja1RyYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RydWN0dXJlZFN0YWNrVHJhY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdCA9IHN0cnVjdHVyZWRTdGFja1RyYWNlW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBmaXJzdCBmdW5jdGlvbiB3aGljaCBuYW1lIGlzIHpvbmVDYXB0dXJlU3RhY2tUcmFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0LmdldEZ1bmN0aW9uTmFtZSgpID09PSAnem9uZUNhcHR1cmVTdGFja1RyYWNlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZWRTdGFja1RyYWNlLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXBwbHkodGhpcywgW2Vycm9yLCBzdHJ1Y3R1cmVkU3RhY2tUcmFjZV0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIE5vdyB3ZSBuZWVkIHRvIHBvcHVsZXQgdGhlIGBibGFja2xpc3RlZFN0YWNrRnJhbWVzYCBhcyB3ZWxsIGFzIGZpbmQgdGhlXG4gICAgLy8gcnVuL3J1bkd1cmFkZWQvcnVuVGFzayBmcmFtZXMuIFRoaXMgaXMgZG9uZSBieSBjcmVhdGluZyBhIGRldGVjdCB6b25lIGFuZCB0aGVuIHRocmVhZGluZ1xuICAgIC8vIHRoZSBleGVjdXRpb24gdGhyb3VnaCBhbGwgb2YgdGhlIGFib3ZlIG1ldGhvZHMgc28gdGhhdCB3ZSBjYW4gbG9vayBhdCB0aGUgc3RhY2sgdHJhY2UgYW5kXG4gICAgLy8gZmluZCB0aGUgZnJhbWVzIG9mIGludGVyZXN0LlxuICAgIHZhciBkZXRlY3Rab25lID0gWm9uZS5jdXJyZW50LmZvcmsoe1xuICAgICAgICBuYW1lOiAnZGV0ZWN0JyxcbiAgICAgICAgb25JbnZva2U6IGZ1bmN0aW9uIChwYXJlbnRab25lRGVsZWdhdGUsIGN1cnJlbnRab25lLCB0YXJnZXRab25lLCBkZWxlZ2F0ZSwgYXBwbHlUaGlzLCBhcHBseUFyZ3MsIHNvdXJjZSkge1xuICAgICAgICAgICAgLy8gSGVyZSBvbmx5IHNvIHRoYXQgaXQgd2lsbCBzaG93IHVwIGluIHRoZSBzdGFjayBmcmFtZSBzbyB0aGF0IGl0IGNhbiBiZSBibGFjayBsaXN0ZWQuXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50Wm9uZURlbGVnYXRlLmludm9rZSh0YXJnZXRab25lLCBkZWxlZ2F0ZSwgYXBwbHlUaGlzLCBhcHBseUFyZ3MsIHNvdXJjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSGFuZGxlRXJyb3I6IGZ1bmN0aW9uIChwYXJlbnRaRCwgY3VycmVudCwgdGFyZ2V0LCBlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yLm9yaWdpbmFsU3RhY2sgJiYgRXJyb3IgPT09IFpvbmVBd2FyZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZyYW1lc18yID0gZXJyb3Iub3JpZ2luYWxTdGFjay5zcGxpdCgvXFxuLyk7XG4gICAgICAgICAgICAgICAgdmFyIHJ1bkZyYW1lID0gZmFsc2UsIHJ1bkd1YXJkZWRGcmFtZSA9IGZhbHNlLCBydW5UYXNrRnJhbWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoZnJhbWVzXzIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmcmFtZSA9IGZyYW1lc18yLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9uIHNhZmFyaSBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIHN0YWNrIGZyYW1lIHdpdGggbm8gbGluZSBudW1iZXIuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY2hlY2sgbWFrZXMgc3VyZSB0aGF0IHdlIGRvbid0IGZpbHRlciBmcmFtZXMgb24gbmFtZSBvbmx5IChtdXN0IGhhdmVcbiAgICAgICAgICAgICAgICAgICAgLy8gbGluZW51bWJlcilcbiAgICAgICAgICAgICAgICAgICAgaWYgKC86XFxkKzpcXGQrLy50ZXN0KGZyYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHJpZCBvZiB0aGUgcGF0aCBzbyB0aGF0IHdlIGRvbid0IGFjY2lkaW50ZWx5IGZpbmQgZnVuY3Rpb24gbmFtZSBpbiBwYXRoLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gY2hyb21lIHRoZSBzZXBlcmF0b3IgaXMgYChgIGFuZCBgQGAgaW4gRkYgYW5kIHNhZmFyaVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21lOiBhdCBab25lLnJ1biAoem9uZS5qczoxMDApXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaHJvbWU6IGF0IFpvbmUucnVuIChodHRwOi8vbG9jYWxob3N0Ojk4NzYvYmFzZS9idWlsZC9saWIvem9uZS5qczoxMDA6MjQpXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlRm94OiBab25lLnByb3RvdHlwZS5ydW5AaHR0cDovL2xvY2FsaG9zdDo5ODc2L2Jhc2UvYnVpbGQvbGliL3pvbmUuanM6MTAxOjI0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTYWZhcmk6IHJ1bkBodHRwOi8vbG9jYWxob3N0Ojk4NzYvYmFzZS9idWlsZC9saWIvem9uZS5qczoxMDE6MjRcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbk5hbWUgPSBmcmFtZS5zcGxpdCgnKCcpWzBdLnNwbGl0KCdAJylbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnJhbWVUeXBlID0gRnJhbWVUeXBlLnRyYW5zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5OYW1lLmluZGV4T2YoJ1pvbmVBd2FyZUVycm9yJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZUF3YXJlRnJhbWUgPSBmcmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbk5hbWUuaW5kZXhPZigncnVuR3VhcmRlZCcpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkd1YXJkZWRGcmFtZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmbk5hbWUuaW5kZXhPZigncnVuVGFzaycpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1blRhc2tGcmFtZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmbk5hbWUuaW5kZXhPZigncnVuJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuRnJhbWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVUeXBlID0gRnJhbWVUeXBlLmJsYWNrTGlzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJsYWNrTGlzdGVkU3RhY2tGcmFtZXNbZnJhbWVdID0gZnJhbWVUeXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25jZSB3ZSBmaW5kIGFsbCBvZiB0aGUgZnJhbWVzIHdlIGNhbiBzdG9wIGxvb2tpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVuRnJhbWUgJiYgcnVuR3VhcmRlZEZyYW1lICYmIHJ1blRhc2tGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpvbmVBd2FyZUVycm9yW3N0YWNrUmV3cml0ZV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gY2FyZWZ1bGx5IGNvbnN0cnVjdG9yIGEgc3RhY2sgZnJhbWUgd2hpY2ggY29udGFpbnMgYWxsIG9mIHRoZSBmcmFtZXMgb2YgaW50ZXJlc3Qgd2hpY2hcbiAgICAvLyBuZWVkIHRvIGJlIGRldGVjdGVkIGFuZCBibGFja2xpc3RlZC5cbiAgICB2YXIgZGV0ZWN0UnVuRm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRldGVjdFpvbmUucnVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRldGVjdFpvbmUucnVuR3VhcmRlZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdibGFja2xpc3RTdGFja0ZyYW1lcycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gQ2F1c2UgdGhlIGVycm9yIHRvIGV4dHJhY3QgdGhlIHN0YWNrIGZyYW1lcy5cbiAgICBkZXRlY3Rab25lLnJ1blRhc2soZGV0ZWN0Wm9uZS5zY2hlZHVsZU1hY3JvVGFzaygnZGV0ZWN0JywgZGV0ZWN0UnVuRm4sIG51bGwsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH0sIG51bGwpKTtcbiAgICByZXR1cm4gZ2xvYmFsWydab25lJ10gPSBab25lO1xufSkodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgd2luZG93IHx8IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmIHx8IGdsb2JhbCk7XG5cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8qKlxuICogU3VwcHJlc3MgY2xvc3VyZSBjb21waWxlciBlcnJvcnMgYWJvdXQgdW5rbm93biAnWm9uZScgdmFyaWFibGVcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIEBzdXBwcmVzcyB7dW5kZWZpbmVkVmFyc31cbiAqL1xudmFyIHpvbmVTeW1ib2wgPSBmdW5jdGlvbiAobikgeyByZXR1cm4gKFwiX196b25lX3N5bWJvbF9fXCIgKyBuKTsgfTtcbnZhciBfZ2xvYmFsJDEgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJiB3aW5kb3cgfHwgdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYgfHwgZ2xvYmFsO1xuZnVuY3Rpb24gYmluZEFyZ3VtZW50cyhhcmdzLCBzb3VyY2UpIHtcbiAgICBmb3IgKHZhciBpID0gYXJncy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbaV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFyZ3NbaV0gPSBab25lLmN1cnJlbnQud3JhcChhcmdzW2ldLCBzb3VyY2UgKyAnXycgKyBpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmZ1bmN0aW9uIHBhdGNoUHJvdG90eXBlKHByb3RvdHlwZSwgZm5OYW1lcykge1xuICAgIHZhciBzb3VyY2UgPSBwcm90b3R5cGUuY29uc3RydWN0b3JbJ25hbWUnXTtcbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgdmFyIG5hbWVfMSA9IGZuTmFtZXNbaV07XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IHByb3RvdHlwZVtuYW1lXzFdO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICAgIHByb3RvdHlwZVtuYW1lXzFdID0gKGZ1bmN0aW9uIChkZWxlZ2F0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5hcHBseSh0aGlzLCBiaW5kQXJndW1lbnRzKGFyZ3VtZW50cywgc291cmNlICsgJy4nICsgbmFtZV8xKSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKGRlbGVnYXRlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbk5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIF9sb29wXzEoaSk7XG4gICAgfVxufVxudmFyIGlzV2ViV29ya2VyID0gKHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlKTtcbnZhciBpc05vZGUgPSAoISgnbncnIGluIF9nbG9iYWwkMSkgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmXG4gICAge30udG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nKTtcbnZhciBpc0Jyb3dzZXIgPSAhaXNOb2RlICYmICFpc1dlYldvcmtlciAmJiAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3dbJ0hUTUxFbGVtZW50J10pO1xuLy8gd2UgYXJlIGluIGVsZWN0cm9uIG9mIG53LCBzbyB3ZSBhcmUgYm90aCBicm93c2VyIGFuZCBub2RlanNcbnZhciBpc01peCA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHt9LnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJyAmJiAhaXNXZWJXb3JrZXIgJiZcbiAgICAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3dbJ0hUTUxFbGVtZW50J10pO1xuZnVuY3Rpb24gcGF0Y2hQcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKSB8fCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9O1xuICAgIHZhciBvcmlnaW5hbERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgJ29yaWdpbmFsJyArIHByb3ApO1xuICAgIGlmICghb3JpZ2luYWxEZXNjICYmIGRlc2MuZ2V0KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICdvcmlnaW5hbCcgKyBwcm9wLCB7IGVudW1lcmFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IHRydWUsIGdldDogZGVzYy5nZXQgfSk7XG4gICAgfVxuICAgIC8vIEEgcHJvcGVydHkgZGVzY3JpcHRvciBjYW5ub3QgaGF2ZSBnZXR0ZXIvc2V0dGVyIGFuZCBiZSB3cml0YWJsZVxuICAgIC8vIGRlbGV0aW5nIHRoZSB3cml0YWJsZSBhbmQgdmFsdWUgcHJvcGVydGllcyBhdm9pZHMgdGhpcyBlcnJvcjpcbiAgICAvL1xuICAgIC8vIFR5cGVFcnJvcjogcHJvcGVydHkgZGVzY3JpcHRvcnMgbXVzdCBub3Qgc3BlY2lmeSBhIHZhbHVlIG9yIGJlIHdyaXRhYmxlIHdoZW4gYVxuICAgIC8vIGdldHRlciBvciBzZXR0ZXIgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAgZGVsZXRlIGRlc2Mud3JpdGFibGU7XG4gICAgZGVsZXRlIGRlc2MudmFsdWU7XG4gICAgLy8gc3Vic3RyKDIpIGN1eiAnb25jbGljaycgLT4gJ2NsaWNrJywgZXRjXG4gICAgdmFyIGV2ZW50TmFtZSA9IHByb3Auc3Vic3RyKDIpO1xuICAgIHZhciBfcHJvcCA9ICdfJyArIHByb3A7XG4gICAgZGVzYy5zZXQgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgaWYgKHRoaXNbX3Byb3BdKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB0aGlzW19wcm9wXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIHdyYXBGbiA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHVuZGVmaW5lZCAmJiAhcmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXNbX3Byb3BdID0gd3JhcEZuO1xuICAgICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgd3JhcEZuLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzW19wcm9wXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIFRoZSBnZXR0ZXIgd291bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgdW5hc3NpZ25lZCBwcm9wZXJ0aWVzIGJ1dCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhblxuICAgIC8vIHVuYXNzaWduZWQgcHJvcGVydHkgaXMgbnVsbFxuICAgIGRlc2MuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgciA9IHRoaXNbX3Byb3BdIHx8IG51bGw7XG4gICAgICAgIC8vIHJlc3VsdCB3aWxsIGJlIG51bGwgd2hlbiB1c2UgaW5saW5lIGV2ZW50IGF0dHJpYnV0ZSxcbiAgICAgICAgLy8gc3VjaCBhcyA8YnV0dG9uIG9uY2xpY2s9XCJmdW5jKCk7XCI+T0s8L2J1dHRvbj5cbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgb25jbGljayBmdW5jdGlvbiBpcyBpbnRlcm5hbCByYXcgdW5jb21waWxlZCBoYW5kbGVyXG4gICAgICAgIC8vIHRoZSBvbmNsaWNrIHdpbGwgYmUgZXZhbHVhdGVkIHdoZW4gZmlyc3QgdGltZSBldmVudCB3YXMgdHJpZ2dlcmVkIG9yXG4gICAgICAgIC8vIHRoZSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCwgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvem9uZS5qcy9pc3N1ZXMvNTI1XG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCB1c2Ugb3JpZ2luYWwgbmF0aXZlIGdldCB0byByZXRyaWV2ZSB0aGUgaGFuZGxlclxuICAgICAgICBpZiAociA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsRGVzYyAmJiBvcmlnaW5hbERlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgciA9IG9yaWdpbmFsRGVzYy5nZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAocikge1xuICAgICAgICAgICAgICAgICAgICBkZXNjLnNldC5hcHBseSh0aGlzLCBbcl0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXNbJ3JlbW92ZUF0dHJpYnV0ZSddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShwcm9wKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpc1tfcHJvcF0gfHwgbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIGRlc2MpO1xufVxuXG5mdW5jdGlvbiBwYXRjaE9uUHJvcGVydGllcyhvYmosIHByb3BlcnRpZXMpIHtcbiAgICB2YXIgb25Qcm9wZXJ0aWVzID0gW107XG4gICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHtcbiAgICAgICAgaWYgKHByb3Auc3Vic3RyKDAsIDIpID09ICdvbicpIHtcbiAgICAgICAgICAgIG9uUHJvcGVydGllcy5wdXNoKHByb3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgb25Qcm9wZXJ0aWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHBhdGNoUHJvcGVydHkob2JqLCBvblByb3BlcnRpZXNbal0pO1xuICAgIH1cbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHBhdGNoUHJvcGVydHkob2JqLCAnb24nICsgcHJvcGVydGllc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnZhciBFVkVOVF9UQVNLUyA9IHpvbmVTeW1ib2woJ2V2ZW50VGFza3MnKTtcbi8vIEZvciBFdmVudFRhcmdldFxudmFyIEFERF9FVkVOVF9MSVNURU5FUiA9ICdhZGRFdmVudExpc3RlbmVyJztcbnZhciBSRU1PVkVfRVZFTlRfTElTVEVORVIgPSAncmVtb3ZlRXZlbnRMaXN0ZW5lcic7XG5mdW5jdGlvbiBmaW5kRXhpc3RpbmdSZWdpc3RlcmVkVGFzayh0YXJnZXQsIGhhbmRsZXIsIG5hbWUsIGNhcHR1cmUsIHJlbW92ZSkge1xuICAgIHZhciBldmVudFRhc2tzID0gdGFyZ2V0W0VWRU5UX1RBU0tTXTtcbiAgICBpZiAoZXZlbnRUYXNrcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50VGFza3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBldmVudFRhc2sgPSBldmVudFRhc2tzW2ldO1xuICAgICAgICAgICAgdmFyIGRhdGEgPSBldmVudFRhc2suZGF0YTtcbiAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGRhdGEuaGFuZGxlcjtcbiAgICAgICAgICAgIGlmICgoZGF0YS5oYW5kbGVyID09PSBoYW5kbGVyIHx8IGxpc3RlbmVyLmxpc3RlbmVyID09PSBoYW5kbGVyKSAmJlxuICAgICAgICAgICAgICAgIGRhdGEudXNlQ2FwdHVyaW5nID09PSBjYXB0dXJlICYmIGRhdGEuZXZlbnROYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudFRhc2tzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50VGFzaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGZpbmRBbGxFeGlzdGluZ1JlZ2lzdGVyZWRUYXNrcyh0YXJnZXQsIG5hbWUsIGNhcHR1cmUsIHJlbW92ZSkge1xuICAgIHZhciBldmVudFRhc2tzID0gdGFyZ2V0W0VWRU5UX1RBU0tTXTtcbiAgICBpZiAoZXZlbnRUYXNrcykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSBldmVudFRhc2tzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICB2YXIgZXZlbnRUYXNrID0gZXZlbnRUYXNrc1tpXTtcbiAgICAgICAgICAgIHZhciBkYXRhID0gZXZlbnRUYXNrLmRhdGE7XG4gICAgICAgICAgICBpZiAoZGF0YS5ldmVudE5hbWUgPT09IG5hbWUgJiYgZGF0YS51c2VDYXB0dXJpbmcgPT09IGNhcHR1cmUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChldmVudFRhc2spO1xuICAgICAgICAgICAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXNrcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gYXR0YWNoUmVnaXN0ZXJlZEV2ZW50KHRhcmdldCwgZXZlbnRUYXNrLCBpc1ByZXBlbmQpIHtcbiAgICB2YXIgZXZlbnRUYXNrcyA9IHRhcmdldFtFVkVOVF9UQVNLU107XG4gICAgaWYgKCFldmVudFRhc2tzKSB7XG4gICAgICAgIGV2ZW50VGFza3MgPSB0YXJnZXRbRVZFTlRfVEFTS1NdID0gW107XG4gICAgfVxuICAgIGlmIChpc1ByZXBlbmQpIHtcbiAgICAgICAgZXZlbnRUYXNrcy51bnNoaWZ0KGV2ZW50VGFzayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBldmVudFRhc2tzLnB1c2goZXZlbnRUYXNrKTtcbiAgICB9XG59XG52YXIgZGVmYXVsdExpc3RlbmVyTWV0YUNyZWF0b3IgPSBmdW5jdGlvbiAoc2VsZiwgYXJncykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHVzZUNhcHR1cmluZzogYXJnc1syXSxcbiAgICAgICAgZXZlbnROYW1lOiBhcmdzWzBdLFxuICAgICAgICBoYW5kbGVyOiBhcmdzWzFdLFxuICAgICAgICB0YXJnZXQ6IHNlbGYgfHwgX2dsb2JhbCQxLFxuICAgICAgICBuYW1lOiBhcmdzWzBdLFxuICAgICAgICBpbnZva2VBZGRGdW5jOiBmdW5jdGlvbiAoYWRkRm5TeW1ib2wsIGRlbGVnYXRlKSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGUgJiYgZGVsZWdhdGUuaW52b2tlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0W2FkZEZuU3ltYm9sXSh0aGlzLmV2ZW50TmFtZSwgZGVsZWdhdGUuaW52b2tlLCB0aGlzLnVzZUNhcHR1cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YXJnZXRbYWRkRm5TeW1ib2xdKHRoaXMuZXZlbnROYW1lLCBkZWxlZ2F0ZSwgdGhpcy51c2VDYXB0dXJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpbnZva2VSZW1vdmVGdW5jOiBmdW5jdGlvbiAocmVtb3ZlRm5TeW1ib2wsIGRlbGVnYXRlKSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGUgJiYgZGVsZWdhdGUuaW52b2tlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0W3JlbW92ZUZuU3ltYm9sXSh0aGlzLmV2ZW50TmFtZSwgZGVsZWdhdGUuaW52b2tlLCB0aGlzLnVzZUNhcHR1cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YXJnZXRbcmVtb3ZlRm5TeW1ib2xdKHRoaXMuZXZlbnROYW1lLCBkZWxlZ2F0ZSwgdGhpcy51c2VDYXB0dXJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn07XG5mdW5jdGlvbiBtYWtlWm9uZUF3YXJlQWRkTGlzdGVuZXIoYWRkRm5OYW1lLCByZW1vdmVGbk5hbWUsIHVzZUNhcHR1cmluZ1BhcmFtLCBhbGxvd0R1cGxpY2F0ZXMsIGlzUHJlcGVuZCwgbWV0YUNyZWF0b3IpIHtcbiAgICBpZiAodXNlQ2FwdHVyaW5nUGFyYW0gPT09IHZvaWQgMCkgeyB1c2VDYXB0dXJpbmdQYXJhbSA9IHRydWU7IH1cbiAgICBpZiAoYWxsb3dEdXBsaWNhdGVzID09PSB2b2lkIDApIHsgYWxsb3dEdXBsaWNhdGVzID0gZmFsc2U7IH1cbiAgICBpZiAoaXNQcmVwZW5kID09PSB2b2lkIDApIHsgaXNQcmVwZW5kID0gZmFsc2U7IH1cbiAgICBpZiAobWV0YUNyZWF0b3IgPT09IHZvaWQgMCkgeyBtZXRhQ3JlYXRvciA9IGRlZmF1bHRMaXN0ZW5lck1ldGFDcmVhdG9yOyB9XG4gICAgdmFyIGFkZEZuU3ltYm9sID0gem9uZVN5bWJvbChhZGRGbk5hbWUpO1xuICAgIHZhciByZW1vdmVGblN5bWJvbCA9IHpvbmVTeW1ib2wocmVtb3ZlRm5OYW1lKTtcbiAgICB2YXIgZGVmYXVsdFVzZUNhcHR1cmluZyA9IHVzZUNhcHR1cmluZ1BhcmFtID8gZmFsc2UgOiB1bmRlZmluZWQ7XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVFdmVudExpc3RlbmVyKGV2ZW50VGFzaykge1xuICAgICAgICB2YXIgbWV0YSA9IGV2ZW50VGFzay5kYXRhO1xuICAgICAgICBhdHRhY2hSZWdpc3RlcmVkRXZlbnQobWV0YS50YXJnZXQsIGV2ZW50VGFzaywgaXNQcmVwZW5kKTtcbiAgICAgICAgcmV0dXJuIG1ldGEuaW52b2tlQWRkRnVuYyhhZGRGblN5bWJvbCwgZXZlbnRUYXNrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuY2VsRXZlbnRMaXN0ZW5lcihldmVudFRhc2spIHtcbiAgICAgICAgdmFyIG1ldGEgPSBldmVudFRhc2suZGF0YTtcbiAgICAgICAgZmluZEV4aXN0aW5nUmVnaXN0ZXJlZFRhc2sobWV0YS50YXJnZXQsIGV2ZW50VGFzay5pbnZva2UsIG1ldGEuZXZlbnROYW1lLCBtZXRhLnVzZUNhcHR1cmluZywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBtZXRhLmludm9rZVJlbW92ZUZ1bmMocmVtb3ZlRm5TeW1ib2wsIGV2ZW50VGFzayk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiB6b25lQXdhcmVBZGRMaXN0ZW5lcihzZWxmLCBhcmdzKSB7XG4gICAgICAgIHZhciBkYXRhID0gbWV0YUNyZWF0b3Ioc2VsZiwgYXJncyk7XG4gICAgICAgIGRhdGEudXNlQ2FwdHVyaW5nID0gZGF0YS51c2VDYXB0dXJpbmcgfHwgZGVmYXVsdFVzZUNhcHR1cmluZztcbiAgICAgICAgLy8gLSBJbnNpZGUgYSBXZWIgV29ya2VyLCBgdGhpc2AgaXMgdW5kZWZpbmVkLCB0aGUgY29udGV4dCBpcyBgZ2xvYmFsYFxuICAgICAgICAvLyAtIFdoZW4gYGFkZEV2ZW50TGlzdGVuZXJgIGlzIGNhbGxlZCBvbiB0aGUgZ2xvYmFsIGNvbnRleHQgaW4gc3RyaWN0IG1vZGUsIGB0aGlzYCBpcyB1bmRlZmluZWRcbiAgICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL3pvbmUuanMvaXNzdWVzLzE5MFxuICAgICAgICB2YXIgZGVsZWdhdGUgPSBudWxsO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEuaGFuZGxlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBkZWxlZ2F0ZSA9IGRhdGEuaGFuZGxlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLmhhbmRsZXIgJiYgZGF0YS5oYW5kbGVyLmhhbmRsZUV2ZW50KSB7XG4gICAgICAgICAgICBkZWxlZ2F0ZSA9IGZ1bmN0aW9uIChldmVudCkgeyByZXR1cm4gZGF0YS5oYW5kbGVyLmhhbmRsZUV2ZW50KGV2ZW50KTsgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsaWRab25lSGFuZGxlciA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gSW4gY3Jvc3Mgc2l0ZSBjb250ZXh0cyAoc3VjaCBhcyBXZWJEcml2ZXIgZnJhbWV3b3JrcyBsaWtlIFNlbGVuaXVtKSxcbiAgICAgICAgICAgIC8vIGFjY2Vzc2luZyB0aGUgaGFuZGxlciBvYmplY3QgaGVyZSB3aWxsIGNhdXNlIGFuIGV4Y2VwdGlvbiB0byBiZSB0aHJvd24gd2hpY2hcbiAgICAgICAgICAgIC8vIHdpbGwgZmFpbCB0ZXN0cyBwcmVtYXR1cmVseS5cbiAgICAgICAgICAgIHZhbGlkWm9uZUhhbmRsZXIgPSBkYXRhLmhhbmRsZXIgJiYgZGF0YS5oYW5kbGVyLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uV3JhcHBlcl0nO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gUmV0dXJuaW5nIG5vdGhpbmcgaGVyZSBpcyBmaW5lLCBiZWNhdXNlIG9iamVjdHMgaW4gYSBjcm9zcy1zaXRlIGNvbnRleHQgYXJlIHVudXNhYmxlXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWdub3JlIHNwZWNpYWwgbGlzdGVuZXJzIG9mIElFMTEgJiBFZGdlIGRldiB0b29scywgc2VlXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL3pvbmUuanMvaXNzdWVzLzE1MFxuICAgICAgICBpZiAoIWRlbGVnYXRlIHx8IHZhbGlkWm9uZUhhbmRsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLmludm9rZUFkZEZ1bmMoYWRkRm5TeW1ib2wsIGRhdGEuaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICAgICAgICAgIHZhciBldmVudFRhc2sgPSBmaW5kRXhpc3RpbmdSZWdpc3RlcmVkVGFzayhkYXRhLnRhcmdldCwgZGF0YS5oYW5kbGVyLCBkYXRhLmV2ZW50TmFtZSwgZGF0YS51c2VDYXB0dXJpbmcsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChldmVudFRhc2spIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBhbHJlYWR5IHJlZ2lzdGVyZWQsIHNvIHRoaXMgd2lsbCBoYXZlIG5vb3AuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuaW52b2tlQWRkRnVuYyhhZGRGblN5bWJvbCwgZXZlbnRUYXNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgem9uZSA9IFpvbmUuY3VycmVudDtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGRhdGEudGFyZ2V0LmNvbnN0cnVjdG9yWyduYW1lJ10gKyAnLicgKyBhZGRGbk5hbWUgKyAnOicgKyBkYXRhLmV2ZW50TmFtZTtcbiAgICAgICAgem9uZS5zY2hlZHVsZUV2ZW50VGFzayhzb3VyY2UsIGRlbGVnYXRlLCBkYXRhLCBzY2hlZHVsZUV2ZW50TGlzdGVuZXIsIGNhbmNlbEV2ZW50TGlzdGVuZXIpO1xuICAgIH07XG59XG5mdW5jdGlvbiBtYWtlWm9uZUF3YXJlUmVtb3ZlTGlzdGVuZXIoZm5OYW1lLCB1c2VDYXB0dXJpbmdQYXJhbSwgbWV0YUNyZWF0b3IpIHtcbiAgICBpZiAodXNlQ2FwdHVyaW5nUGFyYW0gPT09IHZvaWQgMCkgeyB1c2VDYXB0dXJpbmdQYXJhbSA9IHRydWU7IH1cbiAgICBpZiAobWV0YUNyZWF0b3IgPT09IHZvaWQgMCkgeyBtZXRhQ3JlYXRvciA9IGRlZmF1bHRMaXN0ZW5lck1ldGFDcmVhdG9yOyB9XG4gICAgdmFyIHN5bWJvbCA9IHpvbmVTeW1ib2woZm5OYW1lKTtcbiAgICB2YXIgZGVmYXVsdFVzZUNhcHR1cmluZyA9IHVzZUNhcHR1cmluZ1BhcmFtID8gZmFsc2UgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHpvbmVBd2FyZVJlbW92ZUxpc3RlbmVyKHNlbGYsIGFyZ3MpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBtZXRhQ3JlYXRvcihzZWxmLCBhcmdzKTtcbiAgICAgICAgZGF0YS51c2VDYXB0dXJpbmcgPSBkYXRhLnVzZUNhcHR1cmluZyB8fCBkZWZhdWx0VXNlQ2FwdHVyaW5nO1xuICAgICAgICAvLyAtIEluc2lkZSBhIFdlYiBXb3JrZXIsIGB0aGlzYCBpcyB1bmRlZmluZWQsIHRoZSBjb250ZXh0IGlzIGBnbG9iYWxgXG4gICAgICAgIC8vIC0gV2hlbiBgYWRkRXZlbnRMaXN0ZW5lcmAgaXMgY2FsbGVkIG9uIHRoZSBnbG9iYWwgY29udGV4dCBpbiBzdHJpY3QgbW9kZSwgYHRoaXNgIGlzIHVuZGVmaW5lZFxuICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvem9uZS5qcy9pc3N1ZXMvMTkwXG4gICAgICAgIHZhciBldmVudFRhc2sgPSBmaW5kRXhpc3RpbmdSZWdpc3RlcmVkVGFzayhkYXRhLnRhcmdldCwgZGF0YS5oYW5kbGVyLCBkYXRhLmV2ZW50TmFtZSwgZGF0YS51c2VDYXB0dXJpbmcsIHRydWUpO1xuICAgICAgICBpZiAoZXZlbnRUYXNrKSB7XG4gICAgICAgICAgICBldmVudFRhc2suem9uZS5jYW5jZWxUYXNrKGV2ZW50VGFzayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRhLmludm9rZVJlbW92ZUZ1bmMoc3ltYm9sLCBkYXRhLmhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuXG52YXIgem9uZUF3YXJlQWRkRXZlbnRMaXN0ZW5lciA9IG1ha2Vab25lQXdhcmVBZGRMaXN0ZW5lcihBRERfRVZFTlRfTElTVEVORVIsIFJFTU9WRV9FVkVOVF9MSVNURU5FUik7XG52YXIgem9uZUF3YXJlUmVtb3ZlRXZlbnRMaXN0ZW5lciA9IG1ha2Vab25lQXdhcmVSZW1vdmVMaXN0ZW5lcihSRU1PVkVfRVZFTlRfTElTVEVORVIpO1xuZnVuY3Rpb24gcGF0Y2hFdmVudFRhcmdldE1ldGhvZHMob2JqLCBhZGRGbk5hbWUsIHJlbW92ZUZuTmFtZSwgbWV0YUNyZWF0b3IpIHtcbiAgICBpZiAoYWRkRm5OYW1lID09PSB2b2lkIDApIHsgYWRkRm5OYW1lID0gQUREX0VWRU5UX0xJU1RFTkVSOyB9XG4gICAgaWYgKHJlbW92ZUZuTmFtZSA9PT0gdm9pZCAwKSB7IHJlbW92ZUZuTmFtZSA9IFJFTU9WRV9FVkVOVF9MSVNURU5FUjsgfVxuICAgIGlmIChtZXRhQ3JlYXRvciA9PT0gdm9pZCAwKSB7IG1ldGFDcmVhdG9yID0gZGVmYXVsdExpc3RlbmVyTWV0YUNyZWF0b3I7IH1cbiAgICBpZiAob2JqICYmIG9ialthZGRGbk5hbWVdKSB7XG4gICAgICAgIHBhdGNoTWV0aG9kKG9iaiwgYWRkRm5OYW1lLCBmdW5jdGlvbiAoKSB7IHJldHVybiBtYWtlWm9uZUF3YXJlQWRkTGlzdGVuZXIoYWRkRm5OYW1lLCByZW1vdmVGbk5hbWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgbWV0YUNyZWF0b3IpOyB9KTtcbiAgICAgICAgcGF0Y2hNZXRob2Qob2JqLCByZW1vdmVGbk5hbWUsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ha2Vab25lQXdhcmVSZW1vdmVMaXN0ZW5lcihyZW1vdmVGbk5hbWUsIHRydWUsIG1ldGFDcmVhdG9yKTsgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbnZhciBvcmlnaW5hbEluc3RhbmNlS2V5ID0gem9uZVN5bWJvbCgnb3JpZ2luYWxJbnN0YW5jZScpO1xuLy8gd3JhcCBzb21lIG5hdGl2ZSBBUEkgb24gYHdpbmRvd2BcbmZ1bmN0aW9uIHBhdGNoQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgdmFyIE9yaWdpbmFsQ2xhc3MgPSBfZ2xvYmFsJDFbY2xhc3NOYW1lXTtcbiAgICBpZiAoIU9yaWdpbmFsQ2xhc3MpXG4gICAgICAgIHJldHVybjtcbiAgICBfZ2xvYmFsJDFbY2xhc3NOYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGEgPSBiaW5kQXJndW1lbnRzKGFyZ3VtZW50cywgY2xhc3NOYW1lKTtcbiAgICAgICAgc3dpdGNoIChhLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHRoaXNbb3JpZ2luYWxJbnN0YW5jZUtleV0gPSBuZXcgT3JpZ2luYWxDbGFzcygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHRoaXNbb3JpZ2luYWxJbnN0YW5jZUtleV0gPSBuZXcgT3JpZ2luYWxDbGFzcyhhWzBdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICB0aGlzW29yaWdpbmFsSW5zdGFuY2VLZXldID0gbmV3IE9yaWdpbmFsQ2xhc3MoYVswXSwgYVsxXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgdGhpc1tvcmlnaW5hbEluc3RhbmNlS2V5XSA9IG5ldyBPcmlnaW5hbENsYXNzKGFbMF0sIGFbMV0sIGFbMl0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIHRoaXNbb3JpZ2luYWxJbnN0YW5jZUtleV0gPSBuZXcgT3JpZ2luYWxDbGFzcyhhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmcgbGlzdCB0b28gbG9uZy4nKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IE9yaWdpbmFsQ2xhc3MoZnVuY3Rpb24gKCkgeyB9KTtcbiAgICB2YXIgcHJvcDtcbiAgICBmb3IgKHByb3AgaW4gaW5zdGFuY2UpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NzIxXG4gICAgICAgIGlmIChjbGFzc05hbWUgPT09ICdYTUxIdHRwUmVxdWVzdCcgJiYgcHJvcCA9PT0gJ3Jlc3BvbnNlQmxvYicpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlW3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgX2dsb2JhbCQxW2NsYXNzTmFtZV0ucHJvdG90eXBlW3Byb3BdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tvcmlnaW5hbEluc3RhbmNlS2V5XVtwcm9wXS5hcHBseSh0aGlzW29yaWdpbmFsSW5zdGFuY2VLZXldLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2dsb2JhbCQxW2NsYXNzTmFtZV0ucHJvdG90eXBlLCBwcm9wLCB7XG4gICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tvcmlnaW5hbEluc3RhbmNlS2V5XVtwcm9wXSA9IFpvbmUuY3VycmVudC53cmFwKGZuLCBjbGFzc05hbWUgKyAnLicgKyBwcm9wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbb3JpZ2luYWxJbnN0YW5jZUtleV1bcHJvcF0gPSBmbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tvcmlnaW5hbEluc3RhbmNlS2V5XVtwcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KHByb3ApKTtcbiAgICB9XG4gICAgZm9yIChwcm9wIGluIE9yaWdpbmFsQ2xhc3MpIHtcbiAgICAgICAgaWYgKHByb3AgIT09ICdwcm90b3R5cGUnICYmIE9yaWdpbmFsQ2xhc3MuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICAgIF9nbG9iYWwkMVtjbGFzc05hbWVdW3Byb3BdID0gT3JpZ2luYWxDbGFzc1twcm9wXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlTmFtZWRGbihuYW1lLCBkZWxlZ2F0ZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoRnVuY3Rpb24oJ2YnLCBcInJldHVybiBmdW5jdGlvbiBcIiArIG5hbWUgKyBcIigpe3JldHVybiBmKHRoaXMsIGFyZ3VtZW50cyl9XCIpKShkZWxlZ2F0ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBpZiB3ZSBmYWlsLCB3ZSBtdXN0IGJlIENTUCwganVzdCByZXR1cm4gZGVsZWdhdGUuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXRjaE1ldGhvZCh0YXJnZXQsIG5hbWUsIHBhdGNoRm4pIHtcbiAgICB2YXIgcHJvdG8gPSB0YXJnZXQ7XG4gICAgd2hpbGUgKHByb3RvICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gICAgfVxuICAgIGlmICghcHJvdG8gJiYgdGFyZ2V0W25hbWVdKSB7XG4gICAgICAgIC8vIHNvbWVob3cgd2UgZGlkIG5vdCBmaW5kIGl0LCBidXQgd2UgY2FuIHNlZSBpdC4gVGhpcyBoYXBwZW5zIG9uIElFIGZvciBXaW5kb3cgcHJvcGVydGllcy5cbiAgICAgICAgcHJvdG8gPSB0YXJnZXQ7XG4gICAgfVxuICAgIHZhciBkZWxlZ2F0ZU5hbWUgPSB6b25lU3ltYm9sKG5hbWUpO1xuICAgIHZhciBkZWxlZ2F0ZTtcbiAgICBpZiAocHJvdG8gJiYgIShkZWxlZ2F0ZSA9IHByb3RvW2RlbGVnYXRlTmFtZV0pKSB7XG4gICAgICAgIGRlbGVnYXRlID0gcHJvdG9bZGVsZWdhdGVOYW1lXSA9IHByb3RvW25hbWVdO1xuICAgICAgICBwcm90b1tuYW1lXSA9IGNyZWF0ZU5hbWVkRm4obmFtZSwgcGF0Y2hGbihkZWxlZ2F0ZSwgZGVsZWdhdGVOYW1lLCBuYW1lKSk7XG4gICAgfVxuICAgIHJldHVybiBkZWxlZ2F0ZTtcbn1cbi8vIFRPRE86IEBKaWFMaVBhc3Npb24sIHN1cHBvcnQgY2FuY2VsIHRhc2sgbGF0ZXIgaWYgbmVjZXNzYXJ5XG5cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmZ1bmN0aW9uIHBhdGNoVGltZXIod2luZG93LCBzZXROYW1lLCBjYW5jZWxOYW1lLCBuYW1lU3VmZml4KSB7XG4gICAgdmFyIHNldE5hdGl2ZSA9IG51bGw7XG4gICAgdmFyIGNsZWFyTmF0aXZlID0gbnVsbDtcbiAgICBzZXROYW1lICs9IG5hbWVTdWZmaXg7XG4gICAgY2FuY2VsTmFtZSArPSBuYW1lU3VmZml4O1xuICAgIHZhciB0YXNrc0J5SGFuZGxlSWQgPSB7fTtcbiAgICBmdW5jdGlvbiBzY2hlZHVsZVRhc2sodGFzaykge1xuICAgICAgICB2YXIgZGF0YSA9IHRhc2suZGF0YTtcbiAgICAgICAgZGF0YS5hcmdzWzBdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGFzay5pbnZva2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0YXNrc0J5SGFuZGxlSWRbZGF0YS5oYW5kbGVJZF07XG4gICAgICAgIH07XG4gICAgICAgIGRhdGEuaGFuZGxlSWQgPSBzZXROYXRpdmUuYXBwbHkod2luZG93LCBkYXRhLmFyZ3MpO1xuICAgICAgICB0YXNrc0J5SGFuZGxlSWRbZGF0YS5oYW5kbGVJZF0gPSB0YXNrO1xuICAgICAgICByZXR1cm4gdGFzaztcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xlYXJUYXNrKHRhc2spIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVJZFt0YXNrLmRhdGEuaGFuZGxlSWRdO1xuICAgICAgICByZXR1cm4gY2xlYXJOYXRpdmUodGFzay5kYXRhLmhhbmRsZUlkKTtcbiAgICB9XG4gICAgc2V0TmF0aXZlID1cbiAgICAgICAgcGF0Y2hNZXRob2Qod2luZG93LCBzZXROYW1lLCBmdW5jdGlvbiAoZGVsZWdhdGUpIHsgcmV0dXJuIGZ1bmN0aW9uIChzZWxmLCBhcmdzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB2YXIgem9uZSA9IFpvbmUuY3VycmVudDtcbiAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlSWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGlzUGVyaW9kaWM6IG5hbWVTdWZmaXggPT09ICdJbnRlcnZhbCcsXG4gICAgICAgICAgICAgICAgICAgIGRlbGF5OiAobmFtZVN1ZmZpeCA9PT0gJ1RpbWVvdXQnIHx8IG5hbWVTdWZmaXggPT09ICdJbnRlcnZhbCcpID8gYXJnc1sxXSB8fCAwIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJnc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdmFyIHRhc2sgPSB6b25lLnNjaGVkdWxlTWFjcm9UYXNrKHNldE5hbWUsIGFyZ3NbMF0sIG9wdGlvbnMsIHNjaGVkdWxlVGFzaywgY2xlYXJUYXNrKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2s7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE5vZGUuanMgbXVzdCBhZGRpdGlvbmFsbHkgc3VwcG9ydCB0aGUgcmVmIGFuZCB1bnJlZiBmdW5jdGlvbnMuXG4gICAgICAgICAgICAgICAgdmFyIGhhbmRsZSA9IHRhc2suZGF0YS5oYW5kbGVJZDtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayB3aGV0aGVyIGhhbmRsZSBpcyBudWxsLCBiZWNhdXNlIHNvbWUgcG9seWZpbGwgb3IgYnJvd3NlclxuICAgICAgICAgICAgICAgIC8vIG1heSByZXR1cm4gdW5kZWZpbmVkIGZyb20gc2V0VGltZW91dC9zZXRJbnRlcnZhbC9zZXRJbW1lZGlhdGUvcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZSAmJiBoYW5kbGUucmVmICYmIGhhbmRsZS51bnJlZiAmJiB0eXBlb2YgaGFuZGxlLnJlZiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaGFuZGxlLnVucmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sucmVmID0gaGFuZGxlLnJlZi5iaW5kKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIHRhc2sudW5yZWYgPSBoYW5kbGUudW5yZWYuYmluZChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGFzaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNhdXNlIGFuIGVycm9yIGJ5IGNhbGxpbmcgaXQgZGlyZWN0bHkuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmFwcGx5KHdpbmRvdywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07IH0pO1xuICAgIGNsZWFyTmF0aXZlID1cbiAgICAgICAgcGF0Y2hNZXRob2Qod2luZG93LCBjYW5jZWxOYW1lLCBmdW5jdGlvbiAoZGVsZWdhdGUpIHsgcmV0dXJuIGZ1bmN0aW9uIChzZWxmLCBhcmdzKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHR5cGVvZiBhcmdzWzBdID09PSAnbnVtYmVyJyA/IHRhc2tzQnlIYW5kbGVJZFthcmdzWzBdXSA6IGFyZ3NbMF07XG4gICAgICAgICAgICBpZiAodGFzayAmJiB0eXBlb2YgdGFzay50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmICh0YXNrLnN0YXRlICE9PSAnbm90U2NoZWR1bGVkJyAmJlxuICAgICAgICAgICAgICAgICAgICAodGFzay5jYW5jZWxGbiAmJiB0YXNrLmRhdGEuaXNQZXJpb2RpYyB8fCB0YXNrLnJ1bkNvdW50ID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3QgY2FuY2VsIGFscmVhZHkgY2FuY2VsZWQgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIHRhc2suem9uZS5jYW5jZWxUYXNrKHRhc2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNhdXNlIGFuIGVycm9yIGJ5IGNhbGxpbmcgaXQgZGlyZWN0bHkuXG4gICAgICAgICAgICAgICAgZGVsZWdhdGUuYXBwbHkod2luZG93LCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTsgfSk7XG59XG5cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8qXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgQ2hyb21lIGFuZCBDaHJvbWUgbW9iaWxlLCB0byBlbmFibGVcbiAqIHRoaW5ncyBsaWtlIHJlZGVmaW5pbmcgYGNyZWF0ZWRDYWxsYmFja2Agb24gYW4gZWxlbWVudC5cbiAqL1xudmFyIF9kZWZpbmVQcm9wZXJ0eSA9IE9iamVjdFt6b25lU3ltYm9sKCdkZWZpbmVQcm9wZXJ0eScpXSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0W3pvbmVTeW1ib2woJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicpXSA9XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcbnZhciB1bmNvbmZpZ3VyYWJsZXNLZXkgPSB6b25lU3ltYm9sKCd1bmNvbmZpZ3VyYWJsZXMnKTtcbmZ1bmN0aW9uIHByb3BlcnR5UGF0Y2goKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgZGVzYykge1xuICAgICAgICBpZiAoaXNVbmNvbmZpZ3VyYWJsZShvYmosIHByb3ApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXNzaWduIHRvIHJlYWQgb25seSBwcm9wZXJ0eSBcXCcnICsgcHJvcCArICdcXCcgb2YgJyArIG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9yaWdpbmFsQ29uZmlndXJhYmxlRmxhZyA9IGRlc2MuY29uZmlndXJhYmxlO1xuICAgICAgICBpZiAocHJvcCAhPT0gJ3Byb3RvdHlwZScpIHtcbiAgICAgICAgICAgIGRlc2MgPSByZXdyaXRlRGVzY3JpcHRvcihvYmosIHByb3AsIGRlc2MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdHJ5RGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCBkZXNjLCBvcmlnaW5hbENvbmZpZ3VyYWJsZUZsYWcpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqLCBwcm9wcykge1xuICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwgcHJvcHNbcHJvcF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICAgIE9iamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAob2JqLCBwcm90bykge1xuICAgICAgICBpZiAodHlwZW9mIHByb3RvID09PSAnb2JqZWN0JyAmJiAhT2JqZWN0LmlzRnJvemVuKHByb3RvKSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvdG8pLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgICAgICBwcm90b1twcm9wXSA9IHJld3JpdGVEZXNjcmlwdG9yKG9iaiwgcHJvcCwgcHJvdG9bcHJvcF0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9jcmVhdGUob2JqLCBwcm90byk7XG4gICAgfTtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gKG9iaiwgcHJvcCkge1xuICAgICAgICB2YXIgZGVzYyA9IF9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTtcbiAgICAgICAgaWYgKGlzVW5jb25maWd1cmFibGUob2JqLCBwcm9wKSkge1xuICAgICAgICAgICAgZGVzYy5jb25maWd1cmFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzYztcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBfcmVkZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIGRlc2MpIHtcbiAgICB2YXIgb3JpZ2luYWxDb25maWd1cmFibGVGbGFnID0gZGVzYy5jb25maWd1cmFibGU7XG4gICAgZGVzYyA9IHJld3JpdGVEZXNjcmlwdG9yKG9iaiwgcHJvcCwgZGVzYyk7XG4gICAgcmV0dXJuIF90cnlEZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIGRlc2MsIG9yaWdpbmFsQ29uZmlndXJhYmxlRmxhZyk7XG59XG5cbmZ1bmN0aW9uIGlzVW5jb25maWd1cmFibGUob2JqLCBwcm9wKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmpbdW5jb25maWd1cmFibGVzS2V5XSAmJiBvYmpbdW5jb25maWd1cmFibGVzS2V5XVtwcm9wXTtcbn1cbmZ1bmN0aW9uIHJld3JpdGVEZXNjcmlwdG9yKG9iaiwgcHJvcCwgZGVzYykge1xuICAgIGRlc2MuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoIWRlc2MuY29uZmlndXJhYmxlKSB7XG4gICAgICAgIGlmICghb2JqW3VuY29uZmlndXJhYmxlc0tleV0pIHtcbiAgICAgICAgICAgIF9kZWZpbmVQcm9wZXJ0eShvYmosIHVuY29uZmlndXJhYmxlc0tleSwgeyB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IHt9IH0pO1xuICAgICAgICB9XG4gICAgICAgIG9ialt1bmNvbmZpZ3VyYWJsZXNLZXldW3Byb3BdID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRlc2M7XG59XG5mdW5jdGlvbiBfdHJ5RGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCBkZXNjLCBvcmlnaW5hbENvbmZpZ3VyYWJsZUZsYWcpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwgZGVzYyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZXJyb3JzLCB3aGVuIHRoZSBjb25maWd1cmFibGUgZmxhZyB3YXMgbGlrZWx5IHNldCBieSByZXdyaXRlRGVzY3JpcHRvcigpLCBsZXQnc1xuICAgICAgICAgICAgLy8gcmV0cnkgd2l0aCB0aGUgb3JpZ2luYWwgZmxhZyB2YWx1ZVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW5hbENvbmZpZ3VyYWJsZUZsYWcgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGVzYy5jb25maWd1cmFibGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZXNjLmNvbmZpZ3VyYWJsZSA9IG9yaWdpbmFsQ29uZmlndXJhYmxlRmxhZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIGRlc2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlc2NKc29uID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkZXNjSnNvbiA9IEpTT04uc3RyaW5naWZ5KGRlc2MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY0pzb24gPSBkZXNjSnNvbi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICdcIiArIHByb3AgKyBcIicgd2l0aCBkZXNjcmlwdG9yICdcIiArIGRlc2NKc29uICsgXCInIG9uIG9iamVjdCAnXCIgKyBvYmogKyBcIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVwOiBcIiArIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG52YXIgV1RGX0lTU1VFXzU1NSA9ICdBbmNob3IsQXJlYSxBdWRpbyxCUixCYXNlLEJhc2VGb250LEJvZHksQnV0dG9uLENhbnZhcyxDb250ZW50LERMaXN0LERpcmVjdG9yeSxEaXYsRW1iZWQsRmllbGRTZXQsRm9udCxGb3JtLEZyYW1lLEZyYW1lU2V0LEhSLEhlYWQsSGVhZGluZyxIdG1sLElGcmFtZSxJbWFnZSxJbnB1dCxLZXlnZW4sTEksTGFiZWwsTGVnZW5kLExpbmssTWFwLE1hcnF1ZWUsTWVkaWEsTWVudSxNZXRhLE1ldGVyLE1vZCxPTGlzdCxPYmplY3QsT3B0R3JvdXAsT3B0aW9uLE91dHB1dCxQYXJhZ3JhcGgsUHJlLFByb2dyZXNzLFF1b3RlLFNjcmlwdCxTZWxlY3QsU291cmNlLFNwYW4sU3R5bGUsVGFibGVDYXB0aW9uLFRhYmxlQ2VsbCxUYWJsZUNvbCxUYWJsZSxUYWJsZVJvdyxUYWJsZVNlY3Rpb24sVGV4dEFyZWEsVGl0bGUsVHJhY2ssVUxpc3QsVW5rbm93bixWaWRlbyc7XG52YXIgTk9fRVZFTlRfVEFSR0VUID0gJ0FwcGxpY2F0aW9uQ2FjaGUsRXZlbnRTb3VyY2UsRmlsZVJlYWRlcixJbnB1dE1ldGhvZENvbnRleHQsTWVkaWFDb250cm9sbGVyLE1lc3NhZ2VQb3J0LE5vZGUsUGVyZm9ybWFuY2UsU1ZHRWxlbWVudEluc3RhbmNlLFNoYXJlZFdvcmtlcixUZXh0VHJhY2ssVGV4dFRyYWNrQ3VlLFRleHRUcmFja0xpc3QsV2ViS2l0TmFtZWRGbG93LFdpbmRvdyxXb3JrZXIsV29ya2VyR2xvYmFsU2NvcGUsWE1MSHR0cFJlcXVlc3QsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCxYTUxIdHRwUmVxdWVzdFVwbG9hZCxJREJSZXF1ZXN0LElEQk9wZW5EQlJlcXVlc3QsSURCRGF0YWJhc2UsSURCVHJhbnNhY3Rpb24sSURCQ3Vyc29yLERCSW5kZXgsV2ViU29ja2V0J1xuICAgIC5zcGxpdCgnLCcpO1xudmFyIEVWRU5UX1RBUkdFVCA9ICdFdmVudFRhcmdldCc7XG5mdW5jdGlvbiBldmVudFRhcmdldFBhdGNoKF9nbG9iYWwpIHtcbiAgICB2YXIgYXBpcyA9IFtdO1xuICAgIHZhciBpc1d0ZiA9IF9nbG9iYWxbJ3d0ZiddO1xuICAgIGlmIChpc1d0Zikge1xuICAgICAgICAvLyBXb3JrYXJvdW5kIGZvcjogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS90cmFjaW5nLWZyYW1ld29yay9pc3N1ZXMvNTU1XG4gICAgICAgIGFwaXMgPSBXVEZfSVNTVUVfNTU1LnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiAnSFRNTCcgKyB2ICsgJ0VsZW1lbnQnOyB9KS5jb25jYXQoTk9fRVZFTlRfVEFSR0VUKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoX2dsb2JhbFtFVkVOVF9UQVJHRVRdKSB7XG4gICAgICAgIGFwaXMucHVzaChFVkVOVF9UQVJHRVQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gTm90ZTogRXZlbnRUYXJnZXQgaXMgbm90IGF2YWlsYWJsZSBpbiBhbGwgYnJvd3NlcnMsXG4gICAgICAgIC8vIGlmIGl0J3Mgbm90IGF2YWlsYWJsZSwgd2UgaW5zdGVhZCBwYXRjaCB0aGUgQVBJcyBpbiB0aGUgSURMIHRoYXQgaW5oZXJpdCBmcm9tIEV2ZW50VGFyZ2V0XG4gICAgICAgIGFwaXMgPSBOT19FVkVOVF9UQVJHRVQ7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXBpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdHlwZSA9IF9nbG9iYWxbYXBpc1tpXV07XG4gICAgICAgIHBhdGNoRXZlbnRUYXJnZXRNZXRob2RzKHR5cGUgJiYgdHlwZS5wcm90b3R5cGUpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuLy8gd2UgaGF2ZSB0byBwYXRjaCB0aGUgaW5zdGFuY2Ugc2luY2UgdGhlIHByb3RvIGlzIG5vbi1jb25maWd1cmFibGVcbmZ1bmN0aW9uIGFwcGx5KF9nbG9iYWwpIHtcbiAgICB2YXIgV1MgPSBfZ2xvYmFsLldlYlNvY2tldDtcbiAgICAvLyBPbiBTYWZhcmkgd2luZG93LkV2ZW50VGFyZ2V0IGRvZXNuJ3QgZXhpc3Qgc28gbmVlZCB0byBwYXRjaCBXUyBhZGQvcmVtb3ZlRXZlbnRMaXN0ZW5lclxuICAgIC8vIE9uIG9sZGVyIENocm9tZSwgbm8gbmVlZCBzaW5jZSBFdmVudFRhcmdldCB3YXMgYWxyZWFkeSBwYXRjaGVkXG4gICAgaWYgKCFfZ2xvYmFsLkV2ZW50VGFyZ2V0KSB7XG4gICAgICAgIHBhdGNoRXZlbnRUYXJnZXRNZXRob2RzKFdTLnByb3RvdHlwZSk7XG4gICAgfVxuICAgIF9nbG9iYWwuV2ViU29ja2V0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgdmFyIHNvY2tldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gbmV3IFdTKGEsIGIpIDogbmV3IFdTKGEpO1xuICAgICAgICB2YXIgcHJveHlTb2NrZXQ7XG4gICAgICAgIC8vIFNhZmFyaSA3LjAgaGFzIG5vbi1jb25maWd1cmFibGUgb3duICdvbm1lc3NhZ2UnIGFuZCBmcmllbmRzIHByb3BlcnRpZXMgb24gdGhlIHNvY2tldCBpbnN0YW5jZVxuICAgICAgICB2YXIgb25tZXNzYWdlRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc29ja2V0LCAnb25tZXNzYWdlJyk7XG4gICAgICAgIGlmIChvbm1lc3NhZ2VEZXNjICYmIG9ubWVzc2FnZURlc2MuY29uZmlndXJhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcHJveHlTb2NrZXQgPSBPYmplY3QuY3JlYXRlKHNvY2tldCk7XG4gICAgICAgICAgICBbJ2FkZEV2ZW50TGlzdGVuZXInLCAncmVtb3ZlRXZlbnRMaXN0ZW5lcicsICdzZW5kJywgJ2Nsb3NlJ10uZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICAgICAgICAgICAgICBwcm94eVNvY2tldFtwcm9wTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzb2NrZXRbcHJvcE5hbWVdLmFwcGx5KHNvY2tldCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyB3ZSBjYW4gcGF0Y2ggdGhlIHJlYWwgc29ja2V0XG4gICAgICAgICAgICBwcm94eVNvY2tldCA9IHNvY2tldDtcbiAgICAgICAgfVxuICAgICAgICBwYXRjaE9uUHJvcGVydGllcyhwcm94eVNvY2tldCwgWydjbG9zZScsICdlcnJvcicsICdtZXNzYWdlJywgJ29wZW4nXSk7XG4gICAgICAgIHJldHVybiBwcm94eVNvY2tldDtcbiAgICB9O1xuICAgIGZvciAodmFyIHByb3AgaW4gV1MpIHtcbiAgICAgICAgX2dsb2JhbC5XZWJTb2NrZXRbcHJvcF0gPSBXU1twcm9wXTtcbiAgICB9XG59XG5cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbnZhciBldmVudE5hbWVzID0gJ2NvcHkgY3V0IHBhc3RlIGFib3J0IGJsdXIgZm9jdXMgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBjaGFuZ2UgY2xpY2sgY29udGV4dG1lbnUgZGJsY2xpY2sgZHJhZyBkcmFnZW5kIGRyYWdlbnRlciBkcmFnbGVhdmUgZHJhZ292ZXIgZHJhZ3N0YXJ0IGRyb3AgZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmRlZCBpbnB1dCBpbnZhbGlkIGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbG9hZCBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBtZXNzYWdlIG1vdXNlZG93biBtb3VzZWVudGVyIG1vdXNlbGVhdmUgbW91c2Vtb3ZlIG1vdXNlb3V0IG1vdXNlb3ZlciBtb3VzZXVwIHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHJlc2V0IHNjcm9sbCBzZWVrZWQgc2Vla2luZyBzZWxlY3Qgc2hvdyBzdGFsbGVkIHN1Ym1pdCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmcgbW96ZnVsbHNjcmVlbmNoYW5nZSBtb3pmdWxsc2NyZWVuZXJyb3IgbW96cG9pbnRlcmxvY2tjaGFuZ2UgbW96cG9pbnRlcmxvY2tlcnJvciBlcnJvciB3ZWJnbGNvbnRleHRyZXN0b3JlZCB3ZWJnbGNvbnRleHRsb3N0IHdlYmdsY29udGV4dGNyZWF0aW9uZXJyb3InXG4gICAgLnNwbGl0KCcgJyk7XG5mdW5jdGlvbiBwcm9wZXJ0eURlc2NyaXB0b3JQYXRjaChfZ2xvYmFsKSB7XG4gICAgaWYgKGlzTm9kZSAmJiAhaXNNaXgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgc3VwcG9ydHNXZWJTb2NrZXQgPSB0eXBlb2YgV2ViU29ja2V0ICE9PSAndW5kZWZpbmVkJztcbiAgICBpZiAoY2FuUGF0Y2hWaWFQcm9wZXJ0eURlc2NyaXB0b3IoKSkge1xuICAgICAgICAvLyBmb3IgYnJvd3NlcnMgdGhhdCB3ZSBjYW4gcGF0Y2ggdGhlIGRlc2NyaXB0b3I6ICBDaHJvbWUgJiBGaXJlZm94XG4gICAgICAgIGlmIChpc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHBhdGNoT25Qcm9wZXJ0aWVzKEhUTUxFbGVtZW50LnByb3RvdHlwZSwgZXZlbnROYW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0Y2hPblByb3BlcnRpZXMoWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLCBudWxsKTtcbiAgICAgICAgaWYgKHR5cGVvZiBJREJJbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHBhdGNoT25Qcm9wZXJ0aWVzKElEQkluZGV4LnByb3RvdHlwZSwgbnVsbCk7XG4gICAgICAgICAgICBwYXRjaE9uUHJvcGVydGllcyhJREJSZXF1ZXN0LnByb3RvdHlwZSwgbnVsbCk7XG4gICAgICAgICAgICBwYXRjaE9uUHJvcGVydGllcyhJREJPcGVuREJSZXF1ZXN0LnByb3RvdHlwZSwgbnVsbCk7XG4gICAgICAgICAgICBwYXRjaE9uUHJvcGVydGllcyhJREJEYXRhYmFzZS5wcm90b3R5cGUsIG51bGwpO1xuICAgICAgICAgICAgcGF0Y2hPblByb3BlcnRpZXMoSURCVHJhbnNhY3Rpb24ucHJvdG90eXBlLCBudWxsKTtcbiAgICAgICAgICAgIHBhdGNoT25Qcm9wZXJ0aWVzKElEQkN1cnNvci5wcm90b3R5cGUsIG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdXBwb3J0c1dlYlNvY2tldCkge1xuICAgICAgICAgICAgcGF0Y2hPblByb3BlcnRpZXMoV2ViU29ja2V0LnByb3RvdHlwZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFNhZmFyaSwgQW5kcm9pZCBicm93c2VycyAoSmVsbHkgQmVhbilcbiAgICAgICAgcGF0Y2hWaWFDYXB0dXJpbmdBbGxUaGVFdmVudHMoKTtcbiAgICAgICAgcGF0Y2hDbGFzcygnWE1MSHR0cFJlcXVlc3QnKTtcbiAgICAgICAgaWYgKHN1cHBvcnRzV2ViU29ja2V0KSB7XG4gICAgICAgICAgICBhcHBseShfZ2xvYmFsKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNhblBhdGNoVmlhUHJvcGVydHlEZXNjcmlwdG9yKCkge1xuICAgIGlmICgoaXNCcm93c2VyIHx8IGlzTWl4KSAmJiAhT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsICdvbmNsaWNrJykgJiZcbiAgICAgICAgdHlwZW9mIEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIFdlYktpdCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MzY0XG4gICAgICAgIC8vIElETCBpbnRlcmZhY2UgYXR0cmlidXRlcyBhcmUgbm90IGNvbmZpZ3VyYWJsZVxuICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRWxlbWVudC5wcm90b3R5cGUsICdvbmNsaWNrJyk7XG4gICAgICAgIGlmIChkZXNjICYmICFkZXNjLmNvbmZpZ3VyYWJsZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHhockRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwgJ29ucmVhZHlzdGF0ZWNoYW5nZScpO1xuICAgIC8vIGFkZCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFibGUgaGVyZSBiZWNhdXNlIGluIG9wZXJhXG4gICAgLy8gYnkgZGVmYXVsdCBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub25yZWFkeXN0YXRlY2hhbmdlIGlzIHVuZGVmaW5lZFxuICAgIC8vIHdpdGhvdXQgYWRkaW5nIGVudW1lcmFibGUgYW5kIGNvbmZpZ3VyYWJsZSB3aWxsIGNhdXNlIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAgIC8vIG5vbi1jb25maWd1cmFibGVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLCAnb25yZWFkeXN0YXRlY2hhbmdlJywge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgdmFyIHJlc3VsdCA9ICEhcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZTtcbiAgICAvLyByZXN0b3JlIG9yaWdpbmFsIGRlc2NcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLCAnb25yZWFkeXN0YXRlY2hhbmdlJywgeGhyRGVzYyB8fCB7fSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmFyIHVuYm91bmRLZXkgPSB6b25lU3ltYm9sKCd1bmJvdW5kJyk7XG4vLyBXaGVuZXZlciBhbnkgZXZlbnRMaXN0ZW5lciBmaXJlcywgd2UgY2hlY2sgdGhlIGV2ZW50TGlzdGVuZXIgdGFyZ2V0IGFuZCBhbGwgcGFyZW50c1xuLy8gZm9yIGBvbndoYXRldmVyYCBwcm9wZXJ0aWVzIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB6b25lLWJvdW5kIGZ1bmN0aW9uc1xuLy8gLSBDaHJvbWUgKGZvciBub3cpXG5mdW5jdGlvbiBwYXRjaFZpYUNhcHR1cmluZ0FsbFRoZUV2ZW50cygpIHtcbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gZXZlbnROYW1lc1tpXTtcbiAgICAgICAgdmFyIG9ucHJvcGVydHkgPSAnb24nICsgcHJvcGVydHk7XG4gICAgICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihwcm9wZXJ0eSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgZWx0ID0gZXZlbnQudGFyZ2V0LCBib3VuZCwgc291cmNlO1xuICAgICAgICAgICAgaWYgKGVsdCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZSA9IGVsdC5jb25zdHJ1Y3RvclsnbmFtZSddICsgJy4nICsgb25wcm9wZXJ0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNvdXJjZSA9ICd1bmtub3duLicgKyBvbnByb3BlcnR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGVsdCkge1xuICAgICAgICAgICAgICAgIGlmIChlbHRbb25wcm9wZXJ0eV0gJiYgIWVsdFtvbnByb3BlcnR5XVt1bmJvdW5kS2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBib3VuZCA9IFpvbmUuY3VycmVudC53cmFwKGVsdFtvbnByb3BlcnR5XSwgc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgYm91bmRbdW5ib3VuZEtleV0gPSBlbHRbb25wcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgIGVsdFtvbnByb3BlcnR5XSA9IGJvdW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHQgPSBlbHQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgX2xvb3BfMShpKTtcbiAgICB9XG4gICAgXG59XG5cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyRWxlbWVudFBhdGNoKF9nbG9iYWwpIHtcbiAgICBpZiAoKCFpc0Jyb3dzZXIgJiYgIWlzTWl4KSB8fCAhKCdyZWdpc3RlckVsZW1lbnQnIGluIF9nbG9iYWwuZG9jdW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIF9yZWdpc3RlckVsZW1lbnQgPSBkb2N1bWVudC5yZWdpc3RlckVsZW1lbnQ7XG4gICAgdmFyIGNhbGxiYWNrcyA9IFsnY3JlYXRlZENhbGxiYWNrJywgJ2F0dGFjaGVkQ2FsbGJhY2snLCAnZGV0YWNoZWRDYWxsYmFjaycsICdhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2snXTtcbiAgICBkb2N1bWVudC5yZWdpc3RlckVsZW1lbnQgPSBmdW5jdGlvbiAobmFtZSwgb3B0cykge1xuICAgICAgICBpZiAob3B0cyAmJiBvcHRzLnByb3RvdHlwZSkge1xuICAgICAgICAgICAgY2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9ICdEb2N1bWVudC5yZWdpc3RlckVsZW1lbnQ6OicgKyBjYWxsYmFjaztcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvcHRzLnByb3RvdHlwZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gWm9uZS5jdXJyZW50LndyYXAoZGVzY3JpcHRvci52YWx1ZSwgc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZWRlZmluZVByb3BlcnR5KG9wdHMucHJvdG90eXBlLCBjYWxsYmFjaywgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzLnByb3RvdHlwZVtjYWxsYmFja10gPSBab25lLmN1cnJlbnQud3JhcChvcHRzLnByb3RvdHlwZVtjYWxsYmFja10sIHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAob3B0cy5wcm90b3R5cGVbY2FsbGJhY2tdKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMucHJvdG90eXBlW2NhbGxiYWNrXSA9IFpvbmUuY3VycmVudC53cmFwKG9wdHMucHJvdG90eXBlW2NhbGxiYWNrXSwgc291cmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3JlZ2lzdGVyRWxlbWVudC5hcHBseShkb2N1bWVudCwgW25hbWUsIG9wdHNdKTtcbiAgICB9O1xufVxuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG52YXIgc2V0ID0gJ3NldCc7XG52YXIgY2xlYXIgPSAnY2xlYXInO1xudmFyIGJsb2NraW5nTWV0aG9kcyA9IFsnYWxlcnQnLCAncHJvbXB0JywgJ2NvbmZpcm0nXTtcbnZhciBfZ2xvYmFsID0gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgd2luZG93IHx8IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmIHx8IGdsb2JhbDtcbnBhdGNoVGltZXIoX2dsb2JhbCwgc2V0LCBjbGVhciwgJ1RpbWVvdXQnKTtcbnBhdGNoVGltZXIoX2dsb2JhbCwgc2V0LCBjbGVhciwgJ0ludGVydmFsJyk7XG5wYXRjaFRpbWVyKF9nbG9iYWwsIHNldCwgY2xlYXIsICdJbW1lZGlhdGUnKTtcbnBhdGNoVGltZXIoX2dsb2JhbCwgJ3JlcXVlc3QnLCAnY2FuY2VsJywgJ0FuaW1hdGlvbkZyYW1lJyk7XG5wYXRjaFRpbWVyKF9nbG9iYWwsICdtb3pSZXF1ZXN0JywgJ21vekNhbmNlbCcsICdBbmltYXRpb25GcmFtZScpO1xucGF0Y2hUaW1lcihfZ2xvYmFsLCAnd2Via2l0UmVxdWVzdCcsICd3ZWJraXRDYW5jZWwnLCAnQW5pbWF0aW9uRnJhbWUnKTtcbmZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tpbmdNZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5hbWVfMSA9IGJsb2NraW5nTWV0aG9kc1tpXTtcbiAgICBwYXRjaE1ldGhvZChfZ2xvYmFsLCBuYW1lXzEsIGZ1bmN0aW9uIChkZWxlZ2F0ZSwgc3ltYm9sLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocywgYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIFpvbmUuY3VycmVudC5ydW4oZGVsZWdhdGUsIF9nbG9iYWwsIGFyZ3MsIG5hbWUpO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXZlbnRUYXJnZXRQYXRjaChfZ2xvYmFsKTtcbnByb3BlcnR5RGVzY3JpcHRvclBhdGNoKF9nbG9iYWwpO1xucGF0Y2hDbGFzcygnTXV0YXRpb25PYnNlcnZlcicpO1xucGF0Y2hDbGFzcygnV2ViS2l0TXV0YXRpb25PYnNlcnZlcicpO1xucGF0Y2hDbGFzcygnRmlsZVJlYWRlcicpO1xucHJvcGVydHlQYXRjaCgpO1xucmVnaXN0ZXJFbGVtZW50UGF0Y2goX2dsb2JhbCk7XG4vLyBUcmVhdCBYTUxIVFRQUmVxdWVzdCBhcyBhIG1hY3JvdGFzay5cbnBhdGNoWEhSKF9nbG9iYWwpO1xudmFyIFhIUl9UQVNLID0gem9uZVN5bWJvbCgneGhyVGFzaycpO1xudmFyIFhIUl9TWU5DID0gem9uZVN5bWJvbCgneGhyU3luYycpO1xudmFyIFhIUl9MSVNURU5FUiA9IHpvbmVTeW1ib2woJ3hockxpc3RlbmVyJyk7XG52YXIgWEhSX1NDSEVEVUxFRCA9IHpvbmVTeW1ib2woJ3hoclNjaGVkdWxlZCcpO1xuZnVuY3Rpb24gcGF0Y2hYSFIod2luZG93KSB7XG4gICAgZnVuY3Rpb24gZmluZFBlbmRpbmdUYXNrKHRhcmdldCkge1xuICAgICAgICB2YXIgcGVuZGluZ1Rhc2sgPSB0YXJnZXRbWEhSX1RBU0tdO1xuICAgICAgICByZXR1cm4gcGVuZGluZ1Rhc2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlVGFzayh0YXNrKSB7XG4gICAgICAgIHNlbGZbWEhSX1NDSEVEVUxFRF0gPSBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSB0YXNrLmRhdGE7XG4gICAgICAgIC8vIHJlbW92ZSBleGlzdGluZyBldmVudCBsaXN0ZW5lclxuICAgICAgICB2YXIgbGlzdGVuZXIgPSBkYXRhLnRhcmdldFtYSFJfTElTVEVORVJdO1xuICAgICAgICBpZiAobGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGRhdGEudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5ld0xpc3RlbmVyID0gZGF0YS50YXJnZXRbWEhSX0xJU1RFTkVSXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLnRhcmdldC5yZWFkeVN0YXRlID09PSBkYXRhLnRhcmdldC5ET05FKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhLmFib3J0ZWQgJiYgc2VsZltYSFJfU0NIRURVTEVEXSkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrLmludm9rZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZGF0YS50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIG5ld0xpc3RlbmVyKTtcbiAgICAgICAgdmFyIHN0b3JlZFRhc2sgPSBkYXRhLnRhcmdldFtYSFJfVEFTS107XG4gICAgICAgIGlmICghc3RvcmVkVGFzaykge1xuICAgICAgICAgICAgZGF0YS50YXJnZXRbWEhSX1RBU0tdID0gdGFzaztcbiAgICAgICAgfVxuICAgICAgICBzZW5kTmF0aXZlLmFwcGx5KGRhdGEudGFyZ2V0LCBkYXRhLmFyZ3MpO1xuICAgICAgICBzZWxmW1hIUl9TQ0hFRFVMRURdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRhc2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBsYWNlaG9sZGVyQ2FsbGJhY2soKSB7IH1cbiAgICBmdW5jdGlvbiBjbGVhclRhc2sodGFzaykge1xuICAgICAgICB2YXIgZGF0YSA9IHRhc2suZGF0YTtcbiAgICAgICAgLy8gTm90ZSAtIGlkZWFsbHksIHdlIHdvdWxkIGNhbGwgZGF0YS50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lciBoZXJlLCBidXQgaXQncyB0b28gbGF0ZVxuICAgICAgICAvLyB0byBwcmV2ZW50IGl0IGZyb20gZmlyaW5nLiBTbyBpbnN0ZWFkLCB3ZSBzdG9yZSBpbmZvIGZvciB0aGUgZXZlbnQgbGlzdGVuZXIuXG4gICAgICAgIGRhdGEuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBhYm9ydE5hdGl2ZS5hcHBseShkYXRhLnRhcmdldCwgZGF0YS5hcmdzKTtcbiAgICB9XG4gICAgdmFyIG9wZW5OYXRpdmUgPSBwYXRjaE1ldGhvZCh3aW5kb3cuWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLCAnb3BlbicsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uIChzZWxmLCBhcmdzKSB7XG4gICAgICAgIHNlbGZbWEhSX1NZTkNdID0gYXJnc1syXSA9PSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG9wZW5OYXRpdmUuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgfTsgfSk7XG4gICAgdmFyIHNlbmROYXRpdmUgPSBwYXRjaE1ldGhvZCh3aW5kb3cuWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLCAnc2VuZCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uIChzZWxmLCBhcmdzKSB7XG4gICAgICAgIHZhciB6b25lID0gWm9uZS5jdXJyZW50O1xuICAgICAgICBpZiAoc2VsZltYSFJfU1lOQ10pIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBYSFIgaXMgc3luYyB0aGVyZSBpcyBubyB0YXNrIHRvIHNjaGVkdWxlLCBqdXN0IGV4ZWN1dGUgdGhlIGNvZGUuXG4gICAgICAgICAgICByZXR1cm4gc2VuZE5hdGl2ZS5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0geyB0YXJnZXQ6IHNlbGYsIGlzUGVyaW9kaWM6IGZhbHNlLCBkZWxheTogbnVsbCwgYXJnczogYXJncywgYWJvcnRlZDogZmFsc2UgfTtcbiAgICAgICAgICAgIHJldHVybiB6b25lLnNjaGVkdWxlTWFjcm9UYXNrKCdYTUxIdHRwUmVxdWVzdC5zZW5kJywgcGxhY2Vob2xkZXJDYWxsYmFjaywgb3B0aW9ucywgc2NoZWR1bGVUYXNrLCBjbGVhclRhc2spO1xuICAgICAgICB9XG4gICAgfTsgfSk7XG4gICAgdmFyIGFib3J0TmF0aXZlID0gcGF0Y2hNZXRob2Qod2luZG93LlhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwgJ2Fib3J0JywgZnVuY3Rpb24gKGRlbGVnYXRlKSB7IHJldHVybiBmdW5jdGlvbiAoc2VsZiwgYXJncykge1xuICAgICAgICB2YXIgdGFzayA9IGZpbmRQZW5kaW5nVGFzayhzZWxmKTtcbiAgICAgICAgaWYgKHRhc2sgJiYgdHlwZW9mIHRhc2sudHlwZSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gSWYgdGhlIFhIUiBoYXMgYWxyZWFkeSBjb21wbGV0ZWQsIGRvIG5vdGhpbmcuXG4gICAgICAgICAgICAvLyBJZiB0aGUgWEhSIGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRlZCwgZG8gbm90aGluZy5cbiAgICAgICAgICAgIC8vIEZpeCAjNTY5LCBjYWxsIGFib3J0IG11bHRpcGxlIHRpbWVzIGJlZm9yZSBkb25lIHdpbGwgY2F1c2VcbiAgICAgICAgICAgIC8vIG1hY3JvVGFzayB0YXNrIGNvdW50IGJlIG5lZ2F0aXZlIG51bWJlclxuICAgICAgICAgICAgaWYgKHRhc2suY2FuY2VsRm4gPT0gbnVsbCB8fCAodGFzay5kYXRhICYmIHRhc2suZGF0YS5hYm9ydGVkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2suem9uZS5jYW5jZWxUYXNrKHRhc2spO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyd2lzZSwgd2UgYXJlIHRyeWluZyB0byBhYm9ydCBhbiBYSFIgd2hpY2ggaGFzIG5vdCB5ZXQgYmVlbiBzZW50LCBzbyB0aGVyZSBpcyBubyB0YXNrXG4gICAgICAgIC8vIHRvIGNhbmNlbC4gRG8gbm90aGluZy5cbiAgICB9OyB9KTtcbn1cbi8vLyBHRU9fTE9DQVRJT05cbmlmIChfZ2xvYmFsWyduYXZpZ2F0b3InXSAmJiBfZ2xvYmFsWyduYXZpZ2F0b3InXS5nZW9sb2NhdGlvbikge1xuICAgIHBhdGNoUHJvdG90eXBlKF9nbG9iYWxbJ25hdmlnYXRvciddLmdlb2xvY2F0aW9uLCBbJ2dldEN1cnJlbnRQb3NpdGlvbicsICd3YXRjaFBvc2l0aW9uJ10pO1xufVxuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbn0pKSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vem9uZS5qcy9kaXN0L3pvbmUuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3pvbmUuanMvZGlzdC96b25lLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gMiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }), + +/***/ "./src/polyfills.ts": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/* WEBPACK VAR INJECTION */(function(process) {\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__webpack_require__(\"./node_modules/core-js/es6/index.js\");\r\n__webpack_require__(\"./node_modules/reflect-metadata/Reflect.js\");\r\n__webpack_require__(\"./node_modules/zone.js/dist/zone.js\");\r\nif (process.env.ENV === 'production') {\r\n // Production\r\n}\r\nelse {\r\n // Development\r\n Error['stackTraceLimit'] = Infinity;\r\n __webpack_require__(\"./node_modules/zone.js/dist/long-stack-trace-zone.js\");\r\n}\r\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"./node_modules/process/browser.js\")))//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvcG9seWZpbGxzLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3BvbHlmaWxscy50cz9jMmM5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnY29yZS1qcy9lczYnO1xuaW1wb3J0ICdyZWZsZWN0LW1ldGFkYXRhJztcbnJlcXVpcmUoJ3pvbmUuanMvZGlzdC96b25lJyk7XG5pZiAocHJvY2Vzcy5lbnYuRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBQcm9kdWN0aW9uXG59IGVsc2Uge1xuICAgIC8vIERldmVsb3BtZW50XG4gICAgRXJyb3JbJ3N0YWNrVHJhY2VMaW1pdCddID0gSW5maW5pdHk7XG4gICAgcmVxdWlyZSgnem9uZS5qcy9kaXN0L2xvbmctc3RhY2stdHJhY2Utem9uZScpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIG5vZGVfbW9kdWxlcy9hbmd1bGFyMi10ZW1wbGF0ZS1sb2FkZXIhLi9zcmMvcG9seWZpbGxzLnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OyIsInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }) + +/******/ }); \ No newline at end of file diff --git a/dist-demo/src/app/action/examples/action-example.component.css b/dist-demo/src/app/action/examples/action-example.component.css new file mode 100644 index 000000000..16dfe0ec1 --- /dev/null +++ b/dist-demo/src/app/action/examples/action-example.component.css @@ -0,0 +1,2 @@ +.my-actions{display:flex;justify-content:flex-end}.my-actions .btn{margin-left:10px}.my-actions .dropdown-kebab-pf .btn{margin-left:0} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9hY3Rpb24vZXhhbXBsZXMvYWN0aW9uLWV4YW1wbGUuY29tcG9uZW50Lmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7RUFDRSxhQUFBO0VBQ0EseUJBQUE7O0FBRkYsV0FHRTtFQUNFLGlCQUFBOztBQUpKLFdBTUUsbUJBQ0U7RUFDRSxjQUFBIiwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCAocmVmZXJlbmNlKSBcIi4uLy4uLy4uL2Fzc2V0cy9zdHlsZXNoZWV0cy9wYXR0ZXJuZmx5LW5nXCI7XG5cbi5teS1hY3Rpb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgLmJ0biB7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gIH1cbiAgLmRyb3Bkb3duLWtlYmFiLXBmIHtcbiAgICAuYnRuIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIH1cbiAgfVxufVxuIl0sImZpbGUiOiJhcHAvYWN0aW9uL2V4YW1wbGVzL2FjdGlvbi1leGFtcGxlLmNvbXBvbmVudC5jc3MifQ== */ diff --git a/dist-demo/src/app/action/examples/action-example.component.html b/dist-demo/src/app/action/examples/action-example.component.html new file mode 100644 index 000000000..654bac8b5 --- /dev/null +++ b/dist-demo/src/app/action/examples/action-example.component.html @@ -0,0 +1,73 @@ +
+
+
+

Action Component Example

+
+
+
+
+
+
+ + + + + + + + + +
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+

Code

+
+
+
+
+ + + + + + + + + + + +
+
diff --git a/dist-demo/src/app/action/examples/action-example.component.less b/dist-demo/src/app/action/examples/action-example.component.less new file mode 100644 index 000000000..558bcc2a0 --- /dev/null +++ b/dist-demo/src/app/action/examples/action-example.component.less @@ -0,0 +1,14 @@ +@import (reference) "../../../assets/stylesheets/patternfly-ng"; + +.my-actions { + display: flex; + justify-content: flex-end; + .btn { + margin-left: 10px; + } + .dropdown-kebab-pf { + .btn { + margin-left: 0; + } + } +} diff --git a/dist-demo/src/app/action/examples/action-example.component.ts b/dist-demo/src/app/action/examples/action-example.component.ts new file mode 100644 index 000000000..45192b360 --- /dev/null +++ b/dist-demo/src/app/action/examples/action-example.component.ts @@ -0,0 +1,81 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +import { Action } from '../../action/action'; +import { ActionConfig } from '../../action/action-config'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'action-example', + styleUrls: ['./action-example.component.less'], + templateUrl: './action-example.component.html' +}) +export class ActionExampleComponent implements OnInit { + actionConfig: ActionConfig; + actionsText: string = ''; + + constructor() { + } + + ngOnInit(): void { + this.actionConfig = { + primaryActions: [{ + id: 'action1', + title: 'Action 1', + tooltip: 'Do the first thing' + }, { + id: 'action2', + title: 'Action 2', + tooltip: 'Do something else' + }], + moreActions: [{ + id: 'moreActions1', + title: 'Action', + tooltip: 'Perform an action' + }, { + id: 'moreActions2', + title: 'Another Action', + tooltip: 'Do something else' + }, { + disabled: true, + id: 'moreActions3', + title: 'Disabled Action', + tooltip: 'Unavailable action', + }, { + id: 'moreActions4', + title: 'Something Else', + tooltip: 'Do something special' + }, { + id: 'moreActions5', + title: '', + separator: true + }, { + id: 'moreActions6', + title: 'Grouped Action 1', + tooltip: 'Do something' + }, { + id: 'moreActions7', + title: 'Grouped Action 2', + tooltip: 'Do something similar' + }] + } as ActionConfig; + } + + // Actions + + doAdd(): void { + this.actionsText = 'Add Action\n' + this.actionsText; + } + + handleAction(action: Action): void { + this.actionsText = action.title + '\n' + this.actionsText; + let test = ''; + } + + optionSelected(option: number): void { + this.actionsText = 'Option ' + option + ' selected\n' + this.actionsText; + } +} diff --git a/dist-demo/src/app/action/examples/action-example.module.ts b/dist-demo/src/app/action/examples/action-example.module.ts new file mode 100644 index 000000000..9c81eafd6 --- /dev/null +++ b/dist-demo/src/app/action/examples/action-example.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { BsDropdownConfig, BsDropdownModule } from 'ngx-bootstrap/dropdown'; +import { TabsModule, TabsetConfig } from 'ngx-bootstrap/tabs'; + +import { ActionExampleComponent } from './action-example.component'; +import { ActionModule } from '../action.module'; +import { DemoComponentsModule } from '../../../demo/components/demo-components.module'; + +@NgModule({ + declarations: [ ActionExampleComponent ], + imports: [ + ActionModule, + BsDropdownModule.forRoot(), + CommonModule, + DemoComponentsModule, + TabsModule.forRoot() + ], + providers: [ BsDropdownConfig, TabsetConfig ] +}) +export class ActionExampleModule { + constructor() {} +} diff --git a/dist-demo/src/app/empty-state/examples/empty-state-example.component.html b/dist-demo/src/app/empty-state/examples/empty-state-example.component.html new file mode 100644 index 000000000..32628025a --- /dev/null +++ b/dist-demo/src/app/empty-state/examples/empty-state-example.component.html @@ -0,0 +1,45 @@ +
+
+
+

Empty State Component Example

+
+
+
+
+
+
+ +
+
+
+
+
+

Actions:

+
+
+
+
+
+ +
+
+
+
+

Code

+
+
+
+
+ + + + + + + + + + + +
+
diff --git a/dist-demo/src/app/empty-state/examples/empty-state-example.component.ts b/dist-demo/src/app/empty-state/examples/empty-state-example.component.ts new file mode 100644 index 000000000..0345cc52a --- /dev/null +++ b/dist-demo/src/app/empty-state/examples/empty-state-example.component.ts @@ -0,0 +1,71 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +import { Router } from '@angular/router'; + +import { Action } from '../../action/action'; +import { ActionConfig } from '../../action/action-config'; +import { EmptyStateConfig } from '../empty-state-config'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'empty-state-example', + templateUrl: './empty-state-example.component.html' +}) +export class EmptyStateExampleComponent implements OnInit { + actionConfig: ActionConfig; + actionsText: string = ''; + emptyStateConfig: EmptyStateConfig; + + constructor(private router: Router) { + } + + ngOnInit(): void { + this.actionConfig = { + primaryActions: [{ + id: 'action1', + title: 'Main Action', + tooltip: 'Start the server' + }], + moreActions: [{ + id: 'action2', + title: 'Secondary Action 1', + tooltip: 'Do the first thing' + }, { + id: 'action3', + title: 'Secondary Action 2', + tooltip: 'Do something else' + }, { + id: 'action4', + title: 'Secondary Action 3', + tooltip: 'Do something special' + }] + } as ActionConfig; + + this.emptyStateConfig = { + actions: this.actionConfig, + iconStyleClass: 'pficon-warning-triangle-o', + info: 'This is the Empty State component. The goal of a empty state pattern is to provide a good first ' + + 'impression that helps users to achieve their goals. It should be used when a view is empty because no ' + + 'objects exists and you want to guide the user to perform specific actions.', + helpLink: { + hypertext: 'Empty State example', + text: 'For more information please see the', + url: '#/emptystate' + }, + title: 'No Items Available' + } as EmptyStateConfig; + } + + ngDoCheck(): void { + } + + // Actions + + handleAction($event: Action): void { + this.actionsText = $event.title + '\n' + this.actionsText; + } +} diff --git a/dist-demo/src/app/empty-state/examples/empty-state-example.module.ts b/dist-demo/src/app/empty-state/examples/empty-state-example.module.ts new file mode 100644 index 000000000..2bc345c7d --- /dev/null +++ b/dist-demo/src/app/empty-state/examples/empty-state-example.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TabsModule, TabsetConfig } from 'ngx-bootstrap/tabs'; + +import { DemoComponentsModule } from '../../../demo/components/demo-components.module'; +import { EmptyStateModule } from '../empty-state.module'; +import { EmptyStateExampleComponent } from './empty-state-example.component'; + +@NgModule({ + declarations: [ EmptyStateExampleComponent ], + imports: [ + CommonModule, + DemoComponentsModule, + EmptyStateModule, + TabsModule.forRoot() + ], + providers: [ TabsetConfig ] +}) +export class EmptyStateExampleModule { + constructor() {} +} diff --git a/dist-demo/src/app/filter/examples/filter-basic-example.component.html b/dist-demo/src/app/filter/examples/filter-basic-example.component.html new file mode 100644 index 000000000..392fdefc0 --- /dev/null +++ b/dist-demo/src/app/filter/examples/filter-basic-example.component.html @@ -0,0 +1,71 @@ +
+
+
+

Filter Component Example

+
+
+
+
+
+
+ +
+
+
+
+
+

Valid Items:

+
+
+
+
+
+
+
+
+ {{item.name}} +
+
+ {{item.address}} +
+
+ {{item.birthMonth}} +
+
+ {{item.weekDay}} +
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+

Code

+
+
+
+
+ + + + + + + + + + + +
+
diff --git a/dist-demo/src/app/filter/examples/filter-basic-example.component.ts b/dist-demo/src/app/filter/examples/filter-basic-example.component.ts new file mode 100644 index 000000000..0d88fe113 --- /dev/null +++ b/dist-demo/src/app/filter/examples/filter-basic-example.component.ts @@ -0,0 +1,188 @@ +import { + Component, + OnInit, +} from '@angular/core'; + +import { Filter } from '../filter'; +import { FilterConfig } from '../filter-config'; +import { FilterField } from '../filter-field'; +import { FilterEvent } from '../filter-event'; + +@Component({ + selector: 'filter-basic-example', + templateUrl: './filter-basic-example.component.html' +}) +export class FilterBasicExampleComponent implements OnInit { + allItems: any[]; + items: any[]; + filterConfig: FilterConfig; + filtersText: string = ''; + separator: Object; + + constructor() { + } + + ngOnInit(): void { + this.allItems = [{ + name: 'Fred Flintstone', + address: '20 Dinosaur Way, Bedrock, Washingstone', + birthMonth: 'February', + birthMonthId: 'month2', + weekDay: 'Sunday', + weekdayId: 'day1' + }, { + name: 'John Smith', address: '415 East Main Street, Norfolk, Virginia', + birthMonth: 'October', + birthMonthId: '10', + weekDay: 'Monday', + weekdayId: 'day2' + }, { + name: 'Frank Livingston', + address: '234 Elm Street, Pittsburgh, Pennsylvania', + birthMonth: 'March', + birthMonthId: 'month3', + weekDay: 'Tuesday', + weekdayId: 'day3' + }, { + name: 'Judy Green', + address: '2 Apple Boulevard, Cincinatti, Ohio', + birthMonth: 'December', + birthMonthId: 'month12', + weekDay: 'Wednesday', + weekdayId: 'day4' + }, { + name: 'Pat Thomas', + address: '50 Second Street, New York, New York', + birthMonth: 'February', + birthMonthId: 'month2', + weekDay: 'Thursday', + weekdayId: 'day5' + }]; + this.items = this.allItems; + + this.filterConfig = { + fields: [{ + id: 'name', + title: 'Name', + placeholder: 'Filter by Name...', + type: 'text' + }, { + id: 'address', + title: 'Address', + placeholder: 'Filter by Address...', + type: 'text' + }, { + id: 'birthMonth', + title: 'Birth Month', + placeholder: 'Filter by Birth Month...', + type: 'select', + queries: [{ + id: 'month1', + value: 'January' + }, { + id: 'month2', + value: 'February' + }, { + id: 'month3', + value: 'March' + }, { + id: 'month4', + value: 'April' + }, { + id: 'month5', + value: 'May' + }, { + id: 'month6', + value: 'June' + }, { + id: 'month7', + value: 'July' + }, { + id: 'month8', + value: 'August' + }, { + id: 'month9', + value: 'September' + }, { + id: 'month10', + value: 'October' + }, { + id: 'month11', + value: 'November' + }, { + id: 'month12', + value: 'December' + }] + }, { + id: 'byIcon', + title: 'By Icon', + placeholder: 'Filter by Icon...', + type: 'select', + queries: [{ + id: 'bookmark', + value: 'Bookmark', + iconStyleClass: 'fa fa-bookmark' + }, { + id: 'map', + value: 'Map', + iconStyleClass: 'fa fa-map-marker' + }, { + id: 'gift', + value: 'Gift', + iconStyleClass: 'fa fa-gift' + }] + }] as FilterField[], + resultsCount: this.items.length, + appliedFilters: [] + } as FilterConfig; + } + + // Filter functions + + applyFilters(filters: Filter[]): void { + this.items = []; + if (filters && filters.length > 0) { + this.allItems.forEach((item) => { + if (this.matchesFilters(item, filters)) { + this.items.push(item); + } + }); + } else { + this.items = this.allItems; + } + this.filterConfig.resultsCount = this.items.length; + } + + filterChanged($event: FilterEvent): void { + this.filtersText = ''; + $event.appliedFilters.forEach((filter) => { + this.filtersText += filter.field.title + ' : ' + filter.value + '\n'; + }); + this.applyFilters($event.appliedFilters); + } + + matchesFilter(item: any, filter: Filter): boolean { + let match = true; + if (filter.field.id === 'name') { + match = item.name.match(filter.value) !== null; + } else if (filter.field.id === 'address') { + match = item.address.match(filter.value) !== null; + } else if (filter.field.id === 'birthMonth') { + match = item.birthMonth === filter.value; + } else if (filter.field.id === 'weekDay') { + match = item.weekDay === filter.value; + } + return match; + } + + matchesFilters(item: any, filters: Filter[]): boolean { + let matches = true; + filters.forEach((filter) => { + if (!this.matchesFilter(item, filter)) { + matches = false; + return matches; + } + }); + return matches; + } +} diff --git a/dist-demo/src/app/filter/examples/filter-example.component.html b/dist-demo/src/app/filter/examples/filter-example.component.html new file mode 100644 index 000000000..e81e92180 --- /dev/null +++ b/dist-demo/src/app/filter/examples/filter-example.component.html @@ -0,0 +1,16 @@ +
+
+
+

Filter Component Example

+
+
+
+ + + + + + + + +
diff --git a/dist-demo/src/app/filter/examples/filter-example.component.ts b/dist-demo/src/app/filter/examples/filter-example.component.ts new file mode 100644 index 000000000..8e118b9e1 --- /dev/null +++ b/dist-demo/src/app/filter/examples/filter-example.component.ts @@ -0,0 +1,21 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'filter-example', + templateUrl: './filter-example.component.html' +}) +export class FilterExampleComponent implements OnInit { + constructor() { + } + + ngOnInit(): void { + } + + ngDoCheck(): void { + } +} diff --git a/dist-demo/src/app/filter/examples/filter-example.module.ts b/dist-demo/src/app/filter/examples/filter-example.module.ts new file mode 100644 index 000000000..4b7027939 --- /dev/null +++ b/dist-demo/src/app/filter/examples/filter-example.module.ts @@ -0,0 +1,26 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { TabsModule, TabsetConfig } from 'ngx-bootstrap/tabs'; + +import { DemoComponentsModule } from '../../../demo/components/demo-components.module'; +import { FilterBasicExampleComponent } from './filter-basic-example.component'; +import { FilterExampleComponent } from './filter-example.component'; +import { FilterModule } from '../filter.module'; +import { FilterTypeAheadExampleComponent } from './filter-type-ahead-example.component'; + +@NgModule({ + imports: [ + CommonModule, + DemoComponentsModule, + FilterModule, + FormsModule, + TabsModule.forRoot() + ], + declarations: [ FilterBasicExampleComponent, FilterExampleComponent, FilterTypeAheadExampleComponent ], + providers: [ TabsetConfig ] +}) +export class FilterExampleModule { + constructor() {} +} diff --git a/dist-demo/src/app/filter/examples/filter-type-ahead-example.component.html b/dist-demo/src/app/filter/examples/filter-type-ahead-example.component.html new file mode 100644 index 000000000..ace778ca9 --- /dev/null +++ b/dist-demo/src/app/filter/examples/filter-type-ahead-example.component.html @@ -0,0 +1,73 @@ +
+
+
+

Filter Component Example

+
+
+
+
+
+
+ +
+
+
+
+
+

Valid Items:

+
+
+
+
+
+
+
+
+ {{item.name}} +
+
+ {{item.address}} +
+
+ {{item.birthMonth}} +
+
+ {{item.weekDay}} +
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+

Code

+
+
+
+
+ + + + + + + + + + + +
+
diff --git a/dist-demo/src/app/filter/examples/filter-type-ahead-example.component.ts b/dist-demo/src/app/filter/examples/filter-type-ahead-example.component.ts new file mode 100644 index 000000000..1417de267 --- /dev/null +++ b/dist-demo/src/app/filter/examples/filter-type-ahead-example.component.ts @@ -0,0 +1,265 @@ +import { + Component, + OnInit, +} from '@angular/core'; + +import { Filter } from '../filter'; +import { FilterConfig } from '../filter-config'; +import { FilterField } from '../filter-field'; +import { FilterEvent } from '../filter-event'; + +@Component({ + selector: 'filter-type-ahead-example', + templateUrl: './filter-type-ahead-example.component.html' +}) +export class FilterTypeAheadExampleComponent implements OnInit { + allItems: any[]; + items: any[]; + filterConfig: FilterConfig; + filtersText: string = ''; + monthQueries: any[]; + monthQueriesFixed: any[]; + separator: Object; + weekDayQueries: any[]; + + constructor() { + } + + ngOnInit(): void { + this.allItems = [{ + name: 'Fred Flintstone', + address: '20 Dinosaur Way, Bedrock, Washingstone', + birthMonth: 'February', + birthMonthId: 'month2', + weekDay: 'Sunday', + weekdayId: 'day1' + }, { + name: 'John Smith', address: '415 East Main Street, Norfolk, Virginia', + birthMonth: 'October', + birthMonthId: '10', + weekDay: 'Monday', + weekdayId: 'day2' + }, { + name: 'Frank Livingston', + address: '234 Elm Street, Pittsburgh, Pennsylvania', + birthMonth: 'March', + birthMonthId: 'month3', + weekDay: 'Tuesday', + weekdayId: 'day3' + }, { + name: 'Judy Green', + address: '2 Apple Boulevard, Cincinatti, Ohio', + birthMonth: 'December', + birthMonthId: 'month12', + weekDay: 'Wednesday', + weekdayId: 'day4' + }, { + name: 'Pat Thomas', + address: '50 Second Street, New York, New York', + birthMonth: 'February', + birthMonthId: 'month2', + weekDay: 'Thursday', + weekdayId: 'day5' + }]; + this.items = this.allItems; + + this.monthQueries = [{ + id: 'month3', + value: 'March', + imageUrl: 'https://avatars2.githubusercontent.com/u/21208769?v=3' + }, { + id: 'month4', + value: 'April', + imageUrl: 'https://avatars2.githubusercontent.com/u/21208769?v=3' + }, { + id: 'month5', + value: 'May', + imageUrl: 'https://avatars2.githubusercontent.com/u/21208769?v=3' + }, { + id: 'month6', + value: 'June', + imageUrl: 'https://avatars2.githubusercontent.com/u/21208769?v=3' + }, { + id: 'month7', + value: 'July', + imageUrl: 'https://avatars2.githubusercontent.com/u/21208769?v=3' + }, { + id: 'month8', + value: 'August', + imageUrl: 'https://avatars2.githubusercontent.com/u/21208769?v=3' + }, { + id: 'month9', + value: 'September', + imageUrl: 'https://avatars2.githubusercontent.com/u/21208769?v=3' + }, { + id: 'month10', + value: 'October', + imageUrl: 'https://avatars2.githubusercontent.com/u/21208769?v=3' + }, { + id: 'month11', + value: 'November', + imageUrl: 'https://avatars2.githubusercontent.com/u/21208769?v=3' + }, { + id: 'month12', + value: 'December', + imageUrl: 'https://avatars2.githubusercontent.com/u/21208769?v=3' + }]; + + // Non-filterable queries + this.monthQueriesFixed = [{ + id: 'month1', + value: 'January', + imageUrl: 'https://avatars2.githubusercontent.com/u/21208769?v=3' + }, { + id: 'month2', + value: 'February', + imageUrl: 'https://avatars2.githubusercontent.com/u/21208769?v=3' + }]; + + // Separator used with type ahead queries + this.separator = { + id: 'separator', + separator: true + }; + + this.weekDayQueries = [{ + id: 'day1', + value: 'Sunday' + }, { + id: 'day2', + value: 'Monday' + }, { + id: 'day3', + value: 'Tuesday' + }, { + id: 'day4', + value: 'Wednesday' + }, { + id: 'day5', + value: 'Thursday' + }, { + id: 'day6', + value: 'Friday' + }, { + id: 'day7', + value: 'Saturday' + }]; + + this.filterConfig = { + fields: [{ + id: 'birthMonth', + title: 'Birth Month', + placeholder: 'Filter by Birth Month...', + type: 'typeahead', + queries: [ + ...this.monthQueriesFixed, + this.separator, + ...this.monthQueries + ] + }, { + id: 'weekDay', + title: 'Week Day', + placeholder: 'Filter by Week Day...', + type: 'typeahead', + queries: [ + ...this.weekDayQueries + ] + }] as FilterField[], + resultsCount: this.items.length, + appliedFilters: [] + } as FilterConfig; + } + + // Filter functions + + applyFilters(filters: Filter[]): void { + this.items = []; + if (filters && filters.length > 0) { + this.allItems.forEach((item) => { + if (this.matchesFilters(item, filters)) { + this.items.push(item); + } + }); + } else { + this.items = this.allItems; + } + this.filterConfig.resultsCount = this.items.length; + } + + filterChanged($event: FilterEvent): void { + this.filtersText = ''; + $event.appliedFilters.forEach((filter) => { + this.filtersText += filter.field.title + ' : ' + filter.value + '\n'; + }); + this.applyFilters($event.appliedFilters); + this.filterFieldSelected($event); + } + + // Reset filtered queries + filterFieldSelected($event: FilterEvent): void { + this.filterConfig.fields.forEach((field) => { + if (field.id === 'birthMonth') { + field.queries = [ + ...this.monthQueriesFixed, + this.separator, + ...this.monthQueries + ]; + } else if (field.id === 'weekDay') { + field.queries = [ + ...this.weekDayQueries + ]; + } + }); + } + + matchesFilter(item: any, filter: Filter): boolean { + let match = true; + if (filter.field.id === 'birthMonth') { + match = item.birthMonth === filter.value; + } else if (filter.field.id === 'weekDay') { + match = item.weekDay === filter.value; + } + return match; + } + + matchesFilters(item: any, filters: Filter[]): boolean { + let matches = true; + filters.forEach((filter) => { + if (!this.matchesFilter(item, filter)) { + matches = false; + return matches; + } + }); + return matches; + } + + // Filter queries for type ahead + filterQueries($event: FilterEvent) { + const index = (this.filterConfig.fields as any).findIndex((i: any) => i.id === $event.field.id); + let val = $event.value.trim(); + + if (this.filterConfig.fields[index].id === 'birthMonth') { + this.filterConfig.fields[index].queries = [ + ...this.monthQueriesFixed, + this.separator, + ...this.monthQueries.filter((item: any) => { + if (item.value) { + return (item.value.toLowerCase().indexOf(val.toLowerCase()) > -1); + } else { + return true; + } + }) + ]; + } else if (this.filterConfig.fields[index].id === 'weekDay') { + this.filterConfig.fields[index].queries = [ + ...this.weekDayQueries.filter((item: any) => { + if (item.value) { + return (item.value.toLowerCase().indexOf(val.toLowerCase()) > -1); + } else { + return true; + } + }) + ]; + } + } +} diff --git a/dist-demo/src/app/list/examples/basic-content.component.html b/dist-demo/src/app/list/examples/basic-content.component.html new file mode 100644 index 000000000..c8b41dab6 --- /dev/null +++ b/dist-demo/src/app/list/examples/basic-content.component.html @@ -0,0 +1,24 @@ +
+
+
+
Host
+
{{item.city}}
+
Admin
+
{{item.name}}
+
Time
+
January 15, 2016 10:45:11 AM
+
Severity
+
Warning
+
Cluster
+
Cluster 1
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
diff --git a/dist-demo/src/app/list/examples/basic-content.component.ts b/dist-demo/src/app/list/examples/basic-content.component.ts new file mode 100644 index 000000000..ff73924c2 --- /dev/null +++ b/dist-demo/src/app/list/examples/basic-content.component.ts @@ -0,0 +1,24 @@ +import { + Component, + Input, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'basic-content', + templateUrl: './basic-content.component.html' +}) +export class BasicContentComponent implements OnInit { + @Input() item: any; + + constructor() { + } + + ngOnInit(): void { + } + + ngDoCheck(): void { + } +} diff --git a/dist-demo/src/app/list/examples/clusters-content.component.html b/dist-demo/src/app/list/examples/clusters-content.component.html new file mode 100644 index 000000000..ac1175a2c --- /dev/null +++ b/dist-demo/src/app/list/examples/clusters-content.component.html @@ -0,0 +1,34 @@ +
+
+
    +
  • Cluster 1
  • +
  • Cluster 2
  • +
  • Cluster 3
  • +
  • Cluster 4
  • +
  • Cluster 5
  • +
  • Cluster 6
  • +
+
+
+
+
Host Name
+
file1.nay.redhat.com
+
Device Path
+
/dev/disk/pci-0000.05:00-sas-0.2-part1
+
Time
+
January 15, 2016 10:45:11 AM
+
Severity
+
Warning
+
Cluster
+
Cluster 1
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
diff --git a/dist-demo/src/app/list/examples/clusters-content.component.ts b/dist-demo/src/app/list/examples/clusters-content.component.ts new file mode 100644 index 000000000..20b4d6e38 --- /dev/null +++ b/dist-demo/src/app/list/examples/clusters-content.component.ts @@ -0,0 +1,22 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'clusters-content', + templateUrl: './clusters-content.component.html' +}) +export class ClustersContentComponent implements OnInit { + + constructor() { + } + + ngOnInit(): void { + } + + ngDoCheck(): void { + } +} diff --git a/dist-demo/src/app/list/examples/hosts-content.component.html b/dist-demo/src/app/list/examples/hosts-content.component.html new file mode 100644 index 000000000..05bd71807 --- /dev/null +++ b/dist-demo/src/app/list/examples/hosts-content.component.html @@ -0,0 +1,36 @@ +
+
+
    +
  • Host 1
  • +
  • Host 2
  • +
  • Host 3
  • +
  • Host 4
  • +
  • Host 5
  • +
  • Host 6
  • +
  • Host 7
  • +
  • Host 8
  • +
+
+
+
+
Host Name
+
file1.nay.redhat.com
+
Device Path
+
/dev/disk/pci-0000.05:00-sas-0.2-part1
+
Time
+
January 15, 2016 10:45:11 AM
+
Severity
+
Warning
+
Cluster
+
Cluster 1
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
diff --git a/dist-demo/src/app/list/examples/hosts-content.component.ts b/dist-demo/src/app/list/examples/hosts-content.component.ts new file mode 100644 index 000000000..1c9f5bfb3 --- /dev/null +++ b/dist-demo/src/app/list/examples/hosts-content.component.ts @@ -0,0 +1,22 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'hosts-content', + templateUrl: './hosts-content.component.html' +}) +export class HostsContentComponent implements OnInit { + + constructor() { + } + + ngOnInit(): void { + } + + ngDoCheck(): void { + } +} diff --git a/dist-demo/src/app/list/examples/images-content.component.html b/dist-demo/src/app/list/examples/images-content.component.html new file mode 100644 index 000000000..03d223da4 --- /dev/null +++ b/dist-demo/src/app/list/examples/images-content.component.html @@ -0,0 +1,36 @@ +
+
+
    +
  • Image 1
  • +
  • Image 2
  • +
  • Image 3
  • +
  • Image 4
  • +
  • Image 5
  • +
  • Image 6
  • +
  • Image 7
  • +
  • Image 8
  • +
+
+
+
+
Host Name
+
file1.nay.redhat.com
+
Device Path
+
/dev/disk/pci-0000.05:00-sas-0.2-part1
+
Time
+
January 15, 2016 10:45:11 AM
+
Severity
+
Warning
+
Cluster
+
Cluster 1
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
diff --git a/dist-demo/src/app/list/examples/images-content.component.ts b/dist-demo/src/app/list/examples/images-content.component.ts new file mode 100644 index 000000000..835970d4c --- /dev/null +++ b/dist-demo/src/app/list/examples/images-content.component.ts @@ -0,0 +1,22 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'images-content', + templateUrl: './images-content.component.html' +}) +export class ImagesContentComponent implements OnInit { + + constructor() { + } + + ngOnInit(): void { + } + + ngDoCheck(): void { + } +} diff --git a/dist-demo/src/app/list/examples/list-basic-example.component.css b/dist-demo/src/app/list/examples/list-basic-example.component.css new file mode 100644 index 000000000..d1b291ada --- /dev/null +++ b/dist-demo/src/app/list/examples/list-basic-example.component.css @@ -0,0 +1,2 @@ +.btn-default.red,.dropdown-kebab-pf.red .btn-link{color:red} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9saXN0L2V4YW1wbGVzL2xpc3QtYmFzaWMtZXhhbXBsZS5jb21wb25lbnQubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxZQUFZO0VBQ1YsVUFBQTs7QUFHRixrQkFBa0IsSUFBSztFQUNyQixVQUFBIiwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCAocmVmZXJlbmNlKSBcIi4uLy4uLy4uL2Fzc2V0cy9zdHlsZXNoZWV0cy9wYXR0ZXJuZmx5LW5nXCI7XG5cbi5idG4tZGVmYXVsdC5yZWQge1xuICBjb2xvcjogcmVkO1xufVxuXG4uZHJvcGRvd24ta2ViYWItcGYucmVkIC5idG4tbGluayB7XG4gIGNvbG9yOiByZWQ7XG59XG4iXSwiZmlsZSI6ImFwcC9saXN0L2V4YW1wbGVzL2xpc3QtYmFzaWMtZXhhbXBsZS5jb21wb25lbnQuY3NzIn0= */ diff --git a/dist-demo/src/app/list/examples/list-basic-example.component.html b/dist-demo/src/app/list/examples/list-basic-example.component.html new file mode 100644 index 000000000..ef538c799 --- /dev/null +++ b/dist-demo/src/app/list/examples/list-basic-example.component.html @@ -0,0 +1,151 @@ +
+
+
+
+ + +
+ +
+
+
+
{{item.name}}
+
{{item.address}}
+
+
+
+ + {{item.hostCount}} Hosts +
+
+ + {{item.clusterCount}} Clusters +
+
+ + {{item.nodeCount}} Nodes +
+
+ + {{item.imageCount}} Images +
+
+
+
+ + + +  {{action.title}} + + + {{item.started === true ? "Starting" : action.title}} + + + + + + +
+
+
+
+
+
+
+
+ +
+ + + +
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+

Actions:

+
+
+
+
+ +
+
+
+
+

Code

+
+
+
+
+ + + + + + + + + + + +
+
diff --git a/dist-demo/src/app/list/examples/list-basic-example.component.less b/dist-demo/src/app/list/examples/list-basic-example.component.less new file mode 100644 index 000000000..b56c2e673 --- /dev/null +++ b/dist-demo/src/app/list/examples/list-basic-example.component.less @@ -0,0 +1,9 @@ +@import (reference) "../../../assets/stylesheets/patternfly-ng"; + +.btn-default.red { + color: red; +} + +.dropdown-kebab-pf.red .btn-link { + color: red; +} diff --git a/dist-demo/src/app/list/examples/list-basic-example.component.ts b/dist-demo/src/app/list/examples/list-basic-example.component.ts new file mode 100644 index 000000000..ba4373c01 --- /dev/null +++ b/dist-demo/src/app/list/examples/list-basic-example.component.ts @@ -0,0 +1,327 @@ +import { + Component, + OnInit, + TemplateRef, + ViewEncapsulation +} from '@angular/core'; + +import { Action } from '../../action/action'; +import { ActionConfig } from '../../action/action-config'; +import { EmptyStateConfig } from '../../empty-state/empty-state-config'; +import { ListConfig } from '../list-config'; +import { ListEvent } from '../list-event'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'list-basic-example', + styleUrls: ['./list-basic-example.component.less'], + templateUrl: './list-basic-example.component.html' +}) +export class ListBasicExampleComponent implements OnInit { + actionsText: string = ''; + allItems: any[]; + // dragItem: any; + emptyStateConfig: EmptyStateConfig; + items: any[]; + itemsAvailable: boolean = true; + listConfig: ListConfig; + selectType: string = 'checkbox'; + showDisabledRows: boolean = false; + + constructor() { + } + + ngOnInit(): void { + this.allItems = [{ + name: 'Fred Flintstone', + address: '20 Dinosaur Way', + city: 'Bedrock', + state: 'Washingstone', + typeIcon: 'fa-plane', + clusterCount: 6, + hostCount: 8, + imageCount: 8, + nodeCount: 10 + }, { + name: 'John Smith', + address: '415 East Main Street', + city: 'Norfolk', + state: 'Virginia', + typeIcon: 'fa-magic', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8, + hideExpandToggle: true + }, { + name: 'Frank Livingston', + address: '234 Elm Street', + city: 'Pittsburgh', + state: 'Pennsylvania', + typeIcon: 'fa-gamepad', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Linda McGovern', + address: '22 Oak Street', + city: 'Denver', + state: 'Colorado', + typeIcon: 'fa-linux', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Jim Brown', + address: '72 Bourbon Way', + city: 'Nashville', + state: 'Tennessee', + typeIcon: 'fa-briefcase', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Holly Nichols', + address: '21 Jump Street', + city: 'Hollywood', + state: 'California', + typeIcon: 'fa-coffee', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Marie Edwards', + address: '17 Cross Street', + city: 'Boston', + state: 'Massachusetts', + typeIcon: 'fa-rebel', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Pat Thomas', + address: '50 Second Street', + city: 'New York', + state: 'New York', + typeIcon: 'fa-linux', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }]; + this.items = this.allItems; + + this.emptyStateConfig = { + actions: { + primaryActions: [{ + id: 'action1', + title: 'Main Action', + tooltip: 'Start the server' + }], + moreActions: [{ + id: 'action2', + title: 'Secondary Action 1', + tooltip: 'Do the first thing' + }, { + id: 'action3', + title: 'Secondary Action 2', + tooltip: 'Do something else' + }, { + id: 'action4', + title: 'Secondary Action 3', + tooltip: 'Do something special' + }] + } as ActionConfig, + iconStyleClass: 'pficon-warning-triangle-o', + title: 'No Items Available', + info: 'This is the Empty State component. The goal of a empty state pattern is to provide a good first ' + + 'impression that helps users to achieve their goals. It should be used when a list is empty because no ' + + 'objects exists and you want to guide the user to perform specific actions.', + helpLink: { + hypertext: 'List example', + text: 'For more information please see the', + url: '#/list' + } + } as EmptyStateConfig; + + this.listConfig = { + dblClick: false, + emptyStateConfig: this.emptyStateConfig, + multiSelect: false, + selectItems: false, + selectionMatchProp: 'name', + showCheckbox: true, + useExpandItems: false + } as ListConfig; + } + + ngDoCheck(): void { + } + + /** + * Get the ActionConfig properties for each row + * + * @param item The current row item + * @param actionButtonTemplate {TemplateRef} Custom button template + * @param startButtonTemplate {TemplateRef} Custom button template + * @returns {ActionConfig} + */ + getActionConfig(item: any, actionButtonTemplate: TemplateRef, + startButtonTemplate: TemplateRef): ActionConfig { + let actionConfig = { + primaryActions: [{ + id: 'start', + styleClass: 'btn-primary', + title: 'Start', + tooltip: 'Start the server', + template: startButtonTemplate + }, { + id: 'action1', + title: 'Action 1', + tooltip: 'Perform an action' + }, { + id: 'action2', + title: 'Action 2', + tooltip: 'Do something else' + }, { + id: 'action3', + title: 'Action 3', + tooltip: 'Do something special', + template: actionButtonTemplate + }], + moreActions: [{ + id: 'moreActions1', + title: 'Action', + tooltip: 'Perform an action' + }, { + id: 'moreActions2', + title: 'Another Action', + tooltip: 'Do something else' + }, { + disabled: true, + id: 'moreActions3', + title: 'Disabled Action', + tooltip: 'Unavailable action', + }, { + id: 'moreActions4', + title: 'Something Else', + tooltip: 'Do something special' + }, { + id: 'moreActions5', + title: '', + separator: true + }, { + id: 'moreActions6', + title: 'Grouped Action 1', + tooltip: 'Do something' + }, { + id: 'moreActions7', + title: 'Grouped Action 2', + tooltip: 'Do something similar' + }], + moreActionsDisabled: false, + moreActionsVisible: true + } as ActionConfig; + + // Set button disabled + if (item.started === true) { + actionConfig.primaryActions[0].disabled = true; + } + + // Set custom properties for row + if (item.name === 'John Smith') { + actionConfig.moreActionsStyleClass = 'red'; // Set kebab option text red + actionConfig.primaryActions[1].visible = false; // Hide first button + actionConfig.primaryActions[2].disabled = true; // Set last button disabled + actionConfig.primaryActions[3].styleClass = 'red'; // Set last button text red + actionConfig.moreActions[0].visible = false; // Hide first kebab option + } + + // Hide kebab + if (item.name === 'Frank Livingston') { + actionConfig.moreActionsVisible = false; + } + return actionConfig; + } + + // Actions + + handleAction($event: Action, item: any): void { + if ($event.id === 'start') { + item.started = true; + } + this.actionsText = $event.title + ' selected\r\n' + this.actionsText; + } + + handleSelect($event: ListEvent): void { + this.actionsText = $event.item.name + ' selected\r\n' + this.actionsText; + } + + handleSelectionChange($event: ListEvent): void { + this.actionsText = $event.selectedItems.length + ' items selected\r\n' + this.actionsText; + } + + handleClick($event: ListEvent): void { + this.actionsText = $event.item.name + ' clicked\r\n' + this.actionsText; + } + + handleDblClick($event: ListEvent): void { + this.actionsText = $event.item.name + ' double clicked\r\n' + this.actionsText; + } + + handleCheckboxChange($event: ListEvent): void { + this.actionsText = $event.item.name + ' checked: ' + $event.item.selected + '\r\n' + this.actionsText; + } + +/* Not implemented + // Drag and drop + + handleDragEnd($event: ListEvent): void { + this.actionsText = 'drag end\r\n' + this.actionsText; + } + + handleDragMoved($event: ListEvent): void { + let index = -1; + + for (let i = 0; i < this.items.length; i++) { + if (this.items[i] === this.dragItem) { + index = i; + break; + } + } + if (index >= 0) { + this.items.splice(index, 1); + } + this.actionsText = 'drag moved\r\n' + this.actionsText; + } + + handleDragStart($event: ListEvent): void { + this.dragItem = $event.item; + this.actionsText = $event.item.name + ': drag start\r\n' + this.actionsText; + } +*/ + + // Row selection + + updateItemsAvailable(): void { + this.items = (this.itemsAvailable) ? this.allItems : []; + } + + updateSelectionType(): void { + if (this.selectType === 'checkbox') { + this.listConfig.selectItems = false; + this.listConfig.showCheckbox = true; + } else if (this.selectType === 'row') { + this.listConfig.selectItems = true; + this.listConfig.showCheckbox = false; + } else { + this.listConfig.selectItems = false; + this.listConfig.showCheckbox = false; + } + } +} diff --git a/dist-demo/src/app/list/examples/list-compound-example.component.html b/dist-demo/src/app/list/examples/list-compound-example.component.html new file mode 100644 index 000000000..c0c41c519 --- /dev/null +++ b/dist-demo/src/app/list/examples/list-compound-example.component.html @@ -0,0 +1,108 @@ +
+
+
+
+ + +
+ +
+
+
+
{{item.name}}
+
{{item.address}}
+
+
+ + + + {{item.hostCount}} Hosts + + + + + + {{item.clustersCount}} Clusters + + + + + + {{item.nodesCount}} Nodes + + + + + + {{item.imagesCount}} Images + + +
+
+
+ + + + + + + + + + + +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+

Actions:

+
+
+
+
+ +
+
+
+
+

Code

+
+
+
+
+ + + + + + + + + + + +
+
diff --git a/dist-demo/src/app/list/examples/list-compound-example.component.ts b/dist-demo/src/app/list/examples/list-compound-example.component.ts new file mode 100644 index 000000000..9b507b65e --- /dev/null +++ b/dist-demo/src/app/list/examples/list-compound-example.component.ts @@ -0,0 +1,175 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +import { Action } from '../../action/action'; +import { ActionConfig } from '../../action/action-config'; +import { ListConfig } from '../list-config'; +import { ListEvent } from '../list-event'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'list-compound-example', + templateUrl: './list-compound-example.component.html' +}) +export class ListCompoundExampleComponent implements OnInit { + actionConfig: ActionConfig; + actionsText: string = ''; + allItems: any[]; + items: any[]; + listConfig: ListConfig; + + constructor() { + } + + ngOnInit(): void { + this.allItems = [{ + name: 'Fred Flintstone', + address: '20 Dinosaur Way', + city: 'Bedrock', + state: 'Washingstone', + typeIcon: 'fa-plane', + clusterCount: 6, + hostCount: 8, + imageCount: 8, + nodeCount: 10 + }, { + name: 'John Smith', + address: '415 East Main Street', + city: 'Norfolk', + state: 'Virginia', + typeIcon: 'fa-magic', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8, + hideExpandToggle: true + }, { + name: 'Frank Livingston', + address: '234 Elm Street', + city: 'Pittsburgh', + state: 'Pennsylvania', + typeIcon: 'fa-gamepad', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Linda McGovern', + address: '22 Oak Street', + city: 'Denver', + state: 'Colorado', + typeIcon: 'fa-linux', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Jim Brown', + address: '72 Bourbon Way', + city: 'Nashville', + state: 'Tennessee', + typeIcon: 'fa-briefcase', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Holly Nichols', + address: '21 Jump Street', + city: 'Hollywood', + state: 'California', + typeIcon: 'fa-coffee', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Marie Edwards', + address: '17 Cross Street', + city: 'Boston', + state: 'Massachusetts', + typeIcon: 'fa-rebel', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Pat Thomas', + address: '50 Second Street', + city: 'New York', + state: 'New York', + typeIcon: 'fa-linux', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }]; + this.items = this.allItems; + + this.actionConfig = { + primaryActions: [{ + id: 'action1', + title: 'Action 1', + tooltip: 'Perform an action' + }], + moreActions: [{ + id: 'moreActions1', + title: 'Action', + tooltip: 'Perform an action' + }, { + id: 'moreActions2', + title: 'Another Action', + tooltip: 'Do something else' + }, { + disabled: true, + id: 'moreActions3', + title: 'Disabled Action', + tooltip: 'Unavailable action', + }, { + id: 'moreActions4', + title: 'Something Else', + tooltip: '' + }, { + id: 'moreActions5', + title: '', + separator: true + }, { + id: 'moreActions6', + title: 'Grouped Action 1', + tooltip: 'Do something' + }, { + id: 'moreActions7', + title: 'Grouped Action 2', + tooltip: 'Do something similar' + }], + } as ActionConfig; + + this.listConfig = { + dblClick: false, + multiSelect: false, + selectItems: false, + selectionMatchProp: 'name', + showCheckbox: false, + useExpandItems: false + } as ListConfig; + } + + ngDoCheck(): void { + } + + // Actions + + handleAction($event: Action, item: any): void { + if ($event.title === 'Start') { + item.started = true; + } + this.actionsText = $event.title + ' selected\r\n' + this.actionsText; + } + + handleClick($event: ListEvent): void { + this.actionsText = $event.item.name + ' clicked\r\n' + this.actionsText; + } +} diff --git a/dist-demo/src/app/list/examples/list-example.component.html b/dist-demo/src/app/list/examples/list-example.component.html new file mode 100644 index 000000000..bc404c371 --- /dev/null +++ b/dist-demo/src/app/list/examples/list-example.component.html @@ -0,0 +1,19 @@ +
+
+
+

List View Component Example

+
+
+
+ + + + + + + + + + + +
diff --git a/dist-demo/src/app/list/examples/list-example.component.ts b/dist-demo/src/app/list/examples/list-example.component.ts new file mode 100644 index 000000000..81e13eb37 --- /dev/null +++ b/dist-demo/src/app/list/examples/list-example.component.ts @@ -0,0 +1,31 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +import { TabDirective } from 'ngx-bootstrap/tabs'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'list-example', + templateUrl: './list-example.component.html' +}) +export class ListExampleComponent implements OnInit { + activeTab: string = ''; + + constructor() { + } + + ngOnInit(): void { + } + + ngDoCheck(): void { + } + + // Actions + + tabSelected($event: TabDirective): void { + this.activeTab = $event.heading; + } +} diff --git a/dist-demo/src/app/list/examples/list-example.module.ts b/dist-demo/src/app/list/examples/list-example.module.ts new file mode 100644 index 000000000..5b8a06526 --- /dev/null +++ b/dist-demo/src/app/list/examples/list-example.module.ts @@ -0,0 +1,48 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { BsDropdownConfig, BsDropdownModule } from 'ngx-bootstrap/dropdown'; +import { TabsModule, TabsetConfig } from 'ngx-bootstrap/tabs'; +import { TooltipConfig, TooltipModule } from 'ngx-bootstrap/tooltip'; + +import { ActionModule } from '../../action/action.module'; +import { BasicContentComponent } from './basic-content.component'; +import { ClustersContentComponent } from './clusters-content.component'; +import { DemoComponentsModule } from '../../../demo/components/demo-components.module'; +import { HostsContentComponent } from './hosts-content.component'; +import { ImagesContentComponent } from './images-content.component'; +import { ListModule } from '../list.module'; +import { ListBasicExampleComponent } from './list-basic-example.component'; +import { ListCompoundExampleComponent } from './list-compound-example.component'; +import { ListHeadingExampleComponent } from './list-heading-example.component'; +import { ListExampleComponent } from './list-example.component'; +import { NodesContentComponent } from './nodes-content.component'; + +@NgModule({ + declarations: [ + BasicContentComponent, + ClustersContentComponent, + HostsContentComponent, + ImagesContentComponent, + ListBasicExampleComponent, + ListCompoundExampleComponent, + ListHeadingExampleComponent, + ListExampleComponent, + NodesContentComponent + ], + imports: [ + ActionModule, + BsDropdownModule.forRoot(), + CommonModule, + DemoComponentsModule, + FormsModule, + ListModule, + TabsModule.forRoot(), + TooltipModule.forRoot() + ], + providers: [ BsDropdownConfig, TabsetConfig, TooltipConfig ] +}) +export class ListExampleModule { + constructor() {} +} diff --git a/dist-demo/src/app/list/examples/list-heading-example.component.css b/dist-demo/src/app/list/examples/list-heading-example.component.css new file mode 100644 index 000000000..fa4b9ba5c --- /dev/null +++ b/dist-demo/src/app/list/examples/list-heading-example.component.css @@ -0,0 +1,2 @@ +.actions-placeholder{width:220px}.icon-placeholder{width:30px}.margin-left-40{margin-left:40px} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9saXN0L2V4YW1wbGVzL2xpc3QtaGVhZGluZy1leGFtcGxlLmNvbXBvbmVudC5sZXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBO0VBQ0UsWUFBQTs7QUFHRjtFQUNFLFdBQUE7O0FBR0Y7RUFDRSxpQkFBQSIsInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgKHJlZmVyZW5jZSkgXCIuLi8uLi8uLi9hc3NldHMvc3R5bGVzaGVldHMvcGF0dGVybmZseS1uZ1wiO1xuXG4uYWN0aW9ucy1wbGFjZWhvbGRlciB7XG4gIHdpZHRoOiAyMjBweDtcbn1cblxuLmljb24tcGxhY2Vob2xkZXIge1xuICB3aWR0aDogMzBweDtcbn1cblxuLm1hcmdpbi1sZWZ0LTQwIHtcbiAgbWFyZ2luLWxlZnQ6IDQwcHg7XG59XG4iXSwiZmlsZSI6ImFwcC9saXN0L2V4YW1wbGVzL2xpc3QtaGVhZGluZy1leGFtcGxlLmNvbXBvbmVudC5jc3MifQ== */ diff --git a/dist-demo/src/app/list/examples/list-heading-example.component.html b/dist-demo/src/app/list/examples/list-heading-example.component.html new file mode 100644 index 000000000..290564fa3 --- /dev/null +++ b/dist-demo/src/app/list/examples/list-heading-example.component.html @@ -0,0 +1,151 @@ +
+
+
+
+ + +
+ +
+ +
+
+
+
+
{{item.name}}
+
{{item.address}}
+
+
+
+ {{item.additionalInfo}} + +
+
+
+
+ +
+ +
+
+
+
{{item.name}}
+
{{item.address}}
+
+
+
+ + {{item.hostCount}} Hosts +
+
+ + {{item.clusterCount}} Clusters +
+
+ + {{item.nodeCount}} Nodes +
+
+ + {{item.imageCount}} Images +
+
+
+
+
+ +
+ + {{item.actions}} + +
+
+ + + + +
+ + + +
+
+
+
+
+
+
+
+ +
+ + + +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+

Actions:

+
+
+
+
+ +
+
+
+
+

Code

+
+
+
+
+ + + + + + + + + + + +
+
diff --git a/dist-demo/src/app/list/examples/list-heading-example.component.less b/dist-demo/src/app/list/examples/list-heading-example.component.less new file mode 100644 index 000000000..639ee2b00 --- /dev/null +++ b/dist-demo/src/app/list/examples/list-heading-example.component.less @@ -0,0 +1,13 @@ +@import (reference) "../../../assets/stylesheets/patternfly-ng"; + +.actions-placeholder { + width: 220px; +} + +.icon-placeholder { + width: 30px; +} + +.margin-left-40 { + margin-left: 40px; +} diff --git a/dist-demo/src/app/list/examples/list-heading-example.component.ts b/dist-demo/src/app/list/examples/list-heading-example.component.ts new file mode 100644 index 000000000..84cd572c3 --- /dev/null +++ b/dist-demo/src/app/list/examples/list-heading-example.component.ts @@ -0,0 +1,230 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +import { Action } from '../../action/action'; +import { ActionConfig } from '../../action/action-config'; +import { ListConfig } from '../list-config'; +import { ListEvent } from '../list-event'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'list-heading-example', + styleUrls: ['./list-heading-example.component.less'], + templateUrl: './list-heading-example.component.html' +}) +export class ListHeadingExampleComponent implements OnInit { + actionConfig: ActionConfig; + actionsText: string = ''; + allItems: any[]; + items: any[]; + listConfig: ListConfig; + selectType: string = 'checkbox'; + + constructor() { + } + + ngOnInit(): void { + this.allItems = [{ + // First array item used for heading + name: 'NAME', + actions: 'ACTIONS', + additionalInfo: 'ADDITOINAL INFO', + address: 'ADDRESS' + }, { + name: 'Fred Flintstone', + address: '20 Dinosaur Way', + city: 'Bedrock', + state: 'Washingstone', + typeIcon: 'fa-plane', + clusterCount: 6, + hostCount: 8, + imageCount: 8, + nodeCount: 10 + }, { + name: 'John Smith', + address: '415 East Main Street', + city: 'Norfolk', + state: 'Virginia', + typeIcon: 'fa-magic', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8, + hideExpandingRowToggle: true + }, { + name: 'Frank Livingston', + address: '234 Elm Street', + city: 'Pittsburgh', + state: 'Pennsylvania', + typeIcon: 'fa-gamepad', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Linda McGovern', + address: '22 Oak Street', + city: 'Denver', + state: 'Colorado', + typeIcon: 'fa-linux', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Jim Brown', + address: '72 Bourbon Way', + city: 'Nashville', + state: 'Tennessee', + typeIcon: 'fa-briefcase', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Holly Nichols', + address: '21 Jump Street', + city: 'Hollywood', + state: 'California', + typeIcon: 'fa-coffee', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Marie Edwards', + address: '17 Cross Street', + city: 'Boston', + state: 'Massachusetts', + typeIcon: 'fa-rebel', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }, { + name: 'Pat Thomas', + address: '50 Second Street', + city: 'New York', + state: 'New York', + typeIcon: 'fa-linux', + hostCount: 8, + clusterCount: 6, + nodeCount: 10, + imageCount: 8 + }]; + this.items = this.allItems; + + this.actionConfig = { + primaryActions: [{ + id: 'start', + styleClass: 'btn-primary', + title: 'Start', + tooltip: 'Start the server' + }, { + id: 'action1', + title: 'Action 1', + tooltip: 'Perform an action' + }, { + id: 'action2', + title: 'Action 2', + tooltip: 'Do something else' + }, { + id: 'action3', + title: 'Action 3', + tooltip: 'Do something special' + }], + moreActions: [{ + id: 'moreActions1', + title: 'Action', + tooltip: 'Perform an action' + }, { + id: 'moreActions2', + title: 'Another Action', + tooltip: 'Do something else' + }, { + disabled: true, + id: 'moreActions3', + title: 'Disabled Action', + tooltip: 'Unavailable action', + }, { + id: 'moreActions4', + title: 'Something Else', + tooltip: 'Do something special' + }, { + id: 'moreActions5', + title: '', + separator: true + }, { + id: 'moreActions6', + title: 'Grouped Action 1', + tooltip: 'Do something' + }, { + id: 'moreActions7', + title: 'Grouped Action 2', + tooltip: 'Do something similar' + }], + moreActionsDisabled: false, + moreActionsVisible: true + } as ActionConfig; + + this.listConfig = { + dblClick: false, + multiSelect: false, + selectItems: false, + selectionMatchProp: 'name', + showCheckbox: true, + useExpandItems: false, + useHeading: true + } as ListConfig; + } + + ngDoCheck(): void { + } + + // Actions + + handleAction($event: Action, item: any): void { + if ($event.id === 'start') { + item.started = true; + } + this.actionsText = $event.title + ' selected\r\n' + this.actionsText; + } + + handleSelect($event: ListEvent): void { + this.actionsText = $event.item.name + ' selected\r\n' + this.actionsText; + } + + handleSelectionChange($event: ListEvent): void { + this.actionsText = $event.selectedItems.length + ' items selected\r\n' + this.actionsText; + } + + handleClick($event: ListEvent): void { + this.actionsText = $event.item.name + ' clicked\r\n' + this.actionsText; + } + + handleDblClick($event: ListEvent): void { + this.actionsText = $event.item.name + ' double clicked\r\n' + this.actionsText; + } + + handleCheckboxChange($event: ListEvent): void { + this.actionsText = $event.item.name + ' checked: ' + $event.item.selected + '\r\n' + this.actionsText; + } + + // Row selection + + updateSelectionType(): void { + if (this.selectType === 'checkbox') { + this.listConfig.selectItems = false; + this.listConfig.showCheckbox = true; + } else if (this.selectType === 'row') { + this.listConfig.selectItems = true; + this.listConfig.showCheckbox = false; + } else { + this.listConfig.selectItems = false; + this.listConfig.showCheckbox = false; + } + } +} diff --git a/dist-demo/src/app/list/examples/nodes-content.component.html b/dist-demo/src/app/list/examples/nodes-content.component.html new file mode 100644 index 000000000..4d74208be --- /dev/null +++ b/dist-demo/src/app/list/examples/nodes-content.component.html @@ -0,0 +1,38 @@ +
+
+
    +
  • Node 1
  • +
  • Node 2
  • +
  • Node 3
  • +
  • Node 4
  • +
  • Node 5
  • +
  • Node 6
  • +
  • Node 7
  • +
  • Node 8
  • +
  • Node 9
  • +
  • Node 10
  • +
+
+
+
+
Host Name
+
file1.nay.redhat.com
+
Device Path
+
/dev/disk/pci-0000.05:00-sas-0.2-part1
+
Time
+
January 15, 2016 10:45:11 AM
+
Severity
+
Warning
+
Cluster
+
Cluster 1
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
diff --git a/dist-demo/src/app/list/examples/nodes-content.component.ts b/dist-demo/src/app/list/examples/nodes-content.component.ts new file mode 100644 index 000000000..cb77bca9e --- /dev/null +++ b/dist-demo/src/app/list/examples/nodes-content.component.ts @@ -0,0 +1,22 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'nodes-content', + templateUrl: './nodes-content.component.html' +}) +export class NodesContentComponent implements OnInit { + + constructor() { + } + + ngOnInit(): void { + } + + ngDoCheck(): void { + } +} diff --git a/dist-demo/src/app/notification/examples/notification-example.module.ts b/dist-demo/src/app/notification/examples/notification-example.module.ts new file mode 100644 index 000000000..cec238182 --- /dev/null +++ b/dist-demo/src/app/notification/examples/notification-example.module.ts @@ -0,0 +1,39 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { BsDropdownConfig, BsDropdownModule } from 'ngx-bootstrap/dropdown'; +import { TabsModule, TabsetConfig } from 'ngx-bootstrap/tabs'; + +import { DemoComponentsModule } from '../../../demo/components/demo-components.module'; +import { NotificationModule } from '../notification.module'; +import { NotificationService } from '../notification.service'; +import { NotificationServiceExampleComponent } from './notification-service-example.component'; +import { ToastNotificationBasicExampleComponent } from './toast-notification-basic-example.component'; +import { ToastNotificationExampleComponent } from './toast-notification-example.component'; +import { ToastNotificationListExampleComponent } from './toast-notification-list-example.component'; + +@NgModule({ + declarations: [ + NotificationServiceExampleComponent, + ToastNotificationBasicExampleComponent, + ToastNotificationExampleComponent, + ToastNotificationListExampleComponent + ], + imports: [ + BsDropdownModule.forRoot(), + CommonModule, + DemoComponentsModule, + FormsModule, + NotificationModule, + TabsModule.forRoot() + ], + providers: [ + BsDropdownConfig, + NotificationService, + TabsetConfig + ] +}) +export class NotificationExampleModule { + constructor() {} +} diff --git a/dist-demo/src/app/notification/examples/notification-service-example.component.html b/dist-demo/src/app/notification/examples/notification-service-example.component.html new file mode 100644 index 000000000..b31bdf58d --- /dev/null +++ b/dist-demo/src/app/notification/examples/notification-service-example.component.html @@ -0,0 +1,29 @@ +
+
+
+
+

This example sets the notification service delay to 5 seconds.

+ +
+
+
+
+
+

Code

+
+
+
+
+ + + + + + + + + + + +
+
diff --git a/dist-demo/src/app/notification/examples/notification-service-example.component.ts b/dist-demo/src/app/notification/examples/notification-service-example.component.ts new file mode 100644 index 000000000..94e877636 --- /dev/null +++ b/dist-demo/src/app/notification/examples/notification-service-example.component.ts @@ -0,0 +1,34 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +import { Notification } from '../notification'; +import { NotificationService } from '../notification.service'; +import { NotificationType } from '../notification-type'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'notification-service-example', + templateUrl: './notification-service-example.component.html' +}) +export class NotificationServiceExampleComponent implements OnInit { + notifications: Notification[]; + + constructor(private notificationService: NotificationService) { + this.notifications = this.notificationService.getNotifications(); + + notificationService.setDelay(5000); // default is 8000 + } + + ngOnInit(): void { + this.notificationService.message( + NotificationType.WARNING, + 'Default Header.', + 'Default Message.', + false, + null, + null); + } +} diff --git a/dist-demo/src/app/notification/examples/toast-notification-basic-example.component.html b/dist-demo/src/app/notification/examples/toast-notification-basic-example.component.html new file mode 100644 index 000000000..e19d8e76b --- /dev/null +++ b/dist-demo/src/app/notification/examples/toast-notification-basic-example.component.html @@ -0,0 +1,99 @@ +
+
+
+
+ + +
+
+
+
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+

Code

+
+
+
+
+ + + + + + + + + + + +
+
diff --git a/dist-demo/src/app/notification/examples/toast-notification-basic-example.component.ts b/dist-demo/src/app/notification/examples/toast-notification-basic-example.component.ts new file mode 100644 index 000000000..9a493ac51 --- /dev/null +++ b/dist-demo/src/app/notification/examples/toast-notification-basic-example.component.ts @@ -0,0 +1,98 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +import { Action } from '../../action/action'; +import { NotificationEvent } from '../notification-event'; +import { NotificationType } from '../notification-type'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'toast-notification-basic-example', + templateUrl: './toast-notification-basic-example.component.html' +}) +export class ToastNotificationBasicExampleComponent implements OnInit { + actionText: string = ''; + header: string = 'Default Header.'; + message: string = 'Default Message.'; + moreActions: Action[]; + moreActionsDefault: Action[]; + primaryAction: Action; + showClose: false; + showMoreActions: boolean = false; + type: string; + types: string[]; + + constructor() { + } + + ngOnInit(): void { + this.types = [ + NotificationType.SUCCESS, + NotificationType.INFO, + NotificationType.DANGER, + NotificationType.WARNING + ]; + this.type = this.types[0]; + + this.primaryAction = { + id: 'action1', + name: '', // left empty for input + title: 'Perform an action' + } as Action; + + this.moreActionsDefault = [{ + id: 'moreActions1', + name: 'Action', + title: 'Perform an action' + }, { + id: 'moreActions2', + name: 'Another Action', + title: 'Do something else' + }, { + disabled: true, + id: 'moreActions3', + name: 'Disabled Action', + title: 'Unavailable action' + }, { + id: 'moreActions4', + name: 'Something Else', + title: 'Do something special' + }, { + id: 'moreActions5', + separator: true + }, { + id: 'moreActions6', + name: 'Grouped Action 1', + title: 'Do something' + }, { + id: 'moreActions7', + name: 'Grouped Action 2', + title: 'Do something similar' + }] as Action[]; + } + + ngDoCheck(): void { + if (this.showMoreActions === true) { + this.moreActions = this.moreActionsDefault; + } else { + this.moreActions = undefined; + } + } + + // Action functions + + handleAction($event: NotificationEvent): void { + this.actionText = $event.action.title + '\n' + this.actionText; + } + + handleClose($event: NotificationEvent): void { + this.actionText = 'Close' + '\n' + this.actionText; + } + + handleType(item: string): void { + this.type = item; + } +} diff --git a/dist-demo/src/app/notification/examples/toast-notification-example.component.html b/dist-demo/src/app/notification/examples/toast-notification-example.component.html new file mode 100644 index 000000000..8aad51a62 --- /dev/null +++ b/dist-demo/src/app/notification/examples/toast-notification-example.component.html @@ -0,0 +1,16 @@ +
+
+
+

Toast Notification Component Example

+
+
+
+ + + + + + + + +
diff --git a/dist-demo/src/app/notification/examples/toast-notification-example.component.ts b/dist-demo/src/app/notification/examples/toast-notification-example.component.ts new file mode 100644 index 000000000..87734e767 --- /dev/null +++ b/dist-demo/src/app/notification/examples/toast-notification-example.component.ts @@ -0,0 +1,31 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +import { TabDirective } from 'ngx-bootstrap/tabs'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'toast-notification-example', + templateUrl: './toast-notification-example.component.html' +}) +export class ToastNotificationExampleComponent implements OnInit { + activeTab: string = ''; + + constructor() { + } + + ngOnInit(): void { + } + + ngDoCheck(): void { + } + + // Actions + + tabSelected($event: TabDirective): void { + this.activeTab = $event.heading; + } +} diff --git a/dist-demo/src/app/notification/examples/toast-notification-list-example.component.html b/dist-demo/src/app/notification/examples/toast-notification-list-example.component.html new file mode 100644 index 000000000..ec53f10f4 --- /dev/null +++ b/dist-demo/src/app/notification/examples/toast-notification-list-example.component.html @@ -0,0 +1,105 @@ +
+
+
+
+ + +
+
+
+
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+

Code

+
+
+
+
+ + + + + + + + + + + +
+
diff --git a/dist-demo/src/app/notification/examples/toast-notification-list-example.component.ts b/dist-demo/src/app/notification/examples/toast-notification-list-example.component.ts new file mode 100644 index 000000000..968dd4f34 --- /dev/null +++ b/dist-demo/src/app/notification/examples/toast-notification-list-example.component.ts @@ -0,0 +1,122 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +import { Action } from '../../action/action'; +import { Notification } from '../notification'; +import { NotificationEvent } from '../notification-event'; +import { NotificationType } from '../notification-type'; +import { NotificationService } from '../notification.service'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'toast-notification-list-example', + templateUrl: './toast-notification-list-example.component.html' +}) +export class ToastNotificationListExampleComponent implements OnInit { + actionText: string = ''; + header: string = 'Default Header.'; + isPersistent: boolean = false; + message: string = 'Default Message.'; + moreActions: Action[]; + moreActionsDefault: Action[]; + notifications: Notification[]; + primaryAction: Action; + showClose: boolean = false; + showMoreActions: boolean = false; + type: string; + types: string[]; + typeMap: any; + + constructor(private notificationService: NotificationService) { + } + + ngOnInit(): void { + this.notifications = this.notificationService.getNotifications(); + + this.typeMap = { + 'info': NotificationType.INFO, + 'success': NotificationType.SUCCESS, + 'warning': NotificationType.WARNING, + 'danger': NotificationType.DANGER + }; + this.types = Object.keys(this.typeMap); + this.type = this.types[0]; + + this.primaryAction = { + id: 'action1', + name: '', // left empty for input + title: 'Perform an action' + } as Action; + + this.moreActionsDefault = [{ + id: 'moreActions1', + name: 'Action', + title: 'Perform an action' + }, { + id: 'moreActions2', + name: 'Another Action', + title: 'Do something else' + }, { + disabled: true, + id: 'moreActions3', + name: 'Disabled Action', + title: 'Unavailable action' + }, { + id: 'moreActions4', + name: 'Something Else', + title: 'Do something special' + }, { + id: 'moreActions5', + separator: true + }, { + id: 'moreActions6', + name: 'Grouped Action 1', + title: 'Do something' + }, { + id: 'moreActions7', + name: 'Grouped Action 2', + title: 'Do something similar' + }] as Action[]; + } + + ngDoCheck(): void { + if (this.showMoreActions === true) { + this.moreActions = this.moreActionsDefault; + } else { + this.moreActions = undefined; + } + } + + // Action functions + + handleAction($event: NotificationEvent): void { + // Get the Action we provided and output its name + this.actionText = $event.action.title + '\n' + this.actionText; + } + + handleClose($event: NotificationEvent): void { + this.actionText = 'Close' + '\n' + this.actionText; + this.notificationService.remove($event.notification); + } + + handleType(item: string): void { + this.type = item; + } + + handleViewingChange($event: NotificationEvent): void { + this.notificationService.setViewing($event.notification, $event.isViewing); + } + + notify(): void { + this.notificationService.message( + this.typeMap[this.type], + this.header, + this.message, + this.isPersistent, + this.primaryAction, + this.moreActions); + } +} diff --git a/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.css b/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.css new file mode 100644 index 000000000..650083cea --- /dev/null +++ b/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.css @@ -0,0 +1,2 @@ +.chars-remaining-pf>span,.vert-align{vertical-align:middle}.example-container{width:1180px}textarea{resize:none} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9yZW1haW5pbmctY2hhcnMtY291bnQvZXhhbXBsZXMvcmVtYWluaW5nLWNoYXJzLWNvdW50LWV4YW1wbGUuY29tcG9uZW50Lmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsbUJBQ0U7RUFDRSxzQkFBQTs7QUFJSjtFQUNFLGFBQUE7O0FBR0Y7RUFDRSxZQUFBOztBQUdGO0VBQ0Usc0JBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJAaW1wb3J0IChyZWZlcmVuY2UpIFwiLi4vLi4vLi4vYXNzZXRzL3N0eWxlc2hlZXRzL3BhdHRlcm5mbHktbmdcIjtcblxuLmNoYXJzLXJlbWFpbmluZy1wZiB7XG4gID4gc3BhbiB7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxufVxuXG4uZXhhbXBsZS1jb250YWluZXIge1xuICB3aWR0aDogMTE4MHB4O1xufVxuXG50ZXh0YXJlYSB7XG4gIHJlc2l6ZTogbm9uZTtcbn1cblxuLnZlcnQtYWxpZ24ge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuIl0sImZpbGUiOiJhcHAvcmVtYWluaW5nLWNoYXJzLWNvdW50L2V4YW1wbGVzL3JlbWFpbmluZy1jaGFycy1jb3VudC1leGFtcGxlLmNvbXBvbmVudC5jc3MifQ== */ diff --git a/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.html b/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.html new file mode 100644 index 000000000..ff55cf37b --- /dev/null +++ b/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.html @@ -0,0 +1,96 @@ +
+
+
+

Remaining Chars Directive Example

+
+
+
+
+

Max limit: 20, warn when 5 or less remaining, disable button after max limit

+
+
+
+ + +
+ + + + +
+
+

Max limit: 10, warn when 2 or less remaining, block input after max limit

+
+
+
+
+ + +
+ + + + + + +
+
+
+

Max limit: 10, warn when 5 or less remaining, block input after max limit

+
+
+ + + + + Remaining + +
+
+
+
+
+

Code

+
+
+
+
+ + + + + + + + + + + +
+
diff --git a/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.less b/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.less new file mode 100644 index 000000000..24480285e --- /dev/null +++ b/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.less @@ -0,0 +1,19 @@ +@import (reference) "../../../assets/stylesheets/patternfly-ng"; + +.chars-remaining-pf { + > span { + vertical-align: middle; + } +} + +.example-container { + width: 1180px; +} + +textarea { + resize: none; +} + +.vert-align { + vertical-align: middle; +} diff --git a/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.ts b/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.ts new file mode 100644 index 000000000..bd084a2a4 --- /dev/null +++ b/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.component.ts @@ -0,0 +1,45 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'remaining-chars-count-example', + styleUrls: ['./remaining-chars-count-example.component.less'], + templateUrl: './remaining-chars-count-example.component.html' +}) +export class RemainingCharsCountExampleComponent implements OnInit { + charsMaxLimitExceeded: any = { + 'example1': false, + 'example2': false, + 'example3': false + } + + constructor() { + } + + ngOnInit(): void { + } + + // Actions + + /** + * Handle over chars max limit event + * + * @param $event The number of remaining chars + */ + handleOverCharsMaxLimit($event: number, id: string): void { + this.charsMaxLimitExceeded[id] = true; + } + + /** + * Handle under chars max limit event + * + * @param $event The number of remaining chars + */ + handleUnderCharsMaxLimit($event: number, id: string): void { + this.charsMaxLimitExceeded[id] = false; + } +} diff --git a/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.module.ts b/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.module.ts new file mode 100644 index 000000000..1680a4429 --- /dev/null +++ b/dist-demo/src/app/remaining-chars-count/examples/remaining-chars-count-example.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TabsModule, TabsetConfig } from 'ngx-bootstrap/tabs'; + +import { DemoComponentsModule } from '../../../demo/components/demo-components.module'; +import { RemainingCharsCountModule } from '../remaining-chars-count.module'; +import { RemainingCharsCountExampleComponent } from './remaining-chars-count-example.component'; + +@NgModule({ + declarations: [ RemainingCharsCountExampleComponent ], + imports: [ + CommonModule, + DemoComponentsModule, + RemainingCharsCountModule, + TabsModule.forRoot(), + ], + providers: [ TabsetConfig ] +}) +export class RemainingCharsCountExampleModule { + constructor() {} +} diff --git a/dist-demo/src/app/sample/examples/sample-example.component.html b/dist-demo/src/app/sample/examples/sample-example.component.html new file mode 100644 index 000000000..ffbd4bb55 --- /dev/null +++ b/dist-demo/src/app/sample/examples/sample-example.component.html @@ -0,0 +1,51 @@ +
+
+
+

Sample Component Example

+
+
+
+
+
+
+ +
+
+
+
+
+

Component Options

+
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+

Code

+
+
+
+
+ + + + + + + + +
+
diff --git a/dist-demo/src/app/sample/examples/sample-example.component.ts b/dist-demo/src/app/sample/examples/sample-example.component.ts new file mode 100644 index 000000000..a8383b734 --- /dev/null +++ b/dist-demo/src/app/sample/examples/sample-example.component.ts @@ -0,0 +1,33 @@ +import { + Component, + OnInit +} from '@angular/core'; + +@Component({ + selector: 'sample-example', + styles: [` + .sample-form .form-horizontal .form-group { + margin-left: 0px; + } + + .padding-top-15 { + padding-top: 15px; + } + + .padding-bottom-15 { + padding-bottom: 15px; + } + `], + templateUrl: './sample-example.component.html' +}) +export class SampleExampleComponent implements OnInit { + + disableComponent: Boolean = false; + componentLabel: string = 'label here'; + + constructor() { + } + + ngOnInit(): void { + } +} diff --git a/dist-demo/src/app/sample/examples/sample-example.module.ts b/dist-demo/src/app/sample/examples/sample-example.module.ts new file mode 100644 index 000000000..ef58b4af2 --- /dev/null +++ b/dist-demo/src/app/sample/examples/sample-example.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { TabsModule, TabsetConfig } from 'ngx-bootstrap/tabs'; + +import { DemoComponentsModule } from '../../../demo/components/demo-components.module'; +import { SampleModule } from '../sample.module'; +import { SampleExampleComponent } from './sample-example.component'; + +@NgModule({ + imports: [ + CommonModule, + DemoComponentsModule, + FormsModule, + SampleModule, + TabsModule.forRoot() + ], + declarations: [ SampleExampleComponent ], + exports: [ SampleExampleComponent ], + providers: [ TabsetConfig ] +}) +export class SampleExampleModule { + constructor() {} +} diff --git a/dist-demo/src/app/search-highlight/examples/search-highlight-example.component.html b/dist-demo/src/app/search-highlight/examples/search-highlight-example.component.html new file mode 100644 index 000000000..a8688a825 --- /dev/null +++ b/dist-demo/src/app/search-highlight/examples/search-highlight-example.component.html @@ -0,0 +1,38 @@ + +
+
+
+

Search Highlight Pipe Example

+
+
+
+
+
+
+ + +
+
+
+
+
+

Code

+
+
+
+
+ + + + + + + + + + + +
+
+ diff --git a/dist-demo/src/app/search-highlight/examples/search-highlight-example.component.ts b/dist-demo/src/app/search-highlight/examples/search-highlight-example.component.ts new file mode 100644 index 000000000..fc3e4c62e --- /dev/null +++ b/dist-demo/src/app/search-highlight/examples/search-highlight-example.component.ts @@ -0,0 +1,19 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'search-highlight-example', + templateUrl: './search-highlight-example.component.html' +}) +export class SearchHighlightExampleComponent implements OnInit { + + constructor() { + } + + ngOnInit(): void { + } +} diff --git a/dist-demo/src/app/search-highlight/examples/search-highlight-example.module.ts b/dist-demo/src/app/search-highlight/examples/search-highlight-example.module.ts new file mode 100644 index 000000000..cc32c8c4e --- /dev/null +++ b/dist-demo/src/app/search-highlight/examples/search-highlight-example.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { TabsModule, TabsetConfig } from 'ngx-bootstrap/tabs'; + +import { DemoComponentsModule } from '../../../demo/components/demo-components.module'; +import { SearchHighlightModule } from '../search-highlight.module'; +import { SearchHighlightExampleComponent } from './search-highlight-example.component'; + +@NgModule({ + declarations: [ SearchHighlightExampleComponent ], + imports: [ + CommonModule, + DemoComponentsModule, + FormsModule, + SearchHighlightModule, + TabsModule.forRoot(), + ], + providers: [ TabsetConfig ] +}) +export class SearchHighlightExampleModule { + constructor() {} +} diff --git a/dist-demo/src/app/sort/examples/sort-example.component.html b/dist-demo/src/app/sort/examples/sort-example.component.html new file mode 100644 index 000000000..a6abd7706 --- /dev/null +++ b/dist-demo/src/app/sort/examples/sort-example.component.html @@ -0,0 +1,58 @@ +
+
+
+

Sort Component Example

+
+
+
+
+
+
+ +
+
+
+
+
+

Valid Items:

+
+
+
+
+
+
+
+
+ {{item.name}} +
+
+ {{item.address}} +
+
+ {{item.birthMonth}} +
+
+
+
+
+
+
+
+

Code

+ +
+
+
+ + + + + + + + + + + +
+
diff --git a/dist-demo/src/app/sort/examples/sort-example.component.ts b/dist-demo/src/app/sort/examples/sort-example.component.ts new file mode 100644 index 000000000..d29011ccd --- /dev/null +++ b/dist-demo/src/app/sort/examples/sort-example.component.ts @@ -0,0 +1,105 @@ +import { + Component, + OnInit +} from '@angular/core'; + +import { SortConfig } from '../sort-config'; +import { SortField } from '../sort-field'; +import { SortEvent } from '../sort-event'; + +@Component({ + selector: 'sort-example', + templateUrl: './sort-example.component.html' +}) +export class SortExampleComponent implements OnInit { + + allItems: any[]; + items: any[]; + isAscendingSort: boolean = true; + sortConfig: SortConfig; + currentSortField: SortField; + + monthVals: any = { + 'January': 1, + 'February': 2, + 'March': 3, + 'April': 4, + 'May': 5, + 'June': 6, + 'July': 7, + 'August': 8, + 'September': 9, + 'October': 10, + 'November': 11, + 'December': 12 + }; + + constructor() { + } + + ngOnInit(): void { + this.allItems = [{ + name: 'Fred Flintstone', + address: '20 Dinosaur Way, Bedrock, Washingstone', + birthMonth: 'February' + }, { + name: 'John Smith', + address: '415 East Main Street, Norfolk, Virginia', + birthMonth: 'October' + }, { + name: 'Frank Livingston', + address: '234 Elm Street, Pittsburgh, Pennsylvania', + birthMonth: 'March' + }, { + name: 'Judy Green', + address: '2 Apple Boulevard, Cincinatti, Ohio', + birthMonth: 'December' + }, { + name: 'Pat Thomas', + address: '50 Second Street, New York, New York', + birthMonth: 'February' + }]; + this.items = this.allItems; + + this.sortConfig = { + fields: [{ + id: 'name', + title: 'Name', + sortType: 'alpha' + }, { + id: 'address', + title: 'Address', + sortType: 'alpha' + }, { + id: 'birthMonth', + title: 'Birth Month', + sortType: 'alpha' + }], + isAscending: this.isAscendingSort + } as SortConfig; + } + + // Sort functions + + compare(item1: any, item2: any): number { + let compValue = 0; + if (this.currentSortField.id === 'name') { + compValue = item1.name.localeCompare(item2.name); + } else if (this.currentSortField.id === 'address') { + compValue = item1.address.localeCompare(item2.address); + } else if (this.currentSortField.id === 'birthMonth') { + compValue = this.monthVals[item1.birthMonth] - this.monthVals[item2.birthMonth]; + } + + if (!this.isAscendingSort) { + compValue = compValue * -1; + } + return compValue; + } + + sortChange($event: SortEvent): void { + this.currentSortField = $event.field; + this.isAscendingSort = $event.isAscending; + this.items.sort((item1: any, item2: any) => this.compare(item1, item2)); + } +} diff --git a/dist-demo/src/app/sort/examples/sort-example.module.ts b/dist-demo/src/app/sort/examples/sort-example.module.ts new file mode 100644 index 000000000..b3fd88903 --- /dev/null +++ b/dist-demo/src/app/sort/examples/sort-example.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { TabsModule, TabsetConfig } from 'ngx-bootstrap/tabs'; + +import { DemoComponentsModule } from '../../../demo/components/demo-components.module'; +import { SortModule } from '../sort.module'; +import { SortExampleComponent } from './sort-example.component'; + +@NgModule({ + imports: [ + CommonModule, + DemoComponentsModule, + FormsModule, + SortModule, + TabsModule.forRoot() + ], + declarations: [ SortExampleComponent ], + exports: [ SortExampleComponent ], + providers: [ TabsetConfig ] +}) +export class SortExampleModule { + constructor() {} +} diff --git a/dist-demo/src/app/toolbar/examples/toolbar-example.component.html b/dist-demo/src/app/toolbar/examples/toolbar-example.component.html new file mode 100644 index 000000000..733938ace --- /dev/null +++ b/dist-demo/src/app/toolbar/examples/toolbar-example.component.html @@ -0,0 +1,113 @@ +
+
+
+

Toolbar Component Example

+
+
+
+
+
+
+ + + + + + + + + +
+
+
+
+
+

Valid Items:

+
+
+
+
+
+
+
+
+ {{item.name}} +
+
+ {{item.address}} +
+
+ {{item.birthMonth}} +
+
+ {{item.weekDay}} +
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+

Code

+
+
+
+
+ + + + + + + + + + + +
+
diff --git a/dist-demo/src/app/toolbar/examples/toolbar-example.component.ts b/dist-demo/src/app/toolbar/examples/toolbar-example.component.ts new file mode 100644 index 000000000..7c27a3af7 --- /dev/null +++ b/dist-demo/src/app/toolbar/examples/toolbar-example.component.ts @@ -0,0 +1,399 @@ +import { + Component, + OnInit, + ViewEncapsulation +} from '@angular/core'; + +import { Action } from '../../action/action'; +import { ActionConfig } from '../../action/action-config'; +import { Filter } from '../../filter/filter'; +import { FilterConfig } from '../../filter/filter-config'; +import { FilterField } from '../../filter/filter-field'; +import { FilterEvent } from '../../filter/filter-event'; +import { SortConfig } from '../../sort/sort-config'; +import { SortField } from '../../sort/sort-field'; +import { SortEvent } from '../../sort/sort-event'; +import { ToolbarConfig } from '../toolbar-config'; +import { ToolbarView } from '../toolbar-view'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'toolbar-example', + templateUrl: './toolbar-example.component.html' +}) +export class ToolbarExampleComponent implements OnInit { + actionConfig: ActionConfig; + actionsText: string = ''; + allItems: any[]; + filterConfig: FilterConfig; + filtersText: string = ''; + items: any[]; + isAscendingSort: boolean = true; + separator: Object; + sortConfig: SortConfig; + currentSortField: SortField; + toolbarConfig: ToolbarConfig; + weekDayQueries: any[]; + + monthVals: any = { + 'January': 1, + 'February': 2, + 'March': 3, + 'April': 4, + 'May': 5, + 'June': 6, + 'July': 7, + 'August': 8, + 'September': 9, + 'October': 10, + 'November': 11, + 'December': 12 + }; + + weekDayVals: any = { + 'Sunday': 1, + 'Monday': 2, + 'Tuesday': 3, + 'Wednesday': 4, + 'Thursday': 5, + 'Friday': 6, + 'Saturday': 7 + }; + + constructor() { + } + + ngOnInit(): void { + this.allItems = [{ + name: 'Fred Flintstone', + address: '20 Dinosaur Way, Bedrock, Washingstone', + birthMonth: 'February', + birthMonthId: 'month2', + weekDay: 'Sunday', + weekdayId: 'day1' + }, { + name: 'John Smith', address: '415 East Main Street, Norfolk, Virginia', + birthMonth: 'October', + birthMonthId: '10', + weekDay: 'Monday', + weekdayId: 'day2' + }, { + name: 'Frank Livingston', + address: '234 Elm Street, Pittsburgh, Pennsylvania', + birthMonth: 'March', + birthMonthId: 'month3', + weekDay: 'Tuesday', + weekdayId: 'day3' + }, { + name: 'Judy Green', + address: '2 Apple Boulevard, Cincinatti, Ohio', + birthMonth: 'December', + birthMonthId: 'month12', + weekDay: 'Wednesday', + weekdayId: 'day4' + }, { + name: 'Pat Thomas', + address: '50 Second Street, New York, New York', + birthMonth: 'February', + birthMonthId: 'month2', + weekDay: 'Thursday', + weekdayId: 'day5' + }]; + this.items = this.allItems; + + this.weekDayQueries = [{ + id: 'day1', + value: 'Sunday' + }, { + id: 'day2', + value: 'Monday' + }, { + id: 'day3', + value: 'Tuesday' + }, { + id: 'day4', + value: 'Wednesday' + }, { + id: 'day5', + value: 'Thursday' + }, { + id: 'day6', + value: 'Friday' + }, { + id: 'day7', + value: 'Saturday' + }]; + + this.filterConfig = { + fields: [{ + id: 'name', + title: 'Name', + placeholder: 'Filter by Name...', + type: 'text' + }, { + id: 'address', + title: 'Address', + placeholder: 'Filter by Address...', + type: 'text' + }, { + id: 'birthMonth', + title: 'Birth Month', + placeholder: 'Filter by Birth Month...', + type: 'select', + queries: [{ + id: 'month1', + value: 'January' + }, { + id: 'month2', + value: 'February' + }, { + id: 'month3', + value: 'March' + }, { + id: 'month4', + value: 'April' + }, { + id: 'month5', + value: 'May' + }, { + id: 'month6', + value: 'June' + }, { + id: 'month7', + value: 'July' + }, { + id: 'month8', + value: 'August' + }, { + id: 'month9', + value: 'September' + }, { + id: 'month10', + value: 'October' + }, { + id: 'month11', + value: 'November' + }, { + id: 'month12', + value: 'December' + }] + }, { + id: 'weekDay', + title: 'Week Day', + placeholder: 'Filter by Week Day...', + type: 'typeahead', + queries: [ + ...this.weekDayQueries + ] + }] as FilterField[], + resultsCount: this.items.length, + appliedFilters: [] + } as FilterConfig; + + this.sortConfig = { + fields: [{ + id: 'name', + title: 'Name', + sortType: 'alpha' + }, { + id: 'address', + title: 'Address', + sortType: 'alpha' + }, { + id: 'birthMonth', + title: 'Birth Month', + sortType: 'alpha' + }, { + id: 'weekDay', + title: 'Week Day', + sortType: 'alpha' + }], + isAscending: this.isAscendingSort + } as SortConfig; + + this.actionConfig = { + primaryActions: [{ + id: 'action1', + title: 'Action 1', + tooltip: 'Do the first thing' + }, { + id: 'action2', + title: 'Action 2', + tooltip: 'Do something else' + }], + moreActions: [{ + id: 'moreActions1', + title: 'Action', + tooltip: 'Perform an action' + }, { + id: 'moreActions2', + title: 'Another Action', + tooltip: 'Do something else' + }, { + disabled: true, + id: 'moreActions3', + title: 'Disabled Action', + tooltip: 'Unavailable action', + }, { + id: 'moreActions4', + title: 'Something Else', + tooltip: 'Do something special' + }, { + id: 'moreActions5', + title: '', + separator: true + }, { + id: 'moreActions6', + title: 'Grouped Action 1', + tooltip: 'Do something' + }, { + id: 'moreActions7', + title: 'Grouped Action 2', + tooltip: 'Do something similar' + }] + } as ActionConfig; + + this.toolbarConfig = { + actionConfig: this.actionConfig, + filterConfig: this.filterConfig, + sortConfig: this.sortConfig, + views: [{ + id: 'listView', + iconStyleClass: 'fa fa-th-list', + tooltip: 'List View' + }, { + id: 'tableView', + iconStyleClass: 'fa fa-table', + tooltip: 'Table View' + }] + } as ToolbarConfig; + } + + // Actions + + doAdd(): void { + this.actionsText = 'Add Action\n' + this.actionsText; + } + + handleAction(action: Action): void { + this.actionsText = action.title + '\n' + this.actionsText; + let test = ''; + } + + optionSelected(option: number): void { + this.actionsText = 'Option ' + option + ' selected\n' + this.actionsText; + } + + // Filter + + applyFilters(filters: Filter[]): void { + this.items = []; + if (filters && filters.length > 0) { + this.allItems.forEach((item) => { + if (this.matchesFilters(item, filters)) { + this.items.push(item); + } + }); + } else { + this.items = this.allItems; + } + this.toolbarConfig.filterConfig.resultsCount = this.items.length; + } + + // Handle filter changes + filterChanged($event: FilterEvent): void { + this.filtersText = ''; + $event.appliedFilters.forEach((filter) => { + this.filtersText += filter.field.title + ' : ' + filter.value + '\n'; + }); + this.applyFilters($event.appliedFilters); + this.filterFieldSelected($event); + } + + // Reset filtered queries + filterFieldSelected($event: FilterEvent): void { + this.filterConfig.fields.forEach((field) => { + if (field.id === 'weekDay') { + field.queries = [ + ...this.weekDayQueries + ]; + } + }); + } + + matchesFilter(item: any, filter: Filter): boolean { + let match = true; + if (filter.field.id === 'name') { + match = item.name.match(filter.value) !== null; + } else if (filter.field.id === 'address') { + match = item.address.match(filter.value) !== null; + } else if (filter.field.id === 'birthMonth') { + match = item.birthMonth === filter.value; + } else if (filter.field.id === 'weekDay') { + match = item.weekDay === filter.value; + } + return match; + } + + matchesFilters(item: any, filters: Filter[]): boolean { + let matches = true; + filters.forEach((filter) => { + if (!this.matchesFilter(item, filter)) { + matches = false; + return matches; + } + }); + return matches; + } + + // Filter queries for type ahead + filterQueries($event: FilterEvent) { + const index = (this.filterConfig.fields as any).findIndex((i: any) => i.id === $event.field.id); + let val = $event.value.trim(); + + if (this.filterConfig.fields[index].id === 'weekDay') { + this.filterConfig.fields[index].queries = [ + ...this.weekDayQueries.filter((item: any) => { + if (item.value) { + return (item.value.toLowerCase().indexOf(val.toLowerCase()) > -1); + } else { + return true; + } + }) + ]; + } + } + + // Sort + + compare(item1: any, item2: any): number { + let compValue = 0; + if (this.currentSortField.id === 'name') { + compValue = item1.name.localeCompare(item2.name); + } else if (this.currentSortField.id === 'address') { + compValue = item1.address.localeCompare(item2.address); + } else if (this.currentSortField.id === 'birthMonth') { + compValue = this.monthVals[item1.birthMonth] - this.monthVals[item2.birthMonth]; + } else if (this.currentSortField.id === 'weekDay') { + compValue = this.weekDayVals[item1.weekDay] - this.weekDayVals[item2.weekDay]; + } + + if (!this.isAscendingSort) { + compValue = compValue * -1; + } + return compValue; + } + + // Handle sort changes + sortChanged($event: SortEvent): void { + this.currentSortField = $event.field; + this.isAscendingSort = $event.isAscending; + this.items.sort((item1: any, item2: any) => this.compare(item1, item2)); + } + + // View + + viewSelected(currentView: ToolbarView): void { + this.sortConfig.visible = (currentView.id === 'tableView' ? false : true); + } +} diff --git a/dist-demo/src/app/toolbar/examples/toolbar-example.module.ts b/dist-demo/src/app/toolbar/examples/toolbar-example.module.ts new file mode 100644 index 000000000..fa56961df --- /dev/null +++ b/dist-demo/src/app/toolbar/examples/toolbar-example.module.ts @@ -0,0 +1,28 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { BsDropdownConfig, BsDropdownModule } from 'ngx-bootstrap/dropdown'; +import { TabsModule, TabsetConfig } from 'ngx-bootstrap/tabs'; + +import { ActionModule } from '../../action/action.module'; +import { DemoComponentsModule } from '../../../demo/components/demo-components.module'; +import { FilterModule } from '../../filter/filter.module'; +import { ToolbarExampleComponent } from './toolbar-example.component'; +import { ToolbarModule } from '../toolbar.module'; + +@NgModule({ + declarations: [ ToolbarExampleComponent ], + imports: [ + ActionModule, + BsDropdownModule.forRoot(), + CommonModule, + DemoComponentsModule, + FilterModule, + TabsModule.forRoot(), + ToolbarModule + ], + providers: [ BsDropdownConfig, TabsetConfig ] +}) +export class ToolbarExampleModule { + constructor() {} +} diff --git a/dist-demo/vendor.0.css b/dist-demo/vendor.0.css new file mode 100644 index 000000000..1d1066d7a --- /dev/null +++ b/dist-demo/vendor.0.css @@ -0,0 +1,18233 @@ +/* PatternFly */ +@font-face { + font-family: "Open Sans"; + font-style: normal; + font-weight: 300; + src: url(assets/fonts/OpenSans-Light-webfont.eot); + /* IE9 Compat Modes */ + src: local("Open Sans Light"), local("OpenSans-Light"), url(assets/fonts/OpenSans-Light-webfont.eot?#iefix) format("embedded-opentype"), url(assets/fonts/OpenSans-Light-webfont.woff2) format("woff2"), url(assets/fonts/OpenSans-Light-webfont.woff) format("woff"), url(assets/fonts/OpenSans-Light-webfont.ttf) format("truetype"), url(assets/fonts/OpenSans-Light-webfont.svg#OpenSans) format("svg"); + /* Legacy iOS */ +} +@font-face { + font-family: "Open Sans"; + font-style: normal; + font-weight: 400; + src: url(assets/fonts/OpenSans-Regular-webfont.eot); + /* IE9 Compat Modes */ + src: local("Open Sans"), local("OpenSans"), url(assets/fonts/OpenSans-Regular-webfont.eot?#iefix) format("embedded-opentype"), url(assets/fonts/OpenSans-Regular-webfont.woff2) format("woff2"), url(assets/fonts/OpenSans-Regular-webfont.woff) format("woff"), url(assets/fonts/OpenSans-Regular-webfont.ttf) format("truetype"), url(assets/fonts/OpenSans-Regular-webfont.svg#OpenSans) format("svg"); + /* Legacy iOS */ +} +@font-face { + font-family: "Open Sans"; + font-style: italic; + font-weight: 300; + src: url(assets/fonts/OpenSans-LightItalic-webfont.eot); + /* IE9 Compat Modes */ + src: local("Open Sans Light Italic"), local("OpenSansLight-Italic"), url(assets/fonts/OpenSans-LightItalic-webfont.eot?#iefix) format("embedded-opentype"), url(assets/fonts/OpenSans-LightItalic-webfont.woff2) format("woff2"), url(assets/fonts/OpenSans-LightItalic-webfont.woff) format("woff"), url(assets/fonts/OpenSans-LightItalic-webfont.ttf) format("truetype"), url(assets/fonts/OpenSans-LightItalic-webfont.svg#OpenSans) format("svg"); + /* Legacy iOS */ +} +@font-face { + font-family: "Open Sans"; + font-style: italic; + font-weight: 400; + src: url(assets/fonts/OpenSans-Italic-webfont.eot); + /* IE9 Compat Modes */ + src: local("Open Sans Italic"), local("OpenSans-Italic"), url(assets/fonts/OpenSans-Italic-webfont.eot?#iefix) format("embedded-opentype"), url(assets/fonts/OpenSans-Italic-webfont.woff2) format("woff2"), url(assets/fonts/OpenSans-Italic-webfont.woff) format("woff"), url(assets/fonts/OpenSans-Italic-webfont.ttf) format("truetype"), url(assets/fonts/OpenSans-Italic-webfont.svg#OpenSans) format("svg"); + /* Legacy iOS */ +} +@font-face { + font-family: "Open Sans"; + font-style: normal; + font-weight: 600; + src: url(assets/fonts/OpenSans-Semibold-webfont.eot); + /* IE9 Compat Modes */ + src: local("Open Sans Semibold"), local("OpenSans-Semibold-webfont"), url(assets/fonts/OpenSans-Semibold-webfont.eot?#iefix) format("embedded-opentype"), url(assets/fonts/OpenSans-Semibold-webfont.woff2) format("woff2"), url(assets/fonts/OpenSans-Semibold-webfont.woff) format("woff"), url(assets/fonts/OpenSans-Semibold-webfont.ttf) format("truetype"), url(assets/fonts/OpenSans-Semibold-webfont.svg#OpenSans) format("svg"); + /* Legacy iOS */ +} +@font-face { + font-family: "Open Sans"; + font-style: italic; + font-weight: 600; + src: url(assets/fonts/OpenSans-SemiboldItalic-webfont.eot); + /* IE9 Compat Modes */ + src: local("Open Sans Semibold Italic"), local("OpenSans-SemiboldItalic-webfont"), url(assets/fonts/OpenSans-SemiboldItalic-webfont.eot?#iefix) format("embedded-opentype"), url(assets/fonts/OpenSans-SemiboldItalic-webfont.woff2) format("woff2"), url(assets/fonts/OpenSans-SemiboldItalic-webfont.woff) format("woff"), url(assets/fonts/OpenSans-SemiboldItalic-webfont.ttf) format("truetype"), url(assets/fonts/OpenSans-SemiboldItalic-webfont.svg#OpenSans) format("svg"); + /* Legacy iOS */ +} +@font-face { + font-family: "Open Sans"; + font-style: normal; + font-weight: 700; + src: url(assets/fonts/OpenSans-Bold-webfont.eot); + /* IE9 Compat Modes */ + src: local("Open Sans Bold"), local("OpenSans-Bold"), url(assets/fonts/OpenSans-Bold-webfont.eot?#iefix) format("embedded-opentype"), url(assets/fonts/OpenSans-Bold-webfont.woff2) format("woff2"), url(assets/fonts/OpenSans-Bold-webfont.woff) format("woff"), url(assets/fonts/OpenSans-Bold-webfont.ttf) format("truetype"), url(assets/fonts/OpenSans-Bold-webfont.svg#OpenSans) format("svg"); + /* Legacy iOS */ +} +@font-face { + font-family: "Open Sans"; + font-style: italic; + font-weight: 700; + src: url(assets/fonts/OpenSans-BoldItalic-webfont.eot); + /* IE9 Compat Modes */ + src: local("Open Sans Bold Italic"), local("OpenSans-BoldItalic"), url(assets/fonts/OpenSans-BoldItalic-webfont.eot?#iefix) format("embedded-opentype"), url(assets/fonts/OpenSans-BoldItalic-webfont.woff2) format("woff2"), url(assets/fonts/OpenSans-BoldItalic-webfont.woff) format("woff"), url(assets/fonts/OpenSans-BoldItalic-webfont.ttf) format("truetype"), url(assets/fonts/OpenSans-BoldItalic-webfont.svg#OpenSans) format("svg"); + /* Legacy iOS */ +} +@font-face { + font-family: "Open Sans"; + font-style: italic; + font-weight: 800; + src: url(assets/fonts/OpenSans-ExtraBoldItalic-webfont.eot); + /* IE9 Compat Modes */ + src: local("Open Sans Extrabold Italic"), local("OpenSans-ExtraboldItalic"), url(assets/fonts/OpenSans-ExtraBoldItalic-webfont.eot?#iefix) format("embedded-opentype"), url(assets/fonts/OpenSans-ExtraBoldItalic-webfont.woff2) format("woff2"), url(assets/fonts/OpenSans-ExtraBoldItalic-webfont.woff) format("woff"), url(assets/fonts/OpenSans-ExtraBoldItalic-webfont.ttf) format("truetype"), url(assets/fonts/OpenSans-ExtraBoldItalic-webfont.svg#OpenSans) format("svg"); + /* Legacy iOS */ +} +@font-face { + font-family: "Open Sans"; + font-style: normal; + font-weight: 800; + src: url(assets/fonts/OpenSans-ExtraBold-webfont.eot); + /* IE9 Compat Modes */ + src: local("Open Sans Extrabold"), local("OpenSans-Extrabold"), url(assets/fonts/OpenSans-ExtraBold-webfont.eot?#iefix) format("embedded-opentype"), url(assets/fonts/OpenSans-ExtraBold-webfont.woff2) format("woff2"), url(assets/fonts/OpenSans-ExtraBold-webfont.woff) format("woff"), url(assets/fonts/OpenSans-ExtraBold-webfont.ttf) format("truetype"), url(assets/fonts/OpenSans-ExtraBold-webfont.svg#OpenSans) format("svg"); + /* Legacy iOS */ +} +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; + box-shadow: none !important; + text-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + src: url(assets/fonts/glyphicons-halflings-regular.eot); + src: url(assets/fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'), url(assets/fonts/glyphicons-halflings-regular.woff2) format('woff2'), url(assets/fonts/glyphicons-halflings-regular.woff) format('woff'), url(assets/fonts/glyphicons-halflings-regular.ttf) format('truetype'), url(assets/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "*"; +} +.glyphicon-plus:before { + content: "+"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20AC"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270F"; +} +.glyphicon-glass:before { + content: "\E001"; +} +.glyphicon-music:before { + content: "\E002"; +} +.glyphicon-search:before { + content: "\E003"; +} +.glyphicon-heart:before { + content: "\E005"; +} +.glyphicon-star:before { + content: "\E006"; +} +.glyphicon-star-empty:before { + content: "\E007"; +} +.glyphicon-user:before { + content: "\E008"; +} +.glyphicon-film:before { + content: "\E009"; +} +.glyphicon-th-large:before { + content: "\E010"; +} +.glyphicon-th:before { + content: "\E011"; +} +.glyphicon-th-list:before { + content: "\E012"; +} +.glyphicon-ok:before { + content: "\E013"; +} +.glyphicon-remove:before { + content: "\E014"; +} +.glyphicon-zoom-in:before { + content: "\E015"; +} +.glyphicon-zoom-out:before { + content: "\E016"; +} +.glyphicon-off:before { + content: "\E017"; +} +.glyphicon-signal:before { + content: "\E018"; +} +.glyphicon-cog:before { + content: "\E019"; +} +.glyphicon-trash:before { + content: "\E020"; +} +.glyphicon-home:before { + content: "\E021"; +} +.glyphicon-file:before { + content: "\E022"; +} +.glyphicon-time:before { + content: "\E023"; +} +.glyphicon-road:before { + content: "\E024"; +} +.glyphicon-download-alt:before { + content: "\E025"; +} +.glyphicon-download:before { + content: "\E026"; +} +.glyphicon-upload:before { + content: "\E027"; +} +.glyphicon-inbox:before { + content: "\E028"; +} +.glyphicon-play-circle:before { + content: "\E029"; +} +.glyphicon-repeat:before { + content: "\E030"; +} +.glyphicon-refresh:before { + content: "\E031"; +} +.glyphicon-list-alt:before { + content: "\E032"; +} +.glyphicon-lock:before { + content: "\E033"; +} +.glyphicon-flag:before { + content: "\E034"; +} +.glyphicon-headphones:before { + content: "\E035"; +} +.glyphicon-volume-off:before { + content: "\E036"; +} +.glyphicon-volume-down:before { + content: "\E037"; +} +.glyphicon-volume-up:before { + content: "\E038"; +} +.glyphicon-qrcode:before { + content: "\E039"; +} +.glyphicon-barcode:before { + content: "\E040"; +} +.glyphicon-tag:before { + content: "\E041"; +} +.glyphicon-tags:before { + content: "\E042"; +} +.glyphicon-book:before { + content: "\E043"; +} +.glyphicon-bookmark:before { + content: "\E044"; +} +.glyphicon-print:before { + content: "\E045"; +} +.glyphicon-camera:before { + content: "\E046"; +} +.glyphicon-font:before { + content: "\E047"; +} +.glyphicon-bold:before { + content: "\E048"; +} +.glyphicon-italic:before { + content: "\E049"; +} +.glyphicon-text-height:before { + content: "\E050"; +} +.glyphicon-text-width:before { + content: "\E051"; +} +.glyphicon-align-left:before { + content: "\E052"; +} +.glyphicon-align-center:before { + content: "\E053"; +} +.glyphicon-align-right:before { + content: "\E054"; +} +.glyphicon-align-justify:before { + content: "\E055"; +} +.glyphicon-list:before { + content: "\E056"; +} +.glyphicon-indent-left:before { + content: "\E057"; +} +.glyphicon-indent-right:before { + content: "\E058"; +} +.glyphicon-facetime-video:before { + content: "\E059"; +} +.glyphicon-picture:before { + content: "\E060"; +} +.glyphicon-map-marker:before { + content: "\E062"; +} +.glyphicon-adjust:before { + content: "\E063"; +} +.glyphicon-tint:before { + content: "\E064"; +} +.glyphicon-edit:before { + content: "\E065"; +} +.glyphicon-share:before { + content: "\E066"; +} +.glyphicon-check:before { + content: "\E067"; +} +.glyphicon-move:before { + content: "\E068"; +} +.glyphicon-step-backward:before { + content: "\E069"; +} +.glyphicon-fast-backward:before { + content: "\E070"; +} +.glyphicon-backward:before { + content: "\E071"; +} +.glyphicon-play:before { + content: "\E072"; +} +.glyphicon-pause:before { + content: "\E073"; +} +.glyphicon-stop:before { + content: "\E074"; +} +.glyphicon-forward:before { + content: "\E075"; +} +.glyphicon-fast-forward:before { + content: "\E076"; +} +.glyphicon-step-forward:before { + content: "\E077"; +} +.glyphicon-eject:before { + content: "\E078"; +} +.glyphicon-chevron-left:before { + content: "\E079"; +} +.glyphicon-chevron-right:before { + content: "\E080"; +} +.glyphicon-plus-sign:before { + content: "\E081"; +} +.glyphicon-minus-sign:before { + content: "\E082"; +} +.glyphicon-remove-sign:before { + content: "\E083"; +} +.glyphicon-ok-sign:before { + content: "\E084"; +} +.glyphicon-question-sign:before { + content: "\E085"; +} +.glyphicon-info-sign:before { + content: "\E086"; +} +.glyphicon-screenshot:before { + content: "\E087"; +} +.glyphicon-remove-circle:before { + content: "\E088"; +} +.glyphicon-ok-circle:before { + content: "\E089"; +} +.glyphicon-ban-circle:before { + content: "\E090"; +} +.glyphicon-arrow-left:before { + content: "\E091"; +} +.glyphicon-arrow-right:before { + content: "\E092"; +} +.glyphicon-arrow-up:before { + content: "\E093"; +} +.glyphicon-arrow-down:before { + content: "\E094"; +} +.glyphicon-share-alt:before { + content: "\E095"; +} +.glyphicon-resize-full:before { + content: "\E096"; +} +.glyphicon-resize-small:before { + content: "\E097"; +} +.glyphicon-exclamation-sign:before { + content: "\E101"; +} +.glyphicon-gift:before { + content: "\E102"; +} +.glyphicon-leaf:before { + content: "\E103"; +} +.glyphicon-fire:before { + content: "\E104"; +} +.glyphicon-eye-open:before { + content: "\E105"; +} +.glyphicon-eye-close:before { + content: "\E106"; +} +.glyphicon-warning-sign:before { + content: "\E107"; +} +.glyphicon-plane:before { + content: "\E108"; +} +.glyphicon-calendar:before { + content: "\E109"; +} +.glyphicon-random:before { + content: "\E110"; +} +.glyphicon-comment:before { + content: "\E111"; +} +.glyphicon-magnet:before { + content: "\E112"; +} +.glyphicon-chevron-up:before { + content: "\E113"; +} +.glyphicon-chevron-down:before { + content: "\E114"; +} +.glyphicon-retweet:before { + content: "\E115"; +} +.glyphicon-shopping-cart:before { + content: "\E116"; +} +.glyphicon-folder-close:before { + content: "\E117"; +} +.glyphicon-folder-open:before { + content: "\E118"; +} +.glyphicon-resize-vertical:before { + content: "\E119"; +} +.glyphicon-resize-horizontal:before { + content: "\E120"; +} +.glyphicon-hdd:before { + content: "\E121"; +} +.glyphicon-bullhorn:before { + content: "\E122"; +} +.glyphicon-bell:before { + content: "\E123"; +} +.glyphicon-certificate:before { + content: "\E124"; +} +.glyphicon-thumbs-up:before { + content: "\E125"; +} +.glyphicon-thumbs-down:before { + content: "\E126"; +} +.glyphicon-hand-right:before { + content: "\E127"; +} +.glyphicon-hand-left:before { + content: "\E128"; +} +.glyphicon-hand-up:before { + content: "\E129"; +} +.glyphicon-hand-down:before { + content: "\E130"; +} +.glyphicon-circle-arrow-right:before { + content: "\E131"; +} +.glyphicon-circle-arrow-left:before { + content: "\E132"; +} +.glyphicon-circle-arrow-up:before { + content: "\E133"; +} +.glyphicon-circle-arrow-down:before { + content: "\E134"; +} +.glyphicon-globe:before { + content: "\E135"; +} +.glyphicon-wrench:before { + content: "\E136"; +} +.glyphicon-tasks:before { + content: "\E137"; +} +.glyphicon-filter:before { + content: "\E138"; +} +.glyphicon-briefcase:before { + content: "\E139"; +} +.glyphicon-fullscreen:before { + content: "\E140"; +} +.glyphicon-dashboard:before { + content: "\E141"; +} +.glyphicon-paperclip:before { + content: "\E142"; +} +.glyphicon-heart-empty:before { + content: "\E143"; +} +.glyphicon-link:before { + content: "\E144"; +} +.glyphicon-phone:before { + content: "\E145"; +} +.glyphicon-pushpin:before { + content: "\E146"; +} +.glyphicon-usd:before { + content: "\E148"; +} +.glyphicon-gbp:before { + content: "\E149"; +} +.glyphicon-sort:before { + content: "\E150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\E151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\E152"; +} +.glyphicon-sort-by-order:before { + content: "\E153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\E154"; +} +.glyphicon-sort-by-attributes:before { + content: "\E155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\E156"; +} +.glyphicon-unchecked:before { + content: "\E157"; +} +.glyphicon-expand:before { + content: "\E158"; +} +.glyphicon-collapse-down:before { + content: "\E159"; +} +.glyphicon-collapse-up:before { + content: "\E160"; +} +.glyphicon-log-in:before { + content: "\E161"; +} +.glyphicon-flash:before { + content: "\E162"; +} +.glyphicon-log-out:before { + content: "\E163"; +} +.glyphicon-new-window:before { + content: "\E164"; +} +.glyphicon-record:before { + content: "\E165"; +} +.glyphicon-save:before { + content: "\E166"; +} +.glyphicon-open:before { + content: "\E167"; +} +.glyphicon-saved:before { + content: "\E168"; +} +.glyphicon-import:before { + content: "\E169"; +} +.glyphicon-export:before { + content: "\E170"; +} +.glyphicon-send:before { + content: "\E171"; +} +.glyphicon-floppy-disk:before { + content: "\E172"; +} +.glyphicon-floppy-saved:before { + content: "\E173"; +} +.glyphicon-floppy-remove:before { + content: "\E174"; +} +.glyphicon-floppy-save:before { + content: "\E175"; +} +.glyphicon-floppy-open:before { + content: "\E176"; +} +.glyphicon-credit-card:before { + content: "\E177"; +} +.glyphicon-transfer:before { + content: "\E178"; +} +.glyphicon-cutlery:before { + content: "\E179"; +} +.glyphicon-header:before { + content: "\E180"; +} +.glyphicon-compressed:before { + content: "\E181"; +} +.glyphicon-earphone:before { + content: "\E182"; +} +.glyphicon-phone-alt:before { + content: "\E183"; +} +.glyphicon-tower:before { + content: "\E184"; +} +.glyphicon-stats:before { + content: "\E185"; +} +.glyphicon-sd-video:before { + content: "\E186"; +} +.glyphicon-hd-video:before { + content: "\E187"; +} +.glyphicon-subtitles:before { + content: "\E188"; +} +.glyphicon-sound-stereo:before { + content: "\E189"; +} +.glyphicon-sound-dolby:before { + content: "\E190"; +} +.glyphicon-sound-5-1:before { + content: "\E191"; +} +.glyphicon-sound-6-1:before { + content: "\E192"; +} +.glyphicon-sound-7-1:before { + content: "\E193"; +} +.glyphicon-copyright-mark:before { + content: "\E194"; +} +.glyphicon-registration-mark:before { + content: "\E195"; +} +.glyphicon-cloud-download:before { + content: "\E197"; +} +.glyphicon-cloud-upload:before { + content: "\E198"; +} +.glyphicon-tree-conifer:before { + content: "\E199"; +} +.glyphicon-tree-deciduous:before { + content: "\E200"; +} +.glyphicon-cd:before { + content: "\E201"; +} +.glyphicon-save-file:before { + content: "\E202"; +} +.glyphicon-open-file:before { + content: "\E203"; +} +.glyphicon-level-up:before { + content: "\E204"; +} +.glyphicon-copy:before { + content: "\E205"; +} +.glyphicon-paste:before { + content: "\E206"; +} +.glyphicon-alert:before { + content: "\E209"; +} +.glyphicon-equalizer:before { + content: "\E210"; +} +.glyphicon-king:before { + content: "\E211"; +} +.glyphicon-queen:before { + content: "\E212"; +} +.glyphicon-pawn:before { + content: "\E213"; +} +.glyphicon-bishop:before { + content: "\E214"; +} +.glyphicon-knight:before { + content: "\E215"; +} +.glyphicon-baby-formula:before { + content: "\E216"; +} +.glyphicon-tent:before { + content: "\26FA"; +} +.glyphicon-blackboard:before { + content: "\E218"; +} +.glyphicon-bed:before { + content: "\E219"; +} +.glyphicon-apple:before { + content: "\F8FF"; +} +.glyphicon-erase:before { + content: "\E221"; +} +.glyphicon-hourglass:before { + content: "\231B"; +} +.glyphicon-lamp:before { + content: "\E223"; +} +.glyphicon-duplicate:before { + content: "\E224"; +} +.glyphicon-piggy-bank:before { + content: "\E225"; +} +.glyphicon-scissors:before { + content: "\E226"; +} +.glyphicon-bitcoin:before { + content: "\E227"; +} +.glyphicon-btc:before { + content: "\E227"; +} +.glyphicon-xbt:before { + content: "\E227"; +} +.glyphicon-yen:before { + content: "\A5"; +} +.glyphicon-jpy:before { + content: "\A5"; +} +.glyphicon-ruble:before { + content: "\20BD"; +} +.glyphicon-rub:before { + content: "\20BD"; +} +.glyphicon-scale:before { + content: "\E230"; +} +.glyphicon-ice-lolly:before { + content: "\E231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\E232"; +} +.glyphicon-education:before { + content: "\E233"; +} +.glyphicon-option-horizontal:before { + content: "\E234"; +} +.glyphicon-option-vertical:before { + content: "\E235"; +} +.glyphicon-menu-hamburger:before { + content: "\E236"; +} +.glyphicon-modal-window:before { + content: "\E237"; +} +.glyphicon-oil:before { + content: "\E238"; +} +.glyphicon-grain:before { + content: "\E239"; +} +.glyphicon-sunglasses:before { + content: "\E240"; +} +.glyphicon-text-size:before { + content: "\E241"; +} +.glyphicon-text-color:before { + content: "\E242"; +} +.glyphicon-text-background:before { + content: "\E243"; +} +.glyphicon-object-align-top:before { + content: "\E244"; +} +.glyphicon-object-align-bottom:before { + content: "\E245"; +} +.glyphicon-object-align-horizontal:before { + content: "\E246"; +} +.glyphicon-object-align-left:before { + content: "\E247"; +} +.glyphicon-object-align-vertical:before { + content: "\E248"; +} +.glyphicon-object-align-right:before { + content: "\E249"; +} +.glyphicon-triangle-right:before { + content: "\E250"; +} +.glyphicon-triangle-left:before { + content: "\E251"; +} +.glyphicon-triangle-bottom:before { + content: "\E252"; +} +.glyphicon-triangle-top:before { + content: "\E253"; +} +.glyphicon-console:before { + content: "\E254"; +} +.glyphicon-superscript:before { + content: "\E255"; +} +.glyphicon-subscript:before { + content: "\E256"; +} +.glyphicon-menu-left:before { + content: "\E257"; +} +.glyphicon-menu-right:before { + content: "\E258"; +} +.glyphicon-menu-down:before { + content: "\E259"; +} +.glyphicon-menu-up:before { + content: "\E260"; +} +* { + box-sizing: border-box; +} +*:before, +*:after { + box-sizing: border-box; +} +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Open Sans", Helvetica, Arial, sans-serif; + font-size: 12px; + line-height: 1.66666667; + color: #363636; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #0088ce; + text-decoration: none; +} +a:hover, +a:focus { + color: #00659c; + text-decoration: underline; +} +a:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 1px; +} +.img-thumbnail { + padding: 4px; + line-height: 1.66666667; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 1px; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #f1f1f1; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #9c9c9c; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 24px; +} +h2, +.h2 { + font-size: 22px; +} +h3, +.h3 { + font-size: 16px; +} +h4, +.h4 { + font-size: 15px; +} +h5, +.h5 { + font-size: 13px; +} +h6, +.h6 { + font-size: 11px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 13px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 18px; + } +} +small, +.small { + font-size: 91%; +} +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #9c9c9c; +} +.text-primary { + color: #39a5dc; +} +a.text-primary:hover, +a.text-primary:focus { + color: #228bc0; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #ec7a08; +} +a.text-warning:hover, +a.text-warning:focus { + color: #bb6106; +} +.text-danger { + color: #cc0000; +} +a.text-danger:hover, +a.text-danger:focus { + color: #990000; +} +.bg-primary { + color: #fff; + background-color: #39a5dc; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #228bc0; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #f1f1f1; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.66666667; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #9c9c9c; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 15px; + border-left: 5px solid #f1f1f1; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.66666667; + color: #9c9c9c; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #f1f1f1; + border-left: 0; + text-align: right; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.66666667; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #004368; + background-color: #def3ff; + border-radius: 1px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 1px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 11px; + line-height: 1.66666667; + word-break: break-all; + word-wrap: break-word; + color: #363636; + background-color: #fafafa; + border: 1px solid #ccc; + border-radius: 1px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + margin-right: auto; + margin-left: auto; + padding-left: 20px; + padding-right: 20px; +} +@media (min-width: 768px) { + .container { + width: 760px; + } +} +@media (min-width: 992px) { + .container { + width: 980px; + } +} +@media (min-width: 1200px) { + .container { + width: 1180px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 20px; + padding-right: 20px; +} +.row { + margin-left: -20px; + margin-right: -20px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 20px; + padding-right: 20px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 10px; + padding-bottom: 10px; + color: #9c9c9c; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 10px; + line-height: 1.66666667; + vertical-align: top; + border-top: 1px solid #d1d1d1; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #d1d1d1; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #d1d1d1; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #d1d1d1; +} +.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 #d1d1d1; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f5f5f5; +} +.table-hover > tbody > tr:hover { + background-color: #def3ff; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #def3ff; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #c4eaff; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + overflow-x: auto; + min-height: 0.01%; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #d1d1d1; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 18px; + line-height: inherit; + color: #363636; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 3px; + font-size: 12px; + line-height: 1.66666667; + color: #363636; +} +.form-control { + display: block; + width: 100%; + height: 26px; + padding: 2px 6px; + font-size: 12px; + line-height: 1.66666667; + color: #363636; + background-color: #fff; + background-image: none; + border: 1px solid #bbb; + border-radius: 1px; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #0088ce; + outline: 0; + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(0, 136, 206, 0.6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control:-moz-placeholder { + color: #999; + font-style: italic; +} +.form-control::-moz-placeholder { + color: #999; + font-style: italic; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; + font-style: italic; +} +.form-control::-webkit-input-placeholder { + color: #999; + font-style: italic; +} +.form-control::-ms-expand { + border: 0; + background-color: transparent; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #f5f5f5; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 26px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 22px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 33px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 3px; + padding-bottom: 3px; + margin-bottom: 0; + min-height: 32px; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm { + height: 22px; + padding: 2px 6px; + font-size: 11px; + line-height: 1.5; + border-radius: 1px; +} +select.input-sm { + height: 22px; + line-height: 22px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 22px; + padding: 2px 6px; + font-size: 11px; + line-height: 1.5; + border-radius: 1px; +} +.form-group-sm select.form-control { + height: 22px; + line-height: 22px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 22px; + min-height: 31px; + padding: 3px 6px; + font-size: 11px; + line-height: 1.5; +} +.input-lg { + height: 33px; + padding: 6px 10px; + font-size: 14px; + line-height: 1.3333333; + border-radius: 1px; +} +select.input-lg { + height: 33px; + line-height: 33px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 33px; + padding: 6px 10px; + font-size: 14px; + line-height: 1.3333333; + border-radius: 1px; +} +.form-group-lg select.form-control { + height: 33px; + line-height: 33px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 33px; + min-height: 34px; + padding: 7px 10px; + font-size: 14px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 32.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 26px; + height: 26px; + line-height: 26px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 33px; + height: 33px; + line-height: 33px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 22px; + height: 22px; + line-height: 22px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #2b542c; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + border-color: #3c763d; + background-color: #dff0d8; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #ec7a08; +} +.has-warning .form-control { + border-color: #ec7a08; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #bb6106; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #faad60; +} +.has-warning .input-group-addon { + color: #ec7a08; + border-color: #ec7a08; + background-color: #fcf8e3; +} +.has-warning .form-control-feedback { + color: #ec7a08; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #cc0000; +} +.has-error .form-control { + border-color: #cc0000; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #990000; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ff3333; +} +.has-error .input-group-addon { + color: #cc0000; + border-color: #cc0000; + background-color: #f2dede; +} +.has-error .form-control-feedback { + color: #cc0000; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #767676; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 3px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 23px; +} +.form-horizontal .form-group { + margin-left: -20px; + margin-right: -20px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 3px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 20px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 7px; + font-size: 14px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 3px; + font-size: 11px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: 600; + text-align: center; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 2px 6px; + font-size: 12px; + line-height: 1.66666667; + border-radius: 1px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #4d5258; + text-decoration: none; +} +.btn:active, +.btn.active { + outline: 0; + background-image: none; + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + opacity: 0.65; + filter: alpha(opacity=65); + box-shadow: none; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #4d5258; + background-color: #f1f1f1; + border-color: #bbb; +} +.btn-default:focus, +.btn-default.focus { + color: #4d5258; + background-color: #d8d8d8; + border-color: #7b7b7b; +} +.btn-default:hover { + color: #4d5258; + background-color: #d8d8d8; + border-color: #9c9c9c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #4d5258; + background-color: #d8d8d8; + border-color: #9c9c9c; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #4d5258; + background-color: #c6c6c6; + border-color: #7b7b7b; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #f1f1f1; + border-color: #bbb; +} +.btn-default .badge { + color: #f1f1f1; + background-color: #4d5258; +} +.btn-primary { + color: #fff; + background-color: #0088ce; + border-color: #00659c; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #00669b; + border-color: #00121d; +} +.btn-primary:hover { + color: #fff; + background-color: #00669b; + border-color: #003d5f; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #00669b; + border-color: #003d5f; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #004f77; + border-color: #00121d; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #0088ce; + border-color: #00659c; +} +.btn-primary .badge { + color: #0088ce; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #3f9c35; + border-color: #37892f; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #307628; + border-color: #112a0e; +} +.btn-success:hover { + color: #fff; + background-color: #307628; + border-color: #255b1f; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #307628; + border-color: #255b1f; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #255b1f; + border-color: #112a0e; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #3f9c35; + border-color: #37892f; +} +.btn-success .badge { + color: #3f9c35; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #00659c; + border-color: #005483; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #004469; + border-color: #000203; +} +.btn-info:hover { + color: #fff; + background-color: #004469; + border-color: #002d45; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #004469; + border-color: #002d45; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #002d45; + border-color: #000203; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #00659c; + border-color: #005483; +} +.btn-info .badge { + color: #00659c; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #ec7a08; + border-color: #d36d07; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #bb6106; + border-color: #582e03; +} +.btn-warning:hover { + color: #fff; + background-color: #bb6106; + border-color: #984f05; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #bb6106; + border-color: #984f05; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #984f05; + border-color: #582e03; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #ec7a08; + border-color: #d36d07; +} +.btn-warning .badge { + color: #ec7a08; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #a30000; + border-color: #8b0000; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #700000; + border-color: #0b0000; +} +.btn-danger:hover { + color: #fff; + background-color: #700000; + border-color: #4e0000; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #700000; + border-color: #4e0000; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #4c0000; + border-color: #0b0000; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #a30000; + border-color: #8b0000; +} +.btn-danger .badge { + color: #a30000; + background-color: #fff; +} +.btn-link { + color: #0088ce; + font-weight: normal; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #00659c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #9c9c9c; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 6px 10px; + font-size: 14px; + line-height: 1.3333333; + border-radius: 1px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 2px 6px; + font-size: 11px; + line-height: 1.5; + border-radius: 1px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 11px; + line-height: 1.5; + border-radius: 1px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition-property: height, visibility; + transition-duration: 0.35s; + transition-timing-function: ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 0 dashed; + border-top: 0 solid \9; + border-right: 0 solid transparent; + border-left: 0 solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 12px; + text-align: left; + background-color: #fff; + border: 1px solid #bbb; + border-radius: 1px; + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + margin: 9px 0; + background-color: #ededed; + height: 1px; + margin: 4px 1px; + overflow: hidden; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.66666667; + color: #363636; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + text-decoration: none; + color: #4d5258; + background-color: #def3ff; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + outline: 0; + background-color: #0088ce; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #9c9c9c; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + left: auto; + right: 0; +} +.dropdown-menu-left { + left: 0; + right: auto; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 11px; + line-height: 1.66666667; + color: #9c9c9c; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 0 dashed; + border-bottom: 0 solid \9; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} +.btn-group.open .dropdown-toggle { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 0 0 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 0 0; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 1px; + border-top-left-radius: 1px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 1px; + border-bottom-left-radius: 1px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 33px; + padding: 6px 10px; + font-size: 14px; + line-height: 1.3333333; + border-radius: 1px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 33px; + line-height: 33px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 22px; + padding: 2px 6px; + font-size: 11px; + line-height: 1.5; + border-radius: 1px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 22px; + line-height: 22px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 2px 6px; + font-size: 12px; + font-weight: normal; + line-height: 1; + color: #363636; + text-align: center; + background-color: #f1f1f1; + border: 1px solid #bbb; + border-radius: 1px; +} +.input-group-addon.input-sm { + padding: 2px 6px; + font-size: 11px; + border-radius: 1px; +} +.input-group-addon.input-lg { + padding: 6px 10px; + font-size: 14px; + border-radius: 1px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #f1f1f1; +} +.nav > li.disabled > a { + color: #9c9c9c; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #9c9c9c; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #f1f1f1; + border-color: #0088ce; +} +.nav .nav-divider { + margin: 9px 0; + background-color: #e5e5e5; + background-color: #ededed; + height: 1px; + margin: 4px 1px; + overflow: hidden; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ededed; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.66666667; + border: 1px solid transparent; + border-radius: 1px 1px 0 0; +} +.nav-tabs > li > a:hover { + border-color: transparent transparent #ededed; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #0088ce; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 1px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ededed; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ededed; + border-radius: 1px 1px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 1px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #39a5dc; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 1px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ededed; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ededed; + border-radius: 1px 1px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 1px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + overflow-x: visible; + padding-right: 20px; + padding-left: 20px; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -20px; + margin-left: -20px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + padding: 15px 20px; + font-size: 14px; + line-height: 20px; + height: 50px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -20px; + } +} +.navbar-toggle { + position: relative; + float: right; + margin-right: 20px; + padding: 9px 10px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 1px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -20px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + margin-left: -20px; + margin-right: -20px; + padding: 10px 20px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 12px; + margin-bottom: 12px; +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-right-radius: 1px; + border-top-left-radius: 1px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 12px; + margin-bottom: 12px; +} +.navbar-btn.btn-sm { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-left: 20px; + margin-right: 20px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + float: left; + } + .navbar-right { + float: right !important; + float: right; + margin-right: -20px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + background-color: #e7e7e7; + color: #555; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #c2c2c2; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #c2c2c2; +} +.navbar-inverse .navbar-nav > li > a { + color: #c2c2c2; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + background-color: #080808; + color: #fff; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #c2c2c2; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #c2c2c2; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #c2c2c2; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: transparent; + border-radius: 1px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + content: "\F105\A0"; + padding: 0 5px; + color: #4d5258; +} +.breadcrumb > .active { + color: #4d5258; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 1px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 2px 6px; + line-height: 1.66666667; + text-decoration: none; + color: #0088ce; + background-color: #f5f5f5; + border: 1px solid #bbb; + margin-left: -1px; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 1px; + border-top-left-radius: 1px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-bottom-right-radius: 1px; + border-top-right-radius: 1px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #00659c; + background-color: #ededed; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + background-color: #39a5dc; + border-color: #39a5dc; + cursor: default; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #9c9c9c; + background-color: #fff; + border-color: #ddd; + cursor: not-allowed; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 6px 10px; + font-size: 14px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 1px; + border-top-left-radius: 1px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 1px; + border-top-right-radius: 1px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 2px 6px; + font-size: 11px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 1px; + border-top-left-radius: 1px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 1px; + border-top-right-radius: 1px; +} +.pager { + padding-left: 0; + margin: 20px 0; + list-style: none; + text-align: center; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #f5f5f5; + border: 1px solid #bbb; + border-radius: 0; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #ededed; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #8b8d8f; + background-color: #f5f5f5; + cursor: not-allowed; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #9c9c9c; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #838383; +} +.label-primary { + background-color: #39a5dc; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #228bc0; +} +.label-success { + background-color: #3f9c35; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #307628; +} +.label-info { + background-color: #00659c; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #004469; +} +.label-warning { + background-color: #ec7a08; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #bb6106; +} +.label-danger { + background-color: #cc0000; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #990000; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 11px; + font-weight: bold; + color: #fff; + line-height: 1; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: #9c9c9c; + border-radius: 1px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #0088ce; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #f1f1f1; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 18px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d8d8d8; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 1px; + padding-left: 20px; + padding-right: 20px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-left: 60px; + padding-right: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 54px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.66666667; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 1px; + transition: border 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-left: auto; + margin-right: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #0088ce; +} +.thumbnail .caption { + padding: 9px; + color: #363636; +} +.alert { + padding: 11px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 1px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: 500; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 31px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + background-color: #e9f4e9; + border-color: #3f9c35; + color: #363636; +} +.alert-success hr { + border-top-color: #37892f; +} +.alert-success .alert-link { + color: #1d1d1d; +} +.alert-info { + background-color: #f5f5f5; + border-color: #8b8d8f; + color: #363636; +} +.alert-info hr { + border-top-color: #7e8082; +} +.alert-info .alert-link { + color: #1d1d1d; +} +.alert-warning { + background-color: #fdf2e5; + border-color: #ec7a08; + color: #363636; +} +.alert-warning hr { + border-top-color: #d36d07; +} +.alert-warning .alert-link { + color: #1d1d1d; +} +.alert-danger { + background-color: #ffe6e6; + border-color: #cc0000; + color: #363636; +} +.alert-danger hr { + border-top-color: #b30000; +} +.alert-danger .alert-link { + color: #1d1d1d; +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + overflow: hidden; + height: 20px; + margin-bottom: 20px; + background-color: #ededed; + border-radius: 1px; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 11px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #39a5dc; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + transition: width 0.6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + 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); + background-image: linear-gradient(-45deg, rgba(3, 3, 3, 0.15) 25%, rgba(3, 3, 3, 0.15) 26%, transparent 27%, transparent 49%, rgba(3, 3, 3, 0.15) 50%, rgba(3, 3, 3, 0.15) 51%, transparent 52%, transparent 74%, rgba(3, 3, 3, 0.15) 75%, rgba(3, 3, 3, 0.15) 76%, transparent 77%); + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #3f9c35; +} +.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); + background-image: linear-gradient(-45deg, rgba(3, 3, 3, 0.15) 25%, rgba(3, 3, 3, 0.15) 26%, transparent 27%, transparent 49%, rgba(3, 3, 3, 0.15) 50%, rgba(3, 3, 3, 0.15) 51%, transparent 52%, transparent 74%, rgba(3, 3, 3, 0.15) 75%, rgba(3, 3, 3, 0.15) 76%, transparent 77%); +} +.progress-bar-info { + background-color: #00659c; +} +.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); + background-image: linear-gradient(-45deg, rgba(3, 3, 3, 0.15) 25%, rgba(3, 3, 3, 0.15) 26%, transparent 27%, transparent 49%, rgba(3, 3, 3, 0.15) 50%, rgba(3, 3, 3, 0.15) 51%, transparent 52%, transparent 74%, rgba(3, 3, 3, 0.15) 75%, rgba(3, 3, 3, 0.15) 76%, transparent 77%); +} +.progress-bar-warning { + background-color: #ec7a08; +} +.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); + background-image: linear-gradient(-45deg, rgba(3, 3, 3, 0.15) 25%, rgba(3, 3, 3, 0.15) 26%, transparent 27%, transparent 49%, rgba(3, 3, 3, 0.15) 50%, rgba(3, 3, 3, 0.15) 51%, transparent 52%, transparent 74%, rgba(3, 3, 3, 0.15) 75%, rgba(3, 3, 3, 0.15) 76%, transparent 77%); +} +.progress-bar-danger { + background-color: #cc0000; +} +.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); + background-image: linear-gradient(-45deg, rgba(3, 3, 3, 0.15) 25%, rgba(3, 3, 3, 0.15) 26%, transparent 27%, transparent 49%, rgba(3, 3, 3, 0.15) 50%, rgba(3, 3, 3, 0.15) 51%, transparent 52%, transparent 74%, rgba(3, 3, 3, 0.15) 75%, rgba(3, 3, 3, 0.15) 76%, transparent 77%); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + zoom: 1; + overflow: hidden; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + margin-bottom: 20px; + padding-left: 0; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #f5f5f5; +} +.list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + text-decoration: none; + color: #555; + background-color: #def3ff; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + background-color: #f1f1f1; + color: #9c9c9c; + cursor: not-allowed; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #9c9c9c; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #39a5dc; + border-color: #39a5dc; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #e6f4fb; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #ec7a08; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #ec7a08; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #ec7a08; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #ec7a08; + border-color: #ec7a08; +} +.list-group-item-danger { + color: #cc0000; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #cc0000; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #cc0000; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #cc0000; + border-color: #cc0000; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 1px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 0px; + border-top-left-radius: 0px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 14px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #d1d1d1; + border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 0px; + border-top-left-radius: 0px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-left: 15px; + padding-right: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 0px; + border-top-left-radius: 0px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 0px; + border-top-right-radius: 0px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 0px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 0px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 0px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 0px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #d1d1d1; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + border: 0; + margin-bottom: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 1px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #d1d1d1; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #d1d1d1; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #363636; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #363636; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #39a5dc; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #39a5dc; + border-color: #39a5dc; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #39a5dc; +} +.panel-primary > .panel-heading .badge { + color: #39a5dc; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #39a5dc; +} +.panel-success { + border-color: #3f9c35; +} +.panel-success > .panel-heading { + color: #fff; + background-color: #3f9c35; + border-color: #3f9c35; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #3f9c35; +} +.panel-success > .panel-heading .badge { + color: #3f9c35; + background-color: #fff; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #3f9c35; +} +.panel-info { + border-color: #00659c; +} +.panel-info > .panel-heading { + color: #fff; + background-color: #00659c; + border-color: #00659c; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #00659c; +} +.panel-info > .panel-heading .badge { + color: #00659c; + background-color: #fff; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #00659c; +} +.panel-warning { + border-color: #ec7a08; +} +.panel-warning > .panel-heading { + color: #fff; + background-color: #ec7a08; + border-color: #ec7a08; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ec7a08; +} +.panel-warning > .panel-heading .badge { + color: #ec7a08; + background-color: #fff; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ec7a08; +} +.panel-danger { + border-color: #cc0000; +} +.panel-danger > .panel-heading { + color: #fff; + background-color: #cc0000; + border-color: #cc0000; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #cc0000; +} +.panel-danger > .panel-heading .badge { + color: #cc0000; + background-color: #fff; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #cc0000; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 1px; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.well-lg { + padding: 24px; + border-radius: 1px; +} +.well-sm { + padding: 9px; + border-radius: 1px; +} +.close { + float: right; + font-size: 18px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.modal-open { + overflow: hidden; +} +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -ms-transform: translate(0, -25%); + transform: translate(0, -25%); + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -ms-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 1px; + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; + outline: 0; +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.66666667; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Open Sans", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.66666667; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 11px; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} +.tooltip.top { + margin-top: -3px; + padding: 8px 0; +} +.tooltip.right { + margin-left: 3px; + padding: 0 8px; +} +.tooltip.bottom { + margin-top: 3px; + padding: 8px 0; +} +.tooltip.left { + margin-left: -3px; + padding: 0 8px; +} +.tooltip-inner { + max-width: 220px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #393f44; + border-radius: 1px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -8px; + border-width: 8px 8px 0; + border-top-color: #393f44; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + right: 8px; + margin-bottom: -8px; + border-width: 8px 8px 0; + border-top-color: #393f44; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 8px; + margin-bottom: -8px; + border-width: 8px 8px 0; + border-top-color: #393f44; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -8px; + border-width: 8px 8px 8px 0; + border-right-color: #393f44; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -8px; + border-width: 8px 0 8px 8px; + border-left-color: #393f44; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -8px; + border-width: 0 8px 8px; + border-bottom-color: #393f44; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 8px; + margin-top: -8px; + border-width: 0 8px 8px; + border-bottom-color: #393f44; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 8px; + margin-top: -8px; + border-width: 0 8px 8px; + border-bottom-color: #393f44; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 220px; + padding: 1px; + font-family: "Open Sans", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.66666667; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 12px; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid #bbb; + border-radius: 1px; + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 12px; + background-color: #f5f5f5; + border-bottom: 1px solid #e8e8e8; + border-radius: 0px 0px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + border-width: 10px; + content: ""; +} +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999999; + border-top-color: #bbb; + bottom: -11px; +} +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #fff; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999999; + border-right-color: #bbb; +} +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #fff; +} +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: #bbb; + top: -11px; +} +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: #bbb; +} +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #fff; + bottom: -10px; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; +} +.carousel-inner > .item { + display: none; + position: relative; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + transition: transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + transform: translate3d(100%, 0, 0); + left: 0; + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + transform: translate3d(-100%, 0, 0); + left: 0; + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + transform: translate3d(0, 0, 0); + left: 0; + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: 0.5; + filter: alpha(opacity=50); + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + background-color: rgba(0, 0, 0, 0); +} +.carousel-control.left { + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} +.carousel-control.right { + left: auto; + right: 0; + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} +.carousel-control:hover, +.carousel-control:focus { + outline: 0; + color: #fff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203A'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #fff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); +} +.carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #fff; +} +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url(assets/fonts/fontawesome-webfont.eot); + src: url(assets/fonts/fontawesome-webfont.eot?#iefix&v=4.7.0) format('embedded-opentype'), url(assets/fonts/fontawesome-webfont.woff2) format('woff2'), url(assets/fonts/fontawesome-webfont.woff) format('woff'), url(assets/fonts/fontawesome-webfont.ttf) format('truetype'), url(assets/fonts/fontawesome-webfont.svg#fontawesomeregular) format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eee; + border-radius: .1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + animation: fa-spin 1s infinite steps(8); +} +@keyframes fa-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #fff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\F000"; +} +.fa-music:before { + content: "\F001"; +} +.fa-search:before { + content: "\F002"; +} +.fa-envelope-o:before { + content: "\F003"; +} +.fa-heart:before { + content: "\F004"; +} +.fa-star:before { + content: "\F005"; +} +.fa-star-o:before { + content: "\F006"; +} +.fa-user:before { + content: "\F007"; +} +.fa-film:before { + content: "\F008"; +} +.fa-th-large:before { + content: "\F009"; +} +.fa-th:before { + content: "\F00A"; +} +.fa-th-list:before { + content: "\F00B"; +} +.fa-check:before { + content: "\F00C"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\F00D"; +} +.fa-search-plus:before { + content: "\F00E"; +} +.fa-search-minus:before { + content: "\F010"; +} +.fa-power-off:before { + content: "\F011"; +} +.fa-signal:before { + content: "\F012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\F013"; +} +.fa-trash-o:before { + content: "\F014"; +} +.fa-home:before { + content: "\F015"; +} +.fa-file-o:before { + content: "\F016"; +} +.fa-clock-o:before { + content: "\F017"; +} +.fa-road:before { + content: "\F018"; +} +.fa-download:before { + content: "\F019"; +} +.fa-arrow-circle-o-down:before { + content: "\F01A"; +} +.fa-arrow-circle-o-up:before { + content: "\F01B"; +} +.fa-inbox:before { + content: "\F01C"; +} +.fa-play-circle-o:before { + content: "\F01D"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\F01E"; +} +.fa-refresh:before { + content: "\F021"; +} +.fa-list-alt:before { + content: "\F022"; +} +.fa-lock:before { + content: "\F023"; +} +.fa-flag:before { + content: "\F024"; +} +.fa-headphones:before { + content: "\F025"; +} +.fa-volume-off:before { + content: "\F026"; +} +.fa-volume-down:before { + content: "\F027"; +} +.fa-volume-up:before { + content: "\F028"; +} +.fa-qrcode:before { + content: "\F029"; +} +.fa-barcode:before { + content: "\F02A"; +} +.fa-tag:before { + content: "\F02B"; +} +.fa-tags:before { + content: "\F02C"; +} +.fa-book:before { + content: "\F02D"; +} +.fa-bookmark:before { + content: "\F02E"; +} +.fa-print:before { + content: "\F02F"; +} +.fa-camera:before { + content: "\F030"; +} +.fa-font:before { + content: "\F031"; +} +.fa-bold:before { + content: "\F032"; +} +.fa-italic:before { + content: "\F033"; +} +.fa-text-height:before { + content: "\F034"; +} +.fa-text-width:before { + content: "\F035"; +} +.fa-align-left:before { + content: "\F036"; +} +.fa-align-center:before { + content: "\F037"; +} +.fa-align-right:before { + content: "\F038"; +} +.fa-align-justify:before { + content: "\F039"; +} +.fa-list:before { + content: "\F03A"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\F03B"; +} +.fa-indent:before { + content: "\F03C"; +} +.fa-video-camera:before { + content: "\F03D"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\F03E"; +} +.fa-pencil:before { + content: "\F040"; +} +.fa-map-marker:before { + content: "\F041"; +} +.fa-adjust:before { + content: "\F042"; +} +.fa-tint:before { + content: "\F043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\F044"; +} +.fa-share-square-o:before { + content: "\F045"; +} +.fa-check-square-o:before { + content: "\F046"; +} +.fa-arrows:before { + content: "\F047"; +} +.fa-step-backward:before { + content: "\F048"; +} +.fa-fast-backward:before { + content: "\F049"; +} +.fa-backward:before { + content: "\F04A"; +} +.fa-play:before { + content: "\F04B"; +} +.fa-pause:before { + content: "\F04C"; +} +.fa-stop:before { + content: "\F04D"; +} +.fa-forward:before { + content: "\F04E"; +} +.fa-fast-forward:before { + content: "\F050"; +} +.fa-step-forward:before { + content: "\F051"; +} +.fa-eject:before { + content: "\F052"; +} +.fa-chevron-left:before { + content: "\F053"; +} +.fa-chevron-right:before { + content: "\F054"; +} +.fa-plus-circle:before { + content: "\F055"; +} +.fa-minus-circle:before { + content: "\F056"; +} +.fa-times-circle:before { + content: "\F057"; +} +.fa-check-circle:before { + content: "\F058"; +} +.fa-question-circle:before { + content: "\F059"; +} +.fa-info-circle:before { + content: "\F05A"; +} +.fa-crosshairs:before { + content: "\F05B"; +} +.fa-times-circle-o:before { + content: "\F05C"; +} +.fa-check-circle-o:before { + content: "\F05D"; +} +.fa-ban:before { + content: "\F05E"; +} +.fa-arrow-left:before { + content: "\F060"; +} +.fa-arrow-right:before { + content: "\F061"; +} +.fa-arrow-up:before { + content: "\F062"; +} +.fa-arrow-down:before { + content: "\F063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\F064"; +} +.fa-expand:before { + content: "\F065"; +} +.fa-compress:before { + content: "\F066"; +} +.fa-plus:before { + content: "\F067"; +} +.fa-minus:before { + content: "\F068"; +} +.fa-asterisk:before { + content: "\F069"; +} +.fa-exclamation-circle:before { + content: "\F06A"; +} +.fa-gift:before { + content: "\F06B"; +} +.fa-leaf:before { + content: "\F06C"; +} +.fa-fire:before { + content: "\F06D"; +} +.fa-eye:before { + content: "\F06E"; +} +.fa-eye-slash:before { + content: "\F070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\F071"; +} +.fa-plane:before { + content: "\F072"; +} +.fa-calendar:before { + content: "\F073"; +} +.fa-random:before { + content: "\F074"; +} +.fa-comment:before { + content: "\F075"; +} +.fa-magnet:before { + content: "\F076"; +} +.fa-chevron-up:before { + content: "\F077"; +} +.fa-chevron-down:before { + content: "\F078"; +} +.fa-retweet:before { + content: "\F079"; +} +.fa-shopping-cart:before { + content: "\F07A"; +} +.fa-folder:before { + content: "\F07B"; +} +.fa-folder-open:before { + content: "\F07C"; +} +.fa-arrows-v:before { + content: "\F07D"; +} +.fa-arrows-h:before { + content: "\F07E"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\F080"; +} +.fa-twitter-square:before { + content: "\F081"; +} +.fa-facebook-square:before { + content: "\F082"; +} +.fa-camera-retro:before { + content: "\F083"; +} +.fa-key:before { + content: "\F084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\F085"; +} +.fa-comments:before { + content: "\F086"; +} +.fa-thumbs-o-up:before { + content: "\F087"; +} +.fa-thumbs-o-down:before { + content: "\F088"; +} +.fa-star-half:before { + content: "\F089"; +} +.fa-heart-o:before { + content: "\F08A"; +} +.fa-sign-out:before { + content: "\F08B"; +} +.fa-linkedin-square:before { + content: "\F08C"; +} +.fa-thumb-tack:before { + content: "\F08D"; +} +.fa-external-link:before { + content: "\F08E"; +} +.fa-sign-in:before { + content: "\F090"; +} +.fa-trophy:before { + content: "\F091"; +} +.fa-github-square:before { + content: "\F092"; +} +.fa-upload:before { + content: "\F093"; +} +.fa-lemon-o:before { + content: "\F094"; +} +.fa-phone:before { + content: "\F095"; +} +.fa-square-o:before { + content: "\F096"; +} +.fa-bookmark-o:before { + content: "\F097"; +} +.fa-phone-square:before { + content: "\F098"; +} +.fa-twitter:before { + content: "\F099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\F09A"; +} +.fa-github:before { + content: "\F09B"; +} +.fa-unlock:before { + content: "\F09C"; +} +.fa-credit-card:before { + content: "\F09D"; +} +.fa-feed:before, +.fa-rss:before { + content: "\F09E"; +} +.fa-hdd-o:before { + content: "\F0A0"; +} +.fa-bullhorn:before { + content: "\F0A1"; +} +.fa-bell:before { + content: "\F0F3"; +} +.fa-certificate:before { + content: "\F0A3"; +} +.fa-hand-o-right:before { + content: "\F0A4"; +} +.fa-hand-o-left:before { + content: "\F0A5"; +} +.fa-hand-o-up:before { + content: "\F0A6"; +} +.fa-hand-o-down:before { + content: "\F0A7"; +} +.fa-arrow-circle-left:before { + content: "\F0A8"; +} +.fa-arrow-circle-right:before { + content: "\F0A9"; +} +.fa-arrow-circle-up:before { + content: "\F0AA"; +} +.fa-arrow-circle-down:before { + content: "\F0AB"; +} +.fa-globe:before { + content: "\F0AC"; +} +.fa-wrench:before { + content: "\F0AD"; +} +.fa-tasks:before { + content: "\F0AE"; +} +.fa-filter:before { + content: "\F0B0"; +} +.fa-briefcase:before { + content: "\F0B1"; +} +.fa-arrows-alt:before { + content: "\F0B2"; +} +.fa-group:before, +.fa-users:before { + content: "\F0C0"; +} +.fa-chain:before, +.fa-link:before { + content: "\F0C1"; +} +.fa-cloud:before { + content: "\F0C2"; +} +.fa-flask:before { + content: "\F0C3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\F0C4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\F0C5"; +} +.fa-paperclip:before { + content: "\F0C6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\F0C7"; +} +.fa-square:before { + content: "\F0C8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\F0C9"; +} +.fa-list-ul:before { + content: "\F0CA"; +} +.fa-list-ol:before { + content: "\F0CB"; +} +.fa-strikethrough:before { + content: "\F0CC"; +} +.fa-underline:before { + content: "\F0CD"; +} +.fa-table:before { + content: "\F0CE"; +} +.fa-magic:before { + content: "\F0D0"; +} +.fa-truck:before { + content: "\F0D1"; +} +.fa-pinterest:before { + content: "\F0D2"; +} +.fa-pinterest-square:before { + content: "\F0D3"; +} +.fa-google-plus-square:before { + content: "\F0D4"; +} +.fa-google-plus:before { + content: "\F0D5"; +} +.fa-money:before { + content: "\F0D6"; +} +.fa-caret-down:before { + content: "\F0D7"; +} +.fa-caret-up:before { + content: "\F0D8"; +} +.fa-caret-left:before { + content: "\F0D9"; +} +.fa-caret-right:before { + content: "\F0DA"; +} +.fa-columns:before { + content: "\F0DB"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\F0DC"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\F0DD"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\F0DE"; +} +.fa-envelope:before { + content: "\F0E0"; +} +.fa-linkedin:before { + content: "\F0E1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\F0E2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\F0E3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\F0E4"; +} +.fa-comment-o:before { + content: "\F0E5"; +} +.fa-comments-o:before { + content: "\F0E6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\F0E7"; +} +.fa-sitemap:before { + content: "\F0E8"; +} +.fa-umbrella:before { + content: "\F0E9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\F0EA"; +} +.fa-lightbulb-o:before { + content: "\F0EB"; +} +.fa-exchange:before { + content: "\F0EC"; +} +.fa-cloud-download:before { + content: "\F0ED"; +} +.fa-cloud-upload:before { + content: "\F0EE"; +} +.fa-user-md:before { + content: "\F0F0"; +} +.fa-stethoscope:before { + content: "\F0F1"; +} +.fa-suitcase:before { + content: "\F0F2"; +} +.fa-bell-o:before { + content: "\F0A2"; +} +.fa-coffee:before { + content: "\F0F4"; +} +.fa-cutlery:before { + content: "\F0F5"; +} +.fa-file-text-o:before { + content: "\F0F6"; +} +.fa-building-o:before { + content: "\F0F7"; +} +.fa-hospital-o:before { + content: "\F0F8"; +} +.fa-ambulance:before { + content: "\F0F9"; +} +.fa-medkit:before { + content: "\F0FA"; +} +.fa-fighter-jet:before { + content: "\F0FB"; +} +.fa-beer:before { + content: "\F0FC"; +} +.fa-h-square:before { + content: "\F0FD"; +} +.fa-plus-square:before { + content: "\F0FE"; +} +.fa-angle-double-left:before { + content: "\F100"; +} +.fa-angle-double-right:before { + content: "\F101"; +} +.fa-angle-double-up:before { + content: "\F102"; +} +.fa-angle-double-down:before { + content: "\F103"; +} +.fa-angle-left:before { + content: "\F104"; +} +.fa-angle-right:before { + content: "\F105"; +} +.fa-angle-up:before { + content: "\F106"; +} +.fa-angle-down:before { + content: "\F107"; +} +.fa-desktop:before { + content: "\F108"; +} +.fa-laptop:before { + content: "\F109"; +} +.fa-tablet:before { + content: "\F10A"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\F10B"; +} +.fa-circle-o:before { + content: "\F10C"; +} +.fa-quote-left:before { + content: "\F10D"; +} +.fa-quote-right:before { + content: "\F10E"; +} +.fa-spinner:before { + content: "\F110"; +} +.fa-circle:before { + content: "\F111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\F112"; +} +.fa-github-alt:before { + content: "\F113"; +} +.fa-folder-o:before { + content: "\F114"; +} +.fa-folder-open-o:before { + content: "\F115"; +} +.fa-smile-o:before { + content: "\F118"; +} +.fa-frown-o:before { + content: "\F119"; +} +.fa-meh-o:before { + content: "\F11A"; +} +.fa-gamepad:before { + content: "\F11B"; +} +.fa-keyboard-o:before { + content: "\F11C"; +} +.fa-flag-o:before { + content: "\F11D"; +} +.fa-flag-checkered:before { + content: "\F11E"; +} +.fa-terminal:before { + content: "\F120"; +} +.fa-code:before { + content: "\F121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\F122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\F123"; +} +.fa-location-arrow:before { + content: "\F124"; +} +.fa-crop:before { + content: "\F125"; +} +.fa-code-fork:before { + content: "\F126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\F127"; +} +.fa-question:before { + content: "\F128"; +} +.fa-info:before { + content: "\F129"; +} +.fa-exclamation:before { + content: "\F12A"; +} +.fa-superscript:before { + content: "\F12B"; +} +.fa-subscript:before { + content: "\F12C"; +} +.fa-eraser:before { + content: "\F12D"; +} +.fa-puzzle-piece:before { + content: "\F12E"; +} +.fa-microphone:before { + content: "\F130"; +} +.fa-microphone-slash:before { + content: "\F131"; +} +.fa-shield:before { + content: "\F132"; +} +.fa-calendar-o:before { + content: "\F133"; +} +.fa-fire-extinguisher:before { + content: "\F134"; +} +.fa-rocket:before { + content: "\F135"; +} +.fa-maxcdn:before { + content: "\F136"; +} +.fa-chevron-circle-left:before { + content: "\F137"; +} +.fa-chevron-circle-right:before { + content: "\F138"; +} +.fa-chevron-circle-up:before { + content: "\F139"; +} +.fa-chevron-circle-down:before { + content: "\F13A"; +} +.fa-html5:before { + content: "\F13B"; +} +.fa-css3:before { + content: "\F13C"; +} +.fa-anchor:before { + content: "\F13D"; +} +.fa-unlock-alt:before { + content: "\F13E"; +} +.fa-bullseye:before { + content: "\F140"; +} +.fa-ellipsis-h:before { + content: "\F141"; +} +.fa-ellipsis-v:before { + content: "\F142"; +} +.fa-rss-square:before { + content: "\F143"; +} +.fa-play-circle:before { + content: "\F144"; +} +.fa-ticket:before { + content: "\F145"; +} +.fa-minus-square:before { + content: "\F146"; +} +.fa-minus-square-o:before { + content: "\F147"; +} +.fa-level-up:before { + content: "\F148"; +} +.fa-level-down:before { + content: "\F149"; +} +.fa-check-square:before { + content: "\F14A"; +} +.fa-pencil-square:before { + content: "\F14B"; +} +.fa-external-link-square:before { + content: "\F14C"; +} +.fa-share-square:before { + content: "\F14D"; +} +.fa-compass:before { + content: "\F14E"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\F150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\F151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\F152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\F153"; +} +.fa-gbp:before { + content: "\F154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\F155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\F156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\F157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\F158"; +} +.fa-won:before, +.fa-krw:before { + content: "\F159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\F15A"; +} +.fa-file:before { + content: "\F15B"; +} +.fa-file-text:before { + content: "\F15C"; +} +.fa-sort-alpha-asc:before { + content: "\F15D"; +} +.fa-sort-alpha-desc:before { + content: "\F15E"; +} +.fa-sort-amount-asc:before { + content: "\F160"; +} +.fa-sort-amount-desc:before { + content: "\F161"; +} +.fa-sort-numeric-asc:before { + content: "\F162"; +} +.fa-sort-numeric-desc:before { + content: "\F163"; +} +.fa-thumbs-up:before { + content: "\F164"; +} +.fa-thumbs-down:before { + content: "\F165"; +} +.fa-youtube-square:before { + content: "\F166"; +} +.fa-youtube:before { + content: "\F167"; +} +.fa-xing:before { + content: "\F168"; +} +.fa-xing-square:before { + content: "\F169"; +} +.fa-youtube-play:before { + content: "\F16A"; +} +.fa-dropbox:before { + content: "\F16B"; +} +.fa-stack-overflow:before { + content: "\F16C"; +} +.fa-instagram:before { + content: "\F16D"; +} +.fa-flickr:before { + content: "\F16E"; +} +.fa-adn:before { + content: "\F170"; +} +.fa-bitbucket:before { + content: "\F171"; +} +.fa-bitbucket-square:before { + content: "\F172"; +} +.fa-tumblr:before { + content: "\F173"; +} +.fa-tumblr-square:before { + content: "\F174"; +} +.fa-long-arrow-down:before { + content: "\F175"; +} +.fa-long-arrow-up:before { + content: "\F176"; +} +.fa-long-arrow-left:before { + content: "\F177"; +} +.fa-long-arrow-right:before { + content: "\F178"; +} +.fa-apple:before { + content: "\F179"; +} +.fa-windows:before { + content: "\F17A"; +} +.fa-android:before { + content: "\F17B"; +} +.fa-linux:before { + content: "\F17C"; +} +.fa-dribbble:before { + content: "\F17D"; +} +.fa-skype:before { + content: "\F17E"; +} +.fa-foursquare:before { + content: "\F180"; +} +.fa-trello:before { + content: "\F181"; +} +.fa-female:before { + content: "\F182"; +} +.fa-male:before { + content: "\F183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\F184"; +} +.fa-sun-o:before { + content: "\F185"; +} +.fa-moon-o:before { + content: "\F186"; +} +.fa-archive:before { + content: "\F187"; +} +.fa-bug:before { + content: "\F188"; +} +.fa-vk:before { + content: "\F189"; +} +.fa-weibo:before { + content: "\F18A"; +} +.fa-renren:before { + content: "\F18B"; +} +.fa-pagelines:before { + content: "\F18C"; +} +.fa-stack-exchange:before { + content: "\F18D"; +} +.fa-arrow-circle-o-right:before { + content: "\F18E"; +} +.fa-arrow-circle-o-left:before { + content: "\F190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\F191"; +} +.fa-dot-circle-o:before { + content: "\F192"; +} +.fa-wheelchair:before { + content: "\F193"; +} +.fa-vimeo-square:before { + content: "\F194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\F195"; +} +.fa-plus-square-o:before { + content: "\F196"; +} +.fa-space-shuttle:before { + content: "\F197"; +} +.fa-slack:before { + content: "\F198"; +} +.fa-envelope-square:before { + content: "\F199"; +} +.fa-wordpress:before { + content: "\F19A"; +} +.fa-openid:before { + content: "\F19B"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\F19C"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\F19D"; +} +.fa-yahoo:before { + content: "\F19E"; +} +.fa-google:before { + content: "\F1A0"; +} +.fa-reddit:before { + content: "\F1A1"; +} +.fa-reddit-square:before { + content: "\F1A2"; +} +.fa-stumbleupon-circle:before { + content: "\F1A3"; +} +.fa-stumbleupon:before { + content: "\F1A4"; +} +.fa-delicious:before { + content: "\F1A5"; +} +.fa-digg:before { + content: "\F1A6"; +} +.fa-pied-piper-pp:before { + content: "\F1A7"; +} +.fa-pied-piper-alt:before { + content: "\F1A8"; +} +.fa-drupal:before { + content: "\F1A9"; +} +.fa-joomla:before { + content: "\F1AA"; +} +.fa-language:before { + content: "\F1AB"; +} +.fa-fax:before { + content: "\F1AC"; +} +.fa-building:before { + content: "\F1AD"; +} +.fa-child:before { + content: "\F1AE"; +} +.fa-paw:before { + content: "\F1B0"; +} +.fa-spoon:before { + content: "\F1B1"; +} +.fa-cube:before { + content: "\F1B2"; +} +.fa-cubes:before { + content: "\F1B3"; +} +.fa-behance:before { + content: "\F1B4"; +} +.fa-behance-square:before { + content: "\F1B5"; +} +.fa-steam:before { + content: "\F1B6"; +} +.fa-steam-square:before { + content: "\F1B7"; +} +.fa-recycle:before { + content: "\F1B8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\F1B9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\F1BA"; +} +.fa-tree:before { + content: "\F1BB"; +} +.fa-spotify:before { + content: "\F1BC"; +} +.fa-deviantart:before { + content: "\F1BD"; +} +.fa-soundcloud:before { + content: "\F1BE"; +} +.fa-database:before { + content: "\F1C0"; +} +.fa-file-pdf-o:before { + content: "\F1C1"; +} +.fa-file-word-o:before { + content: "\F1C2"; +} +.fa-file-excel-o:before { + content: "\F1C3"; +} +.fa-file-powerpoint-o:before { + content: "\F1C4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\F1C5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\F1C6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\F1C7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\F1C8"; +} +.fa-file-code-o:before { + content: "\F1C9"; +} +.fa-vine:before { + content: "\F1CA"; +} +.fa-codepen:before { + content: "\F1CB"; +} +.fa-jsfiddle:before { + content: "\F1CC"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\F1CD"; +} +.fa-circle-o-notch:before { + content: "\F1CE"; +} +.fa-ra:before, +.fa-resistance:before, +.fa-rebel:before { + content: "\F1D0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\F1D1"; +} +.fa-git-square:before { + content: "\F1D2"; +} +.fa-git:before { + content: "\F1D3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\F1D4"; +} +.fa-tencent-weibo:before { + content: "\F1D5"; +} +.fa-qq:before { + content: "\F1D6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\F1D7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\F1D8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\F1D9"; +} +.fa-history:before { + content: "\F1DA"; +} +.fa-circle-thin:before { + content: "\F1DB"; +} +.fa-header:before { + content: "\F1DC"; +} +.fa-paragraph:before { + content: "\F1DD"; +} +.fa-sliders:before { + content: "\F1DE"; +} +.fa-share-alt:before { + content: "\F1E0"; +} +.fa-share-alt-square:before { + content: "\F1E1"; +} +.fa-bomb:before { + content: "\F1E2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\F1E3"; +} +.fa-tty:before { + content: "\F1E4"; +} +.fa-binoculars:before { + content: "\F1E5"; +} +.fa-plug:before { + content: "\F1E6"; +} +.fa-slideshare:before { + content: "\F1E7"; +} +.fa-twitch:before { + content: "\F1E8"; +} +.fa-yelp:before { + content: "\F1E9"; +} +.fa-newspaper-o:before { + content: "\F1EA"; +} +.fa-wifi:before { + content: "\F1EB"; +} +.fa-calculator:before { + content: "\F1EC"; +} +.fa-paypal:before { + content: "\F1ED"; +} +.fa-google-wallet:before { + content: "\F1EE"; +} +.fa-cc-visa:before { + content: "\F1F0"; +} +.fa-cc-mastercard:before { + content: "\F1F1"; +} +.fa-cc-discover:before { + content: "\F1F2"; +} +.fa-cc-amex:before { + content: "\F1F3"; +} +.fa-cc-paypal:before { + content: "\F1F4"; +} +.fa-cc-stripe:before { + content: "\F1F5"; +} +.fa-bell-slash:before { + content: "\F1F6"; +} +.fa-bell-slash-o:before { + content: "\F1F7"; +} +.fa-trash:before { + content: "\F1F8"; +} +.fa-copyright:before { + content: "\F1F9"; +} +.fa-at:before { + content: "\F1FA"; +} +.fa-eyedropper:before { + content: "\F1FB"; +} +.fa-paint-brush:before { + content: "\F1FC"; +} +.fa-birthday-cake:before { + content: "\F1FD"; +} +.fa-area-chart:before { + content: "\F1FE"; +} +.fa-pie-chart:before { + content: "\F200"; +} +.fa-line-chart:before { + content: "\F201"; +} +.fa-lastfm:before { + content: "\F202"; +} +.fa-lastfm-square:before { + content: "\F203"; +} +.fa-toggle-off:before { + content: "\F204"; +} +.fa-toggle-on:before { + content: "\F205"; +} +.fa-bicycle:before { + content: "\F206"; +} +.fa-bus:before { + content: "\F207"; +} +.fa-ioxhost:before { + content: "\F208"; +} +.fa-angellist:before { + content: "\F209"; +} +.fa-cc:before { + content: "\F20A"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\F20B"; +} +.fa-meanpath:before { + content: "\F20C"; +} +.fa-buysellads:before { + content: "\F20D"; +} +.fa-connectdevelop:before { + content: "\F20E"; +} +.fa-dashcube:before { + content: "\F210"; +} +.fa-forumbee:before { + content: "\F211"; +} +.fa-leanpub:before { + content: "\F212"; +} +.fa-sellsy:before { + content: "\F213"; +} +.fa-shirtsinbulk:before { + content: "\F214"; +} +.fa-simplybuilt:before { + content: "\F215"; +} +.fa-skyatlas:before { + content: "\F216"; +} +.fa-cart-plus:before { + content: "\F217"; +} +.fa-cart-arrow-down:before { + content: "\F218"; +} +.fa-diamond:before { + content: "\F219"; +} +.fa-ship:before { + content: "\F21A"; +} +.fa-user-secret:before { + content: "\F21B"; +} +.fa-motorcycle:before { + content: "\F21C"; +} +.fa-street-view:before { + content: "\F21D"; +} +.fa-heartbeat:before { + content: "\F21E"; +} +.fa-venus:before { + content: "\F221"; +} +.fa-mars:before { + content: "\F222"; +} +.fa-mercury:before { + content: "\F223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\F224"; +} +.fa-transgender-alt:before { + content: "\F225"; +} +.fa-venus-double:before { + content: "\F226"; +} +.fa-mars-double:before { + content: "\F227"; +} +.fa-venus-mars:before { + content: "\F228"; +} +.fa-mars-stroke:before { + content: "\F229"; +} +.fa-mars-stroke-v:before { + content: "\F22A"; +} +.fa-mars-stroke-h:before { + content: "\F22B"; +} +.fa-neuter:before { + content: "\F22C"; +} +.fa-genderless:before { + content: "\F22D"; +} +.fa-facebook-official:before { + content: "\F230"; +} +.fa-pinterest-p:before { + content: "\F231"; +} +.fa-whatsapp:before { + content: "\F232"; +} +.fa-server:before { + content: "\F233"; +} +.fa-user-plus:before { + content: "\F234"; +} +.fa-user-times:before { + content: "\F235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\F236"; +} +.fa-viacoin:before { + content: "\F237"; +} +.fa-train:before { + content: "\F238"; +} +.fa-subway:before { + content: "\F239"; +} +.fa-medium:before { + content: "\F23A"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\F23B"; +} +.fa-optin-monster:before { + content: "\F23C"; +} +.fa-opencart:before { + content: "\F23D"; +} +.fa-expeditedssl:before { + content: "\F23E"; +} +.fa-battery-4:before, +.fa-battery:before, +.fa-battery-full:before { + content: "\F240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\F241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\F242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\F243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\F244"; +} +.fa-mouse-pointer:before { + content: "\F245"; +} +.fa-i-cursor:before { + content: "\F246"; +} +.fa-object-group:before { + content: "\F247"; +} +.fa-object-ungroup:before { + content: "\F248"; +} +.fa-sticky-note:before { + content: "\F249"; +} +.fa-sticky-note-o:before { + content: "\F24A"; +} +.fa-cc-jcb:before { + content: "\F24B"; +} +.fa-cc-diners-club:before { + content: "\F24C"; +} +.fa-clone:before { + content: "\F24D"; +} +.fa-balance-scale:before { + content: "\F24E"; +} +.fa-hourglass-o:before { + content: "\F250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\F251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\F252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\F253"; +} +.fa-hourglass:before { + content: "\F254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\F255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\F256"; +} +.fa-hand-scissors-o:before { + content: "\F257"; +} +.fa-hand-lizard-o:before { + content: "\F258"; +} +.fa-hand-spock-o:before { + content: "\F259"; +} +.fa-hand-pointer-o:before { + content: "\F25A"; +} +.fa-hand-peace-o:before { + content: "\F25B"; +} +.fa-trademark:before { + content: "\F25C"; +} +.fa-registered:before { + content: "\F25D"; +} +.fa-creative-commons:before { + content: "\F25E"; +} +.fa-gg:before { + content: "\F260"; +} +.fa-gg-circle:before { + content: "\F261"; +} +.fa-tripadvisor:before { + content: "\F262"; +} +.fa-odnoklassniki:before { + content: "\F263"; +} +.fa-odnoklassniki-square:before { + content: "\F264"; +} +.fa-get-pocket:before { + content: "\F265"; +} +.fa-wikipedia-w:before { + content: "\F266"; +} +.fa-safari:before { + content: "\F267"; +} +.fa-chrome:before { + content: "\F268"; +} +.fa-firefox:before { + content: "\F269"; +} +.fa-opera:before { + content: "\F26A"; +} +.fa-internet-explorer:before { + content: "\F26B"; +} +.fa-tv:before, +.fa-television:before { + content: "\F26C"; +} +.fa-contao:before { + content: "\F26D"; +} +.fa-500px:before { + content: "\F26E"; +} +.fa-amazon:before { + content: "\F270"; +} +.fa-calendar-plus-o:before { + content: "\F271"; +} +.fa-calendar-minus-o:before { + content: "\F272"; +} +.fa-calendar-times-o:before { + content: "\F273"; +} +.fa-calendar-check-o:before { + content: "\F274"; +} +.fa-industry:before { + content: "\F275"; +} +.fa-map-pin:before { + content: "\F276"; +} +.fa-map-signs:before { + content: "\F277"; +} +.fa-map-o:before { + content: "\F278"; +} +.fa-map:before { + content: "\F279"; +} +.fa-commenting:before { + content: "\F27A"; +} +.fa-commenting-o:before { + content: "\F27B"; +} +.fa-houzz:before { + content: "\F27C"; +} +.fa-vimeo:before { + content: "\F27D"; +} +.fa-black-tie:before { + content: "\F27E"; +} +.fa-fonticons:before { + content: "\F280"; +} +.fa-reddit-alien:before { + content: "\F281"; +} +.fa-edge:before { + content: "\F282"; +} +.fa-credit-card-alt:before { + content: "\F283"; +} +.fa-codiepie:before { + content: "\F284"; +} +.fa-modx:before { + content: "\F285"; +} +.fa-fort-awesome:before { + content: "\F286"; +} +.fa-usb:before { + content: "\F287"; +} +.fa-product-hunt:before { + content: "\F288"; +} +.fa-mixcloud:before { + content: "\F289"; +} +.fa-scribd:before { + content: "\F28A"; +} +.fa-pause-circle:before { + content: "\F28B"; +} +.fa-pause-circle-o:before { + content: "\F28C"; +} +.fa-stop-circle:before { + content: "\F28D"; +} +.fa-stop-circle-o:before { + content: "\F28E"; +} +.fa-shopping-bag:before { + content: "\F290"; +} +.fa-shopping-basket:before { + content: "\F291"; +} +.fa-hashtag:before { + content: "\F292"; +} +.fa-bluetooth:before { + content: "\F293"; +} +.fa-bluetooth-b:before { + content: "\F294"; +} +.fa-percent:before { + content: "\F295"; +} +.fa-gitlab:before { + content: "\F296"; +} +.fa-wpbeginner:before { + content: "\F297"; +} +.fa-wpforms:before { + content: "\F298"; +} +.fa-envira:before { + content: "\F299"; +} +.fa-universal-access:before { + content: "\F29A"; +} +.fa-wheelchair-alt:before { + content: "\F29B"; +} +.fa-question-circle-o:before { + content: "\F29C"; +} +.fa-blind:before { + content: "\F29D"; +} +.fa-audio-description:before { + content: "\F29E"; +} +.fa-volume-control-phone:before { + content: "\F2A0"; +} +.fa-braille:before { + content: "\F2A1"; +} +.fa-assistive-listening-systems:before { + content: "\F2A2"; +} +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\F2A3"; +} +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\F2A4"; +} +.fa-glide:before { + content: "\F2A5"; +} +.fa-glide-g:before { + content: "\F2A6"; +} +.fa-signing:before, +.fa-sign-language:before { + content: "\F2A7"; +} +.fa-low-vision:before { + content: "\F2A8"; +} +.fa-viadeo:before { + content: "\F2A9"; +} +.fa-viadeo-square:before { + content: "\F2AA"; +} +.fa-snapchat:before { + content: "\F2AB"; +} +.fa-snapchat-ghost:before { + content: "\F2AC"; +} +.fa-snapchat-square:before { + content: "\F2AD"; +} +.fa-pied-piper:before { + content: "\F2AE"; +} +.fa-first-order:before { + content: "\F2B0"; +} +.fa-yoast:before { + content: "\F2B1"; +} +.fa-themeisle:before { + content: "\F2B2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\F2B3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\F2B4"; +} +.fa-handshake-o:before { + content: "\F2B5"; +} +.fa-envelope-open:before { + content: "\F2B6"; +} +.fa-envelope-open-o:before { + content: "\F2B7"; +} +.fa-linode:before { + content: "\F2B8"; +} +.fa-address-book:before { + content: "\F2B9"; +} +.fa-address-book-o:before { + content: "\F2BA"; +} +.fa-vcard:before, +.fa-address-card:before { + content: "\F2BB"; +} +.fa-vcard-o:before, +.fa-address-card-o:before { + content: "\F2BC"; +} +.fa-user-circle:before { + content: "\F2BD"; +} +.fa-user-circle-o:before { + content: "\F2BE"; +} +.fa-user-o:before { + content: "\F2C0"; +} +.fa-id-badge:before { + content: "\F2C1"; +} +.fa-drivers-license:before, +.fa-id-card:before { + content: "\F2C2"; +} +.fa-drivers-license-o:before, +.fa-id-card-o:before { + content: "\F2C3"; +} +.fa-quora:before { + content: "\F2C4"; +} +.fa-free-code-camp:before { + content: "\F2C5"; +} +.fa-telegram:before { + content: "\F2C6"; +} +.fa-thermometer-4:before, +.fa-thermometer:before, +.fa-thermometer-full:before { + content: "\F2C7"; +} +.fa-thermometer-3:before, +.fa-thermometer-three-quarters:before { + content: "\F2C8"; +} +.fa-thermometer-2:before, +.fa-thermometer-half:before { + content: "\F2C9"; +} +.fa-thermometer-1:before, +.fa-thermometer-quarter:before { + content: "\F2CA"; +} +.fa-thermometer-0:before, +.fa-thermometer-empty:before { + content: "\F2CB"; +} +.fa-shower:before { + content: "\F2CC"; +} +.fa-bathtub:before, +.fa-s15:before, +.fa-bath:before { + content: "\F2CD"; +} +.fa-podcast:before { + content: "\F2CE"; +} +.fa-window-maximize:before { + content: "\F2D0"; +} +.fa-window-minimize:before { + content: "\F2D1"; +} +.fa-window-restore:before { + content: "\F2D2"; +} +.fa-times-rectangle:before, +.fa-window-close:before { + content: "\F2D3"; +} +.fa-times-rectangle-o:before, +.fa-window-close-o:before { + content: "\F2D4"; +} +.fa-bandcamp:before { + content: "\F2D5"; +} +.fa-grav:before { + content: "\F2D6"; +} +.fa-etsy:before { + content: "\F2D7"; +} +.fa-imdb:before { + content: "\F2D8"; +} +.fa-ravelry:before { + content: "\F2D9"; +} +.fa-eercast:before { + content: "\F2DA"; +} +.fa-microchip:before { + content: "\F2DB"; +} +.fa-snowflake-o:before { + content: "\F2DC"; +} +.fa-superpowers:before { + content: "\F2DD"; +} +.fa-wpexplorer:before { + content: "\F2DE"; +} +.fa-meetup:before { + content: "\F2E0"; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +.text-overflow-pf { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + word-wrap: normal; +} +.alert { + border-width: 1px; + padding-left: 47px; + padding-right: 14px; + position: relative; + word-wrap: break-word; +} +.alert .alert-link { + color: #0088ce; +} +.alert .alert-link:hover { + color: #00659c; +} +.alert > .btn.pull-right { + margin-top: -3px; +} +.alert > .pficon { + font-size: 22px; + position: absolute; + left: 13px; + top: 10px; +} +.alert .close { + opacity: 0.85; + filter: alpha(opacity=85); +} +.alert .close:hover, +.alert .close:focus { + opacity: 1; + filter: alpha(opacity=100); +} +.alert .pficon-info { + color: #4d5258; +} +.alert-dismissable { + padding-right: 28px; +} +.alert-dismissable .close { + right: -13px; + top: 1px; +} +.badge { + margin-left: 6px; +} +.nav-pills > li > a > .badge { + margin-left: 6px; +} +.breadcrumb { + padding-left: 0; +} +.breadcrumb > .active strong { + font-weight: 600; +} +.breadcrumb > li { + display: inline; + /* IE8 */ +} +.breadcrumb > li + li:before { + color: #9c9c9c; + content: "\F101"; + font-family: "FontAwesome"; + font-size: 11px; + padding: 0 9px 0 7px; +} +.btn { + box-shadow: 0 2px 3px rgba(3, 3, 3, 0.1); +} +.btn:active { + box-shadow: inset 0 2px 8px rgba(3, 3, 3, 0.2); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + background-color: #fafafa !important; + background-image: none !important; + border-color: #d1d1d1 !important; + color: #8b8d8f !important; + opacity: 1; +} +.btn.disabled:active, +.btn[disabled]:active, +fieldset[disabled] .btn:active { + box-shadow: none; +} +.btn.disabled.btn-link, +.btn[disabled].btn-link, +fieldset[disabled] .btn.btn-link { + background-color: transparent !important; + border: 0; +} +.btn-danger { + background-color: #a30000; + background-image: linear-gradient(to bottom, #cc0000 0%, #a30000 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffcc0000', endColorstr='#ffa30000', GradientType=0); + border-color: #8b0000; + color: #fff; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + background-color: #a30000; + background-image: none; + border-color: #8b0000; + color: #fff; +} +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open .dropdown-toggle.btn-danger.focus { + background-color: #8a0000; + border-color: #670000; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #a30000; + border-color: #8b0000; +} +.btn-default { + background-color: #f1f1f1; + background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffededed', GradientType=0); + border-color: #bbb; + color: #4d5258; +} +.btn-default:hover, +.btn-default:focus, +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + background-color: #f1f1f1; + background-image: none; + border-color: #bbb; + color: #4d5258; +} +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open .dropdown-toggle.btn-default.focus { + background-color: #e5e5e5; + border-color: #a9a9a9; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #f1f1f1; + border-color: #bbb; +} +.btn-link, +.btn-link:active { + box-shadow: none; +} +.btn-primary { + background-color: #0088ce; + background-image: linear-gradient(to bottom, #39a5dc 0%, #0088ce 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff39a5dc', endColorstr='#ff0088ce', GradientType=0); + border-color: #00659c; + color: #fff; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + background-color: #0088ce; + background-image: none; + border-color: #00659c; + color: #fff; +} +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open .dropdown-toggle.btn-primary.focus { + background-color: #0077b5; + border-color: #004e78; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #0088ce; + border-color: #00659c; +} +.btn-xs, +.btn-group-xs .btn, +.btn-group-xs > .btn { + font-weight: 400; +} +.caret { + font-family: "FontAwesome"; + font-weight: normal; + height: 9px; + position: relative; + vertical-align: baseline; + width: 12px; +} +.caret:before { + bottom: 0; + content: "\F107"; + left: 0; + line-height: 12px; + position: absolute; + text-align: center; + top: -1px; + right: 0; +} +.dropup .caret:before { + content: "\F106"; +} +.dropdown-menu .divider { + background-color: #ededed; + height: 1px; + margin: 4px 1px; + overflow: hidden; +} +.dropdown-menu > li > a { + border-color: transparent; + border-style: solid; + border-width: 1px 0; + padding: 1px 10px; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + border-color: #bee1f4; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.dropdown-menu > li > a:active { + background-color: #0088ce; + border-color: #0088ce; + color: #fff !important; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #0088ce !important; + border-color: #0088ce !important; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + border-color: transparent; +} +.dropdown-menu > .selected > a { + background-color: #0088ce; + border-color: #0088ce; + color: #fff; +} +.dropdown-menu > .selected > a small { + color: rgba(255, 255, 255, 0.5); +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + border-color: transparent; +} +.dropdown-header { + padding-left: 10px; + padding-right: 10px; + text-transform: uppercase; +} +.btn-group > .dropdown-menu, +.dropdown > .dropdown-menu, +.input-group-btn > .dropdown-menu { + margin-top: -1px; +} +.dropup .dropdown-menu { + margin-bottom: -1px; +} +.dropdown-submenu { + position: relative; +} +.dropdown-submenu:hover > a { + background-color: #def3ff; + border-color: #bee1f4; +} +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} +.dropdown-submenu.pull-left { + float: none !important; +} +.dropdown-submenu.pull-left > .dropdown-menu { + left: auto; + margin-left: 10px; + right: 100%; +} +.dropdown-submenu > a { + padding-right: 20px !important; +} +.dropdown-submenu > a:after { + content: "\F105"; + font-family: "FontAwesome"; + display: block; + position: absolute; + right: 10px; + top: 2px; +} +.dropdown-submenu > .dropdown-menu { + left: 100%; + margin-top: 0; + top: -6px; +} +.dropup .dropdown-submenu > .dropdown-menu { + bottom: -5px; + top: auto; +} +.open .dropdown-submenu.active > .dropdown-menu { + display: block; +} +.dropdown-kebab-pf .btn-link { + color: #252525; + font-size: 16px; + line-height: 1; + padding: 4px 10px; + margin-left: -10px; + margin-right: -10px; +} +.dropdown-kebab-pf .btn-link:active, +.dropdown-kebab-pf .btn-link:focus, +.dropdown-kebab-pf .btn-link:hover { + color: #0088ce; +} +.dropdown-kebab-pf .dropdown-menu { + left: -15px; + margin-top: 11px; +} +.dropdown-kebab-pf .dropdown-menu.dropdown-menu-right { + left: auto; + right: -15px; +} +.dropdown-kebab-pf .dropdown-menu.dropdown-menu-right:after, +.dropdown-kebab-pf .dropdown-menu.dropdown-menu-right:before { + left: auto; + right: 6px; +} +.dropdown-kebab-pf .dropdown-menu:after, +.dropdown-kebab-pf .dropdown-menu:before { + border-bottom-color: #bbb; + border-bottom-style: solid; + border-bottom-width: 10px; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + content: ""; + display: inline-block; + left: 6px; + position: absolute; + top: -11px; +} +.dropdown-kebab-pf .dropdown-menu:after { + border-bottom-color: #fff; + top: -10px; +} +.dropdown-kebab-pf.dropup .dropdown-menu { + margin-bottom: 11px; + margin-top: 0; +} +.dropdown-kebab-pf.dropup .dropdown-menu:after, +.dropdown-kebab-pf.dropup .dropdown-menu:before { + border-bottom: none; + border-top-color: #bbb; + border-top-style: solid; + border-top-width: 10px; + bottom: -11px; + top: auto; +} +.dropdown-kebab-pf.dropup .dropdown-menu:after { + border-top-color: #fff; + bottom: -10px; +} +.chars-remaining-pf span { + font-weight: 600; + padding-right: 5px; +} +.chars-warn-remaining-pf { + color: #cc0000; +} +.fields-status-pf { + color: #8b8d8f; + margin-bottom: 15px; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + box-shadow: none; + color: #8b8d8f; +} +.form-control[disabled]:hover, +.form-control[readonly]:hover, +fieldset[disabled] .form-control:hover { + border-color: #bbb; +} +.form-control:hover { + border-color: #7dc3e8; +} +.has-error .form-control:hover { + border-color: #990000; +} +.has-success .form-control:hover { + border-color: #2b542c; +} +.has-warning .form-control:hover { + border-color: #bb6106; +} +.has-error .checkbox, +.has-success .checkbox, +.has-warning .checkbox, +.has-error .checkbox-inline, +.has-success .checkbox-inline, +.has-warning .checkbox-inline, +.has-error .control-label, +.has-success .control-label, +.has-warning .control-label, +.has-error .radio, +.has-success .radio, +.has-warning .radio, +.has-error .radio-inline, +.has-success .radio-inline, +.has-warning .radio-inline, +.has-error.checkbox label, +.has-success.checkbox label, +.has-warning.checkbox label, +.has-error.checkbox-inline label, +.has-success.checkbox-inline label, +.has-warning.checkbox-inline label, +.has-error.radio label, +.has-success.radio label, +.has-warning.radio label, +.has-error.radio-inline label, +.has-success.radio-inline label, +.has-warning.radio-inline label { + color: #363636; +} +.help-block { + margin-bottom: 0px; +} +.input-group .input-group-btn .btn { + box-shadow: none; +} +label { + font-weight: 600; +} +label.required-pf:after { + color: #cc0000; + content: "*"; + margin-left: 3px; +} +span.required-pf { + color: #cc0000; +} +.fields-section-pf { + border-color: #ededed; + border-style: solid; + border-width: 1px 0 0; + margin-top: 25px; + padding: 15px 0 0; +} +.fields-section-header-pf { + border: none; + font-size: 12px; + margin: 0; + padding-right: 10px; + width: auto; +} +.fields-section-header-pf .fa-angle-right { + cursor: pointer; + font-size: 14px; + width: 14px; +} +.label { + border-radius: 0; + font-size: 100%; + font-weight: 600; +} +h1 .label, +h2 .label, +h3 .label, +h4 .label, +h5 .label, +h6 .label { + font-size: 75%; +} +.list-group { + border-top: 1px solid #ededed; +} +.list-group .list-group-item:first-child { + border-top: 0; +} +.list-group-item { + border-left: 0; + border-right: 0; +} +.list-group-item-heading { + font-weight: 600; +} +.modal-header { + background-color: #f5f5f5; + border-bottom: none; + padding: 10px 18px; +} +.modal-header .close { + margin-top: 2px; +} +.modal-title { + font-size: 13px; + font-weight: 700; +} +.modal-footer { + border-top: none; + margin-top: 15px; + padding: 14px 15px 15px; +} +.modal-footer > .btn { + padding-left: 10px; + padding-right: 10px; +} +.modal-footer > .btn > .fa-angle-left { + margin-right: 5px; +} +.modal-footer > .btn > .fa-angle-right { + margin-left: 5px; +} +.pager li > a, +.pager li > span { + background-color: #f1f1f1; + background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffededed', GradientType=0); + border-color: #bbb; + color: #4d5258; + font-weight: 600; + line-height: 22px; + padding: 2px 14px; +} +.pager li > a:hover, +.pager li > span:hover, +.pager li > a:focus, +.pager li > span:focus, +.pager li > a:active, +.pager li > span:active, +.pager li > a.active, +.pager li > span.active, +.open .dropdown-toggle.pager li > a, +.open .dropdown-toggle.pager li > span { + background-color: #f1f1f1; + background-image: none; + border-color: #bbb; + color: #4d5258; +} +.pager li > a:active, +.pager li > span:active, +.pager li > a.active, +.pager li > span.active, +.open .dropdown-toggle.pager li > a, +.open .dropdown-toggle.pager li > span { + background-image: none; +} +.pager li > a:active:hover, +.pager li > span:active:hover, +.pager li > a.active:hover, +.pager li > span.active:hover, +.open .dropdown-toggle.pager li > a:hover, +.open .dropdown-toggle.pager li > span:hover, +.pager li > a:active:focus, +.pager li > span:active:focus, +.pager li > a.active:focus, +.pager li > span.active:focus, +.open .dropdown-toggle.pager li > a:focus, +.open .dropdown-toggle.pager li > span:focus, +.pager li > a:active.focus, +.pager li > span:active.focus, +.pager li > a.active.focus, +.pager li > span.active.focus, +.open .dropdown-toggle.pager li > a.focus, +.open .dropdown-toggle.pager li > span.focus { + background-color: #e5e5e5; + border-color: #a9a9a9; +} +.pager li > a.disabled, +.pager li > span.disabled, +.pager li > a[disabled], +.pager li > span[disabled], +fieldset[disabled] .pager li > a, +fieldset[disabled] .pager li > span, +.pager li > a.disabled:hover, +.pager li > span.disabled:hover, +.pager li > a[disabled]:hover, +.pager li > span[disabled]:hover, +fieldset[disabled] .pager li > a:hover, +fieldset[disabled] .pager li > span:hover, +.pager li > a.disabled:focus, +.pager li > span.disabled:focus, +.pager li > a[disabled]:focus, +.pager li > span[disabled]:focus, +fieldset[disabled] .pager li > a:focus, +fieldset[disabled] .pager li > span:focus, +.pager li > a.disabled:active, +.pager li > span.disabled:active, +.pager li > a[disabled]:active, +.pager li > span[disabled]:active, +fieldset[disabled] .pager li > a:active, +fieldset[disabled] .pager li > span:active, +.pager li > a.disabled.active, +.pager li > span.disabled.active, +.pager li > a[disabled].active, +.pager li > span[disabled].active, +fieldset[disabled] .pager li > a.active, +fieldset[disabled] .pager li > span.active { + background-color: #f1f1f1; + border-color: #bbb; +} +.pager li > a > .i, +.pager li > span > .i { + font-size: 18px; + vertical-align: top; + margin: 2px 0; +} +.pager li a:active { + background-image: none; + box-shadow: inset 0 3px 5px rgba(3, 3, 3, 0.125); + outline: 0; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > a:active, +.pager .disabled > span { + background: #f5f5f5; + box-shadow: none; + color: #8b8d8f; + cursor: default; +} +.pager .next > a > .i, +.pager .next > span > .i { + margin-left: 5px; +} +.pager .previous > a > .i, +.pager .previous > span > .i { + margin-right: 5px; +} +.pager-sm li > a, +.pager-sm li > span { + font-weight: 400; + line-height: 16px; + padding: 1px 10px; +} +.pager-sm li > a > .i, +.pager-sm li > span > .i { + font-size: 12px; +} +.pagination > li > a, +.pagination > li > span { + background-color: #f1f1f1; + background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffededed', GradientType=0); + border-color: #bbb; + color: #4d5258; + cursor: default; + font-weight: 600; + padding: 2px 10px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus, +.pagination > li > a:active, +.pagination > li > span:active, +.pagination > li > a.active, +.pagination > li > span.active, +.open .dropdown-toggle.pagination > li > a, +.open .dropdown-toggle.pagination > li > span { + background-color: #f1f1f1; + background-image: none; + border-color: #bbb; + color: #4d5258; +} +.pagination > li > a:active, +.pagination > li > span:active, +.pagination > li > a.active, +.pagination > li > span.active, +.open .dropdown-toggle.pagination > li > a, +.open .dropdown-toggle.pagination > li > span { + background-image: none; +} +.pagination > li > a:active:hover, +.pagination > li > span:active:hover, +.pagination > li > a.active:hover, +.pagination > li > span.active:hover, +.open .dropdown-toggle.pagination > li > a:hover, +.open .dropdown-toggle.pagination > li > span:hover, +.pagination > li > a:active:focus, +.pagination > li > span:active:focus, +.pagination > li > a.active:focus, +.pagination > li > span.active:focus, +.open .dropdown-toggle.pagination > li > a:focus, +.open .dropdown-toggle.pagination > li > span:focus, +.pagination > li > a:active.focus, +.pagination > li > span:active.focus, +.pagination > li > a.active.focus, +.pagination > li > span.active.focus, +.open .dropdown-toggle.pagination > li > a.focus, +.open .dropdown-toggle.pagination > li > span.focus { + background-color: #e5e5e5; + border-color: #a9a9a9; +} +.pagination > li > a.disabled, +.pagination > li > span.disabled, +.pagination > li > a[disabled], +.pagination > li > span[disabled], +fieldset[disabled] .pagination > li > a, +fieldset[disabled] .pagination > li > span, +.pagination > li > a.disabled:hover, +.pagination > li > span.disabled:hover, +.pagination > li > a[disabled]:hover, +.pagination > li > span[disabled]:hover, +fieldset[disabled] .pagination > li > a:hover, +fieldset[disabled] .pagination > li > span:hover, +.pagination > li > a.disabled:focus, +.pagination > li > span.disabled:focus, +.pagination > li > a[disabled]:focus, +.pagination > li > span[disabled]:focus, +fieldset[disabled] .pagination > li > a:focus, +fieldset[disabled] .pagination > li > span:focus, +.pagination > li > a.disabled:active, +.pagination > li > span.disabled:active, +.pagination > li > a[disabled]:active, +.pagination > li > span[disabled]:active, +fieldset[disabled] .pagination > li > a:active, +fieldset[disabled] .pagination > li > span:active, +.pagination > li > a.disabled.active, +.pagination > li > span.disabled.active, +.pagination > li > a[disabled].active, +.pagination > li > span[disabled].active, +fieldset[disabled] .pagination > li > a.active, +fieldset[disabled] .pagination > li > span.active { + background-color: #f1f1f1; + border-color: #bbb; +} +.pagination > li > a > .i, +.pagination > li > span > .i { + font-size: 15px; + vertical-align: top; + margin: 2px 0; +} +.pagination > li > a:active, +.pagination > li > span:active { + box-shadow: inset 0 2px 8px rgba(3, 3, 3, 0.2); +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + background-color: #f1f1f1; + border-color: #bbb; + box-shadow: inset 0 2px 8px rgba(3, 3, 3, 0.2); + color: #4d5258; + background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffededed', GradientType=0); +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + box-shadow: none; + cursor: default; + background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffededed', GradientType=0); +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 2px 6px; + font-size: 11px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 1px; + border-top-left-radius: 1px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 1px; + border-top-right-radius: 1px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + font-weight: 400; +} +.pagination-sm > li > a > .i, +.pagination-sm > li > span > .i { + font-size: 12px; + margin-top: 2px; +} +.content-view-pf-pagination { + background-color: #f5f5f5; + border: 1px solid #d1d1d1; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: justify; + justify-content: space-between; +} +.content-view-pf-pagination.table-view-pf-pagination { + border-top: none; +} +.content-view-pf-pagination .form-group { + -ms-flex-align: baseline; + align-items: baseline; + display: -ms-flexbox; + display: flex; + -ms-flex-positive: 1; + flex-grow: 1; + float: left; + margin: 5px; +} +@supports (display: flex) { + .content-view-pf-pagination .form-group { + float: none; + } +} +.content-view-pf-pagination .form-group:last-child { + -ms-flex-pack: end; + justify-content: flex-end; + float: right; +} +@supports (display: flex) { + .content-view-pf-pagination .form-group:last-child { + float: none; + } +} +.content-view-pf-pagination .form-group .pagination-pf-pagesize.bootstrap-select.btn-group { + display: -ms-flexbox; + display: flex; + margin-right: 5px; + width: auto; +} +.content-view-pf-pagination .pagination-pf-page { + margin-left: 10px; + margin-right: 5px; + padding: 0 2px 2px; + text-align: right; + width: 2.5em; +} +.content-view-pf-pagination .pagination { + display: -ms-flexbox; + display: flex; + margin: 0 0 0 10px; +} +.content-view-pf-pagination .pagination a { + float: none; +} +@supports (display: flex) { + .content-view-pf-pagination .pagination a { + display: block; + } +} +.panel-title { + font-weight: 700; +} +.panel-group .panel { + color: #4d5258; +} +.panel-group .panel + .panel { + margin-top: -1px; +} +.panel-group .panel-default { + border-color: #bbb; + border-top-color: #bbb; +} +.panel-group .panel-default .panel-heading { + background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffededed', GradientType=0); +} +.panel-group .panel-default .panel-heading + .panel-collapse .panel-body { + border-top: 1px solid #d1d1d1; +} +.panel-group .panel-info { + border-color: #00659c; +} +.panel-group .panel-info .panel-heading { + background-color: #dae5f4; +} +.panel-group .panel-info + .panel-default { + border-top-color: #00659c; +} +.panel-group .panel-primary { + border-color: #39a5dc; +} +.panel-group .panel-primary .panel-heading { + background-color: #def0f9; +} +.panel-group .panel-primary + .panel-default { + border-top-color: #39a5dc; +} +.panel-group .panel-primary + .panel-info { + border-top-color: #39a5dc; +} +.panel-group .panel-success { + border-color: #3f9c35; +} +.panel-group .panel-success .panel-heading { + background-color: #e9f4e9; +} +.panel-group .panel-success + .panel-default { + border-top-color: #3f9c35; +} +.panel-group .panel-success + .panel-info { + border-top-color: #3f9c35; +} +.panel-group .panel-success + .panel-primary { + border-top-color: #3f9c35; +} +.panel-group .panel-warning { + border-color: #ec7a08; +} +.panel-group .panel-warning .panel-heading { + background-color: #fdf2e5; +} +.panel-group .panel-warning + .panel-default { + border-top-color: #ec7a08; +} +.panel-group .panel-warning + .panel-info { + border-top-color: #ec7a08; +} +.panel-group .panel-warning + .panel-primary { + border-top-color: #ec7a08; +} +.panel-group .panel-warning + .panel-success { + border-top-color: #ec7a08; +} +.panel-group .panel-danger { + border-color: #cc0000; +} +.panel-group .panel-danger .panel-heading { + background-color: #ffe6e6; +} +.panel-group .panel-danger + .panel-default { + border-top-color: #cc0000; +} +.panel-group .panel-danger + .panel-info { + border-top-color: #cc0000; +} +.panel-group .panel-danger + .panel-primary { + border-top-color: #cc0000; +} +.panel-group .panel-danger + .panel-success { + border-top-color: #cc0000; +} +.panel-group .panel-danger + .panel-warning { + border-top-color: #cc0000; +} +.panel-group .panel-title { + font-weight: 500; + line-height: 1; +} +.panel-group .panel-title > a { + color: #4d5258; + font-weight: 600; +} +.panel-group .panel-title > a:before { + content: "\F107"; + display: inline-block; + font-family: "FontAwesome"; + font-size: 13px; + margin-right: 5px; + text-align: center; + vertical-align: 0; + width: 8px; +} +.panel-group .panel-title > a:focus { + outline: none; + text-decoration: none; +} +.panel-group .panel-title > a:hover { + text-decoration: none; +} +.panel-group .panel-title > a.collapsed:before { + content: "\F105"; +} +.popover { + box-shadow: 0 2px 2px rgba(3, 3, 3, 0.08); + padding: 0; +} +.popover-content { + color: #4d5258; + line-height: 18px; + padding: 10px 14px; +} +.popover-title { + border-bottom: none; + border-radius: 0; + color: #4d5258; + font-size: 13px; + font-weight: 700; + min-height: 34px; +} +.popover-title .close { + height: 22px; + position: absolute; + right: 8px; + top: 6px; +} +.popover-title.closable { + padding-right: 30px; +} +@keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} +.progress { + box-shadow: inset 0 0 1px rgba(3, 3, 3, 0.25); +} +.progress.progress-label-left, +.progress.progress-label-top-right { + overflow: visible; + position: relative; +} +.progress.progress-label-left { + margin-left: 40px; +} +.progress.progress-sm { + height: 14px; + margin-bottom: 14px; +} +.progress.progress-xs { + height: 6px; + margin-bottom: 6px; +} +td > .progress:first-child:last-child { + margin-bottom: 0; + margin-top: 3px; +} +.progress-bar { + box-shadow: none; +} +.progress-label-left .progress-bar span, +.progress-label-right .progress-bar span, +.progress-label-top-right .progress-bar span { + color: #363636; + position: absolute; + text-align: right; +} +.progress-label-left .progress-bar span { + font-size: 14px; + left: -40px; + top: 0; + width: 35px; +} +.progress-label-right .progress-bar span, +.progress-label-top-right .progress-bar span { + font-size: 11px; + overflow: hidden; + right: 0; + text-overflow: ellipsis; + white-space: nowrap; +} +.progress-label-right .progress-bar span strong, +.progress-label-top-right .progress-bar span strong { + font-weight: 600; +} +.progress-label-right .progress-bar span { + max-width: 85px; + top: 0; +} +.progress-label-top-right .progress-bar span { + max-width: 47%; + top: -30px; +} +.progress-label-left.progress-sm .progress-bar span, +.progress-label-top-right.progress-sm .progress-bar span { + font-size: 12px; +} +.progress-sm .progress-bar { + line-height: 14px; +} +.progress-xs .progress-bar { + line-height: 6px; +} +.progress-bar-remaining { + background: transparent; +} +.progress-container { + position: relative; +} +.progress-container.progress-description-left { + padding-left: 90px; +} +.progress-container.progress-label-right { + padding-right: 90px; +} +.progress-description { + margin-bottom: 10px; + max-width: 52%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.progress-description .count { + font-size: 20.004px; + font-weight: 300; + line-height: 1; + margin-right: 5px; +} +.progress-description .fa, +.progress-description .pficon { + font-size: 14px; + margin-right: 3px; +} +.progress-description-left .progress-description { + left: 0; + margin-bottom: 0; + max-width: 85px; + position: absolute; + top: 0; +} +.progress-description .tooltip { + white-space: normal; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 2px 10px 3px; +} +.table > thead > tr > th > a:hover, +.table > tbody > tr > th > a:hover, +.table > tfoot > tr > th > a:hover, +.table > thead > tr > td > a:hover, +.table > tbody > tr > td > a:hover, +.table > tfoot > tr > td > a:hover { + text-decoration: none; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th { + font-family: "Open Sans"; + font-style: normal; + font-weight: 600; +} +.table > thead { + background-clip: padding-box; + background-color: #f5f5f5; + background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffededed', GradientType=0); +} +.table-bordered { + border: 1px solid #d1d1d1; +} +.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 #d1d1d1; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 1px; +} +.table-striped > tbody > tr:nth-of-type(even) { + background-color: #f5f5f5; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: transparent; +} +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #def3ff; + border-bottom-color: #7dc3e8; +} +.table-treegrid span.indent { + margin-left: 10px; + margin-right: 10px; +} +.table-treegrid span.icon { + display: inline-block; + font-size: 13px; + margin-right: 5px; + min-width: 10px; + text-align: center; +} +.table-treegrid span.expand-icon, +.table-treegrid span.collapse-icon { + cursor: pointer; +} +.table-treegrid > tbody > tr.odd { + background-color: #f5f5f5; +} +.nav-tabs { + font-size: 14px; +} +.nav-tabs > li > a { + color: #4d5258; + margin-right: -1px; + padding-bottom: 5px; + padding-top: 5px; +} +.nav-tabs > li > a:active, +.nav-tabs > li > a:focus, +.nav-tabs > li > a:hover { + background: transparent; + border-color: #ededed; + color: #252525; +} +.nav-tabs > li > .dropdown-menu { + border-top: 0; + border-color: #ededed; +} +.nav-tabs > li > .dropdown-menu.pull-right { + right: -1px; +} +.nav-tabs + .nav-tabs-pf { + font-size: 12px; +} +.nav-tabs + .nav-tabs-pf > li:first-child > a { + padding-left: 15px; +} +.nav-tabs + .nav-tabs-pf > li:first-child > a:before { + left: 15px !important; +} +.nav-tabs .open > a, +.nav-tabs .open > a:hover, +.nav-tabs .open > a:focus { + background-color: transparent; + border-color: #ededed; +} +@media (min-width: 768px) { + .nav-tabs-pf.nav-justified { + border-bottom: 1px solid #ededed; + } +} +.nav-tabs-pf.nav-justified > li:first-child > a { + padding-left: 15px; +} +.nav-tabs-pf.nav-justified > li > a { + border-bottom: 0; +} +.nav-tabs-pf.nav-justified > li > a:before { + left: 0 !important; + right: 0 !important; +} +.nav-tabs-pf > li { + margin-bottom: 0; +} +.nav-tabs-pf > li.active > a:before { + background: #0088ce; + bottom: -1px; + content: ""; + display: block; + height: 2px; + left: 15px; + position: absolute; + right: 15px; +} +.nav-tabs-pf > li.active > a, +.nav-tabs-pf > li.active > a:active, +.nav-tabs-pf > li.active > a:focus, +.nav-tabs-pf > li.active > a:hover { + background-color: transparent; + border: 0 !important; + color: #0088ce; +} +.nav-tabs-pf > li.active > a:before, +.nav-tabs-pf > li.active > a:active:before, +.nav-tabs-pf > li.active > a:focus:before, +.nav-tabs-pf > li.active > a:hover:before { + background: #0088ce; +} +.nav-tabs-pf > li:first-child > a { + padding-left: 0; +} +.nav-tabs-pf > li:first-child > a:before { + left: 0 !important; +} +.nav-tabs-pf > li > a { + border: 0; + line-height: 1; + margin-right: 0; + padding-bottom: 10px; + padding-top: 10px; +} +.nav-tabs-pf > li > a:active:before, +.nav-tabs-pf > li > a:focus:before, +.nav-tabs-pf > li > a:hover:before { + background: #bbb; + bottom: -1px; + content: ""; + display: block; + height: 2px; + left: 15px; + position: absolute; + right: 15px; +} +.nav-tabs-pf > li > .dropdown-menu { + left: 15px; + margin-top: 1px; +} +.nav-tabs-pf > li > .dropdown-menu.pull-right { + left: auto; + right: 15px; +} +.nav-tabs-pf .open > a, +.nav-tabs-pf .open > a:hover, +.nav-tabs-pf .open > a:focus { + background-color: transparent; +} +.tooltip { + font-size: 12px; + line-height: 1.4; +} +.tooltip-inner { + padding: 7px 12px; + text-align: left; +} +h1, +.h1, +h2, +.h2 { + font-weight: 300; +} +.page-header .actions { + margin-top: 8px; +} +.page-header .actions a > .pficon { + margin-right: 4px; +} +@media (min-width: 767px) { + .page-header-bleed-left { + margin-left: -20px; + } + .page-header-bleed-right { + margin-right: -20px; + } + .page-header-bleed-right .actions { + margin-right: 20px; + } +}/* PatternFly additions to Bootstrap */ +@media (min-width: 768px) { + .form-search .combobox-container, + .form-inline .combobox-container { + display: inline-block; + margin-bottom: 0; + vertical-align: top; + } + .form-search .combobox-container .input-group-addon, + .form-inline .combobox-container .input-group-addon { + width: auto; + } +} +.combobox-selected .caret { + display: none; +} +/* :not doesn't work in IE8 */ +.combobox-container:not(.combobox-selected) .glyphicon-remove { + display: none; +} +.typeahead-long { + max-height: 300px; + overflow-y: auto; +} +.control-group.error .combobox-container .add-on { + color: #B94A48; + border-color: #B94A48; +} +.control-group.error .combobox-container .caret { + border-top-color: #B94A48; +} +.control-group.warning .combobox-container .add-on { + color: #C09853; + border-color: #C09853; +} +.control-group.warning .combobox-container .caret { + border-top-color: #C09853; +} +.control-group.success .combobox-container .add-on { + color: #468847; + border-color: #468847; +} +.control-group.success .combobox-container .caret { + border-top-color: #468847; +} +.datepicker { + border-radius: 1px; + direction: ltr; +} +.datepicker-inline { + width: 220px; +} +.datepicker.datepicker-rtl { + direction: rtl; +} +.datepicker.datepicker-rtl table tr td span { + float: right; +} +.datepicker-dropdown { + top: 0; + left: 0; + padding: 4px; +} +.datepicker-dropdown:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #bbb; + border-top: 0; + border-bottom-color: rgba(0, 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 #bbb; +} +.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 table tr td, +.datepicker table tr th { + text-align: center; + width: 30px; + height: 30px; + border-radius: 4px; + border: none; +} +.table-striped .datepicker table tr td, +.table-striped .datepicker table tr th { + background-color: transparent; +} +.datepicker table tr td.old, +.datepicker table tr td.new { + color: #9c9c9c; +} +.datepicker table tr td.day:hover, +.datepicker table tr td.focused { + background: #f1f1f1; + cursor: pointer; +} +.datepicker table tr td.disabled, +.datepicker table tr td.disabled:hover { + background: none; + color: #9c9c9c; + cursor: default; +} +.datepicker table tr td.highlighted { + color: #000; + background-color: #d9edf7; + border-color: #85c5e5; + border-radius: 0; +} +.datepicker table tr td.highlighted:focus, +.datepicker table tr td.highlighted.focus { + color: #000; + background-color: #afd9ee; + border-color: #298fc2; +} +.datepicker table tr td.highlighted:hover { + color: #000; + background-color: #afd9ee; + border-color: #52addb; +} +.datepicker table tr td.highlighted:active, +.datepicker table tr td.highlighted.active, +.open > .dropdown-toggle.datepicker table tr td.highlighted { + color: #000; + background-color: #afd9ee; + border-color: #52addb; +} +.datepicker table tr td.highlighted:active:hover, +.datepicker table tr td.highlighted.active:hover, +.open > .dropdown-toggle.datepicker table tr td.highlighted:hover, +.datepicker table tr td.highlighted:active:focus, +.datepicker table tr td.highlighted.active:focus, +.open > .dropdown-toggle.datepicker table tr td.highlighted:focus, +.datepicker table tr td.highlighted:active.focus, +.datepicker table tr td.highlighted.active.focus, +.open > .dropdown-toggle.datepicker table tr td.highlighted.focus { + color: #000; + background-color: #91cbe8; + border-color: #298fc2; +} +.datepicker table tr td.highlighted:active, +.datepicker table tr td.highlighted.active, +.open > .dropdown-toggle.datepicker table tr td.highlighted { + background-image: none; +} +.datepicker table tr td.highlighted.disabled:hover, +.datepicker table tr td.highlighted[disabled]:hover, +fieldset[disabled] .datepicker table tr td.highlighted:hover, +.datepicker table tr td.highlighted.disabled:focus, +.datepicker table tr td.highlighted[disabled]:focus, +fieldset[disabled] .datepicker table tr td.highlighted:focus, +.datepicker table tr td.highlighted.disabled.focus, +.datepicker table tr td.highlighted[disabled].focus, +fieldset[disabled] .datepicker table tr td.highlighted.focus { + background-color: #d9edf7; + border-color: #85c5e5; +} +.datepicker table tr td.highlighted .badge { + color: #d9edf7; + background-color: #000; +} +.datepicker table tr td.highlighted.focused { + background: #afd9ee; +} +.datepicker table tr td.highlighted.disabled, +.datepicker table tr td.highlighted.disabled:active { + background: #d9edf7; + color: #9c9c9c; +} +.datepicker table tr td.today { + color: #000; + background-color: #ffdb99; + border-color: #ffb733; +} +.datepicker table tr td.today:focus, +.datepicker table tr td.today.focus { + color: #000; + background-color: #ffc966; + border-color: #b37400; +} +.datepicker table tr td.today:hover { + color: #000; + background-color: #ffc966; + border-color: #f59e00; +} +.datepicker table tr td.today:active, +.datepicker table tr td.today.active, +.open > .dropdown-toggle.datepicker table tr td.today { + color: #000; + background-color: #ffc966; + border-color: #f59e00; +} +.datepicker table tr td.today:active:hover, +.datepicker table tr td.today.active:hover, +.open > .dropdown-toggle.datepicker table tr td.today:hover, +.datepicker table tr td.today:active:focus, +.datepicker table tr td.today.active:focus, +.open > .dropdown-toggle.datepicker table tr td.today:focus, +.datepicker table tr td.today:active.focus, +.datepicker table tr td.today.active.focus, +.open > .dropdown-toggle.datepicker table tr td.today.focus { + color: #000; + background-color: #ffbc42; + border-color: #b37400; +} +.datepicker table tr td.today:active, +.datepicker table tr td.today.active, +.open > .dropdown-toggle.datepicker table tr td.today { + background-image: none; +} +.datepicker table tr td.today.disabled:hover, +.datepicker table tr td.today[disabled]:hover, +fieldset[disabled] .datepicker table tr td.today:hover, +.datepicker table tr td.today.disabled:focus, +.datepicker table tr td.today[disabled]:focus, +fieldset[disabled] .datepicker table tr td.today:focus, +.datepicker table tr td.today.disabled.focus, +.datepicker table tr td.today[disabled].focus, +fieldset[disabled] .datepicker table tr td.today.focus { + background-color: #ffdb99; + border-color: #ffb733; +} +.datepicker table tr td.today .badge { + color: #ffdb99; + background-color: #000; +} +.datepicker table tr td.today.focused { + background: #ffc966; +} +.datepicker table tr td.today.disabled, +.datepicker table tr td.today.disabled:active { + background: #ffdb99; + color: #9c9c9c; +} +.datepicker table tr td.range { + color: #000; + background-color: #f1f1f1; + border-color: #bebebe; + border-radius: 0; +} +.datepicker table tr td.range:focus, +.datepicker table tr td.range.focus { + color: #000; + background-color: #d8d8d8; + border-color: #7f7f7f; +} +.datepicker table tr td.range:hover { + color: #000; + background-color: #d8d8d8; + border-color: #a0a0a0; +} +.datepicker table tr td.range:active, +.datepicker table tr td.range.active, +.open > .dropdown-toggle.datepicker table tr td.range { + color: #000; + background-color: #d8d8d8; + border-color: #a0a0a0; +} +.datepicker table tr td.range:active:hover, +.datepicker table tr td.range.active:hover, +.open > .dropdown-toggle.datepicker table tr td.range:hover, +.datepicker table tr td.range:active:focus, +.datepicker table tr td.range.active:focus, +.open > .dropdown-toggle.datepicker table tr td.range:focus, +.datepicker table tr td.range:active.focus, +.datepicker table tr td.range.active.focus, +.open > .dropdown-toggle.datepicker table tr td.range.focus { + color: #000; + background-color: #c6c6c6; + border-color: #7f7f7f; +} +.datepicker table tr td.range:active, +.datepicker table tr td.range.active, +.open > .dropdown-toggle.datepicker table tr td.range { + background-image: none; +} +.datepicker table tr td.range.disabled:hover, +.datepicker table tr td.range[disabled]:hover, +fieldset[disabled] .datepicker table tr td.range:hover, +.datepicker table tr td.range.disabled:focus, +.datepicker table tr td.range[disabled]:focus, +fieldset[disabled] .datepicker table tr td.range:focus, +.datepicker table tr td.range.disabled.focus, +.datepicker table tr td.range[disabled].focus, +fieldset[disabled] .datepicker table tr td.range.focus { + background-color: #f1f1f1; + border-color: #bebebe; +} +.datepicker table tr td.range .badge { + color: #f1f1f1; + background-color: #000; +} +.datepicker table tr td.range.focused { + background: #d8d8d8; +} +.datepicker table tr td.range.disabled, +.datepicker table tr td.range.disabled:active { + background: #f1f1f1; + color: #9c9c9c; +} +.datepicker table tr td.range.highlighted { + color: #000; + background-color: #e5eff4; + border-color: #9dc3d6; +} +.datepicker table tr td.range.highlighted:focus, +.datepicker table tr td.range.highlighted.focus { + color: #000; + background-color: #c1d9e5; + border-color: #488bac; +} +.datepicker table tr td.range.highlighted:hover { + color: #000; + background-color: #c1d9e5; + border-color: #72a9c4; +} +.datepicker table tr td.range.highlighted:active, +.datepicker table tr td.range.highlighted.active, +.open > .dropdown-toggle.datepicker table tr td.range.highlighted { + color: #000; + background-color: #c1d9e5; + border-color: #72a9c4; +} +.datepicker table tr td.range.highlighted:active:hover, +.datepicker table tr td.range.highlighted.active:hover, +.open > .dropdown-toggle.datepicker table tr td.range.highlighted:hover, +.datepicker table tr td.range.highlighted:active:focus, +.datepicker table tr td.range.highlighted.active:focus, +.open > .dropdown-toggle.datepicker table tr td.range.highlighted:focus, +.datepicker table tr td.range.highlighted:active.focus, +.datepicker table tr td.range.highlighted.active.focus, +.open > .dropdown-toggle.datepicker table tr td.range.highlighted.focus { + color: #000; + background-color: #a8cadb; + border-color: #488bac; +} +.datepicker table tr td.range.highlighted:active, +.datepicker table tr td.range.highlighted.active, +.open > .dropdown-toggle.datepicker table tr td.range.highlighted { + background-image: none; +} +.datepicker table tr td.range.highlighted.disabled:hover, +.datepicker table tr td.range.highlighted[disabled]:hover, +fieldset[disabled] .datepicker table tr td.range.highlighted:hover, +.datepicker table tr td.range.highlighted.disabled:focus, +.datepicker table tr td.range.highlighted[disabled]:focus, +fieldset[disabled] .datepicker table tr td.range.highlighted:focus, +.datepicker table tr td.range.highlighted.disabled.focus, +.datepicker table tr td.range.highlighted[disabled].focus, +fieldset[disabled] .datepicker table tr td.range.highlighted.focus { + background-color: #e5eff4; + border-color: #9dc3d6; +} +.datepicker table tr td.range.highlighted .badge { + color: #e5eff4; + background-color: #000; +} +.datepicker table tr td.range.highlighted.focused { + background: #c1d9e5; +} +.datepicker table tr td.range.highlighted.disabled, +.datepicker table tr td.range.highlighted.disabled:active { + background: #e5eff4; + color: #9c9c9c; +} +.datepicker table tr td.range.today { + color: #000; + background-color: #f8cb79; + border-color: #f3a618; +} +.datepicker table tr td.range.today:focus, +.datepicker table tr td.range.today.focus { + color: #000; + background-color: #f6b848; + border-color: #855807; +} +.datepicker table tr td.range.today:hover { + color: #000; + background-color: #f6b848; + border-color: #c4820a; +} +.datepicker table tr td.range.today:active, +.datepicker table tr td.range.today.active, +.open > .dropdown-toggle.datepicker table tr td.range.today { + color: #000; + background-color: #f6b848; + border-color: #c4820a; +} +.datepicker table tr td.range.today:active:hover, +.datepicker table tr td.range.today.active:hover, +.open > .dropdown-toggle.datepicker table tr td.range.today:hover, +.datepicker table tr td.range.today:active:focus, +.datepicker table tr td.range.today.active:focus, +.open > .dropdown-toggle.datepicker table tr td.range.today:focus, +.datepicker table tr td.range.today:active.focus, +.datepicker table tr td.range.today.active.focus, +.open > .dropdown-toggle.datepicker table tr td.range.today.focus { + color: #000; + background-color: #f4ab26; + border-color: #855807; +} +.datepicker table tr td.range.today:active, +.datepicker table tr td.range.today.active, +.open > .dropdown-toggle.datepicker table tr td.range.today { + background-image: none; +} +.datepicker table tr td.range.today.disabled:hover, +.datepicker table tr td.range.today[disabled]:hover, +fieldset[disabled] .datepicker table tr td.range.today:hover, +.datepicker table tr td.range.today.disabled:focus, +.datepicker table tr td.range.today[disabled]:focus, +fieldset[disabled] .datepicker table tr td.range.today:focus, +.datepicker table tr td.range.today.disabled.focus, +.datepicker table tr td.range.today[disabled].focus, +fieldset[disabled] .datepicker table tr td.range.today.focus { + background-color: #f8cb79; + border-color: #f3a618; +} +.datepicker table tr td.range.today .badge { + color: #f8cb79; + background-color: #000; +} +.datepicker table tr td.range.today.disabled, +.datepicker table tr td.range.today.disabled:active { + background: #f8cb79; + color: #9c9c9c; +} +.datepicker table tr td.selected, +.datepicker table tr td.selected.highlighted { + color: #fff; + background-color: #9c9c9c; + border-color: #555555; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker table tr td.selected:focus, +.datepicker table tr td.selected.highlighted:focus, +.datepicker table tr td.selected.focus, +.datepicker table tr td.selected.highlighted.focus { + color: #fff; + background-color: #838383; + border-color: #161616; +} +.datepicker table tr td.selected:hover, +.datepicker table tr td.selected.highlighted:hover { + color: #fff; + background-color: #838383; + border-color: #373737; +} +.datepicker table tr td.selected:active, +.datepicker table tr td.selected.highlighted:active, +.datepicker table tr td.selected.active, +.datepicker table tr td.selected.highlighted.active, +.open > .dropdown-toggle.datepicker table tr td.selected, +.open > .dropdown-toggle.datepicker table tr td.selected.highlighted { + color: #fff; + background-color: #838383; + border-color: #373737; +} +.datepicker table tr td.selected:active:hover, +.datepicker table tr td.selected.highlighted:active:hover, +.datepicker table tr td.selected.active:hover, +.datepicker table tr td.selected.highlighted.active:hover, +.open > .dropdown-toggle.datepicker table tr td.selected:hover, +.open > .dropdown-toggle.datepicker table tr td.selected.highlighted:hover, +.datepicker table tr td.selected:active:focus, +.datepicker table tr td.selected.highlighted:active:focus, +.datepicker table tr td.selected.active:focus, +.datepicker table tr td.selected.highlighted.active:focus, +.open > .dropdown-toggle.datepicker table tr td.selected:focus, +.open > .dropdown-toggle.datepicker table tr td.selected.highlighted:focus, +.datepicker table tr td.selected:active.focus, +.datepicker table tr td.selected.highlighted:active.focus, +.datepicker table tr td.selected.active.focus, +.datepicker table tr td.selected.highlighted.active.focus, +.open > .dropdown-toggle.datepicker table tr td.selected.focus, +.open > .dropdown-toggle.datepicker table tr td.selected.highlighted.focus { + color: #fff; + background-color: #717171; + border-color: #161616; +} +.datepicker table tr td.selected:active, +.datepicker table tr td.selected.highlighted:active, +.datepicker table tr td.selected.active, +.datepicker table tr td.selected.highlighted.active, +.open > .dropdown-toggle.datepicker table tr td.selected, +.open > .dropdown-toggle.datepicker table tr td.selected.highlighted { + background-image: none; +} +.datepicker table tr td.selected.disabled:hover, +.datepicker table tr td.selected.highlighted.disabled:hover, +.datepicker table tr td.selected[disabled]:hover, +.datepicker table tr td.selected.highlighted[disabled]:hover, +fieldset[disabled] .datepicker table tr td.selected:hover, +fieldset[disabled] .datepicker table tr td.selected.highlighted:hover, +.datepicker table tr td.selected.disabled:focus, +.datepicker table tr td.selected.highlighted.disabled:focus, +.datepicker table tr td.selected[disabled]:focus, +.datepicker table tr td.selected.highlighted[disabled]:focus, +fieldset[disabled] .datepicker table tr td.selected:focus, +fieldset[disabled] .datepicker table tr td.selected.highlighted:focus, +.datepicker table tr td.selected.disabled.focus, +.datepicker table tr td.selected.highlighted.disabled.focus, +.datepicker table tr td.selected[disabled].focus, +.datepicker table tr td.selected.highlighted[disabled].focus, +fieldset[disabled] .datepicker table tr td.selected.focus, +fieldset[disabled] .datepicker table tr td.selected.highlighted.focus { + background-color: #9c9c9c; + border-color: #555555; +} +.datepicker table tr td.selected .badge, +.datepicker table tr td.selected.highlighted .badge { + color: #9c9c9c; + background-color: #fff; +} +.datepicker table tr td.active, +.datepicker table tr td.active.highlighted { + color: #fff; + background-color: #0088ce; + border-color: #00659c; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker table tr td.active:focus, +.datepicker table tr td.active.highlighted:focus, +.datepicker table tr td.active.focus, +.datepicker table tr td.active.highlighted.focus { + color: #fff; + background-color: #00669b; + border-color: #00121d; +} +.datepicker table tr td.active:hover, +.datepicker table tr td.active.highlighted:hover { + color: #fff; + background-color: #00669b; + border-color: #003d5f; +} +.datepicker table tr td.active:active, +.datepicker table tr td.active.highlighted:active, +.datepicker table tr td.active.active, +.datepicker table tr td.active.highlighted.active, +.open > .dropdown-toggle.datepicker table tr td.active, +.open > .dropdown-toggle.datepicker table tr td.active.highlighted { + color: #fff; + background-color: #00669b; + border-color: #003d5f; +} +.datepicker table tr td.active:active:hover, +.datepicker table tr td.active.highlighted:active:hover, +.datepicker table tr td.active.active:hover, +.datepicker table tr td.active.highlighted.active:hover, +.open > .dropdown-toggle.datepicker table tr td.active:hover, +.open > .dropdown-toggle.datepicker table tr td.active.highlighted:hover, +.datepicker table tr td.active:active:focus, +.datepicker table tr td.active.highlighted:active:focus, +.datepicker table tr td.active.active:focus, +.datepicker table tr td.active.highlighted.active:focus, +.open > .dropdown-toggle.datepicker table tr td.active:focus, +.open > .dropdown-toggle.datepicker table tr td.active.highlighted:focus, +.datepicker table tr td.active:active.focus, +.datepicker table tr td.active.highlighted:active.focus, +.datepicker table tr td.active.active.focus, +.datepicker table tr td.active.highlighted.active.focus, +.open > .dropdown-toggle.datepicker table tr td.active.focus, +.open > .dropdown-toggle.datepicker table tr td.active.highlighted.focus { + color: #fff; + background-color: #004f77; + border-color: #00121d; +} +.datepicker table tr td.active:active, +.datepicker table tr td.active.highlighted:active, +.datepicker table tr td.active.active, +.datepicker table tr td.active.highlighted.active, +.open > .dropdown-toggle.datepicker table tr td.active, +.open > .dropdown-toggle.datepicker table tr td.active.highlighted { + background-image: none; +} +.datepicker table tr td.active.disabled:hover, +.datepicker table tr td.active.highlighted.disabled:hover, +.datepicker table tr td.active[disabled]:hover, +.datepicker table tr td.active.highlighted[disabled]:hover, +fieldset[disabled] .datepicker table tr td.active:hover, +fieldset[disabled] .datepicker table tr td.active.highlighted:hover, +.datepicker table tr td.active.disabled:focus, +.datepicker table tr td.active.highlighted.disabled:focus, +.datepicker table tr td.active[disabled]:focus, +.datepicker table tr td.active.highlighted[disabled]:focus, +fieldset[disabled] .datepicker table tr td.active:focus, +fieldset[disabled] .datepicker table tr td.active.highlighted:focus, +.datepicker table tr td.active.disabled.focus, +.datepicker table tr td.active.highlighted.disabled.focus, +.datepicker table tr td.active[disabled].focus, +.datepicker table tr td.active.highlighted[disabled].focus, +fieldset[disabled] .datepicker table tr td.active.focus, +fieldset[disabled] .datepicker table tr td.active.highlighted.focus { + background-color: #0088ce; + border-color: #00659c; +} +.datepicker table tr td.active .badge, +.datepicker table tr td.active.highlighted .badge { + color: #0088ce; + background-color: #fff; +} +.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:hover, +.datepicker table tr td span.focused { + background: #f1f1f1; +} +.datepicker table tr td span.disabled, +.datepicker table tr td span.disabled:hover { + background: none; + color: #9c9c9c; + cursor: default; +} +.datepicker table tr td span.active, +.datepicker table tr td span.active:hover, +.datepicker table tr td span.active.disabled, +.datepicker table tr td span.active.disabled:hover { + color: #fff; + background-color: #0088ce; + border-color: #00659c; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker table tr td span.active:focus, +.datepicker table tr td span.active:hover:focus, +.datepicker table tr td span.active.disabled:focus, +.datepicker table tr td span.active.disabled:hover:focus, +.datepicker table tr td span.active.focus, +.datepicker table tr td span.active:hover.focus, +.datepicker table tr td span.active.disabled.focus, +.datepicker table tr td span.active.disabled:hover.focus { + color: #fff; + background-color: #00669b; + border-color: #00121d; +} +.datepicker table tr td span.active:hover, +.datepicker table tr td span.active:hover:hover, +.datepicker table tr td span.active.disabled:hover, +.datepicker table tr td span.active.disabled:hover:hover { + color: #fff; + background-color: #00669b; + border-color: #003d5f; +} +.datepicker table tr td span.active:active, +.datepicker table tr td span.active:hover:active, +.datepicker table tr td span.active.disabled: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.disabled.active, +.datepicker table tr td span.active.disabled:hover.active, +.open > .dropdown-toggle.datepicker table tr td span.active, +.open > .dropdown-toggle.datepicker table tr td span.active:hover, +.open > .dropdown-toggle.datepicker table tr td span.active.disabled, +.open > .dropdown-toggle.datepicker table tr td span.active.disabled:hover { + color: #fff; + background-color: #00669b; + border-color: #003d5f; +} +.datepicker table tr td span.active:active:hover, +.datepicker table tr td span.active:hover:active:hover, +.datepicker table tr td span.active.disabled:active:hover, +.datepicker table tr td span.active.disabled:hover:active:hover, +.datepicker table tr td span.active.active:hover, +.datepicker table tr td span.active:hover.active:hover, +.datepicker table tr td span.active.disabled.active:hover, +.datepicker table tr td span.active.disabled:hover.active:hover, +.open > .dropdown-toggle.datepicker table tr td span.active:hover, +.open > .dropdown-toggle.datepicker table tr td span.active:hover:hover, +.open > .dropdown-toggle.datepicker table tr td span.active.disabled:hover, +.open > .dropdown-toggle.datepicker table tr td span.active.disabled:hover:hover, +.datepicker table tr td span.active:active:focus, +.datepicker table tr td span.active:hover:active:focus, +.datepicker table tr td span.active.disabled:active:focus, +.datepicker table tr td span.active.disabled:hover:active:focus, +.datepicker table tr td span.active.active:focus, +.datepicker table tr td span.active:hover.active:focus, +.datepicker table tr td span.active.disabled.active:focus, +.datepicker table tr td span.active.disabled:hover.active:focus, +.open > .dropdown-toggle.datepicker table tr td span.active:focus, +.open > .dropdown-toggle.datepicker table tr td span.active:hover:focus, +.open > .dropdown-toggle.datepicker table tr td span.active.disabled:focus, +.open > .dropdown-toggle.datepicker table tr td span.active.disabled:hover:focus, +.datepicker table tr td span.active:active.focus, +.datepicker table tr td span.active:hover:active.focus, +.datepicker table tr td span.active.disabled:active.focus, +.datepicker table tr td span.active.disabled:hover:active.focus, +.datepicker table tr td span.active.active.focus, +.datepicker table tr td span.active:hover.active.focus, +.datepicker table tr td span.active.disabled.active.focus, +.datepicker table tr td span.active.disabled:hover.active.focus, +.open > .dropdown-toggle.datepicker table tr td span.active.focus, +.open > .dropdown-toggle.datepicker table tr td span.active:hover.focus, +.open > .dropdown-toggle.datepicker table tr td span.active.disabled.focus, +.open > .dropdown-toggle.datepicker table tr td span.active.disabled:hover.focus { + color: #fff; + background-color: #004f77; + border-color: #00121d; +} +.datepicker table tr td span.active:active, +.datepicker table tr td span.active:hover:active, +.datepicker table tr td span.active.disabled: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.disabled.active, +.datepicker table tr td span.active.disabled:hover.active, +.open > .dropdown-toggle.datepicker table tr td span.active, +.open > .dropdown-toggle.datepicker table tr td span.active:hover, +.open > .dropdown-toggle.datepicker table tr td span.active.disabled, +.open > .dropdown-toggle.datepicker table tr td span.active.disabled:hover { + background-image: none; +} +.datepicker table tr td span.active.disabled:hover, +.datepicker table tr td span.active:hover.disabled:hover, +.datepicker table tr td span.active.disabled.disabled:hover, +.datepicker table tr td span.active.disabled:hover.disabled:hover, +.datepicker table tr td span.active[disabled]:hover, +.datepicker table tr td span.active:hover[disabled]:hover, +.datepicker table tr td span.active.disabled[disabled]:hover, +.datepicker table tr td span.active.disabled:hover[disabled]:hover, +fieldset[disabled] .datepicker table tr td span.active:hover, +fieldset[disabled] .datepicker table tr td span.active:hover:hover, +fieldset[disabled] .datepicker table tr td span.active.disabled:hover, +fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover, +.datepicker table tr td span.active.disabled:focus, +.datepicker table tr td span.active:hover.disabled:focus, +.datepicker table tr td span.active.disabled.disabled:focus, +.datepicker table tr td span.active.disabled:hover.disabled:focus, +.datepicker table tr td span.active[disabled]:focus, +.datepicker table tr td span.active:hover[disabled]:focus, +.datepicker table tr td span.active.disabled[disabled]:focus, +.datepicker table tr td span.active.disabled:hover[disabled]:focus, +fieldset[disabled] .datepicker table tr td span.active:focus, +fieldset[disabled] .datepicker table tr td span.active:hover:focus, +fieldset[disabled] .datepicker table tr td span.active.disabled:focus, +fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus, +.datepicker table tr td span.active.disabled.focus, +.datepicker table tr td span.active:hover.disabled.focus, +.datepicker table tr td span.active.disabled.disabled.focus, +.datepicker table tr td span.active.disabled:hover.disabled.focus, +.datepicker table tr td span.active[disabled].focus, +.datepicker table tr td span.active:hover[disabled].focus, +.datepicker table tr td span.active.disabled[disabled].focus, +.datepicker table tr td span.active.disabled:hover[disabled].focus, +fieldset[disabled] .datepicker table tr td span.active.focus, +fieldset[disabled] .datepicker table tr td span.active:hover.focus, +fieldset[disabled] .datepicker table tr td span.active.disabled.focus, +fieldset[disabled] .datepicker table tr td span.active.disabled:hover.focus { + background-color: #0088ce; + border-color: #00659c; +} +.datepicker table tr td span.active .badge, +.datepicker table tr td span.active:hover .badge, +.datepicker table tr td span.active.disabled .badge, +.datepicker table tr td span.active.disabled:hover .badge { + color: #0088ce; + background-color: #fff; +} +.datepicker table tr td span.old, +.datepicker table tr td span.new { + color: #9c9c9c; +} +.datepicker .datepicker-switch { + width: 145px; +} +.datepicker .datepicker-switch, +.datepicker .prev, +.datepicker .next, +.datepicker tfoot tr th { + cursor: pointer; +} +.datepicker .datepicker-switch:hover, +.datepicker .prev:hover, +.datepicker .next:hover, +.datepicker tfoot tr th:hover { + background: #f1f1f1; +} +.datepicker .cw { + font-size: 10px; + width: 12px; + padding: 0 2px 0 5px; + vertical-align: middle; +} +.input-group.date .input-group-addon { + cursor: pointer; +} +.input-daterange { + width: 100%; +} +.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 .input-group-addon { + width: auto; + min-width: 16px; + padding: 4px 5px; + line-height: 1.66666667; + text-shadow: 0 1px 0 #fff; + border-width: 1px 0; + margin-left: -5px; + margin-right: -5px; +} +select.bs-select-hidden, +select.selectpicker { + display: none !important; +} +.bootstrap-select { + width: 220px \0; + /*IE9 and below*/ +} +.bootstrap-select > .dropdown-toggle { + width: 100%; + padding-right: 25px; + z-index: 1; +} +.bootstrap-select > .dropdown-toggle.bs-placeholder, +.bootstrap-select > .dropdown-toggle.bs-placeholder:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder:active { + color: #999; +} +.bootstrap-select > select { + position: absolute !important; + bottom: 0; + left: 50%; + display: block !important; + width: 0.5px !important; + height: 100% !important; + padding: 0 !important; + opacity: 0 !important; + border: none; +} +.bootstrap-select > select.mobile-device { + top: 0; + left: 0; + display: block !important; + width: 100% !important; + z-index: 2; +} +.has-error .bootstrap-select .dropdown-toggle, +.error .bootstrap-select .dropdown-toggle { + border-color: #b94a48; +} +.bootstrap-select.fit-width { + width: auto !important; +} +.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) { + width: 220px; +} +.bootstrap-select .dropdown-toggle:focus { + outline: thin dotted #333333 !important; + outline: 5px auto -webkit-focus-ring-color !important; + outline-offset: -2px; +} +.bootstrap-select.form-control { + margin-bottom: 0; + padding: 0; + border: none; +} +.bootstrap-select.form-control:not([class*="col-"]) { + width: 100%; +} +.bootstrap-select.form-control.input-group-btn { + z-index: auto; +} +.bootstrap-select.form-control.input-group-btn:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.bootstrap-select.btn-group:not(.input-group-btn), +.bootstrap-select.btn-group[class*="col-"] { + float: none; + display: inline-block; + margin-left: 0; +} +.bootstrap-select.btn-group.dropdown-menu-right, +.bootstrap-select.btn-group[class*="col-"].dropdown-menu-right, +.row .bootstrap-select.btn-group[class*="col-"].dropdown-menu-right { + float: right; +} +.form-inline .bootstrap-select.btn-group, +.form-horizontal .bootstrap-select.btn-group, +.form-group .bootstrap-select.btn-group { + margin-bottom: 0; +} +.form-group-lg .bootstrap-select.btn-group.form-control, +.form-group-sm .bootstrap-select.btn-group.form-control { + padding: 0; +} +.form-group-lg .bootstrap-select.btn-group.form-control .dropdown-toggle, +.form-group-sm .bootstrap-select.btn-group.form-control .dropdown-toggle { + height: 100%; + font-size: inherit; + line-height: inherit; + border-radius: inherit; +} +.form-inline .bootstrap-select.btn-group .form-control { + width: 100%; +} +.bootstrap-select.btn-group.disabled, +.bootstrap-select.btn-group > .disabled { + cursor: not-allowed; +} +.bootstrap-select.btn-group.disabled:focus, +.bootstrap-select.btn-group > .disabled:focus { + outline: none !important; +} +.bootstrap-select.btn-group.bs-container { + position: absolute; + height: 0 !important; + padding: 0 !important; +} +.bootstrap-select.btn-group.bs-container .dropdown-menu { + z-index: 1060; +} +.bootstrap-select.btn-group .dropdown-toggle .filter-option { + display: inline-block; + overflow: hidden; + width: 100%; + text-align: left; +} +.bootstrap-select.btn-group .dropdown-toggle .caret { + position: absolute; + top: 50%; + right: 12px; + margin-top: -2px; + vertical-align: middle; +} +.bootstrap-select.btn-group[class*="col-"] .dropdown-toggle { + width: 100%; +} +.bootstrap-select.btn-group .dropdown-menu { + min-width: 100%; + box-sizing: border-box; +} +.bootstrap-select.btn-group .dropdown-menu.inner { + position: static; + float: none; + border: 0; + padding: 0; + margin: 0; + border-radius: 0; + box-shadow: none; +} +.bootstrap-select.btn-group .dropdown-menu li { + position: relative; +} +.bootstrap-select.btn-group .dropdown-menu li.active small { + color: #fff; +} +.bootstrap-select.btn-group .dropdown-menu li.disabled a { + cursor: not-allowed; +} +.bootstrap-select.btn-group .dropdown-menu li a { + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.bootstrap-select.btn-group .dropdown-menu li a.opt { + position: relative; + padding-left: 2.25em; +} +.bootstrap-select.btn-group .dropdown-menu li a span.check-mark { + display: none; +} +.bootstrap-select.btn-group .dropdown-menu li a span.text { + display: inline-block; +} +.bootstrap-select.btn-group .dropdown-menu li small { + padding-left: 0.5em; +} +.bootstrap-select.btn-group .dropdown-menu .notify { + position: absolute; + bottom: 5px; + width: 96%; + margin: 0 2%; + min-height: 26px; + padding: 3px 5px; + background: #f5f5f5; + border: 1px solid #e3e3e3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + pointer-events: none; + opacity: 0.9; + box-sizing: border-box; +} +.bootstrap-select.btn-group .no-results { + padding: 3px; + background: #f5f5f5; + margin: 0 5px; + white-space: nowrap; +} +.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option { + position: static; +} +.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret { + position: static; + top: auto; + margin-top: -1px; +} +.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark { + position: absolute; + display: inline-block; + right: 15px; + margin-top: 5px; +} +.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text { + margin-right: 34px; +} +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle { + z-index: 1061; +} +.bootstrap-select.show-menu-arrow .dropdown-toggle:before { + content: ''; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid rgba(204, 204, 204, 0.2); + position: absolute; + bottom: -4px; + left: 9px; + display: none; +} +.bootstrap-select.show-menu-arrow .dropdown-toggle:after { + content: ''; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid white; + position: absolute; + bottom: -4px; + left: 10px; + display: none; +} +.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before { + bottom: auto; + top: -3px; + border-top: 7px solid rgba(204, 204, 204, 0.2); + border-bottom: 0; +} +.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after { + bottom: auto; + top: -3px; + border-top: 6px solid white; + border-bottom: 0; +} +.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before { + right: 12px; + left: auto; +} +.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after { + right: 13px; + left: auto; +} +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before, +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after { + display: block; +} +.bs-searchbox, +.bs-actionsbox, +.bs-donebutton { + padding: 4px 8px; +} +.bs-actionsbox { + width: 100%; + box-sizing: border-box; +} +.bs-actionsbox .btn-group button { + width: 50%; +} +.bs-donebutton { + float: left; + width: 100%; + box-sizing: border-box; +} +.bs-donebutton .btn-group button { + width: 100%; +} +.bs-searchbox + .bs-actionsbox { + padding: 0 8px 4px; +} +.bs-searchbox .form-control { + margin-bottom: 0; + width: 100%; + float: none; +} +.bootstrap-switch { + display: inline-block; + direction: ltr; + cursor: pointer; + border-radius: 1px; + border: 1px solid; + border-color: #bbb; + position: relative; + text-align: left; + overflow: hidden; + line-height: 8px; + z-index: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + vertical-align: middle; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.bootstrap-switch .bootstrap-switch-container { + display: inline-block; + top: 0; + border-radius: 1px; + transform: translate3d(0, 0, 0); +} +.bootstrap-switch .bootstrap-switch-handle-on, +.bootstrap-switch .bootstrap-switch-handle-off, +.bootstrap-switch .bootstrap-switch-label { + box-sizing: border-box; + cursor: pointer; + display: table-cell; + vertical-align: middle; + padding: 2px 6px; + font-size: 12px; + line-height: 20px; +} +.bootstrap-switch .bootstrap-switch-handle-on, +.bootstrap-switch .bootstrap-switch-handle-off { + text-align: center; + z-index: 1; +} +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary { + color: #fff; + background: #0088ce; +} +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info { + color: #fff; + background: #00659c; +} +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success { + color: #fff; + background: #3f9c35; +} +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning { + background: #ec7a08; + color: #fff; +} +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger { + color: #fff; + background: #a30000; +} +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default { + color: #000; + background: #f1f1f1; +} +.bootstrap-switch .bootstrap-switch-label { + text-align: center; + margin-top: -1px; + margin-bottom: -1px; + z-index: 100; + color: #4d5258; + background: #f1f1f1; +} +.bootstrap-switch span::before { + content: "\200B"; +} +.bootstrap-switch .bootstrap-switch-handle-on { + border-bottom-left-radius: 1px - 1; + border-top-left-radius: 1px - 1; +} +.bootstrap-switch .bootstrap-switch-handle-off { + border-bottom-right-radius: 1px - 1; + border-top-right-radius: 1px - 1; +} +.bootstrap-switch input[type='radio'], +.bootstrap-switch input[type='checkbox'] { + position: absolute !important; + top: 0; + left: 0; + margin: 0; + z-index: -1; + opacity: 0; + filter: alpha(opacity=0); + visibility: hidden; +} +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label { + padding: 1px 5px; + font-size: 11px; + line-height: 1.5; +} +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label { + padding: 2px 6px; + font-size: 11px; + line-height: 1.5; +} +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label { + padding: 2px 10px; + font-size: 14px; + line-height: 1.3333333; +} +.bootstrap-switch.bootstrap-switch-disabled, +.bootstrap-switch.bootstrap-switch-readonly, +.bootstrap-switch.bootstrap-switch-indeterminate { + cursor: default !important; +} +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label { + opacity: 0.5; + filter: alpha(opacity=50); + cursor: default !important; +} +.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container { + transition: margin-left 0.5s; +} +.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 1px - 1; + border-top-right-radius: 1px - 1; +} +.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 1px - 1; + border-top-left-radius: 1px - 1; +} +.bootstrap-switch.bootstrap-switch-focused { + border-color: #0088ce; + outline: 0; + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(0, 136, 206, 0.6); +} +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label, +.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label { + border-bottom-right-radius: 1px - 1; + border-top-right-radius: 1px - 1; +} +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label, +.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label { + border-bottom-left-radius: 1px - 1; + border-top-left-radius: 1px - 1; +} +/* + * Bootstrap TouchSpin - v3.1.1 + * A mobile and touch friendly input spinner component for Bootstrap 3. + * http://www.virtuosoft.eu/code/bootstrap-touchspin/ + * + * Made by István Ujj-Mészáros + * Under Apache License v2.0 License + */ +.bootstrap-touchspin .input-group-btn-vertical { + position: relative; + white-space: nowrap; + width: 1%; + vertical-align: middle; + display: table-cell; +} +.bootstrap-touchspin .input-group-btn-vertical > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; + padding: 8px 10px; + margin-left: -1px; + position: relative; +} +.bootstrap-touchspin .input-group-btn-vertical .bootstrap-touchspin-up { + border-radius: 0; + border-top-right-radius: 4px; +} +.bootstrap-touchspin .input-group-btn-vertical .bootstrap-touchspin-down { + margin-top: -2px; + border-radius: 0; + border-bottom-right-radius: 4px; +} +.bootstrap-touchspin .input-group-btn-vertical i { + position: absolute; + top: 3px; + left: 5px; + font-size: 9px; + font-weight: normal; +} +/*-- Chart --*/ +.c3 svg { + font: 10px sans-serif; + -webkit-tap-highlight-color: transparent; +} +.c3 path, +.c3 line { + fill: none; + stroke: #000; +} +.c3 text { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.c3-legend-item-tile, +.c3-xgrid-focus, +.c3-ygrid, +.c3-event-rect, +.c3-bars path { + shape-rendering: crispEdges; +} +.c3-chart-arc path { + stroke: #fff; +} +.c3-chart-arc text { + fill: #fff; + font-size: 13px; +} +/*-- Axis --*/ +/*-- Grid --*/ +.c3-grid line { + stroke: #aaa; +} +.c3-grid text { + fill: #aaa; +} +.c3-xgrid, +.c3-ygrid { + stroke-dasharray: 3 3; +} +/*-- Text on Chart --*/ +.c3-text.c3-empty { + fill: #808080; + font-size: 2em; +} +/*-- Line --*/ +.c3-line { + stroke-width: 1px; +} +/*-- Point --*/ +.c3-circle._expanded_ { + stroke-width: 1px; + stroke: white; +} +.c3-selected-circle { + fill: white; + stroke-width: 2px; +} +/*-- Bar --*/ +.c3-bar { + stroke-width: 0; +} +.c3-bar._expanded_ { + fill-opacity: 1; + fill-opacity: 0.75; +} +/*-- Focus --*/ +.c3-target.c3-focused { + opacity: 1; +} +.c3-target.c3-focused path.c3-line, +.c3-target.c3-focused path.c3-step { + stroke-width: 2px; +} +.c3-target.c3-defocused { + opacity: 0.3 !important; +} +/*-- Region --*/ +.c3-region { + fill: steelblue; + fill-opacity: .1; +} +/*-- Brush --*/ +.c3-brush .extent { + fill-opacity: .1; +} +/*-- Select - Drag --*/ +/*-- Legend --*/ +.c3-legend-item { + font-size: 12px; +} +.c3-legend-item-hidden { + opacity: 0.15; +} +.c3-legend-background { + opacity: 0.75; + fill: white; + stroke: lightgray; + stroke-width: 1; +} +/*-- Title --*/ +.c3-title { + font: 14px sans-serif; +} +/*-- Tooltip --*/ +.c3-tooltip-container { + z-index: 10; +} +.c3-tooltip { + border-collapse: collapse; + border-spacing: 0; + background-color: #fff; + empty-cells: show; + box-shadow: 7px 7px 12px -9px #777777; + opacity: 0.9; +} +.c3-tooltip tr { + border: 1px solid #CCC; +} +.c3-tooltip th { + background-color: #aaa; + font-size: 14px; + padding: 2px 5px; + text-align: left; + color: #FFF; +} +.c3-tooltip td { + font-size: 13px; + padding: 3px 6px; + background-color: #fff; + border-left: 1px dotted #999; +} +.c3-tooltip td > span { + display: inline-block; + width: 10px; + height: 10px; + margin-right: 6px; +} +.c3-tooltip td.value { + text-align: right; +} +/*-- Area --*/ +.c3-area { + stroke-width: 0; + opacity: 0.2; +} +/*-- Arc --*/ +.c3-chart-arcs-title { + dominant-baseline: middle; + font-size: 1.3em; +} +.c3-chart-arcs .c3-chart-arcs-background { + fill: #e0e0e0; + stroke: none; +} +.c3-chart-arcs .c3-chart-arcs-gauge-unit { + fill: #000; + font-size: 16px; +} +.c3-chart-arcs .c3-chart-arcs-gauge-max { + fill: #777; +} +.c3-chart-arcs .c3-chart-arcs-gauge-min { + fill: #777; +} +.c3-chart-arc .c3-gauge-value { + fill: #000; + /* font-size: 28px !important;*/ +} +.c3-chart-arc.c3-target g path { + opacity: 1; +} +.c3-chart-arc.c3-target.c3-focused g path { + opacity: 1; +} +/*! + * Datetimepicker for Bootstrap 3 + * version : 4.17.47 + * https://github.com/Eonasdan/bootstrap-datetimepicker/ + */ +.bootstrap-datetimepicker-widget { + list-style: none; +} +.bootstrap-datetimepicker-widget.dropdown-menu { + display: block; + margin: 2px 0; + padding: 4px; + width: 19em; +} +@media (min-width: 768px) { + .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs { + width: 38em; + } +} +@media (min-width: 992px) { + .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs { + width: 38em; + } +} +@media (min-width: 1200px) { + .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs { + width: 38em; + } +} +.bootstrap-datetimepicker-widget.dropdown-menu:before, +.bootstrap-datetimepicker-widget.dropdown-menu:after { + content: ''; + display: inline-block; + position: absolute; +} +.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before { + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-bottom-color: rgba(0, 0, 0, 0.2); + top: -7px; + left: 7px; +} +.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid white; + top: -6px; + left: 8px; +} +.bootstrap-datetimepicker-widget.dropdown-menu.top:before { + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-top: 7px solid #ccc; + border-top-color: rgba(0, 0, 0, 0.2); + bottom: -7px; + left: 6px; +} +.bootstrap-datetimepicker-widget.dropdown-menu.top:after { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 6px solid white; + bottom: -6px; + left: 7px; +} +.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before { + left: auto; + right: 6px; +} +.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after { + left: auto; + right: 7px; +} +.bootstrap-datetimepicker-widget .list-unstyled { + margin: 0; +} +.bootstrap-datetimepicker-widget a[data-action] { + padding: 6px 0; +} +.bootstrap-datetimepicker-widget a[data-action]:active { + box-shadow: none; +} +.bootstrap-datetimepicker-widget .timepicker-hour, +.bootstrap-datetimepicker-widget .timepicker-minute, +.bootstrap-datetimepicker-widget .timepicker-second { + width: 54px; + font-weight: bold; + font-size: 1em; + margin: 0; +} +.bootstrap-datetimepicker-widget button[data-action] { + padding: 6px; +} +.bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + content: "Increment Hours"; + content: "Increment Hours"; +} +.bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + content: "Increment Minutes"; + content: "Increment Minutes"; +} +.bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + content: "Decrement Hours"; + content: "Decrement Hours"; +} +.bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + content: "Decrement Minutes"; + content: "Decrement Minutes"; +} +.bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + content: "Show Hours"; +} +.bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + content: "Show Minutes"; +} +.bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + content: "Toggle AM/PM"; +} +.bootstrap-datetimepicker-widget .btn[data-action="clear"]::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + content: "Clear the picker"; +} +.bootstrap-datetimepicker-widget .btn[data-action="today"]::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + content: "Set the date to today"; +} +.bootstrap-datetimepicker-widget .picker-switch { + text-align: center; +} +.bootstrap-datetimepicker-widget .picker-switch::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + content: "Toggle Date and Time Screens"; +} +.bootstrap-datetimepicker-widget .picker-switch td { + padding: 0; + margin: 0; + height: auto; + width: auto; + line-height: inherit; +} +.bootstrap-datetimepicker-widget .picker-switch td span { + line-height: 2.5; + height: 2.5em; + width: 100%; +} +.bootstrap-datetimepicker-widget table { + width: 100%; + margin: 0; +} +.bootstrap-datetimepicker-widget table td, +.bootstrap-datetimepicker-widget table th { + text-align: center; + border-radius: 1px; +} +.bootstrap-datetimepicker-widget table th { + height: 20px; + line-height: 20px; + width: 20px; +} +.bootstrap-datetimepicker-widget table th.picker-switch { + width: 145px; +} +.bootstrap-datetimepicker-widget table th.disabled, +.bootstrap-datetimepicker-widget table th.disabled:hover { + background: none; + color: #9c9c9c; + cursor: not-allowed; +} +.bootstrap-datetimepicker-widget table th.prev::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + content: "Previous Month"; +} +.bootstrap-datetimepicker-widget table th.next::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + content: "Next Month"; +} +.bootstrap-datetimepicker-widget table thead tr:first-child th { + cursor: pointer; +} +.bootstrap-datetimepicker-widget table thead tr:first-child th:hover { + background: transparent; +} +.bootstrap-datetimepicker-widget table td { + height: 54px; + line-height: 54px; + width: 54px; +} +.bootstrap-datetimepicker-widget table td.cw { + font-size: .8em; + height: 20px; + line-height: 20px; + color: #9c9c9c; +} +.bootstrap-datetimepicker-widget table td.day { + height: 20px; + line-height: 20px; + width: 20px; +} +.bootstrap-datetimepicker-widget table td.day:hover, +.bootstrap-datetimepicker-widget table td.hour:hover, +.bootstrap-datetimepicker-widget table td.minute:hover, +.bootstrap-datetimepicker-widget table td.second:hover { + background: transparent; + cursor: pointer; +} +.bootstrap-datetimepicker-widget table td.old, +.bootstrap-datetimepicker-widget table td.new { + color: #9c9c9c; +} +.bootstrap-datetimepicker-widget table td.today { + position: relative; +} +.bootstrap-datetimepicker-widget table td.today:before { + content: ''; + display: inline-block; + border: solid transparent; + border-width: 0 0 7px 7px; + border-bottom-color: #0088ce; + border-top-color: rgba(0, 0, 0, 0.2); + position: absolute; + bottom: 4px; + right: 4px; +} +.bootstrap-datetimepicker-widget table td.active, +.bootstrap-datetimepicker-widget table td.active:hover { + background-color: #0088ce; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.bootstrap-datetimepicker-widget table td.active.today:before { + border-bottom-color: #fff; +} +.bootstrap-datetimepicker-widget table td.disabled, +.bootstrap-datetimepicker-widget table td.disabled:hover { + background: none; + color: #9c9c9c; + cursor: not-allowed; +} +.bootstrap-datetimepicker-widget table td span { + display: inline-block; + width: 54px; + height: 54px; + line-height: 54px; + margin: 2px 1.5px; + cursor: pointer; + border-radius: 1px; +} +.bootstrap-datetimepicker-widget table td span:hover { + background: transparent; +} +.bootstrap-datetimepicker-widget table td span.active { + background-color: #0088ce; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.bootstrap-datetimepicker-widget table td span.old { + color: #9c9c9c; +} +.bootstrap-datetimepicker-widget table td span.disabled, +.bootstrap-datetimepicker-widget table td span.disabled:hover { + background: none; + color: #9c9c9c; + cursor: not-allowed; +} +.bootstrap-datetimepicker-widget.usetwentyfour td.hour { + height: 27px; + line-height: 27px; +} +.bootstrap-datetimepicker-widget.wider { + width: 21em; +} +.bootstrap-datetimepicker-widget .datepicker-decades .decade { + line-height: 1.8em !important; +} +.input-group.date .input-group-addon { + cursor: pointer; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.text-overflow-pf { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + word-wrap: normal; +} +.about-modal-pf { + background-color: #292e34; + background-image: url(assets/fonts/bg-modal-about-pf.png); + background-position: right bottom; + background-repeat: no-repeat; + background-size: 216px auto; +} +@media (min-width: 768px) { + .about-modal-pf { + background-size: auto; + } +} +.about-modal-pf .modal-body { + color: #fff; + padding-bottom: 16px; + padding-left: 40px; + padding-right: 40px; +} +@media (min-width: 768px) { + .about-modal-pf .modal-body { + padding-left: 80px; + padding-right: 80px; + } +} +.about-modal-pf .modal-header { + background-color: transparent; +} +.about-modal-pf .pficon-close { + color: #fff; +} +.product-versions-pf { + margin-bottom: 30px; + margin-top: 30px; +} +.product-versions-pf li strong { + margin-right: 10px; +} +.trademark-pf { + font-size: 11px; +} +.applauncher-pf { + display: inline-block; + overflow: visible; +} +.applauncher-pf .applauncher-pf-title { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.applauncher-pf .dropdown-toggle.disabled { + cursor: not-allowed; +} +.applauncher-pf.open > .dropdown-menu { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +.applauncher-pf .applauncher-pf-item { + width: 100%; +} +.applauncher-pf .applauncher-pf-link { + display: -ms-flexbox; + display: flex; + white-space: initial; + -ms-flex-align: center; + align-items: center; +} +@media (min-width: 768px) { + .applauncher-pf-block-list .applauncher-pf-item { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + } +} +.applauncher-pf-block-list .applauncher-pf-link { + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +@media (min-width: 768px) { + .applauncher-pf-block-list .applauncher-pf-link { + -ms-flex-direction: column; + flex-direction: column; + text-align: center; + padding: 15px 0; + } +} +.applauncher-pf-block-list .applauncher-pf-link-icon { + padding: 0; +} +@media (min-width: 768px) { + .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link { + padding: 9px; + } + .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-icon { + -ms-flex: 1 0 0px; + flex: 1 0 0; + text-align: left; + } + .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-title { + -ms-flex: 3; + flex: 3; + } +} +.applauncher-pf .dropdown-menu { + padding: 9px; + min-width: 220px; +} +.applauncher-pf .applauncher-pf-link { + border-style: solid; + border-width: 1px; + border-color: transparent; +} +.applauncher-pf .applauncher-pf-link:hover { + background-color: #f5f5f5; + border-color: #bbb; + color: #0088ce; + text-decoration: none; + box-shadow: 0 0 2px 0 #d1d1d1; +} +.applauncher-pf .applauncher-pf-link-icon { + font-size: 1.2em; + text-align: center; + width: 1.28571429em; +} +@media (min-width: 768px) { + .applauncher-pf .applauncher-pf-link-icon { + font-size: 2em; + } +} +.navbar-pf .navbar-utility .applauncher-pf .dropdown-menu, +.navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-menu, +.navbar-pf .applauncher-pf .dropdown-menu, +.navbar-pf-alt .applauncher-pf .dropdown-menu { + border-width: 1px !important; +} +@media (min-width: 768px) { + .navbar-pf .navbar-utility .applauncher-pf .dropdown-menu, + .navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-menu, + .navbar-pf .applauncher-pf .dropdown-menu, + .navbar-pf-alt .applauncher-pf .dropdown-menu { + margin-top: 11px; + } +} +.navbar-pf .navbar-utility .applauncher-pf.open > a, +.navbar-pf-alt .navbar-utility .applauncher-pf.open > a, +.navbar-pf .applauncher-pf.open > a, +.navbar-pf-alt .applauncher-pf.open > a, +.navbar-pf .navbar-utility .applauncher-pf.open > a:focus, +.navbar-pf-alt .navbar-utility .applauncher-pf.open > a:focus, +.navbar-pf .applauncher-pf.open > a:focus, +.navbar-pf-alt .applauncher-pf.open > a:focus { + background-color: #232323; + color: #f5f5f5; +} +@media (min-width: 768px) { + .navbar-pf .navbar-utility .applauncher-pf.open > a, + .navbar-pf-alt .navbar-utility .applauncher-pf.open > a, + .navbar-pf .applauncher-pf.open > a, + .navbar-pf-alt .applauncher-pf.open > a, + .navbar-pf .navbar-utility .applauncher-pf.open > a:focus, + .navbar-pf-alt .navbar-utility .applauncher-pf.open > a:focus, + .navbar-pf .applauncher-pf.open > a:focus, + .navbar-pf-alt .applauncher-pf.open > a:focus { + background-color: #363636; + border-color: #2b2b2b; + color: #d1d1d1; + } +} +@media (max-width: 767px) { + .navbar-pf .navbar-utility .applauncher-pf.open .dropdown-menu > li > a, + .navbar-pf-alt .navbar-utility .applauncher-pf.open .dropdown-menu > li > a, + .navbar-pf .applauncher-pf.open .dropdown-menu > li > a, + .navbar-pf-alt .applauncher-pf.open .dropdown-menu > li > a { + padding-left: 20px; + } + .navbar-pf .navbar-utility .applauncher-pf.open .dropdown-menu > li > a .applauncher-pf-link-icon, + .navbar-pf-alt .navbar-utility .applauncher-pf.open .dropdown-menu > li > a .applauncher-pf-link-icon, + .navbar-pf .applauncher-pf.open .dropdown-menu > li > a .applauncher-pf-link-icon, + .navbar-pf-alt .applauncher-pf.open .dropdown-menu > li > a .applauncher-pf-link-icon { + padding-right: 20px; + } +} +.navbar-pf .navbar-utility .applauncher-pf.dropdown > .dropdown-toggle, +.navbar-pf-alt .navbar-utility .applauncher-pf.dropdown > .dropdown-toggle, +.navbar-pf .applauncher-pf.dropdown > .dropdown-toggle, +.navbar-pf-alt .applauncher-pf.dropdown > .dropdown-toggle, +.navbar-pf .navbar-utility .applauncher-pf .dropdown-toggle, +.navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-toggle, +.navbar-pf .applauncher-pf .dropdown-toggle, +.navbar-pf-alt .applauncher-pf .dropdown-toggle { + background-color: inherit; + color: #d1d1d1; + text-align: left; + text-decoration: none; + border-width: 0; + display: block; + padding-left: 20px; +} +.navbar-pf .navbar-utility .applauncher-pf.dropdown > .dropdown-toggle.disabled, +.navbar-pf-alt .navbar-utility .applauncher-pf.dropdown > .dropdown-toggle.disabled, +.navbar-pf .applauncher-pf.dropdown > .dropdown-toggle.disabled, +.navbar-pf-alt .applauncher-pf.dropdown > .dropdown-toggle.disabled, +.navbar-pf .navbar-utility .applauncher-pf .dropdown-toggle.disabled, +.navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-toggle.disabled, +.navbar-pf .applauncher-pf .dropdown-toggle.disabled, +.navbar-pf-alt .applauncher-pf .dropdown-toggle.disabled { + color: #8b8d8f !important; +} +@media (min-width: 768px) { + .navbar-pf .navbar-utility .applauncher-pf.dropdown > .dropdown-toggle, + .navbar-pf-alt .navbar-utility .applauncher-pf.dropdown > .dropdown-toggle, + .navbar-pf .applauncher-pf.dropdown > .dropdown-toggle, + .navbar-pf-alt .applauncher-pf.dropdown > .dropdown-toggle, + .navbar-pf .navbar-utility .applauncher-pf .dropdown-toggle, + .navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-toggle, + .navbar-pf .applauncher-pf .dropdown-toggle, + .navbar-pf-alt .applauncher-pf .dropdown-toggle { + border-left: 1px solid #2b2b2b; + padding: 7px 10px; + line-height: 1; + } +} +.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-icon, +.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-icon, +.navbar-pf .applauncher-pf .applauncher-pf-icon, +.navbar-pf-alt .applauncher-pf .applauncher-pf-icon { + padding-right: 4px; +} +@media (min-width: 768px) { + .navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-icon, + .navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-icon, + .navbar-pf .applauncher-pf .applauncher-pf-icon, + .navbar-pf-alt .applauncher-pf .applauncher-pf-icon { + padding: 0; + } +} +.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-title, +.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-title, +.navbar-pf .applauncher-pf .applauncher-pf-title, +.navbar-pf-alt .applauncher-pf .applauncher-pf-title { + display: inline; + position: relative; +} +.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link, +.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link, +.navbar-pf .applauncher-pf .applauncher-pf-link, +.navbar-pf-alt .applauncher-pf .applauncher-pf-link { + overflow: hidden; + width: 100%; +} +.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link:hover, +.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link:hover, +.navbar-pf .applauncher-pf .applauncher-pf-link:hover, +.navbar-pf-alt .applauncher-pf .applauncher-pf-link:hover { + background-color: transparent; + border-color: transparent; + box-shadow: none; +} +.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link-title, +.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link-title, +.navbar-pf .applauncher-pf .applauncher-pf-link-title, +.navbar-pf-alt .applauncher-pf .applauncher-pf-link-title { + overflow: hidden; +} +@media (min-width: 768px) { + .navbar-pf .navbar-utility .applauncher-pf, + .navbar-pf-alt .navbar-utility .applauncher-pf, + .navbar-pf .applauncher-pf, + .navbar-pf-alt .applauncher-pf { + display: inline-block; + overflow: visible; + } + .navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-title, + .navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-title, + .navbar-pf .applauncher-pf .applauncher-pf-title, + .navbar-pf-alt .applauncher-pf .applauncher-pf-title { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; + } + .navbar-pf .navbar-utility .applauncher-pf .dropdown-toggle.disabled, + .navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-toggle.disabled, + .navbar-pf .applauncher-pf .dropdown-toggle.disabled, + .navbar-pf-alt .applauncher-pf .dropdown-toggle.disabled { + cursor: not-allowed; + } + .navbar-pf .navbar-utility .applauncher-pf.open > .dropdown-menu, + .navbar-pf-alt .navbar-utility .applauncher-pf.open > .dropdown-menu, + .navbar-pf .applauncher-pf.open > .dropdown-menu, + .navbar-pf-alt .applauncher-pf.open > .dropdown-menu { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + } + .navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-item, + .navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-item, + .navbar-pf .applauncher-pf .applauncher-pf-item, + .navbar-pf-alt .applauncher-pf .applauncher-pf-item { + width: 100%; + } + .navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link, + .navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link, + .navbar-pf .applauncher-pf .applauncher-pf-link, + .navbar-pf-alt .applauncher-pf .applauncher-pf-link { + display: -ms-flexbox; + display: flex; + white-space: initial; + -ms-flex-align: center; + align-items: center; + } + .navbar-pf .navbar-utility .applauncher-pf-block-list .applauncher-pf-link, + .navbar-pf-alt .navbar-utility .applauncher-pf-block-list .applauncher-pf-link, + .navbar-pf .applauncher-pf-block-list .applauncher-pf-link, + .navbar-pf-alt .applauncher-pf-block-list .applauncher-pf-link { + -ms-flex-wrap: wrap; + flex-wrap: wrap; + } + .navbar-pf .navbar-utility .applauncher-pf-block-list .applauncher-pf-link-icon, + .navbar-pf-alt .navbar-utility .applauncher-pf-block-list .applauncher-pf-link-icon, + .navbar-pf .applauncher-pf-block-list .applauncher-pf-link-icon, + .navbar-pf-alt .applauncher-pf-block-list .applauncher-pf-link-icon { + padding: 0; + } + .navbar-pf .navbar-utility .applauncher-pf .dropdown-menu, + .navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-menu, + .navbar-pf .applauncher-pf .dropdown-menu, + .navbar-pf-alt .applauncher-pf .dropdown-menu { + padding: 9px; + min-width: 220px; + } + .navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link, + .navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link, + .navbar-pf .applauncher-pf .applauncher-pf-link, + .navbar-pf-alt .applauncher-pf .applauncher-pf-link { + border-style: solid; + border-width: 1px; + border-color: transparent; + } + .navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link:hover, + .navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link:hover, + .navbar-pf .applauncher-pf .applauncher-pf-link:hover, + .navbar-pf-alt .applauncher-pf .applauncher-pf-link:hover { + background-color: #f5f5f5; + border-color: #bbb; + color: #0088ce; + text-decoration: none; + box-shadow: 0 0 2px 0 #d1d1d1; + } + .navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link-icon, + .navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link-icon, + .navbar-pf .applauncher-pf .applauncher-pf-link-icon, + .navbar-pf-alt .applauncher-pf .applauncher-pf-link-icon { + font-size: 1.2em; + text-align: center; + width: 1.28571429em; + } +} +@media (min-width: 768px) and (min-width: 768px) { + .navbar-pf .navbar-utility .applauncher-pf-block-list .applauncher-pf-item, + .navbar-pf-alt .navbar-utility .applauncher-pf-block-list .applauncher-pf-item, + .navbar-pf .applauncher-pf-block-list .applauncher-pf-item, + .navbar-pf-alt .applauncher-pf-block-list .applauncher-pf-item { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + } +} +@media (min-width: 768px) and (min-width: 768px) { + .navbar-pf .navbar-utility .applauncher-pf-block-list .applauncher-pf-link, + .navbar-pf-alt .navbar-utility .applauncher-pf-block-list .applauncher-pf-link, + .navbar-pf .applauncher-pf-block-list .applauncher-pf-link, + .navbar-pf-alt .applauncher-pf-block-list .applauncher-pf-link { + -ms-flex-direction: column; + flex-direction: column; + text-align: center; + padding: 15px 0; + } +} +@media (min-width: 768px) and (min-width: 768px) { + .navbar-pf .navbar-utility .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link, + .navbar-pf-alt .navbar-utility .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link, + .navbar-pf .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link, + .navbar-pf-alt .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link { + padding: 9px; + } + .navbar-pf .navbar-utility .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-icon, + .navbar-pf-alt .navbar-utility .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-icon, + .navbar-pf .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-icon, + .navbar-pf-alt .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-icon { + -ms-flex: 1 0 0px; + flex: 1 0 0; + text-align: left; + } + .navbar-pf .navbar-utility .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-title, + .navbar-pf-alt .navbar-utility .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-title, + .navbar-pf .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-title, + .navbar-pf-alt .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-title { + -ms-flex: 3; + flex: 3; + } +} +@media (min-width: 768px) and (min-width: 768px) { + .navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link-icon, + .navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link-icon, + .navbar-pf .applauncher-pf .applauncher-pf-link-icon, + .navbar-pf-alt .applauncher-pf .applauncher-pf-link-icon { + font-size: 2em; + } +} +@media (min-width: 768px) { + .navbar-iconic .navbar-utility .applauncher-pf.dropdown > .dropdown-toggle, + .navbar-iconic .applauncher-pf.dropdown > .dropdown-toggle, + .navbar-iconic .navbar-utility .applauncher-pf .dropdown-toggle, + .navbar-iconic .applauncher-pf .dropdown-toggle { + padding: 15px; + line-height: inherit; + } +} +.blank-slate-pf { + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 1px; + margin-bottom: 20px; + padding: 30px; + text-align: center; +} +@media (min-width: 768px) { + .blank-slate-pf { + padding: 60px 60px; + } +} +@media (min-width: 992px) { + .blank-slate-pf { + padding: 90px 120px; + } +} +.blank-slate-pf .blank-slate-pf-icon { + color: #9c9c9c; + font-size: 57.6px; + line-height: 57.6px; +} +.blank-slate-pf .blank-slate-pf-main-action { + margin-top: 20px; +} +.blank-slate-pf .blank-slate-pf-secondary-action { + margin-top: 20px; +} +.combobox-container.combobox-selected .glyphicon-remove { + display: inline-block; +} +.combobox-container .caret { + margin-left: 0; +} +.combobox-container .combobox::-ms-clear { + display: none; +} +.combobox-container .dropdown-menu { + margin-top: -1px; + width: 100%; +} +.combobox-container .glyphicon-remove { + display: none; + top: auto; + width: 12px; +} +.combobox-container .glyphicon-remove:before { + content: "\E60B"; + font-family: "PatternFlyIcons-webfont"; +} +.combobox-container .input-group-addon { + background-color: #f1f1f1; + background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffededed', GradientType=0); + border-color: #bbb; + color: #4d5258; + position: relative; +} +.combobox-container .input-group-addon:hover, +.combobox-container .input-group-addon:focus, +.combobox-container .input-group-addon:active, +.combobox-container .input-group-addon.active, +.open .dropdown-toggle.combobox-container .input-group-addon { + background-color: #f1f1f1; + background-image: none; + border-color: #bbb; + color: #4d5258; +} +.combobox-container .input-group-addon:active, +.combobox-container .input-group-addon.active, +.open .dropdown-toggle.combobox-container .input-group-addon { + background-image: none; +} +.combobox-container .input-group-addon:active:hover, +.combobox-container .input-group-addon.active:hover, +.open .dropdown-toggle.combobox-container .input-group-addon:hover, +.combobox-container .input-group-addon:active:focus, +.combobox-container .input-group-addon.active:focus, +.open .dropdown-toggle.combobox-container .input-group-addon:focus, +.combobox-container .input-group-addon:active.focus, +.combobox-container .input-group-addon.active.focus, +.open .dropdown-toggle.combobox-container .input-group-addon.focus { + background-color: #e5e5e5; + border-color: #a9a9a9; +} +.combobox-container .input-group-addon.disabled, +.combobox-container .input-group-addon[disabled], +fieldset[disabled] .combobox-container .input-group-addon, +.combobox-container .input-group-addon.disabled:hover, +.combobox-container .input-group-addon[disabled]:hover, +fieldset[disabled] .combobox-container .input-group-addon:hover, +.combobox-container .input-group-addon.disabled:focus, +.combobox-container .input-group-addon[disabled]:focus, +fieldset[disabled] .combobox-container .input-group-addon:focus, +.combobox-container .input-group-addon.disabled:active, +.combobox-container .input-group-addon[disabled]:active, +fieldset[disabled] .combobox-container .input-group-addon:active, +.combobox-container .input-group-addon.disabled.active, +.combobox-container .input-group-addon[disabled].active, +fieldset[disabled] .combobox-container .input-group-addon.active { + background-color: #f1f1f1; + border-color: #bbb; +} +.combobox-container .input-group-addon:active { + box-shadow: inset 0 2px 8px rgba(3, 3, 3, 0.2); +} +.bootstrap-datepicker.form-control[readonly] { + background-color: #fff; + border-color: #bbb !important; + color: #363636; + box-shadow: inset 0 1px 1px rgba(3, 3, 3, 0.075); +} +.bootstrap-datepicker.form-control[readonly]:focus { + border-color: #0088ce; + outline: 0; + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(0, 136, 206, 0.6); +} +.bootstrap-datepicker.form-control[readonly]:focus { + border-color: #0088ce !important; +} +.has-error .bootstrap-datepicker.form-control[readonly]:focus { + border-color: #990000; + box-shadow: inset 0 1px 1px rgba(3, 3, 3, 0.075), 0 0 6px #ff3333; +} +.has-success .bootstrap-datepicker.form-control[readonly]:focus { + border-color: #2b542c; + box-shadow: inset 0 1px 1px rgba(3, 3, 3, 0.075), 0 0 6px #67b168; +} +.has-warning .bootstrap-datepicker.form-control[readonly]:focus { + border-color: #bb6106; + box-shadow: inset 0 1px 1px rgba(3, 3, 3, 0.075), 0 0 6px #faad60; +} +.bootstrap-datepicker.form-control[readonly]:hover { + border-color: #7dc3e8 !important; +} +.has-error .bootstrap-datepicker.form-control[readonly]:hover { + border-color: #990000 !important; +} +.has-success .bootstrap-datepicker.form-control[readonly]:hover { + border-color: #2b542c !important; +} +.has-warning .bootstrap-datepicker.form-control[readonly]:hover { + border-color: #bb6106 !important; +} +.has-error .bootstrap-datepicker.form-control[readonly] { + border-color: #cc0000 !important; +} +.has-success .bootstrap-datepicker.form-control[readonly] { + border-color: #3c763d !important; +} +.has-warning .bootstrap-datepicker.form-control[readonly] { + border-color: #ec7a08 !important; +} +.datepicker { + border-radius: 1px; +} +.datepicker .datepicker-switch, +.datepicker tfoot .clear, +.datepicker tfoot .today { + font-size: 14px; + font-weight: 500; +} +.datepicker .next, +.datepicker .prev { + font-weight: 500; +} +.datepicker table tr td, +.datepicker table tr th { + border-radius: 1px; +} +.datepicker table tr td.active, +.datepicker table tr td.active:hover, +.datepicker table tr td.active.disabled, +.datepicker table tr td.active.disabled:hover { + background: #0088ce !important; + color: #fff !important; + text-shadow: none; +} +.datepicker table tr td.day:hover, +.datepicker table tr td.day.focused { + background: #def3ff; +} +.datepicker table tr td.selected, +.datepicker table tr td.selected:hover, +.datepicker table tr td.selected.disabled, +.datepicker table tr td.selected.disabled:hover { + text-shadow: none; +} +.datepicker table tr td span { + border-radius: 1px; +} +.datepicker table tr td span.active, +.datepicker table tr td span.active:hover, +.datepicker table tr td span.active.disabled, +.datepicker table tr td span.active.disabled:hover { + background: #0088ce; + text-shadow: none; +} +.datepicker table tr td span:hover { + background: #def3ff; +} +.datepicker thead tr:first-child th:hover, +.datepicker tfoot tr th:hover { + background: #def3ff; +} +.input-daterange input:first-child { + border-radius: 1px 0 0 1px; +} +.input-daterange input:last-child { + border-radius: 0 1px 1px 0; +} +.input-daterange .input-group-addon { + background-color: #f1f1f1; + border-color: #bbb; + line-height: 1.66666667; + padding: 2px 6px; +} +.bootstrap-select.btn-group.form-control { + margin-bottom: 0; +} +.bootstrap-select.btn-group .btn { + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.bootstrap-select.btn-group .btn:hover { + border-color: #7dc3e8; +} +.bootstrap-select.btn-group .btn .caret { + margin-top: -4px; +} +.bootstrap-select.btn-group .btn:focus { + border-color: #0088ce; + outline: 0 !important; + box-shadow: inset 0 1px 1px rgba(3, 3, 3, 0.075), 0 0 8px rgba(0, 136, 206, 0.6); +} +.has-error .bootstrap-select.btn-group .btn { + border-color: #cc0000; +} +.has-error .bootstrap-select.btn-group .btn:focus { + border-color: #990000; + box-shadow: inset 0 1px 1px rgba(3, 3, 3, 0.075), 0 0 6px #ff3333; +} +.has-success .bootstrap-select.btn-group .btn { + border-color: #3c763d; +} +.has-success .bootstrap-select.btn-group .btn:focus { + border-color: #2b542c; + box-shadow: inset 0 1px 1px rgba(3, 3, 3, 0.075), 0 0 6px #67b168; +} +.has-warning .bootstrap-select.btn-group .btn { + border-color: #ec7a08; +} +.has-warning .bootstrap-select.btn-group .btn:focus { + border-color: #bb6106; + box-shadow: inset 0 1px 1px rgba(3, 3, 3, 0.075), 0 0 6px #faad60; +} +.bootstrap-select.btn-group .dropdown-menu > .active > a, +.bootstrap-select.btn-group .dropdown-menu > .active > a:active { + background-color: #def3ff !important; + border-color: #bee1f4 !important; + color: #363636 !important; +} +.bootstrap-select.btn-group .dropdown-menu > .active > a small, +.bootstrap-select.btn-group .dropdown-menu > .active > a:active small { + color: #9c9c9c !important; +} +.bootstrap-select.btn-group .dropdown-menu > .disabled > a { + color: #9c9c9c !important; +} +.bootstrap-select.btn-group .dropdown-menu > .selected > a { + background-color: #0088ce !important; + border-color: #0088ce !important; + color: #fff !important; +} +.bootstrap-select.btn-group .dropdown-menu > .selected > a small { + color: rgba(255, 255, 255, 0.5) !important; +} +.bootstrap-select.btn-group .dropdown-menu .divider { + background: #ededed !important; + margin: 4px 1px !important; +} +.bootstrap-select.btn-group .dropdown-menu dt { + color: #8b8d8f; + font-weight: normal; + padding: 1px 10px; +} +.bootstrap-select.btn-group .dropdown-menu li > a.opt { + padding: 1px 10px; +} +.bootstrap-select.btn-group .dropdown-menu li a:active small { + color: rgba(255, 255, 255, 0.5) !important; +} +.bootstrap-select.btn-group .dropdown-menu li a:hover small, +.bootstrap-select.btn-group .dropdown-menu li a:focus small { + color: #9c9c9c; +} +.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:hover small, +.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:focus small { + color: #9c9c9c; +} +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default, +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default { + background: #fafafa; +} +.bootstrap-switch .bootstrap-switch-label { + background: #f1f1f1; + box-shadow: 0 0 2px rgba(3, 3, 3, 0.4); + background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffededed', GradientType=0); + position: relative; + z-index: 9; +} +.bootstrap-touchspin .input-group-btn-vertical > .btn { + padding-bottom: 6px; + padding-top: 6px; +} +.bootstrap-touchspin .input-group-btn-vertical .bootstrap-touchspin-down { + border-bottom-right-radius: 1px; +} +.bootstrap-touchspin .input-group-btn-vertical .bootstrap-touchspin-up { + border-top-right-radius: 1px; +} +.bootstrap-touchspin .input-group-btn-vertical i { + font-size: 8px; + left: 6px; + top: 2px; +} +.bootstrap-touchspin .input-group-btn-vertical i.fa-angle-down, +.bootstrap-touchspin .input-group-btn-vertical i.fa-angle-up { + font-size: 12px; + line-height: 12px; + top: 0; +} +.bootstrap-touchspin .input-group-btn-vertical i.fa-angle-down, +.bootstrap-touchspin .input-group-btn-vertical i.fa-angle-up { + left: 7px; +} +.treeview .list-group { + border-top: 0; +} +.treeview .list-group-item { + background: transparent; + border-bottom: 1px solid transparent !important; + border-top: 1px solid transparent !important; + cursor: default !important; + margin-bottom: 0; + overflow: hidden; + padding: 0 10px; + text-overflow: ellipsis; + white-space: nowrap; +} +.treeview .list-group-item:hover { + background: none !important; +} +.treeview .list-group-item.node-selected { + background: none !important; + border-color: transparent !important; + color: inherit !important; +} +.treeview .list-group-item.node-check-changed span.node-icon, +.treeview .list-group-item.node-check-changed span.text { + color: #39a5dc; +} +.treeview span.icon { + display: inline-block; + font-size: 13px; + min-width: 10px; + text-align: center; +} +.treeview span.icon > [class*="fa-angle"] { + font-size: 15px; +} +.treeview span.icon.check-icon { + margin-right: 10px; +} +.treeview span.icon.expand-icon { + cursor: pointer !important; +} +.treeview span.image { + background-repeat: no-repeat; + background-size: contain; + display: inline-block; + height: 1.19em; + line-height: 1em; + margin-right: 5px; + vertical-align: middle; + width: 12px; +} +.treeview span.indent { + margin-right: 5px; +} +.treeview .node-disabled { + color: #d1d1d1; + cursor: not-allowed; +} +.treeview .node-disabled span.expand-icon { + cursor: default !important; +} +.treeview .node-hidden { + display: none; +} +.treeview-pf-hover .list-group-item { + cursor: pointer !important; +} +.treeview-pf-hover .list-group-item:hover { + background-color: #def3ff !important; + border-color: #bee1f4 !important; +} +.treeview-pf-select .list-group-item { + cursor: pointer !important; +} +.treeview-pf-select .list-group-item.node-selected { + background: #0088ce !important; + border-color: #0088ce !important; + color: #fff !important; +} +.card-pf { + background: #fff; + border-top: 2px solid transparent; + box-shadow: 0 1px 1px rgba(3, 3, 3, 0.175); + margin: 0 -10px 20px; + padding: 0 20px; +} +.card-pf.card-pf-accented { + border-top-color: #39a5dc; +} +.card-pf.card-pf-aggregate-status .card-pf-aggregate-status-notifications a, +.card-pf.card-pf-aggregate-status .card-pf-title a { + color: #363636; +} +.card-pf.card-pf-aggregate-status .card-pf-aggregate-status-notifications a.add, +.card-pf.card-pf-aggregate-status .card-pf-title a.add { + color: #0088ce; +} +.card-pf.card-pf-aggregate-status .card-pf-aggregate-status-notifications a.add:hover, +.card-pf.card-pf-aggregate-status .card-pf-title a.add:hover { + color: #00659c; +} +.card-pf.card-pf-aggregate-status .card-pf-aggregate-status-notifications a:hover, +.card-pf.card-pf-aggregate-status .card-pf-title a:hover { + color: #00659c; +} +.card-pf.card-pf-aggregate-status { + padding: 0 10px; + text-align: center; +} +.card-pf.card-pf-aggregate-status-mini { + padding-bottom: 10px; + position: relative; +} +@media (min-width: 768px) { + .card-pf.card-pf-bleed-left { + margin-left: -20px; + } + .card-pf.card-pf-bleed-right { + border-right: 1px solid #d1d1d1; + margin-right: -20px; + } +} +.card-pf-aggregate-status-notifications { + font-size: 24px; + font-weight: 300; +} +.card-pf-aggregate-status-mini .card-pf-aggregate-status-notifications { + line-height: 1; +} +.card-pf-aggregate-status-notifications .card-pf-aggregate-status-notification + .card-pf-aggregate-status-notification { + border-left: 1px solid #d1d1d1; + margin-left: 3px; + padding-left: 10px; +} +.card-pf-aggregate-status-notifications .fa, +.card-pf-aggregate-status-notifications .pficon { + font-size: 18px; + margin-right: 7px; +} +.card-pf-body { + margin: 20px 0 0; + padding: 0 0 20px; +} +.card-pf-aggregate-status .card-pf-body { + margin-top: 10px; + padding-bottom: 10px; +} +.card-pf-aggregate-status-mini .card-pf-body { + margin-bottom: 0; + margin-top: 0; + padding-bottom: 0; + position: absolute; + right: 20px; + top: 15px; +} +.card-pf-utilization .card-pf-title + .card-pf-body { + margin-top: -8px; +} +.card-pf-body > *:last-child { + margin-bottom: 0; +} +.card-pf-footer { + background-color: #fafafa; + border-top: 1px solid #d1d1d1; + margin: 0 -20px !important; + padding: 20px 20px 10px; +} +.card-pf-footer a .fa, +.card-pf-footer a .pficon { + margin-right: 5px; +} +.card-pf-footer .card-pf-time-frame-filter { + margin-top: -2px; +} +.card-pf-link-with-icon { + padding-left: 21px; + position: relative; +} +.card-pf-link-with-icon .fa, +.card-pf-link-with-icon .pficon { + font-size: 16px; + left: 0; + position: absolute; + top: 0; +} +.card-pf-heading .card-pf-time-frame-filter, +.card-pf-footer .card-pf-time-frame-filter { + float: right; + margin-left: 20px; +} +.card-pf-heading { + border-bottom: 1px solid #d1d1d1; + margin: 0 -20px 20px; + padding: 0 20px 0; +} +.card-pf-heading .card-pf-time-frame-filter { + margin-top: -5px; +} +.card-pf-heading-details { + float: right; + font-size: 10px; +} +.card-pf-subtitle { + font-size: 16px; + margin-top: 20px; + margin-bottom: 10px; +} +[class^="col"] .card-pf-subtitle { + margin-top: 0; +} +@media (max-width: 767px) { + .card-pf-body [class^="col"] + [class^="col"] > .card-pf-subtitle { + margin-top: 40px; + } +} +.card-pf-title { + font-size: 16px; + font-weight: 400; + margin: 20px 0; + padding: 0; +} +.card-pf-aggregate-status .card-pf-title { + font-size: 14px; + margin: 10px 0 0; +} +.card-pf-aggregate-status .card-pf-title .fa, +.card-pf-aggregate-status .card-pf-title .pficon { + color: #292e34; + font-size: 16px; + margin-right: 7px; +} +.card-pf-title .card-pf-aggregate-status-count { + font-size: 16px; +} +.card-pf-aggregate-status-mini .card-pf-title .card-pf-aggregate-status-count { + display: block; + font-size: 24px; + font-weight: 300; + margin-bottom: 3px; +} +.card-pf-aggregate-status-mini .card-pf-title { + font-size: 12px; + margin-top: 5px; +} +.card-pf-aggregate-status-mini .card-pf-title a { + display: inline-block; +} +.card-pf-aggregate-status-mini .card-pf-title .fa, +.card-pf-aggregate-status-mini .card-pf-title .pficon { + font-size: 26px; + margin-right: 0; + min-width: 26px; + position: absolute; + left: 20px; + text-align: center; + top: 15px; +} +.card-pf-utilization-details { + border-bottom: 1px solid #d1d1d1; + display: table; + margin: 12px 0 15px; + padding: 0 0 15px; + width: 100%; +} +.card-pf-utilization-details .card-pf-utilization-card-details-count, +.card-pf-utilization-details .card-pf-utilization-card-details-description { + float: left; + line-height: 1; +} +.card-pf-utilization-details .card-pf-utilization-card-details-count { + font-size: 26px; + font-weight: 300; + margin-right: 10px; +} +.card-pf-utilization-details .card-pf-utilization-card-details-line-1, +.card-pf-utilization-details .card-pf-utilization-card-details-line-2 { + display: block; +} +.card-pf-utilization-details .card-pf-utilization-card-details-line-1 { + font-size: 10px; + margin-bottom: 2px; +} +.cards-pf { + background: #f5f5f5; +} +.cards-pf .row-cards-pf { + padding: 0 20px; +} +.cards-pf .row-cards-pf:first-child { + padding-top: 20px; +} +.container-cards-pf { + margin-top: 20px; +} +.row-cards-pf { + margin-left: -10px; + margin-right: -10px; +} +.card-pf-view { + border: 2px solid transparent; +} +.card-pf-view .card-pf-heading-kebab .dropdown-kebab-pf { + margin-top: -3px; +} +.card-pf-view .card-pf-heading-kebab + .progress-pf-legend p { + margin-bottom: 0; +} +.card-pf-view .card-pf-heading-kebab + .progress-pf-legend .progress { + margin-bottom: 7px; + margin-top: 16px; +} +.card-pf-view .card-pf-info { + margin-top: 15px; +} +.card-pf-view .card-pf-info strong { + font-size: 13px; + margin-right: 10px; +} +.card-pf-view .card-pf-item { + display: inline-block; + font-size: 16px; + padding: 0 13px 0 15px; +} +.card-pf-view .card-pf-item:first-child { + padding-left: 0; +} +.card-pf-view .card-pf-item:last-child { + padding-right: 0; +} +.card-pf-view .card-pf-item + .card-pf-item { + border-left: 1px solid #d1d1d1; +} +.card-pf-view .card-pf-item .fa-check { + color: #3f9c35; +} +.card-pf-view .card-pf-item .fa + .card-pf-item-text, +.card-pf-view .card-pf-item .pficon + .card-pf-item-text { + margin-left: 10px; +} +.card-pf-view .card-pf-items { + margin-top: 15px; +} +.card-pf-view .card-pf-title { + font-size: 20px; + font-weight: 300; + margin-bottom: 0; + margin-top: 15px; +} +.card-pf-view .card-pf-title .fa, +.card-pf-view .card-pf-title .pficon { + font-size: 18px; + margin-right: 2px; +} +.col-lg-2 .card-pf-view .card-pf-title { + font-size: 16px; +} +.card-pf-view .card-pf-top-element .card-pf-icon-circle { + border: 2px solid #39a5dc; + border-radius: 50%; + display: block; + font-size: 46px; + height: 106px; + line-height: 102px; + margin: 0 auto; + text-align: center; + width: 106px; +} +.col-lg-2 .card-pf-view .card-pf-top-element .card-pf-icon-circle { + font-size: 23px; + height: 54px; + line-height: 50px; + width: 54px; +} +.card-pf-view .card-pf-view-checkbox { + position: absolute; + top: 11px; + left: 15px; +} +.card-pf-view .card-pf-view-checkbox input[type=checkbox] { + display: none; +} +.card-pf-view.card-pf-view-multi-select .card-pf-view-checkbox input[type=checkbox] { + display: block; +} +@media (min-width: 768px) { + .card-pf-view.card-pf-view-multi-select .card-pf-view-checkbox input[type=checkbox] { + visibility: hidden; + } + .card-pf-view.card-pf-view-multi-select .card-pf-view-checkbox input[type=checkbox]:checked { + visibility: visible; + } +} +.card-pf-view.card-pf-view-multi-select:hover .card-pf-view-checkbox input[type=checkbox] { + visibility: visible; +} +.card-pf-view.card-pf-view-select { + position: relative; +} +.card-pf-view.card-pf-view-select:hover { + box-shadow: 0 1px 6px rgba(3, 3, 3, 0.35); +} +.card-pf-view.card-pf-view-select.active { + border: 2px solid #39a5dc; +} +.card-pf-view.card-pf-view-single-select { + cursor: pointer; +} +.card-pf-view.card-pf-view-xs .card-pf-title { + font-size: 16px; + font-weight: normal; + margin-bottom: 10px; +} +.card-pf-view.card-pf-view-xs .card-pf-title .fa, +.card-pf-view.card-pf-view-xs .card-pf-title .pficon { + font-size: 14px; + margin-right: 5px; +} +.c3 path { + stroke: #d1d1d1; +} +.c3 svg { + font-family: "Open Sans", Helvetica, Arial, sans-serif; +} +.c3-axis-x .tick line { + stroke: #d1d1d1; +} +.c3-axis-y .tick line { + display: none; +} +.c3-chart-arc path { + stroke: #fff; +} +.c3-grid line { + stroke: #d1d1d1; +} +.c3-line { + stroke-width: 2px; +} +.c3-tooltip { + background: #393f44; + box-shadow: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +.c3-tooltip td { + background: transparent; + border: 0; + color: #fff; + font-size: 12px; + padding: 5px 10px; +} +.c3-tooltip th { + background: transparent; + font-size: 12px; + padding: 5px 10px 0; + border-bottom: solid 2px #030303; +} +.c3-tooltip tr { + border: 0; +} +.c3-tooltip tr + tr > td { + padding-top: 0; +} +.c3-tooltip-sparkline, +.donut-tooltip-pf { + background: #393f44; + color: #fff; + opacity: 0.9; + filter: alpha(opacity=90); + padding: 2px 6px; +} +.c3-xgrid, +.c3-ygrid { + stroke-dasharray: 0 0; +} +.chart-pf-sparkline { + margin-left: -5px; + margin-right: -5px; +} +.donut-title-big-pf { + font-size: 30px; + font-weight: 300; +} +.donut-title-small-pf { + font-size: 12px; + font-weight: 400; +} +.line-chart-pf .c3-zoom-rect { + opacity: 1 !important; + fill: #fafafa; + stroke: #d1d1d1; + stroke-width: 1px; +} +.close { + text-shadow: none; + z-index: 1; + position: relative; + opacity: 0.6; + filter: alpha(opacity=60); +} +.close:hover, +.close:focus { + opacity: 0.9; + filter: alpha(opacity=90); +} +.ColVis_Button:active:focus { + outline: none; +} +.ColVis_catcher { + position: absolute; + z-index: 999; +} +.ColVis_collection { + background-color: #fff; + border: 1px solid #bbb; + border-radius: 1px; + box-shadow: 0 6px 12px rgba(3, 3, 3, 0.175); + background-clip: padding-box; + list-style: none; + margin: -1px 0 0 0; + padding: 5px 10px; + width: 150px; + z-index: 1000; +} +.ColVis_collection label { + font-weight: normal; + margin-bottom: 5px; + margin-top: 5px; + padding-left: 20px; +} +.ColVis_collectionBackground { + background-color: #fff; + height: 100%; + left: 0; + position: fixed; + top: 0; + width: 100%; + z-index: 998; +} +.dataTables_header { + background-color: #f5f5f5; + border: 1px solid #d1d1d1; + border-bottom: none; + padding: 5px; + position: relative; + text-align: center; +} +.dataTables_header .btn { + box-shadow: none; +} +.dataTables_header .ColVis { + position: absolute; + right: 5px; + text-align: left; + top: 5px; +} +.dataTables_header .ColVis + .dataTables_info { + padding-right: 30px; +} +.dataTables_header .dataTables_filter { + position: absolute; +} +.dataTables_header .dataTables_filter input { + border: 1px solid #bbb; + height: 24px; +} +@media (max-width: 767px) { + .dataTables_header .dataTables_filter input { + width: 100px; + } +} +.dataTables_header .dataTables_info { + padding: 2px 0; +} +@media (max-width: 480px) { + .dataTables_header .dataTables_info { + text-align: right; + } +} +.dataTables_header .dataTables_info b { + font-weight: bold; +} +.dataTables_footer { + background-color: #fff; + border: 1px solid #d1d1d1; + border-top: none; + overflow: hidden; +} +.dataTables_paginate { + background: #fafafa; + float: right; + margin: 0; +} +.dataTables_paginate .pagination { + float: left; + margin: 0; +} +.dataTables_paginate .pagination > li > span { + border-color: #fff #d1d1d1 #f5f5f5; + border-width: 0 1px; + font-size: 16px; + font-weight: normal; + padding: 0; + text-align: center; + width: 31px; +} +.dataTables_paginate .pagination > li > span:hover, +.dataTables_paginate .pagination > li > span:focus { + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.dataTables_paginate .pagination > li.last > span { + border-right: none; +} +.dataTables_paginate .pagination > li.disabled > span { + background: #f5f5f5; + border-left-color: #ededed; + border-right-color: #ededed; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.dataTables_paginate .pagination-input { + float: left; + font-size: 12px; + line-height: 1em; + padding: 4px 15px 0; + text-align: right; +} +.dataTables_paginate .pagination-input .paginate_input { + border: 1px solid #d1d1d1; + box-shadow: inset 0 1px 1px rgba(3, 3, 3, 0.075); + font-size: 12px; + font-weight: 600; + height: 19px; + margin-right: 8px; + padding-right: 3px; + text-align: right; + width: 30px; +} +.dataTables_paginate .pagination-input .paginate_of { + position: relative; +} +.dataTables_paginate .pagination-input .paginate_of b { + margin-left: 3px; +} +.dataTables_empty { + background: #f5f5f5; +} +/* Might need this for pagination? +.dataTables_wrapper { + margin: @line-height-computed 0; + @media (max-width: @screen-xs-max) { + .table-responsive { + margin-bottom: 0; + } + } +} +*/ +.DTCR_clonedTable { + background-color: rgba(255, 255, 255, 0.7); + z-index: 202; +} +.DTCR_pointer { + background-color: #0088ce; + width: 1px; + z-index: 201; +} +.footer-pf-alt, +.footer-pf { + background-color: #030303; + color: #9c9c9c; + font-size: 11px; + line-height: 17px; + padding-left: 25px; + padding-top: 10px; +} +.layout-pf-alt-fixed-with-footer .footer-pf-alt, +.layout-pf-alt-fixed-with-footer .footer-pf, +.layout-pf-fixed-with-footer .footer-pf-alt, +.layout-pf-fixed-with-footer .footer-pf { + bottom: 0; + left: 0; + position: fixed; + right: 0; + z-index: 1030; +} +@font-face { + font-family: "PatternFlyIcons-webfont"; + src: url(assets/fonts/PatternFlyIcons-webfont.eot); + src: url(assets/fonts/PatternFlyIcons-webfont.eot?#iefix) format("embedded-opentype"), url(assets/fonts/PatternFlyIcons-webfont.ttf) format("truetype"), url(assets/fonts/PatternFlyIcons-webfont.woff) format("woff"), url(assets/fonts/PatternFlyIcons-webfont.svg#PatternFlyIcons-webfont) format("svg"); + font-weight: normal; + font-style: normal; +} +[class^="pficon-"], +[class*=" pficon-"] { + display: inline-block; + font-family: "PatternFlyIcons-webfont"; + font-style: normal; + font-variant: normal; + font-weight: normal; + line-height: 1; + speak: none; + text-transform: none; + /* Better Font Rendering =========== */ + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; +} +.pficon-add-circle-o:before { + content: "\E61B"; +} +.pficon-arrow:before { + content: "\E929"; +} +.pficon-asleep:before { + content: "\E925"; +} +.pficon-build:before { + content: "\E902"; +} +.pficon-builder-image:before { + content: "\E800"; +} +.pficon-bundle:before { + content: "\E918"; +} +.pficon-blueprint:before { + content: "\E915"; +} +.pficon-chat:before { + content: "\E928"; +} +.pficon-close:before { + content: "\E60B"; +} +.pficon-cloud-security:before { + content: "\E903"; +} +.pficon-cloud-tenant:before { + content: "\E904"; +} +.pficon-cluster:before { + content: "\E620"; +} +.pficon-container-node:before { + content: "\E621"; +} +.pficon-cpu:before { + content: "\E927"; +} +.pficon-degraded:before { + content: "\E91B"; +} +.pficon-delete:before { + content: "\E611"; +} +.pficon-domain:before { + content: "\E919"; +} +.pficon-edit:before { + content: "\E60A"; +} +.pficon-enterprise:before { + content: "\E906"; +} +.pficon-equalizer:before { + content: "\E610"; +} +.pficon-error-circle-o:before { + color: #cc0000; + content: "\E926"; +} +.pficon-export:before { + content: "\E616"; +} +.pficon-flag:before, +.pficon-messages:before { + content: "\E603"; +} +.pficon-flavor:before { + content: "\E907"; +} +.pficon-folder-close:before { + content: "\E607"; +} +.pficon-folder-open:before { + content: "\E606"; +} +.pficon-help:before { + content: "\E605"; +} +.pficon-history:before { + content: "\E617"; +} +.pficon-home:before { + content: "\E618"; +} +.pficon-image:before { + content: "\E61F"; +} +.pficon-import:before { + content: "\E615"; +} +.pficon-in-progress:before { + content: "\E92C"; +} +.pficon-info:before { + content: "\E92B"; +} +.pficon-key:before { + content: "\E924"; +} +.pficon-locked:before { + content: "\E923"; +} +.pficon-unlocked:before { + content: "\E922"; +} +.pficon-maintenance:before { + content: "\E92D"; +} +.pficon-memory:before { + content: "\E908"; +} +.pficon-middleware:before { + content: "\E917"; +} +.pficon-migration:before { + content: "\E92E"; +} +.pficon-network:before { + content: "\E909"; +} +.pficon-on:before { + content: "\E931"; +} +.pficon-on-running:before { + content: "\E930"; +} +.pficon-off:before { + content: "\E92F"; +} +.pficon-ok:before { + color: #3f9c35; + content: "\E602"; +} +.pficon-paused:before { + content: "\E932"; +} +.pficon-pending:before { + content: "\E933"; +} +.pficon-print:before { + content: "\E612"; +} +.pficon-private:before { + content: "\E914"; +} +.pficon-project:before { + content: "\E905"; +} +.pficon-rebalance:before { + content: "\E91C"; +} +.pficon-rebooting:before { + content: "\E934"; +} +.pficon-refresh:before, +.pficon-restart:before { + content: "\E617"; +} +.pficon-regions:before { + content: "\E90A"; +} +.pficon-registry:before { + content: "\E623"; +} +.pficon-remove:before { + content: "\E611"; +} +.pficon-replicator:before { + content: "\E624"; +} +.pficon-repository:before { + content: "\E90B"; +} +.pficon-resource-pool:before { + content: "\E90C"; +} +.pficon-resources-almost-empty:before { + content: "\E91D"; +} +.pficon-resources-almost-full:before { + content: "\E912"; +} +.pficon-resources-full:before { + content: "\E92A"; +} +.pficon-route:before { + content: "\E625"; +} +.pficon-running:before { + content: "\E614"; +} +.pficon-save:before { + content: "\E601"; +} +.pficon-screen:before { + content: "\E600"; +} +.pficon-search:before { + content: "\E921"; +} +.pficon-server:before { + content: "\E90D"; +} +.pficon-server-group:before { + content: "\E91A"; +} +.pficon-service:before { + content: "\E61E"; +} +.pficon-settings:before { + content: "\E610"; +} +.pficon-spinner:before { + content: "\E614"; +} +.pficon-spinner2:before { + content: "\E613"; +} +.pficon-storage-domain:before { + content: "\E90E"; +} +.pficon-tenant:before { + content: "\E916"; +} +.pficon-thumb-tack-o:before { + content: "\E920"; +} +.pficon-topology:before { + content: "\E608"; +} +.pficon-trend-down:before { + content: "\E900"; +} +.pficon-trend-up:before { + content: "\E901"; +} +.pficon-unknown:before { + content: "\E935"; +} +.pficon-user:before { + content: "\E91E"; +} +.pficon-users:before { + content: "\E91F"; +} +.pficon-virtual-machine:before { + content: "\E90F"; +} +.pficon-volume:before { + content: "\E910"; +} +.pficon-warning-triangle-o:before { + color: #ec7a08; + content: "\E913"; +} +.pficon-zone:before { + content: "\E911"; +} +.navbar-nav > li > .dropdown-menu.infotip { + border-top-width: 1px !important; + margin-top: 10px; +} +@media (max-width: 767px) { + .navbar-pf .navbar-nav .open .dropdown-menu.infotip { + background-color: #fff !important; + margin-top: 0; + } +} +.infotip { + min-width: 235px; + padding: 0; +} +.infotip .list-group { + border-top: 0; + margin: 0; + padding: 8px 0; +} +.infotip .list-group .list-group-item { + border: none; + margin: 0 15px 0 34px; + padding: 5px 0; +} +.infotip .list-group .list-group-item > .i { + color: #4d5258; + font-size: 13px; + left: -20px; + position: absolute; + top: 8px; +} +.infotip .list-group .list-group-item > a { + color: #4d5258; + line-height: 13px; +} +.infotip .list-group .list-group-item > .close { + float: right; +} +.infotip .footer { + background-color: #f5f5f5; + padding: 6px 15px; +} +.infotip .footer a:hover { + color: #0088ce; +} +.infotip .arrow, +.infotip .arrow:after { + border-color: transparent; + border-style: solid; + display: block; + height: 0; + position: absolute; + width: 0; +} +.infotip .arrow { + border-width: 11px; +} +.infotip .arrow:after { + border-width: 10px; + content: ""; +} +.infotip.bottom .arrow, +.infotip.bottom-left .arrow, +.infotip.bottom-right .arrow { + border-bottom-color: #bbb; + border-top-width: 0; + left: 50%; + margin-left: -11px; + top: -11px; +} +.infotip.bottom .arrow:after, +.infotip.bottom-left .arrow:after, +.infotip.bottom-right .arrow:after { + border-top-width: 0; + border-bottom-color: #fff; + content: " "; + margin-left: -10px; + top: 1px; +} +.infotip.bottom-left .arrow { + left: 20%; +} +.infotip.bottom-right .arrow { + left: 80%; +} +.infotip.top .arrow { + border-bottom-width: 0; + border-top-color: #bbb; + bottom: -11px; + left: 50%; + margin-left: -11px; +} +.infotip.top .arrow:after { + border-bottom-width: 0; + border-top-color: #f5f5f5; + bottom: 1px; + content: " "; + margin-left: -10px; +} +.infotip.right .arrow { + border-left-width: 0; + border-right-color: #bbb; + left: -11px; + margin-top: -11px; + top: 50%; +} +.infotip.right .arrow:after { + bottom: -10px; + border-left-width: 0; + border-right-color: #fff; + content: " "; + left: 1px; +} +.infotip.left .arrow { + border-left-color: #bbb; + border-right-width: 0; + margin-top: -11px; + right: -11px; + top: 50%; +} +.infotip.left .arrow:after { + border-left-color: #fff; + border-right-width: 0; + bottom: -10px; + content: " "; + right: 1px; +} +.layout-pf, +.layout-pf body { + min-height: 100%; +} +.layout-pf.layout-pf-fixed.transitions .container-pf-nav-pf-vertical { + transition: all 200ms cubic-bezier(0.35, 0, 0.25, 1); +} +.layout-pf.layout-pf-fixed body { + padding-top: 60px; +} +.layout-pf.layout-pf-fixed .navbar-pf { + left: 0; + position: fixed; + top: 0; + right: 0; + z-index: 1030; +} +.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical { + margin-left: 200px; +} +.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-vertical-with-badges { + margin-left: 250px; +} +.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.collapsed-nav { + margin-left: 75px; +} +.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.collapsed-nav.hidden-icons-pf { + margin-left: 0; +} +.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.hidden-nav { + margin-left: 0; +} +.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.hide-nav-pf { + margin-left: 0 !important; +} +.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.collapsed-secondary-nav-pf, +.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.collapsed-tertiary-nav-pf { + margin-left: 200px; +} +.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges, +.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges { + margin-left: 250px; +} +@media (min-width: 1200px) { + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf { + margin-left: 400px; + } + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.nav-pf-vertical-with-badges { + margin-left: 500px; + } + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.hidden-nav { + margin-left: 0; + } + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-secondary-nav-pf { + margin-left: 200px; + } + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges { + margin-left: 250px; + } + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-tertiary-nav-pf { + margin-left: 200px; + } + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges { + margin-left: 250px; + } + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav { + margin-left: 275px; + } + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav.nav-pf-vertical-with-badges { + margin-left: 325px; + } + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav.collapsed-secondary-nav-pf { + margin-left: 200px; + } + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges { + margin-left: 250px; + } + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav.collapsed-tertiary-nav-pf { + margin-left: 200px; + } + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges { + margin-left: 250px; + } + .layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav.hidden-icons-pf { + margin-left: 0; + } +} +.layout-pf.layout-pf-fixed-with-footer body { + padding-bottom: 37px; +} +.layout-pf-alt, +.layout-pf-alt body { + min-height: 100%; +} +.layout-pf-alt.layout-pf-alt-fixed.layout-pf-alt-fixed-inner-scroll, +.layout-pf-alt.layout-pf-alt-fixed.layout-pf-alt-fixed-inner-scroll body { + height: 100%; + min-height: 0; +} +.layout-pf-alt.layout-pf-alt-fixed.layout-pf-alt-fixed-inner-scroll .container-pf-alt-nav-pf-vertical-alt { + height: 100%; + overflow: auto; +} +.layout-pf-alt.layout-pf-alt-fixed.layout-pf-alt-fixed-inner-scroll .container-pf-alt-nav-pf-vertical-alt.container-cards-pf { + margin-top: 0; + padding-top: 20px; +} +.layout-pf-alt.layout-pf-alt-fixed.transitions .container-pf-alt-nav-pf-vertical-alt { + transition: all 200ms cubic-bezier(0.35, 0, 0.25, 1); +} +.layout-pf-alt.layout-pf-alt-fixed body { + padding-top: 60px; +} +.layout-pf-alt.layout-pf-alt-fixed .container-pf-alt-nav-pf-vertical-alt { + margin-left: 250px; +} +.layout-pf-alt.layout-pf-alt-fixed .container-pf-alt-nav-pf-vertical-alt.collapsed-nav { + margin-left: 75px; +} +.layout-pf-alt.layout-pf-alt-fixed .container-pf-alt-nav-pf-vertical-alt.hidden-nav { + margin-left: 0; +} +.layout-pf-alt.layout-pf-alt-fixed-with-footer body { + padding-bottom: 37px; +} +a.disabled { + color: #8b8d8f; + cursor: not-allowed; + text-decoration: none; +} +.list-pf { + border-bottom: 1px solid #ededed; +} +.list-pf-item { + border-color: #ededed; + border-left-color: #fff; + border-right-color: #fff; + border-style: solid; + border-width: 1px; + border-bottom: none; +} +.list-pf-item:hover { + background-color: #fafafa; +} +.list-pf-item.active { + background-color: #ededed; + border-color: #bbb; + border-bottom-width: 1px; + border-bottom-style: solid; +} +.list-pf-expansion { + background-color: #fff; +} +.list-pf-container { + -ms-flex-align: start; + align-items: flex-start; + display: -ms-flexbox; + display: flex; + padding: 20px; +} +.list-pf-expansion .list-pf-container { + border-top: 1px solid #bbb; +} +@media (min-width: 992px) { + .list-pf:not(.list-pf-stacked) .list-pf-container { + -ms-flex-align: center; + align-items: center; + } +} +.list-pf-chevron, +.list-pf-select { + margin-right: 10px; +} +.list-pf-chevron + .list-pf-content, +.list-pf-select + .list-pf-content { + border-left: 1px solid #d1d1d1; + padding-left: 20px; +} +.list-pf-chevron .fa, +.list-pf-select .fa { + font-size: 22px; +} +.list-pf-content-flex { + -ms-flex-align: start; + align-items: flex-start; + display: -ms-flexbox; + display: flex; + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + min-width: 0; +} +@media (min-width: 992px) { + .list-pf:not(.list-pf-stacked) .list-pf-content-flex { + -ms-flex-align: center; + align-items: center; + } +} +.list-pf-left { + -ms-flex-positive: 0; + flex-grow: 0; + margin-left: 0; + margin-right: 20px; +} +.list-pf-icon { + -ms-flex-align: center; + align-items: center; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; +} +.list-pf-icon-bordered { + border-radius: 50%; + border: 2px solid #39a5dc; +} +.list-pf-icon-small { + font-size: 1.4em; + height: 30px; + line-height: 30px; + width: 30px; +} +.list-pf-content-wrapper { + -ms-flex-align: center; + align-items: center; + display: -ms-flexbox; + display: flex; + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + min-width: 0; +} +@media (min-width: 992px) { + .list-pf-content-wrapper { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .list-pf-content-wrapper > * + * { + margin-left: 40px; + } +} +.list-pf-stacked .list-pf-content-wrapper { + -ms-flex-align: start; + align-items: flex-start; +} +.list-pf-main-content { + -ms-flex-align: center; + align-items: center; + display: -ms-flexbox; + display: flex; + -ms-flex-preferred-size: 70%; + flex-basis: 70%; + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-negative: 1; + flex-shrink: 1; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + min-width: 0; +} +@media (min-width: 992px) { + .list-pf:not(.list-pf-stacked) .list-pf-main-content { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + width: auto; + } + .list-pf:not(.list-pf-stacked) .list-pf-main-content > * + * { + margin-left: 40px; + } +} +.list-pf-title { + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-negative: 1; + flex-shrink: 1; + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + font-weight: bold; + min-width: 0; + word-wrap: break-word; +} +.list-pf-description { + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-negative: 1; + flex-shrink: 1; + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + min-width: 0; + word-wrap: break-word; +} +.list-pf-additional-content { + display: -ms-flexbox; + display: flex; + -ms-flex-preferred-size: 31%; + flex-basis: 31%; + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-negative: 1; + flex-shrink: 1; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: justify; + justify-content: space-between; +} +.list-pf-actions { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-positive: 0; + flex-grow: 0; + margin-left: 40px; +} +.list-pf-actions > * + * { + margin-left: 10px; +} +.list-view-pf .list-group-item { + -ms-flex-align: start; + align-items: flex-start; + background-clip: padding-box; + border-color: transparent #fff; + border-style: solid; + border-width: 1px; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-bottom: 0; + padding-top: 0; +} +.list-view-pf .list-group-item:before, +.list-view-pf .list-group-item:after { + content: " "; + display: table; +} +.list-view-pf .list-group-item:after { + clear: both; +} +.list-view-pf .list-group-item.list-view-pf-expand-active { + background-color: #ededed; + box-shadow: 0 2px 6px rgba(3, 3, 3, 0.2); + z-index: 1; +} +.list-view-pf .list-group-item.active { + color: #555; + background-color: #def3ff; + background-clip: border-box; + border-color: #bbb transparent transparent; + z-index: auto; +} +.list-view-pf .list-group-item:hover { + background-color: #ededed; + border-left-color: transparent; + border-right-color: transparent; +} +.list-view-pf .list-group-item.list-view-pf-expand-active { + border: solid 1px #bbb; +} +.list-view-pf .list-group-item.list-view-pf-expand-active:first-child { + border-top-color: #bbb; +} +.list-view-pf .list-group-item:first-child { + border-top: 1px solid transparent; +} +@media (min-width: 992px) { + .list-view-pf .list-group-item { + -ms-flex-align: center; + align-items: center; + } +} +.list-view-pf .list-group-item-heading { + font-size: 16px; +} +.list-view-pf .list-group-item-heading small { + display: block; + font-size: 9.6px; + font-weight: 400; +} +@media (min-width: 992px) { + .list-view-pf .list-group-item-heading { + -ms-flex: 1 0 calc(25% - 20px); + flex: 1 0 calc(25% - 20px); + float: left; + font-size: 12px; + margin: 0 20px 0 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: calc(25% - 20px); + } +} +.list-view-pf .list-group-item-text { + color: currentColor !important; + margin-bottom: 10px; +} +@media (min-width: 992px) { + .list-view-pf .list-group-item-text { + -ms-flex: 1 0 auto; + flex: 1 0 auto; + float: left; + margin: 0 40px 0 0; + width: calc(75% - 40px); + } +} +.list-view-pf-actions { + float: right; + margin-bottom: 20px; + margin-left: 20px; + margin-top: 20px; + -ms-flex-order: 2; + order: 2; +} +.list-view-pf-actions button, +.list-view-pf-actions > a, +.list-view-pf-actions .dropdown-kebab-pf { + margin-left: 10px; +} +.list-view-pf-top-align .list-view-pf-actions { + -ms-flex-item-align: start; + align-self: flex-start; +} +.list-view-pf-additional-info { + -ms-flex-align: center; + align-items: center; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +@media (min-width: 992px) { + .list-view-pf-additional-info { + -ms-flex: 1 0 auto; + flex: 1 0 auto; + float: left; + width: 50%; + } +} +.list-view-pf-additional-info-item { + -ms-flex-align: center; + align-items: center; + display: inline-block; + display: -ms-flexbox; + display: flex; + margin-right: 20px; + max-width: 100%; + text-align: center; +} +.list-view-pf-additional-info-item.list-view-pf-additional-info-item-stacked { + text-align: center; + -ms-flex-direction: column; + flex-direction: column; +} +.list-view-pf-additional-info-item.list-view-pf-additional-info-item-stacked strong { + font-size: 13px; + line-height: 1em; +} +.list-view-pf-additional-info-item .pficon, +.list-view-pf-additional-info-item .fa { + font-size: 16px; + margin-right: 10px; +} +.list-view-pf-additional-info-item strong { + font-size: 16px; + font-weight: 600; + margin-right: 5px; +} +.list-view-pf-additional-info-item:last-child { + margin-right: 0; +} +.list-view-pf-additional-info-item-donut-chart { + width: 60px; +} +.list-view-pf-body { + -ms-flex-align: center; + align-items: center; + display: table-cell; + -ms-flex: 1; + flex: 1; + min-width: 0; + vertical-align: top; + width: 100%; +} +@media (min-width: 992px) { + .list-view-pf-body { + -ms-flex-align: center; + align-items: center; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: row; + flex-direction: row; + } +} +.list-view-pf-checkbox { + border-right: 1px solid #d1d1d1; + float: left; + margin-bottom: 20px; + margin-right: 15px; + margin-top: 20px; + padding: 3px 10px 3px 0; +} +.list-view-pf-top-align .list-view-pf-checkbox { + -ms-flex-item-align: start; + align-self: flex-start; +} +.list-view-pf-description { + -ms-flex: 1 0 50%; + flex: 1 0 50%; +} +.list-view-pf-stacked .list-view-pf-description { + display: block; + -ms-flex: none; + flex: none; +} +@media (min-width: 992px) { + .list-view-pf-description { + -ms-flex-align: center; + align-items: center; + display: -ms-flexbox; + display: flex; + float: left; + width: 50%; + } +} +.list-view-pf-left { + display: table-cell; + padding-right: 20px; + text-align: center; + vertical-align: top; +} +.list-view-pf-left .list-view-pf-calendar { + font-size: 11px; + line-height: 1em; +} +.list-view-pf-left .list-view-pf-calendar strong { + display: block; + font-size: 44px; + font-weight: 300; + line-height: 1em; +} +.list-view-pf-left .pficon, +.list-view-pf-left .fa { + border-radius: 50%; + font-size: 2em; +} +.list-view-pf-left .pficon.list-view-pf-icon-md, +.list-view-pf-left .fa.list-view-pf-icon-md { + background-color: #f5f5f5; + height: 50px; + line-height: 50px; + width: 50px; +} +.list-view-pf-left .pficon.list-view-pf-icon-danger, +.list-view-pf-left .fa.list-view-pf-icon-danger { + background-color: #ffe6e6; + color: #cc0000; +} +.list-view-pf-left .pficon.list-view-pf-icon-info, +.list-view-pf-left .fa.list-view-pf-icon-info { + color: #8b8d8f; +} +.list-view-pf-left .pficon.list-view-pf-icon-lg, +.list-view-pf-left .fa.list-view-pf-icon-lg { + background-color: #f5f5f5; + height: 60px; + line-height: 60px; + width: 60px; +} +.list-view-pf-left .pficon.list-view-pf-icon-sm, +.list-view-pf-left .fa.list-view-pf-icon-sm { + border: 2px solid #39a5dc; + font-size: 1.4em; + height: 30px; + line-height: 30px; + width: 30px; +} +.list-view-pf-left .pficon.list-view-pf-icon-sm:before, +.list-view-pf-left .fa.list-view-pf-icon-sm:before { + display: block; + line-height: 26px; +} +.list-view-pf-left .pficon.list-view-pf-icon-success, +.list-view-pf-left .fa.list-view-pf-icon-success { + background-color: #e9f4e9; + color: #3f9c35; +} +.list-view-pf-left .pficon.list-view-pf-icon-warning, +.list-view-pf-left .fa.list-view-pf-icon-warning { + background-color: #fdf2e5; + color: #ec7a08; +} +.list-view-pf-main-info { + -ms-flex-align: start; + align-items: flex-start; + display: -ms-flexbox; + display: flex; + -ms-flex: 1; + flex: 1; + min-width: 0; + padding-bottom: 20px; + padding-top: 20px; +} +@media (min-width: 992px) { + .list-view-pf-main-info { + -ms-flex-align: center; + align-items: center; + } + .list-view-pf-top-align .list-view-pf-main-info { + -ms-flex-align: start; + align-items: flex-start; + } +} +.list-view-pf-stacked .list-group-item-heading { + float: none; + font-size: 16px; + line-height: 1.2em; + margin-bottom: 5px; + margin-right: 40px; + width: auto; +} +.list-view-pf-stacked .list-group-item-text { + float: none; + width: auto; +} +.list-view-pf-view { + background: #ededed; + border: none; + margin-top: 30px; +} +.list-group-item-header { + box-sizing: content-box; + cursor: pointer; + margin: 0 -15px; + padding: 0 15px; + width: 100%; +} +.list-view-pf-expand { + cursor: pointer; + float: left; + margin-bottom: 20px; + margin-right: 2px; + margin-top: 20px; + padding: 3px 0; +} +.list-view-pf-expand.active, +.list-view-pf-expand:hover { + color: #0088ce; +} +.list-view-pf-additional-info-item .list-view-pf-expand { + margin: 0; + padding: 0; +} +.list-view-pf-expand .fa-angle-right { + cursor: pointer; + font-size: 17px; + margin-right: 5px; + margin-top: 2px; + width: 10px; +} +.list-group-item-container { + background: #fff; + border-top: solid 1px #bbb; + box-sizing: content-box; + margin: -1px -15px 0; + -ms-flex-order: 3; + order: 3; + padding: 10px 15px; + position: relative; + width: 100%; +} +.list-view-pf-dnd .dndDragging.drag-original { + display: none; +} +.list-view-pf-dnd .dndDragging.drag-original .list-view-pf-dnd-original-items { + display: block; +} +.list-view-pf-dnd .dndDragging .list-view-pf-dnd-drag-items { + display: inline-block; +} +.list-view-pf-dnd .dndDragging .list-view-pf-dnd-original-items { + display: none; +} +.list-view-pf-dnd .dndPlaceholder { + background-color: #ededed; + padding: 20px 0; +} +.list-view-pf-dnd .list-group-item-header { + margin-left: -10px; +} +.list-view-pf-dnd .list-group-item-header:before { + background-image: linear-gradient(to bottom, #0088ce 60%, #fff 0%); + background-position: left; + background-repeat: repeat-y; + background-size: 2px 5px; + border: 4px solid #0088ce; + border-color: #00659c; + content: ""; + height: 55px; + left: 4px; + position: absolute; + top: 5px; + width: 10px; +} +.list-view-pf-dnd-drag-items { + display: none; +} +.login-pf { + height: 100%; +} +.login-pf #brand { + position: relative; + top: -70px; +} +.login-pf #brand img { + display: block; + height: 18px; + margin: 0 auto; + max-width: 100%; +} +@media (min-width: 768px) { + .login-pf #brand img { + margin: 0; + text-align: left; + } +} +.login-pf #badge { + display: block; + margin: 20px auto 70px; + position: relative; + text-align: center; +} +@media (min-width: 768px) { + .login-pf #badge { + float: right; + margin-right: 64px; + margin-top: 50px; + } +} +.login-pf body { + background: #030303 url(assets/fonts/bg-login.jpg) repeat-x 50% 0; + background-size: auto; +} +@media (min-width: 768px) { + .login-pf body { + background-size: 100% auto; + } +} +.login-pf .container { + background-color: rgba(255, 255, 255, 0.055); + clear: right; + color: #fff; + padding-bottom: 40px; + padding-top: 20px; + width: auto; +} +@media (min-width: 768px) { + .login-pf .container { + bottom: 13%; + padding-left: 80px; + position: absolute; + width: 100%; + } +} +.login-pf .container [class^="alert"] { + background: transparent; + color: #fff; +} +.login-pf .container .details p:first-child { + border-top: 1px solid rgba(255, 255, 255, 0.3); + padding-top: 25px; + margin-top: 25px; +} +@media (min-width: 768px) { + .login-pf .container .details { + border-left: 1px solid rgba(255, 255, 255, 0.3); + padding-left: 40px; + } + .login-pf .container .details p:first-child { + border-top: 0; + padding-top: 0; + margin-top: 0; + } +} +.login-pf .container .details p { + margin-bottom: 2px; +} +.login-pf .container .form-horizontal .control-label { + font-size: 13px; + font-weight: 400; + text-align: left; +} +.login-pf .container .form-horizontal .form-group:last-child, +.login-pf .container .form-horizontal .form-group:last-child .help-block:last-child { + margin-bottom: 0; +} +.login-pf .container .help-block { + color: #fff; +} +@media (min-width: 768px) { + .login-pf .container .login { + padding-right: 40px; + } +} +.login-pf .container .submit { + text-align: right; +} +.navbar-pf { + background: #030303; + border: 0; + border-radius: 0; + border-top: 3px solid #39a5dc; + margin-bottom: 0; + min-height: 0; +} +.navbar-pf .navbar-brand { + color: #f5f5f5; + height: auto; + padding: 12px 0; + margin: 0 0 0 20px; +} +.navbar-pf .navbar-brand img { + display: block; +} +.navbar-pf .navbar-collapse { + border-top: 0; + box-shadow: none; + padding: 0; +} +.navbar-pf .navbar-header { + border-bottom: 1px solid #292929; + float: none; +} +.navbar-pf .navbar-nav { + margin: 0; +} +.navbar-pf .navbar-nav > .active > a, +.navbar-pf .navbar-nav > .active > a:hover, +.navbar-pf .navbar-nav > .active > a:focus { + background-color: #232323; + color: #f5f5f5; +} +.navbar-pf .navbar-nav > li > a { + color: #d1d1d1; + line-height: 1; + padding: 10px 20px; + text-shadow: none; +} +.navbar-pf .navbar-nav > li > a:hover, +.navbar-pf .navbar-nav > li > a:focus { + color: #f5f5f5; +} +.navbar-pf .navbar-nav > .open > a, +.navbar-pf .navbar-nav > .open > a:hover, +.navbar-pf .navbar-nav > .open > a:focus { + background-color: #232323; + color: #f5f5f5; +} +.navbar-pf .navbar-nav .badge { + background-color: #0088ce; + border-radius: 20px; + border: 1px solid #030303; + color: #fff; + cursor: pointer; + font-size: 9px; + font-weight: 700; + padding: 2px 4px; + margin-top: -12px; + margin-left: -9px; + min-height: 10px; +} +@media (max-width: 767px) { + .navbar-pf .navbar-nav .active .dropdown-menu, + .navbar-pf .navbar-nav .active .navbar-persistent, + .navbar-pf .navbar-nav .open .dropdown-menu { + background-color: #171717 !important; + margin-left: 0; + padding-bottom: 0; + padding-top: 0; + } + .navbar-pf .navbar-nav .active .dropdown-menu > .active > a, + .navbar-pf .navbar-nav .active .navbar-persistent > .active > a, + .navbar-pf .navbar-nav .open .dropdown-menu > .active > a, + .navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu.open > a, + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu.open > a, + .navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu.open > a, + .navbar-pf .navbar-nav .active .dropdown-menu > .active > a:hover, + .navbar-pf .navbar-nav .active .navbar-persistent > .active > a:hover, + .navbar-pf .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu.open > a:hover, + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu.open > a:hover, + .navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu.open > a:hover, + .navbar-pf .navbar-nav .active .dropdown-menu > .active > a:focus, + .navbar-pf .navbar-nav .active .navbar-persistent > .active > a:focus, + .navbar-pf .navbar-nav .open .dropdown-menu > .active > a:focus, + .navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu.open > a:focus, + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu.open > a:focus, + .navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu.open > a:focus { + background-color: #1f1f1f !important; + color: #f5f5f5; + } + .navbar-pf .navbar-nav .active .dropdown-menu > li > a, + .navbar-pf .navbar-nav .active .navbar-persistent > li > a, + .navbar-pf .navbar-nav .open .dropdown-menu > li > a { + background-color: transparent; + border: 0; + color: #d1d1d1; + outline: none; + padding-left: 30px; + } + .navbar-pf .navbar-nav .active .dropdown-menu > li > a:hover, + .navbar-pf .navbar-nav .active .navbar-persistent > li > a:hover, + .navbar-pf .navbar-nav .open .dropdown-menu > li > a:hover { + color: #f5f5f5; + } + .navbar-pf .navbar-nav .active .dropdown-menu .divider, + .navbar-pf .navbar-nav .active .navbar-persistent .divider, + .navbar-pf .navbar-nav .open .dropdown-menu .divider { + background-color: #292929; + margin: 0 1px; + } + .navbar-pf .navbar-nav .active .dropdown-menu .dropdown-header, + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-header, + .navbar-pf .navbar-nav .open .dropdown-menu .dropdown-header { + padding-bottom: 0; + padding-left: 30px; + } + .navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu.open .dropdown-toggle, + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu.open .dropdown-toggle, + .navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu.open .dropdown-toggle { + color: #f5f5f5; + } + .navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu.pull-left, + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu.pull-left, + .navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu.pull-left { + float: none !important; + } + .navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu > a:after, + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu > a:after, + .navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu > a:after { + display: none; + } + .navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu .dropdown-header, + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu .dropdown-header, + .navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu .dropdown-header { + padding-left: 45px; + } + .navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu .dropdown-menu, + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu .dropdown-menu, + .navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu .dropdown-menu { + border: 0; + bottom: auto; + box-shadow: none; + display: block; + float: none; + margin: 0; + min-width: 0; + padding: 0; + position: relative; + left: auto; + right: auto; + top: auto; + } + .navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu .dropdown-menu > li > a, + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu .dropdown-menu > li > a, + .navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu .dropdown-menu > li > a { + padding: 5px 15px 5px 45px; + line-height: 20px; + } + .navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu .dropdown-menu .dropdown-menu > li > a, + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu .dropdown-menu .dropdown-menu > li > a, + .navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu .dropdown-menu .dropdown-menu > li > a { + padding-left: 60px; + } + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu.open .dropdown-menu { + display: block; + } + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu > a:after { + display: inline-block !important; + position: relative; + right: auto; + top: 1px; + } + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu .dropdown-menu { + display: none; + } + .navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu .dropdown-submenu > a:after { + display: none !important; + } + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu { + background-color: #fff !important; + } + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu > .active > a, + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu > .active > a:active { + background-color: #def3ff !important; + border-color: #bee1f4 !important; + color: #363636 !important; + } + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu > .active > a small, + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu > .active > a:active small { + color: #9c9c9c !important; + } + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu > .disabled > a { + color: #9c9c9c !important; + } + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu > .selected > a, + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu > .selected > a:active { + background-color: #0088ce !important; + border-color: #0088ce !important; + color: #fff !important; + } + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu > .selected > a small, + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu > .selected > a:active small { + color: rgba(255, 255, 255, 0.5) !important; + } + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu li > a.opt { + border-bottom: 1px solid transparent; + border-top: 1px solid transparent; + color: #363636; + padding-left: 10px; + padding-right: 10px; + } + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu li a:active small { + color: rgba(255, 255, 255, 0.5) !important; + } + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu li a:hover small, + .navbar-pf .navbar-nav .context-bootstrap-select .open > .dropdown-menu li a:focus small { + color: #9c9c9c; + } + .navbar-pf .navbar-nav .context-bootstrap-select > .open > .dropdown-menu { + padding-bottom: 5px; + padding-top: 5px; + } +} +.navbar-pf .navbar-persistent { + display: none; +} +.navbar-pf .active > .navbar-persistent { + display: block; +} +.navbar-pf .navbar-primary { + float: none; +} +.navbar-pf .navbar-primary .context { + border-bottom: 1px solid #292929; +} +.navbar-pf .navbar-primary .context.context-bootstrap-select .bootstrap-select.btn-group, +.navbar-pf .navbar-primary .context.context-bootstrap-select .bootstrap-select.btn-group[class*="span"] { + margin: 8px 20px 9px; + width: auto; +} +.navbar-pf .navbar-primary > li > .navbar-persistent > .dropdown-submenu > a { + position: relative; +} +.navbar-pf .navbar-primary > li > .navbar-persistent > .dropdown-submenu > a:after { + content: "\F107"; + display: inline-block; + font-family: "FontAwesome"; + font-weight: normal; +} +@media (max-width: 767px) { + .navbar-pf .navbar-primary > li > .navbar-persistent > .dropdown-submenu > a:after { + height: 10px; + margin-left: 4px; + vertical-align: baseline; + } +} +.navbar-pf .navbar-toggle { + border: 0; + margin: 0; + padding: 10px 20px; +} +.navbar-pf .navbar-toggle:hover, +.navbar-pf .navbar-toggle:focus { + background-color: transparent; + outline: none; +} +.navbar-pf .navbar-toggle:hover .icon-bar, +.navbar-pf .navbar-toggle:focus .icon-bar { + box-shadow: 0 0 3px #fff; +} +.navbar-pf .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-pf .navbar-utility { + border-bottom: 1px solid #292929; +} +.navbar-pf .navbar-utility li.dropdown > .dropdown-toggle { + padding-left: 36px; + position: relative; +} +.navbar-pf .navbar-utility li.dropdown > .dropdown-toggle .pficon-user { + left: 20px; + position: absolute; + top: 10px; +} +@media (max-width: 767px) { + .navbar-pf .navbar-utility > li + li { + border-top: 1px solid #292929; + } +} +@media (min-width: 768px) { + .navbar-pf .navbar-brand { + padding: 8px 0 7px; + } + .navbar-pf .navbar-nav > li > a { + padding-bottom: 14px; + padding-top: 14px; + } + .navbar-pf .navbar-persistent { + font-size: 14px; + } + .navbar-pf .navbar-primary { + font-size: 14px; + background-image: linear-gradient(to bottom, #1d1d1d 0%, #030303 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1d1d1d', endColorstr='#ff030303', GradientType=0); + } + .navbar-pf .navbar-primary.persistent-secondary .context .dropdown-menu { + top: auto; + } + .navbar-pf .navbar-primary.persistent-secondary .dropup .dropdown-menu { + bottom: -5px; + top: auto; + } + .navbar-pf .navbar-primary.persistent-secondary > li { + position: static; + } + .navbar-pf .navbar-primary.persistent-secondary > li.active { + margin-bottom: 32px; + } + .navbar-pf .navbar-primary.persistent-secondary > li.active > .navbar-persistent { + display: block; + left: 0; + position: absolute; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent { + background: #f5f5f5; + border-bottom: 1px solid #d1d1d1; + padding: 0; + width: 100%; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent a { + text-decoration: none !important; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.active:before, + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.active:hover:before { + background: #0088ce; + bottom: -1px; + content: ""; + display: block; + height: 2px; + left: 20px; + position: absolute; + right: 20px; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.active > a, + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.active > a:hover, + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.active:hover > a { + color: #0088ce !important; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.active .active > a { + color: #f5f5f5; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.dropdown-submenu:hover > .dropdown-menu { + display: none; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.dropdown-submenu.open > .dropdown-menu { + display: block; + left: 20px; + margin-top: 1px; + top: 100%; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.dropdown-submenu.open > .dropdown-toggle { + color: #252525; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.dropdown-submenu.open > .dropdown-toggle:after { + border-top-color: #252525; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.dropdown-submenu > .dropdown-toggle { + padding-right: 35px !important; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.dropdown-submenu > .dropdown-toggle:after { + position: absolute; + right: 20px; + top: 10px; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li:hover:before, + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.open:before { + background: #bbb; + bottom: -1px; + content: ""; + display: block; + height: 2px; + left: 20px; + position: absolute; + right: 20px; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li:hover > a, + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.open > a { + color: #252525; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li:hover > a:after, + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li.open > a:after { + border-top-color: #252525; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li > a { + background-color: transparent; + display: block; + line-height: 1; + padding: 9px 20px; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li > a.dropdown-toggle { + padding-right: 35px; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li > a.dropdown-toggle:after { + font-size: 15px; + position: absolute; + right: 20px; + top: 9px; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li > a:hover { + color: #252525; + } + .navbar-pf .navbar-primary.persistent-secondary > li > .navbar-persistent > li a { + color: #4d5258; + } + .navbar-pf .navbar-primary > li > a { + border-bottom: 1px solid transparent; + border-top: 1px solid transparent; + position: relative; + margin: -1px 0 0; + } + .navbar-pf .navbar-primary > li > a:hover { + background-color: #1d1d1d; + border-top-color: #5c5c5c; + color: #d1d1d1; + background-image: linear-gradient(to bottom, #363636 0%, #1d1d1d 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff363636', endColorstr='#ff1d1d1d', GradientType=0); + } + .navbar-pf .navbar-primary > .active > a, + .navbar-pf .navbar-primary > .active > a:hover, + .navbar-pf .navbar-primary > .active > a:focus, + .navbar-pf .navbar-primary > .open > a, + .navbar-pf .navbar-primary > .open > a:hover, + .navbar-pf .navbar-primary > .open > a:focus { + background-color: #303030; + border-bottom-color: #303030; + border-top-color: #696969; + box-shadow: none; + color: #f5f5f5; + background-image: linear-gradient(to bottom, #434343 0%, #303030 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff434343', endColorstr='#ff303030', GradientType=0); + } + .navbar-pf .navbar-primary li.context.context-bootstrap-select .filter-option { + max-width: 160px; + text-overflow: ellipsis; + } + .navbar-pf .navbar-primary li.context.dropdown { + border-bottom: 0; + } + .navbar-pf .navbar-primary li.context > a, + .navbar-pf .navbar-primary li.context.context-bootstrap-select { + background-color: #1f1f1f; + border-bottom-color: #3e3e3e; + border-right: 1px solid #3e3e3e; + border-top-color: #3b3b3b; + font-weight: 600; + background-image: linear-gradient(to bottom, #323232 0%, #1f1f1f 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff323232', endColorstr='#ff1f1f1f', GradientType=0); + } + .navbar-pf .navbar-primary li.context > a:hover, + .navbar-pf .navbar-primary li.context.context-bootstrap-select:hover { + background-color: #323232; + border-bottom-color: #4a4a4a; + border-right-color: #4a4a4a; + border-top-color: #4a4a4a; + background-image: linear-gradient(to bottom, #3f3f3f 0%, #323232 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3f3f3f', endColorstr='#ff323232', GradientType=0); + } + .navbar-pf .navbar-primary li.context.open > a { + background-color: #454545; + border-bottom-color: #575757; + border-right-color: #575757; + border-top-color: #5a5a5a; + background-image: linear-gradient(to bottom, #4c4c4c 0%, #454545 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4c4c4c', endColorstr='#ff454545', GradientType=0); + } + .navbar-pf .navbar-utility { + border-bottom: 0; + font-size: 11px; + position: absolute; + right: 0; + top: 0; + } + .navbar-pf .navbar-utility > .active > a, + .navbar-pf .navbar-utility > .active > a:hover, + .navbar-pf .navbar-utility > .active > a:focus, + .navbar-pf .navbar-utility > .open > a, + .navbar-pf .navbar-utility > .open > a:hover, + .navbar-pf .navbar-utility > .open > a:focus { + background: #363636; + color: #d1d1d1; + } + .navbar-pf .navbar-utility > li > a { + border-left: 1px solid #2b2b2b; + color: #d1d1d1 !important; + padding: 7px 10px; + } + .navbar-pf .navbar-utility > li > a:hover { + background: #232323; + border-left-color: #373737; + } + .navbar-pf .navbar-utility > li.open > a { + border-left-color: #444444; + color: #f5f5f5 !important; + } + .navbar-pf .navbar-utility li.dropdown > .dropdown-toggle { + padding-left: 26px; + } + .navbar-pf .navbar-utility li.dropdown > .dropdown-toggle .pficon-user { + left: 10px; + top: 7px; + } + .navbar-pf .navbar-utility .open .dropdown-menu { + left: auto; + right: 0; + } + .navbar-pf .navbar-utility .open .dropdown-menu .dropdown-menu { + left: auto; + right: 100%; + } + .navbar-pf .navbar-utility .open .dropdown-menu { + border-top-width: 0; + } + .navbar-pf .open.bootstrap-select .dropdown-menu, + .navbar-pf .open .dropdown-submenu > .dropdown-menu { + border-top-width: 1px !important; + } +} +@media (max-width: 360px) { + .navbar-pf .navbar-brand { + margin-left: 10px; + width: 75%; + } + .navbar-pf .navbar-brand img { + height: auto; + max-width: 100%; + } + .navbar-pf .navbar-toggle { + padding-left: 0; + } +} +.navbar-pf-alt { + background-color: #030303; + background-image: "bg-navbar-pf-alt.svg"; + background-repeat: no-repeat; + background-size: auto 100%; + border: none; + border-radius: 0; + border-top: 2px solid #39a5dc; + margin-bottom: 0; +} +.navbar-pf-alt .infotip.bottom-right .arrow { + left: 90%; +} +.layout-pf-alt-fixed .navbar-pf-alt { + left: 0; + position: fixed; + right: 0; + top: 0; + z-index: 1030; +} +.navbar-pf-alt .nav.navbar-nav > li > .dropdown-menu.infotip { + margin-top: 0; +} +.navbar-pf-alt .nav .nav-item-iconic { + cursor: pointer; + line-height: 1; + max-height: 58px; + padding: 21px 12px; + position: relative; +} +.navbar-pf-alt .nav .nav-item-iconic:hover, +.navbar-pf-alt .nav .nav-item-iconic:focus { + background-color: transparent; +} +.navbar-pf-alt .nav .nav-item-iconic:hover .caret, +.navbar-pf-alt .nav .nav-item-iconic:focus .caret, +.navbar-pf-alt .nav .nav-item-iconic:hover .fa, +.navbar-pf-alt .nav .nav-item-iconic:focus .fa, +.navbar-pf-alt .nav .nav-item-iconic:hover .glyphicon, +.navbar-pf-alt .nav .nav-item-iconic:focus .glyphicon, +.navbar-pf-alt .nav .nav-item-iconic:hover .pficon, +.navbar-pf-alt .nav .nav-item-iconic:focus .pficon { + color: #fff; +} +.navbar-pf-alt .nav .nav-item-iconic .badge { + background-color: #0088ce; + border-radius: 20px; + color: #fff; + cursor: pointer; + font-size: 9px; + font-weight: 700; + margin: 0 0 -11px -12px; + min-width: 0; + padding: 2px 4px; +} +.navbar-pf-alt .nav .nav-item-iconic .caret, +.navbar-pf-alt .nav .nav-item-iconic .fa, +.navbar-pf-alt .nav .nav-item-iconic .pficon { + color: #d1d1d1; + font-size: 16px; +} +.navbar-pf-alt .nav .nav-item-iconic .caret { + font-size: 12px; + width: auto; +} +.navbar-pf-alt .nav .open > .nav-item-iconic, +.navbar-pf-alt .nav .open > .nav-item-iconic:hover, +.navbar-pf-alt .nav .open > .nav-item-iconic:focus { + background: transparent; +} +.navbar-pf-alt .nav .open > .nav-item-iconic .caret, +.navbar-pf-alt .nav .open > .nav-item-iconic:hover .caret, +.navbar-pf-alt .nav .open > .nav-item-iconic:focus .caret, +.navbar-pf-alt .nav .open > .nav-item-iconic .fa, +.navbar-pf-alt .nav .open > .nav-item-iconic:hover .fa, +.navbar-pf-alt .nav .open > .nav-item-iconic:focus .fa, +.navbar-pf-alt .nav .open > .nav-item-iconic .pficon, +.navbar-pf-alt .nav .open > .nav-item-iconic:hover .pficon, +.navbar-pf-alt .nav .open > .nav-item-iconic:focus .pficon { + color: #fff; +} +.navbar-pf-alt .navbar-brand { + color: #fff; + height: auto; + margin: 0 0 0 25px; + min-height: 35px; + padding: 11px 0 12px; +} +.navbar-pf-alt .navbar-brand .navbar-brand-name { + display: inline; + margin-left: 0 15px 0 0; + margin-right: 0 15px 0 0; +} +@media (max-width: 480px) { + .navbar-pf-alt .navbar-brand .navbar-brand-name { + display: none; + } +} +.navbar-pf-alt .navbar-brand .navbar-brand-icon { + display: inline; + margin-left: 0 15px 0 0; + margin-right: 0 15px 0 0; +} +.navbar-pf-alt .navbar-iconic { + margin-right: 0; +} +.navbar-pf-alt .navbar-toggle { + border: 0; + display: block; + float: left; + margin: 13px 15px; +} +.navbar-pf-alt .navbar-toggle:hover .icon-bar, +.navbar-pf-alt .navbar-toggle:focus .icon-bar { + background: #fff; +} +.navbar-pf-alt .navbar-toggle + .navbar-brand { + margin-left: 0; +} +.navbar-pf-alt .navbar-toggle .icon-bar { + background: #d1d1d1; +} +.navbar-pf-vertical { + background-color: #1d1d1d; + border: none; + border-radius: 0; + border-top: 2px solid #39a5dc; + margin-bottom: 0; +} +.navbar-pf-vertical .infotip.bottom-right .arrow { + left: 90%; +} +.layout-pf-fixed .navbar-pf-vertical { + left: 0; + position: fixed; + right: 0; + top: 0; + z-index: 1030; +} +.navbar-pf-vertical .nav.navbar-nav > li > .dropdown-menu.infotip { + margin-top: 0; +} +.navbar-pf-vertical .nav .nav-item-iconic { + color: #d1d1d1; + cursor: pointer; + line-height: 1; + max-height: 58px; + padding: 21px 12px; + position: relative; +} +.navbar-pf-vertical .nav .nav-item-iconic:hover, +.navbar-pf-vertical .nav .nav-item-iconic:focus { + color: #fff; + background-color: transparent; +} +.navbar-pf-vertical .nav .nav-item-iconic:hover .caret, +.navbar-pf-vertical .nav .nav-item-iconic:focus .caret, +.navbar-pf-vertical .nav .nav-item-iconic:hover .fa, +.navbar-pf-vertical .nav .nav-item-iconic:focus .fa, +.navbar-pf-vertical .nav .nav-item-iconic:hover .glyphicon, +.navbar-pf-vertical .nav .nav-item-iconic:focus .glyphicon, +.navbar-pf-vertical .nav .nav-item-iconic:hover .pficon, +.navbar-pf-vertical .nav .nav-item-iconic:focus .pficon { + color: #fff; +} +.navbar-pf-vertical .nav .nav-item-iconic .badge { + background-color: #0088ce; + border-radius: 20px; + color: #fff; + cursor: pointer; + font-size: 9px; + font-weight: 700; + margin-top: -15px; + margin-left: -12px; + padding: 2px 4px; + min-width: 10px; + min-height: 10px; +} +.navbar-pf-vertical .nav .nav-item-iconic .caret, +.navbar-pf-vertical .nav .nav-item-iconic .fa, +.navbar-pf-vertical .nav .nav-item-iconic .pficon { + color: #d1d1d1; + font-size: 16px; +} +.navbar-pf-vertical .nav .nav-item-iconic .caret { + font-size: 12px; + width: auto; +} +.navbar-pf-vertical .nav .open > .nav-item-iconic, +.navbar-pf-vertical .nav .open > .nav-item-iconic:hover, +.navbar-pf-vertical .nav .open > .nav-item-iconic:focus { + background: transparent; +} +.navbar-pf-vertical .nav .open > .nav-item-iconic .caret, +.navbar-pf-vertical .nav .open > .nav-item-iconic:hover .caret, +.navbar-pf-vertical .nav .open > .nav-item-iconic:focus .caret, +.navbar-pf-vertical .nav .open > .nav-item-iconic .fa, +.navbar-pf-vertical .nav .open > .nav-item-iconic:hover .fa, +.navbar-pf-vertical .nav .open > .nav-item-iconic:focus .fa, +.navbar-pf-vertical .nav .open > .nav-item-iconic .pficon, +.navbar-pf-vertical .nav .open > .nav-item-iconic:hover .pficon, +.navbar-pf-vertical .nav .open > .nav-item-iconic:focus .pficon { + color: #fff; +} +.navbar-pf-vertical .navbar-brand { + color: #fff; + height: auto; + margin: 0 0 0 25px; + min-height: 35px; + padding: 11px 0 12px; +} +.navbar-pf-vertical .navbar-brand .navbar-brand-name { + display: inline-block; + margin: 0 15px 0 0; +} +@media (max-width: 480px) { + .navbar-pf-vertical .navbar-brand .navbar-brand-name { + display: none; + } +} +.navbar-pf-vertical .navbar-brand .navbar-brand-icon { + display: inline-block; + margin: 0 15px 0 0; +} +.navbar-pf-vertical .navbar-iconic { + margin-right: 0; +} +.navbar-pf-vertical .navbar-toggle { + border: 0; + display: block; + float: left; + margin: 13px 15px; +} +.navbar-pf-vertical .navbar-toggle:hover .icon-bar, +.navbar-pf-vertical .navbar-toggle:focus .icon-bar { + background: #fff; +} +.navbar-pf-vertical .navbar-toggle + .navbar-brand { + margin-left: 0; +} +.navbar-pf-vertical .navbar-toggle .icon-bar { + background: #d1d1d1; +} +.layout-pf-alt-fixed.transitions .nav-pf-vertical-alt { + transition: all 200ms cubic-bezier(0.35, 0, 0.25, 1); +} +.layout-pf-alt-fixed.transitions .nav-pf-vertical-alt.collapsed .list-group-item .list-group-item-value { + transition: opacity 0ms 100ms, opacity 100ms linear; +} +.layout-pf-alt-fixed.transitions .nav-pf-vertical-alt .list-group-item .badge { + transition: all 200ms cubic-bezier(0.35, 0, 0.25, 1); +} +.layout-pf-alt-fixed.transitions .nav-pf-vertical-alt .list-group-item .list-group-item-value { + transition: opacity 500ms ease-out; + transition-delay: 150ms; +} +.nav-pf-vertical-alt { + background: #fff; +} +.ie9.layout-pf-alt-fixed .nav-pf-vertical-alt { + box-sizing: content-box; +} +.layout-pf-alt-fixed .nav-pf-vertical-alt { + border-right: 1px solid #d1d1d1; + bottom: 0; + overflow-x: hidden; + overflow-y: auto; + left: 0; + position: fixed; + top: 60px; + width: 250px; + z-index: 1030; +} +.layout-pf-alt-fixed .nav-pf-vertical-alt.collapsed { + width: 75px !important; +} +.layout-pf-alt-fixed .nav-pf-vertical-alt.collapsed .list-group-item .badge { + padding: 2px 3px; + right: 21px; + top: 36px; +} +.layout-pf-alt-fixed .nav-pf-vertical-alt.collapsed .list-group-item .list-group-item-value { + opacity: 0; +} +.layout-pf-alt-fixed .nav-pf-vertical-alt.hidden { + display: none; +} +.layout-pf-alt-fixed .nav-pf-vertical-alt.hidden.show-mobile-nav { + box-shadow: 0 0 3px rgba(3, 3, 3, 0.15); + display: block !important; +} +.layout-pf-alt-fixed-with-footer .nav-pf-vertical-alt { + bottom: 37px; +} +.nav-pf-vertical-alt .list-group { + border-top: 0; + margin-bottom: 0; +} +.nav-pf-vertical-alt .list-group-item { + padding: 0; +} +.nav-pf-vertical-alt .list-group-item a { + color: #363636; + display: block; + font-size: 14px; + height: 63px; + padding: 17px 20px 17px 25px; + position: relative; + white-space: nowrap; +} +.nav-pf-vertical-alt .list-group-item a:focus { + color: #363636; + text-decoration: none; +} +.nav-pf-vertical-alt .list-group-item a:hover { + color: #39a5dc; + text-decoration: none; +} +.nav-pf-vertical-alt .list-group-item.active { + background-color: #fff; + border-color: #f5f5f5; +} +.nav-pf-vertical-alt .list-group-item.active:before { + background: #39a5dc; + content: " "; + display: block; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 5px; +} +.nav-pf-vertical-alt .list-group-item.active a { + color: #39a5dc; +} +.nav-pf-vertical-alt .list-group-item .badge { + background: #363636; + border: 1px solid #fff; + border-radius: 3px; + color: #fff; + font-weight: 700; + font-size: 9px; + padding: 5px; + position: absolute; + right: 15px; + text-align: center; + top: 21px; +} +.nav-pf-vertical-alt .list-group-item .badge.notifications { + background: #0088ce; +} +.nav-pf-vertical-alt .list-group-item .fa, +.nav-pf-vertical-alt .list-group-item .glyphicon, +.nav-pf-vertical-alt .list-group-item .pficon { + float: left; + font-size: 18px; + line-height: 30px; + margin-right: 10px; + text-align: center; + width: 18px; +} +.nav-pf-vertical-alt .list-group-item .list-group-item-value { + display: inline-block; + line-height: 30px; + opacity: 1; + overflow: hidden; + text-overflow: ellipsis; + width: 140px; +} +.nav-pf-vertical-alt .list-group-item-separator { + border-top-width: 5px; +} +.sidebar-pf .nav-pf-vertical-alt { + margin-left: -20px; + margin-right: -20px; +} +.drawer-pf { + background-color: #fafafa; + border: 1px solid #d1d1d1; + box-shadow: 0 6px 12px rgba(3, 3, 3, 0.175); + overflow-y: auto; + position: absolute; + right: 0; + width: 320px; + z-index: 2; +} +.drawer-pf .panel { + border-bottom: none; + border-left: none; + border-right: none; +} +.drawer-pf .panel-group .panel-heading + .panel-collapse .panel-body { + border-top: none; + border-bottom: 1px solid #d1d1d1; + padding: 0; +} +.drawer-pf .panel-counter { + display: block; + font-style: italic; + line-height: 1.2; + padding-left: 18px; + padding-top: 5px; +} +.drawer-pf .panel-heading { + border-bottom: 1px solid #d1d1d1; +} +.drawer-pf .panel-group { + bottom: 0; + margin-bottom: 0; + position: absolute; + top: 25px; + width: 100%; +} +.drawer-pf .panel-title a { + cursor: pointer; + display: block; +} +.drawer-pf.drawer-pf-expanded { + left: 270px; + width: inherit; +} +.drawer-pf.drawer-pf-expanded .drawer-pf-toggle-expand:before { + content: "\F101"; +} +.drawer-pf .blank-slate-pf { + border: 0; + margin-bottom: 0; + padding: 30px; +} +.drawer-pf .blank-slate-pf .blank-slate-pf-icon { + font-size: 3em; + line-height: 1em; +} +.drawer-pf .blank-slate-pf h1 { + font-size: 1em; + margin-bottom: 0; + margin-top: 15px; +} +.drawer-pf-close, +.drawer-pf-toggle-expand { + color: inherit; + cursor: pointer; + line-height: inherit; + padding: 2px 5px; + position: absolute; +} +.drawer-pf-close:hover, +.drawer-pf-toggle-expand:hover, +.drawer-pf-close:focus, +.drawer-pf-toggle-expand:focus { + color: inherit; + text-decoration: none; +} +.drawer-pf-toggle-expand { + left: 0; +} +.drawer-pf-toggle-expand:before { + content: "\F100"; + font-family: "FontAwesome"; +} +.drawer-pf-toggle-expand:hover { + color: #0088ce; +} +.drawer-pf-close { + right: 0; +} +.drawer-pf-action { + display: -ms-flexbox; + display: flex; +} +.drawer-pf-action .btn-link { + color: #0088ce; + padding: 10px 0; +} +.drawer-pf-action .btn-link .pficon, +.drawer-pf-action .btn-link .fa { + margin-right: 3px; +} +.drawer-pf-action .btn-link:hover { + color: #00659c; +} +.drawer-pf-action-link { + border-left: solid 1px #d1d1d1; + -ms-flex: 1 1 0%; + flex: 1 1 0%; + margin: 10px 0; + text-align: center; +} +.drawer-pf-action-link:first-of-type { + border-left-width: 0; +} +.drawer-pf-action-link .btn-link { + padding: 0; +} +.drawer-pf-loading { + color: #4d5258; + font-size: 14px; + padding: 20px 15px; +} +.drawer-pf-notification { + border-bottom: 1px solid #d1d1d1; + padding: 15px; +} +.drawer-pf-notification .date { + border-right: 1px solid #aaa; + display: inline-block; + line-height: 1; + margin-right: 5px; + padding-right: 9px; +} +.drawer-pf-notification > .dropdown-kebab-pf { + margin-top: -3px; +} +.drawer-pf-notification .pficon { + font-size: 14px; + margin-top: 3px; +} +.drawer-pf-notification:last-of-type { + border-bottom: none; +} +.drawer-pf-notification:hover { + background-color: #def3ff; +} +.drawer-pf-notification.unread .drawer-pf-notification-message { + font-weight: bold; +} +.drawer-pf-notification.expanded-notification .date { + border-right: none; + padding-right: 0; +} +.drawer-pf-notification-content { + cursor: default; +} +.drawer-pf-notification-info, +.drawer-pf-notification-message { + display: block; + padding-left: 27px; + padding-right: 19px; +} +.expanded-notification .drawer-pf-notification-info, +.expanded-notification .drawer-pf-notification-message { + display: inline-block; +} +.drawer-pf-notifications-non-clickable .drawer-pf-notification:hover { + background-color: #fff; +} +.drawer-pf-title { + background-color: #fafafa; + border-bottom: 1px solid #d1d1d1; + position: absolute; + width: 100%; +} +.drawer-pf-title h3 { + font-size: 12px; + margin: 0; + padding: 6px 15px; +} +.drawer-pf-notification.expanded-notification .drawer-pf-notification-content { + display: -ms-flexbox; + display: flex; +} +.drawer-pf-notification.expanded-notification .drawer-pf-notification-content .drawer-pf-notification-message { + -ms-flex: 1 1; + flex: 1 1; +} +/* Exclusive styles to work with Vertical Navigation */ +.navbar-pf-vertical .drawer-pf { + height: calc(100vh - 80px); + top: 58px; +} +.navbar-pf-vertical .nav .drawer-pf-trigger .drawer-pf-trigger-icon { + border-left: 1px solid #2b2b2b; + border-right: 1px solid #2b2b2b; + padding-left: 15px; + padding-right: 15px; +} +.navbar-pf-vertical .nav .drawer-pf-trigger.open .drawer-pf-trigger-icon { + background-color: #232323; +} +/* Exclusive styles to work with Horizontal Navigation */ +.navbar-pf .drawer-pf { + height: calc(100vh - 46px); + top: 26px; +} +.navbar-pf .drawer-pf-trigger-icon { + cursor: pointer; +} +.search-pf.has-button { + border-collapse: separate; + display: table; +} +.search-pf.has-button .form-group { + display: table-cell; + width: 100%; +} +.search-pf.has-button .form-group .btn { + box-shadow: none; + float: left; + margin-left: -1px; +} +.search-pf.has-button .form-group .btn.btn-lg { + font-size: 14.5px; +} +.search-pf.has-button .form-group .btn.btn-sm { + font-size: 10.7px; +} +.search-pf.has-button .form-group .form-control { + float: left; +} +.search-pf .has-clear .clear { + background: rgba(255, 255, 255, 0); + border: 0; + height: 25px; + line-height: 1; + padding: 0; + position: absolute; + right: 1px; + top: 1px; + width: 28px; +} +.search-pf .has-clear .clear:focus { + outline: none; +} +.search-pf .has-clear .form-control { + padding-right: 30px; +} +.search-pf .has-clear .form-control::-ms-clear { + display: none; +} +.search-pf .has-clear .input-lg + .clear { + height: 31px; + width: 28px; +} +.search-pf .has-clear .input-sm + .clear { + height: 20px; + width: 28px; +} +.search-pf .has-clear .input-sm + .clear span { + font-size: 10px; +} +.search-pf .has-clear .search-pf-input-group { + position: relative; +} +.sidebar-header { + border-bottom: 1px solid #ececec; + padding-bottom: 11px; + margin: 50px 0 20px; +} +.sidebar-header .actions { + margin-top: -2px; +} +.sidebar-pf .sidebar-header + .list-group { + border-top: 0; + margin-top: -10px; +} +.sidebar-pf .sidebar-header + .list-group .list-group-item { + background: transparent; + border-color: #ececec; + padding-left: 0; +} +.sidebar-pf .sidebar-header + .list-group .list-group-item-heading { + font-size: 12px; +} +.sidebar-pf .nav-category h2 { + color: #9c9c9c; + font-size: 12px; + font-weight: 400; + line-height: 21px; + margin: 0; + padding: 8px 0; +} +.sidebar-pf .nav-category + .nav-category { + margin-top: 10px; +} +.sidebar-pf .nav-pills > li.active > a { + background: #0088ce !important; + border-color: #0088ce !important; + color: #fff; +} +@media (min-width: 768px) { + .sidebar-pf .nav-pills > li.active > a:after { + content: "\F105"; + font-family: "FontAwesome"; + display: block; + position: absolute; + right: 10px; + top: 1px; + } +} +.sidebar-pf .nav-pills > li.active > a .fa { + color: #fff; +} +.sidebar-pf .nav-pills > li > a { + border-bottom: 1px solid transparent; + border-radius: 0; + border-top: 1px solid transparent; + color: #363636; + font-size: 13px; + line-height: 21px; + padding: 1px 20px; +} +.sidebar-pf .nav-pills > li > a:hover { + background: #def3ff; + border-color: #bee1f4; +} +.sidebar-pf .nav-pills > li > a .fa { + color: #6a7079; + font-size: 15px; + margin-right: 10px; + text-align: center; + vertical-align: middle; + width: 15px; +} +.sidebar-pf .nav-stacked { + margin-left: -20px; + margin-right: -20px; +} +.sidebar-pf .nav-stacked li + li { + margin-top: 0; +} +.sidebar-pf .panel { + background: transparent; +} +.sidebar-pf .panel-body { + padding: 6px 20px; +} +.sidebar-pf .panel-body .nav-pills > li > a { + padding-left: 37px; +} +.sidebar-pf .panel-heading { + padding: 9px 20px; +} +.sidebar-pf .panel-title { + font-size: 12px; +} +.sidebar-pf .panel-title > a:before { + display: inline-block; + margin-left: 1px; + margin-right: 4px; + width: 9px; +} +.sidebar-pf .panel-title > a.collapsed:before { + margin-left: 3px; + margin-right: 2px; +} +@media (min-width: 767px) { + .sidebar-header-bleed-left { + margin-left: -20px; + } + .sidebar-header-bleed-left > h2 { + margin-left: 20px; + } + .sidebar-header-bleed-right { + margin-right: -20px; + } + .sidebar-header-bleed-right .actions { + margin-right: 20px; + } + .sidebar-header-bleed-right > h2 { + margin-right: 20px; + } + .sidebar-header-bleed-right + .list-group { + margin-right: -20px; + } + .sidebar-pf .panel-group .panel-default, + .sidebar-pf .treeview { + border-left: 0; + border-right: 0; + margin-left: -20px; + margin-right: -20px; + } + .sidebar-pf .treeview { + margin-top: 5px; + } + .sidebar-pf .treeview .list-group-item { + padding-left: 20px; + padding-right: 20px; + } + .sidebar-pf .treeview .list-group-item.node-selected:after { + content: "\F105"; + font-family: "FontAwesome"; + display: block; + position: absolute; + right: 10px; + top: 1px; + } +} +@media (min-width: 768px) { + .sidebar-pf { + background: #fafafa; + } + .sidebar-pf.sidebar-pf-left { + border-right: 1px solid #d1d1d1; + } + .sidebar-pf.sidebar-pf-right { + border-left: 1px solid #d1d1d1; + } + .sidebar-pf > .nav-category, + .sidebar-pf > .nav-stacked { + margin-top: 5px; + } +} +@keyframes rotation { + from { + transform: rotate(0deg); + } + to { + transform: rotate(359deg); + } +} +.spinner { + animation: rotation 600ms infinite linear; + border-bottom: 4px solid rgba(3, 3, 3, 0.25); + border-left: 4px solid rgba(3, 3, 3, 0.25); + border-right: 4px solid rgba(3, 3, 3, 0.25); + border-radius: 100%; + border-top: 4px solid rgba(3, 3, 3, 0.75); + height: 24px; + margin: 0 auto; + position: relative; + width: 24px; +} +.spinner.spinner-inline { + display: inline-block; + margin-right: 3px; +} +.spinner.spinner-lg { + border-width: 5px; + height: 30px; + width: 30px; +} +.spinner.spinner-sm { + border-width: 3px; + height: 18px; + width: 18px; +} +.spinner.spinner-xs { + border-width: 2px; + height: 12px; + width: 12px; +} +.spinner.spinner-inverse { + border-bottom-color: rgba(255, 255, 255, 0.25); + border-left-color: rgba(255, 255, 255, 0.25); + border-right-color: rgba(255, 255, 255, 0.25); + border-top-color: rgba(255, 255, 255, 0.75); +} +.ie9 .spinner { + background: url(data:image/gif;base64,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) no-repeat; + border: 0; +} +.ie9 .spinner.spinner-inverse { + background-image: url(data:image/gif;base64,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); +} +.ie9 .spinner.spinner-inverse-lg { + background-image: url(data:image/gif;base64,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); +} +.ie9 .spinner.spinner-inverse-sm { + background-image: url(data:image/gif;base64,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); +} +.ie9 .spinner.spinner-inverse-xs { + background-image: url(data:image/gif;base64,R0lGODlhDAAMANUAAKGhoZmZmZmZmYuLi4mJiYeHh4WFhX5+fnp6enh4eHJycm5ubmZmZlxcXFhYWFRUVFBQUEpKSkhISEZGRkJCQkBAQD4+Pjw8PDo6OjMzMygoKCYmJiIiIiAgIB4eHhwcHBoaGhgYGBYWFhISEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJBwAkACwAAAAADAAMAAAGRUCSUMQIABAaofJiHAwAAIcylCgkSaFFwCOsXJUkTYWUoYDBlHLmrCyn2UK1Gf72ssXCT+QbjnyUHxUUGBgUFX9nbmtKQQAh+QQJBwAkACwAAAAADAAMAAAGRECSkKSRABCcofBTqWAKAEBk+IloqAqpsHJVkrKcDMUrDB0pGbIQilaTMBKxm0uiezWVpVWpiXyoFRQYGBQVf15ibUNBACH5BAkHACQALAAAAAAMAAwAAAZCQJKQlKFQMsPhp0LBYIwhZUST1CQuwgo1SSoEREWucANgHMXCQeCMHgDCYhEAQdKKFwDqZ1oNOJRMThQVHmJFbEJBACH5BAkHACQALAAAAAAMAAwAAAZFQJKQlKFQMsPhp0LBYCiVjzKiSWoiUlKlmiRpKkRKd7g9joUYiflcABTPIQBCy00qABzSh6q8R5QVFRhtAH9dGhJyeUJBACH5BAkHACQALAAAAAAMAAwAAAZGQJKQlKFQMsPhp0LBYCiVjzKiSWoiUlKlmiRpKkRKd3g8joVF87lYPJPM2/FX6AksQkJNIYEXOgAAAwMAARddGgiEDCJDQQAh+QQJBwAkACwAAAAADAAMAAAGRECSkJShUDLD4adCwWAolY8yoklqIlJSpZokaSpecFd4lGDGwiKggCZSEIAQ+sgBKMZfYcSe9WKHe2sYFVFdHHASXEJBACH5BAkHACQALAAAAAAMAAwAAAZFQJKQlKFQMsNhyIjBUCqf4SWhSWoiUVGgkBRqKiQGYNMVHgODsrAISKuLCIBIfdQAFuWv0BGoDq9RQh4VFE1PgUlFR0lBACH5BAkHACQALAAAAAAMAAwAAAZGQJKQgwBINMIkKQIAFDCVyifJVEyFmsiUA1AosRVSMfQVUjLOsjBDkWDUJLYmrD6TKsjvXPiJ5LFaSR8VFBgYFFJlbHZJQQA7); +} +.ie9 .spinner.spinner-lg { + background-image: url(data:image/gif;base64,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); +} +.ie9 .spinner.spinner-sm { + background-image: url(data:image/gif;base64,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); +} +.ie9 .spinner.spinner-xs { + background-image: url(data:image/gif;base64,R0lGODlhDAAMAPUKAPHx8UhISNPT00RERFxcXMHBwUJCQuPj49XV1cPDw3R0dKOjo6WlpcXFxbu7u/X19W5ubt3d3ff39/Pz88zMzLe3t+Hh4YmJiZGRkY2NjdfX105OTlhYWOnp6Xx8fFBQUOXl5efn52ZmZlpaWo+Pj4WFhbm5uUZGRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBwAKACwAAAAADAAMAEAGTkCFEHTZBCAUoWJSECiVgsIkKnkKJU1FJ0NIKiweiEVR8FoVlILwUCinC4dnZWP4cAYGjJCpOSMSTGZWaVRnWE5sAg9CD1FxSgBRTQBKQQAh+QQFBwARACwBAAAACwAHAAAGJ8BIBIBwCAVC4aGQaCQXyoLgkVQYGMmsUDFAaJMHA+SbJATIwoYjCAAh+QQFBwADACwFAAAABwAKAAAGKcBCQQAYGCkUYcdofGhIJqZxtAlJKYaSdPDZbDkBKegEkXoMFCmENAgCACH5BAUHAAAALAUAAQAHAAsAAAYmQIAQcBgOC0WjoDAxShICI6DhkFqvCgNCGMkypgTDYCF0BCBRYRAAIfkEBQcAAAAsAgAFAAoABwAABihAgHAopBSIRCNSKCkIlgBNYQLxWIqETAeAMQw4H8OmMqRAApsLaBgEACH5BAUHABEALAAABQALAAcAAAYmQEcjQiwWAwSjEmI4KIuIgeJZZBimxIeg4Iwsio0E1yggOhAAYhAAIfkEBQcAAQAsAAABAAcACwAABifAQKAjLJpIxUBoM0qWDJTk5pOsFkXWqKdKgiAeSUuiQIkKAYJCIQgAIfkEBQcAAAAsAAAAAAcACgAABipAgFAACTiEi4GB0AAwDIqIEDFQCIUQw+EKCBC4AEeTK0hIuJOCAHwocIMAOw==); +} +.prettyprint .atn, +.prettyprint .com, +.prettyprint .fun, +.prettyprint .var { + color: #3f9c35; +} +.prettyprint .atv, +.prettyprint .str { + color: #a30000; +} +.prettyprint .clo, +.prettyprint .dec, +.prettyprint .kwd, +.prettyprint .opn, +.prettyprint .pln, +.prettyprint .pun { + color: #363636; +} +.prettyprint .lit, +.prettyprint .tag, +.prettyprint .typ { + color: #00659c; +} +.prettyprint ol.linenums { + margin-bottom: 0; +} +table.dataTable { + height: 100%; + margin-bottom: 0; + max-width: none !important; +} +table.dataTable tbody > tr > td.table-view-pf-actions { + padding: 0; + vertical-align: middle; +} +table.dataTable tbody > tr:hover > td.table-view-pf-actions { + background-color: #f5f5f5; + border-bottom-color: #d1d1d1; +} +table.dataTable tbody > tr.selected { + color: #fff; + background-color: #0088ce; +} +table.dataTable tbody > tr.selected > td { + border-bottom-color: #00659c; +} +table.dataTable tbody > tr.selected > td.table-view-pf-actions { + background-color: #f5f5f5; + border-bottom-color: #d1d1d1; +} +table.dataTable tbody > tr.selected:hover > td { + background-color: inherit; + border-bottom-color: #00659c; +} +table.dataTable tbody > tr.selected:hover > td.table-view-pf-actions { + background-color: #f5f5f5; + border-bottom-color: #d1d1d1; +} +table.dataTable thead .sorting, +table.dataTable thead .sorting_asc, +table.dataTable thead .sorting_desc, +table.dataTable thead .sorting_asc_disabled, +table.dataTable thead .sorting_desc_disabled { + cursor: pointer; +} +table.dataTable thead .sorting_asc, +table.dataTable thead .sorting_desc { + color: #0088ce !important; + position: relative; +} +table.dataTable thead .sorting_asc:after, +table.dataTable thead .sorting_desc:after { + content: "\F107"; + font-family: "FontAwesome"; + font-size: 10px; + font-weight: normal; + height: 9px; + left: 7px; + line-height: 12px; + position: relative; + top: 2px; + vertical-align: baseline; + width: 12px; +} +table.dataTable thead .sorting_asc:before, +table.dataTable thead .sorting_desc:before { + background: #0088ce; + content: ""; + height: 2px; + position: absolute; + left: 0; + top: 0; + width: 100%; +} +table.dataTable thead .sorting_asc:after { + content: "\F106"; + top: -3px; +} +table.dataTable th:active { + outline: none; +} +.table-view-pf-empty.blank-slate-pf { + background-color: #f5f5f5; + border: 1px solid #d1d1d1; + border-radius: 0; + margin-top: -1px; +} +.table-view-pf-toolbar.toolbar-pf { + background-color: #f5f5f5; + border-bottom: none; + border-left: 1px solid #d1d1d1; + border-right: 1px solid #d1d1d1; + border-top: 1px solid #d1d1d1; + box-shadow: none; + margin-left: 0px; + margin-right: 0px; +} +.table-view-pf-toolbar.toolbar-pf .toolbar-pf-results { + border-top: 1px solid #d1d1d1; + min-height: 40px; + line-height: 40px; +} +.table-view-pf-toolbar-external.toolbar-pf { + border-bottom: none; + border-top: none; + box-shadow: none; +} +.table-view-pf-toolbar-external.toolbar-pf .toolbar-pf-results { + border-top: 1px solid #d1d1d1; + min-height: 40px; + line-height: 40px; +} +.table-view-pf-colvis-menu > li { + padding: 5px 10px; +} +.table-view-pf-colvis-menu > li:hover { + background-color: #def3ff; +} +.table-view-pf-colvis-menu > li > input { + margin-top: 0; + margin-right: 10px; + vertical-align: middle; +} +.table-view-pf-colvis-menu > li > label { + margin-bottom: 0; +} +.table-view-pf-actions { + background-color: #f1f1f1; + height: 100%; +} +.table-view-pf-actions .btn, +.table-view-pf-actions .dropdown-toggle { + border: none; + box-shadow: none; + height: 100%; + width: 100%; +} +.table-view-pf-actions .dropdown, +.table-view-pf-actions .table-view-pf-btn { + height: 100%; +} +.table-view-pf-actions .dropdown-menu.dropdown-menu-right { + right: -5px; +} +.table-view-pf-actions:last-child { + width: 24px; +} +.table-view-pf-select { + width: 33px; +} +.table-view-pf-select-results { + text-align: right; +} +.bootstrap-datetimepicker-widget a[data-action] { + border: 0; + box-shadow: none; + color: #363636; + display: block; + padding-bottom: 4px; + padding-top: 4px; +} +.bootstrap-datetimepicker-widget a[data-action]:hover { + color: #0088ce; +} +.bootstrap-datetimepicker-widget.dropdown-menu { + left: 0!important; + padding: 0; + width: calc(100% - 25px); +} +.bootstrap-datetimepicker-widget.dropdown-menu:before, +.bootstrap-datetimepicker-widget.dropdown-menu:after { + content: none; +} +.bootstrap-datetimepicker-widget.dropdown-menu.top { + margin-bottom: -1px; +} +.bootstrap-datetimepicker-widget.dropdown-menu.bottom { + margin-top: -1px; +} +.bootstrap-datetimepicker-widget .timepicker-hour { + width: 100%; +} +.bootstrap-datetimepicker-widget .timepicker-hour:after { + content: ":"; + float: right; +} +.timepicker-hours table td, +.timepicker-minutes table td { + font-weight: bold; + line-height: 30px; + height: 30px; +} +.timepicker-hours table td:hover, +.timepicker-minutes table td:hover { + color: #0088ce; +} +.timepicker-hours .table-condensed > tbody > tr > td, +.timepicker-minutes .table-condensed > tbody > tr > td { + padding: 0; +} +.time-picker-pf .input-group-addon .fa, +.time-picker-pf .input-group-addon .pficon { + width: 12px; +} +.time-picker-pf .input-group-addon:not(.active) { + box-shadow: none; +} +.timepicker-picker table td span, +.timepicker-picker table td a span { + height: 24px; + line-height: 24px; + margin: 0; + width: 100%; +} +.timepicker-picker .table-condensed > tbody > tr > td { + height: 25px; + line-height: 18px; + padding: 0; +} +.timepicker-picker button[data-action] { + padding-bottom: 0; + padding-top: 0; +} +.timepicker-picker .separator { + display: none; +} +.timepicker-picker tr:nth-child(2) td { + background-color: #def3ff; + border-color: #bee1f4; + border-style: solid; + border-width: 1px; + border-left: 0; + border-right: 0; +} +.toast-pf { + background-color: #fff; + border-color: #bbb; + box-shadow: 0 2px 6px rgba(3, 3, 3, 0.2); + padding-left: 68px; + /* Medium devices (desktops, 992px and up) */ +} +.toast-pf.alert-danger > .pficon { + background-color: #cc0000; +} +.toast-pf.alert-info > .pficon { + background-color: #8b8d8f; +} +.toast-pf.alert-success > .pficon { + background-color: #3f9c35; +} +.toast-pf.alert-warning > .pficon { + background-color: #ec7a08; +} +.toast-pf .dropdown-kebab-pf { + margin-left: 10px; +} +.toast-pf > .pficon { + background-color: #4d5258; + bottom: -1px; + box-shadow: 2px 0 5px -2px rgba(3, 3, 3, 0.2); + left: -1px; + padding-top: 10px; + text-align: center; + top: -1px; + width: 53px; +} +.toast-pf > .pficon:before { + color: rgba(255, 255, 255, 0.74); +} +.toast-pf .toast-pf-action { + margin-left: 15px; +} +.toast-pf .dropdown-kebab-pf .btn-link { + padding-top: 0; + padding-bottom: 0; + vertical-align: text-bottom; +} +@media (min-width: 992px) { + .toast-pf { + display: inline-block; + } +} +@media (min-width: 992px) { + .toast-pf-max-width { + max-width: 31.1%; + } +} +.toast-pf-top-right { + left: 20px; + position: absolute; + right: 20px; + top: 12px; + z-index: 1055; + /* Medium devices (desktops, 992px and up) */ +} +@media (min-width: 992px) { + .toast-pf-top-right { + left: auto; + } +} +.toast-notifications-list-pf { + margin-left: 20px; + position: fixed; + right: 20px; + top: 20px; + z-index: 1055; +} +.toast-notifications-list-pf .toast-pf { + clear: both; + float: right; +} +@media (min-width: 768px) { + .toast-notifications-list-pf { + max-width: calc(50%); + } +} +@media (min-width: 992px) { + .toast-notifications-list-pf { + max-width: calc(33.1%); + } +} +.toolbar-pf { + background: #fff; + border-bottom: 1px solid #d1d1d1; + box-shadow: 0 1px 0px rgba(3, 3, 3, 0.045); + padding-top: 10px; +} +.toolbar-pf .form-group { + margin-bottom: 10px; +} +@media (min-width: 768px) { + .toolbar-pf .form-group { + border-right: 1px solid #d1d1d1; + float: left; + margin-bottom: 0; + padding-left: 20px; + padding-right: 20px; + } +} +.toolbar-pf .form-group:last-child { + border-right: 0; + margin-bottom: 0; + padding-right: 0; +} +.toolbar-pf .form-group .btn + .btn, +.toolbar-pf .form-group .btn-group + .btn, +.toolbar-pf .form-group .btn + .btn-group, +.toolbar-pf .form-group .btn-group + .btn-group { + margin-left: 5px; +} +.toolbar-pf .form-group .btn + .btn-link, +.toolbar-pf .form-group .btn-group + .btn-link, +.toolbar-pf .form-group .btn + .dropdown, +.toolbar-pf .form-group .btn-group + .dropdown { + margin-left: 10px; +} +.toolbar-pf .form-group .btn-link { + color: #252525; + font-size: 16px; + line-height: 1; + padding: 4px 0; +} +.toolbar-pf .form-group .btn-link:active, +.toolbar-pf .form-group .btn-link:focus, +.toolbar-pf .form-group .btn-link:hover { + color: #0088ce; +} +.toolbar-pf .form-group .dropdown-kebab-pf .btn-link { + padding: 4px 10px; + margin-left: -10px; + margin-right: -10px; +} +.toolbar-pf-actions { + display: table; + margin-bottom: 10px; + width: 100%; +} +@media (min-width: 768px) { + .toolbar-pf-actions .toolbar-pf-filter { + padding-left: 0; + width: 25%; + } +} +.toolbar-pf-view-selector { + font-size: 16px; +} +.toolbar-pf-view-selector .btn-link.active { + color: #0088ce; + cursor: default; +} +.toolbar-pf-action-right { + float: right; +} +@media (max-width: 768px) { + .toolbar-pf-action-right { + float: none; + } +} +.toolbar-pf-find { + font-size: 14px; + position: relative; +} +.find-pf-dropdown-container { + background: #fff; + border: solid 1px #bbb; + display: none; + right: -20px; + padding: 5px; + position: absolute; + top: 35px; + width: 300px; + z-index: 10000; +} +@media (max-width: 768px) { + .find-pf-dropdown-container { + left: 30px; + top: -5px; + width: calc(100% - 30px); + } +} +.find-pf-dropdown-container:before, +.find-pf-dropdown-container:after { + content: ""; + position: absolute; +} +.find-pf-dropdown-container:before { + border-bottom: 11px solid #bbb; + border-left: 11px solid transparent; + border-right: 11px solid transparent; + right: 35px; + top: -12px; +} +.toolbar-pf-find:last-child .find-pf-dropdown-container:before { + right: 15px; +} +@media (max-width: 768px) { + .find-pf-dropdown-container:before { + border-bottom: 11px solid transparent; + border-right: 11px solid #bbb; + border-top: 11px solid transparent; + left: -22px; + right: initial; + top: 8px; + } +} +.find-pf-dropdown-container:after { + border-bottom: 10px solid #fff; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + right: 36px; + top: -10px; +} +.toolbar-pf-find:last-child .find-pf-dropdown-container:after { + right: 16px; +} +@media (max-width: 768px) { + .find-pf-dropdown-container:after { + border-bottom: 10px solid transparent; + border-right: 10px solid #fff; + border-top: 10px solid transparent; + left: -20px; + right: initial; + top: 9px; + } +} +.find-pf-dropdown-container input { + height: 30px; + padding: 5px 117px 5px 5px; + width: 100%; +} +.find-pf-dropdown-container .find-pf-buttons { + position: absolute; + right: 10px; + top: 5px; +} +.find-pf-dropdown-container .find-pf-buttons .btn { + border: none; + cursor: pointer; + margin-left: 0 !important; + padding: 0; + width: 18px; +} +.find-pf-dropdown-container .find-pf-buttons .btn .fa-angle-up, +.find-pf-dropdown-container .find-pf-buttons .btn .fa-angle-down { + font-weight: bold; + font-size: 18px; +} +.find-pf-dropdown-container .find-pf-buttons .btn .pficon-close { + font-size: 14px; +} +.find-pf-dropdown-container .find-pf-buttons span { + height: 30px; + line-height: 30px; + vertical-align: middle; +} +.find-pf-dropdown-container .find-pf-buttons .find-pf-nums { + color: #8b8d8f; + margin-right: 3px; +} +.toolbar-pf-results { + border-top: 1px solid #d1d1d1; + margin-top: 10px; +} +.toolbar-pf-results h5, +.toolbar-pf-results p, +.toolbar-pf-results ul { + display: inline-block; + line-height: 26.66666667px; + margin-bottom: 0; + margin-top: 0; +} +@media (min-width: 768px) { + .toolbar-pf-results h5, + .toolbar-pf-results p, + .toolbar-pf-results ul { + line-height: 40px; + } +} +.toolbar-pf-results h5 { + font-weight: 700; + margin-right: 20px; +} +.toolbar-pf-results .label { + font-size: 11px; +} +.toolbar-pf-results .label a { + color: #fff; + display: inline-block; + margin-left: 5px; +} +.nav-pf-vertical { + background: #292e34; + border-right: 1px solid #292e34; + bottom: 0; + left: 0; + overflow-x: hidden; + overflow-y: auto; + position: fixed; + top: 60px; + width: 200px; + z-index: 1030; +} +.layout-pf-fixed-with-footer .nav-pf-vertical { + bottom: 37px; +} +.ie9.layout-pf-fixed .nav-pf-vertical { + box-sizing: content-box; +} +.nav-pf-vertical.hidden.show-mobile-nav { + box-shadow: 0 0 3px rgba(3, 3, 3, 0.15); + display: block !important; +} +.nav-pf-vertical.hide-nav-pf { + visibility: hidden !important; +} +.nav-pf-vertical .list-group { + border-top: 0; + margin-bottom: 0; +} +.nav-pf-vertical .list-group-item { + background-color: transparent; + border-color: #030303; + padding: 0; +} +.nav-pf-vertical .list-group-item > a { + background-color: transparent; + color: #d1d1d1; + cursor: pointer; + display: block; + font-size: 14px; + font-weight: 400; + height: 63px; + line-height: 26px; + outline: 0; + padding: 17px 20px 17px 25px; + position: relative; + white-space: nowrap; + width: 200px; +} +@supports (display: flex) { + .nav-pf-vertical .list-group-item > a { + display: -ms-flexbox; + display: flex; + padding-right: 0; + } +} +.nav-pf-vertical .list-group-item > a .fa, +.nav-pf-vertical .list-group-item > a .glyphicon, +.nav-pf-vertical .list-group-item > a .pficon { + color: #72767b; + float: left; + font-size: 20px; + line-height: 26px; + margin-right: 10px; + text-align: center; + width: 24px; +} +.nav-pf-vertical .list-group-item > a:hover { + text-decoration: none; +} +.nav-pf-vertical .list-group-item.active > a, +.nav-pf-vertical .list-group-item:hover > a { + background-color: #393f44; + color: #fff; + font-weight: 600; +} +.nav-pf-vertical .list-group-item.active > a .fa, +.nav-pf-vertical .list-group-item:hover > a .fa, +.nav-pf-vertical .list-group-item.active > a .glyphicon, +.nav-pf-vertical .list-group-item:hover > a .glyphicon, +.nav-pf-vertical .list-group-item.active > a .pficon, +.nav-pf-vertical .list-group-item:hover > a .pficon { + color: #39a5dc; +} +.nav-pf-vertical .list-group-item.active > a:before { + background: #39a5dc; + content: " "; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 3px; +} +.nav-pf-vertical .list-group-item.active:hover { + background-color: transparent; + border-color: #030303; +} +.nav-pf-vertical .list-group-item .list-group-item-value { + display: block; + line-height: 25px; + max-width: 120px; + overflow: hidden; + text-overflow: ellipsis; +} +@supports (display: flex) { + .nav-pf-vertical .list-group-item .list-group-item-value { + -ms-flex: 1; + flex: 1; + max-width: none; + padding-right: 15px; + } +} +.nav-pf-vertical .list-group-item-separator { + border-top-color: #030303; + border-top-width: 2px; +} +.nav-pf-vertical.nav-pf-vertical-with-badges { + width: 250px; +} +.nav-pf-vertical.nav-pf-vertical-with-badges .list-group-item > a { + width: 250px; +} +.nav-pf-vertical h5 { + color: #fff; + cursor: default; + font-size: 13px; + font-weight: 600; + margin: 30px 20px 10px 20px; +} +.nav-pf-vertical.hidden-icons-pf > .list-group > .list-group-item > a .fa, +.nav-pf-vertical.hidden-icons-pf > .list-group > .list-group-item > a .glyphicon, +.nav-pf-vertical.hidden-icons-pf > .list-group > .list-group-item > a .pficon { + display: none; +} +.nav-pf-vertical.hidden-icons-pf.collapsed { + display: none; +} +.nav-pf-vertical .badge-container-pf { + position: absolute; + right: 15px; + top: 20px; +} +@supports (display: flex) { + .nav-pf-vertical .badge-container-pf { + padding-left: 0; + padding-right: 15px; + position: relative; + right: 0; + margin-top: -3px; + top: 5px; + } +} +.nav-pf-vertical .badge-container-pf .badge { + background: #292e34; + color: #fff; + float: left; + font-size: 12px; + font-weight: 700; + line-height: 1.66666667; + margin: 0; + padding: 0 7px; + text-align: center; +} +.nav-pf-vertical .badge-container-pf .badge .pficon, +.nav-pf-vertical .badge-container-pf .badge .fa { + font-size: 14px; + height: 20px; + line-height: 1.66666667; + margin-right: 3px; + margin-top: -1px; +} +.nav-pf-vertical-tooltip.tooltip { + margin-left: 15px; +} +.nav-pf-vertical-tooltip.tooltip .tooltip-inner { + background-color: #fff; + color: #292e34; +} +.nav-pf-vertical-tooltip.tooltip .tooltip-arrow { + border-bottom-color: #fff; + left: calc(50% - 15px) !important; +} +.hover-secondary-nav-pf { + width: calc(200px * 2); +} +.hover-secondary-nav-pf.nav-pf-vertical-with-badges { + width: calc(250px * 2); +} +.hover-tertiary-nav-pf { + width: calc(200px * 3); +} +.hover-tertiary-nav-pf.nav-pf-vertical-with-badges { + width: calc(250px * 3); +} +.hover-tertiary-nav-pf .nav-pf-secondary-nav { + width: calc(200px * 2); +} +.hover-tertiary-nav-pf .nav-pf-secondary-nav .collapsed-tertiary-nav-pf { + width: 200px; +} +.hover-tertiary-nav-pf .nav-pf-tertiary-nav { + left: calc(200px * 2); +} +.hover-tertiary-nav-pf.nav-pf-vertical-with-badges .nav-pf-secondary-nav { + width: calc(250px * 2); +} +.hover-tertiary-nav-pf.nav-pf-vertical-with-badges .nav-pf-secondary-nav .collapsed-tertiary-nav-pf { + width: 250px; +} +.hover-tertiary-nav-pf.nav-pf-vertical-with-badges .nav-pf-tertiary-nav { + left: calc(250px * 2); +} +.nav-pf-vertical.collapsed { + width: 75px; +} +.nav-pf-vertical.collapsed.collapsed-secondary-nav-pf { + width: 200px; +} +.nav-pf-vertical.collapsed.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges { + width: 250px; +} +.nav-pf-vertical.collapsed.collapsed-tertiary-nav-pf { + width: 200px; +} +.nav-pf-vertical.collapsed.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges { + width: 250px; +} +.nav-pf-vertical.collapsed.hover-secondary-nav-pf { + width: calc(75px + 200px); +} +.nav-pf-vertical.collapsed.hover-secondary-nav-pf.nav-pf-vertical-with-badges { + width: calc(75px + 250px); +} +.nav-pf-vertical.collapsed.hover-tertiary-nav-pf { + width: calc(75px + (200px * 2)); +} +.nav-pf-vertical.collapsed.hover-tertiary-nav-pf.nav-pf-vertical-with-badges { + width: calc(75px + (250px * 2)); +} +.show-mobile-nav.show-mobile-secondary { + width: 200px; +} +.show-mobile-nav.show-mobile-secondary.nav-pf-vertical-with-badges { + width: 250px; +} +.show-mobile-nav.show-mobile-tertiary { + width: 200px; +} +.show-mobile-nav.show-mobile-tertiary.nav-pf-vertical-with-badges { + width: 250px; +} +.show-mobile-nav .mobile-nav-item-pf .nav-pf-secondary-nav, +.show-mobile-nav .mobile-secondary-item-pf .nav-pf-secondary-nav { + left: 0; + opacity: 1; + visibility: visible; + z-index: 1034; +} +.show-mobile-nav .mobile-nav-item-pf > .nav-pf-tertiary-nav, +.show-mobile-nav .mobile-secondary-item-pf > .nav-pf-tertiary-nav { + left: 0; + opacity: 1; + visibility: visible; + z-index: 1038; +} +.show-mobile-nav .nav-pf-secondary-nav { + left: 0; +} +.secondary-nav-item-pf:hover .show-mobile-nav .nav-pf-secondary-nav { + opacity: 0; + visibility: hidden; +} +.show-mobile-nav .tertiary-nav-item-pf:hover .nav-pf-tertiary-nav { + opacity: 0; + visibility: hidden; +} +.show-mobile-nav .tertiary-nav-item-pf.mobile-nav-item-pf:hover .nav-pf-tertiary-nav { + opacity: 1; + visibility: visible; +} +.secondary-nav-item-pf > a { + cursor: default; +} +.secondary-nav-item-pf > a:after { + color: #72767b; + content: "\F105"; + display: block; + font-family: "FontAwesome"; + font-size: 24px; + line-height: 30px; + padding: 14px 0; + position: absolute; + right: 20px; + top: 0; +} +@supports (display: flex) { + .secondary-nav-item-pf > a .list-group-item-value { + padding-right: 35px; + } +} +.secondary-nav-item-pf.active > a, +.secondary-nav-item-pf:hover > a { + width: calc(200px + 1px); + z-index: 1031; +} +.secondary-nav-item-pf.active > a:after, +.secondary-nav-item-pf:hover > a:after { + right: 21px; +} +.collapsed-secondary-nav-pf .secondary-nav-item-pf.active > a, +.collapsed-secondary-nav-pf .secondary-nav-item-pf:hover > a { + z-index: 0; +} +.collapsed-tertiary-nav-pf .secondary-nav-item-pf.active > a, +.collapsed-tertiary-nav-pf .secondary-nav-item-pf:hover > a { + z-index: 0; +} +.nav-pf-vertical-with-badges .secondary-nav-item-pf.active > a, +.nav-pf-vertical-with-badges .secondary-nav-item-pf:hover > a { + width: calc(250px + 1px); +} +.nav-pf-vertical.collapsed-secondary-nav-pf { + width: 200px; +} +.nav-pf-vertical.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges { + width: 250px; +} +.nav-pf-vertical.collapsed-secondary-nav-pf .secondary-nav-item-pf.active > a, +.nav-pf-vertical.collapsed-secondary-nav-pf .secondary-nav-item-pf.hover > a { + z-index: 1030; +} +.nav-pf-vertical.collapsed-secondary-nav-pf.hover-tertiary-nav-pf { + width: 200px; +} +.nav-pf-vertical.collapsed-secondary-nav-pf.hover-tertiary-nav-pf.nav-pf-vertical-with-badges { + width: 250px; +} +.nav-pf-vertical.collapsed-secondary-nav-pf .nav-pf-secondary-nav { + left: 0; +} +.nav-pf-vertical.collapsed-secondary-nav-pf .nav-pf-tertiary-nav { + left: 200px; +} +.nav-pf-vertical.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges .nav-pf-tertiary-nav { + left: 250px; +} +.nav-pf-vertical.collapsed-tertiary-nav-pf { + width: 200px; +} +.nav-pf-vertical.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges { + width: 250px; +} +.nav-pf-vertical.collapsed-tertiary-nav-pf .nav-pf-secondary-nav { + width: 200px; +} +.nav-pf-vertical.collapsed-tertiary-nav-pf .nav-pf-secondary-nav.nav-pf-vertical-with-badges { + width: 250px; +} +.nav-pf-vertical.collapsed-tertiary-nav-pf .secondary-nav-item-pf.active > a, +.nav-pf-vertical.collapsed-tertiary-nav-pf .tertiary-nav-item-pf.active > a, +.nav-pf-vertical.collapsed-tertiary-nav-pf .secondary-nav-item-pf.hover > a, +.nav-pf-vertical.collapsed-tertiary-nav-pf .tertiary-nav-item-pf.hover > a { + z-index: 0; +} +@media (min-width: 1200px) { + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf { + width: calc(200px * 2); + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.nav-pf-vertical-with-badges { + width: calc(250px * 2); + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-secondary-nav-pf { + width: 200px; + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges { + width: 250px; + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-secondary-nav-pf.hover-tertiary-nav-pf { + width: calc(200px * 2); + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-secondary-nav-pf.hover-tertiary-nav-pf.nav-pf-vertical-with-badges { + width: calc(250px * 2); + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-tertiary-nav-pf { + width: 200px; + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges { + width: 250px; + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed { + width: calc(75px + 200px); + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed.collapsed-secondary-nav-pf { + width: 200px; + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges { + width: 250px; + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed.collapsed-tertiary-nav-pf { + width: 200px; + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges { + width: 250px; + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed.hover-tertiary-nav-pf { + width: calc(75px + (200px * 2)); + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed.hover-tertiary-nav-pf.nav-pf-vertical-with-badges { + width: calc(75px + (250px * 2)); + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.hover-tertiary-nav-pf { + width: calc(200px * 3); + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.hover-tertiary-nav-pf.nav-pf-vertical-with-badges { + width: calc(250px * 3); + } + .nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf .secondary-nav-item-pf.active .nav-pf-secondary-nav { + visibility: visible; + opacity: 1; + } +} +.nav-item-pf-header { + color: #fff; + font-size: 16px; + margin: 18px 20px 10px 20px; +} +.nav-item-pf-header > a { + cursor: pointer; + margin-right: 7px; +} +.nav-item-pf-header > a:hover, +.nav-item-pf-header > a:focus { + color: #0088ce; + text-decoration: none; +} +.nav-pf-vertical.collapsed { + width: 75px; +} +.nav-pf-vertical.collapsed .list-group-item > a { + width: 75px; +} +.nav-pf-vertical.collapsed .list-group-item > a > .list-group-item-value { + display: none; +} +.nav-pf-vertical.collapsed .list-group-item > a > .badge-container-pf { + display: none; +} +.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf.active > a, +.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf > a { + width: 75px; +} +.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf.active > a:after, +.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf > a:after { + right: 10px; +} +.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf.active > a, +.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf:hover > a { + width: 77px; +} +.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf.active > a:after, +.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf:hover > a:after { + right: 11px; +} +.nav-pf-secondary-nav { + background: #393f44; + border: 1px solid #292e34; + border-bottom: none; + border-top: none; + bottom: 0; + display: block; + left: 200px; + opacity: 0; + overflow-x: hidden; + overflow-y: auto; + position: fixed; + top: 60px; + visibility: hidden; + width: 200px; + z-index: 1030; +} +.collapsed-secondary-nav-pf .secondary-nav-item-pf.active .nav-pf-secondary-nav { + left: 0; + opacity: 1; + visibility: visible; + z-index: 1032; +} +.collapsed-tertiary-nav-pf .secondary-nav-item-pf.active .nav-pf-secondary-nav { + left: 0; + opacity: 1; + visibility: visible; +} +.hover-secondary-nav-pf .secondary-nav-item-pf.is-hover .nav-pf-secondary-nav { + opacity: 1; + visibility: visible; +} +.ie9.layout-pf-fixed .nav-pf-secondary-nav { + box-sizing: content-box; +} +.layout-pf-fixed-with-footer .nav-pf-secondary-nav { + bottom: 37px; +} +.nav-pf-secondary-nav .list-group-item { + border: none; + padding: 0 0 5px 0; + width: 200px; +} +.nav-pf-secondary-nav .list-group-item > a { + background-color: #393f44; + color: #d1d1d1; + font-size: 12px; + font-weight: inherit; + height: inherit; + padding: 4px 0 2px 0; + margin-left: 20px; + width: calc(200px - 20px); +} +.nav-pf-secondary-nav .list-group-item > a:hover .list-group-item-value { + text-decoration: underline; +} +.nav-pf-secondary-nav .list-group-item.active > a:before { + display: none; +} +.nav-pf-secondary-nav .list-group-item.active > a, +.nav-pf-secondary-nav .list-group-item:hover > a { + background-color: #4d5258; + color: #fff; +} +.nav-pf-secondary-nav .list-group-item .badge-container-pf { + top: 5px; +} +.nav-pf-secondary-nav .list-group-item .badge-container-pf .badge { + background: #292e34; + color: #fff; +} +.nav-pf-secondary-nav .list-group-item .list-group-item-value { + padding-left: 5px; +} +.nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf > a { + cursor: default; +} +.nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf > a:after { + color: #72767b; + content: "\F105"; + display: block; + font-family: "FontAwesome"; + font-size: 20px; + line-height: 20px; + padding: 0; + position: absolute; + right: 20px; + top: 4px; +} +@supports (display: flex) { + .nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf > a .list-group-item-value { + padding-right: 35px; + } +} +.nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf.active > a, +.nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf:hover > a { + width: calc(200px - 19px); + z-index: 1033; +} +.nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf.active > a:after, +.nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf:hover > a:after { + right: 21px; +} +.nav-pf-vertical-with-badges .nav-pf-secondary-nav { + left: 250px; + width: 250px; +} +.nav-pf-vertical-with-badges .nav-pf-secondary-nav .list-group-item { + width: 250px; +} +.nav-pf-vertical-with-badges .nav-pf-secondary-nav .list-group-item > a { + width: calc(250px - 20px); +} +.nav-pf-vertical-with-badges .nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf.active > a, +.nav-pf-vertical-with-badges .nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf:hover > a { + width: calc(250px - 19px); +} +.nav-pf-tertiary-nav { + background: #4d5258; + border: 1px solid #292e34; + border-bottom: none; + border-top: none; + bottom: 0; + display: block; + left: calc(200px * 2); + opacity: 0; + overflow-x: hidden; + overflow-y: auto; + position: fixed; + top: 60px; + visibility: hidden; + width: 200px; + z-index: 1030; +} +.nav-pf-vertical-with-badges .nav-pf-tertiary-nav { + left: 250px; + width: 250px; +} +.nav-pf-vertical-with-badges .nav-pf-tertiary-nav .show-mobile-nav { + left: 0; +} +.collapsed-tertiary-nav-pf .tertiary-nav-item-pf.active .nav-pf-tertiary-nav { + left: 0; + opacity: 1; + visibility: visible; + z-index: 1033; +} +.hover-tertiary-nav-pf .tertiary-nav-item-pf.is-hover .nav-pf-tertiary-nav { + opacity: 1; + visibility: visible; +} +.collapsed.collapsed-tertiary-nav-pf .hover-tertiary-nav-pf .tertiary-nav-item-pf.is-hover .nav-pf-tertiary-nav { + left: 0; +} +.ie9.layout-pf-fixed .nav-pf-tertiary-nav { + box-sizing: content-box; +} +.layout-pf-fixed-with-footer .nav-pf-tertiary-nav { + bottom: 37px; +} +.nav-pf-tertiary-nav .nav-item-pf-header { + color: #fff; + margin: 18px 20px 10px 20px; +} +.nav-pf-tertiary-nav h5 { + color: #fff; + margin: 30px 20px 10px 20px; +} +.nav-pf-tertiary-nav .list-group-item { + border: none; + padding: 0 0 5px 0; +} +.nav-pf-tertiary-nav .list-group-item > a { + background-color: transparent; + color: #d1d1d1; + font-size: 12px; + font-weight: inherit; + height: inherit; + margin: 0 20px 0 20px; + padding: 4px 0 2px 0; +} +.nav-pf-tertiary-nav .list-group-item.active > a:before { + display: none; +} +.nav-pf-tertiary-nav .list-group-item.active > a, +.nav-pf-tertiary-nav .list-group-item:hover > a { + background-color: #393f44; + color: #fff; +} +.nav-pf-tertiary-nav .list-group-item .badge-container-pf { + top: 5px; +} +.nav-pf-tertiary-nav .list-group-item .badge-container-pf .badge { + background: #292e34; + color: #fff; +} +.nav-pf-tertiary-nav .list-group-item .list-group-item-value { + padding-left: 5px; +} +.collapsed .nav-pf-secondary-nav { + left: 75px; +} +.collapsed .nav-pf-secondary-nav .list-group-item > a { + width: calc(200px - 20px); +} +.collapsed .nav-pf-secondary-nav .list-group-item > a > .list-group-item-value { + display: inline-block; +} +.collapsed .nav-pf-secondary-nav .list-group-item > a > .badge-container-pf { + display: inline-block; +} +.collapsed .nav-pf-tertiary-nav { + left: calc(75px + 200px); +} +.collapsed .nav-pf-tertiary-nav .list-group-item > a { + width: calc(200px - 20px); +} +.collapsed .nav-pf-tertiary-nav .list-group-item > a > .list-group-item-value { + display: inline-block; +} +.collapsed .nav-pf-tertiary-nav .list-group-item > a > .badge-container-pf { + display: inline-block; +} +.collapsed.collapsed-secondary-nav-pf, +.collapsed.collapsed-tertiary-nav-pf { + width: 200px; +} +.collapsed.collapsed-secondary-nav-pf .secondary-nav-item-pf:hover > a, +.collapsed.collapsed-tertiary-nav-pf .secondary-nav-item-pf:hover > a { + z-index: 1030; +} +.collapsed.collapsed-secondary-nav-pf .nav-pf-secondary-nav, +.collapsed.collapsed-tertiary-nav-pf .nav-pf-secondary-nav { + left: 0; +} +.collapsed.collapsed-secondary-nav-pf .nav-pf-tertiary-nav { + left: 200px; +} +.collapsed.collapsed-tertiary-nav-pf .nav-pf-tertiary-nav { + left: 0; +} +.collapsed.hover-secondary-nav-pf { + width: calc(75px + 200px); +} +.collapsed.hover-secondary-nav-pf.collapsed-secondary-nav-pf, +.collapsed.hover-secondary-nav-pf.collapsed-tertiary-nav-pf { + width: 200px; +} +.collapsed.hover-tertiary-nav-pf { + width: calc(75px + (200px * 2)); +} +.collapsed.hover-tertiary-nav-pf.collapsed-secondary-nav-pf { + width: calc(200px * 2); +} +.collapsed.hover-tertiary-nav-pf.collapsed-tertiary-nav-pf { + width: 200px; +} +.collapsed.nav-pf-vertical-with-badges .nav-pf-secondary-nav .list-group-item > a { + width: calc(250px - 20px); +} +.collapsed.nav-pf-vertical-with-badges .nav-pf-tertiary-nav { + left: calc(75px + 250px); +} +.collapsed.nav-pf-vertical-with-badges .nav-pf-tertiary-nav .list-group-item > a { + width: calc(250px - 20px); +} +.collapsed.nav-pf-vertical-with-badges.collapsed-secondary-nav-pf, +.collapsed.nav-pf-vertical-with-badges.collapsed-tertiary-nav-pf { + width: 250px; +} +.collapsed.nav-pf-vertical-with-badges.collapsed-secondary-nav-pf .nav-pf-tertiary-nav { + left: 250px; +} +.collapsed.nav-pf-vertical-with-badges.hover-secondary-nav-pf { + width: calc(75px + 250px); +} +.collapsed.nav-pf-vertical-with-badges.hover-secondary-nav-pf.collapsed-secondary-nav-pf, +.collapsed.nav-pf-vertical-with-badges.hover-secondary-nav-pf.collapsed-tertiary-nav-pf { + width: 250px; +} +.collapsed.nav-pf-vertical-with-badges.hover-tertiary-nav-pf { + width: calc(75px + (200px * 2)); +} +.collapsed.nav-pf-vertical-with-badges.hover-tertiary-nav-pf.collapsed-secondary-nav-pf { + width: calc(200px * 2); +} +.collapsed.nav-pf-vertical-with-badges.hover-tertiary-nav-pf.collapsed-tertiary-nav-pf { + width: 200px; +} +.secondary-collapse-toggle-pf { + display: none; + font-family: "FontAwesome"; + font-size: inherit; + opacity: 0; + pointer-events: none; + -webkit-font-smoothing: antialiased; +} +.secondary-collapse-toggle-pf:before { + content: "\F190"; +} +.secondary-collapse-toggle-pf.collapsed:before { + content: "\F18E"; +} +.tertiary-collapse-toggle-pf { + display: none; + font-family: "FontAwesome"; + font-size: inherit; + opacity: 0; + pointer-events: none; + -webkit-font-smoothing: antialiased; +} +.tertiary-collapse-toggle-pf:before { + content: "\F190"; +} +.tertiary-collapse-toggle-pf.collapsed:before { + content: "\F18E"; +} +.nav-pf-vertical-collapsible-menus .secondary-collapse-toggle-pf { + display: inline-block; +} +.nav-pf-vertical-collapsible-menus .secondary-nav-item-pf.active .secondary-collapse-toggle-pf { + opacity: 1; + pointer-events: all; +} +.nav-pf-vertical-collapsible-menus .tertiary-collapse-toggle-pf { + display: inline-block; +} +.nav-pf-vertical-collapsible-menus .tertiary-nav-item-pf.active .tertiary-collapse-toggle-pf { + opacity: 1; + pointer-events: all; +} +.show-mobile-nav .secondary-collapse-toggle-pf { + display: inline-block; + opacity: 1; + pointer-events: all; +} +.show-mobile-nav .secondary-collapse-toggle-pf:before { + content: "\F190"; +} +.show-mobile-nav .tertiary-collapse-toggle-pf { + display: inline-block; + opacity: 1; + pointer-events: all; +} +.show-mobile-nav .tertiary-collapse-toggle-pf:before { + content: "\F190"; +} +.force-hide-secondary-nav-pf .nav-pf-secondary-nav { + display: none !important; +} +.force-hide-secondary-nav-pf .nav-pf-tertiary-nav { + display: none !important; +} +.nav-pf-vertical.transitions { + transition: width 100ms; +} +.nav-pf-vertical.transitions .nav-pf-secondary-nav { + transition: visibility 100ms, opacity 100ms linear; +} +.nav-pf-vertical.transitions .nav-pf-tertiary-nav { + transition: visibility 100ms, opacity 100ms linear; +} +.wizard-pf { + height: 100%; + margin: 0 auto; + max-height: 900px; + padding: 10px; + width: auto; +} +.wizard-pf .modal-content { + height: 100%; +} +.wizard-pf-body { + padding: 0; + position: static; +} +/* styles the sidebard containing the sub-steps */ +.wizard-pf-sidebar { + background: #fafafa; + border-right: 1px solid #d1d1d1; + bottom: 0; + left: 0; + overflow-x: hidden; + overflow-y: auto; + position: absolute; + top: 0; +} +.wizard-pf-sidebar .list-group { + border-top: 0; + margin-bottom: 0; +} +.wizard-pf-sidebar .list-group-item { + background-color: transparent; + border-color: #ededed; + padding: 0; +} +.wizard-pf-sidebar .list-group-item > a { + color: #030303; + cursor: pointer; + display: block; + font-size: 14px; + font-weight: 700; + height: 50px; + outline: 0; + padding-top: 11px; + padding-left: 20px; + position: relative; + white-space: nowrap; + width: 14em; +} +.wizard-pf-sidebar .list-group-item > a:hover { + text-decoration: none; +} +.wizard-pf-sidebar .list-group-item.active { + background-color: #ededed; +} +.wizard-pf-sidebar .list-group-item.active:hover { + border-color: #ededed; +} +.wizard-pf-sidebar .list-group-item.active > a { + color: #39a5dc; + cursor: default; +} +.wizard-pf-sidebar .list-group-item.active > a:before { + background: #39a5dc; + content: " "; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 3px; +} +.wizard-pf-sidebar .list-group-item.active > a:after { + color: #39a5dc; + content: "\F105"; + display: block; + font-family: FontAwesome; + font-size: 24px; + font-weight: 500; + line-height: 30px; + padding-top: 10px; + position: absolute; + right: 23px; + top: 0; +} +.wizard-pf-substep-number { + display: inline-block; + margin-right: 5px; + vertical-align: middle; + width: 25px; +} +.wizard-pf-substep-title { + display: inline-block; + margin-right: 5px; + text-align: left; + vertical-align: middle; +} +/* styles the steps indicator across the top of the wizard */ +.wizard-pf-steps { + border-bottom: solid 1px #d1d1d1; + text-align: center; +} +.wizard-pf-steps-indicator { + font-size: 16px; + display: inline-block; + display: -ms-flexbox; + display: flex; + height: 120px; + -ms-flex-pack: distribute; + justify-content: space-around; + list-style: none; + padding: 38px 0 0; + /* draw the step number in the circle */ +} +.wizard-pf-steps-indicator li { + counter-increment: section; + float: left; + /* float for IE9 since it doesn't support flex. If items wrap, they overlap */ + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-preferred-size: 0; + flex-basis: 0; + line-height: 15px; + margin: 0; + padding: 0; + position: relative; + text-align: center; + /* draw the line between the circles */ + /* don't draw the line between the circles on the ends */ +} +.wizard-pf-steps-indicator li:before { + background-color: #bbb; + content: ""; + height: 2px; + left: 0; + position: absolute; + right: 0; + top: 40px; +} +.wizard-pf-steps-indicator li:first-child:before { + left: 50%; + right: 0; +} +.wizard-pf-steps-indicator li:last-child:before { + left: 0; + right: 50%; +} +.wizard-pf-steps-indicator li:only-of-type:before { + background-color: transparent; +} +.wizard-pf-steps-indicator li a { + color: #030303; + font-size: 16px; + cursor: pointer; + margin-left: 1em; + margin-right: 1em; + text-decoration: none; +} +.wizard-pf-steps-indicator li a:hover .wizard-pf-step-number { + background-color: #bbb; + border-color: #bbb; + color: #fff; +} +.wizard-pf-steps-indicator .wizard-pf-step-number { + background-color: #fff; + border-radius: 50%; + border: solid 2px #bbb; + color: #bbb; + font-size: 12px; + font-weight: 700; + height: 25px; + left: calc(50% - 13px); + line-height: 22px; + position: absolute; + top: 27px; + width: 25px; +} +.wizard-pf-steps-indicator .active .wizard-pf-step-number { + cursor: default; + background-color: #39a5dc; + border-color: #39a5dc; + color: #fff; +} +.wizard-pf-steps-indicator .viewed-pf .wizard-pf-step-number { + background-color: #fff; + border-color: #39a5dc; + color: #030303; +} +/* styles the main content portion of the wizard */ +.wizard-pf-main { + height: 100%; + margin-left: 253px; + /* this value is updated by js */ + overflow: auto; + padding: 3em; + vertical-align: top; +} +.wizard-pf-main .blank-slate-pf { + background-color: transparent; + border: none; + left: 0; + right: 0; +} +.wizard-pf-contents textarea { + resize: vertical; +} +/* styles the content of a review page */ +.wizard-pf-review-steps { + list-style: none; +} +.wizard-pf-review-steps .list-group, +.wizard-pf-review-steps .list-group-item { + border: none; + margin-bottom: 0; +} +.wizard-pf-review-steps > ul > li { + float: left; + line-height: 15px; + margin: 0; + padding-top: 0; + position: relative; + width: 100%; +} +.wizard-pf-review-steps > ul > li > a { + color: #030303; + cursor: pointer; + font-size: 16px; + padding-left: 30px; + padding-right: 5px; + text-decoration: none; + transition: 250ms; +} +.wizard-pf-review-steps > ul > li > a:before { + content: "\F107"; + display: block; + font-family: FontAwesome; + font-size: 24px; + font-weight: 500; + left: 20px; + position: absolute; + top: 0; +} +.wizard-pf-review-steps > ul > li > a.collapsed:before { + content: "\F105"; +} +.wizard-pf-review-substeps { + padding-left: 22px; +} +.wizard-pf-review-substeps > ul > li { + float: left; + line-height: 15px; + margin: 0; + position: relative; + width: 100%; +} +.wizard-pf-review-substeps > ul > li a { + color: #030303; + cursor: pointer; + font-size: 16px; + padding-left: 30px; + padding-right: 5px; + text-decoration: none; + transition: 250ms; +} +.wizard-pf-review-substeps > ul > li a:before { + content: "\F107"; + display: block; + font-family: FontAwesome; + font-size: 24px; + font-weight: 500; + left: 20px; + position: absolute; + top: 10px; +} +.wizard-pf-review-substeps > ul > li a.collapsed:before { + content: "\F105"; +} +.wizard-pf-review-content { + padding-top: 10px; + padding-left: 40px; +} +.wizard-pf-review-content .wizard-pf-review-item { + padding: 5px 0; +} +.wizard-pf-review-content .wizard-pf-review-item.sub-item { + margin-left: 10px; +} +.wizard-pf-review-content .wizard-pf-review-item .wizard-pf-review-item-label { + font-weight: 700; + padding-right: 10px; +} +.wizard-pf-review-content .wizard-pf-review-item .wizard-pf-review-item-field { + font-weight: 700; + margin: 5px 0; + padding-right: 10px; +} +.wizard-pf-review-content .wizard-pf-review-item .wizard-pf-review-item-field:first-of-type { + margin-top: 0; +} +.wizard-pf-review-content .wizard-pf-review-item .wizard-pf-review-item-field:last-of-type { + margin-bottom: 0; +} +.wizard-pf-review-content .wizard-pf-review-item .wizard-pf-review-item-field.sub-field { + margin-left: 10px; +} +.wizard-pf-success-icon { + color: #3f9c35; + font-size: 67.2px; + line-height: 67.2px; +} +/* styles the footer */ +.wizard-pf-footer { + border-top: 1px solid #d1d1d1; + bottom: 0; + left: 0; + margin-top: 0; + padding-bottom: 17px; + position: absolute; + right: 0; +} +.wizard-pf-footer .btn-cancel { + margin-right: 25px; +} +.wizard-pf-row { + bottom: 58px; + /* this value is updated by js */ + position: absolute; + overflow: hidden; + top: 172px; + /* this value is updated by js */ + width: 100%; +} +@media (min-width: 992px) { + .wizard-pf { + padding: 30px 0; + width: 900px; + } + .wizard-pf-sidebar .list-group-item > a { + width: 18em; + } +} \ No newline at end of file diff --git a/dist-demo/vendor.js b/dist-demo/vendor.js new file mode 100644 index 000000000..3e4ae138f --- /dev/null +++ b/dist-demo/vendor.js @@ -0,0 +1,2838 @@ +webpackJsonp([0],{ + +/***/ "./node_modules/@angular/common/@angular/common.es5.js": +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("Object.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(\"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_core__ = __webpack_require__(\"./node_modules/@angular/core/@angular/core.es5.js\");\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgLocaleLocalization\", function() { return NgLocaleLocalization; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgLocalization\", function() { return NgLocalization; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵparseCookieValue\", function() { return parseCookieValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CommonModule\", function() { return CommonModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgClass\", function() { return NgClass; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgFor\", function() { return NgFor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgForOf\", function() { return NgForOf; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgForOfContext\", function() { return NgForOfContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgIf\", function() { return NgIf; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgIfContext\", function() { return NgIfContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgPlural\", function() { return NgPlural; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgPluralCase\", function() { return NgPluralCase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgStyle\", function() { return NgStyle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgSwitch\", function() { return NgSwitch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgSwitchCase\", function() { return NgSwitchCase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgSwitchDefault\", function() { return NgSwitchDefault; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgTemplateOutlet\", function() { return NgTemplateOutlet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgComponentOutlet\", function() { return NgComponentOutlet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOCUMENT\", function() { return DOCUMENT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AsyncPipe\", function() { return AsyncPipe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DatePipe\", function() { return DatePipe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"I18nPluralPipe\", function() { return I18nPluralPipe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"I18nSelectPipe\", function() { return I18nSelectPipe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonPipe\", function() { return JsonPipe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LowerCasePipe\", function() { return LowerCasePipe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CurrencyPipe\", function() { return CurrencyPipe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DecimalPipe\", function() { return DecimalPipe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PercentPipe\", function() { return PercentPipe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SlicePipe\", function() { return SlicePipe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UpperCasePipe\", function() { return UpperCasePipe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TitleCasePipe\", function() { return TitleCasePipe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵPLATFORM_BROWSER_ID\", function() { return PLATFORM_BROWSER_ID; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵPLATFORM_SERVER_ID\", function() { return PLATFORM_SERVER_ID; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵPLATFORM_WORKER_APP_ID\", function() { return PLATFORM_WORKER_APP_ID; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵPLATFORM_WORKER_UI_ID\", function() { return PLATFORM_WORKER_UI_ID; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPlatformBrowser\", function() { return isPlatformBrowser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPlatformServer\", function() { return isPlatformServer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPlatformWorkerApp\", function() { return isPlatformWorkerApp; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPlatformWorkerUi\", function() { return isPlatformWorkerUi; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VERSION\", function() { return VERSION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PlatformLocation\", function() { return PlatformLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LOCATION_INITIALIZED\", function() { return LOCATION_INITIALIZED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocationStrategy\", function() { return LocationStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"APP_BASE_HREF\", function() { return APP_BASE_HREF; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HashLocationStrategy\", function() { return HashLocationStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PathLocationStrategy\", function() { return PathLocationStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Location\", function() { return Location; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵa\", function() { return COMMON_DIRECTIVES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵb\", function() { return COMMON_PIPES; });\n\n/**\n * @license Angular v4.3.2\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\n */\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * This class should not be used directly by an application developer. Instead, use\n * {\\@link Location}.\n *\n * `PlatformLocation` encapsulates all calls to DOM apis, which allows the Router to be platform\n * agnostic.\n * This means that we can have different implementation of `PlatformLocation` for the different\n * platforms that angular supports. For example, `\\@angular/platform-browser` provides an\n * implementation specific to the browser environment, while `\\@angular/platform-webworker` provides\n * one suitable for use with web workers.\n *\n * The `PlatformLocation` class is used directly by all implementations of {\\@link LocationStrategy}\n * when they need to interact with the DOM apis like pushState, popState, etc...\n *\n * {\\@link LocationStrategy} in turn is used by the {\\@link Location} service which is used directly\n * by the {\\@link Router} in order to navigate between routes. Since all interactions between {\\@link\n * Router} /\n * {\\@link Location} / {\\@link LocationStrategy} and DOM apis flow through the `PlatformLocation`\n * class they are all platform independent.\n *\n * \\@stable\n * @abstract\n */\nvar PlatformLocation = (function () {\n function PlatformLocation() {\n }\n /**\n * @abstract\n * @return {?}\n */\n PlatformLocation.prototype.getBaseHrefFromDOM = function () { };\n /**\n * @abstract\n * @param {?} fn\n * @return {?}\n */\n PlatformLocation.prototype.onPopState = function (fn) { };\n /**\n * @abstract\n * @param {?} fn\n * @return {?}\n */\n PlatformLocation.prototype.onHashChange = function (fn) { };\n /**\n * @abstract\n * @return {?}\n */\n PlatformLocation.prototype.pathname = function () { };\n /**\n * @abstract\n * @return {?}\n */\n PlatformLocation.prototype.search = function () { };\n /**\n * @abstract\n * @return {?}\n */\n PlatformLocation.prototype.hash = function () { };\n /**\n * @abstract\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n PlatformLocation.prototype.replaceState = function (state, title, url) { };\n /**\n * @abstract\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n PlatformLocation.prototype.pushState = function (state, title, url) { };\n /**\n * @abstract\n * @return {?}\n */\n PlatformLocation.prototype.forward = function () { };\n /**\n * @abstract\n * @return {?}\n */\n PlatformLocation.prototype.back = function () { };\n return PlatformLocation;\n}());\n/**\n * \\@whatItDoes indicates when a location is initialized\n * \\@experimental\n */\nvar LOCATION_INITIALIZED = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"InjectionToken\"]('Location Initialized');\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * `LocationStrategy` is responsible for representing and reading route state\n * from the browser's URL. Angular provides two strategies:\n * {\\@link HashLocationStrategy} and {\\@link PathLocationStrategy}.\n *\n * This is used under the hood of the {\\@link Location} service.\n *\n * Applications should use the {\\@link Router} or {\\@link Location} services to\n * interact with application route state.\n *\n * For instance, {\\@link HashLocationStrategy} produces URLs like\n * `http://example.com#/foo`, and {\\@link PathLocationStrategy} produces\n * `http://example.com/foo` as an equivalent URL.\n *\n * See these two classes for more.\n *\n * \\@stable\n * @abstract\n */\nvar LocationStrategy = (function () {\n function LocationStrategy() {\n }\n /**\n * @abstract\n * @param {?=} includeHash\n * @return {?}\n */\n LocationStrategy.prototype.path = function (includeHash) { };\n /**\n * @abstract\n * @param {?} internal\n * @return {?}\n */\n LocationStrategy.prototype.prepareExternalUrl = function (internal) { };\n /**\n * @abstract\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @param {?} queryParams\n * @return {?}\n */\n LocationStrategy.prototype.pushState = function (state, title, url, queryParams) { };\n /**\n * @abstract\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @param {?} queryParams\n * @return {?}\n */\n LocationStrategy.prototype.replaceState = function (state, title, url, queryParams) { };\n /**\n * @abstract\n * @return {?}\n */\n LocationStrategy.prototype.forward = function () { };\n /**\n * @abstract\n * @return {?}\n */\n LocationStrategy.prototype.back = function () { };\n /**\n * @abstract\n * @param {?} fn\n * @return {?}\n */\n LocationStrategy.prototype.onPopState = function (fn) { };\n /**\n * @abstract\n * @return {?}\n */\n LocationStrategy.prototype.getBaseHref = function () { };\n return LocationStrategy;\n}());\n/**\n * The `APP_BASE_HREF` token represents the base href to be used with the\n * {\\@link PathLocationStrategy}.\n *\n * If you're using {\\@link PathLocationStrategy}, you must provide a provider to a string\n * representing the URL prefix that should be preserved when generating and recognizing\n * URLs.\n *\n * ### Example\n *\n * ```typescript\n * import {Component, NgModule} from '\\@angular/core';\n * import {APP_BASE_HREF} from '\\@angular/common';\n *\n * \\@NgModule({\n * providers: [{provide: APP_BASE_HREF, useValue: '/my/app'}]\n * })\n * class AppModule {}\n * ```\n *\n * \\@stable\n */\nvar APP_BASE_HREF = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"InjectionToken\"]('appBaseHref');\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@whatItDoes `Location` is a service that applications can use to interact with a browser's URL.\n * \\@description\n * Depending on which {\\@link LocationStrategy} is used, `Location` will either persist\n * to the URL's path or the URL's hash segment.\n *\n * Note: it's better to use {\\@link Router#navigate} service to trigger route changes. Use\n * `Location` only if you need to interact with or create normalized URLs outside of\n * routing.\n *\n * `Location` is responsible for normalizing the URL against the application's base href.\n * A normalized URL is absolute from the URL host, includes the application's base href, and has no\n * trailing slash:\n * - `/my/app/user/123` is normalized\n * - `my/app/user/123` **is not** normalized\n * - `/my/app/user/123/` **is not** normalized\n *\n * ### Example\n * {\\@example common/location/ts/path_location_component.ts region='LocationComponent'}\n * \\@stable\n */\nvar Location = (function () {\n /**\n * @param {?} platformStrategy\n */\n function Location(platformStrategy) {\n var _this = this;\n /**\n * \\@internal\n */\n this._subject = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"EventEmitter\"]();\n this._platformStrategy = platformStrategy;\n var browserBaseHref = this._platformStrategy.getBaseHref();\n this._baseHref = Location.stripTrailingSlash(_stripIndexHtml(browserBaseHref));\n this._platformStrategy.onPopState(function (ev) {\n _this._subject.emit({\n 'url': _this.path(true),\n 'pop': true,\n 'type': ev.type,\n });\n });\n }\n /**\n * @param {?=} includeHash\n * @return {?}\n */\n Location.prototype.path = function (includeHash) {\n if (includeHash === void 0) { includeHash = false; }\n return this.normalize(this._platformStrategy.path(includeHash));\n };\n /**\n * Normalizes the given path and compares to the current normalized path.\n * @param {?} path\n * @param {?=} query\n * @return {?}\n */\n Location.prototype.isCurrentPathEqualTo = function (path, query) {\n if (query === void 0) { query = ''; }\n return this.path() == this.normalize(path + Location.normalizeQueryParams(query));\n };\n /**\n * Given a string representing a URL, returns the normalized URL path without leading or\n * trailing slashes.\n * @param {?} url\n * @return {?}\n */\n Location.prototype.normalize = function (url) {\n return Location.stripTrailingSlash(_stripBaseHref(this._baseHref, _stripIndexHtml(url)));\n };\n /**\n * Given a string representing a URL, returns the platform-specific external URL path.\n * If the given URL doesn't begin with a leading slash (`'/'`), this method adds one\n * before normalizing. This method will also add a hash if `HashLocationStrategy` is\n * used, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.\n * @param {?} url\n * @return {?}\n */\n Location.prototype.prepareExternalUrl = function (url) {\n if (url && url[0] !== '/') {\n url = '/' + url;\n }\n return this._platformStrategy.prepareExternalUrl(url);\n };\n /**\n * Changes the browsers URL to the normalized version of the given URL, and pushes a\n * new item onto the platform's history.\n * @param {?} path\n * @param {?=} query\n * @return {?}\n */\n Location.prototype.go = function (path, query) {\n if (query === void 0) { query = ''; }\n this._platformStrategy.pushState(null, '', path, query);\n };\n /**\n * Changes the browsers URL to the normalized version of the given URL, and replaces\n * the top item on the platform's history stack.\n * @param {?} path\n * @param {?=} query\n * @return {?}\n */\n Location.prototype.replaceState = function (path, query) {\n if (query === void 0) { query = ''; }\n this._platformStrategy.replaceState(null, '', path, query);\n };\n /**\n * Navigates forward in the platform's history.\n * @return {?}\n */\n Location.prototype.forward = function () { this._platformStrategy.forward(); };\n /**\n * Navigates back in the platform's history.\n * @return {?}\n */\n Location.prototype.back = function () { this._platformStrategy.back(); };\n /**\n * Subscribe to the platform's `popState` events.\n * @param {?} onNext\n * @param {?=} onThrow\n * @param {?=} onReturn\n * @return {?}\n */\n Location.prototype.subscribe = function (onNext, onThrow, onReturn) {\n return this._subject.subscribe({ next: onNext, error: onThrow, complete: onReturn });\n };\n /**\n * Given a string of url parameters, prepend with '?' if needed, otherwise return parameters as\n * is.\n * @param {?} params\n * @return {?}\n */\n Location.normalizeQueryParams = function (params) {\n return params && params[0] !== '?' ? '?' + params : params;\n };\n /**\n * Given 2 parts of a url, join them with a slash if needed.\n * @param {?} start\n * @param {?} end\n * @return {?}\n */\n Location.joinWithSlash = function (start, end) {\n if (start.length == 0) {\n return end;\n }\n if (end.length == 0) {\n return start;\n }\n var /** @type {?} */ slashes = 0;\n if (start.endsWith('/')) {\n slashes++;\n }\n if (end.startsWith('/')) {\n slashes++;\n }\n if (slashes == 2) {\n return start + end.substring(1);\n }\n if (slashes == 1) {\n return start + end;\n }\n return start + '/' + end;\n };\n /**\n * If url has a trailing slash, remove it, otherwise return url as is. This\n * method looks for the first occurence of either #, ?, or the end of the\n * line as `/` characters after any of these should not be replaced.\n * @param {?} url\n * @return {?}\n */\n Location.stripTrailingSlash = function (url) {\n var /** @type {?} */ match = url.match(/#|\\?|$/);\n var /** @type {?} */ pathEndIdx = match && match.index || url.length;\n var /** @type {?} */ droppedSlashIdx = pathEndIdx - (url[pathEndIdx - 1] === '/' ? 1 : 0);\n return url.slice(0, droppedSlashIdx) + url.slice(pathEndIdx);\n };\n return Location;\n}());\nLocation.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nLocation.ctorParameters = function () { return [\n { type: LocationStrategy, },\n]; };\n/**\n * @param {?} baseHref\n * @param {?} url\n * @return {?}\n */\nfunction _stripBaseHref(baseHref, url) {\n return baseHref && url.startsWith(baseHref) ? url.substring(baseHref.length) : url;\n}\n/**\n * @param {?} url\n * @return {?}\n */\nfunction _stripIndexHtml(url) {\n return url.replace(/\\/index.html$/, '');\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@whatItDoes Use URL hash for storing application location data.\n * \\@description\n * `HashLocationStrategy` is a {\\@link LocationStrategy} used to configure the\n * {\\@link Location} service to represent its state in the\n * [hash fragment](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax)\n * of the browser's URL.\n *\n * For instance, if you call `location.go('/foo')`, the browser's URL will become\n * `example.com#/foo`.\n *\n * ### Example\n *\n * {\\@example common/location/ts/hash_location_component.ts region='LocationComponent'}\n *\n * \\@stable\n */\nvar HashLocationStrategy = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](HashLocationStrategy, _super);\n /**\n * @param {?} _platformLocation\n * @param {?=} _baseHref\n */\n function HashLocationStrategy(_platformLocation, _baseHref) {\n var _this = _super.call(this) || this;\n _this._platformLocation = _platformLocation;\n _this._baseHref = '';\n if (_baseHref != null) {\n _this._baseHref = _baseHref;\n }\n return _this;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n HashLocationStrategy.prototype.onPopState = function (fn) {\n this._platformLocation.onPopState(fn);\n this._platformLocation.onHashChange(fn);\n };\n /**\n * @return {?}\n */\n HashLocationStrategy.prototype.getBaseHref = function () { return this._baseHref; };\n /**\n * @param {?=} includeHash\n * @return {?}\n */\n HashLocationStrategy.prototype.path = function (includeHash) {\n if (includeHash === void 0) { includeHash = false; }\n // the hash value is always prefixed with a `#`\n // and if it is empty then it will stay empty\n var /** @type {?} */ path = this._platformLocation.hash;\n if (path == null)\n path = '#';\n return path.length > 0 ? path.substring(1) : path;\n };\n /**\n * @param {?} internal\n * @return {?}\n */\n HashLocationStrategy.prototype.prepareExternalUrl = function (internal) {\n var /** @type {?} */ url = Location.joinWithSlash(this._baseHref, internal);\n return url.length > 0 ? ('#' + url) : url;\n };\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} path\n * @param {?} queryParams\n * @return {?}\n */\n HashLocationStrategy.prototype.pushState = function (state, title, path, queryParams) {\n var /** @type {?} */ url = this.prepareExternalUrl(path + Location.normalizeQueryParams(queryParams));\n if (url.length == 0) {\n url = this._platformLocation.pathname;\n }\n this._platformLocation.pushState(state, title, url);\n };\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} path\n * @param {?} queryParams\n * @return {?}\n */\n HashLocationStrategy.prototype.replaceState = function (state, title, path, queryParams) {\n var /** @type {?} */ url = this.prepareExternalUrl(path + Location.normalizeQueryParams(queryParams));\n if (url.length == 0) {\n url = this._platformLocation.pathname;\n }\n this._platformLocation.replaceState(state, title, url);\n };\n /**\n * @return {?}\n */\n HashLocationStrategy.prototype.forward = function () { this._platformLocation.forward(); };\n /**\n * @return {?}\n */\n HashLocationStrategy.prototype.back = function () { this._platformLocation.back(); };\n return HashLocationStrategy;\n}(LocationStrategy));\nHashLocationStrategy.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nHashLocationStrategy.ctorParameters = function () { return [\n { type: PlatformLocation, },\n { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [APP_BASE_HREF,] },] },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@whatItDoes Use URL for storing application location data.\n * \\@description\n * `PathLocationStrategy` is a {\\@link LocationStrategy} used to configure the\n * {\\@link Location} service to represent its state in the\n * [path](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) of the\n * browser's URL.\n *\n * If you're using `PathLocationStrategy`, you must provide a {\\@link APP_BASE_HREF}\n * or add a base element to the document. This URL prefix that will be preserved\n * when generating and recognizing URLs.\n *\n * For instance, if you provide an `APP_BASE_HREF` of `'/my/app'` and call\n * `location.go('/foo')`, the browser's URL will become\n * `example.com/my/app/foo`.\n *\n * Similarly, if you add `` to the document and call\n * `location.go('/foo')`, the browser's URL will become\n * `example.com/my/app/foo`.\n *\n * ### Example\n *\n * {\\@example common/location/ts/path_location_component.ts region='LocationComponent'}\n *\n * \\@stable\n */\nvar PathLocationStrategy = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](PathLocationStrategy, _super);\n /**\n * @param {?} _platformLocation\n * @param {?=} href\n */\n function PathLocationStrategy(_platformLocation, href) {\n var _this = _super.call(this) || this;\n _this._platformLocation = _platformLocation;\n if (href == null) {\n href = _this._platformLocation.getBaseHrefFromDOM();\n }\n if (href == null) {\n throw new Error(\"No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.\");\n }\n _this._baseHref = href;\n return _this;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n PathLocationStrategy.prototype.onPopState = function (fn) {\n this._platformLocation.onPopState(fn);\n this._platformLocation.onHashChange(fn);\n };\n /**\n * @return {?}\n */\n PathLocationStrategy.prototype.getBaseHref = function () { return this._baseHref; };\n /**\n * @param {?} internal\n * @return {?}\n */\n PathLocationStrategy.prototype.prepareExternalUrl = function (internal) {\n return Location.joinWithSlash(this._baseHref, internal);\n };\n /**\n * @param {?=} includeHash\n * @return {?}\n */\n PathLocationStrategy.prototype.path = function (includeHash) {\n if (includeHash === void 0) { includeHash = false; }\n var /** @type {?} */ pathname = this._platformLocation.pathname +\n Location.normalizeQueryParams(this._platformLocation.search);\n var /** @type {?} */ hash = this._platformLocation.hash;\n return hash && includeHash ? \"\" + pathname + hash : pathname;\n };\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @param {?} queryParams\n * @return {?}\n */\n PathLocationStrategy.prototype.pushState = function (state, title, url, queryParams) {\n var /** @type {?} */ externalUrl = this.prepareExternalUrl(url + Location.normalizeQueryParams(queryParams));\n this._platformLocation.pushState(state, title, externalUrl);\n };\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @param {?} queryParams\n * @return {?}\n */\n PathLocationStrategy.prototype.replaceState = function (state, title, url, queryParams) {\n var /** @type {?} */ externalUrl = this.prepareExternalUrl(url + Location.normalizeQueryParams(queryParams));\n this._platformLocation.replaceState(state, title, externalUrl);\n };\n /**\n * @return {?}\n */\n PathLocationStrategy.prototype.forward = function () { this._platformLocation.forward(); };\n /**\n * @return {?}\n */\n PathLocationStrategy.prototype.back = function () { this._platformLocation.back(); };\n return PathLocationStrategy;\n}(LocationStrategy));\nPathLocationStrategy.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nPathLocationStrategy.ctorParameters = function () { return [\n { type: PlatformLocation, },\n { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [APP_BASE_HREF,] },] },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@experimental\n * @abstract\n */\nvar NgLocalization = (function () {\n function NgLocalization() {\n }\n /**\n * @abstract\n * @param {?} value\n * @return {?}\n */\n NgLocalization.prototype.getPluralCategory = function (value) { };\n return NgLocalization;\n}());\n/**\n * Returns the plural category for a given value.\n * - \"=value\" when the case exists,\n * - the plural category otherwise\n *\n * \\@internal\n * @param {?} value\n * @param {?} cases\n * @param {?} ngLocalization\n * @return {?}\n */\nfunction getPluralCategory(value, cases, ngLocalization) {\n var /** @type {?} */ key = \"=\" + value;\n if (cases.indexOf(key) > -1) {\n return key;\n }\n key = ngLocalization.getPluralCategory(value);\n if (cases.indexOf(key) > -1) {\n return key;\n }\n if (cases.indexOf('other') > -1) {\n return 'other';\n }\n throw new Error(\"No plural message found for value \\\"\" + value + \"\\\"\");\n}\n/**\n * Returns the plural case based on the locale\n *\n * \\@experimental\n */\nvar NgLocaleLocalization = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](NgLocaleLocalization, _super);\n /**\n * @param {?} locale\n */\n function NgLocaleLocalization(locale) {\n var _this = _super.call(this) || this;\n _this.locale = locale;\n return _this;\n }\n /**\n * @param {?} value\n * @return {?}\n */\n NgLocaleLocalization.prototype.getPluralCategory = function (value) {\n var /** @type {?} */ plural = getPluralCase(this.locale, value);\n switch (plural) {\n case Plural.Zero:\n return 'zero';\n case Plural.One:\n return 'one';\n case Plural.Two:\n return 'two';\n case Plural.Few:\n return 'few';\n case Plural.Many:\n return 'many';\n default:\n return 'other';\n }\n };\n return NgLocaleLocalization;\n}(NgLocalization));\nNgLocaleLocalization.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nNgLocaleLocalization.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"LOCALE_ID\"],] },] },\n]; };\nvar Plural = {};\nPlural.Zero = 0;\nPlural.One = 1;\nPlural.Two = 2;\nPlural.Few = 3;\nPlural.Many = 4;\nPlural.Other = 5;\nPlural[Plural.Zero] = \"Zero\";\nPlural[Plural.One] = \"One\";\nPlural[Plural.Two] = \"Two\";\nPlural[Plural.Few] = \"Few\";\nPlural[Plural.Many] = \"Many\";\nPlural[Plural.Other] = \"Other\";\n/**\n * Returns the plural case based on the locale\n *\n * \\@experimental\n * @param {?} locale\n * @param {?} nLike\n * @return {?}\n */\nfunction getPluralCase(locale, nLike) {\n // TODO(vicb): lazy compute\n if (typeof nLike === 'string') {\n nLike = parseInt(/** @type {?} */ (nLike), 10);\n }\n var /** @type {?} */ n = (nLike);\n var /** @type {?} */ nDecimal = n.toString().replace(/^[^.]*\\.?/, '');\n var /** @type {?} */ i = Math.floor(Math.abs(n));\n var /** @type {?} */ v = nDecimal.length;\n var /** @type {?} */ f = parseInt(nDecimal, 10);\n var /** @type {?} */ t = parseInt(n.toString().replace(/^[^.]*\\.?|0+$/g, ''), 10) || 0;\n var /** @type {?} */ lang = locale.split('-')[0].toLowerCase();\n switch (lang) {\n case 'af':\n case 'asa':\n case 'az':\n case 'bem':\n case 'bez':\n case 'bg':\n case 'brx':\n case 'ce':\n case 'cgg':\n case 'chr':\n case 'ckb':\n case 'ee':\n case 'el':\n case 'eo':\n case 'es':\n case 'eu':\n case 'fo':\n case 'fur':\n case 'gsw':\n case 'ha':\n case 'haw':\n case 'hu':\n case 'jgo':\n case 'jmc':\n case 'ka':\n case 'kk':\n case 'kkj':\n case 'kl':\n case 'ks':\n case 'ksb':\n case 'ky':\n case 'lb':\n case 'lg':\n case 'mas':\n case 'mgo':\n case 'ml':\n case 'mn':\n case 'nb':\n case 'nd':\n case 'ne':\n case 'nn':\n case 'nnh':\n case 'nyn':\n case 'om':\n case 'or':\n case 'os':\n case 'ps':\n case 'rm':\n case 'rof':\n case 'rwk':\n case 'saq':\n case 'seh':\n case 'sn':\n case 'so':\n case 'sq':\n case 'ta':\n case 'te':\n case 'teo':\n case 'tk':\n case 'tr':\n case 'ug':\n case 'uz':\n case 'vo':\n case 'vun':\n case 'wae':\n case 'xog':\n if (n === 1)\n return Plural.One;\n return Plural.Other;\n case 'ak':\n case 'ln':\n case 'mg':\n case 'pa':\n case 'ti':\n if (n === Math.floor(n) && n >= 0 && n <= 1)\n return Plural.One;\n return Plural.Other;\n case 'am':\n case 'as':\n case 'bn':\n case 'fa':\n case 'gu':\n case 'hi':\n case 'kn':\n case 'mr':\n case 'zu':\n if (i === 0 || n === 1)\n return Plural.One;\n return Plural.Other;\n case 'ar':\n if (n === 0)\n return Plural.Zero;\n if (n === 1)\n return Plural.One;\n if (n === 2)\n return Plural.Two;\n if (n % 100 === Math.floor(n % 100) && n % 100 >= 3 && n % 100 <= 10)\n return Plural.Few;\n if (n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 99)\n return Plural.Many;\n return Plural.Other;\n case 'ast':\n case 'ca':\n case 'de':\n case 'en':\n case 'et':\n case 'fi':\n case 'fy':\n case 'gl':\n case 'it':\n case 'nl':\n case 'sv':\n case 'sw':\n case 'ur':\n case 'yi':\n if (i === 1 && v === 0)\n return Plural.One;\n return Plural.Other;\n case 'be':\n if (n % 10 === 1 && !(n % 100 === 11))\n return Plural.One;\n if (n % 10 === Math.floor(n % 10) && n % 10 >= 2 && n % 10 <= 4 &&\n !(n % 100 >= 12 && n % 100 <= 14))\n return Plural.Few;\n if (n % 10 === 0 || n % 10 === Math.floor(n % 10) && n % 10 >= 5 && n % 10 <= 9 ||\n n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 14)\n return Plural.Many;\n return Plural.Other;\n case 'br':\n if (n % 10 === 1 && !(n % 100 === 11 || n % 100 === 71 || n % 100 === 91))\n return Plural.One;\n if (n % 10 === 2 && !(n % 100 === 12 || n % 100 === 72 || n % 100 === 92))\n return Plural.Two;\n if (n % 10 === Math.floor(n % 10) && (n % 10 >= 3 && n % 10 <= 4 || n % 10 === 9) &&\n !(n % 100 >= 10 && n % 100 <= 19 || n % 100 >= 70 && n % 100 <= 79 ||\n n % 100 >= 90 && n % 100 <= 99))\n return Plural.Few;\n if (!(n === 0) && n % 1e6 === 0)\n return Plural.Many;\n return Plural.Other;\n case 'bs':\n case 'hr':\n case 'sr':\n if (v === 0 && i % 10 === 1 && !(i % 100 === 11) || f % 10 === 1 && !(f % 100 === 11))\n return Plural.One;\n if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&\n !(i % 100 >= 12 && i % 100 <= 14) ||\n f % 10 === Math.floor(f % 10) && f % 10 >= 2 && f % 10 <= 4 &&\n !(f % 100 >= 12 && f % 100 <= 14))\n return Plural.Few;\n return Plural.Other;\n case 'cs':\n case 'sk':\n if (i === 1 && v === 0)\n return Plural.One;\n if (i === Math.floor(i) && i >= 2 && i <= 4 && v === 0)\n return Plural.Few;\n if (!(v === 0))\n return Plural.Many;\n return Plural.Other;\n case 'cy':\n if (n === 0)\n return Plural.Zero;\n if (n === 1)\n return Plural.One;\n if (n === 2)\n return Plural.Two;\n if (n === 3)\n return Plural.Few;\n if (n === 6)\n return Plural.Many;\n return Plural.Other;\n case 'da':\n if (n === 1 || !(t === 0) && (i === 0 || i === 1))\n return Plural.One;\n return Plural.Other;\n case 'dsb':\n case 'hsb':\n if (v === 0 && i % 100 === 1 || f % 100 === 1)\n return Plural.One;\n if (v === 0 && i % 100 === 2 || f % 100 === 2)\n return Plural.Two;\n if (v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 3 && i % 100 <= 4 ||\n f % 100 === Math.floor(f % 100) && f % 100 >= 3 && f % 100 <= 4)\n return Plural.Few;\n return Plural.Other;\n case 'ff':\n case 'fr':\n case 'hy':\n case 'kab':\n if (i === 0 || i === 1)\n return Plural.One;\n return Plural.Other;\n case 'fil':\n if (v === 0 && (i === 1 || i === 2 || i === 3) ||\n v === 0 && !(i % 10 === 4 || i % 10 === 6 || i % 10 === 9) ||\n !(v === 0) && !(f % 10 === 4 || f % 10 === 6 || f % 10 === 9))\n return Plural.One;\n return Plural.Other;\n case 'ga':\n if (n === 1)\n return Plural.One;\n if (n === 2)\n return Plural.Two;\n if (n === Math.floor(n) && n >= 3 && n <= 6)\n return Plural.Few;\n if (n === Math.floor(n) && n >= 7 && n <= 10)\n return Plural.Many;\n return Plural.Other;\n case 'gd':\n if (n === 1 || n === 11)\n return Plural.One;\n if (n === 2 || n === 12)\n return Plural.Two;\n if (n === Math.floor(n) && (n >= 3 && n <= 10 || n >= 13 && n <= 19))\n return Plural.Few;\n return Plural.Other;\n case 'gv':\n if (v === 0 && i % 10 === 1)\n return Plural.One;\n if (v === 0 && i % 10 === 2)\n return Plural.Two;\n if (v === 0 &&\n (i % 100 === 0 || i % 100 === 20 || i % 100 === 40 || i % 100 === 60 || i % 100 === 80))\n return Plural.Few;\n if (!(v === 0))\n return Plural.Many;\n return Plural.Other;\n case 'he':\n if (i === 1 && v === 0)\n return Plural.One;\n if (i === 2 && v === 0)\n return Plural.Two;\n if (v === 0 && !(n >= 0 && n <= 10) && n % 10 === 0)\n return Plural.Many;\n return Plural.Other;\n case 'is':\n if (t === 0 && i % 10 === 1 && !(i % 100 === 11) || !(t === 0))\n return Plural.One;\n return Plural.Other;\n case 'ksh':\n if (n === 0)\n return Plural.Zero;\n if (n === 1)\n return Plural.One;\n return Plural.Other;\n case 'kw':\n case 'naq':\n case 'se':\n case 'smn':\n if (n === 1)\n return Plural.One;\n if (n === 2)\n return Plural.Two;\n return Plural.Other;\n case 'lag':\n if (n === 0)\n return Plural.Zero;\n if ((i === 0 || i === 1) && !(n === 0))\n return Plural.One;\n return Plural.Other;\n case 'lt':\n if (n % 10 === 1 && !(n % 100 >= 11 && n % 100 <= 19))\n return Plural.One;\n if (n % 10 === Math.floor(n % 10) && n % 10 >= 2 && n % 10 <= 9 &&\n !(n % 100 >= 11 && n % 100 <= 19))\n return Plural.Few;\n if (!(f === 0))\n return Plural.Many;\n return Plural.Other;\n case 'lv':\n case 'prg':\n if (n % 10 === 0 || n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 19 ||\n v === 2 && f % 100 === Math.floor(f % 100) && f % 100 >= 11 && f % 100 <= 19)\n return Plural.Zero;\n if (n % 10 === 1 && !(n % 100 === 11) || v === 2 && f % 10 === 1 && !(f % 100 === 11) ||\n !(v === 2) && f % 10 === 1)\n return Plural.One;\n return Plural.Other;\n case 'mk':\n if (v === 0 && i % 10 === 1 || f % 10 === 1)\n return Plural.One;\n return Plural.Other;\n case 'mt':\n if (n === 1)\n return Plural.One;\n if (n === 0 || n % 100 === Math.floor(n % 100) && n % 100 >= 2 && n % 100 <= 10)\n return Plural.Few;\n if (n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 19)\n return Plural.Many;\n return Plural.Other;\n case 'pl':\n if (i === 1 && v === 0)\n return Plural.One;\n if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&\n !(i % 100 >= 12 && i % 100 <= 14))\n return Plural.Few;\n if (v === 0 && !(i === 1) && i % 10 === Math.floor(i % 10) && i % 10 >= 0 && i % 10 <= 1 ||\n v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 5 && i % 10 <= 9 ||\n v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 12 && i % 100 <= 14)\n return Plural.Many;\n return Plural.Other;\n case 'pt':\n if (n === Math.floor(n) && n >= 0 && n <= 2 && !(n === 2))\n return Plural.One;\n return Plural.Other;\n case 'ro':\n if (i === 1 && v === 0)\n return Plural.One;\n if (!(v === 0) || n === 0 ||\n !(n === 1) && n % 100 === Math.floor(n % 100) && n % 100 >= 1 && n % 100 <= 19)\n return Plural.Few;\n return Plural.Other;\n case 'ru':\n case 'uk':\n if (v === 0 && i % 10 === 1 && !(i % 100 === 11))\n return Plural.One;\n if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&\n !(i % 100 >= 12 && i % 100 <= 14))\n return Plural.Few;\n if (v === 0 && i % 10 === 0 ||\n v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 5 && i % 10 <= 9 ||\n v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 11 && i % 100 <= 14)\n return Plural.Many;\n return Plural.Other;\n case 'shi':\n if (i === 0 || n === 1)\n return Plural.One;\n if (n === Math.floor(n) && n >= 2 && n <= 10)\n return Plural.Few;\n return Plural.Other;\n case 'si':\n if (n === 0 || n === 1 || i === 0 && f === 1)\n return Plural.One;\n return Plural.Other;\n case 'sl':\n if (v === 0 && i % 100 === 1)\n return Plural.One;\n if (v === 0 && i % 100 === 2)\n return Plural.Two;\n if (v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 3 && i % 100 <= 4 || !(v === 0))\n return Plural.Few;\n return Plural.Other;\n case 'tzm':\n if (n === Math.floor(n) && n >= 0 && n <= 1 || n === Math.floor(n) && n >= 11 && n <= 99)\n return Plural.One;\n return Plural.Other;\n // When there is no specification, the default is always \"other\"\n // Spec: http://cldr.unicode.org/index/cldr-spec/plural-rules\n // > other (required—general plural form — also used if the language only has a single form)\n default:\n return Plural.Other;\n }\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n * @param {?} cookieStr\n * @param {?} name\n * @return {?}\n */\nfunction parseCookieValue(cookieStr, name) {\n name = encodeURIComponent(name);\n for (var _i = 0, _a = cookieStr.split(';'); _i < _a.length; _i++) {\n var cookie = _a[_i];\n var /** @type {?} */ eqIndex = cookie.indexOf('=');\n var _b = eqIndex == -1 ? [cookie, ''] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)], cookieName = _b[0], cookieValue = _b[1];\n if (cookieName.trim() === name) {\n return decodeURIComponent(cookieValue);\n }\n }\n return null;\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Adds and removes CSS classes on an HTML element.\n *\n * \\@howToUse\n * ```\n * ...\n *\n * ...\n *\n * ...\n *\n * ...\n *\n * ...\n * ```\n *\n * \\@description\n *\n * The CSS classes are updated as follows, depending on the type of the expression evaluation:\n * - `string` - the CSS classes listed in the string (space delimited) are added,\n * - `Array` - the CSS classes declared as Array elements are added,\n * - `Object` - keys are CSS classes that get added when the expression given in the value\n * evaluates to a truthy value, otherwise they are removed.\n *\n * \\@stable\n */\nvar NgClass = (function () {\n /**\n * @param {?} _iterableDiffers\n * @param {?} _keyValueDiffers\n * @param {?} _ngEl\n * @param {?} _renderer\n */\n function NgClass(_iterableDiffers, _keyValueDiffers, _ngEl, _renderer) {\n this._iterableDiffers = _iterableDiffers;\n this._keyValueDiffers = _keyValueDiffers;\n this._ngEl = _ngEl;\n this._renderer = _renderer;\n this._initialClasses = [];\n }\n Object.defineProperty(NgClass.prototype, \"klass\", {\n /**\n * @param {?} v\n * @return {?}\n */\n set: function (v) {\n this._applyInitialClasses(true);\n this._initialClasses = typeof v === 'string' ? v.split(/\\s+/) : [];\n this._applyInitialClasses(false);\n this._applyClasses(this._rawClass, false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgClass.prototype, \"ngClass\", {\n /**\n * @param {?} v\n * @return {?}\n */\n set: function (v) {\n this._cleanupClasses(this._rawClass);\n this._iterableDiffer = null;\n this._keyValueDiffer = null;\n this._rawClass = typeof v === 'string' ? v.split(/\\s+/) : v;\n if (this._rawClass) {\n if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵisListLikeIterable\"])(this._rawClass)) {\n this._iterableDiffer = this._iterableDiffers.find(this._rawClass).create();\n }\n else {\n this._keyValueDiffer = this._keyValueDiffers.find(this._rawClass).create();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @return {?}\n */\n NgClass.prototype.ngDoCheck = function () {\n if (this._iterableDiffer) {\n var /** @type {?} */ iterableChanges = this._iterableDiffer.diff(/** @type {?} */ (this._rawClass));\n if (iterableChanges) {\n this._applyIterableChanges(iterableChanges);\n }\n }\n else if (this._keyValueDiffer) {\n var /** @type {?} */ keyValueChanges = this._keyValueDiffer.diff(/** @type {?} */ (this._rawClass));\n if (keyValueChanges) {\n this._applyKeyValueChanges(keyValueChanges);\n }\n }\n };\n /**\n * @param {?} rawClassVal\n * @return {?}\n */\n NgClass.prototype._cleanupClasses = function (rawClassVal) {\n this._applyClasses(rawClassVal, true);\n this._applyInitialClasses(false);\n };\n /**\n * @param {?} changes\n * @return {?}\n */\n NgClass.prototype._applyKeyValueChanges = function (changes) {\n var _this = this;\n changes.forEachAddedItem(function (record) { return _this._toggleClass(record.key, record.currentValue); });\n changes.forEachChangedItem(function (record) { return _this._toggleClass(record.key, record.currentValue); });\n changes.forEachRemovedItem(function (record) {\n if (record.previousValue) {\n _this._toggleClass(record.key, false);\n }\n });\n };\n /**\n * @param {?} changes\n * @return {?}\n */\n NgClass.prototype._applyIterableChanges = function (changes) {\n var _this = this;\n changes.forEachAddedItem(function (record) {\n if (typeof record.item === 'string') {\n _this._toggleClass(record.item, true);\n }\n else {\n throw new Error(\"NgClass can only toggle CSS classes expressed as strings, got \" + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵstringify\"])(record.item));\n }\n });\n changes.forEachRemovedItem(function (record) { return _this._toggleClass(record.item, false); });\n };\n /**\n * @param {?} isCleanup\n * @return {?}\n */\n NgClass.prototype._applyInitialClasses = function (isCleanup) {\n var _this = this;\n this._initialClasses.forEach(function (klass) { return _this._toggleClass(klass, !isCleanup); });\n };\n /**\n * @param {?} rawClassVal\n * @param {?} isCleanup\n * @return {?}\n */\n NgClass.prototype._applyClasses = function (rawClassVal, isCleanup) {\n var _this = this;\n if (rawClassVal) {\n if (Array.isArray(rawClassVal) || rawClassVal instanceof Set) {\n ((rawClassVal)).forEach(function (klass) { return _this._toggleClass(klass, !isCleanup); });\n }\n else {\n Object.keys(rawClassVal).forEach(function (klass) {\n if (rawClassVal[klass] != null)\n _this._toggleClass(klass, !isCleanup);\n });\n }\n }\n };\n /**\n * @param {?} klass\n * @param {?} enabled\n * @return {?}\n */\n NgClass.prototype._toggleClass = function (klass, enabled) {\n var _this = this;\n klass = klass.trim();\n if (klass) {\n klass.split(/\\s+/g).forEach(function (klass) { _this._renderer.setElementClass(_this._ngEl.nativeElement, klass, !!enabled); });\n }\n };\n return NgClass;\n}());\nNgClass.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[ngClass]' },] },\n];\n/**\n * @nocollapse\n */\nNgClass.ctorParameters = function () { return [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"IterableDiffers\"], },\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"KeyValueDiffers\"], },\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ElementRef\"], },\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Renderer\"], },\n]; };\nNgClass.propDecorators = {\n 'klass': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['class',] },],\n 'ngClass': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Instantiates a single {\\@link Component} type and inserts its Host View into current View.\n * `NgComponentOutlet` provides a declarative approach for dynamic component creation.\n *\n * `NgComponentOutlet` requires a component type, if a falsy value is set the view will clear and\n * any existing component will get destroyed.\n *\n * ### Fine tune control\n *\n * You can control the component creation process by using the following optional attributes:\n *\n * * `ngComponentOutletInjector`: Optional custom {\\@link Injector} that will be used as parent for\n * the Component. Defaults to the injector of the current view container.\n *\n * * `ngComponentOutletContent`: Optional list of projectable nodes to insert into the content\n * section of the component, if exists.\n *\n * * `ngComponentOutletNgModuleFactory`: Optional module factory to allow dynamically loading other\n * module, then load a component from that module.\n *\n * ### Syntax\n *\n * Simple\n * ```\n * \n * ```\n *\n * Customized injector/content\n * ```\n * \n * \n * ```\n *\n * Customized ngModuleFactory\n * ```\n * \n * \n * ```\n * ## Example\n *\n * {\\@example common/ngComponentOutlet/ts/module.ts region='SimpleExample'}\n *\n * A more complete example with additional options:\n *\n * {\\@example common/ngComponentOutlet/ts/module.ts region='CompleteExample'}\n * A more complete example with ngModuleFactory:\n *\n * {\\@example common/ngComponentOutlet/ts/module.ts region='NgModuleFactoryExample'}\n *\n * \\@experimental\n */\nvar NgComponentOutlet = (function () {\n /**\n * @param {?} _viewContainerRef\n */\n function NgComponentOutlet(_viewContainerRef) {\n this._viewContainerRef = _viewContainerRef;\n this._componentRef = null;\n this._moduleRef = null;\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n NgComponentOutlet.prototype.ngOnChanges = function (changes) {\n this._viewContainerRef.clear();\n this._componentRef = null;\n if (this.ngComponentOutlet) {\n var /** @type {?} */ elInjector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;\n if (changes['ngComponentOutletNgModuleFactory']) {\n if (this._moduleRef)\n this._moduleRef.destroy();\n if (this.ngComponentOutletNgModuleFactory) {\n var /** @type {?} */ parentModule = elInjector.get(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"NgModuleRef\"]);\n this._moduleRef = this.ngComponentOutletNgModuleFactory.create(parentModule.injector);\n }\n else {\n this._moduleRef = null;\n }\n }\n var /** @type {?} */ componentFactoryResolver = this._moduleRef ? this._moduleRef.componentFactoryResolver :\n elInjector.get(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ComponentFactoryResolver\"]);\n var /** @type {?} */ componentFactory = componentFactoryResolver.resolveComponentFactory(this.ngComponentOutlet);\n this._componentRef = this._viewContainerRef.createComponent(componentFactory, this._viewContainerRef.length, elInjector, this.ngComponentOutletContent);\n }\n };\n /**\n * @return {?}\n */\n NgComponentOutlet.prototype.ngOnDestroy = function () {\n if (this._moduleRef)\n this._moduleRef.destroy();\n };\n return NgComponentOutlet;\n}());\nNgComponentOutlet.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[ngComponentOutlet]' },] },\n];\n/**\n * @nocollapse\n */\nNgComponentOutlet.ctorParameters = function () { return [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ViewContainerRef\"], },\n]; };\nNgComponentOutlet.propDecorators = {\n 'ngComponentOutlet': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n 'ngComponentOutletInjector': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n 'ngComponentOutletContent': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n 'ngComponentOutletNgModuleFactory': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@stable\n */\nvar NgForOfContext = (function () {\n /**\n * @param {?} $implicit\n * @param {?} ngForOf\n * @param {?} index\n * @param {?} count\n */\n function NgForOfContext($implicit, ngForOf, index, count) {\n this.$implicit = $implicit;\n this.ngForOf = ngForOf;\n this.index = index;\n this.count = count;\n }\n Object.defineProperty(NgForOfContext.prototype, \"first\", {\n /**\n * @return {?}\n */\n get: function () { return this.index === 0; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgForOfContext.prototype, \"last\", {\n /**\n * @return {?}\n */\n get: function () { return this.index === this.count - 1; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgForOfContext.prototype, \"even\", {\n /**\n * @return {?}\n */\n get: function () { return this.index % 2 === 0; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgForOfContext.prototype, \"odd\", {\n /**\n * @return {?}\n */\n get: function () { return !this.even; },\n enumerable: true,\n configurable: true\n });\n return NgForOfContext;\n}());\n/**\n * The `NgForOf` directive instantiates a template once per item from an iterable. The context\n * for each instantiated template inherits from the outer context with the given loop variable\n * set to the current item from the iterable.\n *\n * ### Local Variables\n *\n * `NgForOf` provides several exported values that can be aliased to local variables:\n *\n * - `$implicit: T`: The value of the individual items in the iterable (`ngForOf`).\n * - `ngForOf: NgIterable`: The value of the iterable expression. Useful when the expression is\n * more complex then a property access, for example when using the async pipe (`userStreams |\n * async`).\n * - `index: number`: The index of the current item in the iterable.\n * - `first: boolean`: True when the item is the first item in the iterable.\n * - `last: boolean`: True when the item is the last item in the iterable.\n * - `even: boolean`: True when the item has an even index in the iterable.\n * - `odd: boolean`: True when the item has an odd index in the iterable.\n *\n * ```\n *
  • \n * {{i}}/{{users.length}}. {{user}} default\n *
  • \n * ```\n *\n * ### Change Propagation\n *\n * When the contents of the iterator changes, `NgForOf` makes the corresponding changes to the DOM:\n *\n * * When an item is added, a new instance of the template is added to the DOM.\n * * When an item is removed, its template instance is removed from the DOM.\n * * When items are reordered, their respective templates are reordered in the DOM.\n * * Otherwise, the DOM element for that item will remain the same.\n *\n * Angular uses object identity to track insertions and deletions within the iterator and reproduce\n * those changes in the DOM. This has important implications for animations and any stateful\n * controls (such as `` elements which accept user input) that are present. Inserted rows can\n * be animated in, deleted rows can be animated out, and unchanged rows retain any unsaved state\n * such as user input.\n *\n * It is possible for the identities of elements in the iterator to change while the data does not.\n * This can happen, for example, if the iterator produced from an RPC to the server, and that\n * RPC is re-run. Even if the data hasn't changed, the second response will produce objects with\n * different identities, and Angular will tear down the entire DOM and rebuild it (as if all old\n * elements were deleted and all new elements inserted). This is an expensive operation and should\n * be avoided if possible.\n *\n * To customize the default tracking algorithm, `NgForOf` supports `trackBy` option.\n * `trackBy` takes a function which has two arguments: `index` and `item`.\n * If `trackBy` is given, Angular tracks changes by the return value of the function.\n *\n * ### Syntax\n *\n * - `
  • ...
  • `\n * - `
  • ...
  • `\n *\n * With `` element:\n *\n * ```\n * \n *
  • ...
  • \n *
    \n * ```\n *\n * ### Example\n *\n * See a [live demo](http://plnkr.co/edit/KVuXxDp0qinGDyo307QW?p=preview) for a more detailed\n * example.\n *\n * \\@stable\n */\nvar NgForOf = (function () {\n /**\n * @param {?} _viewContainer\n * @param {?} _template\n * @param {?} _differs\n */\n function NgForOf(_viewContainer, _template, _differs) {\n this._viewContainer = _viewContainer;\n this._template = _template;\n this._differs = _differs;\n this._differ = null;\n }\n Object.defineProperty(NgForOf.prototype, \"ngForTrackBy\", {\n /**\n * @return {?}\n */\n get: function () { return this._trackByFn; },\n /**\n * @param {?} fn\n * @return {?}\n */\n set: function (fn) {\n if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"isDevMode\"])() && fn != null && typeof fn !== 'function') {\n // TODO(vicb): use a log service once there is a public one available\n if ((console) && (console.warn)) {\n console.warn(\"trackBy must be a function, but received \" + JSON.stringify(fn) + \". \" +\n \"See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information.\");\n }\n }\n this._trackByFn = fn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgForOf.prototype, \"ngForTemplate\", {\n /**\n * @param {?} value\n * @return {?}\n */\n set: function (value) {\n // TODO(TS2.1): make TemplateRef>> once we move to TS v2.1\n // The current type is too restrictive; a template that just uses index, for example,\n // should be acceptable.\n if (value) {\n this._template = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @param {?} changes\n * @return {?}\n */\n NgForOf.prototype.ngOnChanges = function (changes) {\n if ('ngForOf' in changes) {\n // React on ngForOf changes only once all inputs have been initialized\n var /** @type {?} */ value = changes['ngForOf'].currentValue;\n if (!this._differ && value) {\n try {\n this._differ = this._differs.find(value).create(this.ngForTrackBy);\n }\n catch (e) {\n throw new Error(\"Cannot find a differ supporting object '\" + value + \"' of type '\" + getTypeNameForDebugging(value) + \"'. NgFor only supports binding to Iterables such as Arrays.\");\n }\n }\n }\n };\n /**\n * @return {?}\n */\n NgForOf.prototype.ngDoCheck = function () {\n if (this._differ) {\n var /** @type {?} */ changes = this._differ.diff(this.ngForOf);\n if (changes)\n this._applyChanges(changes);\n }\n };\n /**\n * @param {?} changes\n * @return {?}\n */\n NgForOf.prototype._applyChanges = function (changes) {\n var _this = this;\n var /** @type {?} */ insertTuples = [];\n changes.forEachOperation(function (item, adjustedPreviousIndex, currentIndex) {\n if (item.previousIndex == null) {\n var /** @type {?} */ view = _this._viewContainer.createEmbeddedView(_this._template, new NgForOfContext(/** @type {?} */ ((null)), _this.ngForOf, -1, -1), currentIndex);\n var /** @type {?} */ tuple = new RecordViewTuple(item, view);\n insertTuples.push(tuple);\n }\n else if (currentIndex == null) {\n _this._viewContainer.remove(adjustedPreviousIndex);\n }\n else {\n var /** @type {?} */ view = ((_this._viewContainer.get(adjustedPreviousIndex)));\n _this._viewContainer.move(view, currentIndex);\n var /** @type {?} */ tuple = new RecordViewTuple(item, /** @type {?} */ (view));\n insertTuples.push(tuple);\n }\n });\n for (var /** @type {?} */ i = 0; i < insertTuples.length; i++) {\n this._perViewChange(insertTuples[i].view, insertTuples[i].record);\n }\n for (var /** @type {?} */ i = 0, /** @type {?} */ ilen = this._viewContainer.length; i < ilen; i++) {\n var /** @type {?} */ viewRef = (this._viewContainer.get(i));\n viewRef.context.index = i;\n viewRef.context.count = ilen;\n }\n changes.forEachIdentityChange(function (record) {\n var /** @type {?} */ viewRef = (_this._viewContainer.get(record.currentIndex));\n viewRef.context.$implicit = record.item;\n });\n };\n /**\n * @param {?} view\n * @param {?} record\n * @return {?}\n */\n NgForOf.prototype._perViewChange = function (view, record) {\n view.context.$implicit = record.item;\n };\n return NgForOf;\n}());\nNgForOf.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[ngFor][ngForOf]' },] },\n];\n/**\n * @nocollapse\n */\nNgForOf.ctorParameters = function () { return [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ViewContainerRef\"], },\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"TemplateRef\"], },\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"IterableDiffers\"], },\n]; };\nNgForOf.propDecorators = {\n 'ngForOf': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n 'ngForTrackBy': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n 'ngForTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\nvar RecordViewTuple = (function () {\n /**\n * @param {?} record\n * @param {?} view\n */\n function RecordViewTuple(record, view) {\n this.record = record;\n this.view = view;\n }\n return RecordViewTuple;\n}());\n/**\n * @deprecated from v4.0.0 - Use NgForOf instead.\n */\nvar NgFor = NgForOf;\n/**\n * @param {?} type\n * @return {?}\n */\nfunction getTypeNameForDebugging(type) {\n return type['name'] || typeof type;\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Conditionally includes a template based on the value of an `expression`.\n *\n * `ngIf` evaluates the `expression` and then renders the `then` or `else` template in its place\n * when expression is truthy or falsy respectively. Typically the:\n * - `then` template is the inline template of `ngIf` unless bound to a different value.\n * - `else` template is blank unless it is bound.\n *\n * ## Most common usage\n *\n * The most common usage of the `ngIf` directive is to conditionally show the inline template as\n * seen in this example:\n * {\\@example common/ngIf/ts/module.ts region='NgIfSimple'}\n *\n * ## Showing an alternative template using `else`\n *\n * If it is necessary to display a template when the `expression` is falsy use the `else` template\n * binding as shown. Note that the `else` binding points to a `` labeled `#elseBlock`.\n * The template can be defined anywhere in the component view but is typically placed right after\n * `ngIf` for readability.\n *\n * {\\@example common/ngIf/ts/module.ts region='NgIfElse'}\n *\n * ## Using non-inlined `then` template\n *\n * Usually the `then` template is the inlined template of the `ngIf`, but it can be changed using\n * a binding (just like `else`). Because `then` and `else` are bindings, the template references can\n * change at runtime as shown in this example.\n *\n * {\\@example common/ngIf/ts/module.ts region='NgIfThenElse'}\n *\n * ## Storing conditional result in a variable\n *\n * A common pattern is that we need to show a set of properties from the same object. If the\n * object is undefined, then we have to use the safe-traversal-operator `?.` to guard against\n * dereferencing a `null` value. This is especially the case when waiting on async data such as\n * when using the `async` pipe as shown in following example:\n *\n * ```\n * Hello {{ (userStream|async)?.last }}, {{ (userStream|async)?.first }}!\n * ```\n *\n * There are several inefficiencies in the above example:\n * - We create multiple subscriptions on `userStream`. One for each `async` pipe, or two in the\n * example above.\n * - We cannot display an alternative screen while waiting for the data to arrive asynchronously.\n * - We have to use the safe-traversal-operator `?.` to access properties, which is cumbersome.\n * - We have to place the `async` pipe in parenthesis.\n *\n * A better way to do this is to use `ngIf` and store the result of the condition in a local\n * variable as shown in the the example below:\n *\n * {\\@example common/ngIf/ts/module.ts region='NgIfAs'}\n *\n * Notice that:\n * - We use only one `async` pipe and hence only one subscription gets created.\n * - `ngIf` stores the result of the `userStream|async` in the local variable `user`.\n * - The local `user` can then be bound repeatedly in a more efficient way.\n * - No need to use the safe-traversal-operator `?.` to access properties as `ngIf` will only\n * display the data if `userStream` returns a value.\n * - We can display an alternative template while waiting for the data.\n *\n * ### Syntax\n *\n * Simple form:\n * - `
    ...
    `\n * - `
    ...
    `\n * - `
    ...
    `\n *\n * Form with an else block:\n * ```\n *
    ...
    \n * ...\n * ```\n *\n * Form with a `then` and `else` block:\n * ```\n *
    \n * ...\n * ...\n * ```\n *\n * Form with storing the value locally:\n * ```\n *
    {{value}}
    \n * ...\n * ```\n *\n * \\@stable\n */\nvar NgIf = (function () {\n /**\n * @param {?} _viewContainer\n * @param {?} templateRef\n */\n function NgIf(_viewContainer, templateRef) {\n this._viewContainer = _viewContainer;\n this._context = new NgIfContext();\n this._thenTemplateRef = null;\n this._elseTemplateRef = null;\n this._thenViewRef = null;\n this._elseViewRef = null;\n this._thenTemplateRef = templateRef;\n }\n Object.defineProperty(NgIf.prototype, \"ngIf\", {\n /**\n * @param {?} condition\n * @return {?}\n */\n set: function (condition) {\n this._context.$implicit = this._context.ngIf = condition;\n this._updateView();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgIf.prototype, \"ngIfThen\", {\n /**\n * @param {?} templateRef\n * @return {?}\n */\n set: function (templateRef) {\n this._thenTemplateRef = templateRef;\n this._thenViewRef = null; // clear previous view if any.\n this._updateView();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NgIf.prototype, \"ngIfElse\", {\n /**\n * @param {?} templateRef\n * @return {?}\n */\n set: function (templateRef) {\n this._elseTemplateRef = templateRef;\n this._elseViewRef = null; // clear previous view if any.\n this._updateView();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @return {?}\n */\n NgIf.prototype._updateView = function () {\n if (this._context.$implicit) {\n if (!this._thenViewRef) {\n this._viewContainer.clear();\n this._elseViewRef = null;\n if (this._thenTemplateRef) {\n this._thenViewRef =\n this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);\n }\n }\n }\n else {\n if (!this._elseViewRef) {\n this._viewContainer.clear();\n this._thenViewRef = null;\n if (this._elseTemplateRef) {\n this._elseViewRef =\n this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);\n }\n }\n }\n };\n return NgIf;\n}());\nNgIf.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[ngIf]' },] },\n];\n/**\n * @nocollapse\n */\nNgIf.ctorParameters = function () { return [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ViewContainerRef\"], },\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"TemplateRef\"], },\n]; };\nNgIf.propDecorators = {\n 'ngIf': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n 'ngIfThen': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n 'ngIfElse': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\n/**\n * \\@stable\n */\nvar NgIfContext = (function () {\n function NgIfContext() {\n this.$implicit = null;\n this.ngIf = null;\n }\n return NgIfContext;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar SwitchView = (function () {\n /**\n * @param {?} _viewContainerRef\n * @param {?} _templateRef\n */\n function SwitchView(_viewContainerRef, _templateRef) {\n this._viewContainerRef = _viewContainerRef;\n this._templateRef = _templateRef;\n this._created = false;\n }\n /**\n * @return {?}\n */\n SwitchView.prototype.create = function () {\n this._created = true;\n this._viewContainerRef.createEmbeddedView(this._templateRef);\n };\n /**\n * @return {?}\n */\n SwitchView.prototype.destroy = function () {\n this._created = false;\n this._viewContainerRef.clear();\n };\n /**\n * @param {?} created\n * @return {?}\n */\n SwitchView.prototype.enforceState = function (created) {\n if (created && !this._created) {\n this.create();\n }\n else if (!created && this._created) {\n this.destroy();\n }\n };\n return SwitchView;\n}());\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Adds / removes DOM sub-trees when the nest match expressions matches the switch\n * expression.\n *\n * \\@howToUse\n * ```\n * \n * ...\n * ...\n * ...\n * \n * \n * \n * \n * \n * ...\n * \n * ```\n * \\@description\n *\n * `NgSwitch` stamps out nested views when their match expression value matches the value of the\n * switch expression.\n *\n * In other words:\n * - you define a container element (where you place the directive with a switch expression on the\n * `[ngSwitch]=\"...\"` attribute)\n * - you define inner views inside the `NgSwitch` and place a `*ngSwitchCase` attribute on the view\n * root elements.\n *\n * Elements within `NgSwitch` but outside of a `NgSwitchCase` or `NgSwitchDefault` directives will\n * be preserved at the location.\n *\n * The `ngSwitchCase` directive informs the parent `NgSwitch` of which view to display when the\n * expression is evaluated.\n * When no matching expression is found on a `ngSwitchCase` view, the `ngSwitchDefault` view is\n * stamped out.\n *\n * \\@stable\n */\nvar NgSwitch = (function () {\n function NgSwitch() {\n this._defaultUsed = false;\n this._caseCount = 0;\n this._lastCaseCheckIndex = 0;\n this._lastCasesMatched = false;\n }\n Object.defineProperty(NgSwitch.prototype, \"ngSwitch\", {\n /**\n * @param {?} newValue\n * @return {?}\n */\n set: function (newValue) {\n this._ngSwitch = newValue;\n if (this._caseCount === 0) {\n this._updateDefaultCases(true);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * \\@internal\n * @return {?}\n */\n NgSwitch.prototype._addCase = function () { return this._caseCount++; };\n /**\n * \\@internal\n * @param {?} view\n * @return {?}\n */\n NgSwitch.prototype._addDefault = function (view) {\n if (!this._defaultViews) {\n this._defaultViews = [];\n }\n this._defaultViews.push(view);\n };\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n NgSwitch.prototype._matchCase = function (value) {\n var /** @type {?} */ matched = value == this._ngSwitch;\n this._lastCasesMatched = this._lastCasesMatched || matched;\n this._lastCaseCheckIndex++;\n if (this._lastCaseCheckIndex === this._caseCount) {\n this._updateDefaultCases(!this._lastCasesMatched);\n this._lastCaseCheckIndex = 0;\n this._lastCasesMatched = false;\n }\n return matched;\n };\n /**\n * @param {?} useDefault\n * @return {?}\n */\n NgSwitch.prototype._updateDefaultCases = function (useDefault) {\n if (this._defaultViews && useDefault !== this._defaultUsed) {\n this._defaultUsed = useDefault;\n for (var /** @type {?} */ i = 0; i < this._defaultViews.length; i++) {\n var /** @type {?} */ defaultView = this._defaultViews[i];\n defaultView.enforceState(useDefault);\n }\n }\n };\n return NgSwitch;\n}());\nNgSwitch.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[ngSwitch]' },] },\n];\n/**\n * @nocollapse\n */\nNgSwitch.ctorParameters = function () { return []; };\nNgSwitch.propDecorators = {\n 'ngSwitch': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Creates a view that will be added/removed from the parent {\\@link NgSwitch} when the\n * given expression evaluate to respectively the same/different value as the switch\n * expression.\n *\n * \\@howToUse\n * ```\n * \n * ...\n * \n * ```\n * \\@description\n *\n * Insert the sub-tree when the expression evaluates to the same value as the enclosing switch\n * expression.\n *\n * If multiple match expressions match the switch expression value, all of them are displayed.\n *\n * See {\\@link NgSwitch} for more details and example.\n *\n * \\@stable\n */\nvar NgSwitchCase = (function () {\n /**\n * @param {?} viewContainer\n * @param {?} templateRef\n * @param {?} ngSwitch\n */\n function NgSwitchCase(viewContainer, templateRef, ngSwitch) {\n this.ngSwitch = ngSwitch;\n ngSwitch._addCase();\n this._view = new SwitchView(viewContainer, templateRef);\n }\n /**\n * @return {?}\n */\n NgSwitchCase.prototype.ngDoCheck = function () { this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase)); };\n return NgSwitchCase;\n}());\nNgSwitchCase.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[ngSwitchCase]' },] },\n];\n/**\n * @nocollapse\n */\nNgSwitchCase.ctorParameters = function () { return [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ViewContainerRef\"], },\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"TemplateRef\"], },\n { type: NgSwitch, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Host\"] },] },\n]; };\nNgSwitchCase.propDecorators = {\n 'ngSwitchCase': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Creates a view that is added to the parent {\\@link NgSwitch} when no case expressions\n * match the\n * switch expression.\n *\n * \\@howToUse\n * ```\n * \n * ...\n * ...\n * \n * ```\n *\n * \\@description\n *\n * Insert the sub-tree when no case expressions evaluate to the same value as the enclosing switch\n * expression.\n *\n * See {\\@link NgSwitch} for more details and example.\n *\n * \\@stable\n */\nvar NgSwitchDefault = (function () {\n /**\n * @param {?} viewContainer\n * @param {?} templateRef\n * @param {?} ngSwitch\n */\n function NgSwitchDefault(viewContainer, templateRef, ngSwitch) {\n ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));\n }\n return NgSwitchDefault;\n}());\nNgSwitchDefault.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[ngSwitchDefault]' },] },\n];\n/**\n * @nocollapse\n */\nNgSwitchDefault.ctorParameters = function () { return [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ViewContainerRef\"], },\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"TemplateRef\"], },\n { type: NgSwitch, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Host\"] },] },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Adds / removes DOM sub-trees based on a numeric value. Tailored for pluralization.\n *\n * \\@howToUse\n * ```\n * \n * there is nothing\n * there is one\n * there are a few\n * \n * ```\n *\n * \\@description\n *\n * Displays DOM sub-trees that match the switch expression value, or failing that, DOM sub-trees\n * that match the switch expression's pluralization category.\n *\n * To use this directive you must provide a container element that sets the `[ngPlural]` attribute\n * to a switch expression. Inner elements with a `[ngPluralCase]` will display based on their\n * expression:\n * - if `[ngPluralCase]` is set to a value starting with `=`, it will only display if the value\n * matches the switch expression exactly,\n * - otherwise, the view will be treated as a \"category match\", and will only display if exact\n * value matches aren't found and the value maps to its category for the defined locale.\n *\n * See http://cldr.unicode.org/index/cldr-spec/plural-rules\n *\n * \\@experimental\n */\nvar NgPlural = (function () {\n /**\n * @param {?} _localization\n */\n function NgPlural(_localization) {\n this._localization = _localization;\n this._caseViews = {};\n }\n Object.defineProperty(NgPlural.prototype, \"ngPlural\", {\n /**\n * @param {?} value\n * @return {?}\n */\n set: function (value) {\n this._switchValue = value;\n this._updateView();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @param {?} value\n * @param {?} switchView\n * @return {?}\n */\n NgPlural.prototype.addCase = function (value, switchView) { this._caseViews[value] = switchView; };\n /**\n * @return {?}\n */\n NgPlural.prototype._updateView = function () {\n this._clearViews();\n var /** @type {?} */ cases = Object.keys(this._caseViews);\n var /** @type {?} */ key = getPluralCategory(this._switchValue, cases, this._localization);\n this._activateView(this._caseViews[key]);\n };\n /**\n * @return {?}\n */\n NgPlural.prototype._clearViews = function () {\n if (this._activeView)\n this._activeView.destroy();\n };\n /**\n * @param {?} view\n * @return {?}\n */\n NgPlural.prototype._activateView = function (view) {\n if (view) {\n this._activeView = view;\n this._activeView.create();\n }\n };\n return NgPlural;\n}());\nNgPlural.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[ngPlural]' },] },\n];\n/**\n * @nocollapse\n */\nNgPlural.ctorParameters = function () { return [\n { type: NgLocalization, },\n]; };\nNgPlural.propDecorators = {\n 'ngPlural': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Creates a view that will be added/removed from the parent {\\@link NgPlural} when the\n * given expression matches the plural expression according to CLDR rules.\n *\n * \\@howToUse\n * ```\n * \n * ...\n * ...\n * \n * ```\n *\n * See {\\@link NgPlural} for more details and example.\n *\n * \\@experimental\n */\nvar NgPluralCase = (function () {\n /**\n * @param {?} value\n * @param {?} template\n * @param {?} viewContainer\n * @param {?} ngPlural\n */\n function NgPluralCase(value, template, viewContainer, ngPlural) {\n this.value = value;\n var isANumber = !isNaN(Number(value));\n ngPlural.addCase(isANumber ? \"=\" + value : value, new SwitchView(viewContainer, template));\n }\n return NgPluralCase;\n}());\nNgPluralCase.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[ngPluralCase]' },] },\n];\n/**\n * @nocollapse\n */\nNgPluralCase.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Attribute\"], args: ['ngPluralCase',] },] },\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"TemplateRef\"], },\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ViewContainerRef\"], },\n { type: NgPlural, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Host\"] },] },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Update an HTML element styles.\n *\n * \\@howToUse\n * ```\n * ...\n *\n * ...\n *\n * ...\n * ```\n *\n * \\@description\n *\n * The styles are updated according to the value of the expression evaluation:\n * - keys are style names with an optional `.` suffix (ie 'top.px', 'font-style.em'),\n * - values are the values assigned to those properties (expressed in the given unit).\n *\n * \\@stable\n */\nvar NgStyle = (function () {\n /**\n * @param {?} _differs\n * @param {?} _ngEl\n * @param {?} _renderer\n */\n function NgStyle(_differs, _ngEl, _renderer) {\n this._differs = _differs;\n this._ngEl = _ngEl;\n this._renderer = _renderer;\n }\n Object.defineProperty(NgStyle.prototype, \"ngStyle\", {\n /**\n * @param {?} v\n * @return {?}\n */\n set: function (v) {\n this._ngStyle = v;\n if (!this._differ && v) {\n this._differ = this._differs.find(v).create();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @return {?}\n */\n NgStyle.prototype.ngDoCheck = function () {\n if (this._differ) {\n var /** @type {?} */ changes = this._differ.diff(this._ngStyle);\n if (changes) {\n this._applyChanges(changes);\n }\n }\n };\n /**\n * @param {?} changes\n * @return {?}\n */\n NgStyle.prototype._applyChanges = function (changes) {\n var _this = this;\n changes.forEachRemovedItem(function (record) { return _this._setStyle(record.key, null); });\n changes.forEachAddedItem(function (record) { return _this._setStyle(record.key, record.currentValue); });\n changes.forEachChangedItem(function (record) { return _this._setStyle(record.key, record.currentValue); });\n };\n /**\n * @param {?} nameAndUnit\n * @param {?} value\n * @return {?}\n */\n NgStyle.prototype._setStyle = function (nameAndUnit, value) {\n var _a = nameAndUnit.split('.'), name = _a[0], unit = _a[1];\n value = value != null && unit ? \"\" + value + unit : value;\n this._renderer.setElementStyle(this._ngEl.nativeElement, name, /** @type {?} */ (value));\n };\n return NgStyle;\n}());\nNgStyle.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[ngStyle]' },] },\n];\n/**\n * @nocollapse\n */\nNgStyle.ctorParameters = function () { return [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"KeyValueDiffers\"], },\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ElementRef\"], },\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Renderer\"], },\n]; };\nNgStyle.propDecorators = {\n 'ngStyle': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Inserts an embedded view from a prepared `TemplateRef`\n *\n * \\@howToUse\n * ```\n * \n * ```\n *\n * \\@description\n *\n * You can attach a context object to the `EmbeddedViewRef` by setting `[ngTemplateOutletContext]`.\n * `[ngTemplateOutletContext]` should be an object, the object's keys will be available for binding\n * by the local template `let` declarations.\n *\n * Note: using the key `$implicit` in the context object will set it's value as default.\n *\n * ## Example\n *\n * {\\@example common/ngTemplateOutlet/ts/module.ts region='NgTemplateOutlet'}\n *\n * \\@experimental\n */\nvar NgTemplateOutlet = (function () {\n /**\n * @param {?} _viewContainerRef\n */\n function NgTemplateOutlet(_viewContainerRef) {\n this._viewContainerRef = _viewContainerRef;\n }\n Object.defineProperty(NgTemplateOutlet.prototype, \"ngOutletContext\", {\n /**\n * @deprecated v4.0.0 - Renamed to ngTemplateOutletContext.\n * @param {?} context\n * @return {?}\n */\n set: function (context) { this.ngTemplateOutletContext = context; },\n enumerable: true,\n configurable: true\n });\n /**\n * @param {?} changes\n * @return {?}\n */\n NgTemplateOutlet.prototype.ngOnChanges = function (changes) {\n if (this._viewRef) {\n this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._viewRef));\n }\n if (this.ngTemplateOutlet) {\n this._viewRef = this._viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, this.ngTemplateOutletContext);\n }\n };\n return NgTemplateOutlet;\n}());\nNgTemplateOutlet.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[ngTemplateOutlet]' },] },\n];\n/**\n * @nocollapse\n */\nNgTemplateOutlet.ctorParameters = function () { return [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ViewContainerRef\"], },\n]; };\nNgTemplateOutlet.propDecorators = {\n 'ngTemplateOutletContext': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n 'ngTemplateOutlet': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n 'ngOutletContext': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A collection of Angular directives that are likely to be used in each and every Angular\n * application.\n */\nvar COMMON_DIRECTIVES = [\n NgClass,\n NgComponentOutlet,\n NgForOf,\n NgIf,\n NgTemplateOutlet,\n NgStyle,\n NgSwitch,\n NgSwitchCase,\n NgSwitchDefault,\n NgPlural,\n NgPluralCase,\n];\n/**\n * A collection of deprecated directives that are no longer part of the core module.\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @param {?} type\n * @param {?} value\n * @return {?}\n */\nfunction invalidPipeArgumentError(type, value) {\n return Error(\"InvalidPipeArgument: '\" + value + \"' for pipe '\" + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵstringify\"])(type) + \"'\");\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar ObservableStrategy = (function () {\n function ObservableStrategy() {\n }\n /**\n * @param {?} async\n * @param {?} updateLatestValue\n * @return {?}\n */\n ObservableStrategy.prototype.createSubscription = function (async, updateLatestValue) {\n return async.subscribe({ next: updateLatestValue, error: function (e) { throw e; } });\n };\n /**\n * @param {?} subscription\n * @return {?}\n */\n ObservableStrategy.prototype.dispose = function (subscription) { subscription.unsubscribe(); };\n /**\n * @param {?} subscription\n * @return {?}\n */\n ObservableStrategy.prototype.onDestroy = function (subscription) { subscription.unsubscribe(); };\n return ObservableStrategy;\n}());\nvar PromiseStrategy = (function () {\n function PromiseStrategy() {\n }\n /**\n * @param {?} async\n * @param {?} updateLatestValue\n * @return {?}\n */\n PromiseStrategy.prototype.createSubscription = function (async, updateLatestValue) {\n return async.then(updateLatestValue, function (e) { throw e; });\n };\n /**\n * @param {?} subscription\n * @return {?}\n */\n PromiseStrategy.prototype.dispose = function (subscription) { };\n /**\n * @param {?} subscription\n * @return {?}\n */\n PromiseStrategy.prototype.onDestroy = function (subscription) { };\n return PromiseStrategy;\n}());\nvar _promiseStrategy = new PromiseStrategy();\nvar _observableStrategy = new ObservableStrategy();\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Unwraps a value from an asynchronous primitive.\n * \\@howToUse `observable_or_promise_expression | async`\n * \\@description\n * The `async` pipe subscribes to an `Observable` or `Promise` and returns the latest value it has\n * emitted. When a new value is emitted, the `async` pipe marks the component to be checked for\n * changes. When the component gets destroyed, the `async` pipe unsubscribes automatically to avoid\n * potential memory leaks.\n *\n *\n * ## Examples\n *\n * This example binds a `Promise` to the view. Clicking the `Resolve` button resolves the\n * promise.\n *\n * {\\@example common/pipes/ts/async_pipe.ts region='AsyncPipePromise'}\n *\n * It's also possible to use `async` with Observables. The example below binds the `time` Observable\n * to the view. The Observable continuously updates the view with the current time.\n *\n * {\\@example common/pipes/ts/async_pipe.ts region='AsyncPipeObservable'}\n *\n * \\@stable\n */\nvar AsyncPipe = (function () {\n /**\n * @param {?} _ref\n */\n function AsyncPipe(_ref) {\n this._ref = _ref;\n this._latestValue = null;\n this._latestReturnedValue = null;\n this._subscription = null;\n this._obj = null;\n this._strategy = ((null));\n }\n /**\n * @return {?}\n */\n AsyncPipe.prototype.ngOnDestroy = function () {\n if (this._subscription) {\n this._dispose();\n }\n };\n /**\n * @param {?} obj\n * @return {?}\n */\n AsyncPipe.prototype.transform = function (obj) {\n if (!this._obj) {\n if (obj) {\n this._subscribe(obj);\n }\n this._latestReturnedValue = this._latestValue;\n return this._latestValue;\n }\n if (obj !== this._obj) {\n this._dispose();\n return this.transform(/** @type {?} */ (obj));\n }\n if (this._latestValue === this._latestReturnedValue) {\n return this._latestReturnedValue;\n }\n this._latestReturnedValue = this._latestValue;\n return __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"WrappedValue\"].wrap(this._latestValue);\n };\n /**\n * @param {?} obj\n * @return {?}\n */\n AsyncPipe.prototype._subscribe = function (obj) {\n var _this = this;\n this._obj = obj;\n this._strategy = this._selectStrategy(obj);\n this._subscription = this._strategy.createSubscription(obj, function (value) { return _this._updateLatestValue(obj, value); });\n };\n /**\n * @param {?} obj\n * @return {?}\n */\n AsyncPipe.prototype._selectStrategy = function (obj) {\n if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵisPromise\"])(obj)) {\n return _promiseStrategy;\n }\n if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵisObservable\"])(obj)) {\n return _observableStrategy;\n }\n throw invalidPipeArgumentError(AsyncPipe, obj);\n };\n /**\n * @return {?}\n */\n AsyncPipe.prototype._dispose = function () {\n this._strategy.dispose(/** @type {?} */ ((this._subscription)));\n this._latestValue = null;\n this._latestReturnedValue = null;\n this._subscription = null;\n this._obj = null;\n };\n /**\n * @param {?} async\n * @param {?} value\n * @return {?}\n */\n AsyncPipe.prototype._updateLatestValue = function (async, value) {\n if (async === this._obj) {\n this._latestValue = value;\n this._ref.markForCheck();\n }\n };\n return AsyncPipe;\n}());\nAsyncPipe.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Pipe\"], args: [{ name: 'async', pure: false },] },\n];\n/**\n * @nocollapse\n */\nAsyncPipe.ctorParameters = function () { return [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ChangeDetectorRef\"], },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Transforms text to lowercase.\n *\n * {\\@example common/pipes/ts/lowerupper_pipe.ts region='LowerUpperPipe' }\n *\n * \\@stable\n */\nvar LowerCasePipe = (function () {\n function LowerCasePipe() {\n }\n /**\n * @param {?} value\n * @return {?}\n */\n LowerCasePipe.prototype.transform = function (value) {\n if (!value)\n return value;\n if (typeof value !== 'string') {\n throw invalidPipeArgumentError(LowerCasePipe, value);\n }\n return value.toLowerCase();\n };\n return LowerCasePipe;\n}());\nLowerCasePipe.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Pipe\"], args: [{ name: 'lowercase' },] },\n];\n/**\n * @nocollapse\n */\nLowerCasePipe.ctorParameters = function () { return []; };\n/**\n * Helper method to transform a single word to titlecase.\n *\n * \\@stable\n * @param {?} word\n * @return {?}\n */\nfunction titleCaseWord(word) {\n if (!word)\n return word;\n return word[0].toUpperCase() + word.substr(1).toLowerCase();\n}\n/**\n * Transforms text to titlecase.\n *\n * \\@stable\n */\nvar TitleCasePipe = (function () {\n function TitleCasePipe() {\n }\n /**\n * @param {?} value\n * @return {?}\n */\n TitleCasePipe.prototype.transform = function (value) {\n if (!value)\n return value;\n if (typeof value !== 'string') {\n throw invalidPipeArgumentError(TitleCasePipe, value);\n }\n return value.split(/\\b/g).map(function (word) { return titleCaseWord(word); }).join('');\n };\n return TitleCasePipe;\n}());\nTitleCasePipe.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Pipe\"], args: [{ name: 'titlecase' },] },\n];\n/**\n * @nocollapse\n */\nTitleCasePipe.ctorParameters = function () { return []; };\n/**\n * Transforms text to uppercase.\n *\n * \\@stable\n */\nvar UpperCasePipe = (function () {\n function UpperCasePipe() {\n }\n /**\n * @param {?} value\n * @return {?}\n */\n UpperCasePipe.prototype.transform = function (value) {\n if (!value)\n return value;\n if (typeof value !== 'string') {\n throw invalidPipeArgumentError(UpperCasePipe, value);\n }\n return value.toUpperCase();\n };\n return UpperCasePipe;\n}());\nUpperCasePipe.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Pipe\"], args: [{ name: 'uppercase' },] },\n];\n/**\n * @nocollapse\n */\nUpperCasePipe.ctorParameters = function () { return []; };\nvar NumberFormatStyle = {};\nNumberFormatStyle.Decimal = 0;\nNumberFormatStyle.Percent = 1;\nNumberFormatStyle.Currency = 2;\nNumberFormatStyle[NumberFormatStyle.Decimal] = \"Decimal\";\nNumberFormatStyle[NumberFormatStyle.Percent] = \"Percent\";\nNumberFormatStyle[NumberFormatStyle.Currency] = \"Currency\";\nvar NumberFormatter = (function () {\n function NumberFormatter() {\n }\n /**\n * @param {?} num\n * @param {?} locale\n * @param {?} style\n * @param {?=} opts\n * @return {?}\n */\n NumberFormatter.format = function (num, locale, style, opts) {\n if (opts === void 0) { opts = {}; }\n var minimumIntegerDigits = opts.minimumIntegerDigits, minimumFractionDigits = opts.minimumFractionDigits, maximumFractionDigits = opts.maximumFractionDigits, currency = opts.currency, _a = opts.currencyAsSymbol, currencyAsSymbol = _a === void 0 ? false : _a;\n var /** @type {?} */ options = {\n minimumIntegerDigits: minimumIntegerDigits,\n minimumFractionDigits: minimumFractionDigits,\n maximumFractionDigits: maximumFractionDigits,\n style: NumberFormatStyle[style].toLowerCase()\n };\n if (style == NumberFormatStyle.Currency) {\n options.currency = typeof currency == 'string' ? currency : undefined;\n options.currencyDisplay = currencyAsSymbol ? 'symbol' : 'code';\n }\n return new Intl.NumberFormat(locale, options).format(num);\n };\n return NumberFormatter;\n}());\nvar DATE_FORMATS_SPLIT = /((?:[^yMLdHhmsazZEwGjJ']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|J+|j+|m+|s+|a|z|Z|G+|w+))(.*)/;\nvar PATTERN_ALIASES = {\n // Keys are quoted so they do not get renamed during closure compilation.\n 'yMMMdjms': datePartGetterFactory(combine([\n digitCondition('year', 1),\n nameCondition('month', 3),\n digitCondition('day', 1),\n digitCondition('hour', 1),\n digitCondition('minute', 1),\n digitCondition('second', 1),\n ])),\n 'yMdjm': datePartGetterFactory(combine([\n digitCondition('year', 1), digitCondition('month', 1), digitCondition('day', 1),\n digitCondition('hour', 1), digitCondition('minute', 1)\n ])),\n 'yMMMMEEEEd': datePartGetterFactory(combine([\n digitCondition('year', 1), nameCondition('month', 4), nameCondition('weekday', 4),\n digitCondition('day', 1)\n ])),\n 'yMMMMd': datePartGetterFactory(combine([digitCondition('year', 1), nameCondition('month', 4), digitCondition('day', 1)])),\n 'yMMMd': datePartGetterFactory(combine([digitCondition('year', 1), nameCondition('month', 3), digitCondition('day', 1)])),\n 'yMd': datePartGetterFactory(combine([digitCondition('year', 1), digitCondition('month', 1), digitCondition('day', 1)])),\n 'jms': datePartGetterFactory(combine([digitCondition('hour', 1), digitCondition('second', 1), digitCondition('minute', 1)])),\n 'jm': datePartGetterFactory(combine([digitCondition('hour', 1), digitCondition('minute', 1)]))\n};\nvar DATE_FORMATS = {\n // Keys are quoted so they do not get renamed.\n 'yyyy': datePartGetterFactory(digitCondition('year', 4)),\n 'yy': datePartGetterFactory(digitCondition('year', 2)),\n 'y': datePartGetterFactory(digitCondition('year', 1)),\n 'MMMM': datePartGetterFactory(nameCondition('month', 4)),\n 'MMM': datePartGetterFactory(nameCondition('month', 3)),\n 'MM': datePartGetterFactory(digitCondition('month', 2)),\n 'M': datePartGetterFactory(digitCondition('month', 1)),\n 'LLLL': datePartGetterFactory(nameCondition('month', 4)),\n 'L': datePartGetterFactory(nameCondition('month', 1)),\n 'dd': datePartGetterFactory(digitCondition('day', 2)),\n 'd': datePartGetterFactory(digitCondition('day', 1)),\n 'HH': digitModifier(hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 2), false)))),\n 'H': hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), false))),\n 'hh': digitModifier(hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 2), true)))),\n 'h': hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), true))),\n 'jj': datePartGetterFactory(digitCondition('hour', 2)),\n 'j': datePartGetterFactory(digitCondition('hour', 1)),\n 'mm': digitModifier(datePartGetterFactory(digitCondition('minute', 2))),\n 'm': datePartGetterFactory(digitCondition('minute', 1)),\n 'ss': digitModifier(datePartGetterFactory(digitCondition('second', 2))),\n 's': datePartGetterFactory(digitCondition('second', 1)),\n // while ISO 8601 requires fractions to be prefixed with `.` or `,`\n // we can be just safely rely on using `sss` since we currently don't support single or two digit\n // fractions\n 'sss': datePartGetterFactory(digitCondition('second', 3)),\n 'EEEE': datePartGetterFactory(nameCondition('weekday', 4)),\n 'EEE': datePartGetterFactory(nameCondition('weekday', 3)),\n 'EE': datePartGetterFactory(nameCondition('weekday', 2)),\n 'E': datePartGetterFactory(nameCondition('weekday', 1)),\n 'a': hourClockExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), true))),\n 'Z': timeZoneGetter('short'),\n 'z': timeZoneGetter('long'),\n 'ww': datePartGetterFactory({}),\n // first Thursday of the year. not support ?\n 'w': datePartGetterFactory({}),\n // of the year not support ?\n 'G': datePartGetterFactory(nameCondition('era', 1)),\n 'GG': datePartGetterFactory(nameCondition('era', 2)),\n 'GGG': datePartGetterFactory(nameCondition('era', 3)),\n 'GGGG': datePartGetterFactory(nameCondition('era', 4))\n};\n/**\n * @param {?} inner\n * @return {?}\n */\nfunction digitModifier(inner) {\n return function (date, locale) {\n var /** @type {?} */ result = inner(date, locale);\n return result.length == 1 ? '0' + result : result;\n };\n}\n/**\n * @param {?} inner\n * @return {?}\n */\nfunction hourClockExtractor(inner) {\n return function (date, locale) { return inner(date, locale).split(' ')[1]; };\n}\n/**\n * @param {?} inner\n * @return {?}\n */\nfunction hourExtractor(inner) {\n return function (date, locale) { return inner(date, locale).split(' ')[0]; };\n}\n/**\n * @param {?} date\n * @param {?} locale\n * @param {?} options\n * @return {?}\n */\nfunction intlDateFormat(date, locale, options) {\n return new Intl.DateTimeFormat(locale, options).format(date).replace(/[\\u200e\\u200f]/g, '');\n}\n/**\n * @param {?} timezone\n * @return {?}\n */\nfunction timeZoneGetter(timezone) {\n // To workaround `Intl` API restriction for single timezone let format with 24 hours\n var /** @type {?} */ options = { hour: '2-digit', hour12: false, timeZoneName: timezone };\n return function (date, locale) {\n var /** @type {?} */ result = intlDateFormat(date, locale, options);\n // Then extract first 3 letters that related to hours\n return result ? result.substring(3) : '';\n };\n}\n/**\n * @param {?} options\n * @param {?} value\n * @return {?}\n */\nfunction hour12Modify(options, value) {\n options.hour12 = value;\n return options;\n}\n/**\n * @param {?} prop\n * @param {?} len\n * @return {?}\n */\nfunction digitCondition(prop, len) {\n var /** @type {?} */ result = {};\n result[prop] = len === 2 ? '2-digit' : 'numeric';\n return result;\n}\n/**\n * @param {?} prop\n * @param {?} len\n * @return {?}\n */\nfunction nameCondition(prop, len) {\n var /** @type {?} */ result = {};\n if (len < 4) {\n result[prop] = len > 1 ? 'short' : 'narrow';\n }\n else {\n result[prop] = 'long';\n }\n return result;\n}\n/**\n * @param {?} options\n * @return {?}\n */\nfunction combine(options) {\n return options.reduce(function (merged, opt) { return (Object.assign({}, merged, opt)); }, {});\n}\n/**\n * @param {?} ret\n * @return {?}\n */\nfunction datePartGetterFactory(ret) {\n return function (date, locale) { return intlDateFormat(date, locale, ret); };\n}\nvar DATE_FORMATTER_CACHE = new Map();\n/**\n * @param {?} format\n * @param {?} date\n * @param {?} locale\n * @return {?}\n */\nfunction dateFormatter(format, date, locale) {\n var /** @type {?} */ fn = PATTERN_ALIASES[format];\n if (fn)\n return fn(date, locale);\n var /** @type {?} */ cacheKey = format;\n var /** @type {?} */ parts = DATE_FORMATTER_CACHE.get(cacheKey);\n if (!parts) {\n parts = [];\n var /** @type {?} */ match = void 0;\n DATE_FORMATS_SPLIT.exec(format);\n var /** @type {?} */ _format = format;\n while (_format) {\n match = DATE_FORMATS_SPLIT.exec(_format);\n if (match) {\n parts = parts.concat(match.slice(1));\n _format = ((parts.pop()));\n }\n else {\n parts.push(_format);\n _format = null;\n }\n }\n DATE_FORMATTER_CACHE.set(cacheKey, parts);\n }\n return parts.reduce(function (text, part) {\n var /** @type {?} */ fn = DATE_FORMATS[part];\n return text + (fn ? fn(date, locale) : partToTime(part));\n }, '');\n}\n/**\n * @param {?} part\n * @return {?}\n */\nfunction partToTime(part) {\n return part === '\\'\\'' ? '\\'' : part.replace(/(^'|'$)/g, '').replace(/''/g, '\\'');\n}\nvar DateFormatter = (function () {\n function DateFormatter() {\n }\n /**\n * @param {?} date\n * @param {?} locale\n * @param {?} pattern\n * @return {?}\n */\n DateFormatter.format = function (date, locale, pattern) {\n return dateFormatter(pattern, date, locale);\n };\n return DateFormatter;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar _NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/;\n/**\n * @param {?} pipe\n * @param {?} locale\n * @param {?} value\n * @param {?} style\n * @param {?=} digits\n * @param {?=} currency\n * @param {?=} currencyAsSymbol\n * @return {?}\n */\nfunction formatNumber(pipe, locale, value, style, digits, currency, currencyAsSymbol) {\n if (currency === void 0) { currency = null; }\n if (currencyAsSymbol === void 0) { currencyAsSymbol = false; }\n if (value == null)\n return null;\n // Convert strings to numbers\n value = typeof value === 'string' && isNumeric(value) ? +value : value;\n if (typeof value !== 'number') {\n throw invalidPipeArgumentError(pipe, value);\n }\n var /** @type {?} */ minInt = undefined;\n var /** @type {?} */ minFraction = undefined;\n var /** @type {?} */ maxFraction = undefined;\n if (style !== NumberFormatStyle.Currency) {\n // rely on Intl default for currency\n minInt = 1;\n minFraction = 0;\n maxFraction = 3;\n }\n if (digits) {\n var /** @type {?} */ parts = digits.match(_NUMBER_FORMAT_REGEXP);\n if (parts === null) {\n throw new Error(digits + \" is not a valid digit info for number pipes\");\n }\n if (parts[1] != null) {\n minInt = parseIntAutoRadix(parts[1]);\n }\n if (parts[3] != null) {\n minFraction = parseIntAutoRadix(parts[3]);\n }\n if (parts[5] != null) {\n maxFraction = parseIntAutoRadix(parts[5]);\n }\n }\n return NumberFormatter.format(/** @type {?} */ (value), locale, style, {\n minimumIntegerDigits: minInt,\n minimumFractionDigits: minFraction,\n maximumFractionDigits: maxFraction,\n currency: currency,\n currencyAsSymbol: currencyAsSymbol,\n });\n}\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number according to locale rules.\n * \\@howToUse `number_expression | number[:digitInfo]`\n *\n * Formats a number as text. Group sizing and separator and other locale-specific\n * configurations are based on the active locale.\n *\n * where `expression` is a number:\n * - `digitInfo` is a `string` which has a following format:
    \n * {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}\n * - `minIntegerDigits` is the minimum number of integer digits to use. Defaults to `1`.\n * - `minFractionDigits` is the minimum number of digits after fraction. Defaults to `0`.\n * - `maxFractionDigits` is the maximum number of digits after fraction. Defaults to `3`.\n *\n * For more information on the acceptable range for each of these numbers and other\n * details see your native internationalization library.\n *\n * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers\n * and may require a polyfill. See [Browser Support](guide/browser-support) for details.\n *\n * ### Example\n *\n * {\\@example common/pipes/ts/number_pipe.ts region='NumberPipe'}\n *\n * \\@stable\n */\nvar DecimalPipe = (function () {\n /**\n * @param {?} _locale\n */\n function DecimalPipe(_locale) {\n this._locale = _locale;\n }\n /**\n * @param {?} value\n * @param {?=} digits\n * @return {?}\n */\n DecimalPipe.prototype.transform = function (value, digits) {\n return formatNumber(DecimalPipe, this._locale, value, NumberFormatStyle.Decimal, digits);\n };\n return DecimalPipe;\n}());\nDecimalPipe.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Pipe\"], args: [{ name: 'number' },] },\n];\n/**\n * @nocollapse\n */\nDecimalPipe.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"LOCALE_ID\"],] },] },\n]; };\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number as a percentage according to locale rules.\n * \\@howToUse `number_expression | percent[:digitInfo]`\n *\n * \\@description\n *\n * Formats a number as percentage.\n *\n * - `digitInfo` See {\\@link DecimalPipe} for detailed description.\n *\n * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers\n * and may require a polyfill. See [Browser Support](guide/browser-support) for details.\n *\n * ### Example\n *\n * {\\@example common/pipes/ts/number_pipe.ts region='PercentPipe'}\n *\n * \\@stable\n */\nvar PercentPipe = (function () {\n /**\n * @param {?} _locale\n */\n function PercentPipe(_locale) {\n this._locale = _locale;\n }\n /**\n * @param {?} value\n * @param {?=} digits\n * @return {?}\n */\n PercentPipe.prototype.transform = function (value, digits) {\n return formatNumber(PercentPipe, this._locale, value, NumberFormatStyle.Percent, digits);\n };\n return PercentPipe;\n}());\nPercentPipe.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Pipe\"], args: [{ name: 'percent' },] },\n];\n/**\n * @nocollapse\n */\nPercentPipe.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"LOCALE_ID\"],] },] },\n]; };\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number as currency using locale rules.\n * \\@howToUse `number_expression | currency[:currencyCode[:symbolDisplay[:digitInfo]]]`\n * \\@description\n *\n * Use `currency` to format a number as currency.\n *\n * - `currencyCode` is the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, such\n * as `USD` for the US dollar and `EUR` for the euro.\n * - `symbolDisplay` is a boolean indicating whether to use the currency symbol or code.\n * - `true`: use symbol (e.g. `$`).\n * - `false`(default): use code (e.g. `USD`).\n * - `digitInfo` See {\\@link DecimalPipe} for detailed description.\n *\n * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers\n * and may require a polyfill. See [Browser Support](guide/browser-support) for details.\n *\n * ### Example\n *\n * {\\@example common/pipes/ts/number_pipe.ts region='CurrencyPipe'}\n *\n * \\@stable\n */\nvar CurrencyPipe = (function () {\n /**\n * @param {?} _locale\n */\n function CurrencyPipe(_locale) {\n this._locale = _locale;\n }\n /**\n * @param {?} value\n * @param {?=} currencyCode\n * @param {?=} symbolDisplay\n * @param {?=} digits\n * @return {?}\n */\n CurrencyPipe.prototype.transform = function (value, currencyCode, symbolDisplay, digits) {\n if (currencyCode === void 0) { currencyCode = 'USD'; }\n if (symbolDisplay === void 0) { symbolDisplay = false; }\n return formatNumber(CurrencyPipe, this._locale, value, NumberFormatStyle.Currency, digits, currencyCode, symbolDisplay);\n };\n return CurrencyPipe;\n}());\nCurrencyPipe.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Pipe\"], args: [{ name: 'currency' },] },\n];\n/**\n * @nocollapse\n */\nCurrencyPipe.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"LOCALE_ID\"],] },] },\n]; };\n/**\n * @param {?} text\n * @return {?}\n */\nfunction parseIntAutoRadix(text) {\n var /** @type {?} */ result = parseInt(text);\n if (isNaN(result)) {\n throw new Error('Invalid integer literal when parsing ' + text);\n }\n return result;\n}\n/**\n * @param {?} value\n * @return {?}\n */\nfunction isNumeric(value) {\n return !isNaN(value - parseFloat(value));\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar ISO8601_DATE_REGEX = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a date according to locale rules.\n * \\@howToUse `date_expression | date[:format]`\n * \\@description\n *\n * Where:\n * - `expression` is a date object or a number (milliseconds since UTC epoch) or an ISO string\n * (https://www.w3.org/TR/NOTE-datetime).\n * - `format` indicates which date/time components to include. The format can be predefined as\n * shown below or custom as shown in the table.\n * - `'medium'`: equivalent to `'yMMMdjms'` (e.g. `Sep 3, 2010, 12:05:08 PM` for `en-US`)\n * - `'short'`: equivalent to `'yMdjm'` (e.g. `9/3/2010, 12:05 PM` for `en-US`)\n * - `'fullDate'`: equivalent to `'yMMMMEEEEd'` (e.g. `Friday, September 3, 2010` for `en-US`)\n * - `'longDate'`: equivalent to `'yMMMMd'` (e.g. `September 3, 2010` for `en-US`)\n * - `'mediumDate'`: equivalent to `'yMMMd'` (e.g. `Sep 3, 2010` for `en-US`)\n * - `'shortDate'`: equivalent to `'yMd'` (e.g. `9/3/2010` for `en-US`)\n * - `'mediumTime'`: equivalent to `'jms'` (e.g. `12:05:08 PM` for `en-US`)\n * - `'shortTime'`: equivalent to `'jm'` (e.g. `12:05 PM` for `en-US`)\n *\n *\n * | Component | Symbol | Narrow | Short Form | Long Form | Numeric | 2-digit |\n * |-----------|:------:|--------|--------------|-------------------|-----------|-----------|\n * | era | G | G (A) | GGG (AD) | GGGG (Anno Domini)| - | - |\n * | year | y | - | - | - | y (2015) | yy (15) |\n * | month | M | L (S) | MMM (Sep) | MMMM (September) | M (9) | MM (09) |\n * | day | d | - | - | - | d (3) | dd (03) |\n * | weekday | E | E (S) | EEE (Sun) | EEEE (Sunday) | - | - |\n * | hour | j | - | - | - | j (13) | jj (13) |\n * | hour12 | h | - | - | - | h (1 PM) | hh (01 PM)|\n * | hour24 | H | - | - | - | H (13) | HH (13) |\n * | minute | m | - | - | - | m (5) | mm (05) |\n * | second | s | - | - | - | s (9) | ss (09) |\n * | timezone | z | - | - | z (Pacific Standard Time)| - | - |\n * | timezone | Z | - | Z (GMT-8:00) | - | - | - |\n * | timezone | a | - | a (PM) | - | - | - |\n *\n * In javascript, only the components specified will be respected (not the ordering,\n * punctuations, ...) and details of the formatting will be dependent on the locale.\n *\n * Timezone of the formatted text will be the local system timezone of the end-user's machine.\n *\n * When the expression is a ISO string without time (e.g. 2016-09-19) the time zone offset is not\n * applied and the formatted text will have the same day, month and year of the expression.\n *\n * WARNINGS:\n * - this pipe is marked as pure hence it will not be re-evaluated when the input is mutated.\n * Instead users should treat the date as an immutable object and change the reference when the\n * pipe needs to re-run (this is to avoid reformatting the date on every change detection run\n * which would be an expensive operation).\n * - this pipe uses the Internationalization API. Therefore it is only reliable in Chrome and Opera\n * browsers.\n *\n * ### Examples\n *\n * Assuming `dateObj` is (year: 2015, month: 6, day: 15, hour: 21, minute: 43, second: 11)\n * in the _local_ time and locale is 'en-US':\n *\n * ```\n * {{ dateObj | date }} // output is 'Jun 15, 2015'\n * {{ dateObj | date:'medium' }} // output is 'Jun 15, 2015, 9:43:11 PM'\n * {{ dateObj | date:'shortTime' }} // output is '9:43 PM'\n * {{ dateObj | date:'mmss' }} // output is '43:11'\n * ```\n *\n * {\\@example common/pipes/ts/date_pipe.ts region='DatePipe'}\n *\n * \\@stable\n */\nvar DatePipe = (function () {\n /**\n * @param {?} _locale\n */\n function DatePipe(_locale) {\n this._locale = _locale;\n }\n /**\n * @param {?} value\n * @param {?=} pattern\n * @return {?}\n */\n DatePipe.prototype.transform = function (value, pattern) {\n if (pattern === void 0) { pattern = 'mediumDate'; }\n var /** @type {?} */ date;\n if (isBlank(value) || value !== value)\n return null;\n if (typeof value === 'string') {\n value = value.trim();\n }\n if (isDate(value)) {\n date = value;\n }\n else if (isNumeric(value)) {\n date = new Date(parseFloat(value));\n }\n else if (typeof value === 'string' && /^(\\d{4}-\\d{1,2}-\\d{1,2})$/.test(value)) {\n /**\n * For ISO Strings without time the day, month and year must be extracted from the ISO String\n * before Date creation to avoid time offset and errors in the new Date.\n * If we only replace '-' with ',' in the ISO String (\"2015,01,01\"), and try to create a new\n * date, some browsers (e.g. IE 9) will throw an invalid Date error\n * If we leave the '-' (\"2015-01-01\") and try to create a new Date(\"2015-01-01\") the timeoffset\n * is applied\n * Note: ISO months are 0 for January, 1 for February, ...\n */\n var _a = value.split('-').map(function (val) { return parseInt(val, 10); }), y = _a[0], m = _a[1], d = _a[2];\n date = new Date(y, m - 1, d);\n }\n else {\n date = new Date(value);\n }\n if (!isDate(date)) {\n var /** @type {?} */ match = void 0;\n if ((typeof value === 'string') && (match = value.match(ISO8601_DATE_REGEX))) {\n date = isoStringToDate(match);\n }\n else {\n throw invalidPipeArgumentError(DatePipe, value);\n }\n }\n return DateFormatter.format(date, this._locale, DatePipe._ALIASES[pattern] || pattern);\n };\n return DatePipe;\n}());\n/**\n * \\@internal\n */\nDatePipe._ALIASES = {\n 'medium': 'yMMMdjms',\n 'short': 'yMdjm',\n 'fullDate': 'yMMMMEEEEd',\n 'longDate': 'yMMMMd',\n 'mediumDate': 'yMMMd',\n 'shortDate': 'yMd',\n 'mediumTime': 'jms',\n 'shortTime': 'jm'\n};\nDatePipe.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Pipe\"], args: [{ name: 'date', pure: true },] },\n];\n/**\n * @nocollapse\n */\nDatePipe.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"LOCALE_ID\"],] },] },\n]; };\n/**\n * @param {?} obj\n * @return {?}\n */\nfunction isBlank(obj) {\n return obj == null || obj === '';\n}\n/**\n * @param {?} obj\n * @return {?}\n */\nfunction isDate(obj) {\n return obj instanceof Date && !isNaN(obj.valueOf());\n}\n/**\n * @param {?} match\n * @return {?}\n */\nfunction isoStringToDate(match) {\n var /** @type {?} */ date = new Date(0);\n var /** @type {?} */ tzHour = 0;\n var /** @type {?} */ tzMin = 0;\n var /** @type {?} */ dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;\n var /** @type {?} */ timeSetter = match[8] ? date.setUTCHours : date.setHours;\n if (match[9]) {\n tzHour = toInt(match[9] + match[10]);\n tzMin = toInt(match[9] + match[11]);\n }\n dateSetter.call(date, toInt(match[1]), toInt(match[2]) - 1, toInt(match[3]));\n var /** @type {?} */ h = toInt(match[4] || '0') - tzHour;\n var /** @type {?} */ m = toInt(match[5] || '0') - tzMin;\n var /** @type {?} */ s = toInt(match[6] || '0');\n var /** @type {?} */ ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);\n timeSetter.call(date, h, m, s, ms);\n return date;\n}\n/**\n * @param {?} str\n * @return {?}\n */\nfunction toInt(str) {\n return parseInt(str, 10);\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar _INTERPOLATION_REGEXP = /#/g;\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Maps a value to a string that pluralizes the value according to locale rules.\n * \\@howToUse `expression | i18nPlural:mapping`\n * \\@description\n *\n * Where:\n * - `expression` is a number.\n * - `mapping` is an object that mimics the ICU format, see\n * http://userguide.icu-project.org/formatparse/messages\n *\n * ## Example\n *\n * {\\@example common/pipes/ts/i18n_pipe.ts region='I18nPluralPipeComponent'}\n *\n * \\@experimental\n */\nvar I18nPluralPipe = (function () {\n /**\n * @param {?} _localization\n */\n function I18nPluralPipe(_localization) {\n this._localization = _localization;\n }\n /**\n * @param {?} value\n * @param {?} pluralMap\n * @return {?}\n */\n I18nPluralPipe.prototype.transform = function (value, pluralMap) {\n if (value == null)\n return '';\n if (typeof pluralMap !== 'object' || pluralMap === null) {\n throw invalidPipeArgumentError(I18nPluralPipe, pluralMap);\n }\n var /** @type {?} */ key = getPluralCategory(value, Object.keys(pluralMap), this._localization);\n return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());\n };\n return I18nPluralPipe;\n}());\nI18nPluralPipe.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Pipe\"], args: [{ name: 'i18nPlural', pure: true },] },\n];\n/**\n * @nocollapse\n */\nI18nPluralPipe.ctorParameters = function () { return [\n { type: NgLocalization, },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Generic selector that displays the string that matches the current value.\n * \\@howToUse `expression | i18nSelect:mapping`\n * \\@description\n *\n * Where `mapping` is an object that indicates the text that should be displayed\n * for different values of the provided `expression`.\n * If none of the keys of the mapping match the value of the `expression`, then the content\n * of the `other` key is returned when present, otherwise an empty string is returned.\n *\n * ## Example\n *\n * {\\@example common/pipes/ts/i18n_pipe.ts region='I18nSelectPipeComponent'}\n *\n * \\@experimental\n */\nvar I18nSelectPipe = (function () {\n function I18nSelectPipe() {\n }\n /**\n * @param {?} value\n * @param {?} mapping\n * @return {?}\n */\n I18nSelectPipe.prototype.transform = function (value, mapping) {\n if (value == null)\n return '';\n if (typeof mapping !== 'object' || typeof value !== 'string') {\n throw invalidPipeArgumentError(I18nSelectPipe, mapping);\n }\n if (mapping.hasOwnProperty(value)) {\n return mapping[value];\n }\n if (mapping.hasOwnProperty('other')) {\n return mapping['other'];\n }\n return '';\n };\n return I18nSelectPipe;\n}());\nI18nSelectPipe.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Pipe\"], args: [{ name: 'i18nSelect', pure: true },] },\n];\n/**\n * @nocollapse\n */\nI18nSelectPipe.ctorParameters = function () { return []; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Converts value into JSON string.\n * \\@howToUse `expression | json`\n * \\@description\n *\n * Converts value into string using `JSON.stringify`. Useful for debugging.\n *\n * ### Example\n * {\\@example common/pipes/ts/json_pipe.ts region='JsonPipe'}\n *\n * \\@stable\n */\nvar JsonPipe = (function () {\n function JsonPipe() {\n }\n /**\n * @param {?} value\n * @return {?}\n */\n JsonPipe.prototype.transform = function (value) { return JSON.stringify(value, null, 2); };\n return JsonPipe;\n}());\nJsonPipe.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Pipe\"], args: [{ name: 'json', pure: false },] },\n];\n/**\n * @nocollapse\n */\nJsonPipe.ctorParameters = function () { return []; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Creates a new List or String containing a subset (slice) of the elements.\n * \\@howToUse `array_or_string_expression | slice:start[:end]`\n * \\@description\n *\n * Where the input expression is a `List` or `String`, and:\n * - `start`: The starting index of the subset to return.\n * - **a positive integer**: return the item at `start` index and all items after\n * in the list or string expression.\n * - **a negative integer**: return the item at `start` index from the end and all items after\n * in the list or string expression.\n * - **if positive and greater than the size of the expression**: return an empty list or string.\n * - **if negative and greater than the size of the expression**: return entire list or string.\n * - `end`: The ending index of the subset to return.\n * - **omitted**: return all items until the end.\n * - **if positive**: return all items before `end` index of the list or string.\n * - **if negative**: return all items before `end` index from the end of the list or string.\n *\n * All behavior is based on the expected behavior of the JavaScript API `Array.prototype.slice()`\n * and `String.prototype.slice()`.\n *\n * When operating on a [List], the returned list is always a copy even when all\n * the elements are being returned.\n *\n * When operating on a blank value, the pipe returns the blank value.\n *\n * ## List Example\n *\n * This `ngFor` example:\n *\n * {\\@example common/pipes/ts/slice_pipe.ts region='SlicePipe_list'}\n *\n * produces the following:\n *\n *
  • b
  • \n *
  • c
  • \n *\n * ## String Examples\n *\n * {\\@example common/pipes/ts/slice_pipe.ts region='SlicePipe_string'}\n *\n * \\@stable\n */\nvar SlicePipe = (function () {\n function SlicePipe() {\n }\n /**\n * @param {?} value\n * @param {?} start\n * @param {?=} end\n * @return {?}\n */\n SlicePipe.prototype.transform = function (value, start, end) {\n if (value == null)\n return value;\n if (!this.supports(value)) {\n throw invalidPipeArgumentError(SlicePipe, value);\n }\n return value.slice(start, end);\n };\n /**\n * @param {?} obj\n * @return {?}\n */\n SlicePipe.prototype.supports = function (obj) { return typeof obj === 'string' || Array.isArray(obj); };\n return SlicePipe;\n}());\nSlicePipe.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Pipe\"], args: [{ name: 'slice', pure: false },] },\n];\n/**\n * @nocollapse\n */\nSlicePipe.ctorParameters = function () { return []; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @module\n * @description\n * This module provides a set of common Pipes.\n */\n/**\n * A collection of Angular pipes that are likely to be used in each and every application.\n */\nvar COMMON_PIPES = [\n AsyncPipe,\n UpperCasePipe,\n LowerCasePipe,\n JsonPipe,\n SlicePipe,\n DecimalPipe,\n PercentPipe,\n TitleCasePipe,\n CurrencyPipe,\n DatePipe,\n I18nPluralPipe,\n I18nSelectPipe,\n];\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The module that includes all the basic Angular directives like {\\@link NgIf}, {\\@link NgForOf}, ...\n *\n * \\@stable\n */\nvar CommonModule = (function () {\n function CommonModule() {\n }\n return CommonModule;\n}());\nCommonModule.decorators = [\n { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"NgModule\"], args: [{\n declarations: [COMMON_DIRECTIVES, COMMON_PIPES],\n exports: [COMMON_DIRECTIVES, COMMON_PIPES],\n providers: [\n { provide: NgLocalization, useClass: NgLocaleLocalization },\n ],\n },] },\n];\n/**\n * @nocollapse\n */\nCommonModule.ctorParameters = function () { return []; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A DI Token representing the main rendering context. In a browser this is the DOM Document.\n *\n * Note: Document might not be available in the Application Context when Application and Rendering\n * Contexts are not the same (e.g. when running the application into a Web Worker).\n *\n * \\@stable\n */\nvar DOCUMENT = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"InjectionToken\"]('DocumentToken');\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar PLATFORM_BROWSER_ID = 'browser';\nvar PLATFORM_SERVER_ID = 'server';\nvar PLATFORM_WORKER_APP_ID = 'browserWorkerApp';\nvar PLATFORM_WORKER_UI_ID = 'browserWorkerUi';\n/**\n * Returns whether a platform id represents a browser platform.\n * \\@experimental\n * @param {?} platformId\n * @return {?}\n */\nfunction isPlatformBrowser(platformId) {\n return platformId === PLATFORM_BROWSER_ID;\n}\n/**\n * Returns whether a platform id represents a server platform.\n * \\@experimental\n * @param {?} platformId\n * @return {?}\n */\nfunction isPlatformServer(platformId) {\n return platformId === PLATFORM_SERVER_ID;\n}\n/**\n * Returns whether a platform id represents a web worker app platform.\n * \\@experimental\n * @param {?} platformId\n * @return {?}\n */\nfunction isPlatformWorkerApp(platformId) {\n return platformId === PLATFORM_WORKER_APP_ID;\n}\n/**\n * Returns whether a platform id represents a web worker UI platform.\n * \\@experimental\n * @param {?} platformId\n * @return {?}\n */\nfunction isPlatformWorkerUi(platformId) {\n return platformId === PLATFORM_WORKER_UI_ID;\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n/**\n * \\@stable\n */\nvar VERSION = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Version\"]('4.3.2');\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n/**\n * Generated bundle index. Do not edit.\n */\n\n//# sourceMappingURL=common.es5.js.map\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGFuZ3VsYXIvY29tbW9uL0Bhbmd1bGFyL2NvbW1vbi5lczUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L0Bhbmd1bGFyL2NvbW1vbi9AYW5ndWxhci9jb21tb24uZXM1LmpzPzRlZDUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbi8qKlxuICogQGxpY2Vuc2UgQW5ndWxhciB2NC4zLjJcbiAqIChjKSAyMDEwLTIwMTcgR29vZ2xlLCBJbmMuIGh0dHBzOi8vYW5ndWxhci5pby9cbiAqIExpY2Vuc2U6IE1JVFxuICovXG5pbXBvcnQgeyBBdHRyaWJ1dGUsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0LCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBJbnB1dCwgSXRlcmFibGVEaWZmZXJzLCBLZXlWYWx1ZURpZmZlcnMsIExPQ0FMRV9JRCwgTmdNb2R1bGUsIE5nTW9kdWxlUmVmLCBPcHRpb25hbCwgUGlwZSwgUmVuZGVyZXIsIFRlbXBsYXRlUmVmLCBWZXJzaW9uLCBWaWV3Q29udGFpbmVyUmVmLCBXcmFwcGVkVmFsdWUsIGlzRGV2TW9kZSwgybVpc0xpc3RMaWtlSXRlcmFibGUsIMm1aXNPYnNlcnZhYmxlLCDJtWlzUHJvbWlzZSwgybVzdHJpbmdpZnkgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8qKlxuICogVGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkgYnkgYW4gYXBwbGljYXRpb24gZGV2ZWxvcGVyLiBJbnN0ZWFkLCB1c2VcbiAqIHtcXEBsaW5rIExvY2F0aW9ufS5cbiAqXG4gKiBgUGxhdGZvcm1Mb2NhdGlvbmAgZW5jYXBzdWxhdGVzIGFsbCBjYWxscyB0byBET00gYXBpcywgd2hpY2ggYWxsb3dzIHRoZSBSb3V0ZXIgdG8gYmUgcGxhdGZvcm1cbiAqIGFnbm9zdGljLlxuICogVGhpcyBtZWFucyB0aGF0IHdlIGNhbiBoYXZlIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBvZiBgUGxhdGZvcm1Mb2NhdGlvbmAgZm9yIHRoZSBkaWZmZXJlbnRcbiAqIHBsYXRmb3JtcyB0aGF0IGFuZ3VsYXIgc3VwcG9ydHMuIEZvciBleGFtcGxlLCBgXFxAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyYCBwcm92aWRlcyBhblxuICogaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdG8gdGhlIGJyb3dzZXIgZW52aXJvbm1lbnQsIHdoaWxlIGBcXEBhbmd1bGFyL3BsYXRmb3JtLXdlYndvcmtlcmAgcHJvdmlkZXNcbiAqIG9uZSBzdWl0YWJsZSBmb3IgdXNlIHdpdGggd2ViIHdvcmtlcnMuXG4gKlxuICogVGhlIGBQbGF0Zm9ybUxvY2F0aW9uYCBjbGFzcyBpcyB1c2VkIGRpcmVjdGx5IGJ5IGFsbCBpbXBsZW1lbnRhdGlvbnMgb2Yge1xcQGxpbmsgTG9jYXRpb25TdHJhdGVneX1cbiAqIHdoZW4gdGhleSBuZWVkIHRvIGludGVyYWN0IHdpdGggdGhlIERPTSBhcGlzIGxpa2UgcHVzaFN0YXRlLCBwb3BTdGF0ZSwgZXRjLi4uXG4gKlxuICoge1xcQGxpbmsgTG9jYXRpb25TdHJhdGVneX0gaW4gdHVybiBpcyB1c2VkIGJ5IHRoZSB7XFxAbGluayBMb2NhdGlvbn0gc2VydmljZSB3aGljaCBpcyB1c2VkIGRpcmVjdGx5XG4gKiBieSB0aGUge1xcQGxpbmsgUm91dGVyfSBpbiBvcmRlciB0byBuYXZpZ2F0ZSBiZXR3ZWVuIHJvdXRlcy4gU2luY2UgYWxsIGludGVyYWN0aW9ucyBiZXR3ZWVuIHtcXEBsaW5rXG4gKiBSb3V0ZXJ9IC9cbiAqIHtcXEBsaW5rIExvY2F0aW9ufSAvIHtcXEBsaW5rIExvY2F0aW9uU3RyYXRlZ3l9IGFuZCBET00gYXBpcyBmbG93IHRocm91Z2ggdGhlIGBQbGF0Zm9ybUxvY2F0aW9uYFxuICogY2xhc3MgdGhleSBhcmUgYWxsIHBsYXRmb3JtIGluZGVwZW5kZW50LlxuICpcbiAqIFxcQHN0YWJsZVxuICogQGFic3RyYWN0XG4gKi9cbnZhciBQbGF0Zm9ybUxvY2F0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQbGF0Zm9ybUxvY2F0aW9uKCkge1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAYWJzdHJhY3RcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIFBsYXRmb3JtTG9jYXRpb24ucHJvdG90eXBlLmdldEJhc2VIcmVmRnJvbURPTSA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICAvKipcbiAgICAgKiBAYWJzdHJhY3RcbiAgICAgKiBAcGFyYW0gez99IGZuXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBQbGF0Zm9ybUxvY2F0aW9uLnByb3RvdHlwZS5vblBvcFN0YXRlID0gZnVuY3Rpb24gKGZuKSB7IH07XG4gICAgLyoqXG4gICAgICogQGFic3RyYWN0XG4gICAgICogQHBhcmFtIHs/fSBmblxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgUGxhdGZvcm1Mb2NhdGlvbi5wcm90b3R5cGUub25IYXNoQ2hhbmdlID0gZnVuY3Rpb24gKGZuKSB7IH07XG4gICAgLyoqXG4gICAgICogQGFic3RyYWN0XG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBQbGF0Zm9ybUxvY2F0aW9uLnByb3RvdHlwZS5wYXRobmFtZSA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICAvKipcbiAgICAgKiBAYWJzdHJhY3RcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIFBsYXRmb3JtTG9jYXRpb24ucHJvdG90eXBlLnNlYXJjaCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICAvKipcbiAgICAgKiBAYWJzdHJhY3RcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIFBsYXRmb3JtTG9jYXRpb24ucHJvdG90eXBlLmhhc2ggPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgLyoqXG4gICAgICogQGFic3RyYWN0XG4gICAgICogQHBhcmFtIHs/fSBzdGF0ZVxuICAgICAqIEBwYXJhbSB7P30gdGl0bGVcbiAgICAgKiBAcGFyYW0gez99IHVybFxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgUGxhdGZvcm1Mb2NhdGlvbi5wcm90b3R5cGUucmVwbGFjZVN0YXRlID0gZnVuY3Rpb24gKHN0YXRlLCB0aXRsZSwgdXJsKSB7IH07XG4gICAgLyoqXG4gICAgICogQGFic3RyYWN0XG4gICAgICogQHBhcmFtIHs/fSBzdGF0ZVxuICAgICAqIEBwYXJhbSB7P30gdGl0bGVcbiAgICAgKiBAcGFyYW0gez99IHVybFxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgUGxhdGZvcm1Mb2NhdGlvbi5wcm90b3R5cGUucHVzaFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlLCB0aXRsZSwgdXJsKSB7IH07XG4gICAgLyoqXG4gICAgICogQGFic3RyYWN0XG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBQbGF0Zm9ybUxvY2F0aW9uLnByb3RvdHlwZS5mb3J3YXJkID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIC8qKlxuICAgICAqIEBhYnN0cmFjdFxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgUGxhdGZvcm1Mb2NhdGlvbi5wcm90b3R5cGUuYmFjayA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICByZXR1cm4gUGxhdGZvcm1Mb2NhdGlvbjtcbn0oKSk7XG4vKipcbiAqIFxcQHdoYXRJdERvZXMgaW5kaWNhdGVzIHdoZW4gYSBsb2NhdGlvbiBpcyBpbml0aWFsaXplZFxuICogXFxAZXhwZXJpbWVudGFsXG4gKi9cbnZhciBMT0NBVElPTl9JTklUSUFMSVpFRCA9IG5ldyBJbmplY3Rpb25Ub2tlbignTG9jYXRpb24gSW5pdGlhbGl6ZWQnKTtcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8qKlxuICogYExvY2F0aW9uU3RyYXRlZ3lgIGlzIHJlc3BvbnNpYmxlIGZvciByZXByZXNlbnRpbmcgYW5kIHJlYWRpbmcgcm91dGUgc3RhdGVcbiAqIGZyb20gdGhlIGJyb3dzZXIncyBVUkwuIEFuZ3VsYXIgcHJvdmlkZXMgdHdvIHN0cmF0ZWdpZXM6XG4gKiB7XFxAbGluayBIYXNoTG9jYXRpb25TdHJhdGVneX0gYW5kIHtcXEBsaW5rIFBhdGhMb2NhdGlvblN0cmF0ZWd5fS5cbiAqXG4gKiBUaGlzIGlzIHVzZWQgdW5kZXIgdGhlIGhvb2Qgb2YgdGhlIHtcXEBsaW5rIExvY2F0aW9ufSBzZXJ2aWNlLlxuICpcbiAqIEFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSB7XFxAbGluayBSb3V0ZXJ9IG9yIHtcXEBsaW5rIExvY2F0aW9ufSBzZXJ2aWNlcyB0b1xuICogaW50ZXJhY3Qgd2l0aCBhcHBsaWNhdGlvbiByb3V0ZSBzdGF0ZS5cbiAqXG4gKiBGb3IgaW5zdGFuY2UsIHtcXEBsaW5rIEhhc2hMb2NhdGlvblN0cmF0ZWd5fSBwcm9kdWNlcyBVUkxzIGxpa2VcbiAqIGBodHRwOi8vZXhhbXBsZS5jb20jL2Zvb2AsIGFuZCB7XFxAbGluayBQYXRoTG9jYXRpb25TdHJhdGVneX0gcHJvZHVjZXNcbiAqIGBodHRwOi8vZXhhbXBsZS5jb20vZm9vYCBhcyBhbiBlcXVpdmFsZW50IFVSTC5cbiAqXG4gKiBTZWUgdGhlc2UgdHdvIGNsYXNzZXMgZm9yIG1vcmUuXG4gKlxuICogXFxAc3RhYmxlXG4gKiBAYWJzdHJhY3RcbiAqL1xudmFyIExvY2F0aW9uU3RyYXRlZ3kgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExvY2F0aW9uU3RyYXRlZ3koKSB7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBhYnN0cmFjdFxuICAgICAqIEBwYXJhbSB7Pz19IGluY2x1ZGVIYXNoXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBMb2NhdGlvblN0cmF0ZWd5LnByb3RvdHlwZS5wYXRoID0gZnVuY3Rpb24gKGluY2x1ZGVIYXNoKSB7IH07XG4gICAgLyoqXG4gICAgICogQGFic3RyYWN0XG4gICAgICogQHBhcmFtIHs/fSBpbnRlcm5hbFxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTG9jYXRpb25TdHJhdGVneS5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsID0gZnVuY3Rpb24gKGludGVybmFsKSB7IH07XG4gICAgLyoqXG4gICAgICogQGFic3RyYWN0XG4gICAgICogQHBhcmFtIHs/fSBzdGF0ZVxuICAgICAqIEBwYXJhbSB7P30gdGl0bGVcbiAgICAgKiBAcGFyYW0gez99IHVybFxuICAgICAqIEBwYXJhbSB7P30gcXVlcnlQYXJhbXNcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIExvY2F0aW9uU3RyYXRlZ3kucHJvdG90eXBlLnB1c2hTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdGl0bGUsIHVybCwgcXVlcnlQYXJhbXMpIHsgfTtcbiAgICAvKipcbiAgICAgKiBAYWJzdHJhY3RcbiAgICAgKiBAcGFyYW0gez99IHN0YXRlXG4gICAgICogQHBhcmFtIHs/fSB0aXRsZVxuICAgICAqIEBwYXJhbSB7P30gdXJsXG4gICAgICogQHBhcmFtIHs/fSBxdWVyeVBhcmFtc1xuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTG9jYXRpb25TdHJhdGVneS5wcm90b3R5cGUucmVwbGFjZVN0YXRlID0gZnVuY3Rpb24gKHN0YXRlLCB0aXRsZSwgdXJsLCBxdWVyeVBhcmFtcykgeyB9O1xuICAgIC8qKlxuICAgICAqIEBhYnN0cmFjdFxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTG9jYXRpb25TdHJhdGVneS5wcm90b3R5cGUuZm9yd2FyZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICAvKipcbiAgICAgKiBAYWJzdHJhY3RcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIExvY2F0aW9uU3RyYXRlZ3kucHJvdG90eXBlLmJhY2sgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgLyoqXG4gICAgICogQGFic3RyYWN0XG4gICAgICogQHBhcmFtIHs/fSBmblxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTG9jYXRpb25TdHJhdGVneS5wcm90b3R5cGUub25Qb3BTdGF0ZSA9IGZ1bmN0aW9uIChmbikgeyB9O1xuICAgIC8qKlxuICAgICAqIEBhYnN0cmFjdFxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTG9jYXRpb25TdHJhdGVneS5wcm90b3R5cGUuZ2V0QmFzZUhyZWYgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgcmV0dXJuIExvY2F0aW9uU3RyYXRlZ3k7XG59KCkpO1xuLyoqXG4gKiBUaGUgYEFQUF9CQVNFX0hSRUZgIHRva2VuIHJlcHJlc2VudHMgdGhlIGJhc2UgaHJlZiB0byBiZSB1c2VkIHdpdGggdGhlXG4gKiB7XFxAbGluayBQYXRoTG9jYXRpb25TdHJhdGVneX0uXG4gKlxuICogSWYgeW91J3JlIHVzaW5nIHtcXEBsaW5rIFBhdGhMb2NhdGlvblN0cmF0ZWd5fSwgeW91IG11c3QgcHJvdmlkZSBhIHByb3ZpZGVyIHRvIGEgc3RyaW5nXG4gKiByZXByZXNlbnRpbmcgdGhlIFVSTCBwcmVmaXggdGhhdCBzaG91bGQgYmUgcHJlc2VydmVkIHdoZW4gZ2VuZXJhdGluZyBhbmQgcmVjb2duaXppbmdcbiAqIFVSTHMuXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQge0NvbXBvbmVudCwgTmdNb2R1bGV9IGZyb20gJ1xcQGFuZ3VsYXIvY29yZSc7XG4gKiBpbXBvcnQge0FQUF9CQVNFX0hSRUZ9IGZyb20gJ1xcQGFuZ3VsYXIvY29tbW9uJztcbiAqXG4gKiBcXEBOZ01vZHVsZSh7XG4gKiAgIHByb3ZpZGVyczogW3twcm92aWRlOiBBUFBfQkFTRV9IUkVGLCB1c2VWYWx1ZTogJy9teS9hcHAnfV1cbiAqIH0pXG4gKiBjbGFzcyBBcHBNb2R1bGUge31cbiAqIGBgYFxuICpcbiAqIFxcQHN0YWJsZVxuICovXG52YXIgQVBQX0JBU0VfSFJFRiA9IG5ldyBJbmplY3Rpb25Ub2tlbignYXBwQmFzZUhyZWYnKTtcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8qKlxuICogXFxAd2hhdEl0RG9lcyBgTG9jYXRpb25gIGlzIGEgc2VydmljZSB0aGF0IGFwcGxpY2F0aW9ucyBjYW4gdXNlIHRvIGludGVyYWN0IHdpdGggYSBicm93c2VyJ3MgVVJMLlxuICogXFxAZGVzY3JpcHRpb25cbiAqIERlcGVuZGluZyBvbiB3aGljaCB7XFxAbGluayBMb2NhdGlvblN0cmF0ZWd5fSBpcyB1c2VkLCBgTG9jYXRpb25gIHdpbGwgZWl0aGVyIHBlcnNpc3RcbiAqIHRvIHRoZSBVUkwncyBwYXRoIG9yIHRoZSBVUkwncyBoYXNoIHNlZ21lbnQuXG4gKlxuICogTm90ZTogaXQncyBiZXR0ZXIgdG8gdXNlIHtcXEBsaW5rIFJvdXRlciNuYXZpZ2F0ZX0gc2VydmljZSB0byB0cmlnZ2VyIHJvdXRlIGNoYW5nZXMuIFVzZVxuICogYExvY2F0aW9uYCBvbmx5IGlmIHlvdSBuZWVkIHRvIGludGVyYWN0IHdpdGggb3IgY3JlYXRlIG5vcm1hbGl6ZWQgVVJMcyBvdXRzaWRlIG9mXG4gKiByb3V0aW5nLlxuICpcbiAqIGBMb2NhdGlvbmAgaXMgcmVzcG9uc2libGUgZm9yIG5vcm1hbGl6aW5nIHRoZSBVUkwgYWdhaW5zdCB0aGUgYXBwbGljYXRpb24ncyBiYXNlIGhyZWYuXG4gKiBBIG5vcm1hbGl6ZWQgVVJMIGlzIGFic29sdXRlIGZyb20gdGhlIFVSTCBob3N0LCBpbmNsdWRlcyB0aGUgYXBwbGljYXRpb24ncyBiYXNlIGhyZWYsIGFuZCBoYXMgbm9cbiAqIHRyYWlsaW5nIHNsYXNoOlxuICogLSBgL215L2FwcC91c2VyLzEyM2AgaXMgbm9ybWFsaXplZFxuICogLSBgbXkvYXBwL3VzZXIvMTIzYCAqKmlzIG5vdCoqIG5vcm1hbGl6ZWRcbiAqIC0gYC9teS9hcHAvdXNlci8xMjMvYCAqKmlzIG5vdCoqIG5vcm1hbGl6ZWRcbiAqXG4gKiAjIyMgRXhhbXBsZVxuICoge1xcQGV4YW1wbGUgY29tbW9uL2xvY2F0aW9uL3RzL3BhdGhfbG9jYXRpb25fY29tcG9uZW50LnRzIHJlZ2lvbj0nTG9jYXRpb25Db21wb25lbnQnfVxuICogXFxAc3RhYmxlXG4gKi9cbnZhciBMb2NhdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBwbGF0Zm9ybVN0cmF0ZWd5XG4gICAgICovXG4gICAgZnVuY3Rpb24gTG9jYXRpb24ocGxhdGZvcm1TdHJhdGVneSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAvKipcbiAgICAgICAgICogXFxAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kgPSBwbGF0Zm9ybVN0cmF0ZWd5O1xuICAgICAgICB2YXIgYnJvd3NlckJhc2VIcmVmID0gdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5nZXRCYXNlSHJlZigpO1xuICAgICAgICB0aGlzLl9iYXNlSHJlZiA9IExvY2F0aW9uLnN0cmlwVHJhaWxpbmdTbGFzaChfc3RyaXBJbmRleEh0bWwoYnJvd3NlckJhc2VIcmVmKSk7XG4gICAgICAgIHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kub25Qb3BTdGF0ZShmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIF90aGlzLl9zdWJqZWN0LmVtaXQoe1xuICAgICAgICAgICAgICAgICd1cmwnOiBfdGhpcy5wYXRoKHRydWUpLFxuICAgICAgICAgICAgICAgICdwb3AnOiB0cnVlLFxuICAgICAgICAgICAgICAgICd0eXBlJzogZXYudHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/PX0gaW5jbHVkZUhhc2hcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIExvY2F0aW9uLnByb3RvdHlwZS5wYXRoID0gZnVuY3Rpb24gKGluY2x1ZGVIYXNoKSB7XG4gICAgICAgIGlmIChpbmNsdWRlSGFzaCA9PT0gdm9pZCAwKSB7IGluY2x1ZGVIYXNoID0gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplKHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucGF0aChpbmNsdWRlSGFzaCkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplcyB0aGUgZ2l2ZW4gcGF0aCBhbmQgY29tcGFyZXMgdG8gdGhlIGN1cnJlbnQgbm9ybWFsaXplZCBwYXRoLlxuICAgICAqIEBwYXJhbSB7P30gcGF0aFxuICAgICAqIEBwYXJhbSB7Pz19IHF1ZXJ5XG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBMb2NhdGlvbi5wcm90b3R5cGUuaXNDdXJyZW50UGF0aEVxdWFsVG8gPSBmdW5jdGlvbiAocGF0aCwgcXVlcnkpIHtcbiAgICAgICAgaWYgKHF1ZXJ5ID09PSB2b2lkIDApIHsgcXVlcnkgPSAnJzsgfVxuICAgICAgICByZXR1cm4gdGhpcy5wYXRoKCkgPT0gdGhpcy5ub3JtYWxpemUocGF0aCArIExvY2F0aW9uLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHF1ZXJ5KSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBVUkwsIHJldHVybnMgdGhlIG5vcm1hbGl6ZWQgVVJMIHBhdGggd2l0aG91dCBsZWFkaW5nIG9yXG4gICAgICogdHJhaWxpbmcgc2xhc2hlcy5cbiAgICAgKiBAcGFyYW0gez99IHVybFxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTG9jYXRpb24ucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICAgICAgcmV0dXJuIExvY2F0aW9uLnN0cmlwVHJhaWxpbmdTbGFzaChfc3RyaXBCYXNlSHJlZih0aGlzLl9iYXNlSHJlZiwgX3N0cmlwSW5kZXhIdG1sKHVybCkpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIFVSTCwgcmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZXh0ZXJuYWwgVVJMIHBhdGguXG4gICAgICogSWYgdGhlIGdpdmVuIFVSTCBkb2Vzbid0IGJlZ2luIHdpdGggYSBsZWFkaW5nIHNsYXNoIChgJy8nYCksIHRoaXMgbWV0aG9kIGFkZHMgb25lXG4gICAgICogYmVmb3JlIG5vcm1hbGl6aW5nLiBUaGlzIG1ldGhvZCB3aWxsIGFsc28gYWRkIGEgaGFzaCBpZiBgSGFzaExvY2F0aW9uU3RyYXRlZ3lgIGlzXG4gICAgICogdXNlZCwgb3IgdGhlIGBBUFBfQkFTRV9IUkVGYCBpZiB0aGUgYFBhdGhMb2NhdGlvblN0cmF0ZWd5YCBpcyBpbiB1c2UuXG4gICAgICogQHBhcmFtIHs/fSB1cmxcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIExvY2F0aW9uLnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmwgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgIGlmICh1cmwgJiYgdXJsWzBdICE9PSAnLycpIHtcbiAgICAgICAgICAgIHVybCA9ICcvJyArIHVybDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwodXJsKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENoYW5nZXMgdGhlIGJyb3dzZXJzIFVSTCB0byB0aGUgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBVUkwsIGFuZCBwdXNoZXMgYVxuICAgICAqIG5ldyBpdGVtIG9udG8gdGhlIHBsYXRmb3JtJ3MgaGlzdG9yeS5cbiAgICAgKiBAcGFyYW0gez99IHBhdGhcbiAgICAgKiBAcGFyYW0gez89fSBxdWVyeVxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTG9jYXRpb24ucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gKHBhdGgsIHF1ZXJ5KSB7XG4gICAgICAgIGlmIChxdWVyeSA9PT0gdm9pZCAwKSB7IHF1ZXJ5ID0gJyc7IH1cbiAgICAgICAgdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wdXNoU3RhdGUobnVsbCwgJycsIHBhdGgsIHF1ZXJ5KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENoYW5nZXMgdGhlIGJyb3dzZXJzIFVSTCB0byB0aGUgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBVUkwsIGFuZCByZXBsYWNlc1xuICAgICAqIHRoZSB0b3AgaXRlbSBvbiB0aGUgcGxhdGZvcm0ncyBoaXN0b3J5IHN0YWNrLlxuICAgICAqIEBwYXJhbSB7P30gcGF0aFxuICAgICAqIEBwYXJhbSB7Pz19IHF1ZXJ5XG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBMb2NhdGlvbi5wcm90b3R5cGUucmVwbGFjZVN0YXRlID0gZnVuY3Rpb24gKHBhdGgsIHF1ZXJ5KSB7XG4gICAgICAgIGlmIChxdWVyeSA9PT0gdm9pZCAwKSB7IHF1ZXJ5ID0gJyc7IH1cbiAgICAgICAgdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIHBhdGgsIHF1ZXJ5KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyBmb3J3YXJkIGluIHRoZSBwbGF0Zm9ybSdzIGhpc3RvcnkuXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBMb2NhdGlvbi5wcm90b3R5cGUuZm9yd2FyZCA9IGZ1bmN0aW9uICgpIHsgdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5mb3J3YXJkKCk7IH07XG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIGJhY2sgaW4gdGhlIHBsYXRmb3JtJ3MgaGlzdG9yeS5cbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIExvY2F0aW9uLnByb3RvdHlwZS5iYWNrID0gZnVuY3Rpb24gKCkgeyB0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmJhY2soKTsgfTtcbiAgICAvKipcbiAgICAgKiBTdWJzY3JpYmUgdG8gdGhlIHBsYXRmb3JtJ3MgYHBvcFN0YXRlYCBldmVudHMuXG4gICAgICogQHBhcmFtIHs/fSBvbk5leHRcbiAgICAgKiBAcGFyYW0gez89fSBvblRocm93XG4gICAgICogQHBhcmFtIHs/PX0gb25SZXR1cm5cbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIExvY2F0aW9uLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob25OZXh0LCBvblRocm93LCBvblJldHVybikge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoeyBuZXh0OiBvbk5leHQsIGVycm9yOiBvblRocm93LCBjb21wbGV0ZTogb25SZXR1cm4gfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIHN0cmluZyBvZiB1cmwgcGFyYW1ldGVycywgcHJlcGVuZCB3aXRoICc/JyBpZiBuZWVkZWQsIG90aGVyd2lzZSByZXR1cm4gcGFyYW1ldGVycyBhc1xuICAgICAqIGlzLlxuICAgICAqIEBwYXJhbSB7P30gcGFyYW1zXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBMb2NhdGlvbi5ub3JtYWxpemVRdWVyeVBhcmFtcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtcyAmJiBwYXJhbXNbMF0gIT09ICc/JyA/ICc/JyArIHBhcmFtcyA6IHBhcmFtcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEdpdmVuIDIgcGFydHMgb2YgYSB1cmwsIGpvaW4gdGhlbSB3aXRoIGEgc2xhc2ggaWYgbmVlZGVkLlxuICAgICAqIEBwYXJhbSB7P30gc3RhcnRcbiAgICAgKiBAcGFyYW0gez99IGVuZFxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTG9jYXRpb24uam9pbldpdGhTbGFzaCA9IGZ1bmN0aW9uIChzdGFydCwgZW5kKSB7XG4gICAgICAgIGlmIChzdGFydC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGVuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gc2xhc2hlcyA9IDA7XG4gICAgICAgIGlmIChzdGFydC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICBzbGFzaGVzKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuZC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgIHNsYXNoZXMrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2xhc2hlcyA9PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnQgKyBlbmQuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzbGFzaGVzID09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFydCArIGVuZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhcnQgKyAnLycgKyBlbmQ7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZiB1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2gsIHJlbW92ZSBpdCwgb3RoZXJ3aXNlIHJldHVybiB1cmwgYXMgaXMuIFRoaXNcbiAgICAgKiBtZXRob2QgbG9va3MgZm9yIHRoZSBmaXJzdCBvY2N1cmVuY2Ugb2YgZWl0aGVyICMsID8sIG9yIHRoZSBlbmQgb2YgdGhlXG4gICAgICogbGluZSBhcyBgL2AgY2hhcmFjdGVycyBhZnRlciBhbnkgb2YgdGhlc2Ugc2hvdWxkIG5vdCBiZSByZXBsYWNlZC5cbiAgICAgKiBAcGFyYW0gez99IHVybFxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTG9jYXRpb24uc3RyaXBUcmFpbGluZ1NsYXNoID0gZnVuY3Rpb24gKHVybCkge1xuICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBtYXRjaCA9IHVybC5tYXRjaCgvI3xcXD98JC8pO1xuICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBwYXRoRW5kSWR4ID0gbWF0Y2ggJiYgbWF0Y2guaW5kZXggfHwgdXJsLmxlbmd0aDtcbiAgICAgICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gZHJvcHBlZFNsYXNoSWR4ID0gcGF0aEVuZElkeCAtICh1cmxbcGF0aEVuZElkeCAtIDFdID09PSAnLycgPyAxIDogMCk7XG4gICAgICAgIHJldHVybiB1cmwuc2xpY2UoMCwgZHJvcHBlZFNsYXNoSWR4KSArIHVybC5zbGljZShwYXRoRW5kSWR4KTtcbiAgICB9O1xuICAgIHJldHVybiBMb2NhdGlvbjtcbn0oKSk7XG5Mb2NhdGlvbi5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKlxuICogQG5vY29sbGFwc2VcbiAqL1xuTG9jYXRpb24uY3RvclBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXG4gICAgeyB0eXBlOiBMb2NhdGlvblN0cmF0ZWd5LCB9LFxuXTsgfTtcbi8qKlxuICogQHBhcmFtIHs/fSBiYXNlSHJlZlxuICogQHBhcmFtIHs/fSB1cmxcbiAqIEByZXR1cm4gez99XG4gKi9cbmZ1bmN0aW9uIF9zdHJpcEJhc2VIcmVmKGJhc2VIcmVmLCB1cmwpIHtcbiAgICByZXR1cm4gYmFzZUhyZWYgJiYgdXJsLnN0YXJ0c1dpdGgoYmFzZUhyZWYpID8gdXJsLnN1YnN0cmluZyhiYXNlSHJlZi5sZW5ndGgpIDogdXJsO1xufVxuLyoqXG4gKiBAcGFyYW0gez99IHVybFxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gX3N0cmlwSW5kZXhIdG1sKHVybCkge1xuICAgIHJldHVybiB1cmwucmVwbGFjZSgvXFwvaW5kZXguaHRtbCQvLCAnJyk7XG59XG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG4vKipcbiAqIFxcQHdoYXRJdERvZXMgVXNlIFVSTCBoYXNoIGZvciBzdG9yaW5nIGFwcGxpY2F0aW9uIGxvY2F0aW9uIGRhdGEuXG4gKiBcXEBkZXNjcmlwdGlvblxuICogYEhhc2hMb2NhdGlvblN0cmF0ZWd5YCBpcyBhIHtcXEBsaW5rIExvY2F0aW9uU3RyYXRlZ3l9IHVzZWQgdG8gY29uZmlndXJlIHRoZVxuICoge1xcQGxpbmsgTG9jYXRpb259IHNlcnZpY2UgdG8gcmVwcmVzZW50IGl0cyBzdGF0ZSBpbiB0aGVcbiAqIFtoYXNoIGZyYWdtZW50XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Vbmlmb3JtX1Jlc291cmNlX0xvY2F0b3IjU3ludGF4KVxuICogb2YgdGhlIGJyb3dzZXIncyBVUkwuXG4gKlxuICogRm9yIGluc3RhbmNlLCBpZiB5b3UgY2FsbCBgbG9jYXRpb24uZ28oJy9mb28nKWAsIHRoZSBicm93c2VyJ3MgVVJMIHdpbGwgYmVjb21lXG4gKiBgZXhhbXBsZS5jb20jL2Zvb2AuXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiB7XFxAZXhhbXBsZSBjb21tb24vbG9jYXRpb24vdHMvaGFzaF9sb2NhdGlvbl9jb21wb25lbnQudHMgcmVnaW9uPSdMb2NhdGlvbkNvbXBvbmVudCd9XG4gKlxuICogXFxAc3RhYmxlXG4gKi9cbnZhciBIYXNoTG9jYXRpb25TdHJhdGVneSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoSGFzaExvY2F0aW9uU3RyYXRlZ3ksIF9zdXBlcik7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBfcGxhdGZvcm1Mb2NhdGlvblxuICAgICAqIEBwYXJhbSB7Pz19IF9iYXNlSHJlZlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIEhhc2hMb2NhdGlvblN0cmF0ZWd5KF9wbGF0Zm9ybUxvY2F0aW9uLCBfYmFzZUhyZWYpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuX3BsYXRmb3JtTG9jYXRpb24gPSBfcGxhdGZvcm1Mb2NhdGlvbjtcbiAgICAgICAgX3RoaXMuX2Jhc2VIcmVmID0gJyc7XG4gICAgICAgIGlmIChfYmFzZUhyZWYgIT0gbnVsbCkge1xuICAgICAgICAgICAgX3RoaXMuX2Jhc2VIcmVmID0gX2Jhc2VIcmVmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBmblxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgSGFzaExvY2F0aW9uU3RyYXRlZ3kucHJvdG90eXBlLm9uUG9wU3RhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKGZuKTtcbiAgICAgICAgdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoZm4pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBIYXNoTG9jYXRpb25TdHJhdGVneS5wcm90b3R5cGUuZ2V0QmFzZUhyZWYgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9iYXNlSHJlZjsgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez89fSBpbmNsdWRlSGFzaFxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgSGFzaExvY2F0aW9uU3RyYXRlZ3kucHJvdG90eXBlLnBhdGggPSBmdW5jdGlvbiAoaW5jbHVkZUhhc2gpIHtcbiAgICAgICAgaWYgKGluY2x1ZGVIYXNoID09PSB2b2lkIDApIHsgaW5jbHVkZUhhc2ggPSBmYWxzZTsgfVxuICAgICAgICAvLyB0aGUgaGFzaCB2YWx1ZSBpcyBhbHdheXMgcHJlZml4ZWQgd2l0aCBhIGAjYFxuICAgICAgICAvLyBhbmQgaWYgaXQgaXMgZW1wdHkgdGhlbiBpdCB3aWxsIHN0YXkgZW1wdHlcbiAgICAgICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gcGF0aCA9IHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtcbiAgICAgICAgaWYgKHBhdGggPT0gbnVsbClcbiAgICAgICAgICAgIHBhdGggPSAnIyc7XG4gICAgICAgIHJldHVybiBwYXRoLmxlbmd0aCA+IDAgPyBwYXRoLnN1YnN0cmluZygxKSA6IHBhdGg7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IGludGVybmFsXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBIYXNoTG9jYXRpb25TdHJhdGVneS5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsID0gZnVuY3Rpb24gKGludGVybmFsKSB7XG4gICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIHVybCA9IExvY2F0aW9uLmpvaW5XaXRoU2xhc2godGhpcy5fYmFzZUhyZWYsIGludGVybmFsKTtcbiAgICAgICAgcmV0dXJuIHVybC5sZW5ndGggPiAwID8gKCcjJyArIHVybCkgOiB1cmw7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHN0YXRlXG4gICAgICogQHBhcmFtIHs/fSB0aXRsZVxuICAgICAqIEBwYXJhbSB7P30gcGF0aFxuICAgICAqIEBwYXJhbSB7P30gcXVlcnlQYXJhbXNcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIEhhc2hMb2NhdGlvblN0cmF0ZWd5LnByb3RvdHlwZS5wdXNoU3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpdGxlLCBwYXRoLCBxdWVyeVBhcmFtcykge1xuICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyB1cmwgPSB0aGlzLnByZXBhcmVFeHRlcm5hbFVybChwYXRoICsgTG9jYXRpb24ubm9ybWFsaXplUXVlcnlQYXJhbXMocXVlcnlQYXJhbXMpKTtcbiAgICAgICAgaWYgKHVybC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdXJsID0gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShzdGF0ZSwgdGl0bGUsIHVybCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHN0YXRlXG4gICAgICogQHBhcmFtIHs/fSB0aXRsZVxuICAgICAqIEBwYXJhbSB7P30gcGF0aFxuICAgICAqIEBwYXJhbSB7P30gcXVlcnlQYXJhbXNcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIEhhc2hMb2NhdGlvblN0cmF0ZWd5LnByb3RvdHlwZS5yZXBsYWNlU3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpdGxlLCBwYXRoLCBxdWVyeVBhcmFtcykge1xuICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyB1cmwgPSB0aGlzLnByZXBhcmVFeHRlcm5hbFVybChwYXRoICsgTG9jYXRpb24ubm9ybWFsaXplUXVlcnlQYXJhbXMocXVlcnlQYXJhbXMpKTtcbiAgICAgICAgaWYgKHVybC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdXJsID0gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShzdGF0ZSwgdGl0bGUsIHVybCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIEhhc2hMb2NhdGlvblN0cmF0ZWd5LnByb3RvdHlwZS5mb3J3YXJkID0gZnVuY3Rpb24gKCkgeyB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKTsgfTtcbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIEhhc2hMb2NhdGlvblN0cmF0ZWd5LnByb3RvdHlwZS5iYWNrID0gZnVuY3Rpb24gKCkgeyB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKTsgfTtcbiAgICByZXR1cm4gSGFzaExvY2F0aW9uU3RyYXRlZ3k7XG59KExvY2F0aW9uU3RyYXRlZ3kpKTtcbkhhc2hMb2NhdGlvblN0cmF0ZWd5LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqXG4gKiBAbm9jb2xsYXBzZVxuICovXG5IYXNoTG9jYXRpb25TdHJhdGVneS5jdG9yUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtcbiAgICB7IHR5cGU6IFBsYXRmb3JtTG9jYXRpb24sIH0sXG4gICAgeyB0eXBlOiB1bmRlZmluZWQsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH0sIHsgdHlwZTogSW5qZWN0LCBhcmdzOiBbQVBQX0JBU0VfSFJFRixdIH0sXSB9LFxuXTsgfTtcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8qKlxuICogXFxAd2hhdEl0RG9lcyBVc2UgVVJMIGZvciBzdG9yaW5nIGFwcGxpY2F0aW9uIGxvY2F0aW9uIGRhdGEuXG4gKiBcXEBkZXNjcmlwdGlvblxuICogYFBhdGhMb2NhdGlvblN0cmF0ZWd5YCBpcyBhIHtcXEBsaW5rIExvY2F0aW9uU3RyYXRlZ3l9IHVzZWQgdG8gY29uZmlndXJlIHRoZVxuICoge1xcQGxpbmsgTG9jYXRpb259IHNlcnZpY2UgdG8gcmVwcmVzZW50IGl0cyBzdGF0ZSBpbiB0aGVcbiAqIFtwYXRoXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Vbmlmb3JtX1Jlc291cmNlX0xvY2F0b3IjU3ludGF4KSBvZiB0aGVcbiAqIGJyb3dzZXIncyBVUkwuXG4gKlxuICogSWYgeW91J3JlIHVzaW5nIGBQYXRoTG9jYXRpb25TdHJhdGVneWAsIHlvdSBtdXN0IHByb3ZpZGUgYSB7XFxAbGluayBBUFBfQkFTRV9IUkVGfVxuICogb3IgYWRkIGEgYmFzZSBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC4gVGhpcyBVUkwgcHJlZml4IHRoYXQgd2lsbCBiZSBwcmVzZXJ2ZWRcbiAqIHdoZW4gZ2VuZXJhdGluZyBhbmQgcmVjb2duaXppbmcgVVJMcy5cbiAqXG4gKiBGb3IgaW5zdGFuY2UsIGlmIHlvdSBwcm92aWRlIGFuIGBBUFBfQkFTRV9IUkVGYCBvZiBgJy9teS9hcHAnYCBhbmQgY2FsbFxuICogYGxvY2F0aW9uLmdvKCcvZm9vJylgLCB0aGUgYnJvd3NlcidzIFVSTCB3aWxsIGJlY29tZVxuICogYGV4YW1wbGUuY29tL215L2FwcC9mb29gLlxuICpcbiAqIFNpbWlsYXJseSwgaWYgeW91IGFkZCBgPGJhc2UgaHJlZj0nL215L2FwcCcvPmAgdG8gdGhlIGRvY3VtZW50IGFuZCBjYWxsXG4gKiBgbG9jYXRpb24uZ28oJy9mb28nKWAsIHRoZSBicm93c2VyJ3MgVVJMIHdpbGwgYmVjb21lXG4gKiBgZXhhbXBsZS5jb20vbXkvYXBwL2Zvb2AuXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiB7XFxAZXhhbXBsZSBjb21tb24vbG9jYXRpb24vdHMvcGF0aF9sb2NhdGlvbl9jb21wb25lbnQudHMgcmVnaW9uPSdMb2NhdGlvbkNvbXBvbmVudCd9XG4gKlxuICogXFxAc3RhYmxlXG4gKi9cbnZhciBQYXRoTG9jYXRpb25TdHJhdGVneSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoUGF0aExvY2F0aW9uU3RyYXRlZ3ksIF9zdXBlcik7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBfcGxhdGZvcm1Mb2NhdGlvblxuICAgICAqIEBwYXJhbSB7Pz19IGhyZWZcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBQYXRoTG9jYXRpb25TdHJhdGVneShfcGxhdGZvcm1Mb2NhdGlvbiwgaHJlZikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbiA9IF9wbGF0Zm9ybUxvY2F0aW9uO1xuICAgICAgICBpZiAoaHJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBocmVmID0gX3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhyZWZGcm9tRE9NKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhyZWYgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYmFzZSBocmVmIHNldC4gUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIEFQUF9CQVNFX0hSRUYgdG9rZW4gb3IgYWRkIGEgYmFzZSBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuX2Jhc2VIcmVmID0gaHJlZjtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IGZuXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBQYXRoTG9jYXRpb25TdHJhdGVneS5wcm90b3R5cGUub25Qb3BTdGF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoZm4pO1xuICAgICAgICB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShmbik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIFBhdGhMb2NhdGlvblN0cmF0ZWd5LnByb3RvdHlwZS5nZXRCYXNlSHJlZiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2Jhc2VIcmVmOyB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gaW50ZXJuYWxcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIFBhdGhMb2NhdGlvblN0cmF0ZWd5LnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmwgPSBmdW5jdGlvbiAoaW50ZXJuYWwpIHtcbiAgICAgICAgcmV0dXJuIExvY2F0aW9uLmpvaW5XaXRoU2xhc2godGhpcy5fYmFzZUhyZWYsIGludGVybmFsKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Pz19IGluY2x1ZGVIYXNoXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBQYXRoTG9jYXRpb25TdHJhdGVneS5wcm90b3R5cGUucGF0aCA9IGZ1bmN0aW9uIChpbmNsdWRlSGFzaCkge1xuICAgICAgICBpZiAoaW5jbHVkZUhhc2ggPT09IHZvaWQgMCkgeyBpbmNsdWRlSGFzaCA9IGZhbHNlOyB9XG4gICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIHBhdGhuYW1lID0gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSArXG4gICAgICAgICAgICBMb2NhdGlvbi5ub3JtYWxpemVRdWVyeVBhcmFtcyh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIGhhc2ggPSB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7XG4gICAgICAgIHJldHVybiBoYXNoICYmIGluY2x1ZGVIYXNoID8gXCJcIiArIHBhdGhuYW1lICsgaGFzaCA6IHBhdGhuYW1lO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBzdGF0ZVxuICAgICAqIEBwYXJhbSB7P30gdGl0bGVcbiAgICAgKiBAcGFyYW0gez99IHVybFxuICAgICAqIEBwYXJhbSB7P30gcXVlcnlQYXJhbXNcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIFBhdGhMb2NhdGlvblN0cmF0ZWd5LnByb3RvdHlwZS5wdXNoU3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpdGxlLCB1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIGV4dGVybmFsVXJsID0gdGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwodXJsICsgTG9jYXRpb24ubm9ybWFsaXplUXVlcnlQYXJhbXMocXVlcnlQYXJhbXMpKTtcbiAgICAgICAgdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoc3RhdGUsIHRpdGxlLCBleHRlcm5hbFVybCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHN0YXRlXG4gICAgICogQHBhcmFtIHs/fSB0aXRsZVxuICAgICAqIEBwYXJhbSB7P30gdXJsXG4gICAgICogQHBhcmFtIHs/fSBxdWVyeVBhcmFtc1xuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgUGF0aExvY2F0aW9uU3RyYXRlZ3kucHJvdG90eXBlLnJlcGxhY2VTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdGl0bGUsIHVybCwgcXVlcnlQYXJhbXMpIHtcbiAgICAgICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gZXh0ZXJuYWxVcmwgPSB0aGlzLnByZXBhcmVFeHRlcm5hbFVybCh1cmwgKyBMb2NhdGlvbi5ub3JtYWxpemVRdWVyeVBhcmFtcyhxdWVyeVBhcmFtcykpO1xuICAgICAgICB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShzdGF0ZSwgdGl0bGUsIGV4dGVybmFsVXJsKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgUGF0aExvY2F0aW9uU3RyYXRlZ3kucHJvdG90eXBlLmZvcndhcmQgPSBmdW5jdGlvbiAoKSB7IHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpOyB9O1xuICAgIC8qKlxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgUGF0aExvY2F0aW9uU3RyYXRlZ3kucHJvdG90eXBlLmJhY2sgPSBmdW5jdGlvbiAoKSB7IHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpOyB9O1xuICAgIHJldHVybiBQYXRoTG9jYXRpb25TdHJhdGVneTtcbn0oTG9jYXRpb25TdHJhdGVneSkpO1xuUGF0aExvY2F0aW9uU3RyYXRlZ3kuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKipcbiAqIEBub2NvbGxhcHNlXG4gKi9cblBhdGhMb2NhdGlvblN0cmF0ZWd5LmN0b3JQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW1xuICAgIHsgdHlwZTogUGxhdGZvcm1Mb2NhdGlvbiwgfSxcbiAgICB7IHR5cGU6IHVuZGVmaW5lZCwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfSwgeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtBUFBfQkFTRV9IUkVGLF0gfSxdIH0sXG5dOyB9O1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuLyoqXG4gKiBcXEBleHBlcmltZW50YWxcbiAqIEBhYnN0cmFjdFxuICovXG52YXIgTmdMb2NhbGl6YXRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5nTG9jYWxpemF0aW9uKCkge1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAYWJzdHJhY3RcbiAgICAgKiBAcGFyYW0gez99IHZhbHVlXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBOZ0xvY2FsaXphdGlvbi5wcm90b3R5cGUuZ2V0UGx1cmFsQ2F0ZWdvcnkgPSBmdW5jdGlvbiAodmFsdWUpIHsgfTtcbiAgICByZXR1cm4gTmdMb2NhbGl6YXRpb247XG59KCkpO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBwbHVyYWwgY2F0ZWdvcnkgZm9yIGEgZ2l2ZW4gdmFsdWUuXG4gKiAtIFwiPXZhbHVlXCIgd2hlbiB0aGUgY2FzZSBleGlzdHMsXG4gKiAtIHRoZSBwbHVyYWwgY2F0ZWdvcnkgb3RoZXJ3aXNlXG4gKlxuICogXFxAaW50ZXJuYWxcbiAqIEBwYXJhbSB7P30gdmFsdWVcbiAqIEBwYXJhbSB7P30gY2FzZXNcbiAqIEBwYXJhbSB7P30gbmdMb2NhbGl6YXRpb25cbiAqIEByZXR1cm4gez99XG4gKi9cbmZ1bmN0aW9uIGdldFBsdXJhbENhdGVnb3J5KHZhbHVlLCBjYXNlcywgbmdMb2NhbGl6YXRpb24pIHtcbiAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBrZXkgPSBcIj1cIiArIHZhbHVlO1xuICAgIGlmIChjYXNlcy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBrZXkgPSBuZ0xvY2FsaXphdGlvbi5nZXRQbHVyYWxDYXRlZ29yeSh2YWx1ZSk7XG4gICAgaWYgKGNhc2VzLmluZGV4T2Yoa2V5KSA+IC0xKSB7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIGlmIChjYXNlcy5pbmRleE9mKCdvdGhlcicpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuICdvdGhlcic7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBsdXJhbCBtZXNzYWdlIGZvdW5kIGZvciB2YWx1ZSBcXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgcGx1cmFsIGNhc2UgYmFzZWQgb24gdGhlIGxvY2FsZVxuICpcbiAqIFxcQGV4cGVyaW1lbnRhbFxuICovXG52YXIgTmdMb2NhbGVMb2NhbGl6YXRpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKE5nTG9jYWxlTG9jYWxpemF0aW9uLCBfc3VwZXIpO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gbG9jYWxlXG4gICAgICovXG4gICAgZnVuY3Rpb24gTmdMb2NhbGVMb2NhbGl6YXRpb24obG9jYWxlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmxvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHZhbHVlXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBOZ0xvY2FsZUxvY2FsaXphdGlvbi5wcm90b3R5cGUuZ2V0UGx1cmFsQ2F0ZWdvcnkgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gcGx1cmFsID0gZ2V0UGx1cmFsQ2FzZSh0aGlzLmxvY2FsZSwgdmFsdWUpO1xuICAgICAgICBzd2l0Y2ggKHBsdXJhbCkge1xuICAgICAgICAgICAgY2FzZSBQbHVyYWwuWmVybzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3plcm8nO1xuICAgICAgICAgICAgY2FzZSBQbHVyYWwuT25lOlxuICAgICAgICAgICAgICAgIHJldHVybiAnb25lJztcbiAgICAgICAgICAgIGNhc2UgUGx1cmFsLlR3bzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3R3byc7XG4gICAgICAgICAgICBjYXNlIFBsdXJhbC5GZXc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdmZXcnO1xuICAgICAgICAgICAgY2FzZSBQbHVyYWwuTWFueTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21hbnknO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ290aGVyJztcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE5nTG9jYWxlTG9jYWxpemF0aW9uO1xufShOZ0xvY2FsaXphdGlvbikpO1xuTmdMb2NhbGVMb2NhbGl6YXRpb24uZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKipcbiAqIEBub2NvbGxhcHNlXG4gKi9cbk5nTG9jYWxlTG9jYWxpemF0aW9uLmN0b3JQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW1xuICAgIHsgdHlwZTogdW5kZWZpbmVkLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtMT0NBTEVfSUQsXSB9LF0gfSxcbl07IH07XG52YXIgUGx1cmFsID0ge307XG5QbHVyYWwuWmVybyA9IDA7XG5QbHVyYWwuT25lID0gMTtcblBsdXJhbC5Ud28gPSAyO1xuUGx1cmFsLkZldyA9IDM7XG5QbHVyYWwuTWFueSA9IDQ7XG5QbHVyYWwuT3RoZXIgPSA1O1xuUGx1cmFsW1BsdXJhbC5aZXJvXSA9IFwiWmVyb1wiO1xuUGx1cmFsW1BsdXJhbC5PbmVdID0gXCJPbmVcIjtcblBsdXJhbFtQbHVyYWwuVHdvXSA9IFwiVHdvXCI7XG5QbHVyYWxbUGx1cmFsLkZld10gPSBcIkZld1wiO1xuUGx1cmFsW1BsdXJhbC5NYW55XSA9IFwiTWFueVwiO1xuUGx1cmFsW1BsdXJhbC5PdGhlcl0gPSBcIk90aGVyXCI7XG4vKipcbiAqIFJldHVybnMgdGhlIHBsdXJhbCBjYXNlIGJhc2VkIG9uIHRoZSBsb2NhbGVcbiAqXG4gKiBcXEBleHBlcmltZW50YWxcbiAqIEBwYXJhbSB7P30gbG9jYWxlXG4gKiBAcGFyYW0gez99IG5MaWtlXG4gKiBAcmV0dXJuIHs/fVxuICovXG5mdW5jdGlvbiBnZXRQbHVyYWxDYXNlKGxvY2FsZSwgbkxpa2UpIHtcbiAgICAvLyBUT0RPKHZpY2IpOiBsYXp5IGNvbXB1dGVcbiAgICBpZiAodHlwZW9mIG5MaWtlID09PSAnc3RyaW5nJykge1xuICAgICAgICBuTGlrZSA9IHBhcnNlSW50KC8qKiBAdHlwZSB7P30gKi8gKG5MaWtlKSwgMTApO1xuICAgIH1cbiAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBuID0gKG5MaWtlKTtcbiAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBuRGVjaW1hbCA9IG4udG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcXC4/LywgJycpO1xuICAgIHZhciAvKiogQHR5cGUgez99ICovIGkgPSBNYXRoLmZsb29yKE1hdGguYWJzKG4pKTtcbiAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyB2ID0gbkRlY2ltYWwubGVuZ3RoO1xuICAgIHZhciAvKiogQHR5cGUgez99ICovIGYgPSBwYXJzZUludChuRGVjaW1hbCwgMTApO1xuICAgIHZhciAvKiogQHR5cGUgez99ICovIHQgPSBwYXJzZUludChuLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXFwuP3wwKyQvZywgJycpLCAxMCkgfHwgMDtcbiAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBsYW5nID0gbG9jYWxlLnNwbGl0KCctJylbMF0udG9Mb3dlckNhc2UoKTtcbiAgICBzd2l0Y2ggKGxhbmcpIHtcbiAgICAgICAgY2FzZSAnYWYnOlxuICAgICAgICBjYXNlICdhc2EnOlxuICAgICAgICBjYXNlICdheic6XG4gICAgICAgIGNhc2UgJ2JlbSc6XG4gICAgICAgIGNhc2UgJ2Jleic6XG4gICAgICAgIGNhc2UgJ2JnJzpcbiAgICAgICAgY2FzZSAnYnJ4JzpcbiAgICAgICAgY2FzZSAnY2UnOlxuICAgICAgICBjYXNlICdjZ2cnOlxuICAgICAgICBjYXNlICdjaHInOlxuICAgICAgICBjYXNlICdja2InOlxuICAgICAgICBjYXNlICdlZSc6XG4gICAgICAgIGNhc2UgJ2VsJzpcbiAgICAgICAgY2FzZSAnZW8nOlxuICAgICAgICBjYXNlICdlcyc6XG4gICAgICAgIGNhc2UgJ2V1JzpcbiAgICAgICAgY2FzZSAnZm8nOlxuICAgICAgICBjYXNlICdmdXInOlxuICAgICAgICBjYXNlICdnc3cnOlxuICAgICAgICBjYXNlICdoYSc6XG4gICAgICAgIGNhc2UgJ2hhdyc6XG4gICAgICAgIGNhc2UgJ2h1JzpcbiAgICAgICAgY2FzZSAnamdvJzpcbiAgICAgICAgY2FzZSAnam1jJzpcbiAgICAgICAgY2FzZSAna2EnOlxuICAgICAgICBjYXNlICdrayc6XG4gICAgICAgIGNhc2UgJ2traic6XG4gICAgICAgIGNhc2UgJ2tsJzpcbiAgICAgICAgY2FzZSAna3MnOlxuICAgICAgICBjYXNlICdrc2InOlxuICAgICAgICBjYXNlICdreSc6XG4gICAgICAgIGNhc2UgJ2xiJzpcbiAgICAgICAgY2FzZSAnbGcnOlxuICAgICAgICBjYXNlICdtYXMnOlxuICAgICAgICBjYXNlICdtZ28nOlxuICAgICAgICBjYXNlICdtbCc6XG4gICAgICAgIGNhc2UgJ21uJzpcbiAgICAgICAgY2FzZSAnbmInOlxuICAgICAgICBjYXNlICduZCc6XG4gICAgICAgIGNhc2UgJ25lJzpcbiAgICAgICAgY2FzZSAnbm4nOlxuICAgICAgICBjYXNlICdubmgnOlxuICAgICAgICBjYXNlICdueW4nOlxuICAgICAgICBjYXNlICdvbSc6XG4gICAgICAgIGNhc2UgJ29yJzpcbiAgICAgICAgY2FzZSAnb3MnOlxuICAgICAgICBjYXNlICdwcyc6XG4gICAgICAgIGNhc2UgJ3JtJzpcbiAgICAgICAgY2FzZSAncm9mJzpcbiAgICAgICAgY2FzZSAncndrJzpcbiAgICAgICAgY2FzZSAnc2FxJzpcbiAgICAgICAgY2FzZSAnc2VoJzpcbiAgICAgICAgY2FzZSAnc24nOlxuICAgICAgICBjYXNlICdzbyc6XG4gICAgICAgIGNhc2UgJ3NxJzpcbiAgICAgICAgY2FzZSAndGEnOlxuICAgICAgICBjYXNlICd0ZSc6XG4gICAgICAgIGNhc2UgJ3Rlbyc6XG4gICAgICAgIGNhc2UgJ3RrJzpcbiAgICAgICAgY2FzZSAndHInOlxuICAgICAgICBjYXNlICd1Zyc6XG4gICAgICAgIGNhc2UgJ3V6JzpcbiAgICAgICAgY2FzZSAndm8nOlxuICAgICAgICBjYXNlICd2dW4nOlxuICAgICAgICBjYXNlICd3YWUnOlxuICAgICAgICBjYXNlICd4b2cnOlxuICAgICAgICAgICAgaWYgKG4gPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PbmU7XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICdhayc6XG4gICAgICAgIGNhc2UgJ2xuJzpcbiAgICAgICAgY2FzZSAnbWcnOlxuICAgICAgICBjYXNlICdwYSc6XG4gICAgICAgIGNhc2UgJ3RpJzpcbiAgICAgICAgICAgIGlmIChuID09PSBNYXRoLmZsb29yKG4pICYmIG4gPj0gMCAmJiBuIDw9IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PbmU7XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICdhbSc6XG4gICAgICAgIGNhc2UgJ2FzJzpcbiAgICAgICAgY2FzZSAnYm4nOlxuICAgICAgICBjYXNlICdmYSc6XG4gICAgICAgIGNhc2UgJ2d1JzpcbiAgICAgICAgY2FzZSAnaGknOlxuICAgICAgICBjYXNlICdrbic6XG4gICAgICAgIGNhc2UgJ21yJzpcbiAgICAgICAgY2FzZSAnenUnOlxuICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgbiA9PT0gMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT3RoZXI7XG4gICAgICAgIGNhc2UgJ2FyJzpcbiAgICAgICAgICAgIGlmIChuID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuWmVybztcbiAgICAgICAgICAgIGlmIChuID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT25lO1xuICAgICAgICAgICAgaWYgKG4gPT09IDIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5Ud287XG4gICAgICAgICAgICBpZiAobiAlIDEwMCA9PT0gTWF0aC5mbG9vcihuICUgMTAwKSAmJiBuICUgMTAwID49IDMgJiYgbiAlIDEwMCA8PSAxMClcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLkZldztcbiAgICAgICAgICAgIGlmIChuICUgMTAwID09PSBNYXRoLmZsb29yKG4gJSAxMDApICYmIG4gJSAxMDAgPj0gMTEgJiYgbiAlIDEwMCA8PSA5OSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk1hbnk7XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICdhc3QnOlxuICAgICAgICBjYXNlICdjYSc6XG4gICAgICAgIGNhc2UgJ2RlJzpcbiAgICAgICAgY2FzZSAnZW4nOlxuICAgICAgICBjYXNlICdldCc6XG4gICAgICAgIGNhc2UgJ2ZpJzpcbiAgICAgICAgY2FzZSAnZnknOlxuICAgICAgICBjYXNlICdnbCc6XG4gICAgICAgIGNhc2UgJ2l0JzpcbiAgICAgICAgY2FzZSAnbmwnOlxuICAgICAgICBjYXNlICdzdic6XG4gICAgICAgIGNhc2UgJ3N3JzpcbiAgICAgICAgY2FzZSAndXInOlxuICAgICAgICBjYXNlICd5aSc6XG4gICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiB2ID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT25lO1xuICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PdGhlcjtcbiAgICAgICAgY2FzZSAnYmUnOlxuICAgICAgICAgICAgaWYgKG4gJSAxMCA9PT0gMSAmJiAhKG4gJSAxMDAgPT09IDExKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIGlmIChuICUgMTAgPT09IE1hdGguZmxvb3IobiAlIDEwKSAmJiBuICUgMTAgPj0gMiAmJiBuICUgMTAgPD0gNCAmJlxuICAgICAgICAgICAgICAgICEobiAlIDEwMCA+PSAxMiAmJiBuICUgMTAwIDw9IDE0KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLkZldztcbiAgICAgICAgICAgIGlmIChuICUgMTAgPT09IDAgfHwgbiAlIDEwID09PSBNYXRoLmZsb29yKG4gJSAxMCkgJiYgbiAlIDEwID49IDUgJiYgbiAlIDEwIDw9IDkgfHxcbiAgICAgICAgICAgICAgICBuICUgMTAwID09PSBNYXRoLmZsb29yKG4gJSAxMDApICYmIG4gJSAxMDAgPj0gMTEgJiYgbiAlIDEwMCA8PSAxNClcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk1hbnk7XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICdicic6XG4gICAgICAgICAgICBpZiAobiAlIDEwID09PSAxICYmICEobiAlIDEwMCA9PT0gMTEgfHwgbiAlIDEwMCA9PT0gNzEgfHwgbiAlIDEwMCA9PT0gOTEpKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT25lO1xuICAgICAgICAgICAgaWYgKG4gJSAxMCA9PT0gMiAmJiAhKG4gJSAxMDAgPT09IDEyIHx8IG4gJSAxMDAgPT09IDcyIHx8IG4gJSAxMDAgPT09IDkyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLlR3bztcbiAgICAgICAgICAgIGlmIChuICUgMTAgPT09IE1hdGguZmxvb3IobiAlIDEwKSAmJiAobiAlIDEwID49IDMgJiYgbiAlIDEwIDw9IDQgfHwgbiAlIDEwID09PSA5KSAmJlxuICAgICAgICAgICAgICAgICEobiAlIDEwMCA+PSAxMCAmJiBuICUgMTAwIDw9IDE5IHx8IG4gJSAxMDAgPj0gNzAgJiYgbiAlIDEwMCA8PSA3OSB8fFxuICAgICAgICAgICAgICAgICAgICBuICUgMTAwID49IDkwICYmIG4gJSAxMDAgPD0gOTkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuRmV3O1xuICAgICAgICAgICAgaWYgKCEobiA9PT0gMCkgJiYgbiAlIDFlNiA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk1hbnk7XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICdicyc6XG4gICAgICAgIGNhc2UgJ2hyJzpcbiAgICAgICAgY2FzZSAnc3InOlxuICAgICAgICAgICAgaWYgKHYgPT09IDAgJiYgaSAlIDEwID09PSAxICYmICEoaSAlIDEwMCA9PT0gMTEpIHx8IGYgJSAxMCA9PT0gMSAmJiAhKGYgJSAxMDAgPT09IDExKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIGlmICh2ID09PSAwICYmIGkgJSAxMCA9PT0gTWF0aC5mbG9vcihpICUgMTApICYmIGkgJSAxMCA+PSAyICYmIGkgJSAxMCA8PSA0ICYmXG4gICAgICAgICAgICAgICAgIShpICUgMTAwID49IDEyICYmIGkgJSAxMDAgPD0gMTQpIHx8XG4gICAgICAgICAgICAgICAgZiAlIDEwID09PSBNYXRoLmZsb29yKGYgJSAxMCkgJiYgZiAlIDEwID49IDIgJiYgZiAlIDEwIDw9IDQgJiZcbiAgICAgICAgICAgICAgICAgICAgIShmICUgMTAwID49IDEyICYmIGYgJSAxMDAgPD0gMTQpKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuRmV3O1xuICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PdGhlcjtcbiAgICAgICAgY2FzZSAnY3MnOlxuICAgICAgICBjYXNlICdzayc6XG4gICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiB2ID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT25lO1xuICAgICAgICAgICAgaWYgKGkgPT09IE1hdGguZmxvb3IoaSkgJiYgaSA+PSAyICYmIGkgPD0gNCAmJiB2ID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuRmV3O1xuICAgICAgICAgICAgaWYgKCEodiA9PT0gMCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5NYW55O1xuICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PdGhlcjtcbiAgICAgICAgY2FzZSAnY3knOlxuICAgICAgICAgICAgaWYgKG4gPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5aZXJvO1xuICAgICAgICAgICAgaWYgKG4gPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PbmU7XG4gICAgICAgICAgICBpZiAobiA9PT0gMilcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLlR3bztcbiAgICAgICAgICAgIGlmIChuID09PSAzKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuRmV3O1xuICAgICAgICAgICAgaWYgKG4gPT09IDYpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5NYW55O1xuICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PdGhlcjtcbiAgICAgICAgY2FzZSAnZGEnOlxuICAgICAgICAgICAgaWYgKG4gPT09IDEgfHwgISh0ID09PSAwKSAmJiAoaSA9PT0gMCB8fCBpID09PSAxKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT3RoZXI7XG4gICAgICAgIGNhc2UgJ2RzYic6XG4gICAgICAgIGNhc2UgJ2hzYic6XG4gICAgICAgICAgICBpZiAodiA9PT0gMCAmJiBpICUgMTAwID09PSAxIHx8IGYgJSAxMDAgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PbmU7XG4gICAgICAgICAgICBpZiAodiA9PT0gMCAmJiBpICUgMTAwID09PSAyIHx8IGYgJSAxMDAgPT09IDIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5Ud287XG4gICAgICAgICAgICBpZiAodiA9PT0gMCAmJiBpICUgMTAwID09PSBNYXRoLmZsb29yKGkgJSAxMDApICYmIGkgJSAxMDAgPj0gMyAmJiBpICUgMTAwIDw9IDQgfHxcbiAgICAgICAgICAgICAgICBmICUgMTAwID09PSBNYXRoLmZsb29yKGYgJSAxMDApICYmIGYgJSAxMDAgPj0gMyAmJiBmICUgMTAwIDw9IDQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5GZXc7XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICdmZic6XG4gICAgICAgIGNhc2UgJ2ZyJzpcbiAgICAgICAgY2FzZSAnaHknOlxuICAgICAgICBjYXNlICdrYWInOlxuICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgaSA9PT0gMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT3RoZXI7XG4gICAgICAgIGNhc2UgJ2ZpbCc6XG4gICAgICAgICAgICBpZiAodiA9PT0gMCAmJiAoaSA9PT0gMSB8fCBpID09PSAyIHx8IGkgPT09IDMpIHx8XG4gICAgICAgICAgICAgICAgdiA9PT0gMCAmJiAhKGkgJSAxMCA9PT0gNCB8fCBpICUgMTAgPT09IDYgfHwgaSAlIDEwID09PSA5KSB8fFxuICAgICAgICAgICAgICAgICEodiA9PT0gMCkgJiYgIShmICUgMTAgPT09IDQgfHwgZiAlIDEwID09PSA2IHx8IGYgJSAxMCA9PT0gOSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PbmU7XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICdnYSc6XG4gICAgICAgICAgICBpZiAobiA9PT0gMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIGlmIChuID09PSAyKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuVHdvO1xuICAgICAgICAgICAgaWYgKG4gPT09IE1hdGguZmxvb3IobikgJiYgbiA+PSAzICYmIG4gPD0gNilcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLkZldztcbiAgICAgICAgICAgIGlmIChuID09PSBNYXRoLmZsb29yKG4pICYmIG4gPj0gNyAmJiBuIDw9IDEwKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuTWFueTtcbiAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT3RoZXI7XG4gICAgICAgIGNhc2UgJ2dkJzpcbiAgICAgICAgICAgIGlmIChuID09PSAxIHx8IG4gPT09IDExKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT25lO1xuICAgICAgICAgICAgaWYgKG4gPT09IDIgfHwgbiA9PT0gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5Ud287XG4gICAgICAgICAgICBpZiAobiA9PT0gTWF0aC5mbG9vcihuKSAmJiAobiA+PSAzICYmIG4gPD0gMTAgfHwgbiA+PSAxMyAmJiBuIDw9IDE5KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLkZldztcbiAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT3RoZXI7XG4gICAgICAgIGNhc2UgJ2d2JzpcbiAgICAgICAgICAgIGlmICh2ID09PSAwICYmIGkgJSAxMCA9PT0gMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIGlmICh2ID09PSAwICYmIGkgJSAxMCA9PT0gMilcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLlR3bztcbiAgICAgICAgICAgIGlmICh2ID09PSAwICYmXG4gICAgICAgICAgICAgICAgKGkgJSAxMDAgPT09IDAgfHwgaSAlIDEwMCA9PT0gMjAgfHwgaSAlIDEwMCA9PT0gNDAgfHwgaSAlIDEwMCA9PT0gNjAgfHwgaSAlIDEwMCA9PT0gODApKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuRmV3O1xuICAgICAgICAgICAgaWYgKCEodiA9PT0gMCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5NYW55O1xuICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PdGhlcjtcbiAgICAgICAgY2FzZSAnaGUnOlxuICAgICAgICAgICAgaWYgKGkgPT09IDEgJiYgdiA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIGlmIChpID09PSAyICYmIHYgPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5Ud287XG4gICAgICAgICAgICBpZiAodiA9PT0gMCAmJiAhKG4gPj0gMCAmJiBuIDw9IDEwKSAmJiBuICUgMTAgPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5NYW55O1xuICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PdGhlcjtcbiAgICAgICAgY2FzZSAnaXMnOlxuICAgICAgICAgICAgaWYgKHQgPT09IDAgJiYgaSAlIDEwID09PSAxICYmICEoaSAlIDEwMCA9PT0gMTEpIHx8ICEodCA9PT0gMCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PbmU7XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICdrc2gnOlxuICAgICAgICAgICAgaWYgKG4gPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5aZXJvO1xuICAgICAgICAgICAgaWYgKG4gPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PbmU7XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICdrdyc6XG4gICAgICAgIGNhc2UgJ25hcSc6XG4gICAgICAgIGNhc2UgJ3NlJzpcbiAgICAgICAgY2FzZSAnc21uJzpcbiAgICAgICAgICAgIGlmIChuID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT25lO1xuICAgICAgICAgICAgaWYgKG4gPT09IDIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5Ud287XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICdsYWcnOlxuICAgICAgICAgICAgaWYgKG4gPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5aZXJvO1xuICAgICAgICAgICAgaWYgKChpID09PSAwIHx8IGkgPT09IDEpICYmICEobiA9PT0gMCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PbmU7XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICdsdCc6XG4gICAgICAgICAgICBpZiAobiAlIDEwID09PSAxICYmICEobiAlIDEwMCA+PSAxMSAmJiBuICUgMTAwIDw9IDE5KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIGlmIChuICUgMTAgPT09IE1hdGguZmxvb3IobiAlIDEwKSAmJiBuICUgMTAgPj0gMiAmJiBuICUgMTAgPD0gOSAmJlxuICAgICAgICAgICAgICAgICEobiAlIDEwMCA+PSAxMSAmJiBuICUgMTAwIDw9IDE5KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLkZldztcbiAgICAgICAgICAgIGlmICghKGYgPT09IDApKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuTWFueTtcbiAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT3RoZXI7XG4gICAgICAgIGNhc2UgJ2x2JzpcbiAgICAgICAgY2FzZSAncHJnJzpcbiAgICAgICAgICAgIGlmIChuICUgMTAgPT09IDAgfHwgbiAlIDEwMCA9PT0gTWF0aC5mbG9vcihuICUgMTAwKSAmJiBuICUgMTAwID49IDExICYmIG4gJSAxMDAgPD0gMTkgfHxcbiAgICAgICAgICAgICAgICB2ID09PSAyICYmIGYgJSAxMDAgPT09IE1hdGguZmxvb3IoZiAlIDEwMCkgJiYgZiAlIDEwMCA+PSAxMSAmJiBmICUgMTAwIDw9IDE5KVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuWmVybztcbiAgICAgICAgICAgIGlmIChuICUgMTAgPT09IDEgJiYgIShuICUgMTAwID09PSAxMSkgfHwgdiA9PT0gMiAmJiBmICUgMTAgPT09IDEgJiYgIShmICUgMTAwID09PSAxMSkgfHxcbiAgICAgICAgICAgICAgICAhKHYgPT09IDIpICYmIGYgJSAxMCA9PT0gMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT3RoZXI7XG4gICAgICAgIGNhc2UgJ21rJzpcbiAgICAgICAgICAgIGlmICh2ID09PSAwICYmIGkgJSAxMCA9PT0gMSB8fCBmICUgMTAgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PbmU7XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICdtdCc6XG4gICAgICAgICAgICBpZiAobiA9PT0gMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIGlmIChuID09PSAwIHx8IG4gJSAxMDAgPT09IE1hdGguZmxvb3IobiAlIDEwMCkgJiYgbiAlIDEwMCA+PSAyICYmIG4gJSAxMDAgPD0gMTApXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5GZXc7XG4gICAgICAgICAgICBpZiAobiAlIDEwMCA9PT0gTWF0aC5mbG9vcihuICUgMTAwKSAmJiBuICUgMTAwID49IDExICYmIG4gJSAxMDAgPD0gMTkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5NYW55O1xuICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PdGhlcjtcbiAgICAgICAgY2FzZSAncGwnOlxuICAgICAgICAgICAgaWYgKGkgPT09IDEgJiYgdiA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIGlmICh2ID09PSAwICYmIGkgJSAxMCA9PT0gTWF0aC5mbG9vcihpICUgMTApICYmIGkgJSAxMCA+PSAyICYmIGkgJSAxMCA8PSA0ICYmXG4gICAgICAgICAgICAgICAgIShpICUgMTAwID49IDEyICYmIGkgJSAxMDAgPD0gMTQpKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuRmV3O1xuICAgICAgICAgICAgaWYgKHYgPT09IDAgJiYgIShpID09PSAxKSAmJiBpICUgMTAgPT09IE1hdGguZmxvb3IoaSAlIDEwKSAmJiBpICUgMTAgPj0gMCAmJiBpICUgMTAgPD0gMSB8fFxuICAgICAgICAgICAgICAgIHYgPT09IDAgJiYgaSAlIDEwID09PSBNYXRoLmZsb29yKGkgJSAxMCkgJiYgaSAlIDEwID49IDUgJiYgaSAlIDEwIDw9IDkgfHxcbiAgICAgICAgICAgICAgICB2ID09PSAwICYmIGkgJSAxMDAgPT09IE1hdGguZmxvb3IoaSAlIDEwMCkgJiYgaSAlIDEwMCA+PSAxMiAmJiBpICUgMTAwIDw9IDE0KVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuTWFueTtcbiAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT3RoZXI7XG4gICAgICAgIGNhc2UgJ3B0JzpcbiAgICAgICAgICAgIGlmIChuID09PSBNYXRoLmZsb29yKG4pICYmIG4gPj0gMCAmJiBuIDw9IDIgJiYgIShuID09PSAyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT3RoZXI7XG4gICAgICAgIGNhc2UgJ3JvJzpcbiAgICAgICAgICAgIGlmIChpID09PSAxICYmIHYgPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PbmU7XG4gICAgICAgICAgICBpZiAoISh2ID09PSAwKSB8fCBuID09PSAwIHx8XG4gICAgICAgICAgICAgICAgIShuID09PSAxKSAmJiBuICUgMTAwID09PSBNYXRoLmZsb29yKG4gJSAxMDApICYmIG4gJSAxMDAgPj0gMSAmJiBuICUgMTAwIDw9IDE5KVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuRmV3O1xuICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PdGhlcjtcbiAgICAgICAgY2FzZSAncnUnOlxuICAgICAgICBjYXNlICd1ayc6XG4gICAgICAgICAgICBpZiAodiA9PT0gMCAmJiBpICUgMTAgPT09IDEgJiYgIShpICUgMTAwID09PSAxMSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PbmU7XG4gICAgICAgICAgICBpZiAodiA9PT0gMCAmJiBpICUgMTAgPT09IE1hdGguZmxvb3IoaSAlIDEwKSAmJiBpICUgMTAgPj0gMiAmJiBpICUgMTAgPD0gNCAmJlxuICAgICAgICAgICAgICAgICEoaSAlIDEwMCA+PSAxMiAmJiBpICUgMTAwIDw9IDE0KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLkZldztcbiAgICAgICAgICAgIGlmICh2ID09PSAwICYmIGkgJSAxMCA9PT0gMCB8fFxuICAgICAgICAgICAgICAgIHYgPT09IDAgJiYgaSAlIDEwID09PSBNYXRoLmZsb29yKGkgJSAxMCkgJiYgaSAlIDEwID49IDUgJiYgaSAlIDEwIDw9IDkgfHxcbiAgICAgICAgICAgICAgICB2ID09PSAwICYmIGkgJSAxMDAgPT09IE1hdGguZmxvb3IoaSAlIDEwMCkgJiYgaSAlIDEwMCA+PSAxMSAmJiBpICUgMTAwIDw9IDE0KVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuTWFueTtcbiAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT3RoZXI7XG4gICAgICAgIGNhc2UgJ3NoaSc6XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCBuID09PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT25lO1xuICAgICAgICAgICAgaWYgKG4gPT09IE1hdGguZmxvb3IobikgJiYgbiA+PSAyICYmIG4gPD0gMTApXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5GZXc7XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICdzaSc6XG4gICAgICAgICAgICBpZiAobiA9PT0gMCB8fCBuID09PSAxIHx8IGkgPT09IDAgJiYgZiA9PT0gMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT3RoZXI7XG4gICAgICAgIGNhc2UgJ3NsJzpcbiAgICAgICAgICAgIGlmICh2ID09PSAwICYmIGkgJSAxMDAgPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PbmU7XG4gICAgICAgICAgICBpZiAodiA9PT0gMCAmJiBpICUgMTAwID09PSAyKVxuICAgICAgICAgICAgICAgIHJldHVybiBQbHVyYWwuVHdvO1xuICAgICAgICAgICAgaWYgKHYgPT09IDAgJiYgaSAlIDEwMCA9PT0gTWF0aC5mbG9vcihpICUgMTAwKSAmJiBpICUgMTAwID49IDMgJiYgaSAlIDEwMCA8PSA0IHx8ICEodiA9PT0gMCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5GZXc7XG4gICAgICAgICAgICByZXR1cm4gUGx1cmFsLk90aGVyO1xuICAgICAgICBjYXNlICd0em0nOlxuICAgICAgICAgICAgaWYgKG4gPT09IE1hdGguZmxvb3IobikgJiYgbiA+PSAwICYmIG4gPD0gMSB8fCBuID09PSBNYXRoLmZsb29yKG4pICYmIG4gPj0gMTEgJiYgbiA8PSA5OSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUGx1cmFsLk9uZTtcbiAgICAgICAgICAgIHJldHVybiBQbHVyYWwuT3RoZXI7XG4gICAgICAgIC8vIFdoZW4gdGhlcmUgaXMgbm8gc3BlY2lmaWNhdGlvbiwgdGhlIGRlZmF1bHQgaXMgYWx3YXlzIFwib3RoZXJcIlxuICAgICAgICAvLyBTcGVjOiBodHRwOi8vY2xkci51bmljb2RlLm9yZy9pbmRleC9jbGRyLXNwZWMvcGx1cmFsLXJ1bGVzXG4gICAgICAgIC8vID4gb3RoZXIgKHJlcXVpcmVk4oCUZ2VuZXJhbCBwbHVyYWwgZm9ybSDigJQgYWxzbyB1c2VkIGlmIHRoZSBsYW5ndWFnZSBvbmx5IGhhcyBhIHNpbmdsZSBmb3JtKVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFBsdXJhbC5PdGhlcjtcbiAgICB9XG59XG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICogQHBhcmFtIHs/fSBjb29raWVTdHJcbiAqIEBwYXJhbSB7P30gbmFtZVxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gcGFyc2VDb29raWVWYWx1ZShjb29raWVTdHIsIG5hbWUpIHtcbiAgICBuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xuICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBjb29raWVTdHIuc3BsaXQoJzsnKTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIGNvb2tpZSA9IF9hW19pXTtcbiAgICAgICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gZXFJbmRleCA9IGNvb2tpZS5pbmRleE9mKCc9Jyk7XG4gICAgICAgIHZhciBfYiA9IGVxSW5kZXggPT0gLTEgPyBbY29va2llLCAnJ10gOiBbY29va2llLnNsaWNlKDAsIGVxSW5kZXgpLCBjb29raWUuc2xpY2UoZXFJbmRleCArIDEpXSwgY29va2llTmFtZSA9IF9iWzBdLCBjb29raWVWYWx1ZSA9IF9iWzFdO1xuICAgICAgICBpZiAoY29va2llTmFtZS50cmltKCkgPT09IG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoY29va2llVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuLyoqXG4gKiBcXEBuZ01vZHVsZSBDb21tb25Nb2R1bGVcbiAqXG4gKiBcXEB3aGF0SXREb2VzIEFkZHMgYW5kIHJlbW92ZXMgQ1NTIGNsYXNzZXMgb24gYW4gSFRNTCBlbGVtZW50LlxuICpcbiAqIFxcQGhvd1RvVXNlXG4gKiBgYGBcbiAqICAgICA8c29tZS1lbGVtZW50IFtuZ0NsYXNzXT1cIidmaXJzdCBzZWNvbmQnXCI+Li4uPC9zb21lLWVsZW1lbnQ+XG4gKlxuICogICAgIDxzb21lLWVsZW1lbnQgW25nQ2xhc3NdPVwiWydmaXJzdCcsICdzZWNvbmQnXVwiPi4uLjwvc29tZS1lbGVtZW50PlxuICpcbiAqICAgICA8c29tZS1lbGVtZW50IFtuZ0NsYXNzXT1cInsnZmlyc3QnOiB0cnVlLCAnc2Vjb25kJzogdHJ1ZSwgJ3RoaXJkJzogZmFsc2V9XCI+Li4uPC9zb21lLWVsZW1lbnQ+XG4gKlxuICogICAgIDxzb21lLWVsZW1lbnQgW25nQ2xhc3NdPVwic3RyaW5nRXhwfGFycmF5RXhwfG9iakV4cFwiPi4uLjwvc29tZS1lbGVtZW50PlxuICpcbiAqICAgICA8c29tZS1lbGVtZW50IFtuZ0NsYXNzXT1cInsnY2xhc3MxIGNsYXNzMiBjbGFzczMnIDogdHJ1ZX1cIj4uLi48L3NvbWUtZWxlbWVudD5cbiAqIGBgYFxuICpcbiAqIFxcQGRlc2NyaXB0aW9uXG4gKlxuICogVGhlIENTUyBjbGFzc2VzIGFyZSB1cGRhdGVkIGFzIGZvbGxvd3MsIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uOlxuICogLSBgc3RyaW5nYCAtIHRoZSBDU1MgY2xhc3NlcyBsaXN0ZWQgaW4gdGhlIHN0cmluZyAoc3BhY2UgZGVsaW1pdGVkKSBhcmUgYWRkZWQsXG4gKiAtIGBBcnJheWAgLSB0aGUgQ1NTIGNsYXNzZXMgZGVjbGFyZWQgYXMgQXJyYXkgZWxlbWVudHMgYXJlIGFkZGVkLFxuICogLSBgT2JqZWN0YCAtIGtleXMgYXJlIENTUyBjbGFzc2VzIHRoYXQgZ2V0IGFkZGVkIHdoZW4gdGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlIHZhbHVlXG4gKiAgICAgICAgICAgICAgZXZhbHVhdGVzIHRvIGEgdHJ1dGh5IHZhbHVlLCBvdGhlcndpc2UgdGhleSBhcmUgcmVtb3ZlZC5cbiAqXG4gKiBcXEBzdGFibGVcbiAqL1xudmFyIE5nQ2xhc3MgPSAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gX2l0ZXJhYmxlRGlmZmVyc1xuICAgICAqIEBwYXJhbSB7P30gX2tleVZhbHVlRGlmZmVyc1xuICAgICAqIEBwYXJhbSB7P30gX25nRWxcbiAgICAgKiBAcGFyYW0gez99IF9yZW5kZXJlclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIE5nQ2xhc3MoX2l0ZXJhYmxlRGlmZmVycywgX2tleVZhbHVlRGlmZmVycywgX25nRWwsIF9yZW5kZXJlcikge1xuICAgICAgICB0aGlzLl9pdGVyYWJsZURpZmZlcnMgPSBfaXRlcmFibGVEaWZmZXJzO1xuICAgICAgICB0aGlzLl9rZXlWYWx1ZURpZmZlcnMgPSBfa2V5VmFsdWVEaWZmZXJzO1xuICAgICAgICB0aGlzLl9uZ0VsID0gX25nRWw7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyID0gX3JlbmRlcmVyO1xuICAgICAgICB0aGlzLl9pbml0aWFsQ2xhc3NlcyA9IFtdO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTmdDbGFzcy5wcm90b3R5cGUsIFwia2xhc3NcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHs/fSB2XG4gICAgICAgICAqIEByZXR1cm4gez99XG4gICAgICAgICAqL1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICB0aGlzLl9hcHBseUluaXRpYWxDbGFzc2VzKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbENsYXNzZXMgPSB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2LnNwbGl0KC9cXHMrLykgOiBbXTtcbiAgICAgICAgICAgIHRoaXMuX2FwcGx5SW5pdGlhbENsYXNzZXMoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzLCBmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOZ0NsYXNzLnByb3RvdHlwZSwgXCJuZ0NsYXNzXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7P30gdlxuICAgICAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAgICAgKi9cbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgdGhpcy5fY2xlYW51cENsYXNzZXModGhpcy5fcmF3Q2xhc3MpO1xuICAgICAgICAgICAgdGhpcy5faXRlcmFibGVEaWZmZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fa2V5VmFsdWVEaWZmZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fcmF3Q2xhc3MgPSB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2LnNwbGl0KC9cXHMrLykgOiB2O1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Jhd0NsYXNzKSB7XG4gICAgICAgICAgICAgICAgaWYgKMm1aXNMaXN0TGlrZUl0ZXJhYmxlKHRoaXMuX3Jhd0NsYXNzKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pdGVyYWJsZURpZmZlciA9IHRoaXMuX2l0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuX3Jhd0NsYXNzKS5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleVZhbHVlRGlmZmVyID0gdGhpcy5fa2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBOZ0NsYXNzLnByb3RvdHlwZS5uZ0RvQ2hlY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pdGVyYWJsZURpZmZlcikge1xuICAgICAgICAgICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gaXRlcmFibGVDaGFuZ2VzID0gdGhpcy5faXRlcmFibGVEaWZmZXIuZGlmZigvKiogQHR5cGUgez99ICovICh0aGlzLl9yYXdDbGFzcykpO1xuICAgICAgICAgICAgaWYgKGl0ZXJhYmxlQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5SXRlcmFibGVDaGFuZ2VzKGl0ZXJhYmxlQ2hhbmdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fa2V5VmFsdWVEaWZmZXIpIHtcbiAgICAgICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIGtleVZhbHVlQ2hhbmdlcyA9IHRoaXMuX2tleVZhbHVlRGlmZmVyLmRpZmYoLyoqIEB0eXBlIHs/fSAqLyAodGhpcy5fcmF3Q2xhc3MpKTtcbiAgICAgICAgICAgIGlmIChrZXlWYWx1ZUNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseUtleVZhbHVlQ2hhbmdlcyhrZXlWYWx1ZUNoYW5nZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHJhd0NsYXNzVmFsXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBOZ0NsYXNzLnByb3RvdHlwZS5fY2xlYW51cENsYXNzZXMgPSBmdW5jdGlvbiAocmF3Q2xhc3NWYWwpIHtcbiAgICAgICAgdGhpcy5fYXBwbHlDbGFzc2VzKHJhd0NsYXNzVmFsLCB0cnVlKTtcbiAgICAgICAgdGhpcy5fYXBwbHlJbml0aWFsQ2xhc3NlcyhmYWxzZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IGNoYW5nZXNcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIE5nQ2xhc3MucHJvdG90eXBlLl9hcHBseUtleVZhbHVlQ2hhbmdlcyA9IGZ1bmN0aW9uIChjaGFuZ2VzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGNoYW5nZXMuZm9yRWFjaEFkZGVkSXRlbShmdW5jdGlvbiAocmVjb3JkKSB7IHJldHVybiBfdGhpcy5fdG9nZ2xlQ2xhc3MocmVjb3JkLmtleSwgcmVjb3JkLmN1cnJlbnRWYWx1ZSk7IH0pO1xuICAgICAgICBjaGFuZ2VzLmZvckVhY2hDaGFuZ2VkSXRlbShmdW5jdGlvbiAocmVjb3JkKSB7IHJldHVybiBfdGhpcy5fdG9nZ2xlQ2xhc3MocmVjb3JkLmtleSwgcmVjb3JkLmN1cnJlbnRWYWx1ZSk7IH0pO1xuICAgICAgICBjaGFuZ2VzLmZvckVhY2hSZW1vdmVkSXRlbShmdW5jdGlvbiAocmVjb3JkKSB7XG4gICAgICAgICAgICBpZiAocmVjb3JkLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fdG9nZ2xlQ2xhc3MocmVjb3JkLmtleSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gY2hhbmdlc1xuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTmdDbGFzcy5wcm90b3R5cGUuX2FwcGx5SXRlcmFibGVDaGFuZ2VzID0gZnVuY3Rpb24gKGNoYW5nZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgY2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVjb3JkLml0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3RvZ2dsZUNsYXNzKHJlY29yZC5pdGVtLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5nQ2xhc3MgY2FuIG9ubHkgdG9nZ2xlIENTUyBjbGFzc2VzIGV4cHJlc3NlZCBhcyBzdHJpbmdzLCBnb3QgXCIgKyDJtXN0cmluZ2lmeShyZWNvcmQuaXRlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY2hhbmdlcy5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24gKHJlY29yZCkgeyByZXR1cm4gX3RoaXMuX3RvZ2dsZUNsYXNzKHJlY29yZC5pdGVtLCBmYWxzZSk7IH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBpc0NsZWFudXBcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIE5nQ2xhc3MucHJvdG90eXBlLl9hcHBseUluaXRpYWxDbGFzc2VzID0gZnVuY3Rpb24gKGlzQ2xlYW51cCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLl9pbml0aWFsQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChrbGFzcykgeyByZXR1cm4gX3RoaXMuX3RvZ2dsZUNsYXNzKGtsYXNzLCAhaXNDbGVhbnVwKTsgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHJhd0NsYXNzVmFsXG4gICAgICogQHBhcmFtIHs/fSBpc0NsZWFudXBcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIE5nQ2xhc3MucHJvdG90eXBlLl9hcHBseUNsYXNzZXMgPSBmdW5jdGlvbiAocmF3Q2xhc3NWYWwsIGlzQ2xlYW51cCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAocmF3Q2xhc3NWYWwpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJhd0NsYXNzVmFsKSB8fCByYXdDbGFzc1ZhbCBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgICAgICAgICgocmF3Q2xhc3NWYWwpKS5mb3JFYWNoKGZ1bmN0aW9uIChrbGFzcykgeyByZXR1cm4gX3RoaXMuX3RvZ2dsZUNsYXNzKGtsYXNzLCAhaXNDbGVhbnVwKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhyYXdDbGFzc1ZhbCkuZm9yRWFjaChmdW5jdGlvbiAoa2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhd0NsYXNzVmFsW2tsYXNzXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RvZ2dsZUNsYXNzKGtsYXNzLCAhaXNDbGVhbnVwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBrbGFzc1xuICAgICAqIEBwYXJhbSB7P30gZW5hYmxlZFxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTmdDbGFzcy5wcm90b3R5cGUuX3RvZ2dsZUNsYXNzID0gZnVuY3Rpb24gKGtsYXNzLCBlbmFibGVkKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGtsYXNzID0ga2xhc3MudHJpbSgpO1xuICAgICAgICBpZiAoa2xhc3MpIHtcbiAgICAgICAgICAgIGtsYXNzLnNwbGl0KC9cXHMrL2cpLmZvckVhY2goZnVuY3Rpb24gKGtsYXNzKSB7IF90aGlzLl9yZW5kZXJlci5zZXRFbGVtZW50Q2xhc3MoX3RoaXMuX25nRWwubmF0aXZlRWxlbWVudCwga2xhc3MsICEhZW5hYmxlZCk7IH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gTmdDbGFzcztcbn0oKSk7XG5OZ0NsYXNzLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7IHNlbGVjdG9yOiAnW25nQ2xhc3NdJyB9LF0gfSxcbl07XG4vKipcbiAqIEBub2NvbGxhcHNlXG4gKi9cbk5nQ2xhc3MuY3RvclBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXG4gICAgeyB0eXBlOiBJdGVyYWJsZURpZmZlcnMsIH0sXG4gICAgeyB0eXBlOiBLZXlWYWx1ZURpZmZlcnMsIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmLCB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIsIH0sXG5dOyB9O1xuTmdDbGFzcy5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICAna2xhc3MnOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydjbGFzcycsXSB9LF0sXG4gICAgJ25nQ2xhc3MnOiBbeyB0eXBlOiBJbnB1dCB9LF0sXG59O1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuLyoqXG4gKiBJbnN0YW50aWF0ZXMgYSBzaW5nbGUge1xcQGxpbmsgQ29tcG9uZW50fSB0eXBlIGFuZCBpbnNlcnRzIGl0cyBIb3N0IFZpZXcgaW50byBjdXJyZW50IFZpZXcuXG4gKiBgTmdDb21wb25lbnRPdXRsZXRgIHByb3ZpZGVzIGEgZGVjbGFyYXRpdmUgYXBwcm9hY2ggZm9yIGR5bmFtaWMgY29tcG9uZW50IGNyZWF0aW9uLlxuICpcbiAqIGBOZ0NvbXBvbmVudE91dGxldGAgcmVxdWlyZXMgYSBjb21wb25lbnQgdHlwZSwgaWYgYSBmYWxzeSB2YWx1ZSBpcyBzZXQgdGhlIHZpZXcgd2lsbCBjbGVhciBhbmRcbiAqIGFueSBleGlzdGluZyBjb21wb25lbnQgd2lsbCBnZXQgZGVzdHJveWVkLlxuICpcbiAqICMjIyBGaW5lIHR1bmUgY29udHJvbFxuICpcbiAqIFlvdSBjYW4gY29udHJvbCB0aGUgY29tcG9uZW50IGNyZWF0aW9uIHByb2Nlc3MgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBvcHRpb25hbCBhdHRyaWJ1dGVzOlxuICpcbiAqICogYG5nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3JgOiBPcHRpb25hbCBjdXN0b20ge1xcQGxpbmsgSW5qZWN0b3J9IHRoYXQgd2lsbCBiZSB1c2VkIGFzIHBhcmVudCBmb3JcbiAqIHRoZSBDb21wb25lbnQuIERlZmF1bHRzIHRvIHRoZSBpbmplY3RvciBvZiB0aGUgY3VycmVudCB2aWV3IGNvbnRhaW5lci5cbiAqXG4gKiAqIGBuZ0NvbXBvbmVudE91dGxldENvbnRlbnRgOiBPcHRpb25hbCBsaXN0IG9mIHByb2plY3RhYmxlIG5vZGVzIHRvIGluc2VydCBpbnRvIHRoZSBjb250ZW50XG4gKiBzZWN0aW9uIG9mIHRoZSBjb21wb25lbnQsIGlmIGV4aXN0cy5cbiAqXG4gKiAqIGBuZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlRmFjdG9yeWA6IE9wdGlvbmFsIG1vZHVsZSBmYWN0b3J5IHRvIGFsbG93IGR5bmFtaWNhbGx5IGxvYWRpbmcgb3RoZXJcbiAqIG1vZHVsZSwgdGhlbiBsb2FkIGEgY29tcG9uZW50IGZyb20gdGhhdCBtb2R1bGUuXG4gKlxuICogIyMjIFN5bnRheFxuICpcbiAqIFNpbXBsZVxuICogYGBgXG4gKiA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cImNvbXBvbmVudFR5cGVFeHByZXNzaW9uXCI+PC9uZy1jb250YWluZXI+XG4gKiBgYGBcbiAqXG4gKiBDdXN0b21pemVkIGluamVjdG9yL2NvbnRlbnRcbiAqIGBgYFxuICogPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJjb21wb25lbnRUeXBlRXhwcmVzc2lvbjtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmplY3RvcjogaW5qZWN0b3JFeHByZXNzaW9uO1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnROb2Rlc0V4cHJlc3Npb247XCI+XG4gKiA8L25nLWNvbnRhaW5lcj5cbiAqIGBgYFxuICpcbiAqIEN1c3RvbWl6ZWQgbmdNb2R1bGVGYWN0b3J5XG4gKiBgYGBcbiAqIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiY29tcG9uZW50VHlwZUV4cHJlc3Npb247XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdNb2R1bGVGYWN0b3J5OiBtb2R1bGVGYWN0b3J5O1wiPlxuICogPC9uZy1jb250YWluZXI+XG4gKiBgYGBcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiB7XFxAZXhhbXBsZSBjb21tb24vbmdDb21wb25lbnRPdXRsZXQvdHMvbW9kdWxlLnRzIHJlZ2lvbj0nU2ltcGxlRXhhbXBsZSd9XG4gKlxuICogQSBtb3JlIGNvbXBsZXRlIGV4YW1wbGUgd2l0aCBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gKlxuICoge1xcQGV4YW1wbGUgY29tbW9uL25nQ29tcG9uZW50T3V0bGV0L3RzL21vZHVsZS50cyByZWdpb249J0NvbXBsZXRlRXhhbXBsZSd9XG4gKiBBIG1vcmUgY29tcGxldGUgZXhhbXBsZSB3aXRoIG5nTW9kdWxlRmFjdG9yeTpcbiAqXG4gKiB7XFxAZXhhbXBsZSBjb21tb24vbmdDb21wb25lbnRPdXRsZXQvdHMvbW9kdWxlLnRzIHJlZ2lvbj0nTmdNb2R1bGVGYWN0b3J5RXhhbXBsZSd9XG4gKlxuICogXFxAZXhwZXJpbWVudGFsXG4gKi9cbnZhciBOZ0NvbXBvbmVudE91dGxldCA9IChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBfdmlld0NvbnRhaW5lclJlZlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIE5nQ29tcG9uZW50T3V0bGV0KF92aWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYgPSBfdmlld0NvbnRhaW5lclJlZjtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbW9kdWxlUmVmID0gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBjaGFuZ2VzXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBOZ0NvbXBvbmVudE91dGxldC5wcm90b3R5cGUubmdPbkNoYW5nZXMgPSBmdW5jdGlvbiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFJlZiA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLm5nQ29tcG9uZW50T3V0bGV0KSB7XG4gICAgICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBlbEluamVjdG9yID0gdGhpcy5uZ0NvbXBvbmVudE91dGxldEluamVjdG9yIHx8IHRoaXMuX3ZpZXdDb250YWluZXJSZWYucGFyZW50SW5qZWN0b3I7XG4gICAgICAgICAgICBpZiAoY2hhbmdlc1snbmdDb21wb25lbnRPdXRsZXROZ01vZHVsZUZhY3RvcnknXSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tb2R1bGVSZWYpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZHVsZVJlZi5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmdDb21wb25lbnRPdXRsZXROZ01vZHVsZUZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gcGFyZW50TW9kdWxlID0gZWxJbmplY3Rvci5nZXQoTmdNb2R1bGVSZWYpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb2R1bGVSZWYgPSB0aGlzLm5nQ29tcG9uZW50T3V0bGV0TmdNb2R1bGVGYWN0b3J5LmNyZWF0ZShwYXJlbnRNb2R1bGUuaW5qZWN0b3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9kdWxlUmVmID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgPSB0aGlzLl9tb2R1bGVSZWYgPyB0aGlzLl9tb2R1bGVSZWYuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyIDpcbiAgICAgICAgICAgICAgICBlbEluamVjdG9yLmdldChDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO1xuICAgICAgICAgICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gY29tcG9uZW50RmFjdG9yeSA9IGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0aGlzLm5nQ29tcG9uZW50T3V0bGV0KTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudFJlZiA9IHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnksIHRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoLCBlbEluamVjdG9yLCB0aGlzLm5nQ29tcG9uZW50T3V0bGV0Q29udGVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTmdDb21wb25lbnRPdXRsZXQucHJvdG90eXBlLm5nT25EZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fbW9kdWxlUmVmKVxuICAgICAgICAgICAgdGhpcy5fbW9kdWxlUmVmLmRlc3Ryb3koKTtcbiAgICB9O1xuICAgIHJldHVybiBOZ0NvbXBvbmVudE91dGxldDtcbn0oKSk7XG5OZ0NvbXBvbmVudE91dGxldC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbeyBzZWxlY3RvcjogJ1tuZ0NvbXBvbmVudE91dGxldF0nIH0sXSB9LFxuXTtcbi8qKlxuICogQG5vY29sbGFwc2VcbiAqL1xuTmdDb21wb25lbnRPdXRsZXQuY3RvclBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXG4gICAgeyB0eXBlOiBWaWV3Q29udGFpbmVyUmVmLCB9LFxuXTsgfTtcbk5nQ29tcG9uZW50T3V0bGV0LnByb3BEZWNvcmF0b3JzID0ge1xuICAgICduZ0NvbXBvbmVudE91dGxldCc6IFt7IHR5cGU6IElucHV0IH0sXSxcbiAgICAnbmdDb21wb25lbnRPdXRsZXRJbmplY3Rvcic6IFt7IHR5cGU6IElucHV0IH0sXSxcbiAgICAnbmdDb21wb25lbnRPdXRsZXRDb250ZW50JzogW3sgdHlwZTogSW5wdXQgfSxdLFxuICAgICduZ0NvbXBvbmVudE91dGxldE5nTW9kdWxlRmFjdG9yeSc6IFt7IHR5cGU6IElucHV0IH0sXSxcbn07XG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG4vKipcbiAqIFxcQHN0YWJsZVxuICovXG52YXIgTmdGb3JPZkNvbnRleHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gJGltcGxpY2l0XG4gICAgICogQHBhcmFtIHs/fSBuZ0Zvck9mXG4gICAgICogQHBhcmFtIHs/fSBpbmRleFxuICAgICAqIEBwYXJhbSB7P30gY291bnRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBOZ0Zvck9mQ29udGV4dCgkaW1wbGljaXQsIG5nRm9yT2YsIGluZGV4LCBjb3VudCkge1xuICAgICAgICB0aGlzLiRpbXBsaWNpdCA9ICRpbXBsaWNpdDtcbiAgICAgICAgdGhpcy5uZ0Zvck9mID0gbmdGb3JPZjtcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLmNvdW50ID0gY291bnQ7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOZ0Zvck9mQ29udGV4dC5wcm90b3R5cGUsIFwiZmlyc3RcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHJldHVybiB7P31cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5pbmRleCA9PT0gMDsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5nRm9yT2ZDb250ZXh0LnByb3RvdHlwZSwgXCJsYXN0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEByZXR1cm4gez99XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuaW5kZXggPT09IHRoaXMuY291bnQgLSAxOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTmdGb3JPZkNvbnRleHQucHJvdG90eXBlLCBcImV2ZW5cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHJldHVybiB7P31cbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5pbmRleCAlIDIgPT09IDA7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOZ0Zvck9mQ29udGV4dC5wcm90b3R5cGUsIFwib2RkXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEByZXR1cm4gez99XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICF0aGlzLmV2ZW47IH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBOZ0Zvck9mQ29udGV4dDtcbn0oKSk7XG4vKipcbiAqIFRoZSBgTmdGb3JPZmAgZGlyZWN0aXZlIGluc3RhbnRpYXRlcyBhIHRlbXBsYXRlIG9uY2UgcGVyIGl0ZW0gZnJvbSBhbiBpdGVyYWJsZS4gVGhlIGNvbnRleHRcbiAqIGZvciBlYWNoIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZSBpbmhlcml0cyBmcm9tIHRoZSBvdXRlciBjb250ZXh0IHdpdGggdGhlIGdpdmVuIGxvb3AgdmFyaWFibGVcbiAqIHNldCB0byB0aGUgY3VycmVudCBpdGVtIGZyb20gdGhlIGl0ZXJhYmxlLlxuICpcbiAqICMjIyBMb2NhbCBWYXJpYWJsZXNcbiAqXG4gKiBgTmdGb3JPZmAgcHJvdmlkZXMgc2V2ZXJhbCBleHBvcnRlZCB2YWx1ZXMgdGhhdCBjYW4gYmUgYWxpYXNlZCB0byBsb2NhbCB2YXJpYWJsZXM6XG4gKlxuICogLSBgJGltcGxpY2l0OiBUYDogVGhlIHZhbHVlIG9mIHRoZSBpbmRpdmlkdWFsIGl0ZW1zIGluIHRoZSBpdGVyYWJsZSAoYG5nRm9yT2ZgKS5cbiAqIC0gYG5nRm9yT2Y6IE5nSXRlcmFibGU8VD5gOiBUaGUgdmFsdWUgb2YgdGhlIGl0ZXJhYmxlIGV4cHJlc3Npb24uIFVzZWZ1bCB3aGVuIHRoZSBleHByZXNzaW9uIGlzXG4gKiBtb3JlIGNvbXBsZXggdGhlbiBhIHByb3BlcnR5IGFjY2VzcywgZm9yIGV4YW1wbGUgd2hlbiB1c2luZyB0aGUgYXN5bmMgcGlwZSAoYHVzZXJTdHJlYW1zIHxcbiAqIGFzeW5jYCkuXG4gKiAtIGBpbmRleDogbnVtYmVyYDogVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIGl0ZXJhYmxlLlxuICogLSBgZmlyc3Q6IGJvb2xlYW5gOiBUcnVlIHdoZW4gdGhlIGl0ZW0gaXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGl0ZXJhYmxlLlxuICogLSBgbGFzdDogYm9vbGVhbmA6IFRydWUgd2hlbiB0aGUgaXRlbSBpcyB0aGUgbGFzdCBpdGVtIGluIHRoZSBpdGVyYWJsZS5cbiAqIC0gYGV2ZW46IGJvb2xlYW5gOiBUcnVlIHdoZW4gdGhlIGl0ZW0gaGFzIGFuIGV2ZW4gaW5kZXggaW4gdGhlIGl0ZXJhYmxlLlxuICogLSBgb2RkOiBib29sZWFuYDogVHJ1ZSB3aGVuIHRoZSBpdGVtIGhhcyBhbiBvZGQgaW5kZXggaW4gdGhlIGl0ZXJhYmxlLlxuICpcbiAqIGBgYFxuICogPGxpICpuZ0Zvcj1cImxldCB1c2VyIG9mIHVzZXJPYnNlcnZhYmxlIHwgYXN5bmMgYXMgdXNlcnM7IGluZGV4IGFzIGk7IGZpcnN0IGFzIGlzRmlyc3RcIj5cbiAqICAgIHt7aX19L3t7dXNlcnMubGVuZ3RofX0uIHt7dXNlcn19IDxzcGFuICpuZ0lmPVwiaXNGaXJzdFwiPmRlZmF1bHQ8L3NwYW4+XG4gKiA8L2xpPlxuICogYGBgXG4gKlxuICogIyMjIENoYW5nZSBQcm9wYWdhdGlvblxuICpcbiAqIFdoZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBpdGVyYXRvciBjaGFuZ2VzLCBgTmdGb3JPZmAgbWFrZXMgdGhlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0byB0aGUgRE9NOlxuICpcbiAqICogV2hlbiBhbiBpdGVtIGlzIGFkZGVkLCBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgdGVtcGxhdGUgaXMgYWRkZWQgdG8gdGhlIERPTS5cbiAqICogV2hlbiBhbiBpdGVtIGlzIHJlbW92ZWQsIGl0cyB0ZW1wbGF0ZSBpbnN0YW5jZSBpcyByZW1vdmVkIGZyb20gdGhlIERPTS5cbiAqICogV2hlbiBpdGVtcyBhcmUgcmVvcmRlcmVkLCB0aGVpciByZXNwZWN0aXZlIHRlbXBsYXRlcyBhcmUgcmVvcmRlcmVkIGluIHRoZSBET00uXG4gKiAqIE90aGVyd2lzZSwgdGhlIERPTSBlbGVtZW50IGZvciB0aGF0IGl0ZW0gd2lsbCByZW1haW4gdGhlIHNhbWUuXG4gKlxuICogQW5ndWxhciB1c2VzIG9iamVjdCBpZGVudGl0eSB0byB0cmFjayBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMgd2l0aGluIHRoZSBpdGVyYXRvciBhbmQgcmVwcm9kdWNlXG4gKiB0aG9zZSBjaGFuZ2VzIGluIHRoZSBET00uIFRoaXMgaGFzIGltcG9ydGFudCBpbXBsaWNhdGlvbnMgZm9yIGFuaW1hdGlvbnMgYW5kIGFueSBzdGF0ZWZ1bFxuICogY29udHJvbHMgKHN1Y2ggYXMgYDxpbnB1dD5gIGVsZW1lbnRzIHdoaWNoIGFjY2VwdCB1c2VyIGlucHV0KSB0aGF0IGFyZSBwcmVzZW50LiBJbnNlcnRlZCByb3dzIGNhblxuICogYmUgYW5pbWF0ZWQgaW4sIGRlbGV0ZWQgcm93cyBjYW4gYmUgYW5pbWF0ZWQgb3V0LCBhbmQgdW5jaGFuZ2VkIHJvd3MgcmV0YWluIGFueSB1bnNhdmVkIHN0YXRlXG4gKiBzdWNoIGFzIHVzZXIgaW5wdXQuXG4gKlxuICogSXQgaXMgcG9zc2libGUgZm9yIHRoZSBpZGVudGl0aWVzIG9mIGVsZW1lbnRzIGluIHRoZSBpdGVyYXRvciB0byBjaGFuZ2Ugd2hpbGUgdGhlIGRhdGEgZG9lcyBub3QuXG4gKiBUaGlzIGNhbiBoYXBwZW4sIGZvciBleGFtcGxlLCBpZiB0aGUgaXRlcmF0b3IgcHJvZHVjZWQgZnJvbSBhbiBSUEMgdG8gdGhlIHNlcnZlciwgYW5kIHRoYXRcbiAqIFJQQyBpcyByZS1ydW4uIEV2ZW4gaWYgdGhlIGRhdGEgaGFzbid0IGNoYW5nZWQsIHRoZSBzZWNvbmQgcmVzcG9uc2Ugd2lsbCBwcm9kdWNlIG9iamVjdHMgd2l0aFxuICogZGlmZmVyZW50IGlkZW50aXRpZXMsIGFuZCBBbmd1bGFyIHdpbGwgdGVhciBkb3duIHRoZSBlbnRpcmUgRE9NIGFuZCByZWJ1aWxkIGl0IChhcyBpZiBhbGwgb2xkXG4gKiBlbGVtZW50cyB3ZXJlIGRlbGV0ZWQgYW5kIGFsbCBuZXcgZWxlbWVudHMgaW5zZXJ0ZWQpLiBUaGlzIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24gYW5kIHNob3VsZFxuICogYmUgYXZvaWRlZCBpZiBwb3NzaWJsZS5cbiAqXG4gKiBUbyBjdXN0b21pemUgdGhlIGRlZmF1bHQgdHJhY2tpbmcgYWxnb3JpdGhtLCBgTmdGb3JPZmAgc3VwcG9ydHMgYHRyYWNrQnlgIG9wdGlvbi5cbiAqIGB0cmFja0J5YCB0YWtlcyBhIGZ1bmN0aW9uIHdoaWNoIGhhcyB0d28gYXJndW1lbnRzOiBgaW5kZXhgIGFuZCBgaXRlbWAuXG4gKiBJZiBgdHJhY2tCeWAgaXMgZ2l2ZW4sIEFuZ3VsYXIgdHJhY2tzIGNoYW5nZXMgYnkgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24uXG4gKlxuICogIyMjIFN5bnRheFxuICpcbiAqIC0gYDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgaW5kZXggYXMgaTsgdHJhY2tCeTogdHJhY2tCeUZuXCI+Li4uPC9saT5gXG4gKiAtIGA8bGkgdGVtcGxhdGU9XCJuZ0ZvciBsZXQgaXRlbSBvZiBpdGVtczsgaW5kZXggYXMgaTsgdHJhY2tCeTogdHJhY2tCeUZuXCI+Li4uPC9saT5gXG4gKlxuICogV2l0aCBgPG5nLXRlbXBsYXRlPmAgZWxlbWVudDpcbiAqXG4gKiBgYGBcbiAqIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtaXRlbSBbbmdGb3JPZl09XCJpdGVtc1wiIGxldC1pPVwiaW5kZXhcIiBbbmdGb3JUcmFja0J5XT1cInRyYWNrQnlGblwiPlxuICogICA8bGk+Li4uPC9saT5cbiAqIDwvbmctdGVtcGxhdGU+XG4gKiBgYGBcbiAqXG4gKiAjIyMgRXhhbXBsZVxuICpcbiAqIFNlZSBhIFtsaXZlIGRlbW9dKGh0dHA6Ly9wbG5rci5jby9lZGl0L0tWdVh4RHAwcWluR0R5bzMwN1FXP3A9cHJldmlldykgZm9yIGEgbW9yZSBkZXRhaWxlZFxuICogZXhhbXBsZS5cbiAqXG4gKiBcXEBzdGFibGVcbiAqL1xudmFyIE5nRm9yT2YgPSAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gX3ZpZXdDb250YWluZXJcbiAgICAgKiBAcGFyYW0gez99IF90ZW1wbGF0ZVxuICAgICAqIEBwYXJhbSB7P30gX2RpZmZlcnNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBOZ0Zvck9mKF92aWV3Q29udGFpbmVyLCBfdGVtcGxhdGUsIF9kaWZmZXJzKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIgPSBfdmlld0NvbnRhaW5lcjtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGUgPSBfdGVtcGxhdGU7XG4gICAgICAgIHRoaXMuX2RpZmZlcnMgPSBfZGlmZmVycztcbiAgICAgICAgdGhpcy5fZGlmZmVyID0gbnVsbDtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5nRm9yT2YucHJvdG90eXBlLCBcIm5nRm9yVHJhY2tCeVwiLCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl90cmFja0J5Rm47IH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0gez99IGZuXG4gICAgICAgICAqIEByZXR1cm4gez99XG4gICAgICAgICAqL1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIGZuICE9IG51bGwgJiYgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyh2aWNiKTogdXNlIGEgbG9nIHNlcnZpY2Ugb25jZSB0aGVyZSBpcyBhIHB1YmxpYyBvbmUgYXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgaWYgKChjb25zb2xlKSAmJiAoY29uc29sZS53YXJuKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJ0cmFja0J5IG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkIFwiICsgSlNPTi5zdHJpbmdpZnkoZm4pICsgXCIuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU2VlIGh0dHBzOi8vYW5ndWxhci5pby9kb2NzL3RzL2xhdGVzdC9hcGkvY29tbW9uL2luZGV4L05nRm9yLWRpcmVjdGl2ZS5odG1sIyEjY2hhbmdlLXByb3BhZ2F0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90cmFja0J5Rm4gPSBmbjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5nRm9yT2YucHJvdG90eXBlLCBcIm5nRm9yVGVtcGxhdGVcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHs/fSB2YWx1ZVxuICAgICAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAgICAgKi9cbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIC8vIFRPRE8oVFMyLjEpOiBtYWtlIFRlbXBsYXRlUmVmPFBhcnRpYWw8TmdGb3JSb3dPZjxUPj4+IG9uY2Ugd2UgbW92ZSB0byBUUyB2Mi4xXG4gICAgICAgICAgICAvLyBUaGUgY3VycmVudCB0eXBlIGlzIHRvbyByZXN0cmljdGl2ZTsgYSB0ZW1wbGF0ZSB0aGF0IGp1c3QgdXNlcyBpbmRleCwgZm9yIGV4YW1wbGUsXG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgYWNjZXB0YWJsZS5cbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gY2hhbmdlc1xuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTmdGb3JPZi5wcm90b3R5cGUubmdPbkNoYW5nZXMgPSBmdW5jdGlvbiAoY2hhbmdlcykge1xuICAgICAgICBpZiAoJ25nRm9yT2YnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIFJlYWN0IG9uIG5nRm9yT2YgY2hhbmdlcyBvbmx5IG9uY2UgYWxsIGlucHV0cyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWRcbiAgICAgICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIHZhbHVlID0gY2hhbmdlc1snbmdGb3JPZiddLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZGlmZmVyICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlmZmVyID0gdGhpcy5fZGlmZmVycy5maW5kKHZhbHVlKS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnXCIgKyB2YWx1ZSArIFwiJyBvZiB0eXBlICdcIiArIGdldFR5cGVOYW1lRm9yRGVidWdnaW5nKHZhbHVlKSArIFwiJy4gTmdGb3Igb25seSBzdXBwb3J0cyBiaW5kaW5nIHRvIEl0ZXJhYmxlcyBzdWNoIGFzIEFycmF5cy5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIE5nRm9yT2YucHJvdG90eXBlLm5nRG9DaGVjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RpZmZlcikge1xuICAgICAgICAgICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gY2hhbmdlcyA9IHRoaXMuX2RpZmZlci5kaWZmKHRoaXMubmdGb3JPZik7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcylcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseUNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gY2hhbmdlc1xuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTmdGb3JPZi5wcm90b3R5cGUuX2FwcGx5Q2hhbmdlcyA9IGZ1bmN0aW9uIChjaGFuZ2VzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIGluc2VydFR1cGxlcyA9IFtdO1xuICAgICAgICBjaGFuZ2VzLmZvckVhY2hPcGVyYXRpb24oZnVuY3Rpb24gKGl0ZW0sIGFkanVzdGVkUHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5wcmV2aW91c0luZGV4ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyB2aWV3ID0gX3RoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KF90aGlzLl90ZW1wbGF0ZSwgbmV3IE5nRm9yT2ZDb250ZXh0KC8qKiBAdHlwZSB7P30gKi8gKChudWxsKSksIF90aGlzLm5nRm9yT2YsIC0xLCAtMSksIGN1cnJlbnRJbmRleCk7XG4gICAgICAgICAgICAgICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gdHVwbGUgPSBuZXcgUmVjb3JkVmlld1R1cGxlKGl0ZW0sIHZpZXcpO1xuICAgICAgICAgICAgICAgIGluc2VydFR1cGxlcy5wdXNoKHR1cGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRJbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3ZpZXdDb250YWluZXIucmVtb3ZlKGFkanVzdGVkUHJldmlvdXNJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyB2aWV3ID0gKChfdGhpcy5fdmlld0NvbnRhaW5lci5nZXQoYWRqdXN0ZWRQcmV2aW91c0luZGV4KSkpO1xuICAgICAgICAgICAgICAgIF90aGlzLl92aWV3Q29udGFpbmVyLm1vdmUodmlldywgY3VycmVudEluZGV4KTtcbiAgICAgICAgICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyB0dXBsZSA9IG5ldyBSZWNvcmRWaWV3VHVwbGUoaXRlbSwgLyoqIEB0eXBlIHs/fSAqLyAodmlldykpO1xuICAgICAgICAgICAgICAgIGluc2VydFR1cGxlcy5wdXNoKHR1cGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAodmFyIC8qKiBAdHlwZSB7P30gKi8gaSA9IDA7IGkgPCBpbnNlcnRUdXBsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX3BlclZpZXdDaGFuZ2UoaW5zZXJ0VHVwbGVzW2ldLnZpZXcsIGluc2VydFR1cGxlc1tpXS5yZWNvcmQpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIC8qKiBAdHlwZSB7P30gKi8gaSA9IDAsIC8qKiBAdHlwZSB7P30gKi8gaWxlbiA9IHRoaXMuX3ZpZXdDb250YWluZXIubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyB2aWV3UmVmID0gKHRoaXMuX3ZpZXdDb250YWluZXIuZ2V0KGkpKTtcbiAgICAgICAgICAgIHZpZXdSZWYuY29udGV4dC5pbmRleCA9IGk7XG4gICAgICAgICAgICB2aWV3UmVmLmNvbnRleHQuY291bnQgPSBpbGVuO1xuICAgICAgICB9XG4gICAgICAgIGNoYW5nZXMuZm9yRWFjaElkZW50aXR5Q2hhbmdlKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIHZpZXdSZWYgPSAoX3RoaXMuX3ZpZXdDb250YWluZXIuZ2V0KHJlY29yZC5jdXJyZW50SW5kZXgpKTtcbiAgICAgICAgICAgIHZpZXdSZWYuY29udGV4dC4kaW1wbGljaXQgPSByZWNvcmQuaXRlbTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHZpZXdcbiAgICAgKiBAcGFyYW0gez99IHJlY29yZFxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTmdGb3JPZi5wcm90b3R5cGUuX3BlclZpZXdDaGFuZ2UgPSBmdW5jdGlvbiAodmlldywgcmVjb3JkKSB7XG4gICAgICAgIHZpZXcuY29udGV4dC4kaW1wbGljaXQgPSByZWNvcmQuaXRlbTtcbiAgICB9O1xuICAgIHJldHVybiBOZ0Zvck9mO1xufSgpKTtcbk5nRm9yT2YuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3sgc2VsZWN0b3I6ICdbbmdGb3JdW25nRm9yT2ZdJyB9LF0gfSxcbl07XG4vKipcbiAqIEBub2NvbGxhcHNlXG4gKi9cbk5nRm9yT2YuY3RvclBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXG4gICAgeyB0eXBlOiBWaWV3Q29udGFpbmVyUmVmLCB9LFxuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIH0sXG4gICAgeyB0eXBlOiBJdGVyYWJsZURpZmZlcnMsIH0sXG5dOyB9O1xuTmdGb3JPZi5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICAnbmdGb3JPZic6IFt7IHR5cGU6IElucHV0IH0sXSxcbiAgICAnbmdGb3JUcmFja0J5JzogW3sgdHlwZTogSW5wdXQgfSxdLFxuICAgICduZ0ZvclRlbXBsYXRlJzogW3sgdHlwZTogSW5wdXQgfSxdLFxufTtcbnZhciBSZWNvcmRWaWV3VHVwbGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gcmVjb3JkXG4gICAgICogQHBhcmFtIHs/fSB2aWV3XG4gICAgICovXG4gICAgZnVuY3Rpb24gUmVjb3JkVmlld1R1cGxlKHJlY29yZCwgdmlldykge1xuICAgICAgICB0aGlzLnJlY29yZCA9IHJlY29yZDtcbiAgICAgICAgdGhpcy52aWV3ID0gdmlldztcbiAgICB9XG4gICAgcmV0dXJuIFJlY29yZFZpZXdUdXBsZTtcbn0oKSk7XG4vKipcbiAqIEBkZXByZWNhdGVkIGZyb20gdjQuMC4wIC0gVXNlIE5nRm9yT2YgaW5zdGVhZC5cbiAqL1xudmFyIE5nRm9yID0gTmdGb3JPZjtcbi8qKlxuICogQHBhcmFtIHs/fSB0eXBlXG4gKiBAcmV0dXJuIHs/fVxuICovXG5mdW5jdGlvbiBnZXRUeXBlTmFtZUZvckRlYnVnZ2luZyh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGVbJ25hbWUnXSB8fCB0eXBlb2YgdHlwZTtcbn1cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8qKlxuICogQ29uZGl0aW9uYWxseSBpbmNsdWRlcyBhIHRlbXBsYXRlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBhbiBgZXhwcmVzc2lvbmAuXG4gKlxuICogYG5nSWZgIGV2YWx1YXRlcyB0aGUgYGV4cHJlc3Npb25gIGFuZCB0aGVuIHJlbmRlcnMgdGhlIGB0aGVuYCBvciBgZWxzZWAgdGVtcGxhdGUgaW4gaXRzIHBsYWNlXG4gKiB3aGVuIGV4cHJlc3Npb24gaXMgdHJ1dGh5IG9yIGZhbHN5IHJlc3BlY3RpdmVseS4gVHlwaWNhbGx5IHRoZTpcbiAqICAtIGB0aGVuYCB0ZW1wbGF0ZSBpcyB0aGUgaW5saW5lIHRlbXBsYXRlIG9mIGBuZ0lmYCB1bmxlc3MgYm91bmQgdG8gYSBkaWZmZXJlbnQgdmFsdWUuXG4gKiAgLSBgZWxzZWAgdGVtcGxhdGUgaXMgYmxhbmsgdW5sZXNzIGl0IGlzIGJvdW5kLlxuICpcbiAqICMjIE1vc3QgY29tbW9uIHVzYWdlXG4gKlxuICogVGhlIG1vc3QgY29tbW9uIHVzYWdlIG9mIHRoZSBgbmdJZmAgZGlyZWN0aXZlIGlzIHRvIGNvbmRpdGlvbmFsbHkgc2hvdyB0aGUgaW5saW5lIHRlbXBsYXRlIGFzXG4gKiBzZWVuIGluIHRoaXMgZXhhbXBsZTpcbiAqIHtcXEBleGFtcGxlIGNvbW1vbi9uZ0lmL3RzL21vZHVsZS50cyByZWdpb249J05nSWZTaW1wbGUnfVxuICpcbiAqICMjIFNob3dpbmcgYW4gYWx0ZXJuYXRpdmUgdGVtcGxhdGUgdXNpbmcgYGVsc2VgXG4gKlxuICogSWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGRpc3BsYXkgYSB0ZW1wbGF0ZSB3aGVuIHRoZSBgZXhwcmVzc2lvbmAgaXMgZmFsc3kgdXNlIHRoZSBgZWxzZWAgdGVtcGxhdGVcbiAqIGJpbmRpbmcgYXMgc2hvd24uIE5vdGUgdGhhdCB0aGUgYGVsc2VgIGJpbmRpbmcgcG9pbnRzIHRvIGEgYDxuZy10ZW1wbGF0ZT5gIGxhYmVsZWQgYCNlbHNlQmxvY2tgLlxuICogVGhlIHRlbXBsYXRlIGNhbiBiZSBkZWZpbmVkIGFueXdoZXJlIGluIHRoZSBjb21wb25lbnQgdmlldyBidXQgaXMgdHlwaWNhbGx5IHBsYWNlZCByaWdodCBhZnRlclxuICogYG5nSWZgIGZvciByZWFkYWJpbGl0eS5cbiAqXG4gKiB7XFxAZXhhbXBsZSBjb21tb24vbmdJZi90cy9tb2R1bGUudHMgcmVnaW9uPSdOZ0lmRWxzZSd9XG4gKlxuICogIyMgVXNpbmcgbm9uLWlubGluZWQgYHRoZW5gIHRlbXBsYXRlXG4gKlxuICogVXN1YWxseSB0aGUgYHRoZW5gIHRlbXBsYXRlIGlzIHRoZSBpbmxpbmVkIHRlbXBsYXRlIG9mIHRoZSBgbmdJZmAsIGJ1dCBpdCBjYW4gYmUgY2hhbmdlZCB1c2luZ1xuICogYSBiaW5kaW5nIChqdXN0IGxpa2UgYGVsc2VgKS4gQmVjYXVzZSBgdGhlbmAgYW5kIGBlbHNlYCBhcmUgYmluZGluZ3MsIHRoZSB0ZW1wbGF0ZSByZWZlcmVuY2VzIGNhblxuICogY2hhbmdlIGF0IHJ1bnRpbWUgYXMgc2hvd24gaW4gdGhpcyBleGFtcGxlLlxuICpcbiAqIHtcXEBleGFtcGxlIGNvbW1vbi9uZ0lmL3RzL21vZHVsZS50cyByZWdpb249J05nSWZUaGVuRWxzZSd9XG4gKlxuICogIyMgU3RvcmluZyBjb25kaXRpb25hbCByZXN1bHQgaW4gYSB2YXJpYWJsZVxuICpcbiAqIEEgY29tbW9uIHBhdHRlcm4gaXMgdGhhdCB3ZSBuZWVkIHRvIHNob3cgYSBzZXQgb2YgcHJvcGVydGllcyBmcm9tIHRoZSBzYW1lIG9iamVjdC4gSWYgdGhlXG4gKiBvYmplY3QgaXMgdW5kZWZpbmVkLCB0aGVuIHdlIGhhdmUgdG8gdXNlIHRoZSBzYWZlLXRyYXZlcnNhbC1vcGVyYXRvciBgPy5gIHRvIGd1YXJkIGFnYWluc3RcbiAqIGRlcmVmZXJlbmNpbmcgYSBgbnVsbGAgdmFsdWUuIFRoaXMgaXMgZXNwZWNpYWxseSB0aGUgY2FzZSB3aGVuIHdhaXRpbmcgb24gYXN5bmMgZGF0YSBzdWNoIGFzXG4gKiB3aGVuIHVzaW5nIHRoZSBgYXN5bmNgIHBpcGUgYXMgc2hvd24gaW4gZm9sbG93aW5nIGV4YW1wbGU6XG4gKlxuICogYGBgXG4gKiBIZWxsbyB7eyAodXNlclN0cmVhbXxhc3luYyk/Lmxhc3QgfX0sIHt7ICh1c2VyU3RyZWFtfGFzeW5jKT8uZmlyc3QgfX0hXG4gKiBgYGBcbiAqXG4gKiBUaGVyZSBhcmUgc2V2ZXJhbCBpbmVmZmljaWVuY2llcyBpbiB0aGUgYWJvdmUgZXhhbXBsZTpcbiAqICAtIFdlIGNyZWF0ZSBtdWx0aXBsZSBzdWJzY3JpcHRpb25zIG9uIGB1c2VyU3RyZWFtYC4gT25lIGZvciBlYWNoIGBhc3luY2AgcGlwZSwgb3IgdHdvIGluIHRoZVxuICogICAgZXhhbXBsZSBhYm92ZS5cbiAqICAtIFdlIGNhbm5vdCBkaXNwbGF5IGFuIGFsdGVybmF0aXZlIHNjcmVlbiB3aGlsZSB3YWl0aW5nIGZvciB0aGUgZGF0YSB0byBhcnJpdmUgYXN5bmNocm9ub3VzbHkuXG4gKiAgLSBXZSBoYXZlIHRvIHVzZSB0aGUgc2FmZS10cmF2ZXJzYWwtb3BlcmF0b3IgYD8uYCB0byBhY2Nlc3MgcHJvcGVydGllcywgd2hpY2ggaXMgY3VtYmVyc29tZS5cbiAqICAtIFdlIGhhdmUgdG8gcGxhY2UgdGhlIGBhc3luY2AgcGlwZSBpbiBwYXJlbnRoZXNpcy5cbiAqXG4gKiBBIGJldHRlciB3YXkgdG8gZG8gdGhpcyBpcyB0byB1c2UgYG5nSWZgIGFuZCBzdG9yZSB0aGUgcmVzdWx0IG9mIHRoZSBjb25kaXRpb24gaW4gYSBsb2NhbFxuICogdmFyaWFibGUgYXMgc2hvd24gaW4gdGhlIHRoZSBleGFtcGxlIGJlbG93OlxuICpcbiAqIHtcXEBleGFtcGxlIGNvbW1vbi9uZ0lmL3RzL21vZHVsZS50cyByZWdpb249J05nSWZBcyd9XG4gKlxuICogTm90aWNlIHRoYXQ6XG4gKiAgLSBXZSB1c2Ugb25seSBvbmUgYGFzeW5jYCBwaXBlIGFuZCBoZW5jZSBvbmx5IG9uZSBzdWJzY3JpcHRpb24gZ2V0cyBjcmVhdGVkLlxuICogIC0gYG5nSWZgIHN0b3JlcyB0aGUgcmVzdWx0IG9mIHRoZSBgdXNlclN0cmVhbXxhc3luY2AgaW4gdGhlIGxvY2FsIHZhcmlhYmxlIGB1c2VyYC5cbiAqICAtIFRoZSBsb2NhbCBgdXNlcmAgY2FuIHRoZW4gYmUgYm91bmQgcmVwZWF0ZWRseSBpbiBhIG1vcmUgZWZmaWNpZW50IHdheS5cbiAqICAtIE5vIG5lZWQgdG8gdXNlIHRoZSBzYWZlLXRyYXZlcnNhbC1vcGVyYXRvciBgPy5gIHRvIGFjY2VzcyBwcm9wZXJ0aWVzIGFzIGBuZ0lmYCB3aWxsIG9ubHlcbiAqICAgIGRpc3BsYXkgdGhlIGRhdGEgaWYgYHVzZXJTdHJlYW1gIHJldHVybnMgYSB2YWx1ZS5cbiAqICAtIFdlIGNhbiBkaXNwbGF5IGFuIGFsdGVybmF0aXZlIHRlbXBsYXRlIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBkYXRhLlxuICpcbiAqICMjIyBTeW50YXhcbiAqXG4gKiBTaW1wbGUgZm9ybTpcbiAqIC0gYDxkaXYgKm5nSWY9XCJjb25kaXRpb25cIj4uLi48L2Rpdj5gXG4gKiAtIGA8ZGl2IHRlbXBsYXRlPVwibmdJZiBjb25kaXRpb25cIj4uLi48L2Rpdj5gXG4gKiAtIGA8bmctdGVtcGxhdGUgW25nSWZdPVwiY29uZGl0aW9uXCI+PGRpdj4uLi48L2Rpdj48L25nLXRlbXBsYXRlPmBcbiAqXG4gKiBGb3JtIHdpdGggYW4gZWxzZSBibG9jazpcbiAqIGBgYFxuICogPGRpdiAqbmdJZj1cImNvbmRpdGlvbjsgZWxzZSBlbHNlQmxvY2tcIj4uLi48L2Rpdj5cbiAqIDxuZy10ZW1wbGF0ZSAjZWxzZUJsb2NrPi4uLjwvbmctdGVtcGxhdGU+XG4gKiBgYGBcbiAqXG4gKiBGb3JtIHdpdGggYSBgdGhlbmAgYW5kIGBlbHNlYCBibG9jazpcbiAqIGBgYFxuICogPGRpdiAqbmdJZj1cImNvbmRpdGlvbjsgdGhlbiB0aGVuQmxvY2sgZWxzZSBlbHNlQmxvY2tcIj48L2Rpdj5cbiAqIDxuZy10ZW1wbGF0ZSAjdGhlbkJsb2NrPi4uLjwvbmctdGVtcGxhdGU+XG4gKiA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz4uLi48L25nLXRlbXBsYXRlPlxuICogYGBgXG4gKlxuICogRm9ybSB3aXRoIHN0b3JpbmcgdGhlIHZhbHVlIGxvY2FsbHk6XG4gKiBgYGBcbiAqIDxkaXYgKm5nSWY9XCJjb25kaXRpb24gYXMgdmFsdWU7IGVsc2UgZWxzZUJsb2NrXCI+e3t2YWx1ZX19PC9kaXY+XG4gKiA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz4uLi48L25nLXRlbXBsYXRlPlxuICogYGBgXG4gKlxuICogXFxAc3RhYmxlXG4gKi9cbnZhciBOZ0lmID0gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IF92aWV3Q29udGFpbmVyXG4gICAgICogQHBhcmFtIHs/fSB0ZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIE5nSWYoX3ZpZXdDb250YWluZXIsIHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIgPSBfdmlld0NvbnRhaW5lcjtcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IG5ldyBOZ0lmQ29udGV4dCgpO1xuICAgICAgICB0aGlzLl90aGVuVGVtcGxhdGVSZWYgPSBudWxsO1xuICAgICAgICB0aGlzLl9lbHNlVGVtcGxhdGVSZWYgPSBudWxsO1xuICAgICAgICB0aGlzLl90aGVuVmlld1JlZiA9IG51bGw7XG4gICAgICAgIHRoaXMuX2Vsc2VWaWV3UmVmID0gbnVsbDtcbiAgICAgICAgdGhpcy5fdGhlblRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOZ0lmLnByb3RvdHlwZSwgXCJuZ0lmXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7P30gY29uZGl0aW9uXG4gICAgICAgICAqIEByZXR1cm4gez99XG4gICAgICAgICAqL1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQuJGltcGxpY2l0ID0gdGhpcy5fY29udGV4dC5uZ0lmID0gY29uZGl0aW9uO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmlldygpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTmdJZi5wcm90b3R5cGUsIFwibmdJZlRoZW5cIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHs/fSB0ZW1wbGF0ZVJlZlxuICAgICAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAgICAgKi9cbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuX3RoZW5UZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgdGhpcy5fdGhlblZpZXdSZWYgPSBudWxsOyAvLyBjbGVhciBwcmV2aW91cyB2aWV3IGlmIGFueS5cbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZpZXcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5nSWYucHJvdG90eXBlLCBcIm5nSWZFbHNlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7P30gdGVtcGxhdGVSZWZcbiAgICAgICAgICogQHJldHVybiB7P31cbiAgICAgICAgICovXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICB0aGlzLl9lbHNlVGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgIHRoaXMuX2Vsc2VWaWV3UmVmID0gbnVsbDsgLy8gY2xlYXIgcHJldmlvdXMgdmlldyBpZiBhbnkuXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVWaWV3KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTmdJZi5wcm90b3R5cGUuX3VwZGF0ZVZpZXcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZXh0LiRpbXBsaWNpdCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl90aGVuVmlld1JlZikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbHNlVmlld1JlZiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RoZW5UZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aGVuVmlld1JlZiA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsIHRoaXMuX2NvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZWxzZVZpZXdSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGhlblZpZXdSZWYgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lbHNlVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxzZVZpZXdSZWYgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fZWxzZVRlbXBsYXRlUmVmLCB0aGlzLl9jb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBOZ0lmO1xufSgpKTtcbk5nSWYuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3sgc2VsZWN0b3I6ICdbbmdJZl0nIH0sXSB9LFxuXTtcbi8qKlxuICogQG5vY29sbGFwc2VcbiAqL1xuTmdJZi5jdG9yUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtcbiAgICB7IHR5cGU6IFZpZXdDb250YWluZXJSZWYsIH0sXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgfSxcbl07IH07XG5OZ0lmLnByb3BEZWNvcmF0b3JzID0ge1xuICAgICduZ0lmJzogW3sgdHlwZTogSW5wdXQgfSxdLFxuICAgICduZ0lmVGhlbic6IFt7IHR5cGU6IElucHV0IH0sXSxcbiAgICAnbmdJZkVsc2UnOiBbeyB0eXBlOiBJbnB1dCB9LF0sXG59O1xuLyoqXG4gKiBcXEBzdGFibGVcbiAqL1xudmFyIE5nSWZDb250ZXh0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOZ0lmQ29udGV4dCgpIHtcbiAgICAgICAgdGhpcy4kaW1wbGljaXQgPSBudWxsO1xuICAgICAgICB0aGlzLm5nSWYgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gTmdJZkNvbnRleHQ7XG59KCkpO1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xudmFyIFN3aXRjaFZpZXcgPSAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gX3ZpZXdDb250YWluZXJSZWZcbiAgICAgKiBAcGFyYW0gez99IF90ZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFN3aXRjaFZpZXcoX3ZpZXdDb250YWluZXJSZWYsIF90ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmID0gX3ZpZXdDb250YWluZXJSZWY7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlUmVmID0gX3RlbXBsYXRlUmVmO1xuICAgICAgICB0aGlzLl9jcmVhdGVkID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgU3dpdGNoVmlldy5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBTd2l0Y2hWaWV3LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gY3JlYXRlZFxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgU3dpdGNoVmlldy5wcm90b3R5cGUuZW5mb3JjZVN0YXRlID0gZnVuY3Rpb24gKGNyZWF0ZWQpIHtcbiAgICAgICAgaWYgKGNyZWF0ZWQgJiYgIXRoaXMuX2NyZWF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWNyZWF0ZWQgJiYgdGhpcy5fY3JlYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTd2l0Y2hWaWV3O1xufSgpKTtcbi8qKlxuICogXFxAbmdNb2R1bGUgQ29tbW9uTW9kdWxlXG4gKlxuICogXFxAd2hhdEl0RG9lcyBBZGRzIC8gcmVtb3ZlcyBET00gc3ViLXRyZWVzIHdoZW4gdGhlIG5lc3QgbWF0Y2ggZXhwcmVzc2lvbnMgbWF0Y2hlcyB0aGUgc3dpdGNoXG4gKiAgICAgICAgICAgICBleHByZXNzaW9uLlxuICpcbiAqIFxcQGhvd1RvVXNlXG4gKiBgYGBcbiAqICAgICA8Y29udGFpbmVyLWVsZW1lbnQgW25nU3dpdGNoXT1cInN3aXRjaF9leHByZXNzaW9uXCI+XG4gKiAgICAgICA8c29tZS1lbGVtZW50ICpuZ1N3aXRjaENhc2U9XCJtYXRjaF9leHByZXNzaW9uXzFcIj4uLi48L3NvbWUtZWxlbWVudD5cbiAqICAgICAgIDxzb21lLWVsZW1lbnQgKm5nU3dpdGNoQ2FzZT1cIm1hdGNoX2V4cHJlc3Npb25fMlwiPi4uLjwvc29tZS1lbGVtZW50PlxuICogICAgICAgPHNvbWUtb3RoZXItZWxlbWVudCAqbmdTd2l0Y2hDYXNlPVwibWF0Y2hfZXhwcmVzc2lvbl8zXCI+Li4uPC9zb21lLW90aGVyLWVsZW1lbnQ+XG4gKiAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJtYXRjaF9leHByZXNzaW9uXzNcIj5cbiAqICAgICAgICAgPCEtLSB1c2UgYSBuZy1jb250YWluZXIgdG8gZ3JvdXAgbXVsdGlwbGUgcm9vdCBub2RlcyAtLT5cbiAqICAgICAgICAgPGlubmVyLWVsZW1lbnQ+PC9pbm5lci1lbGVtZW50PlxuICogICAgICAgICA8aW5uZXItb3RoZXItZWxlbWVudD48L2lubmVyLW90aGVyLWVsZW1lbnQ+XG4gKiAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAqICAgICAgIDxzb21lLWVsZW1lbnQgKm5nU3dpdGNoRGVmYXVsdD4uLi48L3NvbWUtZWxlbWVudD5cbiAqICAgICA8L2NvbnRhaW5lci1lbGVtZW50PlxuICogYGBgXG4gKiBcXEBkZXNjcmlwdGlvblxuICpcbiAqIGBOZ1N3aXRjaGAgc3RhbXBzIG91dCBuZXN0ZWQgdmlld3Mgd2hlbiB0aGVpciBtYXRjaCBleHByZXNzaW9uIHZhbHVlIG1hdGNoZXMgdGhlIHZhbHVlIG9mIHRoZVxuICogc3dpdGNoIGV4cHJlc3Npb24uXG4gKlxuICogSW4gb3RoZXIgd29yZHM6XG4gKiAtIHlvdSBkZWZpbmUgYSBjb250YWluZXIgZWxlbWVudCAod2hlcmUgeW91IHBsYWNlIHRoZSBkaXJlY3RpdmUgd2l0aCBhIHN3aXRjaCBleHByZXNzaW9uIG9uIHRoZVxuICogYFtuZ1N3aXRjaF09XCIuLi5cImAgYXR0cmlidXRlKVxuICogLSB5b3UgZGVmaW5lIGlubmVyIHZpZXdzIGluc2lkZSB0aGUgYE5nU3dpdGNoYCBhbmQgcGxhY2UgYSBgKm5nU3dpdGNoQ2FzZWAgYXR0cmlidXRlIG9uIHRoZSB2aWV3XG4gKiByb290IGVsZW1lbnRzLlxuICpcbiAqIEVsZW1lbnRzIHdpdGhpbiBgTmdTd2l0Y2hgIGJ1dCBvdXRzaWRlIG9mIGEgYE5nU3dpdGNoQ2FzZWAgb3IgYE5nU3dpdGNoRGVmYXVsdGAgZGlyZWN0aXZlcyB3aWxsXG4gKiBiZSBwcmVzZXJ2ZWQgYXQgdGhlIGxvY2F0aW9uLlxuICpcbiAqIFRoZSBgbmdTd2l0Y2hDYXNlYCBkaXJlY3RpdmUgaW5mb3JtcyB0aGUgcGFyZW50IGBOZ1N3aXRjaGAgb2Ygd2hpY2ggdmlldyB0byBkaXNwbGF5IHdoZW4gdGhlXG4gKiBleHByZXNzaW9uIGlzIGV2YWx1YXRlZC5cbiAqIFdoZW4gbm8gbWF0Y2hpbmcgZXhwcmVzc2lvbiBpcyBmb3VuZCBvbiBhIGBuZ1N3aXRjaENhc2VgIHZpZXcsIHRoZSBgbmdTd2l0Y2hEZWZhdWx0YCB2aWV3IGlzXG4gKiBzdGFtcGVkIG91dC5cbiAqXG4gKiBcXEBzdGFibGVcbiAqL1xudmFyIE5nU3dpdGNoID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOZ1N3aXRjaCgpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFVzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2FzZUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5fbGFzdENhc2VDaGVja0luZGV4ID0gMDtcbiAgICAgICAgdGhpcy5fbGFzdENhc2VzTWF0Y2hlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTmdTd2l0Y2gucHJvdG90eXBlLCBcIm5nU3dpdGNoXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7P30gbmV3VmFsdWVcbiAgICAgICAgICogQHJldHVybiB7P31cbiAgICAgICAgICovXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9uZ1N3aXRjaCA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2Nhc2VDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogXFxAaW50ZXJuYWxcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIE5nU3dpdGNoLnByb3RvdHlwZS5fYWRkQ2FzZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrOyB9O1xuICAgIC8qKlxuICAgICAqIFxcQGludGVybmFsXG4gICAgICogQHBhcmFtIHs/fSB2aWV3XG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBOZ1N3aXRjaC5wcm90b3R5cGUuX2FkZERlZmF1bHQgPSBmdW5jdGlvbiAodmlldykge1xuICAgICAgICBpZiAoIXRoaXMuX2RlZmF1bHRWaWV3cykge1xuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFZpZXdzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGVmYXVsdFZpZXdzLnB1c2godmlldyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBcXEBpbnRlcm5hbFxuICAgICAqIEBwYXJhbSB7P30gdmFsdWVcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIE5nU3dpdGNoLnByb3RvdHlwZS5fbWF0Y2hDYXNlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIG1hdGNoZWQgPSB2YWx1ZSA9PSB0aGlzLl9uZ1N3aXRjaDtcbiAgICAgICAgdGhpcy5fbGFzdENhc2VzTWF0Y2hlZCA9IHRoaXMuX2xhc3RDYXNlc01hdGNoZWQgfHwgbWF0Y2hlZDtcbiAgICAgICAgdGhpcy5fbGFzdENhc2VDaGVja0luZGV4Kys7XG4gICAgICAgIGlmICh0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXggPT09IHRoaXMuX2Nhc2VDb3VudCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKTtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleCA9IDA7XG4gICAgICAgICAgICB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hdGNoZWQ7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHVzZURlZmF1bHRcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIE5nU3dpdGNoLnByb3RvdHlwZS5fdXBkYXRlRGVmYXVsdENhc2VzID0gZnVuY3Rpb24gKHVzZURlZmF1bHQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRWaWV3cyAmJiB1c2VEZWZhdWx0ICE9PSB0aGlzLl9kZWZhdWx0VXNlZCkge1xuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFVzZWQgPSB1c2VEZWZhdWx0O1xuICAgICAgICAgICAgZm9yICh2YXIgLyoqIEB0eXBlIHs/fSAqLyBpID0gMDsgaSA8IHRoaXMuX2RlZmF1bHRWaWV3cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIGRlZmF1bHRWaWV3ID0gdGhpcy5fZGVmYXVsdFZpZXdzW2ldO1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWaWV3LmVuZm9yY2VTdGF0ZSh1c2VEZWZhdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE5nU3dpdGNoO1xufSgpKTtcbk5nU3dpdGNoLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7IHNlbGVjdG9yOiAnW25nU3dpdGNoXScgfSxdIH0sXG5dO1xuLyoqXG4gKiBAbm9jb2xsYXBzZVxuICovXG5OZ1N3aXRjaC5jdG9yUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtdOyB9O1xuTmdTd2l0Y2gucHJvcERlY29yYXRvcnMgPSB7XG4gICAgJ25nU3dpdGNoJzogW3sgdHlwZTogSW5wdXQgfSxdLFxufTtcbi8qKlxuICogXFxAbmdNb2R1bGUgQ29tbW9uTW9kdWxlXG4gKlxuICogXFxAd2hhdEl0RG9lcyBDcmVhdGVzIGEgdmlldyB0aGF0IHdpbGwgYmUgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBwYXJlbnQge1xcQGxpbmsgTmdTd2l0Y2h9IHdoZW4gdGhlXG4gKiAgICAgICAgICAgICBnaXZlbiBleHByZXNzaW9uIGV2YWx1YXRlIHRvIHJlc3BlY3RpdmVseSB0aGUgc2FtZS9kaWZmZXJlbnQgdmFsdWUgYXMgdGhlIHN3aXRjaFxuICogICAgICAgICAgICAgZXhwcmVzc2lvbi5cbiAqXG4gKiBcXEBob3dUb1VzZVxuICogYGBgXG4gKiA8Y29udGFpbmVyLWVsZW1lbnQgW25nU3dpdGNoXT1cInN3aXRjaF9leHByZXNzaW9uXCI+XG4gKiAgIDxzb21lLWVsZW1lbnQgKm5nU3dpdGNoQ2FzZT1cIm1hdGNoX2V4cHJlc3Npb25fMVwiPi4uLjwvc29tZS1lbGVtZW50PlxuICogPC9jb250YWluZXItZWxlbWVudD5cbiAqIGBgYFxuICogXFxAZGVzY3JpcHRpb25cbiAqXG4gKiBJbnNlcnQgdGhlIHN1Yi10cmVlIHdoZW4gdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBlbmNsb3Npbmcgc3dpdGNoXG4gKiBleHByZXNzaW9uLlxuICpcbiAqIElmIG11bHRpcGxlIG1hdGNoIGV4cHJlc3Npb25zIG1hdGNoIHRoZSBzd2l0Y2ggZXhwcmVzc2lvbiB2YWx1ZSwgYWxsIG9mIHRoZW0gYXJlIGRpc3BsYXllZC5cbiAqXG4gKiBTZWUge1xcQGxpbmsgTmdTd2l0Y2h9IGZvciBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGUuXG4gKlxuICogXFxAc3RhYmxlXG4gKi9cbnZhciBOZ1N3aXRjaENhc2UgPSAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gdmlld0NvbnRhaW5lclxuICAgICAqIEBwYXJhbSB7P30gdGVtcGxhdGVSZWZcbiAgICAgKiBAcGFyYW0gez99IG5nU3dpdGNoXG4gICAgICovXG4gICAgZnVuY3Rpb24gTmdTd2l0Y2hDYXNlKHZpZXdDb250YWluZXIsIHRlbXBsYXRlUmVmLCBuZ1N3aXRjaCkge1xuICAgICAgICB0aGlzLm5nU3dpdGNoID0gbmdTd2l0Y2g7XG4gICAgICAgIG5nU3dpdGNoLl9hZGRDYXNlKCk7XG4gICAgICAgIHRoaXMuX3ZpZXcgPSBuZXcgU3dpdGNoVmlldyh2aWV3Q29udGFpbmVyLCB0ZW1wbGF0ZVJlZik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTmdTd2l0Y2hDYXNlLnByb3RvdHlwZS5uZ0RvQ2hlY2sgPSBmdW5jdGlvbiAoKSB7IHRoaXMuX3ZpZXcuZW5mb3JjZVN0YXRlKHRoaXMubmdTd2l0Y2guX21hdGNoQ2FzZSh0aGlzLm5nU3dpdGNoQ2FzZSkpOyB9O1xuICAgIHJldHVybiBOZ1N3aXRjaENhc2U7XG59KCkpO1xuTmdTd2l0Y2hDYXNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7IHNlbGVjdG9yOiAnW25nU3dpdGNoQ2FzZV0nIH0sXSB9LFxuXTtcbi8qKlxuICogQG5vY29sbGFwc2VcbiAqL1xuTmdTd2l0Y2hDYXNlLmN0b3JQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW1xuICAgIHsgdHlwZTogVmlld0NvbnRhaW5lclJlZiwgfSxcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCB9LFxuICAgIHsgdHlwZTogTmdTd2l0Y2gsIGRlY29yYXRvcnM6IFt7IHR5cGU6IEhvc3QgfSxdIH0sXG5dOyB9O1xuTmdTd2l0Y2hDYXNlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgICduZ1N3aXRjaENhc2UnOiBbeyB0eXBlOiBJbnB1dCB9LF0sXG59O1xuLyoqXG4gKiBcXEBuZ01vZHVsZSBDb21tb25Nb2R1bGVcbiAqIFxcQHdoYXRJdERvZXMgQ3JlYXRlcyBhIHZpZXcgdGhhdCBpcyBhZGRlZCB0byB0aGUgcGFyZW50IHtcXEBsaW5rIE5nU3dpdGNofSB3aGVuIG5vIGNhc2UgZXhwcmVzc2lvbnNcbiAqIG1hdGNoIHRoZVxuICogICAgICAgICAgICAgc3dpdGNoIGV4cHJlc3Npb24uXG4gKlxuICogXFxAaG93VG9Vc2VcbiAqIGBgYFxuICogPGNvbnRhaW5lci1lbGVtZW50IFtuZ1N3aXRjaF09XCJzd2l0Y2hfZXhwcmVzc2lvblwiPlxuICogICA8c29tZS1lbGVtZW50ICpuZ1N3aXRjaENhc2U9XCJtYXRjaF9leHByZXNzaW9uXzFcIj4uLi48L3NvbWUtZWxlbWVudD5cbiAqICAgPHNvbWUtb3RoZXItZWxlbWVudCAqbmdTd2l0Y2hEZWZhdWx0Pi4uLjwvc29tZS1vdGhlci1lbGVtZW50PlxuICogPC9jb250YWluZXItZWxlbWVudD5cbiAqIGBgYFxuICpcbiAqIFxcQGRlc2NyaXB0aW9uXG4gKlxuICogSW5zZXJ0IHRoZSBzdWItdHJlZSB3aGVuIG5vIGNhc2UgZXhwcmVzc2lvbnMgZXZhbHVhdGUgdG8gdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGVuY2xvc2luZyBzd2l0Y2hcbiAqIGV4cHJlc3Npb24uXG4gKlxuICogU2VlIHtcXEBsaW5rIE5nU3dpdGNofSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlLlxuICpcbiAqIFxcQHN0YWJsZVxuICovXG52YXIgTmdTd2l0Y2hEZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHZpZXdDb250YWluZXJcbiAgICAgKiBAcGFyYW0gez99IHRlbXBsYXRlUmVmXG4gICAgICogQHBhcmFtIHs/fSBuZ1N3aXRjaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIE5nU3dpdGNoRGVmYXVsdCh2aWV3Q29udGFpbmVyLCB0ZW1wbGF0ZVJlZiwgbmdTd2l0Y2gpIHtcbiAgICAgICAgbmdTd2l0Y2guX2FkZERlZmF1bHQobmV3IFN3aXRjaFZpZXcodmlld0NvbnRhaW5lciwgdGVtcGxhdGVSZWYpKTtcbiAgICB9XG4gICAgcmV0dXJuIE5nU3dpdGNoRGVmYXVsdDtcbn0oKSk7XG5OZ1N3aXRjaERlZmF1bHQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3sgc2VsZWN0b3I6ICdbbmdTd2l0Y2hEZWZhdWx0XScgfSxdIH0sXG5dO1xuLyoqXG4gKiBAbm9jb2xsYXBzZVxuICovXG5OZ1N3aXRjaERlZmF1bHQuY3RvclBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXG4gICAgeyB0eXBlOiBWaWV3Q29udGFpbmVyUmVmLCB9LFxuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIH0sXG4gICAgeyB0eXBlOiBOZ1N3aXRjaCwgZGVjb3JhdG9yczogW3sgdHlwZTogSG9zdCB9LF0gfSxcbl07IH07XG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG4vKipcbiAqIFxcQG5nTW9kdWxlIENvbW1vbk1vZHVsZVxuICpcbiAqIFxcQHdoYXRJdERvZXMgQWRkcyAvIHJlbW92ZXMgRE9NIHN1Yi10cmVlcyBiYXNlZCBvbiBhIG51bWVyaWMgdmFsdWUuIFRhaWxvcmVkIGZvciBwbHVyYWxpemF0aW9uLlxuICpcbiAqIFxcQGhvd1RvVXNlXG4gKiBgYGBcbiAqIDxzb21lLWVsZW1lbnQgW25nUGx1cmFsXT1cInZhbHVlXCI+XG4gKiAgIDxuZy10ZW1wbGF0ZSBuZ1BsdXJhbENhc2U9XCI9MFwiPnRoZXJlIGlzIG5vdGhpbmc8L25nLXRlbXBsYXRlPlxuICogICA8bmctdGVtcGxhdGUgbmdQbHVyYWxDYXNlPVwiPTFcIj50aGVyZSBpcyBvbmU8L25nLXRlbXBsYXRlPlxuICogICA8bmctdGVtcGxhdGUgbmdQbHVyYWxDYXNlPVwiZmV3XCI+dGhlcmUgYXJlIGEgZmV3PC9uZy10ZW1wbGF0ZT5cbiAqIDwvc29tZS1lbGVtZW50PlxuICogYGBgXG4gKlxuICogXFxAZGVzY3JpcHRpb25cbiAqXG4gKiBEaXNwbGF5cyBET00gc3ViLXRyZWVzIHRoYXQgbWF0Y2ggdGhlIHN3aXRjaCBleHByZXNzaW9uIHZhbHVlLCBvciBmYWlsaW5nIHRoYXQsIERPTSBzdWItdHJlZXNcbiAqIHRoYXQgbWF0Y2ggdGhlIHN3aXRjaCBleHByZXNzaW9uJ3MgcGx1cmFsaXphdGlvbiBjYXRlZ29yeS5cbiAqXG4gKiBUbyB1c2UgdGhpcyBkaXJlY3RpdmUgeW91IG11c3QgcHJvdmlkZSBhIGNvbnRhaW5lciBlbGVtZW50IHRoYXQgc2V0cyB0aGUgYFtuZ1BsdXJhbF1gIGF0dHJpYnV0ZVxuICogdG8gYSBzd2l0Y2ggZXhwcmVzc2lvbi4gSW5uZXIgZWxlbWVudHMgd2l0aCBhIGBbbmdQbHVyYWxDYXNlXWAgd2lsbCBkaXNwbGF5IGJhc2VkIG9uIHRoZWlyXG4gKiBleHByZXNzaW9uOlxuICogLSBpZiBgW25nUGx1cmFsQ2FzZV1gIGlzIHNldCB0byBhIHZhbHVlIHN0YXJ0aW5nIHdpdGggYD1gLCBpdCB3aWxsIG9ubHkgZGlzcGxheSBpZiB0aGUgdmFsdWVcbiAqICAgbWF0Y2hlcyB0aGUgc3dpdGNoIGV4cHJlc3Npb24gZXhhY3RseSxcbiAqIC0gb3RoZXJ3aXNlLCB0aGUgdmlldyB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBcImNhdGVnb3J5IG1hdGNoXCIsIGFuZCB3aWxsIG9ubHkgZGlzcGxheSBpZiBleGFjdFxuICogICB2YWx1ZSBtYXRjaGVzIGFyZW4ndCBmb3VuZCBhbmQgdGhlIHZhbHVlIG1hcHMgdG8gaXRzIGNhdGVnb3J5IGZvciB0aGUgZGVmaW5lZCBsb2NhbGUuXG4gKlxuICogU2VlIGh0dHA6Ly9jbGRyLnVuaWNvZGUub3JnL2luZGV4L2NsZHItc3BlYy9wbHVyYWwtcnVsZXNcbiAqXG4gKiBcXEBleHBlcmltZW50YWxcbiAqL1xudmFyIE5nUGx1cmFsID0gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IF9sb2NhbGl6YXRpb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBOZ1BsdXJhbChfbG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbiA9IF9sb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuX2Nhc2VWaWV3cyA9IHt9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTmdQbHVyYWwucHJvdG90eXBlLCBcIm5nUGx1cmFsXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7P30gdmFsdWVcbiAgICAgICAgICogQHJldHVybiB7P31cbiAgICAgICAgICovXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9zd2l0Y2hWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmlldygpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHZhbHVlXG4gICAgICogQHBhcmFtIHs/fSBzd2l0Y2hWaWV3XG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBOZ1BsdXJhbC5wcm90b3R5cGUuYWRkQ2FzZSA9IGZ1bmN0aW9uICh2YWx1ZSwgc3dpdGNoVmlldykgeyB0aGlzLl9jYXNlVmlld3NbdmFsdWVdID0gc3dpdGNoVmlldzsgfTtcbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIE5nUGx1cmFsLnByb3RvdHlwZS5fdXBkYXRlVmlldyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fY2xlYXJWaWV3cygpO1xuICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBjYXNlcyA9IE9iamVjdC5rZXlzKHRoaXMuX2Nhc2VWaWV3cyk7XG4gICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIGtleSA9IGdldFBsdXJhbENhdGVnb3J5KHRoaXMuX3N3aXRjaFZhbHVlLCBjYXNlcywgdGhpcy5fbG9jYWxpemF0aW9uKTtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGVWaWV3KHRoaXMuX2Nhc2VWaWV3c1trZXldKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTmdQbHVyYWwucHJvdG90eXBlLl9jbGVhclZpZXdzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlVmlldylcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVZpZXcuZGVzdHJveSgpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSB2aWV3XG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBOZ1BsdXJhbC5wcm90b3R5cGUuX2FjdGl2YXRlVmlldyA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIGlmICh2aWV3KSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVWaWV3ID0gdmlldztcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVZpZXcuY3JlYXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBOZ1BsdXJhbDtcbn0oKSk7XG5OZ1BsdXJhbC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbeyBzZWxlY3RvcjogJ1tuZ1BsdXJhbF0nIH0sXSB9LFxuXTtcbi8qKlxuICogQG5vY29sbGFwc2VcbiAqL1xuTmdQbHVyYWwuY3RvclBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXG4gICAgeyB0eXBlOiBOZ0xvY2FsaXphdGlvbiwgfSxcbl07IH07XG5OZ1BsdXJhbC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICAnbmdQbHVyYWwnOiBbeyB0eXBlOiBJbnB1dCB9LF0sXG59O1xuLyoqXG4gKiBcXEBuZ01vZHVsZSBDb21tb25Nb2R1bGVcbiAqXG4gKiBcXEB3aGF0SXREb2VzIENyZWF0ZXMgYSB2aWV3IHRoYXQgd2lsbCBiZSBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIHBhcmVudCB7XFxAbGluayBOZ1BsdXJhbH0gd2hlbiB0aGVcbiAqICAgICAgICAgICAgIGdpdmVuIGV4cHJlc3Npb24gbWF0Y2hlcyB0aGUgcGx1cmFsIGV4cHJlc3Npb24gYWNjb3JkaW5nIHRvIENMRFIgcnVsZXMuXG4gKlxuICogXFxAaG93VG9Vc2VcbiAqIGBgYFxuICogPHNvbWUtZWxlbWVudCBbbmdQbHVyYWxdPVwidmFsdWVcIj5cbiAqICAgPG5nLXRlbXBsYXRlIG5nUGx1cmFsQ2FzZT1cIj0wXCI+Li4uPC9uZy10ZW1wbGF0ZT5cbiAqICAgPG5nLXRlbXBsYXRlIG5nUGx1cmFsQ2FzZT1cIm90aGVyXCI+Li4uPC9uZy10ZW1wbGF0ZT5cbiAqIDwvc29tZS1lbGVtZW50PlxuICogYGBgXG4gKlxuICogU2VlIHtcXEBsaW5rIE5nUGx1cmFsfSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlLlxuICpcbiAqIFxcQGV4cGVyaW1lbnRhbFxuICovXG52YXIgTmdQbHVyYWxDYXNlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHZhbHVlXG4gICAgICogQHBhcmFtIHs/fSB0ZW1wbGF0ZVxuICAgICAqIEBwYXJhbSB7P30gdmlld0NvbnRhaW5lclxuICAgICAqIEBwYXJhbSB7P30gbmdQbHVyYWxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBOZ1BsdXJhbENhc2UodmFsdWUsIHRlbXBsYXRlLCB2aWV3Q29udGFpbmVyLCBuZ1BsdXJhbCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHZhciBpc0FOdW1iZXIgPSAhaXNOYU4oTnVtYmVyKHZhbHVlKSk7XG4gICAgICAgIG5nUGx1cmFsLmFkZENhc2UoaXNBTnVtYmVyID8gXCI9XCIgKyB2YWx1ZSA6IHZhbHVlLCBuZXcgU3dpdGNoVmlldyh2aWV3Q29udGFpbmVyLCB0ZW1wbGF0ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gTmdQbHVyYWxDYXNlO1xufSgpKTtcbk5nUGx1cmFsQ2FzZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbeyBzZWxlY3RvcjogJ1tuZ1BsdXJhbENhc2VdJyB9LF0gfSxcbl07XG4vKipcbiAqIEBub2NvbGxhcHNlXG4gKi9cbk5nUGx1cmFsQ2FzZS5jdG9yUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtcbiAgICB7IHR5cGU6IHVuZGVmaW5lZCwgZGVjb3JhdG9yczogW3sgdHlwZTogQXR0cmlidXRlLCBhcmdzOiBbJ25nUGx1cmFsQ2FzZScsXSB9LF0gfSxcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCB9LFxuICAgIHsgdHlwZTogVmlld0NvbnRhaW5lclJlZiwgfSxcbiAgICB7IHR5cGU6IE5nUGx1cmFsLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBIb3N0IH0sXSB9LFxuXTsgfTtcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8qKlxuICogXFxAbmdNb2R1bGUgQ29tbW9uTW9kdWxlXG4gKlxuICogXFxAd2hhdEl0RG9lcyBVcGRhdGUgYW4gSFRNTCBlbGVtZW50IHN0eWxlcy5cbiAqXG4gKiBcXEBob3dUb1VzZVxuICogYGBgXG4gKiA8c29tZS1lbGVtZW50IFtuZ1N0eWxlXT1cInsnZm9udC1zdHlsZSc6IHN0eWxlRXhwfVwiPi4uLjwvc29tZS1lbGVtZW50PlxuICpcbiAqIDxzb21lLWVsZW1lbnQgW25nU3R5bGVdPVwieydtYXgtd2lkdGgucHgnOiB3aWR0aEV4cH1cIj4uLi48L3NvbWUtZWxlbWVudD5cbiAqXG4gKiA8c29tZS1lbGVtZW50IFtuZ1N0eWxlXT1cIm9iakV4cFwiPi4uLjwvc29tZS1lbGVtZW50PlxuICogYGBgXG4gKlxuICogXFxAZGVzY3JpcHRpb25cbiAqXG4gKiBUaGUgc3R5bGVzIGFyZSB1cGRhdGVkIGFjY29yZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbjpcbiAqIC0ga2V5cyBhcmUgc3R5bGUgbmFtZXMgd2l0aCBhbiBvcHRpb25hbCBgLjx1bml0PmAgc3VmZml4IChpZSAndG9wLnB4JywgJ2ZvbnQtc3R5bGUuZW0nKSxcbiAqIC0gdmFsdWVzIGFyZSB0aGUgdmFsdWVzIGFzc2lnbmVkIHRvIHRob3NlIHByb3BlcnRpZXMgKGV4cHJlc3NlZCBpbiB0aGUgZ2l2ZW4gdW5pdCkuXG4gKlxuICogXFxAc3RhYmxlXG4gKi9cbnZhciBOZ1N0eWxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IF9kaWZmZXJzXG4gICAgICogQHBhcmFtIHs/fSBfbmdFbFxuICAgICAqIEBwYXJhbSB7P30gX3JlbmRlcmVyXG4gICAgICovXG4gICAgZnVuY3Rpb24gTmdTdHlsZShfZGlmZmVycywgX25nRWwsIF9yZW5kZXJlcikge1xuICAgICAgICB0aGlzLl9kaWZmZXJzID0gX2RpZmZlcnM7XG4gICAgICAgIHRoaXMuX25nRWwgPSBfbmdFbDtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIgPSBfcmVuZGVyZXI7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOZ1N0eWxlLnByb3RvdHlwZSwgXCJuZ1N0eWxlXCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7P30gdlxuICAgICAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAgICAgKi9cbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgdGhpcy5fbmdTdHlsZSA9IHY7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RpZmZlciAmJiB2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlmZmVyID0gdGhpcy5fZGlmZmVycy5maW5kKHYpLmNyZWF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIE5nU3R5bGUucHJvdG90eXBlLm5nRG9DaGVjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RpZmZlcikge1xuICAgICAgICAgICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gY2hhbmdlcyA9IHRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nU3R5bGUpO1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseUNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gY2hhbmdlc1xuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgTmdTdHlsZS5wcm90b3R5cGUuX2FwcGx5Q2hhbmdlcyA9IGZ1bmN0aW9uIChjaGFuZ2VzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGNoYW5nZXMuZm9yRWFjaFJlbW92ZWRJdGVtKGZ1bmN0aW9uIChyZWNvcmQpIHsgcmV0dXJuIF90aGlzLl9zZXRTdHlsZShyZWNvcmQua2V5LCBudWxsKTsgfSk7XG4gICAgICAgIGNoYW5nZXMuZm9yRWFjaEFkZGVkSXRlbShmdW5jdGlvbiAocmVjb3JkKSB7IHJldHVybiBfdGhpcy5fc2V0U3R5bGUocmVjb3JkLmtleSwgcmVjb3JkLmN1cnJlbnRWYWx1ZSk7IH0pO1xuICAgICAgICBjaGFuZ2VzLmZvckVhY2hDaGFuZ2VkSXRlbShmdW5jdGlvbiAocmVjb3JkKSB7IHJldHVybiBfdGhpcy5fc2V0U3R5bGUocmVjb3JkLmtleSwgcmVjb3JkLmN1cnJlbnRWYWx1ZSk7IH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBuYW1lQW5kVW5pdFxuICAgICAqIEBwYXJhbSB7P30gdmFsdWVcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIE5nU3R5bGUucHJvdG90eXBlLl9zZXRTdHlsZSA9IGZ1bmN0aW9uIChuYW1lQW5kVW5pdCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIF9hID0gbmFtZUFuZFVuaXQuc3BsaXQoJy4nKSwgbmFtZSA9IF9hWzBdLCB1bml0ID0gX2FbMV07XG4gICAgICAgIHZhbHVlID0gdmFsdWUgIT0gbnVsbCAmJiB1bml0ID8gXCJcIiArIHZhbHVlICsgdW5pdCA6IHZhbHVlO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRFbGVtZW50U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LCBuYW1lLCAvKiogQHR5cGUgez99ICovICh2YWx1ZSkpO1xuICAgIH07XG4gICAgcmV0dXJuIE5nU3R5bGU7XG59KCkpO1xuTmdTdHlsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbeyBzZWxlY3RvcjogJ1tuZ1N0eWxlXScgfSxdIH0sXG5dO1xuLyoqXG4gKiBAbm9jb2xsYXBzZVxuICovXG5OZ1N0eWxlLmN0b3JQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW1xuICAgIHsgdHlwZTogS2V5VmFsdWVEaWZmZXJzLCB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiwgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyLCB9LFxuXTsgfTtcbk5nU3R5bGUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgJ25nU3R5bGUnOiBbeyB0eXBlOiBJbnB1dCB9LF0sXG59O1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuLyoqXG4gKiBcXEBuZ01vZHVsZSBDb21tb25Nb2R1bGVcbiAqXG4gKiBcXEB3aGF0SXREb2VzIEluc2VydHMgYW4gZW1iZWRkZWQgdmlldyBmcm9tIGEgcHJlcGFyZWQgYFRlbXBsYXRlUmVmYFxuICpcbiAqIFxcQGhvd1RvVXNlXG4gKiBgYGBcbiAqIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVJlZkV4cDsgY29udGV4dDogY29udGV4dEV4cFwiPjwvbmctY29udGFpbmVyPlxuICogYGBgXG4gKlxuICogXFxAZGVzY3JpcHRpb25cbiAqXG4gKiBZb3UgY2FuIGF0dGFjaCBhIGNvbnRleHQgb2JqZWN0IHRvIHRoZSBgRW1iZWRkZWRWaWV3UmVmYCBieSBzZXR0aW5nIGBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdYC5cbiAqIGBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdYCBzaG91bGQgYmUgYW4gb2JqZWN0LCB0aGUgb2JqZWN0J3Mga2V5cyB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgYmluZGluZ1xuICogYnkgdGhlIGxvY2FsIHRlbXBsYXRlIGBsZXRgIGRlY2xhcmF0aW9ucy5cbiAqXG4gKiBOb3RlOiB1c2luZyB0aGUga2V5IGAkaW1wbGljaXRgIGluIHRoZSBjb250ZXh0IG9iamVjdCB3aWxsIHNldCBpdCdzIHZhbHVlIGFzIGRlZmF1bHQuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIHtcXEBleGFtcGxlIGNvbW1vbi9uZ1RlbXBsYXRlT3V0bGV0L3RzL21vZHVsZS50cyByZWdpb249J05nVGVtcGxhdGVPdXRsZXQnfVxuICpcbiAqIFxcQGV4cGVyaW1lbnRhbFxuICovXG52YXIgTmdUZW1wbGF0ZU91dGxldCA9IChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBfdmlld0NvbnRhaW5lclJlZlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIE5nVGVtcGxhdGVPdXRsZXQoX3ZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZiA9IF92aWV3Q29udGFpbmVyUmVmO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTmdUZW1wbGF0ZU91dGxldC5wcm90b3R5cGUsIFwibmdPdXRsZXRDb250ZXh0XCIsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXByZWNhdGVkIHY0LjAuMCAtIFJlbmFtZWQgdG8gbmdUZW1wbGF0ZU91dGxldENvbnRleHQuXG4gICAgICAgICAqIEBwYXJhbSB7P30gY29udGV4dFxuICAgICAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAgICAgKi9cbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoY29udGV4dCkgeyB0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0ID0gY29udGV4dDsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBjaGFuZ2VzXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBOZ1RlbXBsYXRlT3V0bGV0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcyA9IGZ1bmN0aW9uIChjaGFuZ2VzKSB7XG4gICAgICAgIGlmICh0aGlzLl92aWV3UmVmKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLnJlbW92ZSh0aGlzLl92aWV3Q29udGFpbmVyUmVmLmluZGV4T2YodGhpcy5fdmlld1JlZikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm5nVGVtcGxhdGVPdXRsZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLm5nVGVtcGxhdGVPdXRsZXQsIHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gTmdUZW1wbGF0ZU91dGxldDtcbn0oKSk7XG5OZ1RlbXBsYXRlT3V0bGV0LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7IHNlbGVjdG9yOiAnW25nVGVtcGxhdGVPdXRsZXRdJyB9LF0gfSxcbl07XG4vKipcbiAqIEBub2NvbGxhcHNlXG4gKi9cbk5nVGVtcGxhdGVPdXRsZXQuY3RvclBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXG4gICAgeyB0eXBlOiBWaWV3Q29udGFpbmVyUmVmLCB9LFxuXTsgfTtcbk5nVGVtcGxhdGVPdXRsZXQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgJ25nVGVtcGxhdGVPdXRsZXRDb250ZXh0JzogW3sgdHlwZTogSW5wdXQgfSxdLFxuICAgICduZ1RlbXBsYXRlT3V0bGV0JzogW3sgdHlwZTogSW5wdXQgfSxdLFxuICAgICduZ091dGxldENvbnRleHQnOiBbeyB0eXBlOiBJbnB1dCB9LF0sXG59O1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgQW5ndWxhciBkaXJlY3RpdmVzIHRoYXQgYXJlIGxpa2VseSB0byBiZSB1c2VkIGluIGVhY2ggYW5kIGV2ZXJ5IEFuZ3VsYXJcbiAqIGFwcGxpY2F0aW9uLlxuICovXG52YXIgQ09NTU9OX0RJUkVDVElWRVMgPSBbXG4gICAgTmdDbGFzcyxcbiAgICBOZ0NvbXBvbmVudE91dGxldCxcbiAgICBOZ0Zvck9mLFxuICAgIE5nSWYsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBOZ1N0eWxlLFxuICAgIE5nU3dpdGNoLFxuICAgIE5nU3dpdGNoQ2FzZSxcbiAgICBOZ1N3aXRjaERlZmF1bHQsXG4gICAgTmdQbHVyYWwsXG4gICAgTmdQbHVyYWxDYXNlLFxuXTtcbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIGRlcHJlY2F0ZWQgZGlyZWN0aXZlcyB0aGF0IGFyZSBubyBsb25nZXIgcGFydCBvZiB0aGUgY29yZSBtb2R1bGUuXG4gKi9cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8qKlxuICogQHBhcmFtIHs/fSB0eXBlXG4gKiBAcGFyYW0gez99IHZhbHVlXG4gKiBAcmV0dXJuIHs/fVxuICovXG5mdW5jdGlvbiBpbnZhbGlkUGlwZUFyZ3VtZW50RXJyb3IodHlwZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gRXJyb3IoXCJJbnZhbGlkUGlwZUFyZ3VtZW50OiAnXCIgKyB2YWx1ZSArIFwiJyBmb3IgcGlwZSAnXCIgKyDJtXN0cmluZ2lmeSh0eXBlKSArIFwiJ1wiKTtcbn1cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbnZhciBPYnNlcnZhYmxlU3RyYXRlZ3kgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGVTdHJhdGVneSgpIHtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBhc3luY1xuICAgICAqIEBwYXJhbSB7P30gdXBkYXRlTGF0ZXN0VmFsdWVcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIE9ic2VydmFibGVTdHJhdGVneS5wcm90b3R5cGUuY3JlYXRlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKGFzeW5jLCB1cGRhdGVMYXRlc3RWYWx1ZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMuc3Vic2NyaWJlKHsgbmV4dDogdXBkYXRlTGF0ZXN0VmFsdWUsIGVycm9yOiBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9IH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBzdWJzY3JpcHRpb25cbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIE9ic2VydmFibGVTdHJhdGVneS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBzdWJzY3JpcHRpb25cbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIE9ic2VydmFibGVTdHJhdGVneS5wcm90b3R5cGUub25EZXN0cm95ID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikgeyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZVN0cmF0ZWd5O1xufSgpKTtcbnZhciBQcm9taXNlU3RyYXRlZ3kgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb21pc2VTdHJhdGVneSgpIHtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBhc3luY1xuICAgICAqIEBwYXJhbSB7P30gdXBkYXRlTGF0ZXN0VmFsdWVcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIFByb21pc2VTdHJhdGVneS5wcm90b3R5cGUuY3JlYXRlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKGFzeW5jLCB1cGRhdGVMYXRlc3RWYWx1ZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMudGhlbih1cGRhdGVMYXRlc3RWYWx1ZSwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHN1YnNjcmlwdGlvblxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgUHJvbWlzZVN0cmF0ZWd5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikgeyB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gc3Vic2NyaXB0aW9uXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBQcm9taXNlU3RyYXRlZ3kucHJvdG90eXBlLm9uRGVzdHJveSA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHsgfTtcbiAgICByZXR1cm4gUHJvbWlzZVN0cmF0ZWd5O1xufSgpKTtcbnZhciBfcHJvbWlzZVN0cmF0ZWd5ID0gbmV3IFByb21pc2VTdHJhdGVneSgpO1xudmFyIF9vYnNlcnZhYmxlU3RyYXRlZ3kgPSBuZXcgT2JzZXJ2YWJsZVN0cmF0ZWd5KCk7XG4vKipcbiAqIFxcQG5nTW9kdWxlIENvbW1vbk1vZHVsZVxuICogXFxAd2hhdEl0RG9lcyBVbndyYXBzIGEgdmFsdWUgZnJvbSBhbiBhc3luY2hyb25vdXMgcHJpbWl0aXZlLlxuICogXFxAaG93VG9Vc2UgYG9ic2VydmFibGVfb3JfcHJvbWlzZV9leHByZXNzaW9uIHwgYXN5bmNgXG4gKiBcXEBkZXNjcmlwdGlvblxuICogVGhlIGBhc3luY2AgcGlwZSBzdWJzY3JpYmVzIHRvIGFuIGBPYnNlcnZhYmxlYCBvciBgUHJvbWlzZWAgYW5kIHJldHVybnMgdGhlIGxhdGVzdCB2YWx1ZSBpdCBoYXNcbiAqIGVtaXR0ZWQuIFdoZW4gYSBuZXcgdmFsdWUgaXMgZW1pdHRlZCwgdGhlIGBhc3luY2AgcGlwZSBtYXJrcyB0aGUgY29tcG9uZW50IHRvIGJlIGNoZWNrZWQgZm9yXG4gKiBjaGFuZ2VzLiBXaGVuIHRoZSBjb21wb25lbnQgZ2V0cyBkZXN0cm95ZWQsIHRoZSBgYXN5bmNgIHBpcGUgdW5zdWJzY3JpYmVzIGF1dG9tYXRpY2FsbHkgdG8gYXZvaWRcbiAqIHBvdGVudGlhbCBtZW1vcnkgbGVha3MuXG4gKlxuICpcbiAqICMjIEV4YW1wbGVzXG4gKlxuICogVGhpcyBleGFtcGxlIGJpbmRzIGEgYFByb21pc2VgIHRvIHRoZSB2aWV3LiBDbGlja2luZyB0aGUgYFJlc29sdmVgIGJ1dHRvbiByZXNvbHZlcyB0aGVcbiAqIHByb21pc2UuXG4gKlxuICoge1xcQGV4YW1wbGUgY29tbW9uL3BpcGVzL3RzL2FzeW5jX3BpcGUudHMgcmVnaW9uPSdBc3luY1BpcGVQcm9taXNlJ31cbiAqXG4gKiBJdCdzIGFsc28gcG9zc2libGUgdG8gdXNlIGBhc3luY2Agd2l0aCBPYnNlcnZhYmxlcy4gVGhlIGV4YW1wbGUgYmVsb3cgYmluZHMgdGhlIGB0aW1lYCBPYnNlcnZhYmxlXG4gKiB0byB0aGUgdmlldy4gVGhlIE9ic2VydmFibGUgY29udGludW91c2x5IHVwZGF0ZXMgdGhlIHZpZXcgd2l0aCB0aGUgY3VycmVudCB0aW1lLlxuICpcbiAqIHtcXEBleGFtcGxlIGNvbW1vbi9waXBlcy90cy9hc3luY19waXBlLnRzIHJlZ2lvbj0nQXN5bmNQaXBlT2JzZXJ2YWJsZSd9XG4gKlxuICogXFxAc3RhYmxlXG4gKi9cbnZhciBBc3luY1BpcGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gX3JlZlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIEFzeW5jUGlwZShfcmVmKSB7XG4gICAgICAgIHRoaXMuX3JlZiA9IF9yZWY7XG4gICAgICAgIHRoaXMuX2xhdGVzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuX29iaiA9IG51bGw7XG4gICAgICAgIHRoaXMuX3N0cmF0ZWd5ID0gKChudWxsKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgQXN5bmNQaXBlLnByb3RvdHlwZS5uZ09uRGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IG9ialxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgQXN5bmNQaXBlLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmICghdGhpcy5fb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlKG9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlID0gdGhpcy5fbGF0ZXN0VmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbGF0ZXN0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iaiAhPT0gdGhpcy5fb2JqKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNwb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0oLyoqIEB0eXBlIHs/fSAqLyAob2JqKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2xhdGVzdFZhbHVlID09PSB0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlID0gdGhpcy5fbGF0ZXN0VmFsdWU7XG4gICAgICAgIHJldHVybiBXcmFwcGVkVmFsdWUud3JhcCh0aGlzLl9sYXRlc3RWYWx1ZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IG9ialxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgQXN5bmNQaXBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLl9vYmogPSBvYmo7XG4gICAgICAgIHRoaXMuX3N0cmF0ZWd5ID0gdGhpcy5fc2VsZWN0U3RyYXRlZ3kob2JqKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gdGhpcy5fc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBfdGhpcy5fdXBkYXRlTGF0ZXN0VmFsdWUob2JqLCB2YWx1ZSk7IH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBvYmpcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIEFzeW5jUGlwZS5wcm90b3R5cGUuX3NlbGVjdFN0cmF0ZWd5ID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoybVpc1Byb21pc2Uob2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9wcm9taXNlU3RyYXRlZ3k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKMm1aXNPYnNlcnZhYmxlKG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVN0cmF0ZWd5O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGludmFsaWRQaXBlQXJndW1lbnRFcnJvcihBc3luY1BpcGUsIG9iaik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIEFzeW5jUGlwZS5wcm90b3R5cGUuX2Rpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3N0cmF0ZWd5LmRpc3Bvc2UoLyoqIEB0eXBlIHs/fSAqLyAoKHRoaXMuX3N1YnNjcmlwdGlvbikpKTtcbiAgICAgICAgdGhpcy5fbGF0ZXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5fb2JqID0gbnVsbDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gYXN5bmNcbiAgICAgKiBAcGFyYW0gez99IHZhbHVlXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBBc3luY1BpcGUucHJvdG90eXBlLl91cGRhdGVMYXRlc3RWYWx1ZSA9IGZ1bmN0aW9uIChhc3luYywgdmFsdWUpIHtcbiAgICAgICAgaWYgKGFzeW5jID09PSB0aGlzLl9vYmopIHtcbiAgICAgICAgICAgIHRoaXMuX2xhdGVzdFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9yZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1BpcGU7XG59KCkpO1xuQXN5bmNQaXBlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBQaXBlLCBhcmdzOiBbeyBuYW1lOiAnYXN5bmMnLCBwdXJlOiBmYWxzZSB9LF0gfSxcbl07XG4vKipcbiAqIEBub2NvbGxhcHNlXG4gKi9cbkFzeW5jUGlwZS5jdG9yUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmLCB9LFxuXTsgfTtcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8qKlxuICogVHJhbnNmb3JtcyB0ZXh0IHRvIGxvd2VyY2FzZS5cbiAqXG4gKiB7XFxAZXhhbXBsZSAgY29tbW9uL3BpcGVzL3RzL2xvd2VydXBwZXJfcGlwZS50cyByZWdpb249J0xvd2VyVXBwZXJQaXBlJyB9XG4gKlxuICogXFxAc3RhYmxlXG4gKi9cbnZhciBMb3dlckNhc2VQaXBlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBMb3dlckNhc2VQaXBlKCkge1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHZhbHVlXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBMb3dlckNhc2VQaXBlLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IGludmFsaWRQaXBlQXJndW1lbnRFcnJvcihMb3dlckNhc2VQaXBlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgfTtcbiAgICByZXR1cm4gTG93ZXJDYXNlUGlwZTtcbn0oKSk7XG5Mb3dlckNhc2VQaXBlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBQaXBlLCBhcmdzOiBbeyBuYW1lOiAnbG93ZXJjYXNlJyB9LF0gfSxcbl07XG4vKipcbiAqIEBub2NvbGxhcHNlXG4gKi9cbkxvd2VyQ2FzZVBpcGUuY3RvclBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXTsgfTtcbi8qKlxuICogSGVscGVyIG1ldGhvZCB0byB0cmFuc2Zvcm0gYSBzaW5nbGUgd29yZCB0byB0aXRsZWNhc2UuXG4gKlxuICogXFxAc3RhYmxlXG4gKiBAcGFyYW0gez99IHdvcmRcbiAqIEByZXR1cm4gez99XG4gKi9cbmZ1bmN0aW9uIHRpdGxlQ2FzZVdvcmQod29yZCkge1xuICAgIGlmICghd29yZClcbiAgICAgICAgcmV0dXJuIHdvcmQ7XG4gICAgcmV0dXJuIHdvcmRbMF0udG9VcHBlckNhc2UoKSArIHdvcmQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7XG59XG4vKipcbiAqIFRyYW5zZm9ybXMgdGV4dCB0byB0aXRsZWNhc2UuXG4gKlxuICogXFxAc3RhYmxlXG4gKi9cbnZhciBUaXRsZUNhc2VQaXBlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUaXRsZUNhc2VQaXBlKCkge1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHZhbHVlXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBUaXRsZUNhc2VQaXBlLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IGludmFsaWRQaXBlQXJndW1lbnRFcnJvcihUaXRsZUNhc2VQaXBlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlLnNwbGl0KC9cXGIvZykubWFwKGZ1bmN0aW9uICh3b3JkKSB7IHJldHVybiB0aXRsZUNhc2VXb3JkKHdvcmQpOyB9KS5qb2luKCcnKTtcbiAgICB9O1xuICAgIHJldHVybiBUaXRsZUNhc2VQaXBlO1xufSgpKTtcblRpdGxlQ2FzZVBpcGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IFBpcGUsIGFyZ3M6IFt7IG5hbWU6ICd0aXRsZWNhc2UnIH0sXSB9LFxuXTtcbi8qKlxuICogQG5vY29sbGFwc2VcbiAqL1xuVGl0bGVDYXNlUGlwZS5jdG9yUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtdOyB9O1xuLyoqXG4gKiBUcmFuc2Zvcm1zIHRleHQgdG8gdXBwZXJjYXNlLlxuICpcbiAqIFxcQHN0YWJsZVxuICovXG52YXIgVXBwZXJDYXNlUGlwZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVXBwZXJDYXNlUGlwZSgpIHtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSB2YWx1ZVxuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgVXBwZXJDYXNlUGlwZS5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBpbnZhbGlkUGlwZUFyZ3VtZW50RXJyb3IoVXBwZXJDYXNlUGlwZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFVwcGVyQ2FzZVBpcGU7XG59KCkpO1xuVXBwZXJDYXNlUGlwZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogUGlwZSwgYXJnczogW3sgbmFtZTogJ3VwcGVyY2FzZScgfSxdIH0sXG5dO1xuLyoqXG4gKiBAbm9jb2xsYXBzZVxuICovXG5VcHBlckNhc2VQaXBlLmN0b3JQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW107IH07XG52YXIgTnVtYmVyRm9ybWF0U3R5bGUgPSB7fTtcbk51bWJlckZvcm1hdFN0eWxlLkRlY2ltYWwgPSAwO1xuTnVtYmVyRm9ybWF0U3R5bGUuUGVyY2VudCA9IDE7XG5OdW1iZXJGb3JtYXRTdHlsZS5DdXJyZW5jeSA9IDI7XG5OdW1iZXJGb3JtYXRTdHlsZVtOdW1iZXJGb3JtYXRTdHlsZS5EZWNpbWFsXSA9IFwiRGVjaW1hbFwiO1xuTnVtYmVyRm9ybWF0U3R5bGVbTnVtYmVyRm9ybWF0U3R5bGUuUGVyY2VudF0gPSBcIlBlcmNlbnRcIjtcbk51bWJlckZvcm1hdFN0eWxlW051bWJlckZvcm1hdFN0eWxlLkN1cnJlbmN5XSA9IFwiQ3VycmVuY3lcIjtcbnZhciBOdW1iZXJGb3JtYXR0ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE51bWJlckZvcm1hdHRlcigpIHtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBudW1cbiAgICAgKiBAcGFyYW0gez99IGxvY2FsZVxuICAgICAqIEBwYXJhbSB7P30gc3R5bGVcbiAgICAgKiBAcGFyYW0gez89fSBvcHRzXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBOdW1iZXJGb3JtYXR0ZXIuZm9ybWF0ID0gZnVuY3Rpb24gKG51bSwgbG9jYWxlLCBzdHlsZSwgb3B0cykge1xuICAgICAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7IG9wdHMgPSB7fTsgfVxuICAgICAgICB2YXIgbWluaW11bUludGVnZXJEaWdpdHMgPSBvcHRzLm1pbmltdW1JbnRlZ2VyRGlnaXRzLCBtaW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBvcHRzLm1pbmltdW1GcmFjdGlvbkRpZ2l0cywgbWF4aW11bUZyYWN0aW9uRGlnaXRzID0gb3B0cy5tYXhpbXVtRnJhY3Rpb25EaWdpdHMsIGN1cnJlbmN5ID0gb3B0cy5jdXJyZW5jeSwgX2EgPSBvcHRzLmN1cnJlbmN5QXNTeW1ib2wsIGN1cnJlbmN5QXNTeW1ib2wgPSBfYSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYTtcbiAgICAgICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG1pbmltdW1JbnRlZ2VyRGlnaXRzOiBtaW5pbXVtSW50ZWdlckRpZ2l0cyxcbiAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbWluaW11bUZyYWN0aW9uRGlnaXRzLFxuICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBtYXhpbXVtRnJhY3Rpb25EaWdpdHMsXG4gICAgICAgICAgICBzdHlsZTogTnVtYmVyRm9ybWF0U3R5bGVbc3R5bGVdLnRvTG93ZXJDYXNlKClcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHN0eWxlID09IE51bWJlckZvcm1hdFN0eWxlLkN1cnJlbmN5KSB7XG4gICAgICAgICAgICBvcHRpb25zLmN1cnJlbmN5ID0gdHlwZW9mIGN1cnJlbmN5ID09ICdzdHJpbmcnID8gY3VycmVuY3kgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBvcHRpb25zLmN1cnJlbmN5RGlzcGxheSA9IGN1cnJlbmN5QXNTeW1ib2wgPyAnc3ltYm9sJyA6ICdjb2RlJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZSwgb3B0aW9ucykuZm9ybWF0KG51bSk7XG4gICAgfTtcbiAgICByZXR1cm4gTnVtYmVyRm9ybWF0dGVyO1xufSgpKTtcbnZhciBEQVRFX0ZPUk1BVFNfU1BMSVQgPSAvKCg/OlteeU1MZEhobXNhelpFd0dqSiddKyl8KD86Jyg/OlteJ118JycpKicpfCg/OkUrfHkrfE0rfEwrfGQrfEgrfGgrfEorfGorfG0rfHMrfGF8enxafEcrfHcrKSkoLiopLztcbnZhciBQQVRURVJOX0FMSUFTRVMgPSB7XG4gICAgLy8gS2V5cyBhcmUgcXVvdGVkIHNvIHRoZXkgZG8gbm90IGdldCByZW5hbWVkIGR1cmluZyBjbG9zdXJlIGNvbXBpbGF0aW9uLlxuICAgICd5TU1NZGptcyc6IGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShjb21iaW5lKFtcbiAgICAgICAgZGlnaXRDb25kaXRpb24oJ3llYXInLCAxKSxcbiAgICAgICAgbmFtZUNvbmRpdGlvbignbW9udGgnLCAzKSxcbiAgICAgICAgZGlnaXRDb25kaXRpb24oJ2RheScsIDEpLFxuICAgICAgICBkaWdpdENvbmRpdGlvbignaG91cicsIDEpLFxuICAgICAgICBkaWdpdENvbmRpdGlvbignbWludXRlJywgMSksXG4gICAgICAgIGRpZ2l0Q29uZGl0aW9uKCdzZWNvbmQnLCAxKSxcbiAgICBdKSksXG4gICAgJ3lNZGptJzogZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KGNvbWJpbmUoW1xuICAgICAgICBkaWdpdENvbmRpdGlvbigneWVhcicsIDEpLCBkaWdpdENvbmRpdGlvbignbW9udGgnLCAxKSwgZGlnaXRDb25kaXRpb24oJ2RheScsIDEpLFxuICAgICAgICBkaWdpdENvbmRpdGlvbignaG91cicsIDEpLCBkaWdpdENvbmRpdGlvbignbWludXRlJywgMSlcbiAgICBdKSksXG4gICAgJ3lNTU1NRUVFRWQnOiBkYXRlUGFydEdldHRlckZhY3RvcnkoY29tYmluZShbXG4gICAgICAgIGRpZ2l0Q29uZGl0aW9uKCd5ZWFyJywgMSksIG5hbWVDb25kaXRpb24oJ21vbnRoJywgNCksIG5hbWVDb25kaXRpb24oJ3dlZWtkYXknLCA0KSxcbiAgICAgICAgZGlnaXRDb25kaXRpb24oJ2RheScsIDEpXG4gICAgXSkpLFxuICAgICd5TU1NTWQnOiBkYXRlUGFydEdldHRlckZhY3RvcnkoY29tYmluZShbZGlnaXRDb25kaXRpb24oJ3llYXInLCAxKSwgbmFtZUNvbmRpdGlvbignbW9udGgnLCA0KSwgZGlnaXRDb25kaXRpb24oJ2RheScsIDEpXSkpLFxuICAgICd5TU1NZCc6IGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShjb21iaW5lKFtkaWdpdENvbmRpdGlvbigneWVhcicsIDEpLCBuYW1lQ29uZGl0aW9uKCdtb250aCcsIDMpLCBkaWdpdENvbmRpdGlvbignZGF5JywgMSldKSksXG4gICAgJ3lNZCc6IGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShjb21iaW5lKFtkaWdpdENvbmRpdGlvbigneWVhcicsIDEpLCBkaWdpdENvbmRpdGlvbignbW9udGgnLCAxKSwgZGlnaXRDb25kaXRpb24oJ2RheScsIDEpXSkpLFxuICAgICdqbXMnOiBkYXRlUGFydEdldHRlckZhY3RvcnkoY29tYmluZShbZGlnaXRDb25kaXRpb24oJ2hvdXInLCAxKSwgZGlnaXRDb25kaXRpb24oJ3NlY29uZCcsIDEpLCBkaWdpdENvbmRpdGlvbignbWludXRlJywgMSldKSksXG4gICAgJ2ptJzogZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KGNvbWJpbmUoW2RpZ2l0Q29uZGl0aW9uKCdob3VyJywgMSksIGRpZ2l0Q29uZGl0aW9uKCdtaW51dGUnLCAxKV0pKVxufTtcbnZhciBEQVRFX0ZPUk1BVFMgPSB7XG4gICAgLy8gS2V5cyBhcmUgcXVvdGVkIHNvIHRoZXkgZG8gbm90IGdldCByZW5hbWVkLlxuICAgICd5eXl5JzogZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KGRpZ2l0Q29uZGl0aW9uKCd5ZWFyJywgNCkpLFxuICAgICd5eSc6IGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShkaWdpdENvbmRpdGlvbigneWVhcicsIDIpKSxcbiAgICAneSc6IGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShkaWdpdENvbmRpdGlvbigneWVhcicsIDEpKSxcbiAgICAnTU1NTSc6IGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShuYW1lQ29uZGl0aW9uKCdtb250aCcsIDQpKSxcbiAgICAnTU1NJzogZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KG5hbWVDb25kaXRpb24oJ21vbnRoJywgMykpLFxuICAgICdNTSc6IGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShkaWdpdENvbmRpdGlvbignbW9udGgnLCAyKSksXG4gICAgJ00nOiBkYXRlUGFydEdldHRlckZhY3RvcnkoZGlnaXRDb25kaXRpb24oJ21vbnRoJywgMSkpLFxuICAgICdMTExMJzogZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KG5hbWVDb25kaXRpb24oJ21vbnRoJywgNCkpLFxuICAgICdMJzogZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KG5hbWVDb25kaXRpb24oJ21vbnRoJywgMSkpLFxuICAgICdkZCc6IGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShkaWdpdENvbmRpdGlvbignZGF5JywgMikpLFxuICAgICdkJzogZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KGRpZ2l0Q29uZGl0aW9uKCdkYXknLCAxKSksXG4gICAgJ0hIJzogZGlnaXRNb2RpZmllcihob3VyRXh0cmFjdG9yKGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShob3VyMTJNb2RpZnkoZGlnaXRDb25kaXRpb24oJ2hvdXInLCAyKSwgZmFsc2UpKSkpLFxuICAgICdIJzogaG91ckV4dHJhY3RvcihkYXRlUGFydEdldHRlckZhY3RvcnkoaG91cjEyTW9kaWZ5KGRpZ2l0Q29uZGl0aW9uKCdob3VyJywgMSksIGZhbHNlKSkpLFxuICAgICdoaCc6IGRpZ2l0TW9kaWZpZXIoaG91ckV4dHJhY3RvcihkYXRlUGFydEdldHRlckZhY3RvcnkoaG91cjEyTW9kaWZ5KGRpZ2l0Q29uZGl0aW9uKCdob3VyJywgMiksIHRydWUpKSkpLFxuICAgICdoJzogaG91ckV4dHJhY3RvcihkYXRlUGFydEdldHRlckZhY3RvcnkoaG91cjEyTW9kaWZ5KGRpZ2l0Q29uZGl0aW9uKCdob3VyJywgMSksIHRydWUpKSksXG4gICAgJ2pqJzogZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KGRpZ2l0Q29uZGl0aW9uKCdob3VyJywgMikpLFxuICAgICdqJzogZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KGRpZ2l0Q29uZGl0aW9uKCdob3VyJywgMSkpLFxuICAgICdtbSc6IGRpZ2l0TW9kaWZpZXIoZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KGRpZ2l0Q29uZGl0aW9uKCdtaW51dGUnLCAyKSkpLFxuICAgICdtJzogZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KGRpZ2l0Q29uZGl0aW9uKCdtaW51dGUnLCAxKSksXG4gICAgJ3NzJzogZGlnaXRNb2RpZmllcihkYXRlUGFydEdldHRlckZhY3RvcnkoZGlnaXRDb25kaXRpb24oJ3NlY29uZCcsIDIpKSksXG4gICAgJ3MnOiBkYXRlUGFydEdldHRlckZhY3RvcnkoZGlnaXRDb25kaXRpb24oJ3NlY29uZCcsIDEpKSxcbiAgICAvLyB3aGlsZSBJU08gODYwMSByZXF1aXJlcyBmcmFjdGlvbnMgdG8gYmUgcHJlZml4ZWQgd2l0aCBgLmAgb3IgYCxgXG4gICAgLy8gd2UgY2FuIGJlIGp1c3Qgc2FmZWx5IHJlbHkgb24gdXNpbmcgYHNzc2Agc2luY2Ugd2UgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgc2luZ2xlIG9yIHR3byBkaWdpdFxuICAgIC8vIGZyYWN0aW9uc1xuICAgICdzc3MnOiBkYXRlUGFydEdldHRlckZhY3RvcnkoZGlnaXRDb25kaXRpb24oJ3NlY29uZCcsIDMpKSxcbiAgICAnRUVFRSc6IGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShuYW1lQ29uZGl0aW9uKCd3ZWVrZGF5JywgNCkpLFxuICAgICdFRUUnOiBkYXRlUGFydEdldHRlckZhY3RvcnkobmFtZUNvbmRpdGlvbignd2Vla2RheScsIDMpKSxcbiAgICAnRUUnOiBkYXRlUGFydEdldHRlckZhY3RvcnkobmFtZUNvbmRpdGlvbignd2Vla2RheScsIDIpKSxcbiAgICAnRSc6IGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShuYW1lQ29uZGl0aW9uKCd3ZWVrZGF5JywgMSkpLFxuICAgICdhJzogaG91ckNsb2NrRXh0cmFjdG9yKGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShob3VyMTJNb2RpZnkoZGlnaXRDb25kaXRpb24oJ2hvdXInLCAxKSwgdHJ1ZSkpKSxcbiAgICAnWic6IHRpbWVab25lR2V0dGVyKCdzaG9ydCcpLFxuICAgICd6JzogdGltZVpvbmVHZXR0ZXIoJ2xvbmcnKSxcbiAgICAnd3cnOiBkYXRlUGFydEdldHRlckZhY3Rvcnkoe30pLFxuICAgIC8vIGZpcnN0IFRodXJzZGF5IG9mIHRoZSB5ZWFyLiBub3Qgc3VwcG9ydCA/XG4gICAgJ3cnOiBkYXRlUGFydEdldHRlckZhY3Rvcnkoe30pLFxuICAgIC8vIG9mIHRoZSB5ZWFyIG5vdCBzdXBwb3J0ID9cbiAgICAnRyc6IGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShuYW1lQ29uZGl0aW9uKCdlcmEnLCAxKSksXG4gICAgJ0dHJzogZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KG5hbWVDb25kaXRpb24oJ2VyYScsIDIpKSxcbiAgICAnR0dHJzogZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KG5hbWVDb25kaXRpb24oJ2VyYScsIDMpKSxcbiAgICAnR0dHRyc6IGRhdGVQYXJ0R2V0dGVyRmFjdG9yeShuYW1lQ29uZGl0aW9uKCdlcmEnLCA0KSlcbn07XG4vKipcbiAqIEBwYXJhbSB7P30gaW5uZXJcbiAqIEByZXR1cm4gez99XG4gKi9cbmZ1bmN0aW9uIGRpZ2l0TW9kaWZpZXIoaW5uZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkge1xuICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyByZXN1bHQgPSBpbm5lcihkYXRlLCBsb2NhbGUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PSAxID8gJzAnICsgcmVzdWx0IDogcmVzdWx0O1xuICAgIH07XG59XG4vKipcbiAqIEBwYXJhbSB7P30gaW5uZXJcbiAqIEByZXR1cm4gez99XG4gKi9cbmZ1bmN0aW9uIGhvdXJDbG9ja0V4dHJhY3Rvcihpbm5lcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7IHJldHVybiBpbm5lcihkYXRlLCBsb2NhbGUpLnNwbGl0KCcgJylbMV07IH07XG59XG4vKipcbiAqIEBwYXJhbSB7P30gaW5uZXJcbiAqIEByZXR1cm4gez99XG4gKi9cbmZ1bmN0aW9uIGhvdXJFeHRyYWN0b3IoaW5uZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkgeyByZXR1cm4gaW5uZXIoZGF0ZSwgbG9jYWxlKS5zcGxpdCgnICcpWzBdOyB9O1xufVxuLyoqXG4gKiBAcGFyYW0gez99IGRhdGVcbiAqIEBwYXJhbSB7P30gbG9jYWxlXG4gKiBAcGFyYW0gez99IG9wdGlvbnNcbiAqIEByZXR1cm4gez99XG4gKi9cbmZ1bmN0aW9uIGludGxEYXRlRm9ybWF0KGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIG9wdGlvbnMpLmZvcm1hdChkYXRlKS5yZXBsYWNlKC9bXFx1MjAwZVxcdTIwMGZdL2csICcnKTtcbn1cbi8qKlxuICogQHBhcmFtIHs/fSB0aW1lem9uZVxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gdGltZVpvbmVHZXR0ZXIodGltZXpvbmUpIHtcbiAgICAvLyBUbyB3b3JrYXJvdW5kIGBJbnRsYCBBUEkgcmVzdHJpY3Rpb24gZm9yIHNpbmdsZSB0aW1lem9uZSBsZXQgZm9ybWF0IHdpdGggMjQgaG91cnNcbiAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBvcHRpb25zID0geyBob3VyOiAnMi1kaWdpdCcsIGhvdXIxMjogZmFsc2UsIHRpbWVab25lTmFtZTogdGltZXpvbmUgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkge1xuICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyByZXN1bHQgPSBpbnRsRGF0ZUZvcm1hdChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpO1xuICAgICAgICAvLyBUaGVuIGV4dHJhY3QgZmlyc3QgMyBsZXR0ZXJzIHRoYXQgcmVsYXRlZCB0byBob3Vyc1xuICAgICAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LnN1YnN0cmluZygzKSA6ICcnO1xuICAgIH07XG59XG4vKipcbiAqIEBwYXJhbSB7P30gb3B0aW9uc1xuICogQHBhcmFtIHs/fSB2YWx1ZVxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gaG91cjEyTW9kaWZ5KG9wdGlvbnMsIHZhbHVlKSB7XG4gICAgb3B0aW9ucy5ob3VyMTIgPSB2YWx1ZTtcbiAgICByZXR1cm4gb3B0aW9ucztcbn1cbi8qKlxuICogQHBhcmFtIHs/fSBwcm9wXG4gKiBAcGFyYW0gez99IGxlblxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gZGlnaXRDb25kaXRpb24ocHJvcCwgbGVuKSB7XG4gICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gcmVzdWx0ID0ge307XG4gICAgcmVzdWx0W3Byb3BdID0gbGVuID09PSAyID8gJzItZGlnaXQnIDogJ251bWVyaWMnO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIEBwYXJhbSB7P30gcHJvcFxuICogQHBhcmFtIHs/fSBsZW5cbiAqIEByZXR1cm4gez99XG4gKi9cbmZ1bmN0aW9uIG5hbWVDb25kaXRpb24ocHJvcCwgbGVuKSB7XG4gICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gcmVzdWx0ID0ge307XG4gICAgaWYgKGxlbiA8IDQpIHtcbiAgICAgICAgcmVzdWx0W3Byb3BdID0gbGVuID4gMSA/ICdzaG9ydCcgOiAnbmFycm93JztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdFtwcm9wXSA9ICdsb25nJztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQHBhcmFtIHs/fSBvcHRpb25zXG4gKiBAcmV0dXJuIHs/fVxuICovXG5mdW5jdGlvbiBjb21iaW5lKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKG1lcmdlZCwgb3B0KSB7IHJldHVybiAoT2JqZWN0LmFzc2lnbih7fSwgbWVyZ2VkLCBvcHQpKTsgfSwge30pO1xufVxuLyoqXG4gKiBAcGFyYW0gez99IHJldFxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gZGF0ZVBhcnRHZXR0ZXJGYWN0b3J5KHJldCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7IHJldHVybiBpbnRsRGF0ZUZvcm1hdChkYXRlLCBsb2NhbGUsIHJldCk7IH07XG59XG52YXIgREFURV9GT1JNQVRURVJfQ0FDSEUgPSBuZXcgTWFwKCk7XG4vKipcbiAqIEBwYXJhbSB7P30gZm9ybWF0XG4gKiBAcGFyYW0gez99IGRhdGVcbiAqIEBwYXJhbSB7P30gbG9jYWxlXG4gKiBAcmV0dXJuIHs/fVxuICovXG5mdW5jdGlvbiBkYXRlRm9ybWF0dGVyKGZvcm1hdCwgZGF0ZSwgbG9jYWxlKSB7XG4gICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gZm4gPSBQQVRURVJOX0FMSUFTRVNbZm9ybWF0XTtcbiAgICBpZiAoZm4pXG4gICAgICAgIHJldHVybiBmbihkYXRlLCBsb2NhbGUpO1xuICAgIHZhciAvKiogQHR5cGUgez99ICovIGNhY2hlS2V5ID0gZm9ybWF0O1xuICAgIHZhciAvKiogQHR5cGUgez99ICovIHBhcnRzID0gREFURV9GT1JNQVRURVJfQ0FDSEUuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoIXBhcnRzKSB7XG4gICAgICAgIHBhcnRzID0gW107XG4gICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIG1hdGNoID0gdm9pZCAwO1xuICAgICAgICBEQVRFX0ZPUk1BVFNfU1BMSVQuZXhlYyhmb3JtYXQpO1xuICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBfZm9ybWF0ID0gZm9ybWF0O1xuICAgICAgICB3aGlsZSAoX2Zvcm1hdCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBEQVRFX0ZPUk1BVFNfU1BMSVQuZXhlYyhfZm9ybWF0KTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICAgICAgICBfZm9ybWF0ID0gKChwYXJ0cy5wb3AoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydHMucHVzaChfZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBfZm9ybWF0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBEQVRFX0ZPUk1BVFRFUl9DQUNIRS5zZXQoY2FjaGVLZXksIHBhcnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzLnJlZHVjZShmdW5jdGlvbiAodGV4dCwgcGFydCkge1xuICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBmbiA9IERBVEVfRk9STUFUU1twYXJ0XTtcbiAgICAgICAgcmV0dXJuIHRleHQgKyAoZm4gPyBmbihkYXRlLCBsb2NhbGUpIDogcGFydFRvVGltZShwYXJ0KSk7XG4gICAgfSwgJycpO1xufVxuLyoqXG4gKiBAcGFyYW0gez99IHBhcnRcbiAqIEByZXR1cm4gez99XG4gKi9cbmZ1bmN0aW9uIHBhcnRUb1RpbWUocGFydCkge1xuICAgIHJldHVybiBwYXJ0ID09PSAnXFwnXFwnJyA/ICdcXCcnIDogcGFydC5yZXBsYWNlKC8oXid8JyQpL2csICcnKS5yZXBsYWNlKC8nJy9nLCAnXFwnJyk7XG59XG52YXIgRGF0ZUZvcm1hdHRlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGF0ZUZvcm1hdHRlcigpIHtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBkYXRlXG4gICAgICogQHBhcmFtIHs/fSBsb2NhbGVcbiAgICAgKiBAcGFyYW0gez99IHBhdHRlcm5cbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIERhdGVGb3JtYXR0ZXIuZm9ybWF0ID0gZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgcGF0dGVybikge1xuICAgICAgICByZXR1cm4gZGF0ZUZvcm1hdHRlcihwYXR0ZXJuLCBkYXRlLCBsb2NhbGUpO1xuICAgIH07XG4gICAgcmV0dXJuIERhdGVGb3JtYXR0ZXI7XG59KCkpO1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xudmFyIF9OVU1CRVJfRk9STUFUX1JFR0VYUCA9IC9eKFxcZCspP1xcLigoXFxkKykoLShcXGQrKSk/KT8kLztcbi8qKlxuICogQHBhcmFtIHs/fSBwaXBlXG4gKiBAcGFyYW0gez99IGxvY2FsZVxuICogQHBhcmFtIHs/fSB2YWx1ZVxuICogQHBhcmFtIHs/fSBzdHlsZVxuICogQHBhcmFtIHs/PX0gZGlnaXRzXG4gKiBAcGFyYW0gez89fSBjdXJyZW5jeVxuICogQHBhcmFtIHs/PX0gY3VycmVuY3lBc1N5bWJvbFxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gZm9ybWF0TnVtYmVyKHBpcGUsIGxvY2FsZSwgdmFsdWUsIHN0eWxlLCBkaWdpdHMsIGN1cnJlbmN5LCBjdXJyZW5jeUFzU3ltYm9sKSB7XG4gICAgaWYgKGN1cnJlbmN5ID09PSB2b2lkIDApIHsgY3VycmVuY3kgPSBudWxsOyB9XG4gICAgaWYgKGN1cnJlbmN5QXNTeW1ib2wgPT09IHZvaWQgMCkgeyBjdXJyZW5jeUFzU3ltYm9sID0gZmFsc2U7IH1cbiAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gQ29udmVydCBzdHJpbmdzIHRvIG51bWJlcnNcbiAgICB2YWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgaXNOdW1lcmljKHZhbHVlKSA/ICt2YWx1ZSA6IHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IGludmFsaWRQaXBlQXJndW1lbnRFcnJvcihwaXBlLCB2YWx1ZSk7XG4gICAgfVxuICAgIHZhciAvKiogQHR5cGUgez99ICovIG1pbkludCA9IHVuZGVmaW5lZDtcbiAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBtaW5GcmFjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBtYXhGcmFjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICBpZiAoc3R5bGUgIT09IE51bWJlckZvcm1hdFN0eWxlLkN1cnJlbmN5KSB7XG4gICAgICAgIC8vIHJlbHkgb24gSW50bCBkZWZhdWx0IGZvciBjdXJyZW5jeVxuICAgICAgICBtaW5JbnQgPSAxO1xuICAgICAgICBtaW5GcmFjdGlvbiA9IDA7XG4gICAgICAgIG1heEZyYWN0aW9uID0gMztcbiAgICB9XG4gICAgaWYgKGRpZ2l0cykge1xuICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBwYXJ0cyA9IGRpZ2l0cy5tYXRjaChfTlVNQkVSX0ZPUk1BVF9SRUdFWFApO1xuICAgICAgICBpZiAocGFydHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkaWdpdHMgKyBcIiBpcyBub3QgYSB2YWxpZCBkaWdpdCBpbmZvIGZvciBudW1iZXIgcGlwZXNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRzWzFdICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1pbkludCA9IHBhcnNlSW50QXV0b1JhZGl4KHBhcnRzWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydHNbM10gIT0gbnVsbCkge1xuICAgICAgICAgICAgbWluRnJhY3Rpb24gPSBwYXJzZUludEF1dG9SYWRpeChwYXJ0c1szXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRzWzVdICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1heEZyYWN0aW9uID0gcGFyc2VJbnRBdXRvUmFkaXgocGFydHNbNV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBOdW1iZXJGb3JtYXR0ZXIuZm9ybWF0KC8qKiBAdHlwZSB7P30gKi8gKHZhbHVlKSwgbG9jYWxlLCBzdHlsZSwge1xuICAgICAgICBtaW5pbXVtSW50ZWdlckRpZ2l0czogbWluSW50LFxuICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IG1pbkZyYWN0aW9uLFxuICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uLFxuICAgICAgICBjdXJyZW5jeTogY3VycmVuY3ksXG4gICAgICAgIGN1cnJlbmN5QXNTeW1ib2w6IGN1cnJlbmN5QXNTeW1ib2wsXG4gICAgfSk7XG59XG4vKipcbiAqIFxcQG5nTW9kdWxlIENvbW1vbk1vZHVsZVxuICogXFxAd2hhdEl0RG9lcyBGb3JtYXRzIGEgbnVtYmVyIGFjY29yZGluZyB0byBsb2NhbGUgcnVsZXMuXG4gKiBcXEBob3dUb1VzZSBgbnVtYmVyX2V4cHJlc3Npb24gfCBudW1iZXJbOmRpZ2l0SW5mb11gXG4gKlxuICogRm9ybWF0cyBhIG51bWJlciBhcyB0ZXh0LiBHcm91cCBzaXppbmcgYW5kIHNlcGFyYXRvciBhbmQgb3RoZXIgbG9jYWxlLXNwZWNpZmljXG4gKiBjb25maWd1cmF0aW9ucyBhcmUgYmFzZWQgb24gdGhlIGFjdGl2ZSBsb2NhbGUuXG4gKlxuICogd2hlcmUgYGV4cHJlc3Npb25gIGlzIGEgbnVtYmVyOlxuICogIC0gYGRpZ2l0SW5mb2AgaXMgYSBgc3RyaW5nYCB3aGljaCBoYXMgYSBmb2xsb3dpbmcgZm9ybWF0OiA8YnI+XG4gKiAgICAgPGNvZGU+e21pbkludGVnZXJEaWdpdHN9LnttaW5GcmFjdGlvbkRpZ2l0c30te21heEZyYWN0aW9uRGlnaXRzfTwvY29kZT5cbiAqICAgLSBgbWluSW50ZWdlckRpZ2l0c2AgaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGludGVnZXIgZGlnaXRzIHRvIHVzZS4gRGVmYXVsdHMgdG8gYDFgLlxuICogICAtIGBtaW5GcmFjdGlvbkRpZ2l0c2AgaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciBmcmFjdGlvbi4gRGVmYXVsdHMgdG8gYDBgLlxuICogICAtIGBtYXhGcmFjdGlvbkRpZ2l0c2AgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciBmcmFjdGlvbi4gRGVmYXVsdHMgdG8gYDNgLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBhY2NlcHRhYmxlIHJhbmdlIGZvciBlYWNoIG9mIHRoZXNlIG51bWJlcnMgYW5kIG90aGVyXG4gKiBkZXRhaWxzIHNlZSB5b3VyIG5hdGl2ZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBsaWJyYXJ5LlxuICpcbiAqIFdBUk5JTkc6IHRoaXMgcGlwZSB1c2VzIHRoZSBJbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkgd2hpY2ggaXMgbm90IHlldCBhdmFpbGFibGUgaW4gYWxsIGJyb3dzZXJzXG4gKiBhbmQgbWF5IHJlcXVpcmUgYSBwb2x5ZmlsbC4gU2VlIFtCcm93c2VyIFN1cHBvcnRdKGd1aWRlL2Jyb3dzZXItc3VwcG9ydCkgZm9yIGRldGFpbHMuXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiB7XFxAZXhhbXBsZSBjb21tb24vcGlwZXMvdHMvbnVtYmVyX3BpcGUudHMgcmVnaW9uPSdOdW1iZXJQaXBlJ31cbiAqXG4gKiBcXEBzdGFibGVcbiAqL1xudmFyIERlY2ltYWxQaXBlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IF9sb2NhbGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBEZWNpbWFsUGlwZShfbG9jYWxlKSB7XG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IF9sb2NhbGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gdmFsdWVcbiAgICAgKiBAcGFyYW0gez89fSBkaWdpdHNcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIERlY2ltYWxQaXBlLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAodmFsdWUsIGRpZ2l0cykge1xuICAgICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKERlY2ltYWxQaXBlLCB0aGlzLl9sb2NhbGUsIHZhbHVlLCBOdW1iZXJGb3JtYXRTdHlsZS5EZWNpbWFsLCBkaWdpdHMpO1xuICAgIH07XG4gICAgcmV0dXJuIERlY2ltYWxQaXBlO1xufSgpKTtcbkRlY2ltYWxQaXBlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBQaXBlLCBhcmdzOiBbeyBuYW1lOiAnbnVtYmVyJyB9LF0gfSxcbl07XG4vKipcbiAqIEBub2NvbGxhcHNlXG4gKi9cbkRlY2ltYWxQaXBlLmN0b3JQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW1xuICAgIHsgdHlwZTogdW5kZWZpbmVkLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtMT0NBTEVfSUQsXSB9LF0gfSxcbl07IH07XG4vKipcbiAqIFxcQG5nTW9kdWxlIENvbW1vbk1vZHVsZVxuICogXFxAd2hhdEl0RG9lcyBGb3JtYXRzIGEgbnVtYmVyIGFzIGEgcGVyY2VudGFnZSBhY2NvcmRpbmcgdG8gbG9jYWxlIHJ1bGVzLlxuICogXFxAaG93VG9Vc2UgYG51bWJlcl9leHByZXNzaW9uIHwgcGVyY2VudFs6ZGlnaXRJbmZvXWBcbiAqXG4gKiBcXEBkZXNjcmlwdGlvblxuICpcbiAqIEZvcm1hdHMgYSBudW1iZXIgYXMgcGVyY2VudGFnZS5cbiAqXG4gKiAtIGBkaWdpdEluZm9gIFNlZSB7XFxAbGluayBEZWNpbWFsUGlwZX0gZm9yIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICpcbiAqIFdBUk5JTkc6IHRoaXMgcGlwZSB1c2VzIHRoZSBJbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkgd2hpY2ggaXMgbm90IHlldCBhdmFpbGFibGUgaW4gYWxsIGJyb3dzZXJzXG4gKiBhbmQgbWF5IHJlcXVpcmUgYSBwb2x5ZmlsbC4gU2VlIFtCcm93c2VyIFN1cHBvcnRdKGd1aWRlL2Jyb3dzZXItc3VwcG9ydCkgZm9yIGRldGFpbHMuXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiB7XFxAZXhhbXBsZSBjb21tb24vcGlwZXMvdHMvbnVtYmVyX3BpcGUudHMgcmVnaW9uPSdQZXJjZW50UGlwZSd9XG4gKlxuICogXFxAc3RhYmxlXG4gKi9cbnZhciBQZXJjZW50UGlwZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBfbG9jYWxlXG4gICAgICovXG4gICAgZnVuY3Rpb24gUGVyY2VudFBpcGUoX2xvY2FsZSkge1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSBfbG9jYWxlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHZhbHVlXG4gICAgICogQHBhcmFtIHs/PX0gZGlnaXRzXG4gICAgICogQHJldHVybiB7P31cbiAgICAgKi9cbiAgICBQZXJjZW50UGlwZS5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gKHZhbHVlLCBkaWdpdHMpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdE51bWJlcihQZXJjZW50UGlwZSwgdGhpcy5fbG9jYWxlLCB2YWx1ZSwgTnVtYmVyRm9ybWF0U3R5bGUuUGVyY2VudCwgZGlnaXRzKTtcbiAgICB9O1xuICAgIHJldHVybiBQZXJjZW50UGlwZTtcbn0oKSk7XG5QZXJjZW50UGlwZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogUGlwZSwgYXJnczogW3sgbmFtZTogJ3BlcmNlbnQnIH0sXSB9LFxuXTtcbi8qKlxuICogQG5vY29sbGFwc2VcbiAqL1xuUGVyY2VudFBpcGUuY3RvclBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXG4gICAgeyB0eXBlOiB1bmRlZmluZWQsIGRlY29yYXRvcnM6IFt7IHR5cGU6IEluamVjdCwgYXJnczogW0xPQ0FMRV9JRCxdIH0sXSB9LFxuXTsgfTtcbi8qKlxuICogXFxAbmdNb2R1bGUgQ29tbW9uTW9kdWxlXG4gKiBcXEB3aGF0SXREb2VzIEZvcm1hdHMgYSBudW1iZXIgYXMgY3VycmVuY3kgdXNpbmcgbG9jYWxlIHJ1bGVzLlxuICogXFxAaG93VG9Vc2UgYG51bWJlcl9leHByZXNzaW9uIHwgY3VycmVuY3lbOmN1cnJlbmN5Q29kZVs6c3ltYm9sRGlzcGxheVs6ZGlnaXRJbmZvXV1dYFxuICogXFxAZGVzY3JpcHRpb25cbiAqXG4gKiBVc2UgYGN1cnJlbmN5YCB0byBmb3JtYXQgYSBudW1iZXIgYXMgY3VycmVuY3kuXG4gKlxuICogLSBgY3VycmVuY3lDb2RlYCBpcyB0aGUgW0lTTyA0MjE3XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fNDIxNykgY3VycmVuY3kgY29kZSwgc3VjaFxuICogICAgYXMgYFVTRGAgZm9yIHRoZSBVUyBkb2xsYXIgYW5kIGBFVVJgIGZvciB0aGUgZXVyby5cbiAqIC0gYHN5bWJvbERpc3BsYXlgIGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gdXNlIHRoZSBjdXJyZW5jeSBzeW1ib2wgb3IgY29kZS5cbiAqICAgLSBgdHJ1ZWA6IHVzZSBzeW1ib2wgKGUuZy4gYCRgKS5cbiAqICAgLSBgZmFsc2VgKGRlZmF1bHQpOiB1c2UgY29kZSAoZS5nLiBgVVNEYCkuXG4gKiAtIGBkaWdpdEluZm9gIFNlZSB7XFxAbGluayBEZWNpbWFsUGlwZX0gZm9yIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICpcbiAqIFdBUk5JTkc6IHRoaXMgcGlwZSB1c2VzIHRoZSBJbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkgd2hpY2ggaXMgbm90IHlldCBhdmFpbGFibGUgaW4gYWxsIGJyb3dzZXJzXG4gKiBhbmQgbWF5IHJlcXVpcmUgYSBwb2x5ZmlsbC4gU2VlIFtCcm93c2VyIFN1cHBvcnRdKGd1aWRlL2Jyb3dzZXItc3VwcG9ydCkgZm9yIGRldGFpbHMuXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiB7XFxAZXhhbXBsZSBjb21tb24vcGlwZXMvdHMvbnVtYmVyX3BpcGUudHMgcmVnaW9uPSdDdXJyZW5jeVBpcGUnfVxuICpcbiAqIFxcQHN0YWJsZVxuICovXG52YXIgQ3VycmVuY3lQaXBlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IF9sb2NhbGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBDdXJyZW5jeVBpcGUoX2xvY2FsZSkge1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSBfbG9jYWxlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHZhbHVlXG4gICAgICogQHBhcmFtIHs/PX0gY3VycmVuY3lDb2RlXG4gICAgICogQHBhcmFtIHs/PX0gc3ltYm9sRGlzcGxheVxuICAgICAqIEBwYXJhbSB7Pz19IGRpZ2l0c1xuICAgICAqIEByZXR1cm4gez99XG4gICAgICovXG4gICAgQ3VycmVuY3lQaXBlLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAodmFsdWUsIGN1cnJlbmN5Q29kZSwgc3ltYm9sRGlzcGxheSwgZGlnaXRzKSB7XG4gICAgICAgIGlmIChjdXJyZW5jeUNvZGUgPT09IHZvaWQgMCkgeyBjdXJyZW5jeUNvZGUgPSAnVVNEJzsgfVxuICAgICAgICBpZiAoc3ltYm9sRGlzcGxheSA9PT0gdm9pZCAwKSB7IHN5bWJvbERpc3BsYXkgPSBmYWxzZTsgfVxuICAgICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKEN1cnJlbmN5UGlwZSwgdGhpcy5fbG9jYWxlLCB2YWx1ZSwgTnVtYmVyRm9ybWF0U3R5bGUuQ3VycmVuY3ksIGRpZ2l0cywgY3VycmVuY3lDb2RlLCBzeW1ib2xEaXNwbGF5KTtcbiAgICB9O1xuICAgIHJldHVybiBDdXJyZW5jeVBpcGU7XG59KCkpO1xuQ3VycmVuY3lQaXBlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBQaXBlLCBhcmdzOiBbeyBuYW1lOiAnY3VycmVuY3knIH0sXSB9LFxuXTtcbi8qKlxuICogQG5vY29sbGFwc2VcbiAqL1xuQ3VycmVuY3lQaXBlLmN0b3JQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW1xuICAgIHsgdHlwZTogdW5kZWZpbmVkLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtMT0NBTEVfSUQsXSB9LF0gfSxcbl07IH07XG4vKipcbiAqIEBwYXJhbSB7P30gdGV4dFxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gcGFyc2VJbnRBdXRvUmFkaXgodGV4dCkge1xuICAgIHZhciAvKiogQHR5cGUgez99ICovIHJlc3VsdCA9IHBhcnNlSW50KHRleHQpO1xuICAgIGlmIChpc05hTihyZXN1bHQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnRlZ2VyIGxpdGVyYWwgd2hlbiBwYXJzaW5nICcgKyB0ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQHBhcmFtIHs/fSB2YWx1ZVxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gaXNOdW1lcmljKHZhbHVlKSB7XG4gICAgcmV0dXJuICFpc05hTih2YWx1ZSAtIHBhcnNlRmxvYXQodmFsdWUpKTtcbn1cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbnZhciBJU084NjAxX0RBVEVfUkVHRVggPSAvXihcXGR7NH0pLT8oXFxkXFxkKS0/KFxcZFxcZCkoPzpUKFxcZFxcZCkoPzo6PyhcXGRcXGQpKD86Oj8oXFxkXFxkKSg/OlxcLihcXGQrKSk/KT8pPyhafChbKy1dKShcXGRcXGQpOj8oXFxkXFxkKSk/KT8kLztcbi8qKlxuICogXFxAbmdNb2R1bGUgQ29tbW9uTW9kdWxlXG4gKiBcXEB3aGF0SXREb2VzIEZvcm1hdHMgYSBkYXRlIGFjY29yZGluZyB0byBsb2NhbGUgcnVsZXMuXG4gKiBcXEBob3dUb1VzZSBgZGF0ZV9leHByZXNzaW9uIHwgZGF0ZVs6Zm9ybWF0XWBcbiAqIFxcQGRlc2NyaXB0aW9uXG4gKlxuICogV2hlcmU6XG4gKiAtIGBleHByZXNzaW9uYCBpcyBhIGRhdGUgb2JqZWN0IG9yIGEgbnVtYmVyIChtaWxsaXNlY29uZHMgc2luY2UgVVRDIGVwb2NoKSBvciBhbiBJU08gc3RyaW5nXG4gKiAoaHR0cHM6Ly93d3cudzMub3JnL1RSL05PVEUtZGF0ZXRpbWUpLlxuICogLSBgZm9ybWF0YCBpbmRpY2F0ZXMgd2hpY2ggZGF0ZS90aW1lIGNvbXBvbmVudHMgdG8gaW5jbHVkZS4gVGhlIGZvcm1hdCBjYW4gYmUgcHJlZGVmaW5lZCBhc1xuICogICBzaG93biBiZWxvdyBvciBjdXN0b20gYXMgc2hvd24gaW4gdGhlIHRhYmxlLlxuICogICAtIGAnbWVkaXVtJ2A6IGVxdWl2YWxlbnQgdG8gYCd5TU1NZGptcydgIChlLmcuIGBTZXAgMywgMjAxMCwgMTI6MDU6MDggUE1gIGZvciBgZW4tVVNgKVxuICogICAtIGAnc2hvcnQnYDogZXF1aXZhbGVudCB0byBgJ3lNZGptJ2AgKGUuZy4gYDkvMy8yMDEwLCAxMjowNSBQTWAgZm9yIGBlbi1VU2ApXG4gKiAgIC0gYCdmdWxsRGF0ZSdgOiBlcXVpdmFsZW50IHRvIGAneU1NTU1FRUVFZCdgIChlLmcuIGBGcmlkYXksIFNlcHRlbWJlciAzLCAyMDEwYCBmb3IgYGVuLVVTYClcbiAqICAgLSBgJ2xvbmdEYXRlJ2A6IGVxdWl2YWxlbnQgdG8gYCd5TU1NTWQnYCAoZS5nLiBgU2VwdGVtYmVyIDMsIDIwMTBgIGZvciBgZW4tVVNgKVxuICogICAtIGAnbWVkaXVtRGF0ZSdgOiBlcXVpdmFsZW50IHRvIGAneU1NTWQnYCAoZS5nLiBgU2VwIDMsIDIwMTBgIGZvciBgZW4tVVNgKVxuICogICAtIGAnc2hvcnREYXRlJ2A6IGVxdWl2YWxlbnQgdG8gYCd5TWQnYCAoZS5nLiBgOS8zLzIwMTBgIGZvciBgZW4tVVNgKVxuICogICAtIGAnbWVkaXVtVGltZSdgOiBlcXVpdmFsZW50IHRvIGAnam1zJ2AgKGUuZy4gYDEyOjA1OjA4IFBNYCBmb3IgYGVuLVVTYClcbiAqICAgLSBgJ3Nob3J0VGltZSdgOiBlcXVpdmFsZW50IHRvIGAnam0nYCAoZS5nLiBgMTI6MDUgUE1gIGZvciBgZW4tVVNgKVxuICpcbiAqXG4gKiAgfCBDb21wb25lbnQgfCBTeW1ib2wgfCBOYXJyb3cgfCBTaG9ydCBGb3JtICAgfCBMb25nIEZvcm0gICAgICAgICB8IE51bWVyaWMgICB8IDItZGlnaXQgICB8XG4gKiAgfC0tLS0tLS0tLS0tfDotLS0tLS06fC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS18XG4gKiAgfCBlcmEgICAgICAgfCAgIEcgICAgfCBHIChBKSAgfCBHR0cgKEFEKSAgICAgfCBHR0dHIChBbm5vIERvbWluaSl8IC0gICAgICAgICB8IC0gICAgICAgICB8XG4gKiAgfCB5ZWFyICAgICAgfCAgIHkgICAgfCAtICAgICAgfCAtICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgICB8IHkgKDIwMTUpICB8IHl5ICgxNSkgICB8XG4gKiAgfCBtb250aCAgICAgfCAgIE0gICAgfCBMIChTKSAgfCBNTU0gKFNlcCkgICAgfCBNTU1NIChTZXB0ZW1iZXIpICB8IE0gKDkpICAgICB8IE1NICgwOSkgICB8XG4gKiAgfCBkYXkgICAgICAgfCAgIGQgICAgfCAtICAgICAgfCAtICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgICB8IGQgKDMpICAgICB8IGRkICgwMykgICB8XG4gKiAgfCB3ZWVrZGF5ICAgfCAgIEUgICAgfCBFIChTKSAgfCBFRUUgKFN1bikgICAgfCBFRUVFIChTdW5kYXkpICAgICB8IC0gICAgICAgICB8IC0gICAgICAgICB8XG4gKiAgfCBob3VyICAgICAgfCAgIGogICAgfCAtICAgICAgfCAtICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgICB8IGogKDEzKSAgICB8IGpqICgxMykgICB8XG4gKiAgfCBob3VyMTIgICAgfCAgIGggICAgfCAtICAgICAgfCAtICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgICB8IGggKDEgUE0pICB8IGhoICgwMSBQTSl8XG4gKiAgfCBob3VyMjQgICAgfCAgIEggICAgfCAtICAgICAgfCAtICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgICB8IEggKDEzKSAgICB8IEhIICgxMykgICB8XG4gKiAgfCBtaW51dGUgICAgfCAgIG0gICAgfCAtICAgICAgfCAtICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgICB8IG0gKDUpICAgICB8IG1tICgwNSkgICB8XG4gKiAgfCBzZWNvbmQgICAgfCAgIHMgICAgfCAtICAgICAgfCAtICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgICB8IHMgKDkpICAgICB8IHNzICgwOSkgICB8XG4gKiAgfCB0aW1lem9uZSAgfCAgIHogICAgfCAtICAgICAgfCAtICAgICAgICAgICAgfCB6IChQYWNpZmljIFN0YW5kYXJkIFRpbWUpfCAtICB8IC0gICAgICAgICB8XG4gKiAgfCB0aW1lem9uZSAgfCAgIFogICAgfCAtICAgICAgfCBaIChHTVQtODowMCkgfCAtICAgICAgICAgICAgICAgICB8IC0gICAgICAgICB8IC0gICAgICAgICB8XG4gKiAgfCB0aW1lem9uZSAgfCAgIGEgICAgfCAtICAgICAgfCBhIChQTSkgICAgICAgfCAtICAgICAgICAgICAgICAgICB8IC0gICAgICAgICB8IC0gICAgICAgICB8XG4gKlxuICogSW4gamF2YXNjcmlwdCwgb25seSB0aGUgY29tcG9uZW50cyBzcGVjaWZpZWQgd2lsbCBiZSByZXNwZWN0ZWQgKG5vdCB0aGUgb3JkZXJpbmcsXG4gKiBwdW5jdHVhdGlvbnMsIC4uLikgYW5kIGRldGFpbHMgb2YgdGhlIGZvcm1hdHRpbmcgd2lsbCBiZSBkZXBlbmRlbnQgb24gdGhlIGxvY2FsZS5cbiAqXG4gKiBUaW1lem9uZSBvZiB0aGUgZm9ybWF0dGVkIHRleHQgd2lsbCBiZSB0aGUgbG9jYWwgc3lzdGVtIHRpbWV6b25lIG9mIHRoZSBlbmQtdXNlcidzIG1hY2hpbmUuXG4gKlxuICogV2hlbiB0aGUgZXhwcmVzc2lvbiBpcyBhIElTTyBzdHJpbmcgd2l0aG91dCB0aW1lIChlLmcuIDIwMTYtMDktMTkpIHRoZSB0aW1lIHpvbmUgb2Zmc2V0IGlzIG5vdFxuICogYXBwbGllZCBhbmQgdGhlIGZvcm1hdHRlZCB0ZXh0IHdpbGwgaGF2ZSB0aGUgc2FtZSBkYXksIG1vbnRoIGFuZCB5ZWFyIG9mIHRoZSBleHByZXNzaW9uLlxuICpcbiAqIFdBUk5JTkdTOlxuICogLSB0aGlzIHBpcGUgaXMgbWFya2VkIGFzIHB1cmUgaGVuY2UgaXQgd2lsbCBub3QgYmUgcmUtZXZhbHVhdGVkIHdoZW4gdGhlIGlucHV0IGlzIG11dGF0ZWQuXG4gKiAgIEluc3RlYWQgdXNlcnMgc2hvdWxkIHRyZWF0IHRoZSBkYXRlIGFzIGFuIGltbXV0YWJsZSBvYmplY3QgYW5kIGNoYW5nZSB0aGUgcmVmZXJlbmNlIHdoZW4gdGhlXG4gKiAgIHBpcGUgbmVlZHMgdG8gcmUtcnVuICh0aGlzIGlzIHRvIGF2b2lkIHJlZm9ybWF0dGluZyB0aGUgZGF0ZSBvbiBldmVyeSBjaGFuZ2UgZGV0ZWN0aW9uIHJ1blxuICogICB3aGljaCB3b3VsZCBiZSBhbiBleHBlbnNpdmUgb3BlcmF0aW9uKS5cbiAqIC0gdGhpcyBwaXBlIHVzZXMgdGhlIEludGVybmF0aW9uYWxpemF0aW9uIEFQSS4gVGhlcmVmb3JlIGl0IGlzIG9ubHkgcmVsaWFibGUgaW4gQ2hyb21lIGFuZCBPcGVyYVxuICogICBicm93c2Vycy5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBBc3N1bWluZyBgZGF0ZU9iamAgaXMgKHllYXI6IDIwMTUsIG1vbnRoOiA2LCBkYXk6IDE1LCBob3VyOiAyMSwgbWludXRlOiA0Mywgc2Vjb25kOiAxMSlcbiAqIGluIHRoZSBfbG9jYWxfIHRpbWUgYW5kIGxvY2FsZSBpcyAnZW4tVVMnOlxuICpcbiAqIGBgYFxuICogICAgIHt7IGRhdGVPYmogfCBkYXRlIH19ICAgICAgICAgICAgICAgLy8gb3V0cHV0IGlzICdKdW4gMTUsIDIwMTUnXG4gKiAgICAge3sgZGF0ZU9iaiB8IGRhdGU6J21lZGl1bScgfX0gICAgICAvLyBvdXRwdXQgaXMgJ0p1biAxNSwgMjAxNSwgOTo0MzoxMSBQTSdcbiAqICAgICB7eyBkYXRlT2JqIHwgZGF0ZTonc2hvcnRUaW1lJyB9fSAgIC8vIG91dHB1dCBpcyAnOTo0MyBQTSdcbiAqICAgICB7eyBkYXRlT2JqIHwgZGF0ZTonbW1zcycgfX0gICAgICAgIC8vIG91dHB1dCBpcyAnNDM6MTEnXG4gKiBgYGBcbiAqXG4gKiB7XFxAZXhhbXBsZSBjb21tb24vcGlwZXMvdHMvZGF0ZV9waXBlLnRzIHJlZ2lvbj0nRGF0ZVBpcGUnfVxuICpcbiAqIFxcQHN0YWJsZVxuICovXG52YXIgRGF0ZVBpcGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gX2xvY2FsZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIERhdGVQaXBlKF9sb2NhbGUpIHtcbiAgICAgICAgdGhpcy5fbG9jYWxlID0gX2xvY2FsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7Pz19IHBhdHRlcm5cbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIERhdGVQaXBlLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAodmFsdWUsIHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKHBhdHRlcm4gPT09IHZvaWQgMCkgeyBwYXR0ZXJuID0gJ21lZGl1bURhdGUnOyB9XG4gICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIGRhdGU7XG4gICAgICAgIGlmIChpc0JsYW5rKHZhbHVlKSB8fCB2YWx1ZSAhPT0gdmFsdWUpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICAgICAgICBkYXRlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNOdW1lcmljKHZhbHVlKSkge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIC9eKFxcZHs0fS1cXGR7MSwyfS1cXGR7MSwyfSkkLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBGb3IgSVNPIFN0cmluZ3Mgd2l0aG91dCB0aW1lIHRoZSBkYXksIG1vbnRoIGFuZCB5ZWFyIG11c3QgYmUgZXh0cmFjdGVkIGZyb20gdGhlIElTTyBTdHJpbmdcbiAgICAgICAgICAgICAqIGJlZm9yZSBEYXRlIGNyZWF0aW9uIHRvIGF2b2lkIHRpbWUgb2Zmc2V0IGFuZCBlcnJvcnMgaW4gdGhlIG5ldyBEYXRlLlxuICAgICAgICAgICAgICogSWYgd2Ugb25seSByZXBsYWNlICctJyB3aXRoICcsJyBpbiB0aGUgSVNPIFN0cmluZyAoXCIyMDE1LDAxLDAxXCIpLCBhbmQgdHJ5IHRvIGNyZWF0ZSBhIG5ld1xuICAgICAgICAgICAgICogZGF0ZSwgc29tZSBicm93c2VycyAoZS5nLiBJRSA5KSB3aWxsIHRocm93IGFuIGludmFsaWQgRGF0ZSBlcnJvclxuICAgICAgICAgICAgICogSWYgd2UgbGVhdmUgdGhlICctJyAoXCIyMDE1LTAxLTAxXCIpIGFuZCB0cnkgdG8gY3JlYXRlIGEgbmV3IERhdGUoXCIyMDE1LTAxLTAxXCIpIHRoZSB0aW1lb2Zmc2V0XG4gICAgICAgICAgICAgKiBpcyBhcHBsaWVkXG4gICAgICAgICAgICAgKiBOb3RlOiBJU08gbW9udGhzIGFyZSAwIGZvciBKYW51YXJ5LCAxIGZvciBGZWJydWFyeSwgLi4uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBfYSA9IHZhbHVlLnNwbGl0KCctJykubWFwKGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIHBhcnNlSW50KHZhbCwgMTApOyB9KSwgeSA9IF9hWzBdLCBtID0gX2FbMV0sIGQgPSBfYVsyXTtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtIC0gMSwgZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNEYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICB2YXIgLyoqIEB0eXBlIHs/fSAqLyBtYXRjaCA9IHZvaWQgMDtcbiAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgJiYgKG1hdGNoID0gdmFsdWUubWF0Y2goSVNPODYwMV9EQVRFX1JFR0VYKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gaXNvU3RyaW5nVG9EYXRlKG1hdGNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGludmFsaWRQaXBlQXJndW1lbnRFcnJvcihEYXRlUGlwZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBEYXRlRm9ybWF0dGVyLmZvcm1hdChkYXRlLCB0aGlzLl9sb2NhbGUsIERhdGVQaXBlLl9BTElBU0VTW3BhdHRlcm5dIHx8IHBhdHRlcm4pO1xuICAgIH07XG4gICAgcmV0dXJuIERhdGVQaXBlO1xufSgpKTtcbi8qKlxuICogXFxAaW50ZXJuYWxcbiAqL1xuRGF0ZVBpcGUuX0FMSUFTRVMgPSB7XG4gICAgJ21lZGl1bSc6ICd5TU1NZGptcycsXG4gICAgJ3Nob3J0JzogJ3lNZGptJyxcbiAgICAnZnVsbERhdGUnOiAneU1NTU1FRUVFZCcsXG4gICAgJ2xvbmdEYXRlJzogJ3lNTU1NZCcsXG4gICAgJ21lZGl1bURhdGUnOiAneU1NTWQnLFxuICAgICdzaG9ydERhdGUnOiAneU1kJyxcbiAgICAnbWVkaXVtVGltZSc6ICdqbXMnLFxuICAgICdzaG9ydFRpbWUnOiAnam0nXG59O1xuRGF0ZVBpcGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IFBpcGUsIGFyZ3M6IFt7IG5hbWU6ICdkYXRlJywgcHVyZTogdHJ1ZSB9LF0gfSxcbl07XG4vKipcbiAqIEBub2NvbGxhcHNlXG4gKi9cbkRhdGVQaXBlLmN0b3JQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW1xuICAgIHsgdHlwZTogdW5kZWZpbmVkLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtMT0NBTEVfSUQsXSB9LF0gfSxcbl07IH07XG4vKipcbiAqIEBwYXJhbSB7P30gb2JqXG4gKiBAcmV0dXJuIHs/fVxuICovXG5mdW5jdGlvbiBpc0JsYW5rKG9iaikge1xuICAgIHJldHVybiBvYmogPT0gbnVsbCB8fCBvYmogPT09ICcnO1xufVxuLyoqXG4gKiBAcGFyYW0gez99IG9ialxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gaXNEYXRlKG9iaikge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihvYmoudmFsdWVPZigpKTtcbn1cbi8qKlxuICogQHBhcmFtIHs/fSBtYXRjaFxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gaXNvU3RyaW5nVG9EYXRlKG1hdGNoKSB7XG4gICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gZGF0ZSA9IG5ldyBEYXRlKDApO1xuICAgIHZhciAvKiogQHR5cGUgez99ICovIHR6SG91ciA9IDA7XG4gICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gdHpNaW4gPSAwO1xuICAgIHZhciAvKiogQHR5cGUgez99ICovIGRhdGVTZXR0ZXIgPSBtYXRjaFs4XSA/IGRhdGUuc2V0VVRDRnVsbFllYXIgOiBkYXRlLnNldEZ1bGxZZWFyO1xuICAgIHZhciAvKiogQHR5cGUgez99ICovIHRpbWVTZXR0ZXIgPSBtYXRjaFs4XSA/IGRhdGUuc2V0VVRDSG91cnMgOiBkYXRlLnNldEhvdXJzO1xuICAgIGlmIChtYXRjaFs5XSkge1xuICAgICAgICB0ekhvdXIgPSB0b0ludChtYXRjaFs5XSArIG1hdGNoWzEwXSk7XG4gICAgICAgIHR6TWluID0gdG9JbnQobWF0Y2hbOV0gKyBtYXRjaFsxMV0pO1xuICAgIH1cbiAgICBkYXRlU2V0dGVyLmNhbGwoZGF0ZSwgdG9JbnQobWF0Y2hbMV0pLCB0b0ludChtYXRjaFsyXSkgLSAxLCB0b0ludChtYXRjaFszXSkpO1xuICAgIHZhciAvKiogQHR5cGUgez99ICovIGggPSB0b0ludChtYXRjaFs0XSB8fCAnMCcpIC0gdHpIb3VyO1xuICAgIHZhciAvKiogQHR5cGUgez99ICovIG0gPSB0b0ludChtYXRjaFs1XSB8fCAnMCcpIC0gdHpNaW47XG4gICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gcyA9IHRvSW50KG1hdGNoWzZdIHx8ICcwJyk7XG4gICAgdmFyIC8qKiBAdHlwZSB7P30gKi8gbXMgPSBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoJzAuJyArIChtYXRjaFs3XSB8fCAwKSkgKiAxMDAwKTtcbiAgICB0aW1lU2V0dGVyLmNhbGwoZGF0ZSwgaCwgbSwgcywgbXMpO1xuICAgIHJldHVybiBkYXRlO1xufVxuLyoqXG4gKiBAcGFyYW0gez99IHN0clxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gdG9JbnQoc3RyKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHN0ciwgMTApO1xufVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xudmFyIF9JTlRFUlBPTEFUSU9OX1JFR0VYUCA9IC8jL2c7XG4vKipcbiAqIFxcQG5nTW9kdWxlIENvbW1vbk1vZHVsZVxuICogXFxAd2hhdEl0RG9lcyBNYXBzIGEgdmFsdWUgdG8gYSBzdHJpbmcgdGhhdCBwbHVyYWxpemVzIHRoZSB2YWx1ZSBhY2NvcmRpbmcgdG8gbG9jYWxlIHJ1bGVzLlxuICogXFxAaG93VG9Vc2UgYGV4cHJlc3Npb24gfCBpMThuUGx1cmFsOm1hcHBpbmdgXG4gKiBcXEBkZXNjcmlwdGlvblxuICpcbiAqICBXaGVyZTpcbiAqICAtIGBleHByZXNzaW9uYCBpcyBhIG51bWJlci5cbiAqICAtIGBtYXBwaW5nYCBpcyBhbiBvYmplY3QgdGhhdCBtaW1pY3MgdGhlIElDVSBmb3JtYXQsIHNlZVxuICogICAgaHR0cDovL3VzZXJndWlkZS5pY3UtcHJvamVjdC5vcmcvZm9ybWF0cGFyc2UvbWVzc2FnZXNcbiAqXG4gKiAgIyMgRXhhbXBsZVxuICpcbiAqIHtcXEBleGFtcGxlIGNvbW1vbi9waXBlcy90cy9pMThuX3BpcGUudHMgcmVnaW9uPSdJMThuUGx1cmFsUGlwZUNvbXBvbmVudCd9XG4gKlxuICogXFxAZXhwZXJpbWVudGFsXG4gKi9cbnZhciBJMThuUGx1cmFsUGlwZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBfbG9jYWxpemF0aW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gSTE4blBsdXJhbFBpcGUoX2xvY2FsaXphdGlvbikge1xuICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb24gPSBfbG9jYWxpemF0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gez99IHZhbHVlXG4gICAgICogQHBhcmFtIHs/fSBwbHVyYWxNYXBcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIEkxOG5QbHVyYWxQaXBlLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAodmFsdWUsIHBsdXJhbE1hcCkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVyYWxNYXAgIT09ICdvYmplY3QnIHx8IHBsdXJhbE1hcCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgaW52YWxpZFBpcGVBcmd1bWVudEVycm9yKEkxOG5QbHVyYWxQaXBlLCBwbHVyYWxNYXApO1xuICAgICAgICB9XG4gICAgICAgIHZhciAvKiogQHR5cGUgez99ICovIGtleSA9IGdldFBsdXJhbENhdGVnb3J5KHZhbHVlLCBPYmplY3Qua2V5cyhwbHVyYWxNYXApLCB0aGlzLl9sb2NhbGl6YXRpb24pO1xuICAgICAgICByZXR1cm4gcGx1cmFsTWFwW2tleV0ucmVwbGFjZShfSU5URVJQT0xBVElPTl9SRUdFWFAsIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH07XG4gICAgcmV0dXJuIEkxOG5QbHVyYWxQaXBlO1xufSgpKTtcbkkxOG5QbHVyYWxQaXBlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBQaXBlLCBhcmdzOiBbeyBuYW1lOiAnaTE4blBsdXJhbCcsIHB1cmU6IHRydWUgfSxdIH0sXG5dO1xuLyoqXG4gKiBAbm9jb2xsYXBzZVxuICovXG5JMThuUGx1cmFsUGlwZS5jdG9yUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtcbiAgICB7IHR5cGU6IE5nTG9jYWxpemF0aW9uLCB9LFxuXTsgfTtcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8qKlxuICogXFxAbmdNb2R1bGUgQ29tbW9uTW9kdWxlXG4gKiBcXEB3aGF0SXREb2VzIEdlbmVyaWMgc2VsZWN0b3IgdGhhdCBkaXNwbGF5cyB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUgY3VycmVudCB2YWx1ZS5cbiAqIFxcQGhvd1RvVXNlIGBleHByZXNzaW9uIHwgaTE4blNlbGVjdDptYXBwaW5nYFxuICogXFxAZGVzY3JpcHRpb25cbiAqXG4gKiAgV2hlcmUgYG1hcHBpbmdgIGlzIGFuIG9iamVjdCB0aGF0IGluZGljYXRlcyB0aGUgdGV4dCB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWRcbiAqICBmb3IgZGlmZmVyZW50IHZhbHVlcyBvZiB0aGUgcHJvdmlkZWQgYGV4cHJlc3Npb25gLlxuICogIElmIG5vbmUgb2YgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgbWF0Y2ggdGhlIHZhbHVlIG9mIHRoZSBgZXhwcmVzc2lvbmAsIHRoZW4gdGhlIGNvbnRlbnRcbiAqICBvZiB0aGUgYG90aGVyYCBrZXkgaXMgcmV0dXJuZWQgd2hlbiBwcmVzZW50LCBvdGhlcndpc2UgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLlxuICpcbiAqICAjIyBFeGFtcGxlXG4gKlxuICoge1xcQGV4YW1wbGUgY29tbW9uL3BpcGVzL3RzL2kxOG5fcGlwZS50cyByZWdpb249J0kxOG5TZWxlY3RQaXBlQ29tcG9uZW50J31cbiAqXG4gKiAgXFxAZXhwZXJpbWVudGFsXG4gKi9cbnZhciBJMThuU2VsZWN0UGlwZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gSTE4blNlbGVjdFBpcGUoKSB7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gdmFsdWVcbiAgICAgKiBAcGFyYW0gez99IG1hcHBpbmdcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIEkxOG5TZWxlY3RQaXBlLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAodmFsdWUsIG1hcHBpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgaW52YWxpZFBpcGVBcmd1bWVudEVycm9yKEkxOG5TZWxlY3RQaXBlLCBtYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwcGluZy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBwaW5nW3ZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwcGluZy5oYXNPd25Qcm9wZXJ0eSgnb3RoZXInKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmdbJ290aGVyJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH07XG4gICAgcmV0dXJuIEkxOG5TZWxlY3RQaXBlO1xufSgpKTtcbkkxOG5TZWxlY3RQaXBlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBQaXBlLCBhcmdzOiBbeyBuYW1lOiAnaTE4blNlbGVjdCcsIHB1cmU6IHRydWUgfSxdIH0sXG5dO1xuLyoqXG4gKiBAbm9jb2xsYXBzZVxuICovXG5JMThuU2VsZWN0UGlwZS5jdG9yUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtdOyB9O1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuLyoqXG4gKiBcXEBuZ01vZHVsZSBDb21tb25Nb2R1bGVcbiAqIFxcQHdoYXRJdERvZXMgQ29udmVydHMgdmFsdWUgaW50byBKU09OIHN0cmluZy5cbiAqIFxcQGhvd1RvVXNlIGBleHByZXNzaW9uIHwganNvbmBcbiAqIFxcQGRlc2NyaXB0aW9uXG4gKlxuICogQ29udmVydHMgdmFsdWUgaW50byBzdHJpbmcgdXNpbmcgYEpTT04uc3RyaW5naWZ5YC4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcuXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqIHtcXEBleGFtcGxlIGNvbW1vbi9waXBlcy90cy9qc29uX3BpcGUudHMgcmVnaW9uPSdKc29uUGlwZSd9XG4gKlxuICogXFxAc3RhYmxlXG4gKi9cbnZhciBKc29uUGlwZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gSnNvblBpcGUoKSB7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7P30gdmFsdWVcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIEpzb25QaXBlLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKTsgfTtcbiAgICByZXR1cm4gSnNvblBpcGU7XG59KCkpO1xuSnNvblBpcGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IFBpcGUsIGFyZ3M6IFt7IG5hbWU6ICdqc29uJywgcHVyZTogZmFsc2UgfSxdIH0sXG5dO1xuLyoqXG4gKiBAbm9jb2xsYXBzZVxuICovXG5Kc29uUGlwZS5jdG9yUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtdOyB9O1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuLyoqXG4gKiBcXEBuZ01vZHVsZSBDb21tb25Nb2R1bGVcbiAqIFxcQHdoYXRJdERvZXMgQ3JlYXRlcyBhIG5ldyBMaXN0IG9yIFN0cmluZyBjb250YWluaW5nIGEgc3Vic2V0IChzbGljZSkgb2YgdGhlIGVsZW1lbnRzLlxuICogXFxAaG93VG9Vc2UgYGFycmF5X29yX3N0cmluZ19leHByZXNzaW9uIHwgc2xpY2U6c3RhcnRbOmVuZF1gXG4gKiBcXEBkZXNjcmlwdGlvblxuICpcbiAqIFdoZXJlIHRoZSBpbnB1dCBleHByZXNzaW9uIGlzIGEgYExpc3RgIG9yIGBTdHJpbmdgLCBhbmQ6XG4gKiAtIGBzdGFydGA6IFRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUgc3Vic2V0IHRvIHJldHVybi5cbiAqICAgLSAqKmEgcG9zaXRpdmUgaW50ZWdlcioqOiByZXR1cm4gdGhlIGl0ZW0gYXQgYHN0YXJ0YCBpbmRleCBhbmQgYWxsIGl0ZW1zIGFmdGVyXG4gKiAgICAgaW4gdGhlIGxpc3Qgb3Igc3RyaW5nIGV4cHJlc3Npb24uXG4gKiAgIC0gKiphIG5lZ2F0aXZlIGludGVnZXIqKjogcmV0dXJuIHRoZSBpdGVtIGF0IGBzdGFydGAgaW5kZXggZnJvbSB0aGUgZW5kIGFuZCBhbGwgaXRlbXMgYWZ0ZXJcbiAqICAgICBpbiB0aGUgbGlzdCBvciBzdHJpbmcgZXhwcmVzc2lvbi5cbiAqICAgLSAqKmlmIHBvc2l0aXZlIGFuZCBncmVhdGVyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGV4cHJlc3Npb24qKjogcmV0dXJuIGFuIGVtcHR5IGxpc3Qgb3Igc3RyaW5nLlxuICogICAtICoqaWYgbmVnYXRpdmUgYW5kIGdyZWF0ZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgZXhwcmVzc2lvbioqOiByZXR1cm4gZW50aXJlIGxpc3Qgb3Igc3RyaW5nLlxuICogLSBgZW5kYDogVGhlIGVuZGluZyBpbmRleCBvZiB0aGUgc3Vic2V0IHRvIHJldHVybi5cbiAqICAgLSAqKm9taXR0ZWQqKjogcmV0dXJuIGFsbCBpdGVtcyB1bnRpbCB0aGUgZW5kLlxuICogICAtICoqaWYgcG9zaXRpdmUqKjogcmV0dXJuIGFsbCBpdGVtcyBiZWZvcmUgYGVuZGAgaW5kZXggb2YgdGhlIGxpc3Qgb3Igc3RyaW5nLlxuICogICAtICoqaWYgbmVnYXRpdmUqKjogcmV0dXJuIGFsbCBpdGVtcyBiZWZvcmUgYGVuZGAgaW5kZXggZnJvbSB0aGUgZW5kIG9mIHRoZSBsaXN0IG9yIHN0cmluZy5cbiAqXG4gKiBBbGwgYmVoYXZpb3IgaXMgYmFzZWQgb24gdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIHRoZSBKYXZhU2NyaXB0IEFQSSBgQXJyYXkucHJvdG90eXBlLnNsaWNlKClgXG4gKiBhbmQgYFN0cmluZy5wcm90b3R5cGUuc2xpY2UoKWAuXG4gKlxuICogV2hlbiBvcGVyYXRpbmcgb24gYSBbTGlzdF0sIHRoZSByZXR1cm5lZCBsaXN0IGlzIGFsd2F5cyBhIGNvcHkgZXZlbiB3aGVuIGFsbFxuICogdGhlIGVsZW1lbnRzIGFyZSBiZWluZyByZXR1cm5lZC5cbiAqXG4gKiBXaGVuIG9wZXJhdGluZyBvbiBhIGJsYW5rIHZhbHVlLCB0aGUgcGlwZSByZXR1cm5zIHRoZSBibGFuayB2YWx1ZS5cbiAqXG4gKiAjIyBMaXN0IEV4YW1wbGVcbiAqXG4gKiBUaGlzIGBuZ0ZvcmAgZXhhbXBsZTpcbiAqXG4gKiB7XFxAZXhhbXBsZSBjb21tb24vcGlwZXMvdHMvc2xpY2VfcGlwZS50cyByZWdpb249J1NsaWNlUGlwZV9saXN0J31cbiAqXG4gKiBwcm9kdWNlcyB0aGUgZm9sbG93aW5nOlxuICpcbiAqICAgICA8bGk+YjwvbGk+XG4gKiAgICAgPGxpPmM8L2xpPlxuICpcbiAqICMjIFN0cmluZyBFeGFtcGxlc1xuICpcbiAqIHtcXEBleGFtcGxlIGNvbW1vbi9waXBlcy90cy9zbGljZV9waXBlLnRzIHJlZ2lvbj0nU2xpY2VQaXBlX3N0cmluZyd9XG4gKlxuICogXFxAc3RhYmxlXG4gKi9cbnZhciBTbGljZVBpcGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNsaWNlUGlwZSgpIHtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7P30gc3RhcnRcbiAgICAgKiBAcGFyYW0gez89fSBlbmRcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIFNsaWNlUGlwZS5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gKHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMuc3VwcG9ydHModmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBpbnZhbGlkUGlwZUFyZ3VtZW50RXJyb3IoU2xpY2VQaXBlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/fSBvYmpcbiAgICAgKiBAcmV0dXJuIHs/fVxuICAgICAqL1xuICAgIFNsaWNlUGlwZS5wcm90b3R5cGUuc3VwcG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KG9iaik7IH07XG4gICAgcmV0dXJuIFNsaWNlUGlwZTtcbn0oKSk7XG5TbGljZVBpcGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IFBpcGUsIGFyZ3M6IFt7IG5hbWU6ICdzbGljZScsIHB1cmU6IGZhbHNlIH0sXSB9LFxuXTtcbi8qKlxuICogQG5vY29sbGFwc2VcbiAqL1xuU2xpY2VQaXBlLmN0b3JQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW107IH07XG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG4vKipcbiAqIEBtb2R1bGVcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBzZXQgb2YgY29tbW9uIFBpcGVzLlxuICovXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiBBbmd1bGFyIHBpcGVzIHRoYXQgYXJlIGxpa2VseSB0byBiZSB1c2VkIGluIGVhY2ggYW5kIGV2ZXJ5IGFwcGxpY2F0aW9uLlxuICovXG52YXIgQ09NTU9OX1BJUEVTID0gW1xuICAgIEFzeW5jUGlwZSxcbiAgICBVcHBlckNhc2VQaXBlLFxuICAgIExvd2VyQ2FzZVBpcGUsXG4gICAgSnNvblBpcGUsXG4gICAgU2xpY2VQaXBlLFxuICAgIERlY2ltYWxQaXBlLFxuICAgIFBlcmNlbnRQaXBlLFxuICAgIFRpdGxlQ2FzZVBpcGUsXG4gICAgQ3VycmVuY3lQaXBlLFxuICAgIERhdGVQaXBlLFxuICAgIEkxOG5QbHVyYWxQaXBlLFxuICAgIEkxOG5TZWxlY3RQaXBlLFxuXTtcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8qKlxuICogVGhlIG1vZHVsZSB0aGF0IGluY2x1ZGVzIGFsbCB0aGUgYmFzaWMgQW5ndWxhciBkaXJlY3RpdmVzIGxpa2Uge1xcQGxpbmsgTmdJZn0sIHtcXEBsaW5rIE5nRm9yT2Z9LCAuLi5cbiAqXG4gKiBcXEBzdGFibGVcbiAqL1xudmFyIENvbW1vbk1vZHVsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29tbW9uTW9kdWxlKCkge1xuICAgIH1cbiAgICByZXR1cm4gQ29tbW9uTW9kdWxlO1xufSgpKTtcbkNvbW1vbk1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbQ09NTU9OX0RJUkVDVElWRVMsIENPTU1PTl9QSVBFU10sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW0NPTU1PTl9ESVJFQ1RJVkVTLCBDT01NT05fUElQRVNdLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE5nTG9jYWxpemF0aW9uLCB1c2VDbGFzczogTmdMb2NhbGVMb2NhbGl6YXRpb24gfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqXG4gKiBAbm9jb2xsYXBzZVxuICovXG5Db21tb25Nb2R1bGUuY3RvclBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXTsgfTtcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8qKlxuICogQSBESSBUb2tlbiByZXByZXNlbnRpbmcgdGhlIG1haW4gcmVuZGVyaW5nIGNvbnRleHQuIEluIGEgYnJvd3NlciB0aGlzIGlzIHRoZSBET00gRG9jdW1lbnQuXG4gKlxuICogTm90ZTogRG9jdW1lbnQgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBpbiB0aGUgQXBwbGljYXRpb24gQ29udGV4dCB3aGVuIEFwcGxpY2F0aW9uIGFuZCBSZW5kZXJpbmdcbiAqIENvbnRleHRzIGFyZSBub3QgdGhlIHNhbWUgKGUuZy4gd2hlbiBydW5uaW5nIHRoZSBhcHBsaWNhdGlvbiBpbnRvIGEgV2ViIFdvcmtlcikuXG4gKlxuICogXFxAc3RhYmxlXG4gKi9cbnZhciBET0NVTUVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbignRG9jdW1lbnRUb2tlbicpO1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xudmFyIFBMQVRGT1JNX0JST1dTRVJfSUQgPSAnYnJvd3Nlcic7XG52YXIgUExBVEZPUk1fU0VSVkVSX0lEID0gJ3NlcnZlcic7XG52YXIgUExBVEZPUk1fV09SS0VSX0FQUF9JRCA9ICdicm93c2VyV29ya2VyQXBwJztcbnZhciBQTEFURk9STV9XT1JLRVJfVUlfSUQgPSAnYnJvd3NlcldvcmtlclVpJztcbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGEgcGxhdGZvcm0gaWQgcmVwcmVzZW50cyBhIGJyb3dzZXIgcGxhdGZvcm0uXG4gKiBcXEBleHBlcmltZW50YWxcbiAqIEBwYXJhbSB7P30gcGxhdGZvcm1JZFxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gaXNQbGF0Zm9ybUJyb3dzZXIocGxhdGZvcm1JZCkge1xuICAgIHJldHVybiBwbGF0Zm9ybUlkID09PSBQTEFURk9STV9CUk9XU0VSX0lEO1xufVxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBwbGF0Zm9ybSBpZCByZXByZXNlbnRzIGEgc2VydmVyIHBsYXRmb3JtLlxuICogXFxAZXhwZXJpbWVudGFsXG4gKiBAcGFyYW0gez99IHBsYXRmb3JtSWRcbiAqIEByZXR1cm4gez99XG4gKi9cbmZ1bmN0aW9uIGlzUGxhdGZvcm1TZXJ2ZXIocGxhdGZvcm1JZCkge1xuICAgIHJldHVybiBwbGF0Zm9ybUlkID09PSBQTEFURk9STV9TRVJWRVJfSUQ7XG59XG4vKipcbiAqIFJldHVybnMgd2hldGhlciBhIHBsYXRmb3JtIGlkIHJlcHJlc2VudHMgYSB3ZWIgd29ya2VyIGFwcCBwbGF0Zm9ybS5cbiAqIFxcQGV4cGVyaW1lbnRhbFxuICogQHBhcmFtIHs/fSBwbGF0Zm9ybUlkXG4gKiBAcmV0dXJuIHs/fVxuICovXG5mdW5jdGlvbiBpc1BsYXRmb3JtV29ya2VyQXBwKHBsYXRmb3JtSWQpIHtcbiAgICByZXR1cm4gcGxhdGZvcm1JZCA9PT0gUExBVEZPUk1fV09SS0VSX0FQUF9JRDtcbn1cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGEgcGxhdGZvcm0gaWQgcmVwcmVzZW50cyBhIHdlYiB3b3JrZXIgVUkgcGxhdGZvcm0uXG4gKiBcXEBleHBlcmltZW50YWxcbiAqIEBwYXJhbSB7P30gcGxhdGZvcm1JZFxuICogQHJldHVybiB7P31cbiAqL1xuZnVuY3Rpb24gaXNQbGF0Zm9ybVdvcmtlclVpKHBsYXRmb3JtSWQpIHtcbiAgICByZXR1cm4gcGxhdGZvcm1JZCA9PT0gUExBVEZPUk1fV09SS0VSX1VJX0lEO1xufVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuLyoqXG4gKiBAbW9kdWxlXG4gKiBAZGVzY3JpcHRpb25cbiAqIEVudHJ5IHBvaW50IGZvciBhbGwgcHVibGljIEFQSXMgb2YgdGhlIGNvbW1vbiBwYWNrYWdlLlxuICovXG4vKipcbiAqIFxcQHN0YWJsZVxuICovXG52YXIgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCc0LjMuMicpO1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuLyoqXG4gKiBAbW9kdWxlXG4gKiBAZGVzY3JpcHRpb25cbiAqIEVudHJ5IHBvaW50IGZvciBhbGwgcHVibGljIEFQSXMgb2YgdGhlIGNvbW1vbiBwYWNrYWdlLlxuICovXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG4vKipcbiAqIEBtb2R1bGVcbiAqIEBkZXNjcmlwdGlvblxuICogRW50cnkgcG9pbnQgZm9yIGFsbCBwdWJsaWMgQVBJcyBvZiB0aGUgY29tbW9uIHBhY2thZ2UuXG4gKi9cbi8vIFRoaXMgZmlsZSBvbmx5IHJlZXhwb3J0cyBjb250ZW50IG9mIHRoZSBgc3JjYCBmb2xkZXIuIEtlZXAgaXQgdGhhdCB3YXkuXG4vKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5leHBvcnQgeyBOZ0xvY2FsZUxvY2FsaXphdGlvbiwgTmdMb2NhbGl6YXRpb24sIHBhcnNlQ29va2llVmFsdWUgYXMgybVwYXJzZUNvb2tpZVZhbHVlLCBDb21tb25Nb2R1bGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0Zvck9mLCBOZ0Zvck9mQ29udGV4dCwgTmdJZiwgTmdJZkNvbnRleHQsIE5nUGx1cmFsLCBOZ1BsdXJhbENhc2UsIE5nU3R5bGUsIE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UsIE5nU3dpdGNoRGVmYXVsdCwgTmdUZW1wbGF0ZU91dGxldCwgTmdDb21wb25lbnRPdXRsZXQsIERPQ1VNRU5ULCBBc3luY1BpcGUsIERhdGVQaXBlLCBJMThuUGx1cmFsUGlwZSwgSTE4blNlbGVjdFBpcGUsIEpzb25QaXBlLCBMb3dlckNhc2VQaXBlLCBDdXJyZW5jeVBpcGUsIERlY2ltYWxQaXBlLCBQZXJjZW50UGlwZSwgU2xpY2VQaXBlLCBVcHBlckNhc2VQaXBlLCBUaXRsZUNhc2VQaXBlLCBQTEFURk9STV9CUk9XU0VSX0lEIGFzIMm1UExBVEZPUk1fQlJPV1NFUl9JRCwgUExBVEZPUk1fU0VSVkVSX0lEIGFzIMm1UExBVEZPUk1fU0VSVkVSX0lELCBQTEFURk9STV9XT1JLRVJfQVBQX0lEIGFzIMm1UExBVEZPUk1fV09SS0VSX0FQUF9JRCwgUExBVEZPUk1fV09SS0VSX1VJX0lEIGFzIMm1UExBVEZPUk1fV09SS0VSX1VJX0lELCBpc1BsYXRmb3JtQnJvd3NlciwgaXNQbGF0Zm9ybVNlcnZlciwgaXNQbGF0Zm9ybVdvcmtlckFwcCwgaXNQbGF0Zm9ybVdvcmtlclVpLCBWRVJTSU9OLCBQbGF0Zm9ybUxvY2F0aW9uLCBMT0NBVElPTl9JTklUSUFMSVpFRCwgTG9jYXRpb25TdHJhdGVneSwgQVBQX0JBU0VfSFJFRiwgSGFzaExvY2F0aW9uU3RyYXRlZ3ksIFBhdGhMb2NhdGlvblN0cmF0ZWd5LCBMb2NhdGlvbiwgQ09NTU9OX0RJUkVDVElWRVMgYXMgybVhLCBDT01NT05fUElQRVMgYXMgybViIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21tb24uZXM1LmpzLm1hcFxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L0Bhbmd1bGFyL2NvbW1vbi9AYW5ndWxhci9jb21tb24uZXM1LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AYW5ndWxhci9jb21tb24vQGFuZ3VsYXIvY29tbW9uLmVzNS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9"); + +/***/ }), + +/***/ "./node_modules/@angular/compiler/@angular/compiler.es5.js": +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(\"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_core__ = __webpack_require__(\"./node_modules/@angular/core/@angular/core.es5.js\");\n/* unused harmony export VERSION */\n/* unused harmony export TEMPLATE_TRANSFORMS */\n/* unused harmony export CompilerConfig */\n/* unused harmony export JitCompiler */\n/* unused harmony export DirectiveResolver */\n/* unused harmony export PipeResolver */\n/* unused harmony export NgModuleResolver */\n/* unused harmony export DEFAULT_INTERPOLATION_CONFIG */\n/* unused harmony export InterpolationConfig */\n/* unused harmony export NgModuleCompiler */\n/* unused harmony export AssertNotNull */\n/* unused harmony export BinaryOperator */\n/* unused harmony export BinaryOperatorExpr */\n/* unused harmony export BuiltinMethod */\n/* unused harmony export BuiltinVar */\n/* unused harmony export CastExpr */\n/* unused harmony export ClassStmt */\n/* unused harmony export CommaExpr */\n/* unused harmony export CommentStmt */\n/* unused harmony export ConditionalExpr */\n/* unused harmony export DeclareFunctionStmt */\n/* unused harmony export DeclareVarStmt */\n/* unused harmony export ExpressionStatement */\n/* unused harmony export ExternalExpr */\n/* unused harmony export ExternalReference */\n/* unused harmony export FunctionExpr */\n/* unused harmony export IfStmt */\n/* unused harmony export InstantiateExpr */\n/* unused harmony export InvokeFunctionExpr */\n/* unused harmony export InvokeMethodExpr */\n/* unused harmony export LiteralArrayExpr */\n/* unused harmony export LiteralExpr */\n/* unused harmony export LiteralMapExpr */\n/* unused harmony export NotExpr */\n/* unused harmony export ReadKeyExpr */\n/* unused harmony export ReadPropExpr */\n/* unused harmony export ReadVarExpr */\n/* unused harmony export ReturnStatement */\n/* unused harmony export ThrowStmt */\n/* unused harmony export TryCatchStmt */\n/* unused harmony export WriteKeyExpr */\n/* unused harmony export WritePropExpr */\n/* unused harmony export WriteVarExpr */\n/* unused harmony export StmtModifier */\n/* unused harmony export Statement */\n/* unused harmony export EmitterVisitorContext */\n/* unused harmony export ViewCompiler */\n/* unused harmony export getParseErrors */\n/* unused harmony export isSyntaxError */\n/* unused harmony export syntaxError */\n/* unused harmony export TextAst */\n/* unused harmony export BoundTextAst */\n/* unused harmony export AttrAst */\n/* unused harmony export BoundElementPropertyAst */\n/* unused harmony export BoundEventAst */\n/* unused harmony export ReferenceAst */\n/* unused harmony export VariableAst */\n/* unused harmony export ElementAst */\n/* unused harmony export EmbeddedTemplateAst */\n/* unused harmony export BoundDirectivePropertyAst */\n/* unused harmony export DirectiveAst */\n/* unused harmony export ProviderAst */\n/* unused harmony export ProviderAstType */\n/* unused harmony export NgContentAst */\n/* unused harmony export PropertyBindingType */\n/* unused harmony export NullTemplateVisitor */\n/* unused harmony export RecursiveTemplateAstVisitor */\n/* unused harmony export templateVisitAll */\n/* unused harmony export CompileAnimationEntryMetadata */\n/* unused harmony export CompileAnimationStateMetadata */\n/* unused harmony export CompileAnimationStateDeclarationMetadata */\n/* unused harmony export CompileAnimationStateTransitionMetadata */\n/* unused harmony export CompileAnimationMetadata */\n/* unused harmony export CompileAnimationKeyframesSequenceMetadata */\n/* unused harmony export CompileAnimationStyleMetadata */\n/* unused harmony export CompileAnimationAnimateMetadata */\n/* unused harmony export CompileAnimationWithStepsMetadata */\n/* unused harmony export CompileAnimationSequenceMetadata */\n/* unused harmony export CompileAnimationGroupMetadata */\n/* unused harmony export identifierName */\n/* unused harmony export identifierModuleUrl */\n/* unused harmony export viewClassName */\n/* unused harmony export rendererTypeName */\n/* unused harmony export hostViewClassName */\n/* unused harmony export componentFactoryName */\n/* unused harmony export CompileSummaryKind */\n/* unused harmony export tokenName */\n/* unused harmony export tokenReference */\n/* unused harmony export CompileStylesheetMetadata */\n/* unused harmony export CompileTemplateMetadata */\n/* unused harmony export CompileDirectiveMetadata */\n/* unused harmony export createHostComponentMeta */\n/* unused harmony export CompilePipeMetadata */\n/* unused harmony export CompileNgModuleMetadata */\n/* unused harmony export TransitiveCompileNgModuleMetadata */\n/* unused harmony export ProviderMeta */\n/* unused harmony export flatten */\n/* unused harmony export sourceUrl */\n/* unused harmony export templateSourceUrl */\n/* unused harmony export sharedStylesheetJitUrl */\n/* unused harmony export ngModuleJitUrl */\n/* unused harmony export templateJitUrl */\n/* unused harmony export createAotCompiler */\n/* unused harmony export AotCompiler */\n/* unused harmony export analyzeNgModules */\n/* unused harmony export analyzeAndValidateNgModules */\n/* unused harmony export extractProgramSymbols */\n/* unused harmony export GeneratedFile */\n/* unused harmony export toTypeScript */\n/* unused harmony export StaticReflector */\n/* unused harmony export StaticSymbol */\n/* unused harmony export StaticSymbolCache */\n/* unused harmony export ResolvedStaticSymbol */\n/* unused harmony export StaticSymbolResolver */\n/* unused harmony export unescapeIdentifier */\n/* unused harmony export AotSummaryResolver */\n/* unused harmony export AstPath */\n/* unused harmony export SummaryResolver */\n/* unused harmony export JitSummaryResolver */\n/* unused harmony export COMPILER_PROVIDERS */\n/* unused harmony export JitCompilerFactory */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return platformCoreDynamic; });\n/* unused harmony export JitReflector */\n/* unused harmony export CompileReflector */\n/* unused harmony export createUrlResolverWithoutPackagePrefix */\n/* unused harmony export createOfflineCompileUrlResolver */\n/* unused harmony export DEFAULT_PACKAGE_URL_PROVIDER */\n/* unused harmony export UrlResolver */\n/* unused harmony export getUrlScheme */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ResourceLoader; });\n/* unused harmony export ElementSchemaRegistry */\n/* unused harmony export Extractor */\n/* unused harmony export I18NHtmlParser */\n/* unused harmony export MessageBundle */\n/* unused harmony export Serializer */\n/* unused harmony export Xliff */\n/* unused harmony export Xliff2 */\n/* unused harmony export Xmb */\n/* unused harmony export Xtb */\n/* unused harmony export DirectiveNormalizer */\n/* unused harmony export ParserError */\n/* unused harmony export ParseSpan */\n/* unused harmony export AST */\n/* unused harmony export Quote */\n/* unused harmony export EmptyExpr */\n/* unused harmony export ImplicitReceiver */\n/* unused harmony export Chain */\n/* unused harmony export Conditional */\n/* unused harmony export PropertyRead */\n/* unused harmony export PropertyWrite */\n/* unused harmony export SafePropertyRead */\n/* unused harmony export KeyedRead */\n/* unused harmony export KeyedWrite */\n/* unused harmony export BindingPipe */\n/* unused harmony export LiteralPrimitive */\n/* unused harmony export LiteralArray */\n/* unused harmony export LiteralMap */\n/* unused harmony export Interpolation */\n/* unused harmony export Binary */\n/* unused harmony export PrefixNot */\n/* unused harmony export NonNullAssert */\n/* unused harmony export MethodCall */\n/* unused harmony export SafeMethodCall */\n/* unused harmony export FunctionCall */\n/* unused harmony export ASTWithSource */\n/* unused harmony export TemplateBinding */\n/* unused harmony export NullAstVisitor */\n/* unused harmony export RecursiveAstVisitor */\n/* unused harmony export AstTransformer */\n/* unused harmony export visitAstChildren */\n/* unused harmony export TokenType */\n/* unused harmony export Lexer */\n/* unused harmony export Token */\n/* unused harmony export EOF */\n/* unused harmony export isIdentifier */\n/* unused harmony export isQuote */\n/* unused harmony export SplitInterpolation */\n/* unused harmony export TemplateBindingParseResult */\n/* unused harmony export Parser */\n/* unused harmony export _ParseAST */\n/* unused harmony export ERROR_COLLECTOR_TOKEN */\n/* unused harmony export CompileMetadataResolver */\n/* unused harmony export Text */\n/* unused harmony export Expansion */\n/* unused harmony export ExpansionCase */\n/* unused harmony export Attribute */\n/* unused harmony export Element */\n/* unused harmony export Comment */\n/* unused harmony export visitAll */\n/* unused harmony export RecursiveVisitor */\n/* unused harmony export findNode */\n/* unused harmony export ParseTreeResult */\n/* unused harmony export TreeError */\n/* unused harmony export HtmlParser */\n/* unused harmony export HtmlTagDefinition */\n/* unused harmony export getHtmlTagDefinition */\n/* unused harmony export TagContentType */\n/* unused harmony export splitNsName */\n/* unused harmony export isNgContainer */\n/* unused harmony export isNgContent */\n/* unused harmony export isNgTemplate */\n/* unused harmony export getNsPrefix */\n/* unused harmony export mergeNsAndName */\n/* unused harmony export NAMED_ENTITIES */\n/* unused harmony export debugOutputAstAsTypeScript */\n/* unused harmony export TypeScriptEmitter */\n/* unused harmony export ParseLocation */\n/* unused harmony export ParseSourceFile */\n/* unused harmony export ParseSourceSpan */\n/* unused harmony export ParseErrorLevel */\n/* unused harmony export ParseError */\n/* unused harmony export typeSourceSpan */\n/* unused harmony export DomElementSchemaRegistry */\n/* unused harmony export CssSelector */\n/* unused harmony export SelectorMatcher */\n/* unused harmony export SelectorListContext */\n/* unused harmony export SelectorContext */\n/* unused harmony export StylesCompileDependency */\n/* unused harmony export CompiledStylesheet */\n/* unused harmony export StyleCompiler */\n/* unused harmony export TemplateParseError */\n/* unused harmony export TemplateParseResult */\n/* unused harmony export TemplateParser */\n/* unused harmony export splitClasses */\n/* unused harmony export createElementCssSelector */\n/* unused harmony export removeSummaryDuplicates */\n\n/**\n * @license Angular v4.3.2\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\n */\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n/**\n * \\@stable\n */\nvar VERSION = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Version\"]('4.3.2');\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A segment of text within the template.\n */\nvar TextAst = (function () {\n /**\n * @param {?} value\n * @param {?} ngContentIndex\n * @param {?} sourceSpan\n */\n function TextAst(value, ngContentIndex, sourceSpan) {\n this.value = value;\n this.ngContentIndex = ngContentIndex;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n TextAst.prototype.visit = function (visitor, context) { return visitor.visitText(this, context); };\n return TextAst;\n}());\n/**\n * A bound expression within the text of a template.\n */\nvar BoundTextAst = (function () {\n /**\n * @param {?} value\n * @param {?} ngContentIndex\n * @param {?} sourceSpan\n */\n function BoundTextAst(value, ngContentIndex, sourceSpan) {\n this.value = value;\n this.ngContentIndex = ngContentIndex;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n BoundTextAst.prototype.visit = function (visitor, context) {\n return visitor.visitBoundText(this, context);\n };\n return BoundTextAst;\n}());\n/**\n * A plain attribute on an element.\n */\nvar AttrAst = (function () {\n /**\n * @param {?} name\n * @param {?} value\n * @param {?} sourceSpan\n */\n function AttrAst(name, value, sourceSpan) {\n this.name = name;\n this.value = value;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n AttrAst.prototype.visit = function (visitor, context) { return visitor.visitAttr(this, context); };\n return AttrAst;\n}());\n/**\n * A binding for an element property (e.g. `[property]=\"expression\"`) or an animation trigger (e.g.\n * `[\\@trigger]=\"stateExp\"`)\n */\nvar BoundElementPropertyAst = (function () {\n /**\n * @param {?} name\n * @param {?} type\n * @param {?} securityContext\n * @param {?} value\n * @param {?} unit\n * @param {?} sourceSpan\n */\n function BoundElementPropertyAst(name, type, securityContext, value, unit, sourceSpan) {\n this.name = name;\n this.type = type;\n this.securityContext = securityContext;\n this.value = value;\n this.unit = unit;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n BoundElementPropertyAst.prototype.visit = function (visitor, context) {\n return visitor.visitElementProperty(this, context);\n };\n Object.defineProperty(BoundElementPropertyAst.prototype, \"isAnimation\", {\n /**\n * @return {?}\n */\n get: function () { return this.type === PropertyBindingType.Animation; },\n enumerable: true,\n configurable: true\n });\n return BoundElementPropertyAst;\n}());\n/**\n * A binding for an element event (e.g. `(event)=\"handler()\"`) or an animation trigger event (e.g.\n * `(\\@trigger.phase)=\"callback($event)\"`).\n */\nvar BoundEventAst = (function () {\n /**\n * @param {?} name\n * @param {?} target\n * @param {?} phase\n * @param {?} handler\n * @param {?} sourceSpan\n */\n function BoundEventAst(name, target, phase, handler, sourceSpan) {\n this.name = name;\n this.target = target;\n this.phase = phase;\n this.handler = handler;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} name\n * @param {?} target\n * @param {?} phase\n * @return {?}\n */\n BoundEventAst.calcFullName = function (name, target, phase) {\n if (target) {\n return target + \":\" + name;\n }\n else if (phase) {\n return \"@\" + name + \".\" + phase;\n }\n else {\n return name;\n }\n };\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n BoundEventAst.prototype.visit = function (visitor, context) {\n return visitor.visitEvent(this, context);\n };\n Object.defineProperty(BoundEventAst.prototype, \"fullName\", {\n /**\n * @return {?}\n */\n get: function () { return BoundEventAst.calcFullName(this.name, this.target, this.phase); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BoundEventAst.prototype, \"isAnimation\", {\n /**\n * @return {?}\n */\n get: function () { return !!this.phase; },\n enumerable: true,\n configurable: true\n });\n return BoundEventAst;\n}());\n/**\n * A reference declaration on an element (e.g. `let someName=\"expression\"`).\n */\nvar ReferenceAst = (function () {\n /**\n * @param {?} name\n * @param {?} value\n * @param {?} sourceSpan\n */\n function ReferenceAst(name, value, sourceSpan) {\n this.name = name;\n this.value = value;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n ReferenceAst.prototype.visit = function (visitor, context) {\n return visitor.visitReference(this, context);\n };\n return ReferenceAst;\n}());\n/**\n * A variable declaration on a (e.g. `var-someName=\"someLocalName\"`).\n */\nvar VariableAst = (function () {\n /**\n * @param {?} name\n * @param {?} value\n * @param {?} sourceSpan\n */\n function VariableAst(name, value, sourceSpan) {\n this.name = name;\n this.value = value;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n VariableAst.prototype.visit = function (visitor, context) {\n return visitor.visitVariable(this, context);\n };\n return VariableAst;\n}());\n/**\n * An element declaration in a template.\n */\nvar ElementAst = (function () {\n /**\n * @param {?} name\n * @param {?} attrs\n * @param {?} inputs\n * @param {?} outputs\n * @param {?} references\n * @param {?} directives\n * @param {?} providers\n * @param {?} hasViewContainer\n * @param {?} queryMatches\n * @param {?} children\n * @param {?} ngContentIndex\n * @param {?} sourceSpan\n * @param {?} endSourceSpan\n */\n function ElementAst(name, attrs, inputs, outputs, references, directives, providers, hasViewContainer, queryMatches, children, ngContentIndex, sourceSpan, endSourceSpan) {\n this.name = name;\n this.attrs = attrs;\n this.inputs = inputs;\n this.outputs = outputs;\n this.references = references;\n this.directives = directives;\n this.providers = providers;\n this.hasViewContainer = hasViewContainer;\n this.queryMatches = queryMatches;\n this.children = children;\n this.ngContentIndex = ngContentIndex;\n this.sourceSpan = sourceSpan;\n this.endSourceSpan = endSourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n ElementAst.prototype.visit = function (visitor, context) {\n return visitor.visitElement(this, context);\n };\n return ElementAst;\n}());\n/**\n * A `` element included in an Angular template.\n */\nvar EmbeddedTemplateAst = (function () {\n /**\n * @param {?} attrs\n * @param {?} outputs\n * @param {?} references\n * @param {?} variables\n * @param {?} directives\n * @param {?} providers\n * @param {?} hasViewContainer\n * @param {?} queryMatches\n * @param {?} children\n * @param {?} ngContentIndex\n * @param {?} sourceSpan\n */\n function EmbeddedTemplateAst(attrs, outputs, references, variables, directives, providers, hasViewContainer, queryMatches, children, ngContentIndex, sourceSpan) {\n this.attrs = attrs;\n this.outputs = outputs;\n this.references = references;\n this.variables = variables;\n this.directives = directives;\n this.providers = providers;\n this.hasViewContainer = hasViewContainer;\n this.queryMatches = queryMatches;\n this.children = children;\n this.ngContentIndex = ngContentIndex;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n EmbeddedTemplateAst.prototype.visit = function (visitor, context) {\n return visitor.visitEmbeddedTemplate(this, context);\n };\n return EmbeddedTemplateAst;\n}());\n/**\n * A directive property with a bound value (e.g. `*ngIf=\"condition\").\n */\nvar BoundDirectivePropertyAst = (function () {\n /**\n * @param {?} directiveName\n * @param {?} templateName\n * @param {?} value\n * @param {?} sourceSpan\n */\n function BoundDirectivePropertyAst(directiveName, templateName, value, sourceSpan) {\n this.directiveName = directiveName;\n this.templateName = templateName;\n this.value = value;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n BoundDirectivePropertyAst.prototype.visit = function (visitor, context) {\n return visitor.visitDirectiveProperty(this, context);\n };\n return BoundDirectivePropertyAst;\n}());\n/**\n * A directive declared on an element.\n */\nvar DirectiveAst = (function () {\n /**\n * @param {?} directive\n * @param {?} inputs\n * @param {?} hostProperties\n * @param {?} hostEvents\n * @param {?} contentQueryStartId\n * @param {?} sourceSpan\n */\n function DirectiveAst(directive, inputs, hostProperties, hostEvents, contentQueryStartId, sourceSpan) {\n this.directive = directive;\n this.inputs = inputs;\n this.hostProperties = hostProperties;\n this.hostEvents = hostEvents;\n this.contentQueryStartId = contentQueryStartId;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n DirectiveAst.prototype.visit = function (visitor, context) {\n return visitor.visitDirective(this, context);\n };\n return DirectiveAst;\n}());\n/**\n * A provider declared on an element\n */\nvar ProviderAst = (function () {\n /**\n * @param {?} token\n * @param {?} multiProvider\n * @param {?} eager\n * @param {?} providers\n * @param {?} providerType\n * @param {?} lifecycleHooks\n * @param {?} sourceSpan\n */\n function ProviderAst(token, multiProvider, eager, providers, providerType, lifecycleHooks, sourceSpan) {\n this.token = token;\n this.multiProvider = multiProvider;\n this.eager = eager;\n this.providers = providers;\n this.providerType = providerType;\n this.lifecycleHooks = lifecycleHooks;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n ProviderAst.prototype.visit = function (visitor, context) {\n // No visit method in the visitor for now...\n return null;\n };\n return ProviderAst;\n}());\nvar ProviderAstType = {};\nProviderAstType.PublicService = 0;\nProviderAstType.PrivateService = 1;\nProviderAstType.Component = 2;\nProviderAstType.Directive = 3;\nProviderAstType.Builtin = 4;\nProviderAstType[ProviderAstType.PublicService] = \"PublicService\";\nProviderAstType[ProviderAstType.PrivateService] = \"PrivateService\";\nProviderAstType[ProviderAstType.Component] = \"Component\";\nProviderAstType[ProviderAstType.Directive] = \"Directive\";\nProviderAstType[ProviderAstType.Builtin] = \"Builtin\";\n/**\n * Position where content is to be projected (instance of `` in a template).\n */\nvar NgContentAst = (function () {\n /**\n * @param {?} index\n * @param {?} ngContentIndex\n * @param {?} sourceSpan\n */\n function NgContentAst(index, ngContentIndex, sourceSpan) {\n this.index = index;\n this.ngContentIndex = ngContentIndex;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n NgContentAst.prototype.visit = function (visitor, context) {\n return visitor.visitNgContent(this, context);\n };\n return NgContentAst;\n}());\nvar PropertyBindingType = {};\nPropertyBindingType.Property = 0;\nPropertyBindingType.Attribute = 1;\nPropertyBindingType.Class = 2;\nPropertyBindingType.Style = 3;\nPropertyBindingType.Animation = 4;\nPropertyBindingType[PropertyBindingType.Property] = \"Property\";\nPropertyBindingType[PropertyBindingType.Attribute] = \"Attribute\";\nPropertyBindingType[PropertyBindingType.Class] = \"Class\";\nPropertyBindingType[PropertyBindingType.Style] = \"Style\";\nPropertyBindingType[PropertyBindingType.Animation] = \"Animation\";\n/**\n * A visitor that accepts each node but doesn't do anything. It is intended to be used\n * as the base class for a visitor that is only interested in a subset of the node types.\n */\nvar NullTemplateVisitor = (function () {\n function NullTemplateVisitor() {\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullTemplateVisitor.prototype.visitNgContent = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullTemplateVisitor.prototype.visitEmbeddedTemplate = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullTemplateVisitor.prototype.visitElement = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullTemplateVisitor.prototype.visitReference = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullTemplateVisitor.prototype.visitVariable = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullTemplateVisitor.prototype.visitEvent = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullTemplateVisitor.prototype.visitElementProperty = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullTemplateVisitor.prototype.visitAttr = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullTemplateVisitor.prototype.visitBoundText = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullTemplateVisitor.prototype.visitText = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullTemplateVisitor.prototype.visitDirective = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullTemplateVisitor.prototype.visitDirectiveProperty = function (ast, context) { };\n return NullTemplateVisitor;\n}());\n/**\n * Base class that can be used to build a visitor that visits each node\n * in an template ast recursively.\n */\nvar RecursiveTemplateAstVisitor = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](RecursiveTemplateAstVisitor, _super);\n function RecursiveTemplateAstVisitor() {\n return _super.call(this) || this;\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveTemplateAstVisitor.prototype.visitEmbeddedTemplate = function (ast, context) {\n return this.visitChildren(context, function (visit) {\n visit(ast.attrs);\n visit(ast.references);\n visit(ast.variables);\n visit(ast.directives);\n visit(ast.providers);\n visit(ast.children);\n });\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveTemplateAstVisitor.prototype.visitElement = function (ast, context) {\n return this.visitChildren(context, function (visit) {\n visit(ast.attrs);\n visit(ast.inputs);\n visit(ast.outputs);\n visit(ast.references);\n visit(ast.directives);\n visit(ast.providers);\n visit(ast.children);\n });\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveTemplateAstVisitor.prototype.visitDirective = function (ast, context) {\n return this.visitChildren(context, function (visit) {\n visit(ast.inputs);\n visit(ast.hostProperties);\n visit(ast.hostEvents);\n });\n };\n /**\n * @template T\n * @param {?} context\n * @param {?} cb\n * @return {?}\n */\n RecursiveTemplateAstVisitor.prototype.visitChildren = function (context, cb) {\n var /** @type {?} */ results = [];\n var /** @type {?} */ t = this;\n /**\n * @template T\n * @param {?} children\n * @return {?}\n */\n function visit(children) {\n if (children && children.length)\n results.push(templateVisitAll(t, children, context));\n }\n cb(visit);\n return [].concat.apply([], results);\n };\n return RecursiveTemplateAstVisitor;\n}(NullTemplateVisitor));\n/**\n * Visit every node in a list of {\\@link TemplateAst}s with the given {\\@link TemplateAstVisitor}.\n * @param {?} visitor\n * @param {?} asts\n * @param {?=} context\n * @return {?}\n */\nfunction templateVisitAll(visitor, asts, context) {\n if (context === void 0) { context = null; }\n var /** @type {?} */ result = [];\n var /** @type {?} */ visit = visitor.visit ?\n function (ast) { return ((visitor.visit))(ast, context) || ast.visit(visitor, context); } :\n function (ast) { return ast.visit(visitor, context); };\n asts.forEach(function (ast) {\n var /** @type {?} */ astResult = visit(ast);\n if (astResult) {\n result.push(astResult);\n }\n });\n return result;\n}\n/**\n * A token representing the a reference to a static type.\n *\n * This token is unique for a filePath and name and can be used as a hash table key.\n */\nvar StaticSymbol = (function () {\n /**\n * @param {?} filePath\n * @param {?} name\n * @param {?} members\n */\n function StaticSymbol(filePath, name, members) {\n this.filePath = filePath;\n this.name = name;\n this.members = members;\n }\n /**\n * @return {?}\n */\n StaticSymbol.prototype.assertNoMembers = function () {\n if (this.members.length) {\n throw new Error(\"Illegal state: symbol without members expected, but got \" + JSON.stringify(this) + \".\");\n }\n };\n return StaticSymbol;\n}());\n/**\n * A cache of static symbol used by the StaticReflector to return the same symbol for the\n * same symbol values.\n */\nvar StaticSymbolCache = (function () {\n function StaticSymbolCache() {\n this.cache = new Map();\n }\n /**\n * @param {?} declarationFile\n * @param {?} name\n * @param {?=} members\n * @return {?}\n */\n StaticSymbolCache.prototype.get = function (declarationFile, name, members) {\n members = members || [];\n var /** @type {?} */ memberSuffix = members.length ? \".\" + members.join('.') : '';\n var /** @type {?} */ key = \"\\\"\" + declarationFile + \"\\\".\" + name + memberSuffix;\n var /** @type {?} */ result = this.cache.get(key);\n if (!result) {\n result = new StaticSymbol(declarationFile, name, members);\n this.cache.set(key, result);\n }\n return result;\n };\n return StaticSymbolCache;\n}());\nvar TagContentType = {};\nTagContentType.RAW_TEXT = 0;\nTagContentType.ESCAPABLE_RAW_TEXT = 1;\nTagContentType.PARSABLE_DATA = 2;\nTagContentType[TagContentType.RAW_TEXT] = \"RAW_TEXT\";\nTagContentType[TagContentType.ESCAPABLE_RAW_TEXT] = \"ESCAPABLE_RAW_TEXT\";\nTagContentType[TagContentType.PARSABLE_DATA] = \"PARSABLE_DATA\";\n/**\n * @param {?} elementName\n * @return {?}\n */\nfunction splitNsName(elementName) {\n if (elementName[0] != ':') {\n return [null, elementName];\n }\n var /** @type {?} */ colonIndex = elementName.indexOf(':', 1);\n if (colonIndex == -1) {\n throw new Error(\"Unsupported format \\\"\" + elementName + \"\\\" expecting \\\":namespace:name\\\"\");\n }\n return [elementName.slice(1, colonIndex), elementName.slice(colonIndex + 1)];\n}\n/**\n * @param {?} tagName\n * @return {?}\n */\nfunction isNgContainer(tagName) {\n return splitNsName(tagName)[1] === 'ng-container';\n}\n/**\n * @param {?} tagName\n * @return {?}\n */\nfunction isNgContent(tagName) {\n return splitNsName(tagName)[1] === 'ng-content';\n}\n/**\n * @param {?} tagName\n * @return {?}\n */\nfunction isNgTemplate(tagName) {\n return splitNsName(tagName)[1] === 'ng-template';\n}\n/**\n * @param {?} fullName\n * @return {?}\n */\nfunction getNsPrefix(fullName) {\n return fullName === null ? null : splitNsName(fullName)[0];\n}\n/**\n * @param {?} prefix\n * @param {?} localName\n * @return {?}\n */\nfunction mergeNsAndName(prefix, localName) {\n return prefix ? \":\" + prefix + \":\" + localName : localName;\n}\n// see http://www.w3.org/TR/html51/syntax.html#named-character-references\n// see https://html.spec.whatwg.org/multipage/entities.json\n// This list is not exhaustive to keep the compiler footprint low.\n// The `{` / `ƫ` syntax should be used when the named character reference does not\n// exist.\nvar NAMED_ENTITIES = {\n 'Aacute': '\\u00C1',\n 'aacute': '\\u00E1',\n 'Acirc': '\\u00C2',\n 'acirc': '\\u00E2',\n 'acute': '\\u00B4',\n 'AElig': '\\u00C6',\n 'aelig': '\\u00E6',\n 'Agrave': '\\u00C0',\n 'agrave': '\\u00E0',\n 'alefsym': '\\u2135',\n 'Alpha': '\\u0391',\n 'alpha': '\\u03B1',\n 'amp': '&',\n 'and': '\\u2227',\n 'ang': '\\u2220',\n 'apos': '\\u0027',\n 'Aring': '\\u00C5',\n 'aring': '\\u00E5',\n 'asymp': '\\u2248',\n 'Atilde': '\\u00C3',\n 'atilde': '\\u00E3',\n 'Auml': '\\u00C4',\n 'auml': '\\u00E4',\n 'bdquo': '\\u201E',\n 'Beta': '\\u0392',\n 'beta': '\\u03B2',\n 'brvbar': '\\u00A6',\n 'bull': '\\u2022',\n 'cap': '\\u2229',\n 'Ccedil': '\\u00C7',\n 'ccedil': '\\u00E7',\n 'cedil': '\\u00B8',\n 'cent': '\\u00A2',\n 'Chi': '\\u03A7',\n 'chi': '\\u03C7',\n 'circ': '\\u02C6',\n 'clubs': '\\u2663',\n 'cong': '\\u2245',\n 'copy': '\\u00A9',\n 'crarr': '\\u21B5',\n 'cup': '\\u222A',\n 'curren': '\\u00A4',\n 'dagger': '\\u2020',\n 'Dagger': '\\u2021',\n 'darr': '\\u2193',\n 'dArr': '\\u21D3',\n 'deg': '\\u00B0',\n 'Delta': '\\u0394',\n 'delta': '\\u03B4',\n 'diams': '\\u2666',\n 'divide': '\\u00F7',\n 'Eacute': '\\u00C9',\n 'eacute': '\\u00E9',\n 'Ecirc': '\\u00CA',\n 'ecirc': '\\u00EA',\n 'Egrave': '\\u00C8',\n 'egrave': '\\u00E8',\n 'empty': '\\u2205',\n 'emsp': '\\u2003',\n 'ensp': '\\u2002',\n 'Epsilon': '\\u0395',\n 'epsilon': '\\u03B5',\n 'equiv': '\\u2261',\n 'Eta': '\\u0397',\n 'eta': '\\u03B7',\n 'ETH': '\\u00D0',\n 'eth': '\\u00F0',\n 'Euml': '\\u00CB',\n 'euml': '\\u00EB',\n 'euro': '\\u20AC',\n 'exist': '\\u2203',\n 'fnof': '\\u0192',\n 'forall': '\\u2200',\n 'frac12': '\\u00BD',\n 'frac14': '\\u00BC',\n 'frac34': '\\u00BE',\n 'frasl': '\\u2044',\n 'Gamma': '\\u0393',\n 'gamma': '\\u03B3',\n 'ge': '\\u2265',\n 'gt': '>',\n 'harr': '\\u2194',\n 'hArr': '\\u21D4',\n 'hearts': '\\u2665',\n 'hellip': '\\u2026',\n 'Iacute': '\\u00CD',\n 'iacute': '\\u00ED',\n 'Icirc': '\\u00CE',\n 'icirc': '\\u00EE',\n 'iexcl': '\\u00A1',\n 'Igrave': '\\u00CC',\n 'igrave': '\\u00EC',\n 'image': '\\u2111',\n 'infin': '\\u221E',\n 'int': '\\u222B',\n 'Iota': '\\u0399',\n 'iota': '\\u03B9',\n 'iquest': '\\u00BF',\n 'isin': '\\u2208',\n 'Iuml': '\\u00CF',\n 'iuml': '\\u00EF',\n 'Kappa': '\\u039A',\n 'kappa': '\\u03BA',\n 'Lambda': '\\u039B',\n 'lambda': '\\u03BB',\n 'lang': '\\u27E8',\n 'laquo': '\\u00AB',\n 'larr': '\\u2190',\n 'lArr': '\\u21D0',\n 'lceil': '\\u2308',\n 'ldquo': '\\u201C',\n 'le': '\\u2264',\n 'lfloor': '\\u230A',\n 'lowast': '\\u2217',\n 'loz': '\\u25CA',\n 'lrm': '\\u200E',\n 'lsaquo': '\\u2039',\n 'lsquo': '\\u2018',\n 'lt': '<',\n 'macr': '\\u00AF',\n 'mdash': '\\u2014',\n 'micro': '\\u00B5',\n 'middot': '\\u00B7',\n 'minus': '\\u2212',\n 'Mu': '\\u039C',\n 'mu': '\\u03BC',\n 'nabla': '\\u2207',\n 'nbsp': '\\u00A0',\n 'ndash': '\\u2013',\n 'ne': '\\u2260',\n 'ni': '\\u220B',\n 'not': '\\u00AC',\n 'notin': '\\u2209',\n 'nsub': '\\u2284',\n 'Ntilde': '\\u00D1',\n 'ntilde': '\\u00F1',\n 'Nu': '\\u039D',\n 'nu': '\\u03BD',\n 'Oacute': '\\u00D3',\n 'oacute': '\\u00F3',\n 'Ocirc': '\\u00D4',\n 'ocirc': '\\u00F4',\n 'OElig': '\\u0152',\n 'oelig': '\\u0153',\n 'Ograve': '\\u00D2',\n 'ograve': '\\u00F2',\n 'oline': '\\u203E',\n 'Omega': '\\u03A9',\n 'omega': '\\u03C9',\n 'Omicron': '\\u039F',\n 'omicron': '\\u03BF',\n 'oplus': '\\u2295',\n 'or': '\\u2228',\n 'ordf': '\\u00AA',\n 'ordm': '\\u00BA',\n 'Oslash': '\\u00D8',\n 'oslash': '\\u00F8',\n 'Otilde': '\\u00D5',\n 'otilde': '\\u00F5',\n 'otimes': '\\u2297',\n 'Ouml': '\\u00D6',\n 'ouml': '\\u00F6',\n 'para': '\\u00B6',\n 'permil': '\\u2030',\n 'perp': '\\u22A5',\n 'Phi': '\\u03A6',\n 'phi': '\\u03C6',\n 'Pi': '\\u03A0',\n 'pi': '\\u03C0',\n 'piv': '\\u03D6',\n 'plusmn': '\\u00B1',\n 'pound': '\\u00A3',\n 'prime': '\\u2032',\n 'Prime': '\\u2033',\n 'prod': '\\u220F',\n 'prop': '\\u221D',\n 'Psi': '\\u03A8',\n 'psi': '\\u03C8',\n 'quot': '\\u0022',\n 'radic': '\\u221A',\n 'rang': '\\u27E9',\n 'raquo': '\\u00BB',\n 'rarr': '\\u2192',\n 'rArr': '\\u21D2',\n 'rceil': '\\u2309',\n 'rdquo': '\\u201D',\n 'real': '\\u211C',\n 'reg': '\\u00AE',\n 'rfloor': '\\u230B',\n 'Rho': '\\u03A1',\n 'rho': '\\u03C1',\n 'rlm': '\\u200F',\n 'rsaquo': '\\u203A',\n 'rsquo': '\\u2019',\n 'sbquo': '\\u201A',\n 'Scaron': '\\u0160',\n 'scaron': '\\u0161',\n 'sdot': '\\u22C5',\n 'sect': '\\u00A7',\n 'shy': '\\u00AD',\n 'Sigma': '\\u03A3',\n 'sigma': '\\u03C3',\n 'sigmaf': '\\u03C2',\n 'sim': '\\u223C',\n 'spades': '\\u2660',\n 'sub': '\\u2282',\n 'sube': '\\u2286',\n 'sum': '\\u2211',\n 'sup': '\\u2283',\n 'sup1': '\\u00B9',\n 'sup2': '\\u00B2',\n 'sup3': '\\u00B3',\n 'supe': '\\u2287',\n 'szlig': '\\u00DF',\n 'Tau': '\\u03A4',\n 'tau': '\\u03C4',\n 'there4': '\\u2234',\n 'Theta': '\\u0398',\n 'theta': '\\u03B8',\n 'thetasym': '\\u03D1',\n 'thinsp': '\\u2009',\n 'THORN': '\\u00DE',\n 'thorn': '\\u00FE',\n 'tilde': '\\u02DC',\n 'times': '\\u00D7',\n 'trade': '\\u2122',\n 'Uacute': '\\u00DA',\n 'uacute': '\\u00FA',\n 'uarr': '\\u2191',\n 'uArr': '\\u21D1',\n 'Ucirc': '\\u00DB',\n 'ucirc': '\\u00FB',\n 'Ugrave': '\\u00D9',\n 'ugrave': '\\u00F9',\n 'uml': '\\u00A8',\n 'upsih': '\\u03D2',\n 'Upsilon': '\\u03A5',\n 'upsilon': '\\u03C5',\n 'Uuml': '\\u00DC',\n 'uuml': '\\u00FC',\n 'weierp': '\\u2118',\n 'Xi': '\\u039E',\n 'xi': '\\u03BE',\n 'Yacute': '\\u00DD',\n 'yacute': '\\u00FD',\n 'yen': '\\u00A5',\n 'yuml': '\\u00FF',\n 'Yuml': '\\u0178',\n 'Zeta': '\\u0396',\n 'zeta': '\\u03B6',\n 'zwj': '\\u200D',\n 'zwnj': '\\u200C',\n};\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar HtmlTagDefinition = (function () {\n /**\n * @param {?=} __0\n */\n function HtmlTagDefinition(_a) {\n var _b = _a === void 0 ? {} : _a, closedByChildren = _b.closedByChildren, requiredParents = _b.requiredParents, implicitNamespacePrefix = _b.implicitNamespacePrefix, _c = _b.contentType, contentType = _c === void 0 ? TagContentType.PARSABLE_DATA : _c, _d = _b.closedByParent, closedByParent = _d === void 0 ? false : _d, _e = _b.isVoid, isVoid = _e === void 0 ? false : _e, _f = _b.ignoreFirstLf, ignoreFirstLf = _f === void 0 ? false : _f;\n var _this = this;\n this.closedByChildren = {};\n this.closedByParent = false;\n this.canSelfClose = false;\n if (closedByChildren && closedByChildren.length > 0) {\n closedByChildren.forEach(function (tagName) { return _this.closedByChildren[tagName] = true; });\n }\n this.isVoid = isVoid;\n this.closedByParent = closedByParent || isVoid;\n if (requiredParents && requiredParents.length > 0) {\n this.requiredParents = {};\n // The first parent is the list is automatically when none of the listed parents are present\n this.parentToAdd = requiredParents[0];\n requiredParents.forEach(function (tagName) { return _this.requiredParents[tagName] = true; });\n }\n this.implicitNamespacePrefix = implicitNamespacePrefix || null;\n this.contentType = contentType;\n this.ignoreFirstLf = ignoreFirstLf;\n }\n /**\n * @param {?} currentParent\n * @return {?}\n */\n HtmlTagDefinition.prototype.requireExtraParent = function (currentParent) {\n if (!this.requiredParents) {\n return false;\n }\n if (!currentParent) {\n return true;\n }\n var /** @type {?} */ lcParent = currentParent.toLowerCase();\n var /** @type {?} */ isParentTemplate = lcParent === 'template' || currentParent === 'ng-template';\n return !isParentTemplate && this.requiredParents[lcParent] != true;\n };\n /**\n * @param {?} name\n * @return {?}\n */\n HtmlTagDefinition.prototype.isClosedByChild = function (name) {\n return this.isVoid || name.toLowerCase() in this.closedByChildren;\n };\n return HtmlTagDefinition;\n}());\n// see http://www.w3.org/TR/html51/syntax.html#optional-tags\n// This implementation does not fully conform to the HTML5 spec.\nvar TAG_DEFINITIONS = {\n 'base': new HtmlTagDefinition({ isVoid: true }),\n 'meta': new HtmlTagDefinition({ isVoid: true }),\n 'area': new HtmlTagDefinition({ isVoid: true }),\n 'embed': new HtmlTagDefinition({ isVoid: true }),\n 'link': new HtmlTagDefinition({ isVoid: true }),\n 'img': new HtmlTagDefinition({ isVoid: true }),\n 'input': new HtmlTagDefinition({ isVoid: true }),\n 'param': new HtmlTagDefinition({ isVoid: true }),\n 'hr': new HtmlTagDefinition({ isVoid: true }),\n 'br': new HtmlTagDefinition({ isVoid: true }),\n 'source': new HtmlTagDefinition({ isVoid: true }),\n 'track': new HtmlTagDefinition({ isVoid: true }),\n 'wbr': new HtmlTagDefinition({ isVoid: true }),\n 'p': new HtmlTagDefinition({\n closedByChildren: [\n 'address', 'article', 'aside', 'blockquote', 'div', 'dl', 'fieldset', 'footer', 'form',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr',\n 'main', 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul'\n ],\n closedByParent: true\n }),\n 'thead': new HtmlTagDefinition({ closedByChildren: ['tbody', 'tfoot'] }),\n 'tbody': new HtmlTagDefinition({ closedByChildren: ['tbody', 'tfoot'], closedByParent: true }),\n 'tfoot': new HtmlTagDefinition({ closedByChildren: ['tbody'], closedByParent: true }),\n 'tr': new HtmlTagDefinition({\n closedByChildren: ['tr'],\n requiredParents: ['tbody', 'tfoot', 'thead'],\n closedByParent: true\n }),\n 'td': new HtmlTagDefinition({ closedByChildren: ['td', 'th'], closedByParent: true }),\n 'th': new HtmlTagDefinition({ closedByChildren: ['td', 'th'], closedByParent: true }),\n 'col': new HtmlTagDefinition({ requiredParents: ['colgroup'], isVoid: true }),\n 'svg': new HtmlTagDefinition({ implicitNamespacePrefix: 'svg' }),\n 'math': new HtmlTagDefinition({ implicitNamespacePrefix: 'math' }),\n 'li': new HtmlTagDefinition({ closedByChildren: ['li'], closedByParent: true }),\n 'dt': new HtmlTagDefinition({ closedByChildren: ['dt', 'dd'] }),\n 'dd': new HtmlTagDefinition({ closedByChildren: ['dt', 'dd'], closedByParent: true }),\n 'rb': new HtmlTagDefinition({ closedByChildren: ['rb', 'rt', 'rtc', 'rp'], closedByParent: true }),\n 'rt': new HtmlTagDefinition({ closedByChildren: ['rb', 'rt', 'rtc', 'rp'], closedByParent: true }),\n 'rtc': new HtmlTagDefinition({ closedByChildren: ['rb', 'rtc', 'rp'], closedByParent: true }),\n 'rp': new HtmlTagDefinition({ closedByChildren: ['rb', 'rt', 'rtc', 'rp'], closedByParent: true }),\n 'optgroup': new HtmlTagDefinition({ closedByChildren: ['optgroup'], closedByParent: true }),\n 'option': new HtmlTagDefinition({ closedByChildren: ['option', 'optgroup'], closedByParent: true }),\n 'pre': new HtmlTagDefinition({ ignoreFirstLf: true }),\n 'listing': new HtmlTagDefinition({ ignoreFirstLf: true }),\n 'style': new HtmlTagDefinition({ contentType: TagContentType.RAW_TEXT }),\n 'script': new HtmlTagDefinition({ contentType: TagContentType.RAW_TEXT }),\n 'title': new HtmlTagDefinition({ contentType: TagContentType.ESCAPABLE_RAW_TEXT }),\n 'textarea': new HtmlTagDefinition({ contentType: TagContentType.ESCAPABLE_RAW_TEXT, ignoreFirstLf: true }),\n};\nvar _DEFAULT_TAG_DEFINITION = new HtmlTagDefinition();\n/**\n * @param {?} tagName\n * @return {?}\n */\nfunction getHtmlTagDefinition(tagName) {\n return TAG_DEFINITIONS[tagName.toLowerCase()] || _DEFAULT_TAG_DEFINITION;\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar _SELECTOR_REGEXP = new RegExp('(\\\\:not\\\\()|' +\n '([-\\\\w]+)|' +\n '(?:\\\\.([-\\\\w]+))|' +\n // \"-\" should appear first in the regexp below as FF31 parses \"[.-\\w]\" as a range\n '(?:\\\\[([-.\\\\w*]+)(?:=([\\\"\\']?)([^\\\\]\\\"\\']*)\\\\5)?\\\\])|' +\n // \"[name=\"value\"]\",\n // \"[name='value']\"\n '(\\\\))|' +\n '(\\\\s*,\\\\s*)', // \",\"\n'g');\n/**\n * A css selector contains an element name,\n * css classes and attribute/value pairs with the purpose\n * of selecting subsets out of them.\n */\nvar CssSelector = (function () {\n function CssSelector() {\n this.element = null;\n this.classNames = [];\n this.attrs = [];\n this.notSelectors = [];\n }\n /**\n * @param {?} selector\n * @return {?}\n */\n CssSelector.parse = function (selector) {\n var /** @type {?} */ results = [];\n var /** @type {?} */ _addResult = function (res, cssSel) {\n if (cssSel.notSelectors.length > 0 && !cssSel.element && cssSel.classNames.length == 0 &&\n cssSel.attrs.length == 0) {\n cssSel.element = '*';\n }\n res.push(cssSel);\n };\n var /** @type {?} */ cssSelector = new CssSelector();\n var /** @type {?} */ match;\n var /** @type {?} */ current = cssSelector;\n var /** @type {?} */ inNot = false;\n _SELECTOR_REGEXP.lastIndex = 0;\n while (match = _SELECTOR_REGEXP.exec(selector)) {\n if (match[1]) {\n if (inNot) {\n throw new Error('Nesting :not is not allowed in a selector');\n }\n inNot = true;\n current = new CssSelector();\n cssSelector.notSelectors.push(current);\n }\n if (match[2]) {\n current.setElement(match[2]);\n }\n if (match[3]) {\n current.addClassName(match[3]);\n }\n if (match[4]) {\n current.addAttribute(match[4], match[6]);\n }\n if (match[7]) {\n inNot = false;\n current = cssSelector;\n }\n if (match[8]) {\n if (inNot) {\n throw new Error('Multiple selectors in :not are not supported');\n }\n _addResult(results, cssSelector);\n cssSelector = current = new CssSelector();\n }\n }\n _addResult(results, cssSelector);\n return results;\n };\n /**\n * @return {?}\n */\n CssSelector.prototype.isElementSelector = function () {\n return this.hasElementSelector() && this.classNames.length == 0 && this.attrs.length == 0 &&\n this.notSelectors.length === 0;\n };\n /**\n * @return {?}\n */\n CssSelector.prototype.hasElementSelector = function () { return !!this.element; };\n /**\n * @param {?=} element\n * @return {?}\n */\n CssSelector.prototype.setElement = function (element) {\n if (element === void 0) { element = null; }\n this.element = element;\n };\n /**\n * Gets a template string for an element that matches the selector.\n * @return {?}\n */\n CssSelector.prototype.getMatchingElementTemplate = function () {\n var /** @type {?} */ tagName = this.element || 'div';\n var /** @type {?} */ classAttr = this.classNames.length > 0 ? \" class=\\\"\" + this.classNames.join(' ') + \"\\\"\" : '';\n var /** @type {?} */ attrs = '';\n for (var /** @type {?} */ i = 0; i < this.attrs.length; i += 2) {\n var /** @type {?} */ attrName = this.attrs[i];\n var /** @type {?} */ attrValue = this.attrs[i + 1] !== '' ? \"=\\\"\" + this.attrs[i + 1] + \"\\\"\" : '';\n attrs += \" \" + attrName + attrValue;\n }\n return getHtmlTagDefinition(tagName).isVoid ? \"<\" + tagName + classAttr + attrs + \"/>\" :\n \"<\" + tagName + classAttr + attrs + \">\";\n };\n /**\n * @param {?} name\n * @param {?=} value\n * @return {?}\n */\n CssSelector.prototype.addAttribute = function (name, value) {\n if (value === void 0) { value = ''; }\n this.attrs.push(name, value && value.toLowerCase() || '');\n };\n /**\n * @param {?} name\n * @return {?}\n */\n CssSelector.prototype.addClassName = function (name) { this.classNames.push(name.toLowerCase()); };\n /**\n * @return {?}\n */\n CssSelector.prototype.toString = function () {\n var /** @type {?} */ res = this.element || '';\n if (this.classNames) {\n this.classNames.forEach(function (klass) { return res += \".\" + klass; });\n }\n if (this.attrs) {\n for (var /** @type {?} */ i = 0; i < this.attrs.length; i += 2) {\n var /** @type {?} */ name = this.attrs[i];\n var /** @type {?} */ value = this.attrs[i + 1];\n res += \"[\" + name + (value ? '=' + value : '') + \"]\";\n }\n }\n this.notSelectors.forEach(function (notSelector) { return res += \":not(\" + notSelector + \")\"; });\n return res;\n };\n return CssSelector;\n}());\n/**\n * Reads a list of CssSelectors and allows to calculate which ones\n * are contained in a given CssSelector.\n */\nvar SelectorMatcher = (function () {\n function SelectorMatcher() {\n this._elementMap = new Map();\n this._elementPartialMap = new Map();\n this._classMap = new Map();\n this._classPartialMap = new Map();\n this._attrValueMap = new Map();\n this._attrValuePartialMap = new Map();\n this._listContexts = [];\n }\n /**\n * @param {?} notSelectors\n * @return {?}\n */\n SelectorMatcher.createNotMatcher = function (notSelectors) {\n var /** @type {?} */ notMatcher = new SelectorMatcher();\n notMatcher.addSelectables(notSelectors, null);\n return notMatcher;\n };\n /**\n * @param {?} cssSelectors\n * @param {?=} callbackCtxt\n * @return {?}\n */\n SelectorMatcher.prototype.addSelectables = function (cssSelectors, callbackCtxt) {\n var /** @type {?} */ listContext = ((null));\n if (cssSelectors.length > 1) {\n listContext = new SelectorListContext(cssSelectors);\n this._listContexts.push(listContext);\n }\n for (var /** @type {?} */ i = 0; i < cssSelectors.length; i++) {\n this._addSelectable(cssSelectors[i], callbackCtxt, listContext);\n }\n };\n /**\n * Add an object that can be found later on by calling `match`.\n * @param {?} cssSelector A css selector\n * @param {?} callbackCtxt An opaque object that will be given to the callback of the `match` function\n * @param {?} listContext\n * @return {?}\n */\n SelectorMatcher.prototype._addSelectable = function (cssSelector, callbackCtxt, listContext) {\n var /** @type {?} */ matcher = this;\n var /** @type {?} */ element = cssSelector.element;\n var /** @type {?} */ classNames = cssSelector.classNames;\n var /** @type {?} */ attrs = cssSelector.attrs;\n var /** @type {?} */ selectable = new SelectorContext(cssSelector, callbackCtxt, listContext);\n if (element) {\n var /** @type {?} */ isTerminal = attrs.length === 0 && classNames.length === 0;\n if (isTerminal) {\n this._addTerminal(matcher._elementMap, element, selectable);\n }\n else {\n matcher = this._addPartial(matcher._elementPartialMap, element);\n }\n }\n if (classNames) {\n for (var /** @type {?} */ i = 0; i < classNames.length; i++) {\n var /** @type {?} */ isTerminal = attrs.length === 0 && i === classNames.length - 1;\n var /** @type {?} */ className = classNames[i];\n if (isTerminal) {\n this._addTerminal(matcher._classMap, className, selectable);\n }\n else {\n matcher = this._addPartial(matcher._classPartialMap, className);\n }\n }\n }\n if (attrs) {\n for (var /** @type {?} */ i = 0; i < attrs.length; i += 2) {\n var /** @type {?} */ isTerminal = i === attrs.length - 2;\n var /** @type {?} */ name = attrs[i];\n var /** @type {?} */ value = attrs[i + 1];\n if (isTerminal) {\n var /** @type {?} */ terminalMap = matcher._attrValueMap;\n var /** @type {?} */ terminalValuesMap = terminalMap.get(name);\n if (!terminalValuesMap) {\n terminalValuesMap = new Map();\n terminalMap.set(name, terminalValuesMap);\n }\n this._addTerminal(terminalValuesMap, value, selectable);\n }\n else {\n var /** @type {?} */ partialMap = matcher._attrValuePartialMap;\n var /** @type {?} */ partialValuesMap = partialMap.get(name);\n if (!partialValuesMap) {\n partialValuesMap = new Map();\n partialMap.set(name, partialValuesMap);\n }\n matcher = this._addPartial(partialValuesMap, value);\n }\n }\n }\n };\n /**\n * @param {?} map\n * @param {?} name\n * @param {?} selectable\n * @return {?}\n */\n SelectorMatcher.prototype._addTerminal = function (map, name, selectable) {\n var /** @type {?} */ terminalList = map.get(name);\n if (!terminalList) {\n terminalList = [];\n map.set(name, terminalList);\n }\n terminalList.push(selectable);\n };\n /**\n * @param {?} map\n * @param {?} name\n * @return {?}\n */\n SelectorMatcher.prototype._addPartial = function (map, name) {\n var /** @type {?} */ matcher = map.get(name);\n if (!matcher) {\n matcher = new SelectorMatcher();\n map.set(name, matcher);\n }\n return matcher;\n };\n /**\n * Find the objects that have been added via `addSelectable`\n * whose css selector is contained in the given css selector.\n * @param {?} cssSelector A css selector\n * @param {?} matchedCallback This callback will be called with the object handed into `addSelectable`\n * @return {?} boolean true if a match was found\n */\n SelectorMatcher.prototype.match = function (cssSelector, matchedCallback) {\n var /** @type {?} */ result = false;\n var /** @type {?} */ element = ((cssSelector.element));\n var /** @type {?} */ classNames = cssSelector.classNames;\n var /** @type {?} */ attrs = cssSelector.attrs;\n for (var /** @type {?} */ i = 0; i < this._listContexts.length; i++) {\n this._listContexts[i].alreadyMatched = false;\n }\n result = this._matchTerminal(this._elementMap, element, cssSelector, matchedCallback) || result;\n result = this._matchPartial(this._elementPartialMap, element, cssSelector, matchedCallback) ||\n result;\n if (classNames) {\n for (var /** @type {?} */ i = 0; i < classNames.length; i++) {\n var /** @type {?} */ className = classNames[i];\n result =\n this._matchTerminal(this._classMap, className, cssSelector, matchedCallback) || result;\n result =\n this._matchPartial(this._classPartialMap, className, cssSelector, matchedCallback) ||\n result;\n }\n }\n if (attrs) {\n for (var /** @type {?} */ i = 0; i < attrs.length; i += 2) {\n var /** @type {?} */ name = attrs[i];\n var /** @type {?} */ value = attrs[i + 1];\n var /** @type {?} */ terminalValuesMap = ((this._attrValueMap.get(name)));\n if (value) {\n result =\n this._matchTerminal(terminalValuesMap, '', cssSelector, matchedCallback) || result;\n }\n result =\n this._matchTerminal(terminalValuesMap, value, cssSelector, matchedCallback) || result;\n var /** @type {?} */ partialValuesMap = ((this._attrValuePartialMap.get(name)));\n if (value) {\n result = this._matchPartial(partialValuesMap, '', cssSelector, matchedCallback) || result;\n }\n result =\n this._matchPartial(partialValuesMap, value, cssSelector, matchedCallback) || result;\n }\n }\n return result;\n };\n /**\n * \\@internal\n * @param {?} map\n * @param {?} name\n * @param {?} cssSelector\n * @param {?} matchedCallback\n * @return {?}\n */\n SelectorMatcher.prototype._matchTerminal = function (map, name, cssSelector, matchedCallback) {\n if (!map || typeof name !== 'string') {\n return false;\n }\n var /** @type {?} */ selectables = map.get(name) || [];\n var /** @type {?} */ starSelectables = ((map.get('*')));\n if (starSelectables) {\n selectables = selectables.concat(starSelectables);\n }\n if (selectables.length === 0) {\n return false;\n }\n var /** @type {?} */ selectable;\n var /** @type {?} */ result = false;\n for (var /** @type {?} */ i = 0; i < selectables.length; i++) {\n selectable = selectables[i];\n result = selectable.finalize(cssSelector, matchedCallback) || result;\n }\n return result;\n };\n /**\n * \\@internal\n * @param {?} map\n * @param {?} name\n * @param {?} cssSelector\n * @param {?} matchedCallback\n * @return {?}\n */\n SelectorMatcher.prototype._matchPartial = function (map, name, cssSelector, matchedCallback) {\n if (!map || typeof name !== 'string') {\n return false;\n }\n var /** @type {?} */ nestedSelector = map.get(name);\n if (!nestedSelector) {\n return false;\n }\n // TODO(perf): get rid of recursion and measure again\n // TODO(perf): don't pass the whole selector into the recursion,\n // but only the not processed parts\n return nestedSelector.match(cssSelector, matchedCallback);\n };\n return SelectorMatcher;\n}());\nvar SelectorListContext = (function () {\n /**\n * @param {?} selectors\n */\n function SelectorListContext(selectors) {\n this.selectors = selectors;\n this.alreadyMatched = false;\n }\n return SelectorListContext;\n}());\nvar SelectorContext = (function () {\n /**\n * @param {?} selector\n * @param {?} cbContext\n * @param {?} listContext\n */\n function SelectorContext(selector, cbContext, listContext) {\n this.selector = selector;\n this.cbContext = cbContext;\n this.listContext = listContext;\n this.notSelectors = selector.notSelectors;\n }\n /**\n * @param {?} cssSelector\n * @param {?} callback\n * @return {?}\n */\n SelectorContext.prototype.finalize = function (cssSelector, callback) {\n var /** @type {?} */ result = true;\n if (this.notSelectors.length > 0 && (!this.listContext || !this.listContext.alreadyMatched)) {\n var /** @type {?} */ notMatcher = SelectorMatcher.createNotMatcher(this.notSelectors);\n result = !notMatcher.match(cssSelector, null);\n }\n if (result && callback && (!this.listContext || !this.listContext.alreadyMatched)) {\n if (this.listContext) {\n this.listContext.alreadyMatched = true;\n }\n callback(this.selector, this.cbContext);\n }\n return result;\n };\n return SelectorContext;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar MODULE_SUFFIX = '';\nvar DASH_CASE_REGEXP = /-+([a-z0-9])/g;\n/**\n * @param {?} input\n * @return {?}\n */\n/**\n * @param {?} input\n * @return {?}\n */\nfunction dashCaseToCamelCase(input) {\n return input.replace(DASH_CASE_REGEXP, function () {\n var m = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n m[_i] = arguments[_i];\n }\n return m[1].toUpperCase();\n });\n}\n/**\n * @param {?} input\n * @param {?} defaultValues\n * @return {?}\n */\nfunction splitAtColon(input, defaultValues) {\n return _splitAt(input, ':', defaultValues);\n}\n/**\n * @param {?} input\n * @param {?} defaultValues\n * @return {?}\n */\nfunction splitAtPeriod(input, defaultValues) {\n return _splitAt(input, '.', defaultValues);\n}\n/**\n * @param {?} input\n * @param {?} character\n * @param {?} defaultValues\n * @return {?}\n */\nfunction _splitAt(input, character, defaultValues) {\n var /** @type {?} */ characterIndex = input.indexOf(character);\n if (characterIndex == -1)\n return defaultValues;\n return [input.slice(0, characterIndex).trim(), input.slice(characterIndex + 1).trim()];\n}\n/**\n * @param {?} value\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\nfunction visitValue(value, visitor, context) {\n if (Array.isArray(value)) {\n return visitor.visitArray(/** @type {?} */ (value), context);\n }\n if (isStrictStringMap(value)) {\n return visitor.visitStringMap(/** @type {?} */ (value), context);\n }\n if (value == null || typeof value == 'string' || typeof value == 'number' ||\n typeof value == 'boolean') {\n return visitor.visitPrimitive(value, context);\n }\n return visitor.visitOther(value, context);\n}\n/**\n * @param {?} val\n * @return {?}\n */\nfunction isDefined(val) {\n return val !== null && val !== undefined;\n}\n/**\n * @template T\n * @param {?} val\n * @return {?}\n */\nfunction noUndefined(val) {\n return val === undefined ? ((null)) : val;\n}\nvar ValueTransformer = (function () {\n function ValueTransformer() {\n }\n /**\n * @param {?} arr\n * @param {?} context\n * @return {?}\n */\n ValueTransformer.prototype.visitArray = function (arr, context) {\n var _this = this;\n return arr.map(function (value) { return visitValue(value, _this, context); });\n };\n /**\n * @param {?} map\n * @param {?} context\n * @return {?}\n */\n ValueTransformer.prototype.visitStringMap = function (map, context) {\n var _this = this;\n var /** @type {?} */ result = {};\n Object.keys(map).forEach(function (key) { result[key] = visitValue(map[key], _this, context); });\n return result;\n };\n /**\n * @param {?} value\n * @param {?} context\n * @return {?}\n */\n ValueTransformer.prototype.visitPrimitive = function (value, context) { return value; };\n /**\n * @param {?} value\n * @param {?} context\n * @return {?}\n */\n ValueTransformer.prototype.visitOther = function (value, context) { return value; };\n return ValueTransformer;\n}());\nvar SyncAsync = {\n assertSync: function (value) {\n if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵisPromise\"])(value)) {\n throw new Error(\"Illegal state: value cannot be a promise\");\n }\n return value;\n },\n then: function (value, cb) { return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵisPromise\"])(value) ? value.then(cb) : cb(value); },\n all: function (syncAsyncValues) {\n return syncAsyncValues.some(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵisPromise\"]) ? Promise.all(syncAsyncValues) : (syncAsyncValues);\n }\n};\n/**\n * @param {?} msg\n * @param {?=} parseErrors\n * @return {?}\n */\nfunction syntaxError(msg, parseErrors) {\n var /** @type {?} */ error = Error(msg);\n ((error))[ERROR_SYNTAX_ERROR] = true;\n if (parseErrors)\n ((error))[ERROR_PARSE_ERRORS] = parseErrors;\n return error;\n}\nvar ERROR_SYNTAX_ERROR = 'ngSyntaxError';\nvar ERROR_PARSE_ERRORS = 'ngParseErrors';\n/**\n * @param {?} error\n * @return {?}\n */\nfunction isSyntaxError(error) {\n return ((error))[ERROR_SYNTAX_ERROR];\n}\n/**\n * @param {?} error\n * @return {?}\n */\nfunction getParseErrors(error) {\n return ((error))[ERROR_PARSE_ERRORS] || [];\n}\n/**\n * @param {?} s\n * @return {?}\n */\nfunction escapeRegExp(s) {\n return s.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n}\nvar STRING_MAP_PROTO = Object.getPrototypeOf({});\n/**\n * @param {?} obj\n * @return {?}\n */\nfunction isStrictStringMap(obj) {\n return typeof obj === 'object' && obj !== null && Object.getPrototypeOf(obj) === STRING_MAP_PROTO;\n}\n/**\n * @param {?} str\n * @return {?}\n */\nfunction utf8Encode(str) {\n var /** @type {?} */ encoded = '';\n for (var /** @type {?} */ index = 0; index < str.length; index++) {\n var /** @type {?} */ codePoint = str.charCodeAt(index);\n // decode surrogate\n // see https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n if (codePoint >= 0xd800 && codePoint <= 0xdbff && str.length > (index + 1)) {\n var /** @type {?} */ low = str.charCodeAt(index + 1);\n if (low >= 0xdc00 && low <= 0xdfff) {\n index++;\n codePoint = ((codePoint - 0xd800) << 10) + low - 0xdc00 + 0x10000;\n }\n }\n if (codePoint <= 0x7f) {\n encoded += String.fromCharCode(codePoint);\n }\n else if (codePoint <= 0x7ff) {\n encoded += String.fromCharCode(((codePoint >> 6) & 0x1F) | 0xc0, (codePoint & 0x3f) | 0x80);\n }\n else if (codePoint <= 0xffff) {\n encoded += String.fromCharCode((codePoint >> 12) | 0xe0, ((codePoint >> 6) & 0x3f) | 0x80, (codePoint & 0x3f) | 0x80);\n }\n else if (codePoint <= 0x1fffff) {\n encoded += String.fromCharCode(((codePoint >> 18) & 0x07) | 0xf0, ((codePoint >> 12) & 0x3f) | 0x80, ((codePoint >> 6) & 0x3f) | 0x80, (codePoint & 0x3f) | 0x80);\n }\n }\n return encoded;\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// group 0: \"[prop] or (event) or @trigger\"\n// group 1: \"prop\" from \"[prop]\"\n// group 2: \"event\" from \"(event)\"\n// group 3: \"@trigger\" from \"@trigger\"\nvar HOST_REG_EXP = /^(?:(?:\\[([^\\]]+)\\])|(?:\\(([^\\)]+)\\)))|(\\@[-\\w]+)$/;\nvar CompileAnimationEntryMetadata = (function () {\n /**\n * @param {?=} name\n * @param {?=} definitions\n */\n function CompileAnimationEntryMetadata(name, definitions) {\n if (name === void 0) { name = null; }\n if (definitions === void 0) { definitions = null; }\n this.name = name;\n this.definitions = definitions;\n }\n return CompileAnimationEntryMetadata;\n}());\n/**\n * @abstract\n */\nvar CompileAnimationStateMetadata = (function () {\n function CompileAnimationStateMetadata() {\n }\n return CompileAnimationStateMetadata;\n}());\nvar CompileAnimationStateDeclarationMetadata = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](CompileAnimationStateDeclarationMetadata, _super);\n /**\n * @param {?} stateNameExpr\n * @param {?} styles\n */\n function CompileAnimationStateDeclarationMetadata(stateNameExpr, styles) {\n var _this = _super.call(this) || this;\n _this.stateNameExpr = stateNameExpr;\n _this.styles = styles;\n return _this;\n }\n return CompileAnimationStateDeclarationMetadata;\n}(CompileAnimationStateMetadata));\nvar CompileAnimationStateTransitionMetadata = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](CompileAnimationStateTransitionMetadata, _super);\n /**\n * @param {?} stateChangeExpr\n * @param {?} steps\n */\n function CompileAnimationStateTransitionMetadata(stateChangeExpr, steps) {\n var _this = _super.call(this) || this;\n _this.stateChangeExpr = stateChangeExpr;\n _this.steps = steps;\n return _this;\n }\n return CompileAnimationStateTransitionMetadata;\n}(CompileAnimationStateMetadata));\n/**\n * @abstract\n */\nvar CompileAnimationMetadata = (function () {\n function CompileAnimationMetadata() {\n }\n return CompileAnimationMetadata;\n}());\nvar CompileAnimationKeyframesSequenceMetadata = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](CompileAnimationKeyframesSequenceMetadata, _super);\n /**\n * @param {?=} steps\n */\n function CompileAnimationKeyframesSequenceMetadata(steps) {\n if (steps === void 0) { steps = []; }\n var _this = _super.call(this) || this;\n _this.steps = steps;\n return _this;\n }\n return CompileAnimationKeyframesSequenceMetadata;\n}(CompileAnimationMetadata));\nvar CompileAnimationStyleMetadata = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](CompileAnimationStyleMetadata, _super);\n /**\n * @param {?} offset\n * @param {?=} styles\n */\n function CompileAnimationStyleMetadata(offset, styles) {\n if (styles === void 0) { styles = null; }\n var _this = _super.call(this) || this;\n _this.offset = offset;\n _this.styles = styles;\n return _this;\n }\n return CompileAnimationStyleMetadata;\n}(CompileAnimationMetadata));\nvar CompileAnimationAnimateMetadata = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](CompileAnimationAnimateMetadata, _super);\n /**\n * @param {?=} timings\n * @param {?=} styles\n */\n function CompileAnimationAnimateMetadata(timings, styles) {\n if (timings === void 0) { timings = 0; }\n if (styles === void 0) { styles = null; }\n var _this = _super.call(this) || this;\n _this.timings = timings;\n _this.styles = styles;\n return _this;\n }\n return CompileAnimationAnimateMetadata;\n}(CompileAnimationMetadata));\n/**\n * @abstract\n */\nvar CompileAnimationWithStepsMetadata = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](CompileAnimationWithStepsMetadata, _super);\n /**\n * @param {?=} steps\n */\n function CompileAnimationWithStepsMetadata(steps) {\n if (steps === void 0) { steps = null; }\n var _this = _super.call(this) || this;\n _this.steps = steps;\n return _this;\n }\n return CompileAnimationWithStepsMetadata;\n}(CompileAnimationMetadata));\nvar CompileAnimationSequenceMetadata = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](CompileAnimationSequenceMetadata, _super);\n /**\n * @param {?=} steps\n */\n function CompileAnimationSequenceMetadata(steps) {\n if (steps === void 0) { steps = null; }\n return _super.call(this, steps) || this;\n }\n return CompileAnimationSequenceMetadata;\n}(CompileAnimationWithStepsMetadata));\nvar CompileAnimationGroupMetadata = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](CompileAnimationGroupMetadata, _super);\n /**\n * @param {?=} steps\n */\n function CompileAnimationGroupMetadata(steps) {\n if (steps === void 0) { steps = null; }\n return _super.call(this, steps) || this;\n }\n return CompileAnimationGroupMetadata;\n}(CompileAnimationWithStepsMetadata));\n/**\n * @param {?} name\n * @return {?}\n */\nfunction _sanitizeIdentifier(name) {\n return name.replace(/\\W/g, '_');\n}\nvar _anonymousTypeIndex = 0;\n/**\n * @param {?} compileIdentifier\n * @return {?}\n */\nfunction identifierName(compileIdentifier) {\n if (!compileIdentifier || !compileIdentifier.reference) {\n return null;\n }\n var /** @type {?} */ ref = compileIdentifier.reference;\n if (ref instanceof StaticSymbol) {\n return ref.name;\n }\n if (ref['__anonymousType']) {\n return ref['__anonymousType'];\n }\n var /** @type {?} */ identifier = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵstringify\"])(ref);\n if (identifier.indexOf('(') >= 0) {\n // case: anonymous functions!\n identifier = \"anonymous_\" + _anonymousTypeIndex++;\n ref['__anonymousType'] = identifier;\n }\n else {\n identifier = _sanitizeIdentifier(identifier);\n }\n return identifier;\n}\n/**\n * @param {?} compileIdentifier\n * @return {?}\n */\nfunction identifierModuleUrl(compileIdentifier) {\n var /** @type {?} */ ref = compileIdentifier.reference;\n if (ref instanceof StaticSymbol) {\n return ref.filePath;\n }\n // Runtime type\n return \"./\" + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵstringify\"])(ref);\n}\n/**\n * @param {?} compType\n * @param {?} embeddedTemplateIndex\n * @return {?}\n */\nfunction viewClassName(compType, embeddedTemplateIndex) {\n return \"View_\" + identifierName({ reference: compType }) + \"_\" + embeddedTemplateIndex;\n}\n/**\n * @param {?} compType\n * @return {?}\n */\nfunction rendererTypeName(compType) {\n return \"RenderType_\" + identifierName({ reference: compType });\n}\n/**\n * @param {?} compType\n * @return {?}\n */\nfunction hostViewClassName(compType) {\n return \"HostView_\" + identifierName({ reference: compType });\n}\n/**\n * @param {?} compType\n * @return {?}\n */\nfunction componentFactoryName(compType) {\n return identifierName({ reference: compType }) + \"NgFactory\";\n}\nvar CompileSummaryKind = {};\nCompileSummaryKind.Pipe = 0;\nCompileSummaryKind.Directive = 1;\nCompileSummaryKind.NgModule = 2;\nCompileSummaryKind.Injectable = 3;\nCompileSummaryKind[CompileSummaryKind.Pipe] = \"Pipe\";\nCompileSummaryKind[CompileSummaryKind.Directive] = \"Directive\";\nCompileSummaryKind[CompileSummaryKind.NgModule] = \"NgModule\";\nCompileSummaryKind[CompileSummaryKind.Injectable] = \"Injectable\";\n/**\n * @param {?} token\n * @return {?}\n */\nfunction tokenName(token) {\n return token.value != null ? _sanitizeIdentifier(token.value) : identifierName(token.identifier);\n}\n/**\n * @param {?} token\n * @return {?}\n */\nfunction tokenReference(token) {\n if (token.identifier != null) {\n return token.identifier.reference;\n }\n else {\n return token.value;\n }\n}\n/**\n * Metadata about a stylesheet\n */\nvar CompileStylesheetMetadata = (function () {\n /**\n * @param {?=} __0\n */\n function CompileStylesheetMetadata(_a) {\n var _b = _a === void 0 ? {} : _a, moduleUrl = _b.moduleUrl, styles = _b.styles, styleUrls = _b.styleUrls;\n this.moduleUrl = moduleUrl || null;\n this.styles = _normalizeArray(styles);\n this.styleUrls = _normalizeArray(styleUrls);\n }\n return CompileStylesheetMetadata;\n}());\n/**\n * Metadata regarding compilation of a template.\n */\nvar CompileTemplateMetadata = (function () {\n /**\n * @param {?} __0\n */\n function CompileTemplateMetadata(_a) {\n var encapsulation = _a.encapsulation, template = _a.template, templateUrl = _a.templateUrl, styles = _a.styles, styleUrls = _a.styleUrls, externalStylesheets = _a.externalStylesheets, animations = _a.animations, ngContentSelectors = _a.ngContentSelectors, interpolation = _a.interpolation, isInline = _a.isInline;\n this.encapsulation = encapsulation;\n this.template = template;\n this.templateUrl = templateUrl;\n this.styles = _normalizeArray(styles);\n this.styleUrls = _normalizeArray(styleUrls);\n this.externalStylesheets = _normalizeArray(externalStylesheets);\n this.animations = animations ? flatten(animations) : [];\n this.ngContentSelectors = ngContentSelectors || [];\n if (interpolation && interpolation.length != 2) {\n throw new Error(\"'interpolation' should have a start and an end symbol.\");\n }\n this.interpolation = interpolation;\n this.isInline = isInline;\n }\n /**\n * @return {?}\n */\n CompileTemplateMetadata.prototype.toSummary = function () {\n return {\n animations: this.animations.map(function (anim) { return anim.name; }),\n ngContentSelectors: this.ngContentSelectors,\n encapsulation: this.encapsulation,\n };\n };\n return CompileTemplateMetadata;\n}());\n/**\n * Metadata regarding compilation of a directive.\n */\nvar CompileDirectiveMetadata = (function () {\n /**\n * @param {?} __0\n */\n function CompileDirectiveMetadata(_a) {\n var isHost = _a.isHost, type = _a.type, isComponent = _a.isComponent, selector = _a.selector, exportAs = _a.exportAs, changeDetection = _a.changeDetection, inputs = _a.inputs, outputs = _a.outputs, hostListeners = _a.hostListeners, hostProperties = _a.hostProperties, hostAttributes = _a.hostAttributes, providers = _a.providers, viewProviders = _a.viewProviders, queries = _a.queries, viewQueries = _a.viewQueries, entryComponents = _a.entryComponents, template = _a.template, componentViewType = _a.componentViewType, rendererType = _a.rendererType, componentFactory = _a.componentFactory;\n this.isHost = !!isHost;\n this.type = type;\n this.isComponent = isComponent;\n this.selector = selector;\n this.exportAs = exportAs;\n this.changeDetection = changeDetection;\n this.inputs = inputs;\n this.outputs = outputs;\n this.hostListeners = hostListeners;\n this.hostProperties = hostProperties;\n this.hostAttributes = hostAttributes;\n this.providers = _normalizeArray(providers);\n this.viewProviders = _normalizeArray(viewProviders);\n this.queries = _normalizeArray(queries);\n this.viewQueries = _normalizeArray(viewQueries);\n this.entryComponents = _normalizeArray(entryComponents);\n this.template = template;\n this.componentViewType = componentViewType;\n this.rendererType = rendererType;\n this.componentFactory = componentFactory;\n }\n /**\n * @param {?} __0\n * @return {?}\n */\n CompileDirectiveMetadata.create = function (_a) {\n var isHost = _a.isHost, type = _a.type, isComponent = _a.isComponent, selector = _a.selector, exportAs = _a.exportAs, changeDetection = _a.changeDetection, inputs = _a.inputs, outputs = _a.outputs, host = _a.host, providers = _a.providers, viewProviders = _a.viewProviders, queries = _a.queries, viewQueries = _a.viewQueries, entryComponents = _a.entryComponents, template = _a.template, componentViewType = _a.componentViewType, rendererType = _a.rendererType, componentFactory = _a.componentFactory;\n var /** @type {?} */ hostListeners = {};\n var /** @type {?} */ hostProperties = {};\n var /** @type {?} */ hostAttributes = {};\n if (host != null) {\n Object.keys(host).forEach(function (key) {\n var /** @type {?} */ value = host[key];\n var /** @type {?} */ matches = key.match(HOST_REG_EXP);\n if (matches === null) {\n hostAttributes[key] = value;\n }\n else if (matches[1] != null) {\n hostProperties[matches[1]] = value;\n }\n else if (matches[2] != null) {\n hostListeners[matches[2]] = value;\n }\n });\n }\n var /** @type {?} */ inputsMap = {};\n if (inputs != null) {\n inputs.forEach(function (bindConfig) {\n // canonical syntax: `dirProp: elProp`\n // if there is no `:`, use dirProp = elProp\n var /** @type {?} */ parts = splitAtColon(bindConfig, [bindConfig, bindConfig]);\n inputsMap[parts[0]] = parts[1];\n });\n }\n var /** @type {?} */ outputsMap = {};\n if (outputs != null) {\n outputs.forEach(function (bindConfig) {\n // canonical syntax: `dirProp: elProp`\n // if there is no `:`, use dirProp = elProp\n var /** @type {?} */ parts = splitAtColon(bindConfig, [bindConfig, bindConfig]);\n outputsMap[parts[0]] = parts[1];\n });\n }\n return new CompileDirectiveMetadata({\n isHost: isHost,\n type: type,\n isComponent: !!isComponent, selector: selector, exportAs: exportAs, changeDetection: changeDetection,\n inputs: inputsMap,\n outputs: outputsMap,\n hostListeners: hostListeners,\n hostProperties: hostProperties,\n hostAttributes: hostAttributes,\n providers: providers,\n viewProviders: viewProviders,\n queries: queries,\n viewQueries: viewQueries,\n entryComponents: entryComponents,\n template: template,\n componentViewType: componentViewType,\n rendererType: rendererType,\n componentFactory: componentFactory,\n });\n };\n /**\n * @return {?}\n */\n CompileDirectiveMetadata.prototype.toSummary = function () {\n return {\n summaryKind: CompileSummaryKind.Directive,\n type: this.type,\n isComponent: this.isComponent,\n selector: this.selector,\n exportAs: this.exportAs,\n inputs: this.inputs,\n outputs: this.outputs,\n hostListeners: this.hostListeners,\n hostProperties: this.hostProperties,\n hostAttributes: this.hostAttributes,\n providers: this.providers,\n viewProviders: this.viewProviders,\n queries: this.queries,\n viewQueries: this.viewQueries,\n entryComponents: this.entryComponents,\n changeDetection: this.changeDetection,\n template: this.template && this.template.toSummary(),\n componentViewType: this.componentViewType,\n rendererType: this.rendererType,\n componentFactory: this.componentFactory\n };\n };\n return CompileDirectiveMetadata;\n}());\n/**\n * Construct {\\@link CompileDirectiveMetadata} from {\\@link ComponentTypeMetadata} and a selector.\n * @param {?} hostTypeReference\n * @param {?} compMeta\n * @param {?} hostViewType\n * @return {?}\n */\nfunction createHostComponentMeta(hostTypeReference, compMeta, hostViewType) {\n var /** @type {?} */ template = CssSelector.parse(/** @type {?} */ ((compMeta.selector)))[0].getMatchingElementTemplate();\n return CompileDirectiveMetadata.create({\n isHost: true,\n type: { reference: hostTypeReference, diDeps: [], lifecycleHooks: [] },\n template: new CompileTemplateMetadata({\n encapsulation: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ViewEncapsulation\"].None,\n template: template,\n templateUrl: '',\n styles: [],\n styleUrls: [],\n ngContentSelectors: [],\n animations: [],\n isInline: true,\n externalStylesheets: [],\n interpolation: null\n }),\n exportAs: null,\n changeDetection: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ChangeDetectionStrategy\"].Default,\n inputs: [],\n outputs: [],\n host: {},\n isComponent: true,\n selector: '*',\n providers: [],\n viewProviders: [],\n queries: [],\n viewQueries: [],\n componentViewType: hostViewType,\n rendererType: { id: '__Host__', encapsulation: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ViewEncapsulation\"].None, styles: [], data: {} },\n entryComponents: [],\n componentFactory: null\n });\n}\nvar CompilePipeMetadata = (function () {\n /**\n * @param {?} __0\n */\n function CompilePipeMetadata(_a) {\n var type = _a.type, name = _a.name, pure = _a.pure;\n this.type = type;\n this.name = name;\n this.pure = !!pure;\n }\n /**\n * @return {?}\n */\n CompilePipeMetadata.prototype.toSummary = function () {\n return {\n summaryKind: CompileSummaryKind.Pipe,\n type: this.type,\n name: this.name,\n pure: this.pure\n };\n };\n return CompilePipeMetadata;\n}());\n/**\n * Metadata regarding compilation of a module.\n */\nvar CompileNgModuleMetadata = (function () {\n /**\n * @param {?} __0\n */\n function CompileNgModuleMetadata(_a) {\n var type = _a.type, providers = _a.providers, declaredDirectives = _a.declaredDirectives, exportedDirectives = _a.exportedDirectives, declaredPipes = _a.declaredPipes, exportedPipes = _a.exportedPipes, entryComponents = _a.entryComponents, bootstrapComponents = _a.bootstrapComponents, importedModules = _a.importedModules, exportedModules = _a.exportedModules, schemas = _a.schemas, transitiveModule = _a.transitiveModule, id = _a.id;\n this.type = type || null;\n this.declaredDirectives = _normalizeArray(declaredDirectives);\n this.exportedDirectives = _normalizeArray(exportedDirectives);\n this.declaredPipes = _normalizeArray(declaredPipes);\n this.exportedPipes = _normalizeArray(exportedPipes);\n this.providers = _normalizeArray(providers);\n this.entryComponents = _normalizeArray(entryComponents);\n this.bootstrapComponents = _normalizeArray(bootstrapComponents);\n this.importedModules = _normalizeArray(importedModules);\n this.exportedModules = _normalizeArray(exportedModules);\n this.schemas = _normalizeArray(schemas);\n this.id = id || null;\n this.transitiveModule = transitiveModule || null;\n }\n /**\n * @return {?}\n */\n CompileNgModuleMetadata.prototype.toSummary = function () {\n var /** @type {?} */ module = ((this.transitiveModule));\n return {\n summaryKind: CompileSummaryKind.NgModule,\n type: this.type,\n entryComponents: module.entryComponents,\n providers: module.providers,\n modules: module.modules,\n exportedDirectives: module.exportedDirectives,\n exportedPipes: module.exportedPipes\n };\n };\n return CompileNgModuleMetadata;\n}());\nvar TransitiveCompileNgModuleMetadata = (function () {\n function TransitiveCompileNgModuleMetadata() {\n this.directivesSet = new Set();\n this.directives = [];\n this.exportedDirectivesSet = new Set();\n this.exportedDirectives = [];\n this.pipesSet = new Set();\n this.pipes = [];\n this.exportedPipesSet = new Set();\n this.exportedPipes = [];\n this.modulesSet = new Set();\n this.modules = [];\n this.entryComponentsSet = new Set();\n this.entryComponents = [];\n this.providers = [];\n }\n /**\n * @param {?} provider\n * @param {?} module\n * @return {?}\n */\n TransitiveCompileNgModuleMetadata.prototype.addProvider = function (provider, module) {\n this.providers.push({ provider: provider, module: module });\n };\n /**\n * @param {?} id\n * @return {?}\n */\n TransitiveCompileNgModuleMetadata.prototype.addDirective = function (id) {\n if (!this.directivesSet.has(id.reference)) {\n this.directivesSet.add(id.reference);\n this.directives.push(id);\n }\n };\n /**\n * @param {?} id\n * @return {?}\n */\n TransitiveCompileNgModuleMetadata.prototype.addExportedDirective = function (id) {\n if (!this.exportedDirectivesSet.has(id.reference)) {\n this.exportedDirectivesSet.add(id.reference);\n this.exportedDirectives.push(id);\n }\n };\n /**\n * @param {?} id\n * @return {?}\n */\n TransitiveCompileNgModuleMetadata.prototype.addPipe = function (id) {\n if (!this.pipesSet.has(id.reference)) {\n this.pipesSet.add(id.reference);\n this.pipes.push(id);\n }\n };\n /**\n * @param {?} id\n * @return {?}\n */\n TransitiveCompileNgModuleMetadata.prototype.addExportedPipe = function (id) {\n if (!this.exportedPipesSet.has(id.reference)) {\n this.exportedPipesSet.add(id.reference);\n this.exportedPipes.push(id);\n }\n };\n /**\n * @param {?} id\n * @return {?}\n */\n TransitiveCompileNgModuleMetadata.prototype.addModule = function (id) {\n if (!this.modulesSet.has(id.reference)) {\n this.modulesSet.add(id.reference);\n this.modules.push(id);\n }\n };\n /**\n * @param {?} ec\n * @return {?}\n */\n TransitiveCompileNgModuleMetadata.prototype.addEntryComponent = function (ec) {\n if (!this.entryComponentsSet.has(ec.componentType)) {\n this.entryComponentsSet.add(ec.componentType);\n this.entryComponents.push(ec);\n }\n };\n return TransitiveCompileNgModuleMetadata;\n}());\n/**\n * @param {?} obj\n * @return {?}\n */\nfunction _normalizeArray(obj) {\n return obj || [];\n}\nvar ProviderMeta = (function () {\n /**\n * @param {?} token\n * @param {?} __1\n */\n function ProviderMeta(token, _a) {\n var useClass = _a.useClass, useValue = _a.useValue, useExisting = _a.useExisting, useFactory = _a.useFactory, deps = _a.deps, multi = _a.multi;\n this.token = token;\n this.useClass = useClass || null;\n this.useValue = useValue;\n this.useExisting = useExisting;\n this.useFactory = useFactory || null;\n this.dependencies = deps || null;\n this.multi = !!multi;\n }\n return ProviderMeta;\n}());\n/**\n * @template T\n * @param {?} list\n * @return {?}\n */\nfunction flatten(list) {\n return list.reduce(function (flat, item) {\n var /** @type {?} */ flatItem = Array.isArray(item) ? flatten(item) : item;\n return ((flat)).concat(flatItem);\n }, []);\n}\n/**\n * @param {?} url\n * @return {?}\n */\nfunction sourceUrl(url) {\n // Note: We need 3 \"/\" so that ng shows up as a separate domain\n // in the chrome dev tools.\n return url.replace(/(\\w+:\\/\\/[\\w:-]+)?(\\/+)?/, 'ng:///');\n}\n/**\n * @param {?} ngModuleType\n * @param {?} compMeta\n * @param {?} templateMeta\n * @return {?}\n */\nfunction templateSourceUrl(ngModuleType, compMeta, templateMeta) {\n var /** @type {?} */ url;\n if (templateMeta.isInline) {\n if (compMeta.type.reference instanceof StaticSymbol) {\n // Note: a .ts file might contain multiple components with inline templates,\n // so we need to give them unique urls, as these will be used for sourcemaps.\n url = compMeta.type.reference.filePath + \".\" + compMeta.type.reference.name + \".html\";\n }\n else {\n url = identifierName(ngModuleType) + \"/\" + identifierName(compMeta.type) + \".html\";\n }\n }\n else {\n url = ((templateMeta.templateUrl));\n }\n // always prepend ng:// to make angular resources easy to find and not clobber\n // user resources.\n return sourceUrl(url);\n}\n/**\n * @param {?} meta\n * @param {?} id\n * @return {?}\n */\nfunction sharedStylesheetJitUrl(meta, id) {\n var /** @type {?} */ pathParts = ((meta.moduleUrl)).split(/\\/\\\\/g);\n var /** @type {?} */ baseName = pathParts[pathParts.length - 1];\n return sourceUrl(\"css/\" + id + baseName + \".ngstyle.js\");\n}\n/**\n * @param {?} moduleMeta\n * @return {?}\n */\nfunction ngModuleJitUrl(moduleMeta) {\n return sourceUrl(identifierName(moduleMeta.type) + \"/module.ngfactory.js\");\n}\n/**\n * @param {?} ngModuleType\n * @param {?} compMeta\n * @return {?}\n */\nfunction templateJitUrl(ngModuleType, compMeta) {\n return sourceUrl(identifierName(ngModuleType) + \"/\" + identifierName(compMeta.type) + \".ngfactory.js\");\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Provides access to reflection data about symbols that the compiler needs.\n * @abstract\n */\nvar CompileReflector = (function () {\n function CompileReflector() {\n }\n /**\n * @abstract\n * @param {?} typeOrFunc\n * @return {?}\n */\n CompileReflector.prototype.parameters = function (typeOrFunc) { };\n /**\n * @abstract\n * @param {?} typeOrFunc\n * @return {?}\n */\n CompileReflector.prototype.annotations = function (typeOrFunc) { };\n /**\n * @abstract\n * @param {?} typeOrFunc\n * @return {?}\n */\n CompileReflector.prototype.propMetadata = function (typeOrFunc) { };\n /**\n * @abstract\n * @param {?} type\n * @param {?} lcProperty\n * @return {?}\n */\n CompileReflector.prototype.hasLifecycleHook = function (type, lcProperty) { };\n /**\n * @abstract\n * @param {?} type\n * @param {?} cmpMetadata\n * @return {?}\n */\n CompileReflector.prototype.componentModuleUrl = function (type, cmpMetadata) { };\n /**\n * @abstract\n * @param {?} ref\n * @return {?}\n */\n CompileReflector.prototype.resolveExternalReference = function (ref) { };\n return CompileReflector;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar CompilerConfig = (function () {\n /**\n * @param {?=} __0\n */\n function CompilerConfig(_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.defaultEncapsulation, defaultEncapsulation = _c === void 0 ? __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ViewEncapsulation\"].Emulated : _c, _d = _b.useJit, useJit = _d === void 0 ? true : _d, missingTranslation = _b.missingTranslation, enableLegacyTemplate = _b.enableLegacyTemplate;\n this.defaultEncapsulation = defaultEncapsulation;\n this.useJit = !!useJit;\n this.missingTranslation = missingTranslation || null;\n this.enableLegacyTemplate = enableLegacyTemplate !== false;\n }\n return CompilerConfig;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar ParserError = (function () {\n /**\n * @param {?} message\n * @param {?} input\n * @param {?} errLocation\n * @param {?=} ctxLocation\n */\n function ParserError(message, input, errLocation, ctxLocation) {\n this.input = input;\n this.errLocation = errLocation;\n this.ctxLocation = ctxLocation;\n this.message = \"Parser Error: \" + message + \" \" + errLocation + \" [\" + input + \"] in \" + ctxLocation;\n }\n return ParserError;\n}());\nvar ParseSpan = (function () {\n /**\n * @param {?} start\n * @param {?} end\n */\n function ParseSpan(start, end) {\n this.start = start;\n this.end = end;\n }\n return ParseSpan;\n}());\nvar AST = (function () {\n /**\n * @param {?} span\n */\n function AST(span) {\n this.span = span;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n AST.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return null;\n };\n /**\n * @return {?}\n */\n AST.prototype.toString = function () { return 'AST'; };\n return AST;\n}());\n/**\n * Represents a quoted expression of the form:\n *\n * quote = prefix `:` uninterpretedExpression\n * prefix = identifier\n * uninterpretedExpression = arbitrary string\n *\n * A quoted expression is meant to be pre-processed by an AST transformer that\n * converts it into another AST that no longer contains quoted expressions.\n * It is meant to allow third-party developers to extend Angular template\n * expression language. The `uninterpretedExpression` part of the quote is\n * therefore not interpreted by the Angular's own expression parser.\n */\nvar Quote = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](Quote, _super);\n /**\n * @param {?} span\n * @param {?} prefix\n * @param {?} uninterpretedExpression\n * @param {?} location\n */\n function Quote(span, prefix, uninterpretedExpression, location) {\n var _this = _super.call(this, span) || this;\n _this.prefix = prefix;\n _this.uninterpretedExpression = uninterpretedExpression;\n _this.location = location;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n Quote.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitQuote(this, context);\n };\n /**\n * @return {?}\n */\n Quote.prototype.toString = function () { return 'Quote'; };\n return Quote;\n}(AST));\nvar EmptyExpr = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](EmptyExpr, _super);\n function EmptyExpr() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n EmptyExpr.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n // do nothing\n };\n return EmptyExpr;\n}(AST));\nvar ImplicitReceiver = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](ImplicitReceiver, _super);\n function ImplicitReceiver() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n ImplicitReceiver.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitImplicitReceiver(this, context);\n };\n return ImplicitReceiver;\n}(AST));\n/**\n * Multiple expressions separated by a semicolon.\n */\nvar Chain = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](Chain, _super);\n /**\n * @param {?} span\n * @param {?} expressions\n */\n function Chain(span, expressions) {\n var _this = _super.call(this, span) || this;\n _this.expressions = expressions;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n Chain.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitChain(this, context);\n };\n return Chain;\n}(AST));\nvar Conditional = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](Conditional, _super);\n /**\n * @param {?} span\n * @param {?} condition\n * @param {?} trueExp\n * @param {?} falseExp\n */\n function Conditional(span, condition, trueExp, falseExp) {\n var _this = _super.call(this, span) || this;\n _this.condition = condition;\n _this.trueExp = trueExp;\n _this.falseExp = falseExp;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n Conditional.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitConditional(this, context);\n };\n return Conditional;\n}(AST));\nvar PropertyRead = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](PropertyRead, _super);\n /**\n * @param {?} span\n * @param {?} receiver\n * @param {?} name\n */\n function PropertyRead(span, receiver, name) {\n var _this = _super.call(this, span) || this;\n _this.receiver = receiver;\n _this.name = name;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n PropertyRead.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitPropertyRead(this, context);\n };\n return PropertyRead;\n}(AST));\nvar PropertyWrite = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](PropertyWrite, _super);\n /**\n * @param {?} span\n * @param {?} receiver\n * @param {?} name\n * @param {?} value\n */\n function PropertyWrite(span, receiver, name, value) {\n var _this = _super.call(this, span) || this;\n _this.receiver = receiver;\n _this.name = name;\n _this.value = value;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n PropertyWrite.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitPropertyWrite(this, context);\n };\n return PropertyWrite;\n}(AST));\nvar SafePropertyRead = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](SafePropertyRead, _super);\n /**\n * @param {?} span\n * @param {?} receiver\n * @param {?} name\n */\n function SafePropertyRead(span, receiver, name) {\n var _this = _super.call(this, span) || this;\n _this.receiver = receiver;\n _this.name = name;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n SafePropertyRead.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitSafePropertyRead(this, context);\n };\n return SafePropertyRead;\n}(AST));\nvar KeyedRead = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](KeyedRead, _super);\n /**\n * @param {?} span\n * @param {?} obj\n * @param {?} key\n */\n function KeyedRead(span, obj, key) {\n var _this = _super.call(this, span) || this;\n _this.obj = obj;\n _this.key = key;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n KeyedRead.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitKeyedRead(this, context);\n };\n return KeyedRead;\n}(AST));\nvar KeyedWrite = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](KeyedWrite, _super);\n /**\n * @param {?} span\n * @param {?} obj\n * @param {?} key\n * @param {?} value\n */\n function KeyedWrite(span, obj, key, value) {\n var _this = _super.call(this, span) || this;\n _this.obj = obj;\n _this.key = key;\n _this.value = value;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n KeyedWrite.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitKeyedWrite(this, context);\n };\n return KeyedWrite;\n}(AST));\nvar BindingPipe = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](BindingPipe, _super);\n /**\n * @param {?} span\n * @param {?} exp\n * @param {?} name\n * @param {?} args\n */\n function BindingPipe(span, exp, name, args) {\n var _this = _super.call(this, span) || this;\n _this.exp = exp;\n _this.name = name;\n _this.args = args;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n BindingPipe.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitPipe(this, context);\n };\n return BindingPipe;\n}(AST));\nvar LiteralPrimitive = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](LiteralPrimitive, _super);\n /**\n * @param {?} span\n * @param {?} value\n */\n function LiteralPrimitive(span, value) {\n var _this = _super.call(this, span) || this;\n _this.value = value;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n LiteralPrimitive.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitLiteralPrimitive(this, context);\n };\n return LiteralPrimitive;\n}(AST));\nvar LiteralArray = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](LiteralArray, _super);\n /**\n * @param {?} span\n * @param {?} expressions\n */\n function LiteralArray(span, expressions) {\n var _this = _super.call(this, span) || this;\n _this.expressions = expressions;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n LiteralArray.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitLiteralArray(this, context);\n };\n return LiteralArray;\n}(AST));\nvar LiteralMap = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](LiteralMap, _super);\n /**\n * @param {?} span\n * @param {?} keys\n * @param {?} values\n */\n function LiteralMap(span, keys, values) {\n var _this = _super.call(this, span) || this;\n _this.keys = keys;\n _this.values = values;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n LiteralMap.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitLiteralMap(this, context);\n };\n return LiteralMap;\n}(AST));\nvar Interpolation = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](Interpolation, _super);\n /**\n * @param {?} span\n * @param {?} strings\n * @param {?} expressions\n */\n function Interpolation(span, strings, expressions) {\n var _this = _super.call(this, span) || this;\n _this.strings = strings;\n _this.expressions = expressions;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n Interpolation.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitInterpolation(this, context);\n };\n return Interpolation;\n}(AST));\nvar Binary = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](Binary, _super);\n /**\n * @param {?} span\n * @param {?} operation\n * @param {?} left\n * @param {?} right\n */\n function Binary(span, operation, left, right) {\n var _this = _super.call(this, span) || this;\n _this.operation = operation;\n _this.left = left;\n _this.right = right;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n Binary.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitBinary(this, context);\n };\n return Binary;\n}(AST));\nvar PrefixNot = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](PrefixNot, _super);\n /**\n * @param {?} span\n * @param {?} expression\n */\n function PrefixNot(span, expression) {\n var _this = _super.call(this, span) || this;\n _this.expression = expression;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n PrefixNot.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitPrefixNot(this, context);\n };\n return PrefixNot;\n}(AST));\nvar NonNullAssert = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](NonNullAssert, _super);\n /**\n * @param {?} span\n * @param {?} expression\n */\n function NonNullAssert(span, expression) {\n var _this = _super.call(this, span) || this;\n _this.expression = expression;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n NonNullAssert.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitNonNullAssert(this, context);\n };\n return NonNullAssert;\n}(AST));\nvar MethodCall = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](MethodCall, _super);\n /**\n * @param {?} span\n * @param {?} receiver\n * @param {?} name\n * @param {?} args\n */\n function MethodCall(span, receiver, name, args) {\n var _this = _super.call(this, span) || this;\n _this.receiver = receiver;\n _this.name = name;\n _this.args = args;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n MethodCall.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitMethodCall(this, context);\n };\n return MethodCall;\n}(AST));\nvar SafeMethodCall = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](SafeMethodCall, _super);\n /**\n * @param {?} span\n * @param {?} receiver\n * @param {?} name\n * @param {?} args\n */\n function SafeMethodCall(span, receiver, name, args) {\n var _this = _super.call(this, span) || this;\n _this.receiver = receiver;\n _this.name = name;\n _this.args = args;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n SafeMethodCall.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitSafeMethodCall(this, context);\n };\n return SafeMethodCall;\n}(AST));\nvar FunctionCall = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](FunctionCall, _super);\n /**\n * @param {?} span\n * @param {?} target\n * @param {?} args\n */\n function FunctionCall(span, target, args) {\n var _this = _super.call(this, span) || this;\n _this.target = target;\n _this.args = args;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n FunctionCall.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return visitor.visitFunctionCall(this, context);\n };\n return FunctionCall;\n}(AST));\nvar ASTWithSource = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](ASTWithSource, _super);\n /**\n * @param {?} ast\n * @param {?} source\n * @param {?} location\n * @param {?} errors\n */\n function ASTWithSource(ast, source, location, errors) {\n var _this = _super.call(this, new ParseSpan(0, source == null ? 0 : source.length)) || this;\n _this.ast = ast;\n _this.source = source;\n _this.location = location;\n _this.errors = errors;\n return _this;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n ASTWithSource.prototype.visit = function (visitor, context) {\n if (context === void 0) { context = null; }\n return this.ast.visit(visitor, context);\n };\n /**\n * @return {?}\n */\n ASTWithSource.prototype.toString = function () { return this.source + \" in \" + this.location; };\n return ASTWithSource;\n}(AST));\nvar TemplateBinding = (function () {\n /**\n * @param {?} span\n * @param {?} key\n * @param {?} keyIsVar\n * @param {?} name\n * @param {?} expression\n */\n function TemplateBinding(span, key, keyIsVar, name, expression) {\n this.span = span;\n this.key = key;\n this.keyIsVar = keyIsVar;\n this.name = name;\n this.expression = expression;\n }\n return TemplateBinding;\n}());\nvar NullAstVisitor = (function () {\n function NullAstVisitor() {\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitBinary = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitChain = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitConditional = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitFunctionCall = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitImplicitReceiver = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitInterpolation = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitKeyedRead = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitKeyedWrite = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitLiteralArray = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitLiteralMap = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitLiteralPrimitive = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitMethodCall = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitPipe = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitPrefixNot = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitNonNullAssert = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitPropertyRead = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitPropertyWrite = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitQuote = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitSafeMethodCall = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n NullAstVisitor.prototype.visitSafePropertyRead = function (ast, context) { };\n return NullAstVisitor;\n}());\nvar RecursiveAstVisitor = (function () {\n function RecursiveAstVisitor() {\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitBinary = function (ast, context) {\n ast.left.visit(this);\n ast.right.visit(this);\n return null;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitChain = function (ast, context) { return this.visitAll(ast.expressions, context); };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitConditional = function (ast, context) {\n ast.condition.visit(this);\n ast.trueExp.visit(this);\n ast.falseExp.visit(this);\n return null;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitPipe = function (ast, context) {\n ast.exp.visit(this);\n this.visitAll(ast.args, context);\n return null;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitFunctionCall = function (ast, context) {\n ((ast.target)).visit(this);\n this.visitAll(ast.args, context);\n return null;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitImplicitReceiver = function (ast, context) { return null; };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitInterpolation = function (ast, context) {\n return this.visitAll(ast.expressions, context);\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitKeyedRead = function (ast, context) {\n ast.obj.visit(this);\n ast.key.visit(this);\n return null;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitKeyedWrite = function (ast, context) {\n ast.obj.visit(this);\n ast.key.visit(this);\n ast.value.visit(this);\n return null;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitLiteralArray = function (ast, context) {\n return this.visitAll(ast.expressions, context);\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitLiteralMap = function (ast, context) { return this.visitAll(ast.values, context); };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitLiteralPrimitive = function (ast, context) { return null; };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitMethodCall = function (ast, context) {\n ast.receiver.visit(this);\n return this.visitAll(ast.args, context);\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitPrefixNot = function (ast, context) {\n ast.expression.visit(this);\n return null;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitNonNullAssert = function (ast, context) {\n ast.expression.visit(this);\n return null;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitPropertyRead = function (ast, context) {\n ast.receiver.visit(this);\n return null;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitPropertyWrite = function (ast, context) {\n ast.receiver.visit(this);\n ast.value.visit(this);\n return null;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitSafePropertyRead = function (ast, context) {\n ast.receiver.visit(this);\n return null;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitSafeMethodCall = function (ast, context) {\n ast.receiver.visit(this);\n return this.visitAll(ast.args, context);\n };\n /**\n * @param {?} asts\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitAll = function (asts, context) {\n var _this = this;\n asts.forEach(function (ast) { return ast.visit(_this, context); });\n return null;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveAstVisitor.prototype.visitQuote = function (ast, context) { return null; };\n return RecursiveAstVisitor;\n}());\nvar AstTransformer = (function () {\n function AstTransformer() {\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitImplicitReceiver = function (ast, context) { return ast; };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitInterpolation = function (ast, context) {\n return new Interpolation(ast.span, ast.strings, this.visitAll(ast.expressions));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitLiteralPrimitive = function (ast, context) {\n return new LiteralPrimitive(ast.span, ast.value);\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitPropertyRead = function (ast, context) {\n return new PropertyRead(ast.span, ast.receiver.visit(this), ast.name);\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitPropertyWrite = function (ast, context) {\n return new PropertyWrite(ast.span, ast.receiver.visit(this), ast.name, ast.value.visit(this));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitSafePropertyRead = function (ast, context) {\n return new SafePropertyRead(ast.span, ast.receiver.visit(this), ast.name);\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitMethodCall = function (ast, context) {\n return new MethodCall(ast.span, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitSafeMethodCall = function (ast, context) {\n return new SafeMethodCall(ast.span, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitFunctionCall = function (ast, context) {\n return new FunctionCall(ast.span, /** @type {?} */ ((ast.target)).visit(this), this.visitAll(ast.args));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitLiteralArray = function (ast, context) {\n return new LiteralArray(ast.span, this.visitAll(ast.expressions));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitLiteralMap = function (ast, context) {\n return new LiteralMap(ast.span, ast.keys, this.visitAll(ast.values));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitBinary = function (ast, context) {\n return new Binary(ast.span, ast.operation, ast.left.visit(this), ast.right.visit(this));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitPrefixNot = function (ast, context) {\n return new PrefixNot(ast.span, ast.expression.visit(this));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitNonNullAssert = function (ast, context) {\n return new NonNullAssert(ast.span, ast.expression.visit(this));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitConditional = function (ast, context) {\n return new Conditional(ast.span, ast.condition.visit(this), ast.trueExp.visit(this), ast.falseExp.visit(this));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitPipe = function (ast, context) {\n return new BindingPipe(ast.span, ast.exp.visit(this), ast.name, this.visitAll(ast.args));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitKeyedRead = function (ast, context) {\n return new KeyedRead(ast.span, ast.obj.visit(this), ast.key.visit(this));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitKeyedWrite = function (ast, context) {\n return new KeyedWrite(ast.span, ast.obj.visit(this), ast.key.visit(this), ast.value.visit(this));\n };\n /**\n * @param {?} asts\n * @return {?}\n */\n AstTransformer.prototype.visitAll = function (asts) {\n var /** @type {?} */ res = new Array(asts.length);\n for (var /** @type {?} */ i = 0; i < asts.length; ++i) {\n res[i] = asts[i].visit(this);\n }\n return res;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitChain = function (ast, context) {\n return new Chain(ast.span, this.visitAll(ast.expressions));\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n AstTransformer.prototype.visitQuote = function (ast, context) {\n return new Quote(ast.span, ast.prefix, ast.uninterpretedExpression, ast.location);\n };\n return AstTransformer;\n}());\n/**\n * @param {?} ast\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\nfunction visitAstChildren(ast, visitor, context) {\n /**\n * @param {?} ast\n * @return {?}\n */\n function visit(ast) {\n visitor.visit && visitor.visit(ast, context) || ast.visit(visitor, context);\n }\n /**\n * @template T\n * @param {?} asts\n * @return {?}\n */\n function visitAll(asts) { asts.forEach(visit); }\n ast.visit({\n /**\n * @param {?} ast\n * @return {?}\n */\n visitBinary: function (ast) {\n visit(ast.left);\n visit(ast.right);\n },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitChain: function (ast) { visitAll(ast.expressions); },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitConditional: function (ast) {\n visit(ast.condition);\n visit(ast.trueExp);\n visit(ast.falseExp);\n },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitFunctionCall: function (ast) {\n if (ast.target) {\n visit(ast.target);\n }\n visitAll(ast.args);\n },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitImplicitReceiver: function (ast) { },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitInterpolation: function (ast) { visitAll(ast.expressions); },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitKeyedRead: function (ast) {\n visit(ast.obj);\n visit(ast.key);\n },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitKeyedWrite: function (ast) {\n visit(ast.obj);\n visit(ast.key);\n visit(ast.obj);\n },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitLiteralArray: function (ast) { visitAll(ast.expressions); },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitLiteralMap: function (ast) { },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitLiteralPrimitive: function (ast) { },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitMethodCall: function (ast) {\n visit(ast.receiver);\n visitAll(ast.args);\n },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitPipe: function (ast) {\n visit(ast.exp);\n visitAll(ast.args);\n },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitPrefixNot: function (ast) { visit(ast.expression); },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitNonNullAssert: function (ast) { visit(ast.expression); },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitPropertyRead: function (ast) { visit(ast.receiver); },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitPropertyWrite: function (ast) {\n visit(ast.receiver);\n visit(ast.value);\n },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitQuote: function (ast) { },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitSafeMethodCall: function (ast) {\n visit(ast.receiver);\n visitAll(ast.args);\n },\n /**\n * @param {?} ast\n * @return {?}\n */\n visitSafePropertyRead: function (ast) { visit(ast.receiver); },\n });\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar $EOF = 0;\nvar $TAB = 9;\nvar $LF = 10;\nvar $VTAB = 11;\nvar $FF = 12;\nvar $CR = 13;\nvar $SPACE = 32;\nvar $BANG = 33;\nvar $DQ = 34;\nvar $HASH = 35;\nvar $$ = 36;\nvar $PERCENT = 37;\nvar $AMPERSAND = 38;\nvar $SQ = 39;\nvar $LPAREN = 40;\nvar $RPAREN = 41;\nvar $STAR = 42;\nvar $PLUS = 43;\nvar $COMMA = 44;\nvar $MINUS = 45;\nvar $PERIOD = 46;\nvar $SLASH = 47;\nvar $COLON = 58;\nvar $SEMICOLON = 59;\nvar $LT = 60;\nvar $EQ = 61;\nvar $GT = 62;\nvar $QUESTION = 63;\nvar $0 = 48;\nvar $9 = 57;\nvar $A = 65;\nvar $E = 69;\nvar $F = 70;\nvar $X = 88;\nvar $Z = 90;\nvar $LBRACKET = 91;\nvar $BACKSLASH = 92;\nvar $RBRACKET = 93;\nvar $CARET = 94;\nvar $_ = 95;\nvar $a = 97;\nvar $e = 101;\nvar $f = 102;\nvar $n = 110;\nvar $r = 114;\nvar $t = 116;\nvar $u = 117;\nvar $v = 118;\nvar $x = 120;\nvar $z = 122;\nvar $LBRACE = 123;\nvar $BAR = 124;\nvar $RBRACE = 125;\nvar $NBSP = 160;\nvar $BT = 96;\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isWhitespace(code) {\n return (code >= $TAB && code <= $SPACE) || (code == $NBSP);\n}\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isDigit(code) {\n return $0 <= code && code <= $9;\n}\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isAsciiLetter(code) {\n return code >= $a && code <= $z || code >= $A && code <= $Z;\n}\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isAsciiHexDigit(code) {\n return code >= $a && code <= $f || code >= $A && code <= $F || isDigit(code);\n}\n/**\n * A replacement for \\@Injectable to be used in the compiler, so that\n * we don't try to evaluate the metadata in the compiler during AoT.\n * This decorator is enough to make the compiler work with the ReflectiveInjector though.\n * \\@Annotation\n * @return {?}\n */\nfunction CompilerInjectable() {\n return function (x) { return x; };\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @param {?} identifier\n * @param {?} value\n * @return {?}\n */\nfunction assertArrayOfStrings(identifier, value) {\n if (!__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"isDevMode\"])() || value == null) {\n return;\n }\n if (!Array.isArray(value)) {\n throw new Error(\"Expected '\" + identifier + \"' to be an array of strings.\");\n }\n for (var /** @type {?} */ i = 0; i < value.length; i += 1) {\n if (typeof value[i] !== 'string') {\n throw new Error(\"Expected '\" + identifier + \"' to be an array of strings.\");\n }\n }\n}\nvar INTERPOLATION_BLACKLIST_REGEXPS = [\n /^\\s*$/,\n /[<>]/,\n /^[{}]$/,\n /&(#|[a-z])/i,\n /^\\/\\//,\n];\n/**\n * @param {?} identifier\n * @param {?} value\n * @return {?}\n */\nfunction assertInterpolationSymbols(identifier, value) {\n if (value != null && !(Array.isArray(value) && value.length == 2)) {\n throw new Error(\"Expected '\" + identifier + \"' to be an array, [start, end].\");\n }\n else if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"isDevMode\"])() && value != null) {\n var /** @type {?} */ start_1 = (value[0]);\n var /** @type {?} */ end_1 = (value[1]);\n // black list checking\n INTERPOLATION_BLACKLIST_REGEXPS.forEach(function (regexp) {\n if (regexp.test(start_1) || regexp.test(end_1)) {\n throw new Error(\"['\" + start_1 + \"', '\" + end_1 + \"'] contains unusable interpolation symbol.\");\n }\n });\n }\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar InterpolationConfig = (function () {\n /**\n * @param {?} start\n * @param {?} end\n */\n function InterpolationConfig(start, end) {\n this.start = start;\n this.end = end;\n }\n /**\n * @param {?} markers\n * @return {?}\n */\n InterpolationConfig.fromArray = function (markers) {\n if (!markers) {\n return DEFAULT_INTERPOLATION_CONFIG;\n }\n assertInterpolationSymbols('interpolation', markers);\n return new InterpolationConfig(markers[0], markers[1]);\n };\n ;\n return InterpolationConfig;\n}());\nvar DEFAULT_INTERPOLATION_CONFIG = new InterpolationConfig('{{', '}}');\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar TokenType = {};\nTokenType.Character = 0;\nTokenType.Identifier = 1;\nTokenType.Keyword = 2;\nTokenType.String = 3;\nTokenType.Operator = 4;\nTokenType.Number = 5;\nTokenType.Error = 6;\nTokenType[TokenType.Character] = \"Character\";\nTokenType[TokenType.Identifier] = \"Identifier\";\nTokenType[TokenType.Keyword] = \"Keyword\";\nTokenType[TokenType.String] = \"String\";\nTokenType[TokenType.Operator] = \"Operator\";\nTokenType[TokenType.Number] = \"Number\";\nTokenType[TokenType.Error] = \"Error\";\nvar KEYWORDS = ['var', 'let', 'as', 'null', 'undefined', 'true', 'false', 'if', 'else', 'this'];\nvar Lexer = (function () {\n function Lexer() {\n }\n /**\n * @param {?} text\n * @return {?}\n */\n Lexer.prototype.tokenize = function (text) {\n var /** @type {?} */ scanner = new _Scanner(text);\n var /** @type {?} */ tokens = [];\n var /** @type {?} */ token = scanner.scanToken();\n while (token != null) {\n tokens.push(token);\n token = scanner.scanToken();\n }\n return tokens;\n };\n return Lexer;\n}());\nLexer.decorators = [\n { type: CompilerInjectable },\n];\n/**\n * @nocollapse\n */\nLexer.ctorParameters = function () { return []; };\nvar Token = (function () {\n /**\n * @param {?} index\n * @param {?} type\n * @param {?} numValue\n * @param {?} strValue\n */\n function Token(index, type, numValue, strValue) {\n this.index = index;\n this.type = type;\n this.numValue = numValue;\n this.strValue = strValue;\n }\n /**\n * @param {?} code\n * @return {?}\n */\n Token.prototype.isCharacter = function (code) {\n return this.type == TokenType.Character && this.numValue == code;\n };\n /**\n * @return {?}\n */\n Token.prototype.isNumber = function () { return this.type == TokenType.Number; };\n /**\n * @return {?}\n */\n Token.prototype.isString = function () { return this.type == TokenType.String; };\n /**\n * @param {?} operater\n * @return {?}\n */\n Token.prototype.isOperator = function (operater) {\n return this.type == TokenType.Operator && this.strValue == operater;\n };\n /**\n * @return {?}\n */\n Token.prototype.isIdentifier = function () { return this.type == TokenType.Identifier; };\n /**\n * @return {?}\n */\n Token.prototype.isKeyword = function () { return this.type == TokenType.Keyword; };\n /**\n * @return {?}\n */\n Token.prototype.isKeywordLet = function () { return this.type == TokenType.Keyword && this.strValue == 'let'; };\n /**\n * @return {?}\n */\n Token.prototype.isKeywordAs = function () { return this.type == TokenType.Keyword && this.strValue == 'as'; };\n /**\n * @return {?}\n */\n Token.prototype.isKeywordNull = function () { return this.type == TokenType.Keyword && this.strValue == 'null'; };\n /**\n * @return {?}\n */\n Token.prototype.isKeywordUndefined = function () {\n return this.type == TokenType.Keyword && this.strValue == 'undefined';\n };\n /**\n * @return {?}\n */\n Token.prototype.isKeywordTrue = function () { return this.type == TokenType.Keyword && this.strValue == 'true'; };\n /**\n * @return {?}\n */\n Token.prototype.isKeywordFalse = function () { return this.type == TokenType.Keyword && this.strValue == 'false'; };\n /**\n * @return {?}\n */\n Token.prototype.isKeywordThis = function () { return this.type == TokenType.Keyword && this.strValue == 'this'; };\n /**\n * @return {?}\n */\n Token.prototype.isError = function () { return this.type == TokenType.Error; };\n /**\n * @return {?}\n */\n Token.prototype.toNumber = function () { return this.type == TokenType.Number ? this.numValue : -1; };\n /**\n * @return {?}\n */\n Token.prototype.toString = function () {\n switch (this.type) {\n case TokenType.Character:\n case TokenType.Identifier:\n case TokenType.Keyword:\n case TokenType.Operator:\n case TokenType.String:\n case TokenType.Error:\n return this.strValue;\n case TokenType.Number:\n return this.numValue.toString();\n default:\n return null;\n }\n };\n return Token;\n}());\n/**\n * @param {?} index\n * @param {?} code\n * @return {?}\n */\nfunction newCharacterToken(index, code) {\n return new Token(index, TokenType.Character, code, String.fromCharCode(code));\n}\n/**\n * @param {?} index\n * @param {?} text\n * @return {?}\n */\nfunction newIdentifierToken(index, text) {\n return new Token(index, TokenType.Identifier, 0, text);\n}\n/**\n * @param {?} index\n * @param {?} text\n * @return {?}\n */\nfunction newKeywordToken(index, text) {\n return new Token(index, TokenType.Keyword, 0, text);\n}\n/**\n * @param {?} index\n * @param {?} text\n * @return {?}\n */\nfunction newOperatorToken(index, text) {\n return new Token(index, TokenType.Operator, 0, text);\n}\n/**\n * @param {?} index\n * @param {?} text\n * @return {?}\n */\nfunction newStringToken(index, text) {\n return new Token(index, TokenType.String, 0, text);\n}\n/**\n * @param {?} index\n * @param {?} n\n * @return {?}\n */\nfunction newNumberToken(index, n) {\n return new Token(index, TokenType.Number, n, '');\n}\n/**\n * @param {?} index\n * @param {?} message\n * @return {?}\n */\nfunction newErrorToken(index, message) {\n return new Token(index, TokenType.Error, 0, message);\n}\nvar EOF = new Token(-1, TokenType.Character, 0, '');\nvar _Scanner = (function () {\n /**\n * @param {?} input\n */\n function _Scanner(input) {\n this.input = input;\n this.peek = 0;\n this.index = -1;\n this.length = input.length;\n this.advance();\n }\n /**\n * @return {?}\n */\n _Scanner.prototype.advance = function () {\n this.peek = ++this.index >= this.length ? $EOF : this.input.charCodeAt(this.index);\n };\n /**\n * @return {?}\n */\n _Scanner.prototype.scanToken = function () {\n var /** @type {?} */ input = this.input, /** @type {?} */ length = this.length;\n var /** @type {?} */ peek = this.peek, /** @type {?} */ index = this.index;\n // Skip whitespace.\n while (peek <= $SPACE) {\n if (++index >= length) {\n peek = $EOF;\n break;\n }\n else {\n peek = input.charCodeAt(index);\n }\n }\n this.peek = peek;\n this.index = index;\n if (index >= length) {\n return null;\n }\n // Handle identifiers and numbers.\n if (isIdentifierStart(peek))\n return this.scanIdentifier();\n if (isDigit(peek))\n return this.scanNumber(index);\n var /** @type {?} */ start = index;\n switch (peek) {\n case $PERIOD:\n this.advance();\n return isDigit(this.peek) ? this.scanNumber(start) :\n newCharacterToken(start, $PERIOD);\n case $LPAREN:\n case $RPAREN:\n case $LBRACE:\n case $RBRACE:\n case $LBRACKET:\n case $RBRACKET:\n case $COMMA:\n case $COLON:\n case $SEMICOLON:\n return this.scanCharacter(start, peek);\n case $SQ:\n case $DQ:\n return this.scanString();\n case $HASH:\n case $PLUS:\n case $MINUS:\n case $STAR:\n case $SLASH:\n case $PERCENT:\n case $CARET:\n return this.scanOperator(start, String.fromCharCode(peek));\n case $QUESTION:\n return this.scanComplexOperator(start, '?', $PERIOD, '.');\n case $LT:\n case $GT:\n return this.scanComplexOperator(start, String.fromCharCode(peek), $EQ, '=');\n case $BANG:\n case $EQ:\n return this.scanComplexOperator(start, String.fromCharCode(peek), $EQ, '=', $EQ, '=');\n case $AMPERSAND:\n return this.scanComplexOperator(start, '&', $AMPERSAND, '&');\n case $BAR:\n return this.scanComplexOperator(start, '|', $BAR, '|');\n case $NBSP:\n while (isWhitespace(this.peek))\n this.advance();\n return this.scanToken();\n }\n this.advance();\n return this.error(\"Unexpected character [\" + String.fromCharCode(peek) + \"]\", 0);\n };\n /**\n * @param {?} start\n * @param {?} code\n * @return {?}\n */\n _Scanner.prototype.scanCharacter = function (start, code) {\n this.advance();\n return newCharacterToken(start, code);\n };\n /**\n * @param {?} start\n * @param {?} str\n * @return {?}\n */\n _Scanner.prototype.scanOperator = function (start, str) {\n this.advance();\n return newOperatorToken(start, str);\n };\n /**\n * Tokenize a 2/3 char long operator\n *\n * @param {?} start start index in the expression\n * @param {?} one first symbol (always part of the operator)\n * @param {?} twoCode code point for the second symbol\n * @param {?} two second symbol (part of the operator when the second code point matches)\n * @param {?=} threeCode code point for the third symbol\n * @param {?=} three third symbol (part of the operator when provided and matches source expression)\n * @return {?}\n */\n _Scanner.prototype.scanComplexOperator = function (start, one, twoCode, two, threeCode, three) {\n this.advance();\n var /** @type {?} */ str = one;\n if (this.peek == twoCode) {\n this.advance();\n str += two;\n }\n if (threeCode != null && this.peek == threeCode) {\n this.advance();\n str += three;\n }\n return newOperatorToken(start, str);\n };\n /**\n * @return {?}\n */\n _Scanner.prototype.scanIdentifier = function () {\n var /** @type {?} */ start = this.index;\n this.advance();\n while (isIdentifierPart(this.peek))\n this.advance();\n var /** @type {?} */ str = this.input.substring(start, this.index);\n return KEYWORDS.indexOf(str) > -1 ? newKeywordToken(start, str) :\n newIdentifierToken(start, str);\n };\n /**\n * @param {?} start\n * @return {?}\n */\n _Scanner.prototype.scanNumber = function (start) {\n var /** @type {?} */ simple = (this.index === start);\n this.advance(); // Skip initial digit.\n while (true) {\n if (isDigit(this.peek)) {\n // Do nothing.\n }\n else if (this.peek == $PERIOD) {\n simple = false;\n }\n else if (isExponentStart(this.peek)) {\n this.advance();\n if (isExponentSign(this.peek))\n this.advance();\n if (!isDigit(this.peek))\n return this.error('Invalid exponent', -1);\n simple = false;\n }\n else {\n break;\n }\n this.advance();\n }\n var /** @type {?} */ str = this.input.substring(start, this.index);\n var /** @type {?} */ value = simple ? parseIntAutoRadix(str) : parseFloat(str);\n return newNumberToken(start, value);\n };\n /**\n * @return {?}\n */\n _Scanner.prototype.scanString = function () {\n var /** @type {?} */ start = this.index;\n var /** @type {?} */ quote = this.peek;\n this.advance(); // Skip initial quote.\n var /** @type {?} */ buffer = '';\n var /** @type {?} */ marker = this.index;\n var /** @type {?} */ input = this.input;\n while (this.peek != quote) {\n if (this.peek == $BACKSLASH) {\n buffer += input.substring(marker, this.index);\n this.advance();\n var /** @type {?} */ unescapedCode = void 0;\n // Workaround for TS2.1-introduced type strictness\n this.peek = this.peek;\n if (this.peek == $u) {\n // 4 character hex code for unicode character.\n var /** @type {?} */ hex = input.substring(this.index + 1, this.index + 5);\n if (/^[0-9a-f]+$/i.test(hex)) {\n unescapedCode = parseInt(hex, 16);\n }\n else {\n return this.error(\"Invalid unicode escape [\\\\u\" + hex + \"]\", 0);\n }\n for (var /** @type {?} */ i = 0; i < 5; i++) {\n this.advance();\n }\n }\n else {\n unescapedCode = unescape(this.peek);\n this.advance();\n }\n buffer += String.fromCharCode(unescapedCode);\n marker = this.index;\n }\n else if (this.peek == $EOF) {\n return this.error('Unterminated quote', 0);\n }\n else {\n this.advance();\n }\n }\n var /** @type {?} */ last = input.substring(marker, this.index);\n this.advance(); // Skip terminating quote.\n return newStringToken(start, buffer + last);\n };\n /**\n * @param {?} message\n * @param {?} offset\n * @return {?}\n */\n _Scanner.prototype.error = function (message, offset) {\n var /** @type {?} */ position = this.index + offset;\n return newErrorToken(position, \"Lexer Error: \" + message + \" at column \" + position + \" in expression [\" + this.input + \"]\");\n };\n return _Scanner;\n}());\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isIdentifierStart(code) {\n return ($a <= code && code <= $z) || ($A <= code && code <= $Z) ||\n (code == $_) || (code == $$);\n}\n/**\n * @param {?} input\n * @return {?}\n */\nfunction isIdentifier(input) {\n if (input.length == 0)\n return false;\n var /** @type {?} */ scanner = new _Scanner(input);\n if (!isIdentifierStart(scanner.peek))\n return false;\n scanner.advance();\n while (scanner.peek !== $EOF) {\n if (!isIdentifierPart(scanner.peek))\n return false;\n scanner.advance();\n }\n return true;\n}\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isIdentifierPart(code) {\n return isAsciiLetter(code) || isDigit(code) || (code == $_) ||\n (code == $$);\n}\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isExponentStart(code) {\n return code == $e || code == $E;\n}\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isExponentSign(code) {\n return code == $MINUS || code == $PLUS;\n}\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isQuote(code) {\n return code === $SQ || code === $DQ || code === $BT;\n}\n/**\n * @param {?} code\n * @return {?}\n */\nfunction unescape(code) {\n switch (code) {\n case $n:\n return $LF;\n case $f:\n return $FF;\n case $r:\n return $CR;\n case $t:\n return $TAB;\n case $v:\n return $VTAB;\n default:\n return code;\n }\n}\n/**\n * @param {?} text\n * @return {?}\n */\nfunction parseIntAutoRadix(text) {\n var /** @type {?} */ result = parseInt(text);\n if (isNaN(result)) {\n throw new Error('Invalid integer literal when parsing ' + text);\n }\n return result;\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar SplitInterpolation = (function () {\n /**\n * @param {?} strings\n * @param {?} expressions\n * @param {?} offsets\n */\n function SplitInterpolation(strings, expressions, offsets) {\n this.strings = strings;\n this.expressions = expressions;\n this.offsets = offsets;\n }\n return SplitInterpolation;\n}());\nvar TemplateBindingParseResult = (function () {\n /**\n * @param {?} templateBindings\n * @param {?} warnings\n * @param {?} errors\n */\n function TemplateBindingParseResult(templateBindings, warnings, errors) {\n this.templateBindings = templateBindings;\n this.warnings = warnings;\n this.errors = errors;\n }\n return TemplateBindingParseResult;\n}());\n/**\n * @param {?} config\n * @return {?}\n */\nfunction _createInterpolateRegExp(config) {\n var /** @type {?} */ pattern = escapeRegExp(config.start) + '([\\\\s\\\\S]*?)' + escapeRegExp(config.end);\n return new RegExp(pattern, 'g');\n}\nvar Parser = (function () {\n /**\n * @param {?} _lexer\n */\n function Parser(_lexer) {\n this._lexer = _lexer;\n this.errors = [];\n }\n /**\n * @param {?} input\n * @param {?} location\n * @param {?=} interpolationConfig\n * @return {?}\n */\n Parser.prototype.parseAction = function (input, location, interpolationConfig) {\n if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }\n this._checkNoInterpolation(input, location, interpolationConfig);\n var /** @type {?} */ sourceToLex = this._stripComments(input);\n var /** @type {?} */ tokens = this._lexer.tokenize(this._stripComments(input));\n var /** @type {?} */ ast = new _ParseAST(input, location, tokens, sourceToLex.length, true, this.errors, input.length - sourceToLex.length)\n .parseChain();\n return new ASTWithSource(ast, input, location, this.errors);\n };\n /**\n * @param {?} input\n * @param {?} location\n * @param {?=} interpolationConfig\n * @return {?}\n */\n Parser.prototype.parseBinding = function (input, location, interpolationConfig) {\n if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }\n var /** @type {?} */ ast = this._parseBindingAst(input, location, interpolationConfig);\n return new ASTWithSource(ast, input, location, this.errors);\n };\n /**\n * @param {?} input\n * @param {?} location\n * @param {?=} interpolationConfig\n * @return {?}\n */\n Parser.prototype.parseSimpleBinding = function (input, location, interpolationConfig) {\n if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }\n var /** @type {?} */ ast = this._parseBindingAst(input, location, interpolationConfig);\n var /** @type {?} */ errors = SimpleExpressionChecker.check(ast);\n if (errors.length > 0) {\n this._reportError(\"Host binding expression cannot contain \" + errors.join(' '), input, location);\n }\n return new ASTWithSource(ast, input, location, this.errors);\n };\n /**\n * @param {?} message\n * @param {?} input\n * @param {?} errLocation\n * @param {?=} ctxLocation\n * @return {?}\n */\n Parser.prototype._reportError = function (message, input, errLocation, ctxLocation) {\n this.errors.push(new ParserError(message, input, errLocation, ctxLocation));\n };\n /**\n * @param {?} input\n * @param {?} location\n * @param {?} interpolationConfig\n * @return {?}\n */\n Parser.prototype._parseBindingAst = function (input, location, interpolationConfig) {\n // Quotes expressions use 3rd-party expression language. We don't want to use\n // our lexer or parser for that, so we check for that ahead of time.\n var /** @type {?} */ quote = this._parseQuote(input, location);\n if (quote != null) {\n return quote;\n }\n this._checkNoInterpolation(input, location, interpolationConfig);\n var /** @type {?} */ sourceToLex = this._stripComments(input);\n var /** @type {?} */ tokens = this._lexer.tokenize(sourceToLex);\n return new _ParseAST(input, location, tokens, sourceToLex.length, false, this.errors, input.length - sourceToLex.length)\n .parseChain();\n };\n /**\n * @param {?} input\n * @param {?} location\n * @return {?}\n */\n Parser.prototype._parseQuote = function (input, location) {\n if (input == null)\n return null;\n var /** @type {?} */ prefixSeparatorIndex = input.indexOf(':');\n if (prefixSeparatorIndex == -1)\n return null;\n var /** @type {?} */ prefix = input.substring(0, prefixSeparatorIndex).trim();\n if (!isIdentifier(prefix))\n return null;\n var /** @type {?} */ uninterpretedExpression = input.substring(prefixSeparatorIndex + 1);\n return new Quote(new ParseSpan(0, input.length), prefix, uninterpretedExpression, location);\n };\n /**\n * @param {?} prefixToken\n * @param {?} input\n * @param {?} location\n * @return {?}\n */\n Parser.prototype.parseTemplateBindings = function (prefixToken, input, location) {\n var /** @type {?} */ tokens = this._lexer.tokenize(input);\n if (prefixToken) {\n // Prefix the tokens with the tokens from prefixToken but have them take no space (0 index).\n var /** @type {?} */ prefixTokens = this._lexer.tokenize(prefixToken).map(function (t) {\n t.index = 0;\n return t;\n });\n tokens.unshift.apply(tokens, prefixTokens);\n }\n return new _ParseAST(input, location, tokens, input.length, false, this.errors, 0)\n .parseTemplateBindings();\n };\n /**\n * @param {?} input\n * @param {?} location\n * @param {?=} interpolationConfig\n * @return {?}\n */\n Parser.prototype.parseInterpolation = function (input, location, interpolationConfig) {\n if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }\n var /** @type {?} */ split = this.splitInterpolation(input, location, interpolationConfig);\n if (split == null)\n return null;\n var /** @type {?} */ expressions = [];\n for (var /** @type {?} */ i = 0; i < split.expressions.length; ++i) {\n var /** @type {?} */ expressionText = split.expressions[i];\n var /** @type {?} */ sourceToLex = this._stripComments(expressionText);\n var /** @type {?} */ tokens = this._lexer.tokenize(sourceToLex);\n var /** @type {?} */ ast = new _ParseAST(input, location, tokens, sourceToLex.length, false, this.errors, split.offsets[i] + (expressionText.length - sourceToLex.length))\n .parseChain();\n expressions.push(ast);\n }\n return new ASTWithSource(new Interpolation(new ParseSpan(0, input == null ? 0 : input.length), split.strings, expressions), input, location, this.errors);\n };\n /**\n * @param {?} input\n * @param {?} location\n * @param {?=} interpolationConfig\n * @return {?}\n */\n Parser.prototype.splitInterpolation = function (input, location, interpolationConfig) {\n if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }\n var /** @type {?} */ regexp = _createInterpolateRegExp(interpolationConfig);\n var /** @type {?} */ parts = input.split(regexp);\n if (parts.length <= 1) {\n return null;\n }\n var /** @type {?} */ strings = [];\n var /** @type {?} */ expressions = [];\n var /** @type {?} */ offsets = [];\n var /** @type {?} */ offset = 0;\n for (var /** @type {?} */ i = 0; i < parts.length; i++) {\n var /** @type {?} */ part = parts[i];\n if (i % 2 === 0) {\n // fixed string\n strings.push(part);\n offset += part.length;\n }\n else if (part.trim().length > 0) {\n offset += interpolationConfig.start.length;\n expressions.push(part);\n offsets.push(offset);\n offset += part.length + interpolationConfig.end.length;\n }\n else {\n this._reportError('Blank expressions are not allowed in interpolated strings', input, \"at column \" + this._findInterpolationErrorColumn(parts, i, interpolationConfig) + \" in\", location);\n expressions.push('$implict');\n offsets.push(offset);\n }\n }\n return new SplitInterpolation(strings, expressions, offsets);\n };\n /**\n * @param {?} input\n * @param {?} location\n * @return {?}\n */\n Parser.prototype.wrapLiteralPrimitive = function (input, location) {\n return new ASTWithSource(new LiteralPrimitive(new ParseSpan(0, input == null ? 0 : input.length), input), input, location, this.errors);\n };\n /**\n * @param {?} input\n * @return {?}\n */\n Parser.prototype._stripComments = function (input) {\n var /** @type {?} */ i = this._commentStart(input);\n return i != null ? input.substring(0, i).trim() : input;\n };\n /**\n * @param {?} input\n * @return {?}\n */\n Parser.prototype._commentStart = function (input) {\n var /** @type {?} */ outerQuote = null;\n for (var /** @type {?} */ i = 0; i < input.length - 1; i++) {\n var /** @type {?} */ char = input.charCodeAt(i);\n var /** @type {?} */ nextChar = input.charCodeAt(i + 1);\n if (char === $SLASH && nextChar == $SLASH && outerQuote == null)\n return i;\n if (outerQuote === char) {\n outerQuote = null;\n }\n else if (outerQuote == null && isQuote(char)) {\n outerQuote = char;\n }\n }\n return null;\n };\n /**\n * @param {?} input\n * @param {?} location\n * @param {?} interpolationConfig\n * @return {?}\n */\n Parser.prototype._checkNoInterpolation = function (input, location, interpolationConfig) {\n var /** @type {?} */ regexp = _createInterpolateRegExp(interpolationConfig);\n var /** @type {?} */ parts = input.split(regexp);\n if (parts.length > 1) {\n this._reportError(\"Got interpolation (\" + interpolationConfig.start + interpolationConfig.end + \") where expression was expected\", input, \"at column \" + this._findInterpolationErrorColumn(parts, 1, interpolationConfig) + \" in\", location);\n }\n };\n /**\n * @param {?} parts\n * @param {?} partInErrIdx\n * @param {?} interpolationConfig\n * @return {?}\n */\n Parser.prototype._findInterpolationErrorColumn = function (parts, partInErrIdx, interpolationConfig) {\n var /** @type {?} */ errLocation = '';\n for (var /** @type {?} */ j = 0; j < partInErrIdx; j++) {\n errLocation += j % 2 === 0 ?\n parts[j] :\n \"\" + interpolationConfig.start + parts[j] + interpolationConfig.end;\n }\n return errLocation.length;\n };\n return Parser;\n}());\nParser.decorators = [\n { type: CompilerInjectable },\n];\n/**\n * @nocollapse\n */\nParser.ctorParameters = function () { return [\n { type: Lexer, },\n]; };\nvar _ParseAST = (function () {\n /**\n * @param {?} input\n * @param {?} location\n * @param {?} tokens\n * @param {?} inputLength\n * @param {?} parseAction\n * @param {?} errors\n * @param {?} offset\n */\n function _ParseAST(input, location, tokens, inputLength, parseAction, errors, offset) {\n this.input = input;\n this.location = location;\n this.tokens = tokens;\n this.inputLength = inputLength;\n this.parseAction = parseAction;\n this.errors = errors;\n this.offset = offset;\n this.rparensExpected = 0;\n this.rbracketsExpected = 0;\n this.rbracesExpected = 0;\n this.index = 0;\n }\n /**\n * @param {?} offset\n * @return {?}\n */\n _ParseAST.prototype.peek = function (offset) {\n var /** @type {?} */ i = this.index + offset;\n return i < this.tokens.length ? this.tokens[i] : EOF;\n };\n Object.defineProperty(_ParseAST.prototype, \"next\", {\n /**\n * @return {?}\n */\n get: function () { return this.peek(0); },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(_ParseAST.prototype, \"inputIndex\", {\n /**\n * @return {?}\n */\n get: function () {\n return (this.index < this.tokens.length) ? this.next.index + this.offset :\n this.inputLength + this.offset;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @param {?} start\n * @return {?}\n */\n _ParseAST.prototype.span = function (start) { return new ParseSpan(start, this.inputIndex); };\n /**\n * @return {?}\n */\n _ParseAST.prototype.advance = function () { this.index++; };\n /**\n * @param {?} code\n * @return {?}\n */\n _ParseAST.prototype.optionalCharacter = function (code) {\n if (this.next.isCharacter(code)) {\n this.advance();\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.peekKeywordLet = function () { return this.next.isKeywordLet(); };\n /**\n * @return {?}\n */\n _ParseAST.prototype.peekKeywordAs = function () { return this.next.isKeywordAs(); };\n /**\n * @param {?} code\n * @return {?}\n */\n _ParseAST.prototype.expectCharacter = function (code) {\n if (this.optionalCharacter(code))\n return;\n this.error(\"Missing expected \" + String.fromCharCode(code));\n };\n /**\n * @param {?} op\n * @return {?}\n */\n _ParseAST.prototype.optionalOperator = function (op) {\n if (this.next.isOperator(op)) {\n this.advance();\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * @param {?} operator\n * @return {?}\n */\n _ParseAST.prototype.expectOperator = function (operator) {\n if (this.optionalOperator(operator))\n return;\n this.error(\"Missing expected operator \" + operator);\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.expectIdentifierOrKeyword = function () {\n var /** @type {?} */ n = this.next;\n if (!n.isIdentifier() && !n.isKeyword()) {\n this.error(\"Unexpected token \" + n + \", expected identifier or keyword\");\n return '';\n }\n this.advance();\n return (n.toString());\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.expectIdentifierOrKeywordOrString = function () {\n var /** @type {?} */ n = this.next;\n if (!n.isIdentifier() && !n.isKeyword() && !n.isString()) {\n this.error(\"Unexpected token \" + n + \", expected identifier, keyword, or string\");\n return '';\n }\n this.advance();\n return (n.toString());\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parseChain = function () {\n var /** @type {?} */ exprs = [];\n var /** @type {?} */ start = this.inputIndex;\n while (this.index < this.tokens.length) {\n var /** @type {?} */ expr = this.parsePipe();\n exprs.push(expr);\n if (this.optionalCharacter($SEMICOLON)) {\n if (!this.parseAction) {\n this.error('Binding expression cannot contain chained expression');\n }\n while (this.optionalCharacter($SEMICOLON)) {\n } // read all semicolons\n }\n else if (this.index < this.tokens.length) {\n this.error(\"Unexpected token '\" + this.next + \"'\");\n }\n }\n if (exprs.length == 0)\n return new EmptyExpr(this.span(start));\n if (exprs.length == 1)\n return exprs[0];\n return new Chain(this.span(start), exprs);\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parsePipe = function () {\n var /** @type {?} */ result = this.parseExpression();\n if (this.optionalOperator('|')) {\n if (this.parseAction) {\n this.error('Cannot have a pipe in an action expression');\n }\n do {\n var /** @type {?} */ name = this.expectIdentifierOrKeyword();\n var /** @type {?} */ args = [];\n while (this.optionalCharacter($COLON)) {\n args.push(this.parseExpression());\n }\n result = new BindingPipe(this.span(result.span.start), result, name, args);\n } while (this.optionalOperator('|'));\n }\n return result;\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parseExpression = function () { return this.parseConditional(); };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parseConditional = function () {\n var /** @type {?} */ start = this.inputIndex;\n var /** @type {?} */ result = this.parseLogicalOr();\n if (this.optionalOperator('?')) {\n var /** @type {?} */ yes = this.parsePipe();\n var /** @type {?} */ no = void 0;\n if (!this.optionalCharacter($COLON)) {\n var /** @type {?} */ end = this.inputIndex;\n var /** @type {?} */ expression = this.input.substring(start, end);\n this.error(\"Conditional expression \" + expression + \" requires all 3 expressions\");\n no = new EmptyExpr(this.span(start));\n }\n else {\n no = this.parsePipe();\n }\n return new Conditional(this.span(start), result, yes, no);\n }\n else {\n return result;\n }\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parseLogicalOr = function () {\n // '||'\n var /** @type {?} */ result = this.parseLogicalAnd();\n while (this.optionalOperator('||')) {\n var /** @type {?} */ right = this.parseLogicalAnd();\n result = new Binary(this.span(result.span.start), '||', result, right);\n }\n return result;\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parseLogicalAnd = function () {\n // '&&'\n var /** @type {?} */ result = this.parseEquality();\n while (this.optionalOperator('&&')) {\n var /** @type {?} */ right = this.parseEquality();\n result = new Binary(this.span(result.span.start), '&&', result, right);\n }\n return result;\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parseEquality = function () {\n // '==','!=','===','!=='\n var /** @type {?} */ result = this.parseRelational();\n while (this.next.type == TokenType.Operator) {\n var /** @type {?} */ operator = this.next.strValue;\n switch (operator) {\n case '==':\n case '===':\n case '!=':\n case '!==':\n this.advance();\n var /** @type {?} */ right = this.parseRelational();\n result = new Binary(this.span(result.span.start), operator, result, right);\n continue;\n }\n break;\n }\n return result;\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parseRelational = function () {\n // '<', '>', '<=', '>='\n var /** @type {?} */ result = this.parseAdditive();\n while (this.next.type == TokenType.Operator) {\n var /** @type {?} */ operator = this.next.strValue;\n switch (operator) {\n case '<':\n case '>':\n case '<=':\n case '>=':\n this.advance();\n var /** @type {?} */ right = this.parseAdditive();\n result = new Binary(this.span(result.span.start), operator, result, right);\n continue;\n }\n break;\n }\n return result;\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parseAdditive = function () {\n // '+', '-'\n var /** @type {?} */ result = this.parseMultiplicative();\n while (this.next.type == TokenType.Operator) {\n var /** @type {?} */ operator = this.next.strValue;\n switch (operator) {\n case '+':\n case '-':\n this.advance();\n var /** @type {?} */ right = this.parseMultiplicative();\n result = new Binary(this.span(result.span.start), operator, result, right);\n continue;\n }\n break;\n }\n return result;\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parseMultiplicative = function () {\n // '*', '%', '/'\n var /** @type {?} */ result = this.parsePrefix();\n while (this.next.type == TokenType.Operator) {\n var /** @type {?} */ operator = this.next.strValue;\n switch (operator) {\n case '*':\n case '%':\n case '/':\n this.advance();\n var /** @type {?} */ right = this.parsePrefix();\n result = new Binary(this.span(result.span.start), operator, result, right);\n continue;\n }\n break;\n }\n return result;\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parsePrefix = function () {\n if (this.next.type == TokenType.Operator) {\n var /** @type {?} */ start = this.inputIndex;\n var /** @type {?} */ operator = this.next.strValue;\n var /** @type {?} */ result = void 0;\n switch (operator) {\n case '+':\n this.advance();\n return this.parsePrefix();\n case '-':\n this.advance();\n result = this.parsePrefix();\n return new Binary(this.span(start), operator, new LiteralPrimitive(new ParseSpan(start, start), 0), result);\n case '!':\n this.advance();\n result = this.parsePrefix();\n return new PrefixNot(this.span(start), result);\n }\n }\n return this.parseCallChain();\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parseCallChain = function () {\n var /** @type {?} */ result = this.parsePrimary();\n while (true) {\n if (this.optionalCharacter($PERIOD)) {\n result = this.parseAccessMemberOrMethodCall(result, false);\n }\n else if (this.optionalOperator('?.')) {\n result = this.parseAccessMemberOrMethodCall(result, true);\n }\n else if (this.optionalCharacter($LBRACKET)) {\n this.rbracketsExpected++;\n var /** @type {?} */ key = this.parsePipe();\n this.rbracketsExpected--;\n this.expectCharacter($RBRACKET);\n if (this.optionalOperator('=')) {\n var /** @type {?} */ value = this.parseConditional();\n result = new KeyedWrite(this.span(result.span.start), result, key, value);\n }\n else {\n result = new KeyedRead(this.span(result.span.start), result, key);\n }\n }\n else if (this.optionalCharacter($LPAREN)) {\n this.rparensExpected++;\n var /** @type {?} */ args = this.parseCallArguments();\n this.rparensExpected--;\n this.expectCharacter($RPAREN);\n result = new FunctionCall(this.span(result.span.start), result, args);\n }\n else if (this.optionalOperator('!')) {\n result = new NonNullAssert(this.span(result.span.start), result);\n }\n else {\n return result;\n }\n }\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parsePrimary = function () {\n var /** @type {?} */ start = this.inputIndex;\n if (this.optionalCharacter($LPAREN)) {\n this.rparensExpected++;\n var /** @type {?} */ result = this.parsePipe();\n this.rparensExpected--;\n this.expectCharacter($RPAREN);\n return result;\n }\n else if (this.next.isKeywordNull()) {\n this.advance();\n return new LiteralPrimitive(this.span(start), null);\n }\n else if (this.next.isKeywordUndefined()) {\n this.advance();\n return new LiteralPrimitive(this.span(start), void 0);\n }\n else if (this.next.isKeywordTrue()) {\n this.advance();\n return new LiteralPrimitive(this.span(start), true);\n }\n else if (this.next.isKeywordFalse()) {\n this.advance();\n return new LiteralPrimitive(this.span(start), false);\n }\n else if (this.next.isKeywordThis()) {\n this.advance();\n return new ImplicitReceiver(this.span(start));\n }\n else if (this.optionalCharacter($LBRACKET)) {\n this.rbracketsExpected++;\n var /** @type {?} */ elements = this.parseExpressionList($RBRACKET);\n this.rbracketsExpected--;\n this.expectCharacter($RBRACKET);\n return new LiteralArray(this.span(start), elements);\n }\n else if (this.next.isCharacter($LBRACE)) {\n return this.parseLiteralMap();\n }\n else if (this.next.isIdentifier()) {\n return this.parseAccessMemberOrMethodCall(new ImplicitReceiver(this.span(start)), false);\n }\n else if (this.next.isNumber()) {\n var /** @type {?} */ value = this.next.toNumber();\n this.advance();\n return new LiteralPrimitive(this.span(start), value);\n }\n else if (this.next.isString()) {\n var /** @type {?} */ literalValue = this.next.toString();\n this.advance();\n return new LiteralPrimitive(this.span(start), literalValue);\n }\n else if (this.index >= this.tokens.length) {\n this.error(\"Unexpected end of expression: \" + this.input);\n return new EmptyExpr(this.span(start));\n }\n else {\n this.error(\"Unexpected token \" + this.next);\n return new EmptyExpr(this.span(start));\n }\n };\n /**\n * @param {?} terminator\n * @return {?}\n */\n _ParseAST.prototype.parseExpressionList = function (terminator) {\n var /** @type {?} */ result = [];\n if (!this.next.isCharacter(terminator)) {\n do {\n result.push(this.parsePipe());\n } while (this.optionalCharacter($COMMA));\n }\n return result;\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parseLiteralMap = function () {\n var /** @type {?} */ keys = [];\n var /** @type {?} */ values = [];\n var /** @type {?} */ start = this.inputIndex;\n this.expectCharacter($LBRACE);\n if (!this.optionalCharacter($RBRACE)) {\n this.rbracesExpected++;\n do {\n var /** @type {?} */ quoted = this.next.isString();\n var /** @type {?} */ key = this.expectIdentifierOrKeywordOrString();\n keys.push({ key: key, quoted: quoted });\n this.expectCharacter($COLON);\n values.push(this.parsePipe());\n } while (this.optionalCharacter($COMMA));\n this.rbracesExpected--;\n this.expectCharacter($RBRACE);\n }\n return new LiteralMap(this.span(start), keys, values);\n };\n /**\n * @param {?} receiver\n * @param {?=} isSafe\n * @return {?}\n */\n _ParseAST.prototype.parseAccessMemberOrMethodCall = function (receiver, isSafe) {\n if (isSafe === void 0) { isSafe = false; }\n var /** @type {?} */ start = receiver.span.start;\n var /** @type {?} */ id = this.expectIdentifierOrKeyword();\n if (this.optionalCharacter($LPAREN)) {\n this.rparensExpected++;\n var /** @type {?} */ args = this.parseCallArguments();\n this.expectCharacter($RPAREN);\n this.rparensExpected--;\n var /** @type {?} */ span = this.span(start);\n return isSafe ? new SafeMethodCall(span, receiver, id, args) :\n new MethodCall(span, receiver, id, args);\n }\n else {\n if (isSafe) {\n if (this.optionalOperator('=')) {\n this.error('The \\'?.\\' operator cannot be used in the assignment');\n return new EmptyExpr(this.span(start));\n }\n else {\n return new SafePropertyRead(this.span(start), receiver, id);\n }\n }\n else {\n if (this.optionalOperator('=')) {\n if (!this.parseAction) {\n this.error('Bindings cannot contain assignments');\n return new EmptyExpr(this.span(start));\n }\n var /** @type {?} */ value = this.parseConditional();\n return new PropertyWrite(this.span(start), receiver, id, value);\n }\n else {\n return new PropertyRead(this.span(start), receiver, id);\n }\n }\n }\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parseCallArguments = function () {\n if (this.next.isCharacter($RPAREN))\n return [];\n var /** @type {?} */ positionals = [];\n do {\n positionals.push(this.parsePipe());\n } while (this.optionalCharacter($COMMA));\n return (positionals);\n };\n /**\n * An identifier, a keyword, a string with an optional `-` inbetween.\n * @return {?}\n */\n _ParseAST.prototype.expectTemplateBindingKey = function () {\n var /** @type {?} */ result = '';\n var /** @type {?} */ operatorFound = false;\n do {\n result += this.expectIdentifierOrKeywordOrString();\n operatorFound = this.optionalOperator('-');\n if (operatorFound) {\n result += '-';\n }\n } while (operatorFound);\n return result.toString();\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.parseTemplateBindings = function () {\n var /** @type {?} */ bindings = [];\n var /** @type {?} */ prefix = ((null));\n var /** @type {?} */ warnings = [];\n while (this.index < this.tokens.length) {\n var /** @type {?} */ start = this.inputIndex;\n var /** @type {?} */ keyIsVar = this.peekKeywordLet();\n if (keyIsVar) {\n this.advance();\n }\n var /** @type {?} */ rawKey = this.expectTemplateBindingKey();\n var /** @type {?} */ key = rawKey;\n if (!keyIsVar) {\n if (prefix == null) {\n prefix = key;\n }\n else {\n key = prefix + key[0].toUpperCase() + key.substring(1);\n }\n }\n this.optionalCharacter($COLON);\n var /** @type {?} */ name = ((null));\n var /** @type {?} */ expression = ((null));\n if (keyIsVar) {\n if (this.optionalOperator('=')) {\n name = this.expectTemplateBindingKey();\n }\n else {\n name = '\\$implicit';\n }\n }\n else if (this.peekKeywordAs()) {\n var /** @type {?} */ letStart = this.inputIndex;\n this.advance(); // consume `as`\n name = rawKey;\n key = this.expectTemplateBindingKey(); // read local var name\n keyIsVar = true;\n }\n else if (this.next !== EOF && !this.peekKeywordLet()) {\n var /** @type {?} */ start_2 = this.inputIndex;\n var /** @type {?} */ ast = this.parsePipe();\n var /** @type {?} */ source = this.input.substring(start_2 - this.offset, this.inputIndex - this.offset);\n expression = new ASTWithSource(ast, source, this.location, this.errors);\n }\n bindings.push(new TemplateBinding(this.span(start), key, keyIsVar, name, expression));\n if (this.peekKeywordAs() && !keyIsVar) {\n var /** @type {?} */ letStart = this.inputIndex;\n this.advance(); // consume `as`\n var /** @type {?} */ letName = this.expectTemplateBindingKey(); // read local var name\n bindings.push(new TemplateBinding(this.span(letStart), letName, true, key, /** @type {?} */ ((null))));\n }\n if (!this.optionalCharacter($SEMICOLON)) {\n this.optionalCharacter($COMMA);\n }\n }\n return new TemplateBindingParseResult(bindings, warnings, this.errors);\n };\n /**\n * @param {?} message\n * @param {?=} index\n * @return {?}\n */\n _ParseAST.prototype.error = function (message, index) {\n if (index === void 0) { index = null; }\n this.errors.push(new ParserError(message, this.input, this.locationText(index), this.location));\n this.skip();\n };\n /**\n * @param {?=} index\n * @return {?}\n */\n _ParseAST.prototype.locationText = function (index) {\n if (index === void 0) { index = null; }\n if (index == null)\n index = this.index;\n return (index < this.tokens.length) ? \"at column \" + (this.tokens[index].index + 1) + \" in\" :\n \"at the end of the expression\";\n };\n /**\n * @return {?}\n */\n _ParseAST.prototype.skip = function () {\n var /** @type {?} */ n = this.next;\n while (this.index < this.tokens.length && !n.isCharacter($SEMICOLON) &&\n (this.rparensExpected <= 0 || !n.isCharacter($RPAREN)) &&\n (this.rbracesExpected <= 0 || !n.isCharacter($RBRACE)) &&\n (this.rbracketsExpected <= 0 || !n.isCharacter($RBRACKET))) {\n if (this.next.isError()) {\n this.errors.push(new ParserError(/** @type {?} */ ((this.next.toString())), this.input, this.locationText(), this.location));\n }\n this.advance();\n n = this.next;\n }\n };\n return _ParseAST;\n}());\nvar SimpleExpressionChecker = (function () {\n function SimpleExpressionChecker() {\n this.errors = [];\n }\n /**\n * @param {?} ast\n * @return {?}\n */\n SimpleExpressionChecker.check = function (ast) {\n var /** @type {?} */ s = new SimpleExpressionChecker();\n ast.visit(s);\n return s.errors;\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitImplicitReceiver = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitInterpolation = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitLiteralPrimitive = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitPropertyRead = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitPropertyWrite = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitSafePropertyRead = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitMethodCall = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitSafeMethodCall = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitFunctionCall = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitLiteralArray = function (ast, context) { this.visitAll(ast.expressions); };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitLiteralMap = function (ast, context) { this.visitAll(ast.values); };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitBinary = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitPrefixNot = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitNonNullAssert = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitConditional = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitPipe = function (ast, context) { this.errors.push('pipes'); };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitKeyedRead = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitKeyedWrite = function (ast, context) { };\n /**\n * @param {?} asts\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitAll = function (asts) {\n var _this = this;\n return asts.map(function (node) { return node.visit(_this); });\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitChain = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n SimpleExpressionChecker.prototype.visitQuote = function (ast, context) { };\n return SimpleExpressionChecker;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar ParseLocation = (function () {\n /**\n * @param {?} file\n * @param {?} offset\n * @param {?} line\n * @param {?} col\n */\n function ParseLocation(file, offset, line, col) {\n this.file = file;\n this.offset = offset;\n this.line = line;\n this.col = col;\n }\n /**\n * @return {?}\n */\n ParseLocation.prototype.toString = function () {\n return this.offset != null ? this.file.url + \"@\" + this.line + \":\" + this.col : this.file.url;\n };\n /**\n * @param {?} delta\n * @return {?}\n */\n ParseLocation.prototype.moveBy = function (delta) {\n var /** @type {?} */ source = this.file.content;\n var /** @type {?} */ len = source.length;\n var /** @type {?} */ offset = this.offset;\n var /** @type {?} */ line = this.line;\n var /** @type {?} */ col = this.col;\n while (offset > 0 && delta < 0) {\n offset--;\n delta++;\n var /** @type {?} */ ch = source.charCodeAt(offset);\n if (ch == $LF) {\n line--;\n var /** @type {?} */ priorLine = source.substr(0, offset - 1).lastIndexOf(String.fromCharCode($LF));\n col = priorLine > 0 ? offset - priorLine : offset;\n }\n else {\n col--;\n }\n }\n while (offset < len && delta > 0) {\n var /** @type {?} */ ch = source.charCodeAt(offset);\n offset++;\n delta--;\n if (ch == $LF) {\n line++;\n col = 0;\n }\n else {\n col++;\n }\n }\n return new ParseLocation(this.file, offset, line, col);\n };\n /**\n * @param {?} maxChars\n * @param {?} maxLines\n * @return {?}\n */\n ParseLocation.prototype.getContext = function (maxChars, maxLines) {\n var /** @type {?} */ content = this.file.content;\n var /** @type {?} */ startOffset = this.offset;\n if (startOffset != null) {\n if (startOffset > content.length - 1) {\n startOffset = content.length - 1;\n }\n var /** @type {?} */ endOffset = startOffset;\n var /** @type {?} */ ctxChars = 0;\n var /** @type {?} */ ctxLines = 0;\n while (ctxChars < maxChars && startOffset > 0) {\n startOffset--;\n ctxChars++;\n if (content[startOffset] == '\\n') {\n if (++ctxLines == maxLines) {\n break;\n }\n }\n }\n ctxChars = 0;\n ctxLines = 0;\n while (ctxChars < maxChars && endOffset < content.length - 1) {\n endOffset++;\n ctxChars++;\n if (content[endOffset] == '\\n') {\n if (++ctxLines == maxLines) {\n break;\n }\n }\n }\n return {\n before: content.substring(startOffset, this.offset),\n after: content.substring(this.offset, endOffset + 1),\n };\n }\n return null;\n };\n return ParseLocation;\n}());\nvar ParseSourceFile = (function () {\n /**\n * @param {?} content\n * @param {?} url\n */\n function ParseSourceFile(content, url) {\n this.content = content;\n this.url = url;\n }\n return ParseSourceFile;\n}());\nvar ParseSourceSpan = (function () {\n /**\n * @param {?} start\n * @param {?} end\n * @param {?=} details\n */\n function ParseSourceSpan(start, end, details) {\n if (details === void 0) { details = null; }\n this.start = start;\n this.end = end;\n this.details = details;\n }\n /**\n * @return {?}\n */\n ParseSourceSpan.prototype.toString = function () {\n return this.start.file.content.substring(this.start.offset, this.end.offset);\n };\n return ParseSourceSpan;\n}());\nvar ParseErrorLevel = {};\nParseErrorLevel.WARNING = 0;\nParseErrorLevel.ERROR = 1;\nParseErrorLevel[ParseErrorLevel.WARNING] = \"WARNING\";\nParseErrorLevel[ParseErrorLevel.ERROR] = \"ERROR\";\nvar ParseError = (function () {\n /**\n * @param {?} span\n * @param {?} msg\n * @param {?=} level\n */\n function ParseError(span, msg, level) {\n if (level === void 0) { level = ParseErrorLevel.ERROR; }\n this.span = span;\n this.msg = msg;\n this.level = level;\n }\n /**\n * @return {?}\n */\n ParseError.prototype.contextualMessage = function () {\n var /** @type {?} */ ctx = this.span.start.getContext(100, 3);\n return ctx ? \" (\\\"\" + ctx.before + \"[\" + ParseErrorLevel[this.level] + \" ->]\" + ctx.after + \"\\\")\" : '';\n };\n /**\n * @return {?}\n */\n ParseError.prototype.toString = function () {\n var /** @type {?} */ details = this.span.details ? \", \" + this.span.details : '';\n return \"\" + this.msg + this.contextualMessage() + \": \" + this.span.start + details;\n };\n return ParseError;\n}());\n/**\n * @param {?} kind\n * @param {?} type\n * @return {?}\n */\nfunction typeSourceSpan(kind, type) {\n var /** @type {?} */ moduleUrl = identifierModuleUrl(type);\n var /** @type {?} */ sourceFileName = moduleUrl != null ? \"in \" + kind + \" \" + identifierName(type) + \" in \" + moduleUrl :\n \"in \" + kind + \" \" + identifierName(type);\n var /** @type {?} */ sourceFile = new ParseSourceFile('', sourceFileName);\n return new ParseSourceSpan(new ParseLocation(sourceFile, -1, -1, -1), new ParseLocation(sourceFile, -1, -1, -1));\n}\n/**\n * A path is an ordered set of elements. Typically a path is to a\n * particular offset in a source file. The head of the list is the top\n * most node. The tail is the node that contains the offset directly.\n *\n * For example, the expresion `a + b + c` might have an ast that looks\n * like:\n * +\n * / \\\n * a +\n * / \\\n * b c\n *\n * The path to the node at offset 9 would be `['+' at 1-10, '+' at 7-10,\n * 'c' at 9-10]` and the path the node at offset 1 would be\n * `['+' at 1-10, 'a' at 1-2]`.\n */\nvar AstPath = (function () {\n /**\n * @param {?} path\n * @param {?=} position\n */\n function AstPath(path, position) {\n if (position === void 0) { position = -1; }\n this.path = path;\n this.position = position;\n }\n Object.defineProperty(AstPath.prototype, \"empty\", {\n /**\n * @return {?}\n */\n get: function () { return !this.path || !this.path.length; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AstPath.prototype, \"head\", {\n /**\n * @return {?}\n */\n get: function () { return this.path[0]; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AstPath.prototype, \"tail\", {\n /**\n * @return {?}\n */\n get: function () { return this.path[this.path.length - 1]; },\n enumerable: true,\n configurable: true\n });\n /**\n * @param {?} node\n * @return {?}\n */\n AstPath.prototype.parentOf = function (node) {\n return node && this.path[this.path.indexOf(node) - 1];\n };\n /**\n * @param {?} node\n * @return {?}\n */\n AstPath.prototype.childOf = function (node) { return this.path[this.path.indexOf(node) + 1]; };\n /**\n * @template N\n * @param {?} ctor\n * @return {?}\n */\n AstPath.prototype.first = function (ctor) {\n for (var /** @type {?} */ i = this.path.length - 1; i >= 0; i--) {\n var /** @type {?} */ item = this.path[i];\n if (item instanceof ctor)\n return (item);\n }\n };\n /**\n * @param {?} node\n * @return {?}\n */\n AstPath.prototype.push = function (node) { this.path.push(node); };\n /**\n * @return {?}\n */\n AstPath.prototype.pop = function () { return ((this.path.pop())); };\n return AstPath;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar Text = (function () {\n /**\n * @param {?} value\n * @param {?} sourceSpan\n */\n function Text(value, sourceSpan) {\n this.value = value;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n Text.prototype.visit = function (visitor, context) { return visitor.visitText(this, context); };\n return Text;\n}());\nvar Expansion = (function () {\n /**\n * @param {?} switchValue\n * @param {?} type\n * @param {?} cases\n * @param {?} sourceSpan\n * @param {?} switchValueSourceSpan\n */\n function Expansion(switchValue, type, cases, sourceSpan, switchValueSourceSpan) {\n this.switchValue = switchValue;\n this.type = type;\n this.cases = cases;\n this.sourceSpan = sourceSpan;\n this.switchValueSourceSpan = switchValueSourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n Expansion.prototype.visit = function (visitor, context) { return visitor.visitExpansion(this, context); };\n return Expansion;\n}());\nvar ExpansionCase = (function () {\n /**\n * @param {?} value\n * @param {?} expression\n * @param {?} sourceSpan\n * @param {?} valueSourceSpan\n * @param {?} expSourceSpan\n */\n function ExpansionCase(value, expression, sourceSpan, valueSourceSpan, expSourceSpan) {\n this.value = value;\n this.expression = expression;\n this.sourceSpan = sourceSpan;\n this.valueSourceSpan = valueSourceSpan;\n this.expSourceSpan = expSourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n ExpansionCase.prototype.visit = function (visitor, context) { return visitor.visitExpansionCase(this, context); };\n return ExpansionCase;\n}());\nvar Attribute$1 = (function () {\n /**\n * @param {?} name\n * @param {?} value\n * @param {?} sourceSpan\n * @param {?=} valueSpan\n */\n function Attribute$1(name, value, sourceSpan, valueSpan) {\n this.name = name;\n this.value = value;\n this.sourceSpan = sourceSpan;\n this.valueSpan = valueSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n Attribute$1.prototype.visit = function (visitor, context) { return visitor.visitAttribute(this, context); };\n return Attribute$1;\n}());\nvar Element = (function () {\n /**\n * @param {?} name\n * @param {?} attrs\n * @param {?} children\n * @param {?} sourceSpan\n * @param {?=} startSourceSpan\n * @param {?=} endSourceSpan\n */\n function Element(name, attrs, children, sourceSpan, startSourceSpan, endSourceSpan) {\n if (startSourceSpan === void 0) { startSourceSpan = null; }\n if (endSourceSpan === void 0) { endSourceSpan = null; }\n this.name = name;\n this.attrs = attrs;\n this.children = children;\n this.sourceSpan = sourceSpan;\n this.startSourceSpan = startSourceSpan;\n this.endSourceSpan = endSourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n Element.prototype.visit = function (visitor, context) { return visitor.visitElement(this, context); };\n return Element;\n}());\nvar Comment = (function () {\n /**\n * @param {?} value\n * @param {?} sourceSpan\n */\n function Comment(value, sourceSpan) {\n this.value = value;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?} context\n * @return {?}\n */\n Comment.prototype.visit = function (visitor, context) { return visitor.visitComment(this, context); };\n return Comment;\n}());\n/**\n * @param {?} visitor\n * @param {?} nodes\n * @param {?=} context\n * @return {?}\n */\nfunction visitAll(visitor, nodes, context) {\n if (context === void 0) { context = null; }\n var /** @type {?} */ result = [];\n var /** @type {?} */ visit = visitor.visit ?\n function (ast) { return ((visitor.visit))(ast, context) || ast.visit(visitor, context); } :\n function (ast) { return ast.visit(visitor, context); };\n nodes.forEach(function (ast) {\n var /** @type {?} */ astResult = visit(ast);\n if (astResult) {\n result.push(astResult);\n }\n });\n return result;\n}\nvar RecursiveVisitor = (function () {\n function RecursiveVisitor() {\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveVisitor.prototype.visitElement = function (ast, context) {\n this.visitChildren(context, function (visit) {\n visit(ast.attrs);\n visit(ast.children);\n });\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveVisitor.prototype.visitAttribute = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveVisitor.prototype.visitText = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveVisitor.prototype.visitComment = function (ast, context) { };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveVisitor.prototype.visitExpansion = function (ast, context) {\n return this.visitChildren(context, function (visit) { visit(ast.cases); });\n };\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n RecursiveVisitor.prototype.visitExpansionCase = function (ast, context) { };\n /**\n * @template T\n * @param {?} context\n * @param {?} cb\n * @return {?}\n */\n RecursiveVisitor.prototype.visitChildren = function (context, cb) {\n var /** @type {?} */ results = [];\n var /** @type {?} */ t = this;\n /**\n * @template T\n * @param {?} children\n * @return {?}\n */\n function visit(children) {\n if (children)\n results.push(visitAll(t, children, context));\n }\n cb(visit);\n return [].concat.apply([], results);\n };\n return RecursiveVisitor;\n}());\n/**\n * @param {?} ast\n * @return {?}\n */\nfunction spanOf(ast) {\n var /** @type {?} */ start = ast.sourceSpan.start.offset;\n var /** @type {?} */ end = ast.sourceSpan.end.offset;\n if (ast instanceof Element) {\n if (ast.endSourceSpan) {\n end = ast.endSourceSpan.end.offset;\n }\n else if (ast.children && ast.children.length) {\n end = spanOf(ast.children[ast.children.length - 1]).end;\n }\n }\n return { start: start, end: end };\n}\n/**\n * @param {?} nodes\n * @param {?} position\n * @return {?}\n */\nfunction findNode(nodes, position) {\n var /** @type {?} */ path = [];\n var /** @type {?} */ visitor = new (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](class_1, _super);\n function class_1() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n class_1.prototype.visit = function (ast, context) {\n var /** @type {?} */ span = spanOf(ast);\n if (span.start <= position && position < span.end) {\n path.push(ast);\n }\n else {\n // Returning a value here will result in the children being skipped.\n return true;\n }\n };\n return class_1;\n }(RecursiveVisitor));\n visitAll(visitor, nodes);\n return new AstPath(path, position);\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar TokenType$1 = {};\nTokenType$1.TAG_OPEN_START = 0;\nTokenType$1.TAG_OPEN_END = 1;\nTokenType$1.TAG_OPEN_END_VOID = 2;\nTokenType$1.TAG_CLOSE = 3;\nTokenType$1.TEXT = 4;\nTokenType$1.ESCAPABLE_RAW_TEXT = 5;\nTokenType$1.RAW_TEXT = 6;\nTokenType$1.COMMENT_START = 7;\nTokenType$1.COMMENT_END = 8;\nTokenType$1.CDATA_START = 9;\nTokenType$1.CDATA_END = 10;\nTokenType$1.ATTR_NAME = 11;\nTokenType$1.ATTR_VALUE = 12;\nTokenType$1.DOC_TYPE = 13;\nTokenType$1.EXPANSION_FORM_START = 14;\nTokenType$1.EXPANSION_CASE_VALUE = 15;\nTokenType$1.EXPANSION_CASE_EXP_START = 16;\nTokenType$1.EXPANSION_CASE_EXP_END = 17;\nTokenType$1.EXPANSION_FORM_END = 18;\nTokenType$1.EOF = 19;\nTokenType$1[TokenType$1.TAG_OPEN_START] = \"TAG_OPEN_START\";\nTokenType$1[TokenType$1.TAG_OPEN_END] = \"TAG_OPEN_END\";\nTokenType$1[TokenType$1.TAG_OPEN_END_VOID] = \"TAG_OPEN_END_VOID\";\nTokenType$1[TokenType$1.TAG_CLOSE] = \"TAG_CLOSE\";\nTokenType$1[TokenType$1.TEXT] = \"TEXT\";\nTokenType$1[TokenType$1.ESCAPABLE_RAW_TEXT] = \"ESCAPABLE_RAW_TEXT\";\nTokenType$1[TokenType$1.RAW_TEXT] = \"RAW_TEXT\";\nTokenType$1[TokenType$1.COMMENT_START] = \"COMMENT_START\";\nTokenType$1[TokenType$1.COMMENT_END] = \"COMMENT_END\";\nTokenType$1[TokenType$1.CDATA_START] = \"CDATA_START\";\nTokenType$1[TokenType$1.CDATA_END] = \"CDATA_END\";\nTokenType$1[TokenType$1.ATTR_NAME] = \"ATTR_NAME\";\nTokenType$1[TokenType$1.ATTR_VALUE] = \"ATTR_VALUE\";\nTokenType$1[TokenType$1.DOC_TYPE] = \"DOC_TYPE\";\nTokenType$1[TokenType$1.EXPANSION_FORM_START] = \"EXPANSION_FORM_START\";\nTokenType$1[TokenType$1.EXPANSION_CASE_VALUE] = \"EXPANSION_CASE_VALUE\";\nTokenType$1[TokenType$1.EXPANSION_CASE_EXP_START] = \"EXPANSION_CASE_EXP_START\";\nTokenType$1[TokenType$1.EXPANSION_CASE_EXP_END] = \"EXPANSION_CASE_EXP_END\";\nTokenType$1[TokenType$1.EXPANSION_FORM_END] = \"EXPANSION_FORM_END\";\nTokenType$1[TokenType$1.EOF] = \"EOF\";\nvar Token$1 = (function () {\n /**\n * @param {?} type\n * @param {?} parts\n * @param {?} sourceSpan\n */\n function Token$1(type, parts, sourceSpan) {\n this.type = type;\n this.parts = parts;\n this.sourceSpan = sourceSpan;\n }\n return Token$1;\n}());\nvar TokenError = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](TokenError, _super);\n /**\n * @param {?} errorMsg\n * @param {?} tokenType\n * @param {?} span\n */\n function TokenError(errorMsg, tokenType, span) {\n var _this = _super.call(this, span, errorMsg) || this;\n _this.tokenType = tokenType;\n return _this;\n }\n return TokenError;\n}(ParseError));\nvar TokenizeResult = (function () {\n /**\n * @param {?} tokens\n * @param {?} errors\n */\n function TokenizeResult(tokens, errors) {\n this.tokens = tokens;\n this.errors = errors;\n }\n return TokenizeResult;\n}());\n/**\n * @param {?} source\n * @param {?} url\n * @param {?} getTagDefinition\n * @param {?=} tokenizeExpansionForms\n * @param {?=} interpolationConfig\n * @return {?}\n */\nfunction tokenize(source, url, getTagDefinition, tokenizeExpansionForms, interpolationConfig) {\n if (tokenizeExpansionForms === void 0) { tokenizeExpansionForms = false; }\n if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }\n return new _Tokenizer(new ParseSourceFile(source, url), getTagDefinition, tokenizeExpansionForms, interpolationConfig)\n .tokenize();\n}\nvar _CR_OR_CRLF_REGEXP = /\\r\\n?/g;\n/**\n * @param {?} charCode\n * @return {?}\n */\nfunction _unexpectedCharacterErrorMsg(charCode) {\n var /** @type {?} */ char = charCode === $EOF ? 'EOF' : String.fromCharCode(charCode);\n return \"Unexpected character \\\"\" + char + \"\\\"\";\n}\n/**\n * @param {?} entitySrc\n * @return {?}\n */\nfunction _unknownEntityErrorMsg(entitySrc) {\n return \"Unknown entity \\\"\" + entitySrc + \"\\\" - use the \\\"&#;\\\" or \\\"&#x;\\\" syntax\";\n}\nvar _ControlFlowError = (function () {\n /**\n * @param {?} error\n */\n function _ControlFlowError(error) {\n this.error = error;\n }\n return _ControlFlowError;\n}());\nvar _Tokenizer = (function () {\n /**\n * @param {?} _file The html source\n * @param {?} _getTagDefinition\n * @param {?} _tokenizeIcu Whether to tokenize ICU messages (considered as text nodes when false)\n * @param {?=} _interpolationConfig\n */\n function _Tokenizer(_file, _getTagDefinition, _tokenizeIcu, _interpolationConfig) {\n if (_interpolationConfig === void 0) { _interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }\n this._file = _file;\n this._getTagDefinition = _getTagDefinition;\n this._tokenizeIcu = _tokenizeIcu;\n this._interpolationConfig = _interpolationConfig;\n this._peek = -1;\n this._nextPeek = -1;\n this._index = -1;\n this._line = 0;\n this._column = -1;\n this._expansionCaseStack = [];\n this._inInterpolation = false;\n this.tokens = [];\n this.errors = [];\n this._input = _file.content;\n this._length = _file.content.length;\n this._advance();\n }\n /**\n * @param {?} content\n * @return {?}\n */\n _Tokenizer.prototype._processCarriageReturns = function (content) {\n // http://www.w3.org/TR/html5/syntax.html#preprocessing-the-input-stream\n // In order to keep the original position in the source, we can not\n // pre-process it.\n // Instead CRs are processed right before instantiating the tokens.\n return content.replace(_CR_OR_CRLF_REGEXP, '\\n');\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype.tokenize = function () {\n while (this._peek !== $EOF) {\n var /** @type {?} */ start = this._getLocation();\n try {\n if (this._attemptCharCode($LT)) {\n if (this._attemptCharCode($BANG)) {\n if (this._attemptCharCode($LBRACKET)) {\n this._consumeCdata(start);\n }\n else if (this._attemptCharCode($MINUS)) {\n this._consumeComment(start);\n }\n else {\n this._consumeDocType(start);\n }\n }\n else if (this._attemptCharCode($SLASH)) {\n this._consumeTagClose(start);\n }\n else {\n this._consumeTagOpen(start);\n }\n }\n else if (!(this._tokenizeIcu && this._tokenizeExpansionForm())) {\n this._consumeText();\n }\n }\n catch (e) {\n if (e instanceof _ControlFlowError) {\n this.errors.push(e.error);\n }\n else {\n throw e;\n }\n }\n }\n this._beginToken(TokenType$1.EOF);\n this._endToken([]);\n return new TokenizeResult(mergeTextTokens(this.tokens), this.errors);\n };\n /**\n * \\@internal\n * @return {?}\n */\n _Tokenizer.prototype._tokenizeExpansionForm = function () {\n if (isExpansionFormStart(this._input, this._index, this._interpolationConfig)) {\n this._consumeExpansionFormStart();\n return true;\n }\n if (isExpansionCaseStart(this._peek) && this._isInExpansionForm()) {\n this._consumeExpansionCaseStart();\n return true;\n }\n if (this._peek === $RBRACE) {\n if (this._isInExpansionCase()) {\n this._consumeExpansionCaseEnd();\n return true;\n }\n if (this._isInExpansionForm()) {\n this._consumeExpansionFormEnd();\n return true;\n }\n }\n return false;\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._getLocation = function () {\n return new ParseLocation(this._file, this._index, this._line, this._column);\n };\n /**\n * @param {?=} start\n * @param {?=} end\n * @return {?}\n */\n _Tokenizer.prototype._getSpan = function (start, end) {\n if (start === void 0) { start = this._getLocation(); }\n if (end === void 0) { end = this._getLocation(); }\n return new ParseSourceSpan(start, end);\n };\n /**\n * @param {?} type\n * @param {?=} start\n * @return {?}\n */\n _Tokenizer.prototype._beginToken = function (type, start) {\n if (start === void 0) { start = this._getLocation(); }\n this._currentTokenStart = start;\n this._currentTokenType = type;\n };\n /**\n * @param {?} parts\n * @param {?=} end\n * @return {?}\n */\n _Tokenizer.prototype._endToken = function (parts, end) {\n if (end === void 0) { end = this._getLocation(); }\n var /** @type {?} */ token = new Token$1(this._currentTokenType, parts, new ParseSourceSpan(this._currentTokenStart, end));\n this.tokens.push(token);\n this._currentTokenStart = ((null));\n this._currentTokenType = ((null));\n return token;\n };\n /**\n * @param {?} msg\n * @param {?} span\n * @return {?}\n */\n _Tokenizer.prototype._createError = function (msg, span) {\n if (this._isInExpansionForm()) {\n msg += \" (Do you have an unescaped \\\"{\\\" in your template? Use \\\"{{ '{' }}\\\") to escape it.)\";\n }\n var /** @type {?} */ error = new TokenError(msg, this._currentTokenType, span);\n this._currentTokenStart = ((null));\n this._currentTokenType = ((null));\n return new _ControlFlowError(error);\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._advance = function () {\n if (this._index >= this._length) {\n throw this._createError(_unexpectedCharacterErrorMsg($EOF), this._getSpan());\n }\n if (this._peek === $LF) {\n this._line++;\n this._column = 0;\n }\n else if (this._peek !== $LF && this._peek !== $CR) {\n this._column++;\n }\n this._index++;\n this._peek = this._index >= this._length ? $EOF : this._input.charCodeAt(this._index);\n this._nextPeek =\n this._index + 1 >= this._length ? $EOF : this._input.charCodeAt(this._index + 1);\n };\n /**\n * @param {?} charCode\n * @return {?}\n */\n _Tokenizer.prototype._attemptCharCode = function (charCode) {\n if (this._peek === charCode) {\n this._advance();\n return true;\n }\n return false;\n };\n /**\n * @param {?} charCode\n * @return {?}\n */\n _Tokenizer.prototype._attemptCharCodeCaseInsensitive = function (charCode) {\n if (compareCharCodeCaseInsensitive(this._peek, charCode)) {\n this._advance();\n return true;\n }\n return false;\n };\n /**\n * @param {?} charCode\n * @return {?}\n */\n _Tokenizer.prototype._requireCharCode = function (charCode) {\n var /** @type {?} */ location = this._getLocation();\n if (!this._attemptCharCode(charCode)) {\n throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan(location, location));\n }\n };\n /**\n * @param {?} chars\n * @return {?}\n */\n _Tokenizer.prototype._attemptStr = function (chars) {\n var /** @type {?} */ len = chars.length;\n if (this._index + len > this._length) {\n return false;\n }\n var /** @type {?} */ initialPosition = this._savePosition();\n for (var /** @type {?} */ i = 0; i < len; i++) {\n if (!this._attemptCharCode(chars.charCodeAt(i))) {\n // If attempting to parse the string fails, we want to reset the parser\n // to where it was before the attempt\n this._restorePosition(initialPosition);\n return false;\n }\n }\n return true;\n };\n /**\n * @param {?} chars\n * @return {?}\n */\n _Tokenizer.prototype._attemptStrCaseInsensitive = function (chars) {\n for (var /** @type {?} */ i = 0; i < chars.length; i++) {\n if (!this._attemptCharCodeCaseInsensitive(chars.charCodeAt(i))) {\n return false;\n }\n }\n return true;\n };\n /**\n * @param {?} chars\n * @return {?}\n */\n _Tokenizer.prototype._requireStr = function (chars) {\n var /** @type {?} */ location = this._getLocation();\n if (!this._attemptStr(chars)) {\n throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan(location));\n }\n };\n /**\n * @param {?} predicate\n * @return {?}\n */\n _Tokenizer.prototype._attemptCharCodeUntilFn = function (predicate) {\n while (!predicate(this._peek)) {\n this._advance();\n }\n };\n /**\n * @param {?} predicate\n * @param {?} len\n * @return {?}\n */\n _Tokenizer.prototype._requireCharCodeUntilFn = function (predicate, len) {\n var /** @type {?} */ start = this._getLocation();\n this._attemptCharCodeUntilFn(predicate);\n if (this._index - start.offset < len) {\n throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan(start, start));\n }\n };\n /**\n * @param {?} char\n * @return {?}\n */\n _Tokenizer.prototype._attemptUntilChar = function (char) {\n while (this._peek !== char) {\n this._advance();\n }\n };\n /**\n * @param {?} decodeEntities\n * @return {?}\n */\n _Tokenizer.prototype._readChar = function (decodeEntities) {\n if (decodeEntities && this._peek === $AMPERSAND) {\n return this._decodeEntity();\n }\n else {\n var /** @type {?} */ index = this._index;\n this._advance();\n return this._input[index];\n }\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._decodeEntity = function () {\n var /** @type {?} */ start = this._getLocation();\n this._advance();\n if (this._attemptCharCode($HASH)) {\n var /** @type {?} */ isHex = this._attemptCharCode($x) || this._attemptCharCode($X);\n var /** @type {?} */ numberStart = this._getLocation().offset;\n this._attemptCharCodeUntilFn(isDigitEntityEnd);\n if (this._peek != $SEMICOLON) {\n throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan());\n }\n this._advance();\n var /** @type {?} */ strNum = this._input.substring(numberStart, this._index - 1);\n try {\n var /** @type {?} */ charCode = parseInt(strNum, isHex ? 16 : 10);\n return String.fromCharCode(charCode);\n }\n catch (e) {\n var /** @type {?} */ entity = this._input.substring(start.offset + 1, this._index - 1);\n throw this._createError(_unknownEntityErrorMsg(entity), this._getSpan(start));\n }\n }\n else {\n var /** @type {?} */ startPosition = this._savePosition();\n this._attemptCharCodeUntilFn(isNamedEntityEnd);\n if (this._peek != $SEMICOLON) {\n this._restorePosition(startPosition);\n return '&';\n }\n this._advance();\n var /** @type {?} */ name = this._input.substring(start.offset + 1, this._index - 1);\n var /** @type {?} */ char = NAMED_ENTITIES[name];\n if (!char) {\n throw this._createError(_unknownEntityErrorMsg(name), this._getSpan(start));\n }\n return char;\n }\n };\n /**\n * @param {?} decodeEntities\n * @param {?} firstCharOfEnd\n * @param {?} attemptEndRest\n * @return {?}\n */\n _Tokenizer.prototype._consumeRawText = function (decodeEntities, firstCharOfEnd, attemptEndRest) {\n var /** @type {?} */ tagCloseStart;\n var /** @type {?} */ textStart = this._getLocation();\n this._beginToken(decodeEntities ? TokenType$1.ESCAPABLE_RAW_TEXT : TokenType$1.RAW_TEXT, textStart);\n var /** @type {?} */ parts = [];\n while (true) {\n tagCloseStart = this._getLocation();\n if (this._attemptCharCode(firstCharOfEnd) && attemptEndRest()) {\n break;\n }\n if (this._index > tagCloseStart.offset) {\n // add the characters consumed by the previous if statement to the output\n parts.push(this._input.substring(tagCloseStart.offset, this._index));\n }\n while (this._peek !== firstCharOfEnd) {\n parts.push(this._readChar(decodeEntities));\n }\n }\n return this._endToken([this._processCarriageReturns(parts.join(''))], tagCloseStart);\n };\n /**\n * @param {?} start\n * @return {?}\n */\n _Tokenizer.prototype._consumeComment = function (start) {\n var _this = this;\n this._beginToken(TokenType$1.COMMENT_START, start);\n this._requireCharCode($MINUS);\n this._endToken([]);\n var /** @type {?} */ textToken = this._consumeRawText(false, $MINUS, function () { return _this._attemptStr('->'); });\n this._beginToken(TokenType$1.COMMENT_END, textToken.sourceSpan.end);\n this._endToken([]);\n };\n /**\n * @param {?} start\n * @return {?}\n */\n _Tokenizer.prototype._consumeCdata = function (start) {\n var _this = this;\n this._beginToken(TokenType$1.CDATA_START, start);\n this._requireStr('CDATA[');\n this._endToken([]);\n var /** @type {?} */ textToken = this._consumeRawText(false, $RBRACKET, function () { return _this._attemptStr(']>'); });\n this._beginToken(TokenType$1.CDATA_END, textToken.sourceSpan.end);\n this._endToken([]);\n };\n /**\n * @param {?} start\n * @return {?}\n */\n _Tokenizer.prototype._consumeDocType = function (start) {\n this._beginToken(TokenType$1.DOC_TYPE, start);\n this._attemptUntilChar($GT);\n this._advance();\n this._endToken([this._input.substring(start.offset + 2, this._index - 1)]);\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._consumePrefixAndName = function () {\n var /** @type {?} */ nameOrPrefixStart = this._index;\n var /** @type {?} */ prefix = ((null));\n while (this._peek !== $COLON && !isPrefixEnd(this._peek)) {\n this._advance();\n }\n var /** @type {?} */ nameStart;\n if (this._peek === $COLON) {\n this._advance();\n prefix = this._input.substring(nameOrPrefixStart, this._index - 1);\n nameStart = this._index;\n }\n else {\n nameStart = nameOrPrefixStart;\n }\n this._requireCharCodeUntilFn(isNameEnd, this._index === nameStart ? 1 : 0);\n var /** @type {?} */ name = this._input.substring(nameStart, this._index);\n return [prefix, name];\n };\n /**\n * @param {?} start\n * @return {?}\n */\n _Tokenizer.prototype._consumeTagOpen = function (start) {\n var /** @type {?} */ savedPos = this._savePosition();\n var /** @type {?} */ tagName;\n var /** @type {?} */ lowercaseTagName;\n try {\n if (!isAsciiLetter(this._peek)) {\n throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan());\n }\n var /** @type {?} */ nameStart = this._index;\n this._consumeTagOpenStart(start);\n tagName = this._input.substring(nameStart, this._index);\n lowercaseTagName = tagName.toLowerCase();\n this._attemptCharCodeUntilFn(isNotWhitespace);\n while (this._peek !== $SLASH && this._peek !== $GT) {\n this._consumeAttributeName();\n this._attemptCharCodeUntilFn(isNotWhitespace);\n if (this._attemptCharCode($EQ)) {\n this._attemptCharCodeUntilFn(isNotWhitespace);\n this._consumeAttributeValue();\n }\n this._attemptCharCodeUntilFn(isNotWhitespace);\n }\n this._consumeTagOpenEnd();\n }\n catch (e) {\n if (e instanceof _ControlFlowError) {\n // When the start tag is invalid, assume we want a \"<\"\n this._restorePosition(savedPos);\n // Back to back text tokens are merged at the end\n this._beginToken(TokenType$1.TEXT, start);\n this._endToken(['<']);\n return;\n }\n throw e;\n }\n var /** @type {?} */ contentTokenType = this._getTagDefinition(tagName).contentType;\n if (contentTokenType === TagContentType.RAW_TEXT) {\n this._consumeRawTextWithTagClose(lowercaseTagName, false);\n }\n else if (contentTokenType === TagContentType.ESCAPABLE_RAW_TEXT) {\n this._consumeRawTextWithTagClose(lowercaseTagName, true);\n }\n };\n /**\n * @param {?} lowercaseTagName\n * @param {?} decodeEntities\n * @return {?}\n */\n _Tokenizer.prototype._consumeRawTextWithTagClose = function (lowercaseTagName, decodeEntities) {\n var _this = this;\n var /** @type {?} */ textToken = this._consumeRawText(decodeEntities, $LT, function () {\n if (!_this._attemptCharCode($SLASH))\n return false;\n _this._attemptCharCodeUntilFn(isNotWhitespace);\n if (!_this._attemptStrCaseInsensitive(lowercaseTagName))\n return false;\n _this._attemptCharCodeUntilFn(isNotWhitespace);\n return _this._attemptCharCode($GT);\n });\n this._beginToken(TokenType$1.TAG_CLOSE, textToken.sourceSpan.end);\n this._endToken([/** @type {?} */ ((null)), lowercaseTagName]);\n };\n /**\n * @param {?} start\n * @return {?}\n */\n _Tokenizer.prototype._consumeTagOpenStart = function (start) {\n this._beginToken(TokenType$1.TAG_OPEN_START, start);\n var /** @type {?} */ parts = this._consumePrefixAndName();\n this._endToken(parts);\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._consumeAttributeName = function () {\n this._beginToken(TokenType$1.ATTR_NAME);\n var /** @type {?} */ prefixAndName = this._consumePrefixAndName();\n this._endToken(prefixAndName);\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._consumeAttributeValue = function () {\n this._beginToken(TokenType$1.ATTR_VALUE);\n var /** @type {?} */ value;\n if (this._peek === $SQ || this._peek === $DQ) {\n var /** @type {?} */ quoteChar = this._peek;\n this._advance();\n var /** @type {?} */ parts = [];\n while (this._peek !== quoteChar) {\n parts.push(this._readChar(true));\n }\n value = parts.join('');\n this._advance();\n }\n else {\n var /** @type {?} */ valueStart = this._index;\n this._requireCharCodeUntilFn(isNameEnd, 1);\n value = this._input.substring(valueStart, this._index);\n }\n this._endToken([this._processCarriageReturns(value)]);\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._consumeTagOpenEnd = function () {\n var /** @type {?} */ tokenType = this._attemptCharCode($SLASH) ? TokenType$1.TAG_OPEN_END_VOID : TokenType$1.TAG_OPEN_END;\n this._beginToken(tokenType);\n this._requireCharCode($GT);\n this._endToken([]);\n };\n /**\n * @param {?} start\n * @return {?}\n */\n _Tokenizer.prototype._consumeTagClose = function (start) {\n this._beginToken(TokenType$1.TAG_CLOSE, start);\n this._attemptCharCodeUntilFn(isNotWhitespace);\n var /** @type {?} */ prefixAndName = this._consumePrefixAndName();\n this._attemptCharCodeUntilFn(isNotWhitespace);\n this._requireCharCode($GT);\n this._endToken(prefixAndName);\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._consumeExpansionFormStart = function () {\n this._beginToken(TokenType$1.EXPANSION_FORM_START, this._getLocation());\n this._requireCharCode($LBRACE);\n this._endToken([]);\n this._expansionCaseStack.push(TokenType$1.EXPANSION_FORM_START);\n this._beginToken(TokenType$1.RAW_TEXT, this._getLocation());\n var /** @type {?} */ condition = this._readUntil($COMMA);\n this._endToken([condition], this._getLocation());\n this._requireCharCode($COMMA);\n this._attemptCharCodeUntilFn(isNotWhitespace);\n this._beginToken(TokenType$1.RAW_TEXT, this._getLocation());\n var /** @type {?} */ type = this._readUntil($COMMA);\n this._endToken([type], this._getLocation());\n this._requireCharCode($COMMA);\n this._attemptCharCodeUntilFn(isNotWhitespace);\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._consumeExpansionCaseStart = function () {\n this._beginToken(TokenType$1.EXPANSION_CASE_VALUE, this._getLocation());\n var /** @type {?} */ value = this._readUntil($LBRACE).trim();\n this._endToken([value], this._getLocation());\n this._attemptCharCodeUntilFn(isNotWhitespace);\n this._beginToken(TokenType$1.EXPANSION_CASE_EXP_START, this._getLocation());\n this._requireCharCode($LBRACE);\n this._endToken([], this._getLocation());\n this._attemptCharCodeUntilFn(isNotWhitespace);\n this._expansionCaseStack.push(TokenType$1.EXPANSION_CASE_EXP_START);\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._consumeExpansionCaseEnd = function () {\n this._beginToken(TokenType$1.EXPANSION_CASE_EXP_END, this._getLocation());\n this._requireCharCode($RBRACE);\n this._endToken([], this._getLocation());\n this._attemptCharCodeUntilFn(isNotWhitespace);\n this._expansionCaseStack.pop();\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._consumeExpansionFormEnd = function () {\n this._beginToken(TokenType$1.EXPANSION_FORM_END, this._getLocation());\n this._requireCharCode($RBRACE);\n this._endToken([]);\n this._expansionCaseStack.pop();\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._consumeText = function () {\n var /** @type {?} */ start = this._getLocation();\n this._beginToken(TokenType$1.TEXT, start);\n var /** @type {?} */ parts = [];\n do {\n if (this._interpolationConfig && this._attemptStr(this._interpolationConfig.start)) {\n parts.push(this._interpolationConfig.start);\n this._inInterpolation = true;\n }\n else if (this._interpolationConfig && this._inInterpolation &&\n this._attemptStr(this._interpolationConfig.end)) {\n parts.push(this._interpolationConfig.end);\n this._inInterpolation = false;\n }\n else {\n parts.push(this._readChar(true));\n }\n } while (!this._isTextEnd());\n this._endToken([this._processCarriageReturns(parts.join(''))]);\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._isTextEnd = function () {\n if (this._peek === $LT || this._peek === $EOF) {\n return true;\n }\n if (this._tokenizeIcu && !this._inInterpolation) {\n if (isExpansionFormStart(this._input, this._index, this._interpolationConfig)) {\n // start of an expansion form\n return true;\n }\n if (this._peek === $RBRACE && this._isInExpansionCase()) {\n // end of and expansion case\n return true;\n }\n }\n return false;\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._savePosition = function () {\n return [this._peek, this._index, this._column, this._line, this.tokens.length];\n };\n /**\n * @param {?} char\n * @return {?}\n */\n _Tokenizer.prototype._readUntil = function (char) {\n var /** @type {?} */ start = this._index;\n this._attemptUntilChar(char);\n return this._input.substring(start, this._index);\n };\n /**\n * @param {?} position\n * @return {?}\n */\n _Tokenizer.prototype._restorePosition = function (position) {\n this._peek = position[0];\n this._index = position[1];\n this._column = position[2];\n this._line = position[3];\n var /** @type {?} */ nbTokens = position[4];\n if (nbTokens < this.tokens.length) {\n // remove any extra tokens\n this.tokens = this.tokens.slice(0, nbTokens);\n }\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._isInExpansionCase = function () {\n return this._expansionCaseStack.length > 0 &&\n this._expansionCaseStack[this._expansionCaseStack.length - 1] ===\n TokenType$1.EXPANSION_CASE_EXP_START;\n };\n /**\n * @return {?}\n */\n _Tokenizer.prototype._isInExpansionForm = function () {\n return this._expansionCaseStack.length > 0 &&\n this._expansionCaseStack[this._expansionCaseStack.length - 1] ===\n TokenType$1.EXPANSION_FORM_START;\n };\n return _Tokenizer;\n}());\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isNotWhitespace(code) {\n return !isWhitespace(code) || code === $EOF;\n}\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isNameEnd(code) {\n return isWhitespace(code) || code === $GT || code === $SLASH ||\n code === $SQ || code === $DQ || code === $EQ;\n}\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isPrefixEnd(code) {\n return (code < $a || $z < code) && (code < $A || $Z < code) &&\n (code < $0 || code > $9);\n}\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isDigitEntityEnd(code) {\n return code == $SEMICOLON || code == $EOF || !isAsciiHexDigit(code);\n}\n/**\n * @param {?} code\n * @return {?}\n */\nfunction isNamedEntityEnd(code) {\n return code == $SEMICOLON || code == $EOF || !isAsciiLetter(code);\n}\n/**\n * @param {?} input\n * @param {?} offset\n * @param {?} interpolationConfig\n * @return {?}\n */\nfunction isExpansionFormStart(input, offset, interpolationConfig) {\n var /** @type {?} */ isInterpolationStart = interpolationConfig ? input.indexOf(interpolationConfig.start, offset) == offset : false;\n return input.charCodeAt(offset) == $LBRACE && !isInterpolationStart;\n}\n/**\n * @param {?} peek\n * @return {?}\n */\nfunction isExpansionCaseStart(peek) {\n return peek === $EQ || isAsciiLetter(peek) || isDigit(peek);\n}\n/**\n * @param {?} code1\n * @param {?} code2\n * @return {?}\n */\nfunction compareCharCodeCaseInsensitive(code1, code2) {\n return toUpperCaseCharCode(code1) == toUpperCaseCharCode(code2);\n}\n/**\n * @param {?} code\n * @return {?}\n */\nfunction toUpperCaseCharCode(code) {\n return code >= $a && code <= $z ? code - $a + $A : code;\n}\n/**\n * @param {?} srcTokens\n * @return {?}\n */\nfunction mergeTextTokens(srcTokens) {\n var /** @type {?} */ dstTokens = [];\n var /** @type {?} */ lastDstToken = undefined;\n for (var /** @type {?} */ i = 0; i < srcTokens.length; i++) {\n var /** @type {?} */ token = srcTokens[i];\n if (lastDstToken && lastDstToken.type == TokenType$1.TEXT && token.type == TokenType$1.TEXT) {\n lastDstToken.parts[0] += token.parts[0];\n lastDstToken.sourceSpan.end = token.sourceSpan.end;\n }\n else {\n lastDstToken = token;\n dstTokens.push(lastDstToken);\n }\n }\n return dstTokens;\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar TreeError = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](TreeError, _super);\n /**\n * @param {?} elementName\n * @param {?} span\n * @param {?} msg\n */\n function TreeError(elementName, span, msg) {\n var _this = _super.call(this, span, msg) || this;\n _this.elementName = elementName;\n return _this;\n }\n /**\n * @param {?} elementName\n * @param {?} span\n * @param {?} msg\n * @return {?}\n */\n TreeError.create = function (elementName, span, msg) {\n return new TreeError(elementName, span, msg);\n };\n return TreeError;\n}(ParseError));\nvar ParseTreeResult = (function () {\n /**\n * @param {?} rootNodes\n * @param {?} errors\n */\n function ParseTreeResult(rootNodes, errors) {\n this.rootNodes = rootNodes;\n this.errors = errors;\n }\n return ParseTreeResult;\n}());\nvar Parser$1 = (function () {\n /**\n * @param {?} getTagDefinition\n */\n function Parser$1(getTagDefinition) {\n this.getTagDefinition = getTagDefinition;\n }\n /**\n * @param {?} source\n * @param {?} url\n * @param {?=} parseExpansionForms\n * @param {?=} interpolationConfig\n * @return {?}\n */\n Parser$1.prototype.parse = function (source, url, parseExpansionForms, interpolationConfig) {\n if (parseExpansionForms === void 0) { parseExpansionForms = false; }\n if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }\n var /** @type {?} */ tokensAndErrors = tokenize(source, url, this.getTagDefinition, parseExpansionForms, interpolationConfig);\n var /** @type {?} */ treeAndErrors = new _TreeBuilder(tokensAndErrors.tokens, this.getTagDefinition).build();\n return new ParseTreeResult(treeAndErrors.rootNodes, ((tokensAndErrors.errors)).concat(treeAndErrors.errors));\n };\n return Parser$1;\n}());\nvar _TreeBuilder = (function () {\n /**\n * @param {?} tokens\n * @param {?} getTagDefinition\n */\n function _TreeBuilder(tokens, getTagDefinition) {\n this.tokens = tokens;\n this.getTagDefinition = getTagDefinition;\n this._index = -1;\n this._rootNodes = [];\n this._errors = [];\n this._elementStack = [];\n this._advance();\n }\n /**\n * @return {?}\n */\n _TreeBuilder.prototype.build = function () {\n while (this._peek.type !== TokenType$1.EOF) {\n if (this._peek.type === TokenType$1.TAG_OPEN_START) {\n this._consumeStartTag(this._advance());\n }\n else if (this._peek.type === TokenType$1.TAG_CLOSE) {\n this._consumeEndTag(this._advance());\n }\n else if (this._peek.type === TokenType$1.CDATA_START) {\n this._closeVoidElement();\n this._consumeCdata(this._advance());\n }\n else if (this._peek.type === TokenType$1.COMMENT_START) {\n this._closeVoidElement();\n this._consumeComment(this._advance());\n }\n else if (this._peek.type === TokenType$1.TEXT || this._peek.type === TokenType$1.RAW_TEXT ||\n this._peek.type === TokenType$1.ESCAPABLE_RAW_TEXT) {\n this._closeVoidElement();\n this._consumeText(this._advance());\n }\n else if (this._peek.type === TokenType$1.EXPANSION_FORM_START) {\n this._consumeExpansion(this._advance());\n }\n else {\n // Skip all other tokens...\n this._advance();\n }\n }\n return new ParseTreeResult(this._rootNodes, this._errors);\n };\n /**\n * @return {?}\n */\n _TreeBuilder.prototype._advance = function () {\n var /** @type {?} */ prev = this._peek;\n if (this._index < this.tokens.length - 1) {\n // Note: there is always an EOF token at the end\n this._index++;\n }\n this._peek = this.tokens[this._index];\n return prev;\n };\n /**\n * @param {?} type\n * @return {?}\n */\n _TreeBuilder.prototype._advanceIf = function (type) {\n if (this._peek.type === type) {\n return this._advance();\n }\n return null;\n };\n /**\n * @param {?} startToken\n * @return {?}\n */\n _TreeBuilder.prototype._consumeCdata = function (startToken) {\n this._consumeText(this._advance());\n this._advanceIf(TokenType$1.CDATA_END);\n };\n /**\n * @param {?} token\n * @return {?}\n */\n _TreeBuilder.prototype._consumeComment = function (token) {\n var /** @type {?} */ text = this._advanceIf(TokenType$1.RAW_TEXT);\n this._advanceIf(TokenType$1.COMMENT_END);\n var /** @type {?} */ value = text != null ? text.parts[0].trim() : null;\n this._addToParent(new Comment(value, token.sourceSpan));\n };\n /**\n * @param {?} token\n * @return {?}\n */\n _TreeBuilder.prototype._consumeExpansion = function (token) {\n var /** @type {?} */ switchValue = this._advance();\n var /** @type {?} */ type = this._advance();\n var /** @type {?} */ cases = [];\n // read =\n while (this._peek.type === TokenType$1.EXPANSION_CASE_VALUE) {\n var /** @type {?} */ expCase = this._parseExpansionCase();\n if (!expCase)\n return; // error\n cases.push(expCase);\n }\n // read the final }\n if (this._peek.type !== TokenType$1.EXPANSION_FORM_END) {\n this._errors.push(TreeError.create(null, this._peek.sourceSpan, \"Invalid ICU message. Missing '}'.\"));\n return;\n }\n var /** @type {?} */ sourceSpan = new ParseSourceSpan(token.sourceSpan.start, this._peek.sourceSpan.end);\n this._addToParent(new Expansion(switchValue.parts[0], type.parts[0], cases, sourceSpan, switchValue.sourceSpan));\n this._advance();\n };\n /**\n * @return {?}\n */\n _TreeBuilder.prototype._parseExpansionCase = function () {\n var /** @type {?} */ value = this._advance();\n // read {\n if (this._peek.type !== TokenType$1.EXPANSION_CASE_EXP_START) {\n this._errors.push(TreeError.create(null, this._peek.sourceSpan, \"Invalid ICU message. Missing '{'.\"));\n return null;\n }\n // read until }\n var /** @type {?} */ start = this._advance();\n var /** @type {?} */ exp = this._collectExpansionExpTokens(start);\n if (!exp)\n return null;\n var /** @type {?} */ end = this._advance();\n exp.push(new Token$1(TokenType$1.EOF, [], end.sourceSpan));\n // parse everything in between { and }\n var /** @type {?} */ parsedExp = new _TreeBuilder(exp, this.getTagDefinition).build();\n if (parsedExp.errors.length > 0) {\n this._errors = this._errors.concat(/** @type {?} */ (parsedExp.errors));\n return null;\n }\n var /** @type {?} */ sourceSpan = new ParseSourceSpan(value.sourceSpan.start, end.sourceSpan.end);\n var /** @type {?} */ expSourceSpan = new ParseSourceSpan(start.sourceSpan.start, end.sourceSpan.end);\n return new ExpansionCase(value.parts[0], parsedExp.rootNodes, sourceSpan, value.sourceSpan, expSourceSpan);\n };\n /**\n * @param {?} start\n * @return {?}\n */\n _TreeBuilder.prototype._collectExpansionExpTokens = function (start) {\n var /** @type {?} */ exp = [];\n var /** @type {?} */ expansionFormStack = [TokenType$1.EXPANSION_CASE_EXP_START];\n while (true) {\n if (this._peek.type === TokenType$1.EXPANSION_FORM_START ||\n this._peek.type === TokenType$1.EXPANSION_CASE_EXP_START) {\n expansionFormStack.push(this._peek.type);\n }\n if (this._peek.type === TokenType$1.EXPANSION_CASE_EXP_END) {\n if (lastOnStack(expansionFormStack, TokenType$1.EXPANSION_CASE_EXP_START)) {\n expansionFormStack.pop();\n if (expansionFormStack.length == 0)\n return exp;\n }\n else {\n this._errors.push(TreeError.create(null, start.sourceSpan, \"Invalid ICU message. Missing '}'.\"));\n return null;\n }\n }\n if (this._peek.type === TokenType$1.EXPANSION_FORM_END) {\n if (lastOnStack(expansionFormStack, TokenType$1.EXPANSION_FORM_START)) {\n expansionFormStack.pop();\n }\n else {\n this._errors.push(TreeError.create(null, start.sourceSpan, \"Invalid ICU message. Missing '}'.\"));\n return null;\n }\n }\n if (this._peek.type === TokenType$1.EOF) {\n this._errors.push(TreeError.create(null, start.sourceSpan, \"Invalid ICU message. Missing '}'.\"));\n return null;\n }\n exp.push(this._advance());\n }\n };\n /**\n * @param {?} token\n * @return {?}\n */\n _TreeBuilder.prototype._consumeText = function (token) {\n var /** @type {?} */ text = token.parts[0];\n if (text.length > 0 && text[0] == '\\n') {\n var /** @type {?} */ parent = this._getParentElement();\n if (parent != null && parent.children.length == 0 &&\n this.getTagDefinition(parent.name).ignoreFirstLf) {\n text = text.substring(1);\n }\n }\n if (text.length > 0) {\n this._addToParent(new Text(text, token.sourceSpan));\n }\n };\n /**\n * @return {?}\n */\n _TreeBuilder.prototype._closeVoidElement = function () {\n if (this._elementStack.length > 0) {\n var /** @type {?} */ el = this._elementStack[this._elementStack.length - 1];\n if (this.getTagDefinition(el.name).isVoid) {\n this._elementStack.pop();\n }\n }\n };\n /**\n * @param {?} startTagToken\n * @return {?}\n */\n _TreeBuilder.prototype._consumeStartTag = function (startTagToken) {\n var /** @type {?} */ prefix = startTagToken.parts[0];\n var /** @type {?} */ name = startTagToken.parts[1];\n var /** @type {?} */ attrs = [];\n while (this._peek.type === TokenType$1.ATTR_NAME) {\n attrs.push(this._consumeAttr(this._advance()));\n }\n var /** @type {?} */ fullName = this._getElementFullName(prefix, name, this._getParentElement());\n var /** @type {?} */ selfClosing = false;\n // Note: There could have been a tokenizer error\n // so that we don't get a token for the end tag...\n if (this._peek.type === TokenType$1.TAG_OPEN_END_VOID) {\n this._advance();\n selfClosing = true;\n var /** @type {?} */ tagDef = this.getTagDefinition(fullName);\n if (!(tagDef.canSelfClose || getNsPrefix(fullName) !== null || tagDef.isVoid)) {\n this._errors.push(TreeError.create(fullName, startTagToken.sourceSpan, \"Only void and foreign elements can be self closed \\\"\" + startTagToken.parts[1] + \"\\\"\"));\n }\n }\n else if (this._peek.type === TokenType$1.TAG_OPEN_END) {\n this._advance();\n selfClosing = false;\n }\n var /** @type {?} */ end = this._peek.sourceSpan.start;\n var /** @type {?} */ span = new ParseSourceSpan(startTagToken.sourceSpan.start, end);\n var /** @type {?} */ el = new Element(fullName, attrs, [], span, span, undefined);\n this._pushElement(el);\n if (selfClosing) {\n this._popElement(fullName);\n el.endSourceSpan = span;\n }\n };\n /**\n * @param {?} el\n * @return {?}\n */\n _TreeBuilder.prototype._pushElement = function (el) {\n if (this._elementStack.length > 0) {\n var /** @type {?} */ parentEl = this._elementStack[this._elementStack.length - 1];\n if (this.getTagDefinition(parentEl.name).isClosedByChild(el.name)) {\n this._elementStack.pop();\n }\n }\n var /** @type {?} */ tagDef = this.getTagDefinition(el.name);\n var _a = this._getParentElementSkippingContainers(), parent = _a.parent, container = _a.container;\n if (parent && tagDef.requireExtraParent(parent.name)) {\n var /** @type {?} */ newParent = new Element(tagDef.parentToAdd, [], [], el.sourceSpan, el.startSourceSpan, el.endSourceSpan);\n this._insertBeforeContainer(parent, container, newParent);\n }\n this._addToParent(el);\n this._elementStack.push(el);\n };\n /**\n * @param {?} endTagToken\n * @return {?}\n */\n _TreeBuilder.prototype._consumeEndTag = function (endTagToken) {\n var /** @type {?} */ fullName = this._getElementFullName(endTagToken.parts[0], endTagToken.parts[1], this._getParentElement());\n if (this._getParentElement()) {\n ((this._getParentElement())).endSourceSpan = endTagToken.sourceSpan;\n }\n if (this.getTagDefinition(fullName).isVoid) {\n this._errors.push(TreeError.create(fullName, endTagToken.sourceSpan, \"Void elements do not have end tags \\\"\" + endTagToken.parts[1] + \"\\\"\"));\n }\n else if (!this._popElement(fullName)) {\n var /** @type {?} */ errMsg = \"Unexpected closing tag \\\"\" + fullName + \"\\\". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags\";\n this._errors.push(TreeError.create(fullName, endTagToken.sourceSpan, errMsg));\n }\n };\n /**\n * @param {?} fullName\n * @return {?}\n */\n _TreeBuilder.prototype._popElement = function (fullName) {\n for (var /** @type {?} */ stackIndex = this._elementStack.length - 1; stackIndex >= 0; stackIndex--) {\n var /** @type {?} */ el = this._elementStack[stackIndex];\n if (el.name == fullName) {\n this._elementStack.splice(stackIndex, this._elementStack.length - stackIndex);\n return true;\n }\n if (!this.getTagDefinition(el.name).closedByParent) {\n return false;\n }\n }\n return false;\n };\n /**\n * @param {?} attrName\n * @return {?}\n */\n _TreeBuilder.prototype._consumeAttr = function (attrName) {\n var /** @type {?} */ fullName = mergeNsAndName(attrName.parts[0], attrName.parts[1]);\n var /** @type {?} */ end = attrName.sourceSpan.end;\n var /** @type {?} */ value = '';\n var /** @type {?} */ valueSpan = ((undefined));\n if (this._peek.type === TokenType$1.ATTR_VALUE) {\n var /** @type {?} */ valueToken = this._advance();\n value = valueToken.parts[0];\n end = valueToken.sourceSpan.end;\n valueSpan = valueToken.sourceSpan;\n }\n return new Attribute$1(fullName, value, new ParseSourceSpan(attrName.sourceSpan.start, end), valueSpan);\n };\n /**\n * @return {?}\n */\n _TreeBuilder.prototype._getParentElement = function () {\n return this._elementStack.length > 0 ? this._elementStack[this._elementStack.length - 1] : null;\n };\n /**\n * Returns the parent in the DOM and the container.\n *\n * `` elements are skipped as they are not rendered as DOM element.\n * @return {?}\n */\n _TreeBuilder.prototype._getParentElementSkippingContainers = function () {\n var /** @type {?} */ container = null;\n for (var /** @type {?} */ i = this._elementStack.length - 1; i >= 0; i--) {\n if (!isNgContainer(this._elementStack[i].name)) {\n return { parent: this._elementStack[i], container: container };\n }\n container = this._elementStack[i];\n }\n return { parent: this._elementStack[this._elementStack.length - 1], container: container };\n };\n /**\n * @param {?} node\n * @return {?}\n */\n _TreeBuilder.prototype._addToParent = function (node) {\n var /** @type {?} */ parent = this._getParentElement();\n if (parent != null) {\n parent.children.push(node);\n }\n else {\n this._rootNodes.push(node);\n }\n };\n /**\n * Insert a node between the parent and the container.\n * When no container is given, the node is appended as a child of the parent.\n * Also updates the element stack accordingly.\n *\n * \\@internal\n * @param {?} parent\n * @param {?} container\n * @param {?} node\n * @return {?}\n */\n _TreeBuilder.prototype._insertBeforeContainer = function (parent, container, node) {\n if (!container) {\n this._addToParent(node);\n this._elementStack.push(node);\n }\n else {\n if (parent) {\n // replace the container with the new node in the children\n var /** @type {?} */ index = parent.children.indexOf(container);\n parent.children[index] = node;\n }\n else {\n this._rootNodes.push(node);\n }\n node.children.push(container);\n this._elementStack.splice(this._elementStack.indexOf(container), 0, node);\n }\n };\n /**\n * @param {?} prefix\n * @param {?} localName\n * @param {?} parentElement\n * @return {?}\n */\n _TreeBuilder.prototype._getElementFullName = function (prefix, localName, parentElement) {\n if (prefix == null) {\n prefix = ((this.getTagDefinition(localName).implicitNamespacePrefix));\n if (prefix == null && parentElement != null) {\n prefix = getNsPrefix(parentElement.name);\n }\n }\n return mergeNsAndName(prefix, localName);\n };\n return _TreeBuilder;\n}());\n/**\n * @param {?} stack\n * @param {?} element\n * @return {?}\n */\nfunction lastOnStack(stack, element) {\n return stack.length > 0 && stack[stack.length - 1] === element;\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @param {?} message\n * @return {?}\n */\nfunction digest(message) {\n return message.id || sha1(serializeNodes(message.nodes).join('') + (\"[\" + message.meaning + \"]\"));\n}\n/**\n * @param {?} message\n * @return {?}\n */\nfunction decimalDigest(message) {\n if (message.id) {\n return message.id;\n }\n var /** @type {?} */ visitor = new _SerializerIgnoreIcuExpVisitor();\n var /** @type {?} */ parts = message.nodes.map(function (a) { return a.visit(visitor, null); });\n return computeMsgId(parts.join(''), message.meaning);\n}\n/**\n * Serialize the i18n ast to something xml-like in order to generate an UID.\n *\n * The visitor is also used in the i18n parser tests\n *\n * \\@internal\n */\nvar _SerializerVisitor = (function () {\n function _SerializerVisitor() {\n }\n /**\n * @param {?} text\n * @param {?} context\n * @return {?}\n */\n _SerializerVisitor.prototype.visitText = function (text, context) { return text.value; };\n /**\n * @param {?} container\n * @param {?} context\n * @return {?}\n */\n _SerializerVisitor.prototype.visitContainer = function (container, context) {\n var _this = this;\n return \"[\" + container.children.map(function (child) { return child.visit(_this); }).join(', ') + \"]\";\n };\n /**\n * @param {?} icu\n * @param {?} context\n * @return {?}\n */\n _SerializerVisitor.prototype.visitIcu = function (icu, context) {\n var _this = this;\n var /** @type {?} */ strCases = Object.keys(icu.cases).map(function (k) { return k + \" {\" + icu.cases[k].visit(_this) + \"}\"; });\n return \"{\" + icu.expression + \", \" + icu.type + \", \" + strCases.join(', ') + \"}\";\n };\n /**\n * @param {?} ph\n * @param {?} context\n * @return {?}\n */\n _SerializerVisitor.prototype.visitTagPlaceholder = function (ph, context) {\n var _this = this;\n return ph.isVoid ?\n \"\" :\n \"\" + ph.children.map(function (child) { return child.visit(_this); }).join(', ') + \"\";\n };\n /**\n * @param {?} ph\n * @param {?} context\n * @return {?}\n */\n _SerializerVisitor.prototype.visitPlaceholder = function (ph, context) {\n return ph.value ? \"\" + ph.value + \"\" : \"\";\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n _SerializerVisitor.prototype.visitIcuPlaceholder = function (ph, context) {\n return \"\" + ph.value.visit(this) + \"\";\n };\n return _SerializerVisitor;\n}());\nvar serializerVisitor = new _SerializerVisitor();\n/**\n * @param {?} nodes\n * @return {?}\n */\nfunction serializeNodes(nodes) {\n return nodes.map(function (a) { return a.visit(serializerVisitor, null); });\n}\n/**\n * Serialize the i18n ast to something xml-like in order to generate an UID.\n *\n * Ignore the ICU expressions so that message IDs stays identical if only the expression changes.\n *\n * \\@internal\n */\nvar _SerializerIgnoreIcuExpVisitor = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](_SerializerIgnoreIcuExpVisitor, _super);\n function _SerializerIgnoreIcuExpVisitor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {?} icu\n * @param {?} context\n * @return {?}\n */\n _SerializerIgnoreIcuExpVisitor.prototype.visitIcu = function (icu, context) {\n var _this = this;\n var /** @type {?} */ strCases = Object.keys(icu.cases).map(function (k) { return k + \" {\" + icu.cases[k].visit(_this) + \"}\"; });\n // Do not take the expression into account\n return \"{\" + icu.type + \", \" + strCases.join(', ') + \"}\";\n };\n return _SerializerIgnoreIcuExpVisitor;\n}(_SerializerVisitor));\n/**\n * Compute the SHA1 of the given string\n *\n * see http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf\n *\n * WARNING: this function has not been designed not tested with security in mind.\n * DO NOT USE IT IN A SECURITY SENSITIVE CONTEXT.\n * @param {?} str\n * @return {?}\n */\nfunction sha1(str) {\n var /** @type {?} */ utf8 = utf8Encode(str);\n var /** @type {?} */ words32 = stringToWords32(utf8, Endian.Big);\n var /** @type {?} */ len = utf8.length * 8;\n var /** @type {?} */ w = new Array(80);\n var _a = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0], a = _a[0], b = _a[1], c = _a[2], d = _a[3], e = _a[4];\n words32[len >> 5] |= 0x80 << (24 - len % 32);\n words32[((len + 64 >> 9) << 4) + 15] = len;\n for (var /** @type {?} */ i = 0; i < words32.length; i += 16) {\n var _b = [a, b, c, d, e], h0 = _b[0], h1 = _b[1], h2 = _b[2], h3 = _b[3], h4 = _b[4];\n for (var /** @type {?} */ j = 0; j < 80; j++) {\n if (j < 16) {\n w[j] = words32[i + j];\n }\n else {\n w[j] = rol32(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);\n }\n var _c = fk(j, b, c, d), f = _c[0], k = _c[1];\n var /** @type {?} */ temp = [rol32(a, 5), f, e, k, w[j]].reduce(add32);\n _d = [d, c, rol32(b, 30), a, temp], e = _d[0], d = _d[1], c = _d[2], b = _d[3], a = _d[4];\n }\n _e = [add32(a, h0), add32(b, h1), add32(c, h2), add32(d, h3), add32(e, h4)], a = _e[0], b = _e[1], c = _e[2], d = _e[3], e = _e[4];\n }\n return byteStringToHexString(words32ToByteString([a, b, c, d, e]));\n var _d, _e;\n}\n/**\n * @param {?} index\n * @param {?} b\n * @param {?} c\n * @param {?} d\n * @return {?}\n */\nfunction fk(index, b, c, d) {\n if (index < 20) {\n return [(b & c) | (~b & d), 0x5a827999];\n }\n if (index < 40) {\n return [b ^ c ^ d, 0x6ed9eba1];\n }\n if (index < 60) {\n return [(b & c) | (b & d) | (c & d), 0x8f1bbcdc];\n }\n return [b ^ c ^ d, 0xca62c1d6];\n}\n/**\n * Compute the fingerprint of the given string\n *\n * The output is 64 bit number encoded as a decimal string\n *\n * based on:\n * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/GoogleJsMessageIdGenerator.java\n * @param {?} str\n * @return {?}\n */\nfunction fingerprint(str) {\n var /** @type {?} */ utf8 = utf8Encode(str);\n var _a = [hash32(utf8, 0), hash32(utf8, 102072)], hi = _a[0], lo = _a[1];\n if (hi == 0 && (lo == 0 || lo == 1)) {\n hi = hi ^ 0x130f9bef;\n lo = lo ^ -0x6b5f56d8;\n }\n return [hi, lo];\n}\n/**\n * @param {?} msg\n * @param {?} meaning\n * @return {?}\n */\nfunction computeMsgId(msg, meaning) {\n var _a = fingerprint(msg), hi = _a[0], lo = _a[1];\n if (meaning) {\n var _b = fingerprint(meaning), him = _b[0], lom = _b[1];\n _c = add64(rol64([hi, lo], 1), [him, lom]), hi = _c[0], lo = _c[1];\n }\n return byteStringToDecString(words32ToByteString([hi & 0x7fffffff, lo]));\n var _c;\n}\n/**\n * @param {?} str\n * @param {?} c\n * @return {?}\n */\nfunction hash32(str, c) {\n var _a = [0x9e3779b9, 0x9e3779b9], a = _a[0], b = _a[1];\n var /** @type {?} */ i;\n var /** @type {?} */ len = str.length;\n for (i = 0; i + 12 <= len; i += 12) {\n a = add32(a, wordAt(str, i, Endian.Little));\n b = add32(b, wordAt(str, i + 4, Endian.Little));\n c = add32(c, wordAt(str, i + 8, Endian.Little));\n _b = mix([a, b, c]), a = _b[0], b = _b[1], c = _b[2];\n }\n a = add32(a, wordAt(str, i, Endian.Little));\n b = add32(b, wordAt(str, i + 4, Endian.Little));\n // the first byte of c is reserved for the length\n c = add32(c, len);\n c = add32(c, wordAt(str, i + 8, Endian.Little) << 8);\n return mix([a, b, c])[2];\n var _b;\n}\n/**\n * @param {?} __0\n * @return {?}\n */\nfunction mix(_a) {\n var a = _a[0], b = _a[1], c = _a[2];\n a = sub32(a, b);\n a = sub32(a, c);\n a ^= c >>> 13;\n b = sub32(b, c);\n b = sub32(b, a);\n b ^= a << 8;\n c = sub32(c, a);\n c = sub32(c, b);\n c ^= b >>> 13;\n a = sub32(a, b);\n a = sub32(a, c);\n a ^= c >>> 12;\n b = sub32(b, c);\n b = sub32(b, a);\n b ^= a << 16;\n c = sub32(c, a);\n c = sub32(c, b);\n c ^= b >>> 5;\n a = sub32(a, b);\n a = sub32(a, c);\n a ^= c >>> 3;\n b = sub32(b, c);\n b = sub32(b, a);\n b ^= a << 10;\n c = sub32(c, a);\n c = sub32(c, b);\n c ^= b >>> 15;\n return [a, b, c];\n}\nvar Endian = {};\nEndian.Little = 0;\nEndian.Big = 1;\nEndian[Endian.Little] = \"Little\";\nEndian[Endian.Big] = \"Big\";\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction add32(a, b) {\n return add32to64(a, b)[1];\n}\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction add32to64(a, b) {\n var /** @type {?} */ low = (a & 0xffff) + (b & 0xffff);\n var /** @type {?} */ high = (a >>> 16) + (b >>> 16) + (low >>> 16);\n return [high >>> 16, (high << 16) | (low & 0xffff)];\n}\n/**\n * @param {?} __0\n * @param {?} __1\n * @return {?}\n */\nfunction add64(_a, _b) {\n var ah = _a[0], al = _a[1];\n var bh = _b[0], bl = _b[1];\n var _c = add32to64(al, bl), carry = _c[0], l = _c[1];\n var /** @type {?} */ h = add32(add32(ah, bh), carry);\n return [h, l];\n}\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction sub32(a, b) {\n var /** @type {?} */ low = (a & 0xffff) - (b & 0xffff);\n var /** @type {?} */ high = (a >> 16) - (b >> 16) + (low >> 16);\n return (high << 16) | (low & 0xffff);\n}\n/**\n * @param {?} a\n * @param {?} count\n * @return {?}\n */\nfunction rol32(a, count) {\n return (a << count) | (a >>> (32 - count));\n}\n/**\n * @param {?} __0\n * @param {?} count\n * @return {?}\n */\nfunction rol64(_a, count) {\n var hi = _a[0], lo = _a[1];\n var /** @type {?} */ h = (hi << count) | (lo >>> (32 - count));\n var /** @type {?} */ l = (lo << count) | (hi >>> (32 - count));\n return [h, l];\n}\n/**\n * @param {?} str\n * @param {?} endian\n * @return {?}\n */\nfunction stringToWords32(str, endian) {\n var /** @type {?} */ words32 = Array((str.length + 3) >>> 2);\n for (var /** @type {?} */ i = 0; i < words32.length; i++) {\n words32[i] = wordAt(str, i * 4, endian);\n }\n return words32;\n}\n/**\n * @param {?} str\n * @param {?} index\n * @return {?}\n */\nfunction byteAt(str, index) {\n return index >= str.length ? 0 : str.charCodeAt(index) & 0xff;\n}\n/**\n * @param {?} str\n * @param {?} index\n * @param {?} endian\n * @return {?}\n */\nfunction wordAt(str, index, endian) {\n var /** @type {?} */ word = 0;\n if (endian === Endian.Big) {\n for (var /** @type {?} */ i = 0; i < 4; i++) {\n word += byteAt(str, index + i) << (24 - 8 * i);\n }\n }\n else {\n for (var /** @type {?} */ i = 0; i < 4; i++) {\n word += byteAt(str, index + i) << 8 * i;\n }\n }\n return word;\n}\n/**\n * @param {?} words32\n * @return {?}\n */\nfunction words32ToByteString(words32) {\n return words32.reduce(function (str, word) { return str + word32ToByteString(word); }, '');\n}\n/**\n * @param {?} word\n * @return {?}\n */\nfunction word32ToByteString(word) {\n var /** @type {?} */ str = '';\n for (var /** @type {?} */ i = 0; i < 4; i++) {\n str += String.fromCharCode((word >>> 8 * (3 - i)) & 0xff);\n }\n return str;\n}\n/**\n * @param {?} str\n * @return {?}\n */\nfunction byteStringToHexString(str) {\n var /** @type {?} */ hex = '';\n for (var /** @type {?} */ i = 0; i < str.length; i++) {\n var /** @type {?} */ b = byteAt(str, i);\n hex += (b >>> 4).toString(16) + (b & 0x0f).toString(16);\n }\n return hex.toLowerCase();\n}\n/**\n * @param {?} str\n * @return {?}\n */\nfunction byteStringToDecString(str) {\n var /** @type {?} */ decimal = '';\n var /** @type {?} */ toThePower = '1';\n for (var /** @type {?} */ i = str.length - 1; i >= 0; i--) {\n decimal = addBigInt(decimal, numberTimesBigInt(byteAt(str, i), toThePower));\n toThePower = numberTimesBigInt(256, toThePower);\n }\n return decimal.split('').reverse().join('');\n}\n/**\n * @param {?} x\n * @param {?} y\n * @return {?}\n */\nfunction addBigInt(x, y) {\n var /** @type {?} */ sum = '';\n var /** @type {?} */ len = Math.max(x.length, y.length);\n for (var /** @type {?} */ i = 0, /** @type {?} */ carry = 0; i < len || carry; i++) {\n var /** @type {?} */ tmpSum = carry + +(x[i] || 0) + +(y[i] || 0);\n if (tmpSum >= 10) {\n carry = 1;\n sum += tmpSum - 10;\n }\n else {\n carry = 0;\n sum += tmpSum;\n }\n }\n return sum;\n}\n/**\n * @param {?} num\n * @param {?} b\n * @return {?}\n */\nfunction numberTimesBigInt(num, b) {\n var /** @type {?} */ product = '';\n var /** @type {?} */ bToThePower = b;\n for (; num !== 0; num = num >>> 1) {\n if (num & 1)\n product = addBigInt(product, bToThePower);\n bToThePower = addBigInt(bToThePower, bToThePower);\n }\n return product;\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar Message = (function () {\n /**\n * @param {?} nodes message AST\n * @param {?} placeholders maps placeholder names to static content\n * @param {?} placeholderToMessage maps placeholder names to messages (used for nested ICU messages)\n * @param {?} meaning\n * @param {?} description\n * @param {?} id\n */\n function Message(nodes, placeholders, placeholderToMessage, meaning, description, id) {\n this.nodes = nodes;\n this.placeholders = placeholders;\n this.placeholderToMessage = placeholderToMessage;\n this.meaning = meaning;\n this.description = description;\n this.id = id;\n if (nodes.length) {\n this.sources = [{\n filePath: nodes[0].sourceSpan.start.file.url,\n startLine: nodes[0].sourceSpan.start.line + 1,\n startCol: nodes[0].sourceSpan.start.col + 1,\n endLine: nodes[nodes.length - 1].sourceSpan.end.line + 1,\n endCol: nodes[0].sourceSpan.start.col + 1\n }];\n }\n else {\n this.sources = [];\n }\n }\n return Message;\n}());\nvar Text$1 = (function () {\n /**\n * @param {?} value\n * @param {?} sourceSpan\n */\n function Text$1(value, sourceSpan) {\n this.value = value;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n Text$1.prototype.visit = function (visitor, context) { return visitor.visitText(this, context); };\n return Text$1;\n}());\nvar Container = (function () {\n /**\n * @param {?} children\n * @param {?} sourceSpan\n */\n function Container(children, sourceSpan) {\n this.children = children;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n Container.prototype.visit = function (visitor, context) { return visitor.visitContainer(this, context); };\n return Container;\n}());\nvar Icu = (function () {\n /**\n * @param {?} expression\n * @param {?} type\n * @param {?} cases\n * @param {?} sourceSpan\n */\n function Icu(expression, type, cases, sourceSpan) {\n this.expression = expression;\n this.type = type;\n this.cases = cases;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n Icu.prototype.visit = function (visitor, context) { return visitor.visitIcu(this, context); };\n return Icu;\n}());\nvar TagPlaceholder = (function () {\n /**\n * @param {?} tag\n * @param {?} attrs\n * @param {?} startName\n * @param {?} closeName\n * @param {?} children\n * @param {?} isVoid\n * @param {?} sourceSpan\n */\n function TagPlaceholder(tag, attrs, startName, closeName, children, isVoid, sourceSpan) {\n this.tag = tag;\n this.attrs = attrs;\n this.startName = startName;\n this.closeName = closeName;\n this.children = children;\n this.isVoid = isVoid;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n TagPlaceholder.prototype.visit = function (visitor, context) { return visitor.visitTagPlaceholder(this, context); };\n return TagPlaceholder;\n}());\nvar Placeholder = (function () {\n /**\n * @param {?} value\n * @param {?} name\n * @param {?} sourceSpan\n */\n function Placeholder(value, name, sourceSpan) {\n this.value = value;\n this.name = name;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n Placeholder.prototype.visit = function (visitor, context) { return visitor.visitPlaceholder(this, context); };\n return Placeholder;\n}());\nvar IcuPlaceholder = (function () {\n /**\n * @param {?} value\n * @param {?} name\n * @param {?} sourceSpan\n */\n function IcuPlaceholder(value, name, sourceSpan) {\n this.value = value;\n this.name = name;\n this.sourceSpan = sourceSpan;\n }\n /**\n * @param {?} visitor\n * @param {?=} context\n * @return {?}\n */\n IcuPlaceholder.prototype.visit = function (visitor, context) { return visitor.visitIcuPlaceholder(this, context); };\n return IcuPlaceholder;\n}());\nvar CloneVisitor = (function () {\n function CloneVisitor() {\n }\n /**\n * @param {?} text\n * @param {?=} context\n * @return {?}\n */\n CloneVisitor.prototype.visitText = function (text, context) { return new Text$1(text.value, text.sourceSpan); };\n /**\n * @param {?} container\n * @param {?=} context\n * @return {?}\n */\n CloneVisitor.prototype.visitContainer = function (container, context) {\n var _this = this;\n var /** @type {?} */ children = container.children.map(function (n) { return n.visit(_this, context); });\n return new Container(children, container.sourceSpan);\n };\n /**\n * @param {?} icu\n * @param {?=} context\n * @return {?}\n */\n CloneVisitor.prototype.visitIcu = function (icu, context) {\n var _this = this;\n var /** @type {?} */ cases = {};\n Object.keys(icu.cases).forEach(function (key) { return cases[key] = icu.cases[key].visit(_this, context); });\n var /** @type {?} */ msg = new Icu(icu.expression, icu.type, cases, icu.sourceSpan);\n msg.expressionPlaceholder = icu.expressionPlaceholder;\n return msg;\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n CloneVisitor.prototype.visitTagPlaceholder = function (ph, context) {\n var _this = this;\n var /** @type {?} */ children = ph.children.map(function (n) { return n.visit(_this, context); });\n return new TagPlaceholder(ph.tag, ph.attrs, ph.startName, ph.closeName, children, ph.isVoid, ph.sourceSpan);\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n CloneVisitor.prototype.visitPlaceholder = function (ph, context) {\n return new Placeholder(ph.value, ph.name, ph.sourceSpan);\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n CloneVisitor.prototype.visitIcuPlaceholder = function (ph, context) {\n return new IcuPlaceholder(ph.value, ph.name, ph.sourceSpan);\n };\n return CloneVisitor;\n}());\nvar RecurseVisitor = (function () {\n function RecurseVisitor() {\n }\n /**\n * @param {?} text\n * @param {?=} context\n * @return {?}\n */\n RecurseVisitor.prototype.visitText = function (text, context) { };\n ;\n /**\n * @param {?} container\n * @param {?=} context\n * @return {?}\n */\n RecurseVisitor.prototype.visitContainer = function (container, context) {\n var _this = this;\n container.children.forEach(function (child) { return child.visit(_this); });\n };\n /**\n * @param {?} icu\n * @param {?=} context\n * @return {?}\n */\n RecurseVisitor.prototype.visitIcu = function (icu, context) {\n var _this = this;\n Object.keys(icu.cases).forEach(function (k) { icu.cases[k].visit(_this); });\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n RecurseVisitor.prototype.visitTagPlaceholder = function (ph, context) {\n var _this = this;\n ph.children.forEach(function (child) { return child.visit(_this); });\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n RecurseVisitor.prototype.visitPlaceholder = function (ph, context) { };\n ;\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n RecurseVisitor.prototype.visitIcuPlaceholder = function (ph, context) { };\n ;\n return RecurseVisitor;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar TAG_TO_PLACEHOLDER_NAMES = {\n 'A': 'LINK',\n 'B': 'BOLD_TEXT',\n 'BR': 'LINE_BREAK',\n 'EM': 'EMPHASISED_TEXT',\n 'H1': 'HEADING_LEVEL1',\n 'H2': 'HEADING_LEVEL2',\n 'H3': 'HEADING_LEVEL3',\n 'H4': 'HEADING_LEVEL4',\n 'H5': 'HEADING_LEVEL5',\n 'H6': 'HEADING_LEVEL6',\n 'HR': 'HORIZONTAL_RULE',\n 'I': 'ITALIC_TEXT',\n 'LI': 'LIST_ITEM',\n 'LINK': 'MEDIA_LINK',\n 'OL': 'ORDERED_LIST',\n 'P': 'PARAGRAPH',\n 'Q': 'QUOTATION',\n 'S': 'STRIKETHROUGH_TEXT',\n 'SMALL': 'SMALL_TEXT',\n 'SUB': 'SUBSTRIPT',\n 'SUP': 'SUPERSCRIPT',\n 'TBODY': 'TABLE_BODY',\n 'TD': 'TABLE_CELL',\n 'TFOOT': 'TABLE_FOOTER',\n 'TH': 'TABLE_HEADER_CELL',\n 'THEAD': 'TABLE_HEADER',\n 'TR': 'TABLE_ROW',\n 'TT': 'MONOSPACED_TEXT',\n 'U': 'UNDERLINED_TEXT',\n 'UL': 'UNORDERED_LIST',\n};\n/**\n * Creates unique names for placeholder with different content.\n *\n * Returns the same placeholder name when the content is identical.\n *\n * \\@internal\n */\nvar PlaceholderRegistry = (function () {\n function PlaceholderRegistry() {\n this._placeHolderNameCounts = {};\n this._signatureToName = {};\n }\n /**\n * @param {?} tag\n * @param {?} attrs\n * @param {?} isVoid\n * @return {?}\n */\n PlaceholderRegistry.prototype.getStartTagPlaceholderName = function (tag, attrs, isVoid) {\n var /** @type {?} */ signature = this._hashTag(tag, attrs, isVoid);\n if (this._signatureToName[signature]) {\n return this._signatureToName[signature];\n }\n var /** @type {?} */ upperTag = tag.toUpperCase();\n var /** @type {?} */ baseName = TAG_TO_PLACEHOLDER_NAMES[upperTag] || \"TAG_\" + upperTag;\n var /** @type {?} */ name = this._generateUniqueName(isVoid ? baseName : \"START_\" + baseName);\n this._signatureToName[signature] = name;\n return name;\n };\n /**\n * @param {?} tag\n * @return {?}\n */\n PlaceholderRegistry.prototype.getCloseTagPlaceholderName = function (tag) {\n var /** @type {?} */ signature = this._hashClosingTag(tag);\n if (this._signatureToName[signature]) {\n return this._signatureToName[signature];\n }\n var /** @type {?} */ upperTag = tag.toUpperCase();\n var /** @type {?} */ baseName = TAG_TO_PLACEHOLDER_NAMES[upperTag] || \"TAG_\" + upperTag;\n var /** @type {?} */ name = this._generateUniqueName(\"CLOSE_\" + baseName);\n this._signatureToName[signature] = name;\n return name;\n };\n /**\n * @param {?} name\n * @param {?} content\n * @return {?}\n */\n PlaceholderRegistry.prototype.getPlaceholderName = function (name, content) {\n var /** @type {?} */ upperName = name.toUpperCase();\n var /** @type {?} */ signature = \"PH: \" + upperName + \"=\" + content;\n if (this._signatureToName[signature]) {\n return this._signatureToName[signature];\n }\n var /** @type {?} */ uniqueName = this._generateUniqueName(upperName);\n this._signatureToName[signature] = uniqueName;\n return uniqueName;\n };\n /**\n * @param {?} name\n * @return {?}\n */\n PlaceholderRegistry.prototype.getUniquePlaceholder = function (name) {\n return this._generateUniqueName(name.toUpperCase());\n };\n /**\n * @param {?} tag\n * @param {?} attrs\n * @param {?} isVoid\n * @return {?}\n */\n PlaceholderRegistry.prototype._hashTag = function (tag, attrs, isVoid) {\n var /** @type {?} */ start = \"<\" + tag;\n var /** @type {?} */ strAttrs = Object.keys(attrs).sort().map(function (name) { return \" \" + name + \"=\" + attrs[name]; }).join('');\n var /** @type {?} */ end = isVoid ? '/>' : \">\";\n return start + strAttrs + end;\n };\n /**\n * @param {?} tag\n * @return {?}\n */\n PlaceholderRegistry.prototype._hashClosingTag = function (tag) { return this._hashTag(\"/\" + tag, {}, false); };\n /**\n * @param {?} base\n * @return {?}\n */\n PlaceholderRegistry.prototype._generateUniqueName = function (base) {\n var /** @type {?} */ seen = this._placeHolderNameCounts.hasOwnProperty(base);\n if (!seen) {\n this._placeHolderNameCounts[base] = 1;\n return base;\n }\n var /** @type {?} */ id = this._placeHolderNameCounts[base];\n this._placeHolderNameCounts[base] = id + 1;\n return base + \"_\" + id;\n };\n return PlaceholderRegistry;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar _expParser = new Parser(new Lexer());\n/**\n * Returns a function converting html nodes to an i18n Message given an interpolationConfig\n * @param {?} interpolationConfig\n * @return {?}\n */\nfunction createI18nMessageFactory(interpolationConfig) {\n var /** @type {?} */ visitor = new _I18nVisitor(_expParser, interpolationConfig);\n return function (nodes, meaning, description, id) { return visitor.toI18nMessage(nodes, meaning, description, id); };\n}\nvar _I18nVisitor = (function () {\n /**\n * @param {?} _expressionParser\n * @param {?} _interpolationConfig\n */\n function _I18nVisitor(_expressionParser, _interpolationConfig) {\n this._expressionParser = _expressionParser;\n this._interpolationConfig = _interpolationConfig;\n }\n /**\n * @param {?} nodes\n * @param {?} meaning\n * @param {?} description\n * @param {?} id\n * @return {?}\n */\n _I18nVisitor.prototype.toI18nMessage = function (nodes, meaning, description, id) {\n this._isIcu = nodes.length == 1 && nodes[0] instanceof Expansion;\n this._icuDepth = 0;\n this._placeholderRegistry = new PlaceholderRegistry();\n this._placeholderToContent = {};\n this._placeholderToMessage = {};\n var /** @type {?} */ i18nodes = visitAll(this, nodes, {});\n return new Message(i18nodes, this._placeholderToContent, this._placeholderToMessage, meaning, description, id);\n };\n /**\n * @param {?} el\n * @param {?} context\n * @return {?}\n */\n _I18nVisitor.prototype.visitElement = function (el, context) {\n var /** @type {?} */ children = visitAll(this, el.children);\n var /** @type {?} */ attrs = {};\n el.attrs.forEach(function (attr) {\n // Do not visit the attributes, translatable ones are top-level ASTs\n attrs[attr.name] = attr.value;\n });\n var /** @type {?} */ isVoid = getHtmlTagDefinition(el.name).isVoid;\n var /** @type {?} */ startPhName = this._placeholderRegistry.getStartTagPlaceholderName(el.name, attrs, isVoid);\n this._placeholderToContent[startPhName] = ((el.sourceSpan)).toString();\n var /** @type {?} */ closePhName = '';\n if (!isVoid) {\n closePhName = this._placeholderRegistry.getCloseTagPlaceholderName(el.name);\n this._placeholderToContent[closePhName] = \"\";\n }\n return new TagPlaceholder(el.name, attrs, startPhName, closePhName, children, isVoid, /** @type {?} */ ((el.sourceSpan)));\n };\n /**\n * @param {?} attribute\n * @param {?} context\n * @return {?}\n */\n _I18nVisitor.prototype.visitAttribute = function (attribute, context) {\n return this._visitTextWithInterpolation(attribute.value, attribute.sourceSpan);\n };\n /**\n * @param {?} text\n * @param {?} context\n * @return {?}\n */\n _I18nVisitor.prototype.visitText = function (text, context) {\n return this._visitTextWithInterpolation(text.value, /** @type {?} */ ((text.sourceSpan)));\n };\n /**\n * @param {?} comment\n * @param {?} context\n * @return {?}\n */\n _I18nVisitor.prototype.visitComment = function (comment, context) { return null; };\n /**\n * @param {?} icu\n * @param {?} context\n * @return {?}\n */\n _I18nVisitor.prototype.visitExpansion = function (icu, context) {\n var _this = this;\n this._icuDepth++;\n var /** @type {?} */ i18nIcuCases = {};\n var /** @type {?} */ i18nIcu = new Icu(icu.switchValue, icu.type, i18nIcuCases, icu.sourceSpan);\n icu.cases.forEach(function (caze) {\n i18nIcuCases[caze.value] = new Container(caze.expression.map(function (node) { return node.visit(_this, {}); }), caze.expSourceSpan);\n });\n this._icuDepth--;\n if (this._isIcu || this._icuDepth > 0) {\n // Returns an ICU node when:\n // - the message (vs a part of the message) is an ICU message, or\n // - the ICU message is nested.\n var /** @type {?} */ expPh = this._placeholderRegistry.getUniquePlaceholder(\"VAR_\" + icu.type);\n i18nIcu.expressionPlaceholder = expPh;\n this._placeholderToContent[expPh] = icu.switchValue;\n return i18nIcu;\n }\n // Else returns a placeholder\n // ICU placeholders should not be replaced with their original content but with the their\n // translations. We need to create a new visitor (they are not re-entrant) to compute the\n // message id.\n // TODO(vicb): add a html.Node -> i18n.Message cache to avoid having to re-create the msg\n var /** @type {?} */ phName = this._placeholderRegistry.getPlaceholderName('ICU', icu.sourceSpan.toString());\n var /** @type {?} */ visitor = new _I18nVisitor(this._expressionParser, this._interpolationConfig);\n this._placeholderToMessage[phName] = visitor.toI18nMessage([icu], '', '', '');\n return new IcuPlaceholder(i18nIcu, phName, icu.sourceSpan);\n };\n /**\n * @param {?} icuCase\n * @param {?} context\n * @return {?}\n */\n _I18nVisitor.prototype.visitExpansionCase = function (icuCase, context) {\n throw new Error('Unreachable code');\n };\n /**\n * @param {?} text\n * @param {?} sourceSpan\n * @return {?}\n */\n _I18nVisitor.prototype._visitTextWithInterpolation = function (text, sourceSpan) {\n var /** @type {?} */ splitInterpolation = this._expressionParser.splitInterpolation(text, sourceSpan.start.toString(), this._interpolationConfig);\n if (!splitInterpolation) {\n // No expression, return a single text\n return new Text$1(text, sourceSpan);\n }\n // Return a group of text + expressions\n var /** @type {?} */ nodes = [];\n var /** @type {?} */ container = new Container(nodes, sourceSpan);\n var _a = this._interpolationConfig, sDelimiter = _a.start, eDelimiter = _a.end;\n for (var /** @type {?} */ i = 0; i < splitInterpolation.strings.length - 1; i++) {\n var /** @type {?} */ expression = splitInterpolation.expressions[i];\n var /** @type {?} */ baseName = _extractPlaceholderName(expression) || 'INTERPOLATION';\n var /** @type {?} */ phName = this._placeholderRegistry.getPlaceholderName(baseName, expression);\n if (splitInterpolation.strings[i].length) {\n // No need to add empty strings\n nodes.push(new Text$1(splitInterpolation.strings[i], sourceSpan));\n }\n nodes.push(new Placeholder(expression, phName, sourceSpan));\n this._placeholderToContent[phName] = sDelimiter + expression + eDelimiter;\n }\n // The last index contains no expression\n var /** @type {?} */ lastStringIdx = splitInterpolation.strings.length - 1;\n if (splitInterpolation.strings[lastStringIdx].length) {\n nodes.push(new Text$1(splitInterpolation.strings[lastStringIdx], sourceSpan));\n }\n return container;\n };\n return _I18nVisitor;\n}());\nvar _CUSTOM_PH_EXP = /\\/\\/[\\s\\S]*i18n[\\s\\S]*\\([\\s\\S]*ph[\\s\\S]*=[\\s\\S]*(\"|')([\\s\\S]*?)\\1[\\s\\S]*\\)/g;\n/**\n * @param {?} input\n * @return {?}\n */\nfunction _extractPlaceholderName(input) {\n return input.split(_CUSTOM_PH_EXP)[2];\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * An i18n error.\n */\nvar I18nError = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](I18nError, _super);\n /**\n * @param {?} span\n * @param {?} msg\n */\n function I18nError(span, msg) {\n return _super.call(this, span, msg) || this;\n }\n return I18nError;\n}(ParseError));\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar _I18N_ATTR = 'i18n';\nvar _I18N_ATTR_PREFIX = 'i18n-';\nvar _I18N_COMMENT_PREFIX_REGEXP = /^i18n:?/;\nvar MEANING_SEPARATOR = '|';\nvar ID_SEPARATOR = '@@';\n/**\n * Extract translatable messages from an html AST\n * @param {?} nodes\n * @param {?} interpolationConfig\n * @param {?} implicitTags\n * @param {?} implicitAttrs\n * @return {?}\n */\nfunction extractMessages(nodes, interpolationConfig, implicitTags, implicitAttrs) {\n var /** @type {?} */ visitor = new _Visitor(implicitTags, implicitAttrs);\n return visitor.extract(nodes, interpolationConfig);\n}\n/**\n * @param {?} nodes\n * @param {?} translations\n * @param {?} interpolationConfig\n * @param {?} implicitTags\n * @param {?} implicitAttrs\n * @return {?}\n */\nfunction mergeTranslations(nodes, translations, interpolationConfig, implicitTags, implicitAttrs) {\n var /** @type {?} */ visitor = new _Visitor(implicitTags, implicitAttrs);\n return visitor.merge(nodes, translations, interpolationConfig);\n}\nvar ExtractionResult = (function () {\n /**\n * @param {?} messages\n * @param {?} errors\n */\n function ExtractionResult(messages, errors) {\n this.messages = messages;\n this.errors = errors;\n }\n return ExtractionResult;\n}());\nvar _VisitorMode = {};\n_VisitorMode.Extract = 0;\n_VisitorMode.Merge = 1;\n_VisitorMode[_VisitorMode.Extract] = \"Extract\";\n_VisitorMode[_VisitorMode.Merge] = \"Merge\";\n/**\n * This Visitor is used:\n * 1. to extract all the translatable strings from an html AST (see `extract()`),\n * 2. to replace the translatable strings with the actual translations (see `merge()`)\n *\n * \\@internal\n */\nvar _Visitor = (function () {\n /**\n * @param {?} _implicitTags\n * @param {?} _implicitAttrs\n */\n function _Visitor(_implicitTags, _implicitAttrs) {\n this._implicitTags = _implicitTags;\n this._implicitAttrs = _implicitAttrs;\n }\n /**\n * Extracts the messages from the tree\n * @param {?} nodes\n * @param {?} interpolationConfig\n * @return {?}\n */\n _Visitor.prototype.extract = function (nodes, interpolationConfig) {\n var _this = this;\n this._init(_VisitorMode.Extract, interpolationConfig);\n nodes.forEach(function (node) { return node.visit(_this, null); });\n if (this._inI18nBlock) {\n this._reportError(nodes[nodes.length - 1], 'Unclosed block');\n }\n return new ExtractionResult(this._messages, this._errors);\n };\n /**\n * Returns a tree where all translatable nodes are translated\n * @param {?} nodes\n * @param {?} translations\n * @param {?} interpolationConfig\n * @return {?}\n */\n _Visitor.prototype.merge = function (nodes, translations, interpolationConfig) {\n this._init(_VisitorMode.Merge, interpolationConfig);\n this._translations = translations;\n // Construct a single fake root element\n var /** @type {?} */ wrapper = new Element('wrapper', [], nodes, /** @type {?} */ ((undefined)), undefined, undefined);\n var /** @type {?} */ translatedNode = wrapper.visit(this, null);\n if (this._inI18nBlock) {\n this._reportError(nodes[nodes.length - 1], 'Unclosed block');\n }\n return new ParseTreeResult(translatedNode.children, this._errors);\n };\n /**\n * @param {?} icuCase\n * @param {?} context\n * @return {?}\n */\n _Visitor.prototype.visitExpansionCase = function (icuCase, context) {\n // Parse cases for translatable html attributes\n var /** @type {?} */ expression = visitAll(this, icuCase.expression, context);\n if (this._mode === _VisitorMode.Merge) {\n return new ExpansionCase(icuCase.value, expression, icuCase.sourceSpan, icuCase.valueSourceSpan, icuCase.expSourceSpan);\n }\n };\n /**\n * @param {?} icu\n * @param {?} context\n * @return {?}\n */\n _Visitor.prototype.visitExpansion = function (icu, context) {\n this._mayBeAddBlockChildren(icu);\n var /** @type {?} */ wasInIcu = this._inIcu;\n if (!this._inIcu) {\n // nested ICU messages should not be extracted but top-level translated as a whole\n if (this._isInTranslatableSection) {\n this._addMessage([icu]);\n }\n this._inIcu = true;\n }\n var /** @type {?} */ cases = visitAll(this, icu.cases, context);\n if (this._mode === _VisitorMode.Merge) {\n icu = new Expansion(icu.switchValue, icu.type, cases, icu.sourceSpan, icu.switchValueSourceSpan);\n }\n this._inIcu = wasInIcu;\n return icu;\n };\n /**\n * @param {?} comment\n * @param {?} context\n * @return {?}\n */\n _Visitor.prototype.visitComment = function (comment, context) {\n var /** @type {?} */ isOpening = _isOpeningComment(comment);\n if (isOpening && this._isInTranslatableSection) {\n this._reportError(comment, 'Could not start a block inside a translatable section');\n return;\n }\n var /** @type {?} */ isClosing = _isClosingComment(comment);\n if (isClosing && !this._inI18nBlock) {\n this._reportError(comment, 'Trying to close an unopened block');\n return;\n }\n if (!this._inI18nNode && !this._inIcu) {\n if (!this._inI18nBlock) {\n if (isOpening) {\n this._inI18nBlock = true;\n this._blockStartDepth = this._depth;\n this._blockChildren = [];\n this._blockMeaningAndDesc = ((comment.value)).replace(_I18N_COMMENT_PREFIX_REGEXP, '').trim();\n this._openTranslatableSection(comment);\n }\n }\n else {\n if (isClosing) {\n if (this._depth == this._blockStartDepth) {\n this._closeTranslatableSection(comment, this._blockChildren);\n this._inI18nBlock = false;\n var /** @type {?} */ message = ((this._addMessage(this._blockChildren, this._blockMeaningAndDesc)));\n // merge attributes in sections\n var /** @type {?} */ nodes = this._translateMessage(comment, message);\n return visitAll(this, nodes);\n }\n else {\n this._reportError(comment, 'I18N blocks should not cross element boundaries');\n return;\n }\n }\n }\n }\n };\n /**\n * @param {?} text\n * @param {?} context\n * @return {?}\n */\n _Visitor.prototype.visitText = function (text, context) {\n if (this._isInTranslatableSection) {\n this._mayBeAddBlockChildren(text);\n }\n return text;\n };\n /**\n * @param {?} el\n * @param {?} context\n * @return {?}\n */\n _Visitor.prototype.visitElement = function (el, context) {\n var _this = this;\n this._mayBeAddBlockChildren(el);\n this._depth++;\n var /** @type {?} */ wasInI18nNode = this._inI18nNode;\n var /** @type {?} */ wasInImplicitNode = this._inImplicitNode;\n var /** @type {?} */ childNodes = [];\n var /** @type {?} */ translatedChildNodes = ((undefined));\n // Extract:\n // - top level nodes with the (implicit) \"i18n\" attribute if not already in a section\n // - ICU messages\n var /** @type {?} */ i18nAttr = _getI18nAttr(el);\n var /** @type {?} */ i18nMeta = i18nAttr ? i18nAttr.value : '';\n var /** @type {?} */ isImplicit = this._implicitTags.some(function (tag) { return el.name === tag; }) && !this._inIcu &&\n !this._isInTranslatableSection;\n var /** @type {?} */ isTopLevelImplicit = !wasInImplicitNode && isImplicit;\n this._inImplicitNode = wasInImplicitNode || isImplicit;\n if (!this._isInTranslatableSection && !this._inIcu) {\n if (i18nAttr || isTopLevelImplicit) {\n this._inI18nNode = true;\n var /** @type {?} */ message = ((this._addMessage(el.children, i18nMeta)));\n translatedChildNodes = this._translateMessage(el, message);\n }\n if (this._mode == _VisitorMode.Extract) {\n var /** @type {?} */ isTranslatable = i18nAttr || isTopLevelImplicit;\n if (isTranslatable)\n this._openTranslatableSection(el);\n visitAll(this, el.children);\n if (isTranslatable)\n this._closeTranslatableSection(el, el.children);\n }\n }\n else {\n if (i18nAttr || isTopLevelImplicit) {\n this._reportError(el, 'Could not mark an element as translatable inside a translatable section');\n }\n if (this._mode == _VisitorMode.Extract) {\n // Descend into child nodes for extraction\n visitAll(this, el.children);\n }\n }\n if (this._mode === _VisitorMode.Merge) {\n var /** @type {?} */ visitNodes = translatedChildNodes || el.children;\n visitNodes.forEach(function (child) {\n var /** @type {?} */ visited = child.visit(_this, context);\n if (visited && !_this._isInTranslatableSection) {\n // Do not add the children from translatable sections (= i18n blocks here)\n // They will be added later in this loop when the block closes (i.e. on ``)\n childNodes = childNodes.concat(visited);\n }\n });\n }\n this._visitAttributesOf(el);\n this._depth--;\n this._inI18nNode = wasInI18nNode;\n this._inImplicitNode = wasInImplicitNode;\n if (this._mode === _VisitorMode.Merge) {\n var /** @type {?} */ translatedAttrs = this._translateAttributes(el);\n return new Element(el.name, translatedAttrs, childNodes, el.sourceSpan, el.startSourceSpan, el.endSourceSpan);\n }\n return null;\n };\n /**\n * @param {?} attribute\n * @param {?} context\n * @return {?}\n */\n _Visitor.prototype.visitAttribute = function (attribute, context) {\n throw new Error('unreachable code');\n };\n /**\n * @param {?} mode\n * @param {?} interpolationConfig\n * @return {?}\n */\n _Visitor.prototype._init = function (mode, interpolationConfig) {\n this._mode = mode;\n this._inI18nBlock = false;\n this._inI18nNode = false;\n this._depth = 0;\n this._inIcu = false;\n this._msgCountAtSectionStart = undefined;\n this._errors = [];\n this._messages = [];\n this._inImplicitNode = false;\n this._createI18nMessage = createI18nMessageFactory(interpolationConfig);\n };\n /**\n * @param {?} el\n * @return {?}\n */\n _Visitor.prototype._visitAttributesOf = function (el) {\n var _this = this;\n var /** @type {?} */ explicitAttrNameToValue = {};\n var /** @type {?} */ implicitAttrNames = this._implicitAttrs[el.name] || [];\n el.attrs.filter(function (attr) { return attr.name.startsWith(_I18N_ATTR_PREFIX); })\n .forEach(function (attr) { return explicitAttrNameToValue[attr.name.slice(_I18N_ATTR_PREFIX.length)] =\n attr.value; });\n el.attrs.forEach(function (attr) {\n if (attr.name in explicitAttrNameToValue) {\n _this._addMessage([attr], explicitAttrNameToValue[attr.name]);\n }\n else if (implicitAttrNames.some(function (name) { return attr.name === name; })) {\n _this._addMessage([attr]);\n }\n });\n };\n /**\n * @param {?} ast\n * @param {?=} msgMeta\n * @return {?}\n */\n _Visitor.prototype._addMessage = function (ast, msgMeta) {\n if (ast.length == 0 ||\n ast.length == 1 && ast[0] instanceof Attribute$1 && !((ast[0])).value) {\n // Do not create empty messages\n return null;\n }\n var _a = _parseMessageMeta(msgMeta), meaning = _a.meaning, description = _a.description, id = _a.id;\n var /** @type {?} */ message = this._createI18nMessage(ast, meaning, description, id);\n this._messages.push(message);\n return message;\n };\n /**\n * @param {?} el\n * @param {?} message\n * @return {?}\n */\n _Visitor.prototype._translateMessage = function (el, message) {\n if (message && this._mode === _VisitorMode.Merge) {\n var /** @type {?} */ nodes = this._translations.get(message);\n if (nodes) {\n return nodes;\n }\n this._reportError(el, \"Translation unavailable for message id=\\\"\" + this._translations.digest(message) + \"\\\"\");\n }\n return [];\n };\n /**\n * @param {?} el\n * @return {?}\n */\n _Visitor.prototype._translateAttributes = function (el) {\n var _this = this;\n var /** @type {?} */ attributes = el.attrs;\n var /** @type {?} */ i18nParsedMessageMeta = {};\n attributes.forEach(function (attr) {\n if (attr.name.startsWith(_I18N_ATTR_PREFIX)) {\n i18nParsedMessageMeta[attr.name.slice(_I18N_ATTR_PREFIX.length)] =\n _parseMessageMeta(attr.value);\n }\n });\n var /** @type {?} */ translatedAttributes = [];\n attributes.forEach(function (attr) {\n if (attr.name === _I18N_ATTR || attr.name.startsWith(_I18N_ATTR_PREFIX)) {\n // strip i18n specific attributes\n return;\n }\n if (attr.value && attr.value != '' && i18nParsedMessageMeta.hasOwnProperty(attr.name)) {\n var _a = i18nParsedMessageMeta[attr.name], meaning = _a.meaning, description = _a.description, id = _a.id;\n var /** @type {?} */ message = _this._createI18nMessage([attr], meaning, description, id);\n var /** @type {?} */ nodes = _this._translations.get(message);\n if (nodes) {\n if (nodes.length == 0) {\n translatedAttributes.push(new Attribute$1(attr.name, '', attr.sourceSpan));\n }\n else if (nodes[0] instanceof Text) {\n var /** @type {?} */ value = ((nodes[0])).value;\n translatedAttributes.push(new Attribute$1(attr.name, value, attr.sourceSpan));\n }\n else {\n _this._reportError(el, \"Unexpected translation for attribute \\\"\" + attr.name + \"\\\" (id=\\\"\" + (id || _this._translations.digest(message)) + \"\\\")\");\n }\n }\n else {\n _this._reportError(el, \"Translation unavailable for attribute \\\"\" + attr.name + \"\\\" (id=\\\"\" + (id || _this._translations.digest(message)) + \"\\\")\");\n }\n }\n else {\n translatedAttributes.push(attr);\n }\n });\n return translatedAttributes;\n };\n /**\n * Add the node as a child of the block when:\n * - we are in a block,\n * - we are not inside a ICU message (those are handled separately),\n * - the node is a \"direct child\" of the block\n * @param {?} node\n * @return {?}\n */\n _Visitor.prototype._mayBeAddBlockChildren = function (node) {\n if (this._inI18nBlock && !this._inIcu && this._depth == this._blockStartDepth) {\n this._blockChildren.push(node);\n }\n };\n /**\n * Marks the start of a section, see `_closeTranslatableSection`\n * @param {?} node\n * @return {?}\n */\n _Visitor.prototype._openTranslatableSection = function (node) {\n if (this._isInTranslatableSection) {\n this._reportError(node, 'Unexpected section start');\n }\n else {\n this._msgCountAtSectionStart = this._messages.length;\n }\n };\n Object.defineProperty(_Visitor.prototype, \"_isInTranslatableSection\", {\n /**\n * A translatable section could be:\n * - the content of translatable element,\n * - nodes between `` and `` comments\n * @return {?}\n */\n get: function () {\n return this._msgCountAtSectionStart !== void 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Terminates a section.\n *\n * If a section has only one significant children (comments not significant) then we should not\n * keep the message from this children:\n *\n * `

    {ICU message}

    ` would produce two messages:\n * - one for the

    content with meaning and description,\n * - another one for the ICU message.\n *\n * In this case the last message is discarded as it contains less information (the AST is\n * otherwise identical).\n *\n * Note that we should still keep messages extracted from attributes inside the section (ie in the\n * ICU message here)\n * @param {?} node\n * @param {?} directChildren\n * @return {?}\n */\n _Visitor.prototype._closeTranslatableSection = function (node, directChildren) {\n if (!this._isInTranslatableSection) {\n this._reportError(node, 'Unexpected section end');\n return;\n }\n var /** @type {?} */ startIndex = this._msgCountAtSectionStart;\n var /** @type {?} */ significantChildren = directChildren.reduce(function (count, node) { return count + (node instanceof Comment ? 0 : 1); }, 0);\n if (significantChildren == 1) {\n for (var /** @type {?} */ i = this._messages.length - 1; i >= ((startIndex)); i--) {\n var /** @type {?} */ ast = this._messages[i].nodes;\n if (!(ast.length == 1 && ast[0] instanceof Text$1)) {\n this._messages.splice(i, 1);\n break;\n }\n }\n }\n this._msgCountAtSectionStart = undefined;\n };\n /**\n * @param {?} node\n * @param {?} msg\n * @return {?}\n */\n _Visitor.prototype._reportError = function (node, msg) {\n this._errors.push(new I18nError(/** @type {?} */ ((node.sourceSpan)), msg));\n };\n return _Visitor;\n}());\n/**\n * @param {?} n\n * @return {?}\n */\nfunction _isOpeningComment(n) {\n return !!(n instanceof Comment && n.value && n.value.startsWith('i18n'));\n}\n/**\n * @param {?} n\n * @return {?}\n */\nfunction _isClosingComment(n) {\n return !!(n instanceof Comment && n.value && n.value === '/i18n');\n}\n/**\n * @param {?} p\n * @return {?}\n */\nfunction _getI18nAttr(p) {\n return p.attrs.find(function (attr) { return attr.name === _I18N_ATTR; }) || null;\n}\n/**\n * @param {?=} i18n\n * @return {?}\n */\nfunction _parseMessageMeta(i18n) {\n if (!i18n)\n return { meaning: '', description: '', id: '' };\n var /** @type {?} */ idIndex = i18n.indexOf(ID_SEPARATOR);\n var /** @type {?} */ descIndex = i18n.indexOf(MEANING_SEPARATOR);\n var _a = (idIndex > -1) ? [i18n.slice(0, idIndex), i18n.slice(idIndex + 2)] : [i18n, ''], meaningAndDesc = _a[0], id = _a[1];\n var _b = (descIndex > -1) ?\n [meaningAndDesc.slice(0, descIndex), meaningAndDesc.slice(descIndex + 1)] :\n ['', meaningAndDesc], meaning = _b[0], description = _b[1];\n return { meaning: meaning, description: description, id: id };\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar XmlTagDefinition = (function () {\n function XmlTagDefinition() {\n this.closedByParent = false;\n this.contentType = TagContentType.PARSABLE_DATA;\n this.isVoid = false;\n this.ignoreFirstLf = false;\n this.canSelfClose = true;\n }\n /**\n * @param {?} currentParent\n * @return {?}\n */\n XmlTagDefinition.prototype.requireExtraParent = function (currentParent) { return false; };\n /**\n * @param {?} name\n * @return {?}\n */\n XmlTagDefinition.prototype.isClosedByChild = function (name) { return false; };\n return XmlTagDefinition;\n}());\nvar _TAG_DEFINITION = new XmlTagDefinition();\n/**\n * @param {?} tagName\n * @return {?}\n */\nfunction getXmlTagDefinition(tagName) {\n return _TAG_DEFINITION;\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar XmlParser = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](XmlParser, _super);\n function XmlParser() {\n return _super.call(this, getXmlTagDefinition) || this;\n }\n /**\n * @param {?} source\n * @param {?} url\n * @param {?=} parseExpansionForms\n * @return {?}\n */\n XmlParser.prototype.parse = function (source, url, parseExpansionForms) {\n if (parseExpansionForms === void 0) { parseExpansionForms = false; }\n return _super.prototype.parse.call(this, source, url, parseExpansionForms);\n };\n return XmlParser;\n}(Parser$1));\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @abstract\n */\nvar Serializer = (function () {\n function Serializer() {\n }\n /**\n * @abstract\n * @param {?} messages\n * @param {?} locale\n * @return {?}\n */\n Serializer.prototype.write = function (messages, locale) { };\n /**\n * @abstract\n * @param {?} content\n * @param {?} url\n * @return {?}\n */\n Serializer.prototype.load = function (content, url) { };\n /**\n * @abstract\n * @param {?} message\n * @return {?}\n */\n Serializer.prototype.digest = function (message) { };\n /**\n * @param {?} message\n * @return {?}\n */\n Serializer.prototype.createNameMapper = function (message) { return null; };\n return Serializer;\n}());\n/**\n * A simple mapper that take a function to transform an internal name to a public name\n */\nvar SimplePlaceholderMapper = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](SimplePlaceholderMapper, _super);\n /**\n * @param {?} message\n * @param {?} mapName\n */\n function SimplePlaceholderMapper(message, mapName) {\n var _this = _super.call(this) || this;\n _this.mapName = mapName;\n _this.internalToPublic = {};\n _this.publicToNextId = {};\n _this.publicToInternal = {};\n message.nodes.forEach(function (node) { return node.visit(_this); });\n return _this;\n }\n /**\n * @param {?} internalName\n * @return {?}\n */\n SimplePlaceholderMapper.prototype.toPublicName = function (internalName) {\n return this.internalToPublic.hasOwnProperty(internalName) ?\n this.internalToPublic[internalName] :\n null;\n };\n /**\n * @param {?} publicName\n * @return {?}\n */\n SimplePlaceholderMapper.prototype.toInternalName = function (publicName) {\n return this.publicToInternal.hasOwnProperty(publicName) ? this.publicToInternal[publicName] :\n null;\n };\n /**\n * @param {?} text\n * @param {?=} context\n * @return {?}\n */\n SimplePlaceholderMapper.prototype.visitText = function (text, context) { return null; };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n SimplePlaceholderMapper.prototype.visitTagPlaceholder = function (ph, context) {\n this.visitPlaceholderName(ph.startName);\n _super.prototype.visitTagPlaceholder.call(this, ph, context);\n this.visitPlaceholderName(ph.closeName);\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n SimplePlaceholderMapper.prototype.visitPlaceholder = function (ph, context) { this.visitPlaceholderName(ph.name); };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n SimplePlaceholderMapper.prototype.visitIcuPlaceholder = function (ph, context) {\n this.visitPlaceholderName(ph.name);\n };\n /**\n * @param {?} internalName\n * @return {?}\n */\n SimplePlaceholderMapper.prototype.visitPlaceholderName = function (internalName) {\n if (!internalName || this.internalToPublic.hasOwnProperty(internalName)) {\n return;\n }\n var /** @type {?} */ publicName = this.mapName(internalName);\n if (this.publicToInternal.hasOwnProperty(publicName)) {\n // Create a new XMB when it has already been used\n var /** @type {?} */ nextId = this.publicToNextId[publicName];\n this.publicToNextId[publicName] = nextId + 1;\n publicName = publicName + \"_\" + nextId;\n }\n else {\n this.publicToNextId[publicName] = 1;\n }\n this.internalToPublic[internalName] = publicName;\n this.publicToInternal[publicName] = internalName;\n };\n return SimplePlaceholderMapper;\n}(RecurseVisitor));\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar _Visitor$1 = (function () {\n function _Visitor$1() {\n }\n /**\n * @param {?} tag\n * @return {?}\n */\n _Visitor$1.prototype.visitTag = function (tag) {\n var _this = this;\n var /** @type {?} */ strAttrs = this._serializeAttributes(tag.attrs);\n if (tag.children.length == 0) {\n return \"<\" + tag.name + strAttrs + \"/>\";\n }\n var /** @type {?} */ strChildren = tag.children.map(function (node) { return node.visit(_this); });\n return \"<\" + tag.name + strAttrs + \">\" + strChildren.join('') + \"\";\n };\n /**\n * @param {?} text\n * @return {?}\n */\n _Visitor$1.prototype.visitText = function (text) { return text.value; };\n /**\n * @param {?} decl\n * @return {?}\n */\n _Visitor$1.prototype.visitDeclaration = function (decl) {\n return \"\";\n };\n /**\n * @param {?} attrs\n * @return {?}\n */\n _Visitor$1.prototype._serializeAttributes = function (attrs) {\n var /** @type {?} */ strAttrs = Object.keys(attrs).map(function (name) { return name + \"=\\\"\" + attrs[name] + \"\\\"\"; }).join(' ');\n return strAttrs.length > 0 ? ' ' + strAttrs : '';\n };\n /**\n * @param {?} doctype\n * @return {?}\n */\n _Visitor$1.prototype.visitDoctype = function (doctype) {\n return \"\";\n };\n return _Visitor$1;\n}());\nvar _visitor = new _Visitor$1();\n/**\n * @param {?} nodes\n * @return {?}\n */\nfunction serialize(nodes) {\n return nodes.map(function (node) { return node.visit(_visitor); }).join('');\n}\nvar Declaration = (function () {\n /**\n * @param {?} unescapedAttrs\n */\n function Declaration(unescapedAttrs) {\n var _this = this;\n this.attrs = {};\n Object.keys(unescapedAttrs).forEach(function (k) {\n _this.attrs[k] = _escapeXml(unescapedAttrs[k]);\n });\n }\n /**\n * @param {?} visitor\n * @return {?}\n */\n Declaration.prototype.visit = function (visitor) { return visitor.visitDeclaration(this); };\n return Declaration;\n}());\nvar Doctype = (function () {\n /**\n * @param {?} rootTag\n * @param {?} dtd\n */\n function Doctype(rootTag, dtd) {\n this.rootTag = rootTag;\n this.dtd = dtd;\n }\n ;\n /**\n * @param {?} visitor\n * @return {?}\n */\n Doctype.prototype.visit = function (visitor) { return visitor.visitDoctype(this); };\n return Doctype;\n}());\nvar Tag = (function () {\n /**\n * @param {?} name\n * @param {?=} unescapedAttrs\n * @param {?=} children\n */\n function Tag(name, unescapedAttrs, children) {\n if (unescapedAttrs === void 0) { unescapedAttrs = {}; }\n if (children === void 0) { children = []; }\n var _this = this;\n this.name = name;\n this.children = children;\n this.attrs = {};\n Object.keys(unescapedAttrs).forEach(function (k) {\n _this.attrs[k] = _escapeXml(unescapedAttrs[k]);\n });\n }\n /**\n * @param {?} visitor\n * @return {?}\n */\n Tag.prototype.visit = function (visitor) { return visitor.visitTag(this); };\n return Tag;\n}());\nvar Text$2 = (function () {\n /**\n * @param {?} unescapedValue\n */\n function Text$2(unescapedValue) {\n this.value = _escapeXml(unescapedValue);\n }\n ;\n /**\n * @param {?} visitor\n * @return {?}\n */\n Text$2.prototype.visit = function (visitor) { return visitor.visitText(this); };\n return Text$2;\n}());\nvar CR = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](CR, _super);\n /**\n * @param {?=} ws\n */\n function CR(ws) {\n if (ws === void 0) { ws = 0; }\n return _super.call(this, \"\\n\" + new Array(ws + 1).join(' ')) || this;\n }\n return CR;\n}(Text$2));\nvar _ESCAPED_CHARS = [\n [/&/g, '&'],\n [/\"/g, '"'],\n [/'/g, '''],\n [//g, '>'],\n];\n/**\n * @param {?} text\n * @return {?}\n */\nfunction _escapeXml(text) {\n return _ESCAPED_CHARS.reduce(function (text, entry) { return text.replace(entry[0], entry[1]); }, text);\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar _VERSION = '1.2';\nvar _XMLNS = 'urn:oasis:names:tc:xliff:document:1.2';\n// TODO(vicb): make this a param (s/_/-/)\nvar _DEFAULT_SOURCE_LANG = 'en';\nvar _PLACEHOLDER_TAG = 'x';\nvar _FILE_TAG = 'file';\nvar _SOURCE_TAG = 'source';\nvar _TARGET_TAG = 'target';\nvar _UNIT_TAG = 'trans-unit';\nvar _CONTEXT_GROUP_TAG = 'context-group';\nvar _CONTEXT_TAG = 'context';\nvar Xliff = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](Xliff, _super);\n function Xliff() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {?} messages\n * @param {?} locale\n * @return {?}\n */\n Xliff.prototype.write = function (messages, locale) {\n var /** @type {?} */ visitor = new _WriteVisitor();\n var /** @type {?} */ transUnits = [];\n messages.forEach(function (message) {\n var /** @type {?} */ contextTags = [];\n message.sources.forEach(function (source) {\n var /** @type {?} */ contextGroupTag = new Tag(_CONTEXT_GROUP_TAG, { purpose: 'location' });\n contextGroupTag.children.push(new CR(10), new Tag(_CONTEXT_TAG, { 'context-type': 'sourcefile' }, [new Text$2(source.filePath)]), new CR(10), new Tag(_CONTEXT_TAG, { 'context-type': 'linenumber' }, [new Text$2(\"\" + source.startLine)]), new CR(8));\n contextTags.push(new CR(8), contextGroupTag);\n });\n var /** @type {?} */ transUnit = new Tag(_UNIT_TAG, { id: message.id, datatype: 'html' });\n (_a = transUnit.children).push.apply(_a, [new CR(8), new Tag(_SOURCE_TAG, {}, visitor.serialize(message.nodes))].concat(contextTags));\n if (message.description) {\n transUnit.children.push(new CR(8), new Tag('note', { priority: '1', from: 'description' }, [new Text$2(message.description)]));\n }\n if (message.meaning) {\n transUnit.children.push(new CR(8), new Tag('note', { priority: '1', from: 'meaning' }, [new Text$2(message.meaning)]));\n }\n transUnit.children.push(new CR(6));\n transUnits.push(new CR(6), transUnit);\n var _a;\n });\n var /** @type {?} */ body = new Tag('body', {}, transUnits.concat([new CR(4)]));\n var /** @type {?} */ file = new Tag('file', {\n 'source-language': locale || _DEFAULT_SOURCE_LANG,\n datatype: 'plaintext',\n original: 'ng2.template',\n }, [new CR(4), body, new CR(2)]);\n var /** @type {?} */ xliff = new Tag('xliff', { version: _VERSION, xmlns: _XMLNS }, [new CR(2), file, new CR()]);\n return serialize([\n new Declaration({ version: '1.0', encoding: 'UTF-8' }), new CR(), xliff, new CR()\n ]);\n };\n /**\n * @param {?} content\n * @param {?} url\n * @return {?}\n */\n Xliff.prototype.load = function (content, url) {\n // xliff to xml nodes\n var /** @type {?} */ xliffParser = new XliffParser();\n var _a = xliffParser.parse(content, url), locale = _a.locale, msgIdToHtml = _a.msgIdToHtml, errors = _a.errors;\n // xml nodes to i18n nodes\n var /** @type {?} */ i18nNodesByMsgId = {};\n var /** @type {?} */ converter = new XmlToI18n();\n Object.keys(msgIdToHtml).forEach(function (msgId) {\n var _a = converter.convert(msgIdToHtml[msgId], url), i18nNodes = _a.i18nNodes, e = _a.errors;\n errors.push.apply(errors, e);\n i18nNodesByMsgId[msgId] = i18nNodes;\n });\n if (errors.length) {\n throw new Error(\"xliff parse errors:\\n\" + errors.join('\\n'));\n }\n return { locale: /** @type {?} */ ((locale)), i18nNodesByMsgId: i18nNodesByMsgId };\n };\n /**\n * @param {?} message\n * @return {?}\n */\n Xliff.prototype.digest = function (message) { return digest(message); };\n return Xliff;\n}(Serializer));\nvar _WriteVisitor = (function () {\n function _WriteVisitor() {\n }\n /**\n * @param {?} text\n * @param {?=} context\n * @return {?}\n */\n _WriteVisitor.prototype.visitText = function (text, context) { return [new Text$2(text.value)]; };\n /**\n * @param {?} container\n * @param {?=} context\n * @return {?}\n */\n _WriteVisitor.prototype.visitContainer = function (container, context) {\n var _this = this;\n var /** @type {?} */ nodes = [];\n container.children.forEach(function (node) { return nodes.push.apply(nodes, node.visit(_this)); });\n return nodes;\n };\n /**\n * @param {?} icu\n * @param {?=} context\n * @return {?}\n */\n _WriteVisitor.prototype.visitIcu = function (icu, context) {\n var _this = this;\n var /** @type {?} */ nodes = [new Text$2(\"{\" + icu.expressionPlaceholder + \", \" + icu.type + \", \")];\n Object.keys(icu.cases).forEach(function (c) {\n nodes.push.apply(nodes, [new Text$2(c + \" {\")].concat(icu.cases[c].visit(_this), [new Text$2(\"} \")]));\n });\n nodes.push(new Text$2(\"}\"));\n return nodes;\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n _WriteVisitor.prototype.visitTagPlaceholder = function (ph, context) {\n var /** @type {?} */ ctype = getCtypeForTag(ph.tag);\n var /** @type {?} */ startTagPh = new Tag(_PLACEHOLDER_TAG, { id: ph.startName, ctype: ctype });\n if (ph.isVoid) {\n // void tags have no children nor closing tags\n return [startTagPh];\n }\n var /** @type {?} */ closeTagPh = new Tag(_PLACEHOLDER_TAG, { id: ph.closeName, ctype: ctype });\n return [startTagPh].concat(this.serialize(ph.children), [closeTagPh]);\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n _WriteVisitor.prototype.visitPlaceholder = function (ph, context) {\n return [new Tag(_PLACEHOLDER_TAG, { id: ph.name })];\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n _WriteVisitor.prototype.visitIcuPlaceholder = function (ph, context) {\n return [new Tag(_PLACEHOLDER_TAG, { id: ph.name })];\n };\n /**\n * @param {?} nodes\n * @return {?}\n */\n _WriteVisitor.prototype.serialize = function (nodes) {\n var _this = this;\n return [].concat.apply([], nodes.map(function (node) { return node.visit(_this); }));\n };\n return _WriteVisitor;\n}());\nvar XliffParser = (function () {\n function XliffParser() {\n this._locale = null;\n }\n /**\n * @param {?} xliff\n * @param {?} url\n * @return {?}\n */\n XliffParser.prototype.parse = function (xliff, url) {\n this._unitMlString = null;\n this._msgIdToHtml = {};\n var /** @type {?} */ xml = new XmlParser().parse(xliff, url, false);\n this._errors = xml.errors;\n visitAll(this, xml.rootNodes, null);\n return {\n msgIdToHtml: this._msgIdToHtml,\n errors: this._errors,\n locale: this._locale,\n };\n };\n /**\n * @param {?} element\n * @param {?} context\n * @return {?}\n */\n XliffParser.prototype.visitElement = function (element, context) {\n switch (element.name) {\n case _UNIT_TAG:\n this._unitMlString = ((null));\n var /** @type {?} */ idAttr = element.attrs.find(function (attr) { return attr.name === 'id'; });\n if (!idAttr) {\n this._addError(element, \"<\" + _UNIT_TAG + \"> misses the \\\"id\\\" attribute\");\n }\n else {\n var /** @type {?} */ id = idAttr.value;\n if (this._msgIdToHtml.hasOwnProperty(id)) {\n this._addError(element, \"Duplicated translations for msg \" + id);\n }\n else {\n visitAll(this, element.children, null);\n if (typeof this._unitMlString === 'string') {\n this._msgIdToHtml[id] = this._unitMlString;\n }\n else {\n this._addError(element, \"Message \" + id + \" misses a translation\");\n }\n }\n }\n break;\n case _SOURCE_TAG:\n // ignore source message\n break;\n case _TARGET_TAG:\n var /** @type {?} */ innerTextStart = ((element.startSourceSpan)).end.offset;\n var /** @type {?} */ innerTextEnd = ((element.endSourceSpan)).start.offset;\n var /** @type {?} */ content = ((element.startSourceSpan)).start.file.content;\n var /** @type {?} */ innerText = content.slice(innerTextStart, innerTextEnd);\n this._unitMlString = innerText;\n break;\n case _FILE_TAG:\n var /** @type {?} */ localeAttr = element.attrs.find(function (attr) { return attr.name === 'target-language'; });\n if (localeAttr) {\n this._locale = localeAttr.value;\n }\n visitAll(this, element.children, null);\n break;\n default:\n // TODO(vicb): assert file structure, xliff version\n // For now only recurse on unhandled nodes\n visitAll(this, element.children, null);\n }\n };\n /**\n * @param {?} attribute\n * @param {?} context\n * @return {?}\n */\n XliffParser.prototype.visitAttribute = function (attribute, context) { };\n /**\n * @param {?} text\n * @param {?} context\n * @return {?}\n */\n XliffParser.prototype.visitText = function (text, context) { };\n /**\n * @param {?} comment\n * @param {?} context\n * @return {?}\n */\n XliffParser.prototype.visitComment = function (comment, context) { };\n /**\n * @param {?} expansion\n * @param {?} context\n * @return {?}\n */\n XliffParser.prototype.visitExpansion = function (expansion, context) { };\n /**\n * @param {?} expansionCase\n * @param {?} context\n * @return {?}\n */\n XliffParser.prototype.visitExpansionCase = function (expansionCase, context) { };\n /**\n * @param {?} node\n * @param {?} message\n * @return {?}\n */\n XliffParser.prototype._addError = function (node, message) {\n this._errors.push(new I18nError(/** @type {?} */ ((node.sourceSpan)), message));\n };\n return XliffParser;\n}());\nvar XmlToI18n = (function () {\n function XmlToI18n() {\n }\n /**\n * @param {?} message\n * @param {?} url\n * @return {?}\n */\n XmlToI18n.prototype.convert = function (message, url) {\n var /** @type {?} */ xmlIcu = new XmlParser().parse(message, url, true);\n this._errors = xmlIcu.errors;\n var /** @type {?} */ i18nNodes = this._errors.length > 0 || xmlIcu.rootNodes.length == 0 ?\n [] :\n visitAll(this, xmlIcu.rootNodes);\n return {\n i18nNodes: i18nNodes,\n errors: this._errors,\n };\n };\n /**\n * @param {?} text\n * @param {?} context\n * @return {?}\n */\n XmlToI18n.prototype.visitText = function (text, context) { return new Text$1(text.value, /** @type {?} */ ((text.sourceSpan))); };\n /**\n * @param {?} el\n * @param {?} context\n * @return {?}\n */\n XmlToI18n.prototype.visitElement = function (el, context) {\n if (el.name === _PLACEHOLDER_TAG) {\n var /** @type {?} */ nameAttr = el.attrs.find(function (attr) { return attr.name === 'id'; });\n if (nameAttr) {\n return new Placeholder('', nameAttr.value, /** @type {?} */ ((el.sourceSpan)));\n }\n this._addError(el, \"<\" + _PLACEHOLDER_TAG + \"> misses the \\\"id\\\" attribute\");\n }\n else {\n this._addError(el, \"Unexpected tag\");\n }\n return null;\n };\n /**\n * @param {?} icu\n * @param {?} context\n * @return {?}\n */\n XmlToI18n.prototype.visitExpansion = function (icu, context) {\n var /** @type {?} */ caseMap = {};\n visitAll(this, icu.cases).forEach(function (c) {\n caseMap[c.value] = new Container(c.nodes, icu.sourceSpan);\n });\n return new Icu(icu.switchValue, icu.type, caseMap, icu.sourceSpan);\n };\n /**\n * @param {?} icuCase\n * @param {?} context\n * @return {?}\n */\n XmlToI18n.prototype.visitExpansionCase = function (icuCase, context) {\n return {\n value: icuCase.value,\n nodes: visitAll(this, icuCase.expression),\n };\n };\n /**\n * @param {?} comment\n * @param {?} context\n * @return {?}\n */\n XmlToI18n.prototype.visitComment = function (comment, context) { };\n /**\n * @param {?} attribute\n * @param {?} context\n * @return {?}\n */\n XmlToI18n.prototype.visitAttribute = function (attribute, context) { };\n /**\n * @param {?} node\n * @param {?} message\n * @return {?}\n */\n XmlToI18n.prototype._addError = function (node, message) {\n this._errors.push(new I18nError(/** @type {?} */ ((node.sourceSpan)), message));\n };\n return XmlToI18n;\n}());\n/**\n * @param {?} tag\n * @return {?}\n */\nfunction getCtypeForTag(tag) {\n switch (tag.toLowerCase()) {\n case 'br':\n return 'lb';\n case 'img':\n return 'image';\n default:\n return \"x-\" + tag;\n }\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar _VERSION$1 = '2.0';\nvar _XMLNS$1 = 'urn:oasis:names:tc:xliff:document:2.0';\n// TODO(vicb): make this a param (s/_/-/)\nvar _DEFAULT_SOURCE_LANG$1 = 'en';\nvar _PLACEHOLDER_TAG$1 = 'ph';\nvar _PLACEHOLDER_SPANNING_TAG = 'pc';\nvar _XLIFF_TAG = 'xliff';\nvar _SOURCE_TAG$1 = 'source';\nvar _TARGET_TAG$1 = 'target';\nvar _UNIT_TAG$1 = 'unit';\nvar Xliff2 = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](Xliff2, _super);\n function Xliff2() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {?} messages\n * @param {?} locale\n * @return {?}\n */\n Xliff2.prototype.write = function (messages, locale) {\n var /** @type {?} */ visitor = new _WriteVisitor$1();\n var /** @type {?} */ units = [];\n messages.forEach(function (message) {\n var /** @type {?} */ unit = new Tag(_UNIT_TAG$1, { id: message.id });\n var /** @type {?} */ notes = new Tag('notes');\n if (message.description || message.meaning) {\n if (message.description) {\n notes.children.push(new CR(8), new Tag('note', { category: 'description' }, [new Text$2(message.description)]));\n }\n if (message.meaning) {\n notes.children.push(new CR(8), new Tag('note', { category: 'meaning' }, [new Text$2(message.meaning)]));\n }\n }\n message.sources.forEach(function (source) {\n notes.children.push(new CR(8), new Tag('note', { category: 'location' }, [\n new Text$2(source.filePath + \":\" + source.startLine + (source.endLine !== source.startLine ? ',' + source.endLine : ''))\n ]));\n });\n notes.children.push(new CR(6));\n unit.children.push(new CR(6), notes);\n var /** @type {?} */ segment = new Tag('segment');\n segment.children.push(new CR(8), new Tag(_SOURCE_TAG$1, {}, visitor.serialize(message.nodes)), new CR(6));\n unit.children.push(new CR(6), segment, new CR(4));\n units.push(new CR(4), unit);\n });\n var /** @type {?} */ file = new Tag('file', { 'original': 'ng.template', id: 'ngi18n' }, units.concat([new CR(2)]));\n var /** @type {?} */ xliff = new Tag(_XLIFF_TAG, { version: _VERSION$1, xmlns: _XMLNS$1, srcLang: locale || _DEFAULT_SOURCE_LANG$1 }, [new CR(2), file, new CR()]);\n return serialize([\n new Declaration({ version: '1.0', encoding: 'UTF-8' }), new CR(), xliff, new CR()\n ]);\n };\n /**\n * @param {?} content\n * @param {?} url\n * @return {?}\n */\n Xliff2.prototype.load = function (content, url) {\n // xliff to xml nodes\n var /** @type {?} */ xliff2Parser = new Xliff2Parser();\n var _a = xliff2Parser.parse(content, url), locale = _a.locale, msgIdToHtml = _a.msgIdToHtml, errors = _a.errors;\n // xml nodes to i18n nodes\n var /** @type {?} */ i18nNodesByMsgId = {};\n var /** @type {?} */ converter = new XmlToI18n$1();\n Object.keys(msgIdToHtml).forEach(function (msgId) {\n var _a = converter.convert(msgIdToHtml[msgId], url), i18nNodes = _a.i18nNodes, e = _a.errors;\n errors.push.apply(errors, e);\n i18nNodesByMsgId[msgId] = i18nNodes;\n });\n if (errors.length) {\n throw new Error(\"xliff2 parse errors:\\n\" + errors.join('\\n'));\n }\n return { locale: /** @type {?} */ ((locale)), i18nNodesByMsgId: i18nNodesByMsgId };\n };\n /**\n * @param {?} message\n * @return {?}\n */\n Xliff2.prototype.digest = function (message) { return decimalDigest(message); };\n return Xliff2;\n}(Serializer));\nvar _WriteVisitor$1 = (function () {\n function _WriteVisitor$1() {\n }\n /**\n * @param {?} text\n * @param {?=} context\n * @return {?}\n */\n _WriteVisitor$1.prototype.visitText = function (text, context) { return [new Text$2(text.value)]; };\n /**\n * @param {?} container\n * @param {?=} context\n * @return {?}\n */\n _WriteVisitor$1.prototype.visitContainer = function (container, context) {\n var _this = this;\n var /** @type {?} */ nodes = [];\n container.children.forEach(function (node) { return nodes.push.apply(nodes, node.visit(_this)); });\n return nodes;\n };\n /**\n * @param {?} icu\n * @param {?=} context\n * @return {?}\n */\n _WriteVisitor$1.prototype.visitIcu = function (icu, context) {\n var _this = this;\n var /** @type {?} */ nodes = [new Text$2(\"{\" + icu.expressionPlaceholder + \", \" + icu.type + \", \")];\n Object.keys(icu.cases).forEach(function (c) {\n nodes.push.apply(nodes, [new Text$2(c + \" {\")].concat(icu.cases[c].visit(_this), [new Text$2(\"} \")]));\n });\n nodes.push(new Text$2(\"}\"));\n return nodes;\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n _WriteVisitor$1.prototype.visitTagPlaceholder = function (ph, context) {\n var _this = this;\n var /** @type {?} */ type = getTypeForTag(ph.tag);\n if (ph.isVoid) {\n var /** @type {?} */ tagPh = new Tag(_PLACEHOLDER_TAG$1, {\n id: (this._nextPlaceholderId++).toString(),\n equiv: ph.startName,\n type: type,\n disp: \"<\" + ph.tag + \"/>\",\n });\n return [tagPh];\n }\n var /** @type {?} */ tagPc = new Tag(_PLACEHOLDER_SPANNING_TAG, {\n id: (this._nextPlaceholderId++).toString(),\n equivStart: ph.startName,\n equivEnd: ph.closeName,\n type: type,\n dispStart: \"<\" + ph.tag + \">\",\n dispEnd: \"\",\n });\n var /** @type {?} */ nodes = [].concat.apply([], ph.children.map(function (node) { return node.visit(_this); }));\n if (nodes.length) {\n nodes.forEach(function (node) { return tagPc.children.push(node); });\n }\n else {\n tagPc.children.push(new Text$2(''));\n }\n return [tagPc];\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n _WriteVisitor$1.prototype.visitPlaceholder = function (ph, context) {\n var /** @type {?} */ idStr = (this._nextPlaceholderId++).toString();\n return [new Tag(_PLACEHOLDER_TAG$1, {\n id: idStr,\n equiv: ph.name,\n disp: \"{{\" + ph.value + \"}}\",\n })];\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n _WriteVisitor$1.prototype.visitIcuPlaceholder = function (ph, context) {\n var /** @type {?} */ cases = Object.keys(ph.value.cases).map(function (value) { return value + ' {...}'; }).join(' ');\n var /** @type {?} */ idStr = (this._nextPlaceholderId++).toString();\n return [new Tag(_PLACEHOLDER_TAG$1, { id: idStr, equiv: ph.name, disp: \"{\" + ph.value.expression + \", \" + ph.value.type + \", \" + cases + \"}\" })];\n };\n /**\n * @param {?} nodes\n * @return {?}\n */\n _WriteVisitor$1.prototype.serialize = function (nodes) {\n var _this = this;\n this._nextPlaceholderId = 0;\n return [].concat.apply([], nodes.map(function (node) { return node.visit(_this); }));\n };\n return _WriteVisitor$1;\n}());\nvar Xliff2Parser = (function () {\n function Xliff2Parser() {\n this._locale = null;\n }\n /**\n * @param {?} xliff\n * @param {?} url\n * @return {?}\n */\n Xliff2Parser.prototype.parse = function (xliff, url) {\n this._unitMlString = null;\n this._msgIdToHtml = {};\n var /** @type {?} */ xml = new XmlParser().parse(xliff, url, false);\n this._errors = xml.errors;\n visitAll(this, xml.rootNodes, null);\n return {\n msgIdToHtml: this._msgIdToHtml,\n errors: this._errors,\n locale: this._locale,\n };\n };\n /**\n * @param {?} element\n * @param {?} context\n * @return {?}\n */\n Xliff2Parser.prototype.visitElement = function (element, context) {\n switch (element.name) {\n case _UNIT_TAG$1:\n this._unitMlString = null;\n var /** @type {?} */ idAttr = element.attrs.find(function (attr) { return attr.name === 'id'; });\n if (!idAttr) {\n this._addError(element, \"<\" + _UNIT_TAG$1 + \"> misses the \\\"id\\\" attribute\");\n }\n else {\n var /** @type {?} */ id = idAttr.value;\n if (this._msgIdToHtml.hasOwnProperty(id)) {\n this._addError(element, \"Duplicated translations for msg \" + id);\n }\n else {\n visitAll(this, element.children, null);\n if (typeof this._unitMlString === 'string') {\n this._msgIdToHtml[id] = this._unitMlString;\n }\n else {\n this._addError(element, \"Message \" + id + \" misses a translation\");\n }\n }\n }\n break;\n case _SOURCE_TAG$1:\n // ignore source message\n break;\n case _TARGET_TAG$1:\n var /** @type {?} */ innerTextStart = ((element.startSourceSpan)).end.offset;\n var /** @type {?} */ innerTextEnd = ((element.endSourceSpan)).start.offset;\n var /** @type {?} */ content = ((element.startSourceSpan)).start.file.content;\n var /** @type {?} */ innerText = content.slice(innerTextStart, innerTextEnd);\n this._unitMlString = innerText;\n break;\n case _XLIFF_TAG:\n var /** @type {?} */ localeAttr = element.attrs.find(function (attr) { return attr.name === 'trgLang'; });\n if (localeAttr) {\n this._locale = localeAttr.value;\n }\n var /** @type {?} */ versionAttr = element.attrs.find(function (attr) { return attr.name === 'version'; });\n if (versionAttr) {\n var /** @type {?} */ version = versionAttr.value;\n if (version !== '2.0') {\n this._addError(element, \"The XLIFF file version \" + version + \" is not compatible with XLIFF 2.0 serializer\");\n }\n else {\n visitAll(this, element.children, null);\n }\n }\n break;\n default:\n visitAll(this, element.children, null);\n }\n };\n /**\n * @param {?} attribute\n * @param {?} context\n * @return {?}\n */\n Xliff2Parser.prototype.visitAttribute = function (attribute, context) { };\n /**\n * @param {?} text\n * @param {?} context\n * @return {?}\n */\n Xliff2Parser.prototype.visitText = function (text, context) { };\n /**\n * @param {?} comment\n * @param {?} context\n * @return {?}\n */\n Xliff2Parser.prototype.visitComment = function (comment, context) { };\n /**\n * @param {?} expansion\n * @param {?} context\n * @return {?}\n */\n Xliff2Parser.prototype.visitExpansion = function (expansion, context) { };\n /**\n * @param {?} expansionCase\n * @param {?} context\n * @return {?}\n */\n Xliff2Parser.prototype.visitExpansionCase = function (expansionCase, context) { };\n /**\n * @param {?} node\n * @param {?} message\n * @return {?}\n */\n Xliff2Parser.prototype._addError = function (node, message) {\n this._errors.push(new I18nError(node.sourceSpan, message));\n };\n return Xliff2Parser;\n}());\nvar XmlToI18n$1 = (function () {\n function XmlToI18n$1() {\n }\n /**\n * @param {?} message\n * @param {?} url\n * @return {?}\n */\n XmlToI18n$1.prototype.convert = function (message, url) {\n var /** @type {?} */ xmlIcu = new XmlParser().parse(message, url, true);\n this._errors = xmlIcu.errors;\n var /** @type {?} */ i18nNodes = this._errors.length > 0 || xmlIcu.rootNodes.length == 0 ?\n [] : [].concat.apply([], visitAll(this, xmlIcu.rootNodes));\n return {\n i18nNodes: i18nNodes,\n errors: this._errors,\n };\n };\n /**\n * @param {?} text\n * @param {?} context\n * @return {?}\n */\n XmlToI18n$1.prototype.visitText = function (text, context) { return new Text$1(text.value, text.sourceSpan); };\n /**\n * @param {?} el\n * @param {?} context\n * @return {?}\n */\n XmlToI18n$1.prototype.visitElement = function (el, context) {\n var _this = this;\n switch (el.name) {\n case _PLACEHOLDER_TAG$1:\n var /** @type {?} */ nameAttr = el.attrs.find(function (attr) { return attr.name === 'equiv'; });\n if (nameAttr) {\n return [new Placeholder('', nameAttr.value, el.sourceSpan)];\n }\n this._addError(el, \"<\" + _PLACEHOLDER_TAG$1 + \"> misses the \\\"equiv\\\" attribute\");\n break;\n case _PLACEHOLDER_SPANNING_TAG:\n var /** @type {?} */ startAttr = el.attrs.find(function (attr) { return attr.name === 'equivStart'; });\n var /** @type {?} */ endAttr = el.attrs.find(function (attr) { return attr.name === 'equivEnd'; });\n if (!startAttr) {\n this._addError(el, \"<\" + _PLACEHOLDER_TAG$1 + \"> misses the \\\"equivStart\\\" attribute\");\n }\n else if (!endAttr) {\n this._addError(el, \"<\" + _PLACEHOLDER_TAG$1 + \"> misses the \\\"equivEnd\\\" attribute\");\n }\n else {\n var /** @type {?} */ startId = startAttr.value;\n var /** @type {?} */ endId = endAttr.value;\n var /** @type {?} */ nodes = [];\n return nodes.concat.apply(nodes, [new Placeholder('', startId, el.sourceSpan)].concat(el.children.map(function (node) { return node.visit(_this, null); }), [new Placeholder('', endId, el.sourceSpan)]));\n }\n break;\n default:\n this._addError(el, \"Unexpected tag\");\n }\n return null;\n };\n /**\n * @param {?} icu\n * @param {?} context\n * @return {?}\n */\n XmlToI18n$1.prototype.visitExpansion = function (icu, context) {\n var /** @type {?} */ caseMap = {};\n visitAll(this, icu.cases).forEach(function (c) {\n caseMap[c.value] = new Container(c.nodes, icu.sourceSpan);\n });\n return new Icu(icu.switchValue, icu.type, caseMap, icu.sourceSpan);\n };\n /**\n * @param {?} icuCase\n * @param {?} context\n * @return {?}\n */\n XmlToI18n$1.prototype.visitExpansionCase = function (icuCase, context) {\n return {\n value: icuCase.value,\n nodes: [].concat.apply([], visitAll(this, icuCase.expression)),\n };\n };\n /**\n * @param {?} comment\n * @param {?} context\n * @return {?}\n */\n XmlToI18n$1.prototype.visitComment = function (comment, context) { };\n /**\n * @param {?} attribute\n * @param {?} context\n * @return {?}\n */\n XmlToI18n$1.prototype.visitAttribute = function (attribute, context) { };\n /**\n * @param {?} node\n * @param {?} message\n * @return {?}\n */\n XmlToI18n$1.prototype._addError = function (node, message) {\n this._errors.push(new I18nError(node.sourceSpan, message));\n };\n return XmlToI18n$1;\n}());\n/**\n * @param {?} tag\n * @return {?}\n */\nfunction getTypeForTag(tag) {\n switch (tag.toLowerCase()) {\n case 'br':\n case 'b':\n case 'i':\n case 'u':\n return 'fmt';\n case 'img':\n return 'image';\n case 'a':\n return 'link';\n default:\n return 'other';\n }\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar _MESSAGES_TAG = 'messagebundle';\nvar _MESSAGE_TAG = 'msg';\nvar _PLACEHOLDER_TAG$2 = 'ph';\nvar _EXEMPLE_TAG = 'ex';\nvar _SOURCE_TAG$2 = 'source';\nvar _DOCTYPE = \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\";\nvar Xmb = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](Xmb, _super);\n function Xmb() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {?} messages\n * @param {?} locale\n * @return {?}\n */\n Xmb.prototype.write = function (messages, locale) {\n var /** @type {?} */ exampleVisitor = new ExampleVisitor();\n var /** @type {?} */ visitor = new _Visitor$2();\n var /** @type {?} */ rootNode = new Tag(_MESSAGES_TAG);\n messages.forEach(function (message) {\n var /** @type {?} */ attrs = { id: message.id };\n if (message.description) {\n attrs['desc'] = message.description;\n }\n if (message.meaning) {\n attrs['meaning'] = message.meaning;\n }\n var /** @type {?} */ sourceTags = [];\n message.sources.forEach(function (source) {\n sourceTags.push(new Tag(_SOURCE_TAG$2, {}, [\n new Text$2(source.filePath + \":\" + source.startLine + (source.endLine !== source.startLine ? ',' + source.endLine : ''))\n ]));\n });\n rootNode.children.push(new CR(2), new Tag(_MESSAGE_TAG, attrs, sourceTags.concat(visitor.serialize(message.nodes))));\n });\n rootNode.children.push(new CR());\n return serialize([\n new Declaration({ version: '1.0', encoding: 'UTF-8' }),\n new CR(),\n new Doctype(_MESSAGES_TAG, _DOCTYPE),\n new CR(),\n exampleVisitor.addDefaultExamples(rootNode),\n new CR(),\n ]);\n };\n /**\n * @param {?} content\n * @param {?} url\n * @return {?}\n */\n Xmb.prototype.load = function (content, url) {\n throw new Error('Unsupported');\n };\n /**\n * @param {?} message\n * @return {?}\n */\n Xmb.prototype.digest = function (message) { return digest$1(message); };\n /**\n * @param {?} message\n * @return {?}\n */\n Xmb.prototype.createNameMapper = function (message) {\n return new SimplePlaceholderMapper(message, toPublicName);\n };\n return Xmb;\n}(Serializer));\nvar _Visitor$2 = (function () {\n function _Visitor$2() {\n }\n /**\n * @param {?} text\n * @param {?=} context\n * @return {?}\n */\n _Visitor$2.prototype.visitText = function (text, context) { return [new Text$2(text.value)]; };\n /**\n * @param {?} container\n * @param {?} context\n * @return {?}\n */\n _Visitor$2.prototype.visitContainer = function (container, context) {\n var _this = this;\n var /** @type {?} */ nodes = [];\n container.children.forEach(function (node) { return nodes.push.apply(nodes, node.visit(_this)); });\n return nodes;\n };\n /**\n * @param {?} icu\n * @param {?=} context\n * @return {?}\n */\n _Visitor$2.prototype.visitIcu = function (icu, context) {\n var _this = this;\n var /** @type {?} */ nodes = [new Text$2(\"{\" + icu.expressionPlaceholder + \", \" + icu.type + \", \")];\n Object.keys(icu.cases).forEach(function (c) {\n nodes.push.apply(nodes, [new Text$2(c + \" {\")].concat(icu.cases[c].visit(_this), [new Text$2(\"} \")]));\n });\n nodes.push(new Text$2(\"}\"));\n return nodes;\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n _Visitor$2.prototype.visitTagPlaceholder = function (ph, context) {\n var /** @type {?} */ startEx = new Tag(_EXEMPLE_TAG, {}, [new Text$2(\"<\" + ph.tag + \">\")]);\n var /** @type {?} */ startTagPh = new Tag(_PLACEHOLDER_TAG$2, { name: ph.startName }, [startEx]);\n if (ph.isVoid) {\n // void tags have no children nor closing tags\n return [startTagPh];\n }\n var /** @type {?} */ closeEx = new Tag(_EXEMPLE_TAG, {}, [new Text$2(\"\")]);\n var /** @type {?} */ closeTagPh = new Tag(_PLACEHOLDER_TAG$2, { name: ph.closeName }, [closeEx]);\n return [startTagPh].concat(this.serialize(ph.children), [closeTagPh]);\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n _Visitor$2.prototype.visitPlaceholder = function (ph, context) {\n return [new Tag(_PLACEHOLDER_TAG$2, { name: ph.name })];\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n _Visitor$2.prototype.visitIcuPlaceholder = function (ph, context) {\n return [new Tag(_PLACEHOLDER_TAG$2, { name: ph.name })];\n };\n /**\n * @param {?} nodes\n * @return {?}\n */\n _Visitor$2.prototype.serialize = function (nodes) {\n var _this = this;\n return [].concat.apply([], nodes.map(function (node) { return node.visit(_this); }));\n };\n return _Visitor$2;\n}());\n/**\n * @param {?} message\n * @return {?}\n */\nfunction digest$1(message) {\n return decimalDigest(message);\n}\nvar ExampleVisitor = (function () {\n function ExampleVisitor() {\n }\n /**\n * @param {?} node\n * @return {?}\n */\n ExampleVisitor.prototype.addDefaultExamples = function (node) {\n node.visit(this);\n return node;\n };\n /**\n * @param {?} tag\n * @return {?}\n */\n ExampleVisitor.prototype.visitTag = function (tag) {\n var _this = this;\n if (tag.name === _PLACEHOLDER_TAG$2) {\n if (!tag.children || tag.children.length == 0) {\n var /** @type {?} */ exText = new Text$2(tag.attrs['name'] || '...');\n tag.children = [new Tag(_EXEMPLE_TAG, {}, [exText])];\n }\n }\n else if (tag.children) {\n tag.children.forEach(function (node) { return node.visit(_this); });\n }\n };\n /**\n * @param {?} text\n * @return {?}\n */\n ExampleVisitor.prototype.visitText = function (text) { };\n /**\n * @param {?} decl\n * @return {?}\n */\n ExampleVisitor.prototype.visitDeclaration = function (decl) { };\n /**\n * @param {?} doctype\n * @return {?}\n */\n ExampleVisitor.prototype.visitDoctype = function (doctype) { };\n return ExampleVisitor;\n}());\n/**\n * @param {?} internalName\n * @return {?}\n */\nfunction toPublicName(internalName) {\n return internalName.toUpperCase().replace(/[^A-Z0-9_]/g, '_');\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar _TRANSLATIONS_TAG = 'translationbundle';\nvar _TRANSLATION_TAG = 'translation';\nvar _PLACEHOLDER_TAG$3 = 'ph';\nvar Xtb = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](Xtb, _super);\n function Xtb() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {?} messages\n * @param {?} locale\n * @return {?}\n */\n Xtb.prototype.write = function (messages, locale) { throw new Error('Unsupported'); };\n /**\n * @param {?} content\n * @param {?} url\n * @return {?}\n */\n Xtb.prototype.load = function (content, url) {\n // xtb to xml nodes\n var /** @type {?} */ xtbParser = new XtbParser();\n var _a = xtbParser.parse(content, url), locale = _a.locale, msgIdToHtml = _a.msgIdToHtml, errors = _a.errors;\n // xml nodes to i18n nodes\n var /** @type {?} */ i18nNodesByMsgId = {};\n var /** @type {?} */ converter = new XmlToI18n$2();\n // Because we should be able to load xtb files that rely on features not supported by angular,\n // we need to delay the conversion of html to i18n nodes so that non angular messages are not\n // converted\n Object.keys(msgIdToHtml).forEach(function (msgId) {\n var /** @type {?} */ valueFn = function () {\n var _a = converter.convert(msgIdToHtml[msgId], url), i18nNodes = _a.i18nNodes, errors = _a.errors;\n if (errors.length) {\n throw new Error(\"xtb parse errors:\\n\" + errors.join('\\n'));\n }\n return i18nNodes;\n };\n createLazyProperty(i18nNodesByMsgId, msgId, valueFn);\n });\n if (errors.length) {\n throw new Error(\"xtb parse errors:\\n\" + errors.join('\\n'));\n }\n return { locale: /** @type {?} */ ((locale)), i18nNodesByMsgId: i18nNodesByMsgId };\n };\n /**\n * @param {?} message\n * @return {?}\n */\n Xtb.prototype.digest = function (message) { return digest$1(message); };\n /**\n * @param {?} message\n * @return {?}\n */\n Xtb.prototype.createNameMapper = function (message) {\n return new SimplePlaceholderMapper(message, toPublicName);\n };\n return Xtb;\n}(Serializer));\n/**\n * @param {?} messages\n * @param {?} id\n * @param {?} valueFn\n * @return {?}\n */\nfunction createLazyProperty(messages, id, valueFn) {\n Object.defineProperty(messages, id, {\n configurable: true,\n enumerable: true,\n get: function () {\n var /** @type {?} */ value = valueFn();\n Object.defineProperty(messages, id, { enumerable: true, value: value });\n return value;\n },\n set: function (_) { throw new Error('Could not overwrite an XTB translation'); },\n });\n}\nvar XtbParser = (function () {\n function XtbParser() {\n this._locale = null;\n }\n /**\n * @param {?} xtb\n * @param {?} url\n * @return {?}\n */\n XtbParser.prototype.parse = function (xtb, url) {\n this._bundleDepth = 0;\n this._msgIdToHtml = {};\n // We can not parse the ICU messages at this point as some messages might not originate\n // from Angular that could not be lex'd.\n var /** @type {?} */ xml = new XmlParser().parse(xtb, url, false);\n this._errors = xml.errors;\n visitAll(this, xml.rootNodes);\n return {\n msgIdToHtml: this._msgIdToHtml,\n errors: this._errors,\n locale: this._locale,\n };\n };\n /**\n * @param {?} element\n * @param {?} context\n * @return {?}\n */\n XtbParser.prototype.visitElement = function (element, context) {\n switch (element.name) {\n case _TRANSLATIONS_TAG:\n this._bundleDepth++;\n if (this._bundleDepth > 1) {\n this._addError(element, \"<\" + _TRANSLATIONS_TAG + \"> elements can not be nested\");\n }\n var /** @type {?} */ langAttr = element.attrs.find(function (attr) { return attr.name === 'lang'; });\n if (langAttr) {\n this._locale = langAttr.value;\n }\n visitAll(this, element.children, null);\n this._bundleDepth--;\n break;\n case _TRANSLATION_TAG:\n var /** @type {?} */ idAttr = element.attrs.find(function (attr) { return attr.name === 'id'; });\n if (!idAttr) {\n this._addError(element, \"<\" + _TRANSLATION_TAG + \"> misses the \\\"id\\\" attribute\");\n }\n else {\n var /** @type {?} */ id = idAttr.value;\n if (this._msgIdToHtml.hasOwnProperty(id)) {\n this._addError(element, \"Duplicated translations for msg \" + id);\n }\n else {\n var /** @type {?} */ innerTextStart = ((element.startSourceSpan)).end.offset;\n var /** @type {?} */ innerTextEnd = ((element.endSourceSpan)).start.offset;\n var /** @type {?} */ content = ((element.startSourceSpan)).start.file.content;\n var /** @type {?} */ innerText = content.slice(/** @type {?} */ ((innerTextStart)), /** @type {?} */ ((innerTextEnd)));\n this._msgIdToHtml[id] = innerText;\n }\n }\n break;\n default:\n this._addError(element, 'Unexpected tag');\n }\n };\n /**\n * @param {?} attribute\n * @param {?} context\n * @return {?}\n */\n XtbParser.prototype.visitAttribute = function (attribute, context) { };\n /**\n * @param {?} text\n * @param {?} context\n * @return {?}\n */\n XtbParser.prototype.visitText = function (text, context) { };\n /**\n * @param {?} comment\n * @param {?} context\n * @return {?}\n */\n XtbParser.prototype.visitComment = function (comment, context) { };\n /**\n * @param {?} expansion\n * @param {?} context\n * @return {?}\n */\n XtbParser.prototype.visitExpansion = function (expansion, context) { };\n /**\n * @param {?} expansionCase\n * @param {?} context\n * @return {?}\n */\n XtbParser.prototype.visitExpansionCase = function (expansionCase, context) { };\n /**\n * @param {?} node\n * @param {?} message\n * @return {?}\n */\n XtbParser.prototype._addError = function (node, message) {\n this._errors.push(new I18nError(/** @type {?} */ ((node.sourceSpan)), message));\n };\n return XtbParser;\n}());\nvar XmlToI18n$2 = (function () {\n function XmlToI18n$2() {\n }\n /**\n * @param {?} message\n * @param {?} url\n * @return {?}\n */\n XmlToI18n$2.prototype.convert = function (message, url) {\n var /** @type {?} */ xmlIcu = new XmlParser().parse(message, url, true);\n this._errors = xmlIcu.errors;\n var /** @type {?} */ i18nNodes = this._errors.length > 0 || xmlIcu.rootNodes.length == 0 ?\n [] :\n visitAll(this, xmlIcu.rootNodes);\n return {\n i18nNodes: i18nNodes,\n errors: this._errors,\n };\n };\n /**\n * @param {?} text\n * @param {?} context\n * @return {?}\n */\n XmlToI18n$2.prototype.visitText = function (text, context) { return new Text$1(text.value, /** @type {?} */ ((text.sourceSpan))); };\n /**\n * @param {?} icu\n * @param {?} context\n * @return {?}\n */\n XmlToI18n$2.prototype.visitExpansion = function (icu, context) {\n var /** @type {?} */ caseMap = {};\n visitAll(this, icu.cases).forEach(function (c) {\n caseMap[c.value] = new Container(c.nodes, icu.sourceSpan);\n });\n return new Icu(icu.switchValue, icu.type, caseMap, icu.sourceSpan);\n };\n /**\n * @param {?} icuCase\n * @param {?} context\n * @return {?}\n */\n XmlToI18n$2.prototype.visitExpansionCase = function (icuCase, context) {\n return {\n value: icuCase.value,\n nodes: visitAll(this, icuCase.expression),\n };\n };\n /**\n * @param {?} el\n * @param {?} context\n * @return {?}\n */\n XmlToI18n$2.prototype.visitElement = function (el, context) {\n if (el.name === _PLACEHOLDER_TAG$3) {\n var /** @type {?} */ nameAttr = el.attrs.find(function (attr) { return attr.name === 'name'; });\n if (nameAttr) {\n return new Placeholder('', nameAttr.value, /** @type {?} */ ((el.sourceSpan)));\n }\n this._addError(el, \"<\" + _PLACEHOLDER_TAG$3 + \"> misses the \\\"name\\\" attribute\");\n }\n else {\n this._addError(el, \"Unexpected tag\");\n }\n return null;\n };\n /**\n * @param {?} comment\n * @param {?} context\n * @return {?}\n */\n XmlToI18n$2.prototype.visitComment = function (comment, context) { };\n /**\n * @param {?} attribute\n * @param {?} context\n * @return {?}\n */\n XmlToI18n$2.prototype.visitAttribute = function (attribute, context) { };\n /**\n * @param {?} node\n * @param {?} message\n * @return {?}\n */\n XmlToI18n$2.prototype._addError = function (node, message) {\n this._errors.push(new I18nError(/** @type {?} */ ((node.sourceSpan)), message));\n };\n return XmlToI18n$2;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar HtmlParser = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](HtmlParser, _super);\n function HtmlParser() {\n return _super.call(this, getHtmlTagDefinition) || this;\n }\n /**\n * @param {?} source\n * @param {?} url\n * @param {?=} parseExpansionForms\n * @param {?=} interpolationConfig\n * @return {?}\n */\n HtmlParser.prototype.parse = function (source, url, parseExpansionForms, interpolationConfig) {\n if (parseExpansionForms === void 0) { parseExpansionForms = false; }\n if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }\n return _super.prototype.parse.call(this, source, url, parseExpansionForms, interpolationConfig);\n };\n return HtmlParser;\n}(Parser$1));\nHtmlParser.decorators = [\n { type: CompilerInjectable },\n];\n/**\n * @nocollapse\n */\nHtmlParser.ctorParameters = function () { return []; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A container for translated messages\n */\nvar TranslationBundle = (function () {\n /**\n * @param {?=} _i18nNodesByMsgId\n * @param {?=} locale\n * @param {?=} digest\n * @param {?=} mapperFactory\n * @param {?=} missingTranslationStrategy\n * @param {?=} console\n */\n function TranslationBundle(_i18nNodesByMsgId, locale, digest, mapperFactory, missingTranslationStrategy, console) {\n if (_i18nNodesByMsgId === void 0) { _i18nNodesByMsgId = {}; }\n if (missingTranslationStrategy === void 0) { missingTranslationStrategy = __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"MissingTranslationStrategy\"].Warning; }\n this._i18nNodesByMsgId = _i18nNodesByMsgId;\n this.digest = digest;\n this.mapperFactory = mapperFactory;\n this._i18nToHtml = new I18nToHtmlVisitor(_i18nNodesByMsgId, locale, digest, mapperFactory, missingTranslationStrategy, console);\n }\n /**\n * @param {?} content\n * @param {?} url\n * @param {?} serializer\n * @param {?} missingTranslationStrategy\n * @param {?=} console\n * @return {?}\n */\n TranslationBundle.load = function (content, url, serializer, missingTranslationStrategy, console) {\n var _a = serializer.load(content, url), locale = _a.locale, i18nNodesByMsgId = _a.i18nNodesByMsgId;\n var /** @type {?} */ digestFn = function (m) { return serializer.digest(m); };\n var /** @type {?} */ mapperFactory = function (m) { return ((serializer.createNameMapper(m))); };\n return new TranslationBundle(i18nNodesByMsgId, locale, digestFn, mapperFactory, missingTranslationStrategy, console);\n };\n /**\n * @param {?} srcMsg\n * @return {?}\n */\n TranslationBundle.prototype.get = function (srcMsg) {\n var /** @type {?} */ html = this._i18nToHtml.convert(srcMsg);\n if (html.errors.length) {\n throw new Error(html.errors.join('\\n'));\n }\n return html.nodes;\n };\n /**\n * @param {?} srcMsg\n * @return {?}\n */\n TranslationBundle.prototype.has = function (srcMsg) { return this.digest(srcMsg) in this._i18nNodesByMsgId; };\n return TranslationBundle;\n}());\nvar I18nToHtmlVisitor = (function () {\n /**\n * @param {?=} _i18nNodesByMsgId\n * @param {?=} _locale\n * @param {?=} _digest\n * @param {?=} _mapperFactory\n * @param {?=} _missingTranslationStrategy\n * @param {?=} _console\n */\n function I18nToHtmlVisitor(_i18nNodesByMsgId, _locale, _digest, _mapperFactory, _missingTranslationStrategy, _console) {\n if (_i18nNodesByMsgId === void 0) { _i18nNodesByMsgId = {}; }\n this._i18nNodesByMsgId = _i18nNodesByMsgId;\n this._locale = _locale;\n this._digest = _digest;\n this._mapperFactory = _mapperFactory;\n this._missingTranslationStrategy = _missingTranslationStrategy;\n this._console = _console;\n this._contextStack = [];\n this._errors = [];\n }\n /**\n * @param {?} srcMsg\n * @return {?}\n */\n I18nToHtmlVisitor.prototype.convert = function (srcMsg) {\n this._contextStack.length = 0;\n this._errors.length = 0;\n // i18n to text\n var /** @type {?} */ text = this._convertToText(srcMsg);\n // text to html\n var /** @type {?} */ url = srcMsg.nodes[0].sourceSpan.start.file.url;\n var /** @type {?} */ html = new HtmlParser().parse(text, url, true);\n return {\n nodes: html.rootNodes,\n errors: this._errors.concat(html.errors),\n };\n };\n /**\n * @param {?} text\n * @param {?=} context\n * @return {?}\n */\n I18nToHtmlVisitor.prototype.visitText = function (text, context) { return text.value; };\n /**\n * @param {?} container\n * @param {?=} context\n * @return {?}\n */\n I18nToHtmlVisitor.prototype.visitContainer = function (container, context) {\n var _this = this;\n return container.children.map(function (n) { return n.visit(_this); }).join('');\n };\n /**\n * @param {?} icu\n * @param {?=} context\n * @return {?}\n */\n I18nToHtmlVisitor.prototype.visitIcu = function (icu, context) {\n var _this = this;\n var /** @type {?} */ cases = Object.keys(icu.cases).map(function (k) { return k + \" {\" + icu.cases[k].visit(_this) + \"}\"; });\n // TODO(vicb): Once all format switch to using expression placeholders\n // we should throw when the placeholder is not in the source message\n var /** @type {?} */ exp = this._srcMsg.placeholders.hasOwnProperty(icu.expression) ?\n this._srcMsg.placeholders[icu.expression] :\n icu.expression;\n return \"{\" + exp + \", \" + icu.type + \", \" + cases.join(' ') + \"}\";\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n I18nToHtmlVisitor.prototype.visitPlaceholder = function (ph, context) {\n var /** @type {?} */ phName = this._mapper(ph.name);\n if (this._srcMsg.placeholders.hasOwnProperty(phName)) {\n return this._srcMsg.placeholders[phName];\n }\n if (this._srcMsg.placeholderToMessage.hasOwnProperty(phName)) {\n return this._convertToText(this._srcMsg.placeholderToMessage[phName]);\n }\n this._addError(ph, \"Unknown placeholder \\\"\" + ph.name + \"\\\"\");\n return '';\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n I18nToHtmlVisitor.prototype.visitTagPlaceholder = function (ph, context) {\n var _this = this;\n var /** @type {?} */ tag = \"\" + ph.tag;\n var /** @type {?} */ attrs = Object.keys(ph.attrs).map(function (name) { return name + \"=\\\"\" + ph.attrs[name] + \"\\\"\"; }).join(' ');\n if (ph.isVoid) {\n return \"<\" + tag + \" \" + attrs + \"/>\";\n }\n var /** @type {?} */ children = ph.children.map(function (c) { return c.visit(_this); }).join('');\n return \"<\" + tag + \" \" + attrs + \">\" + children + \"\";\n };\n /**\n * @param {?} ph\n * @param {?=} context\n * @return {?}\n */\n I18nToHtmlVisitor.prototype.visitIcuPlaceholder = function (ph, context) {\n // An ICU placeholder references the source message to be serialized\n return this._convertToText(this._srcMsg.placeholderToMessage[ph.name]);\n };\n /**\n * Convert a source message to a translated text string:\n * - text nodes are replaced with their translation,\n * - placeholders are replaced with their content,\n * - ICU nodes are converted to ICU expressions.\n * @param {?} srcMsg\n * @return {?}\n */\n I18nToHtmlVisitor.prototype._convertToText = function (srcMsg) {\n var _this = this;\n var /** @type {?} */ id = this._digest(srcMsg);\n var /** @type {?} */ mapper = this._mapperFactory ? this._mapperFactory(srcMsg) : null;\n var /** @type {?} */ nodes;\n this._contextStack.push({ msg: this._srcMsg, mapper: this._mapper });\n this._srcMsg = srcMsg;\n if (this._i18nNodesByMsgId.hasOwnProperty(id)) {\n // When there is a translation use its nodes as the source\n // And create a mapper to convert serialized placeholder names to internal names\n nodes = this._i18nNodesByMsgId[id];\n this._mapper = function (name) { return mapper ? ((mapper.toInternalName(name))) : name; };\n }\n else {\n // When no translation has been found\n // - report an error / a warning / nothing,\n // - use the nodes from the original message\n // - placeholders are already internal and need no mapper\n if (this._missingTranslationStrategy === __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"MissingTranslationStrategy\"].Error) {\n var /** @type {?} */ ctx = this._locale ? \" for locale \\\"\" + this._locale + \"\\\"\" : '';\n this._addError(srcMsg.nodes[0], \"Missing translation for message \\\"\" + id + \"\\\"\" + ctx);\n }\n else if (this._console &&\n this._missingTranslationStrategy === __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"MissingTranslationStrategy\"].Warning) {\n var /** @type {?} */ ctx = this._locale ? \" for locale \\\"\" + this._locale + \"\\\"\" : '';\n this._console.warn(\"Missing translation for message \\\"\" + id + \"\\\"\" + ctx);\n }\n nodes = srcMsg.nodes;\n this._mapper = function (name) { return name; };\n }\n var /** @type {?} */ text = nodes.map(function (node) { return node.visit(_this); }).join('');\n var /** @type {?} */ context = ((this._contextStack.pop()));\n this._srcMsg = context.msg;\n this._mapper = context.mapper;\n return text;\n };\n /**\n * @param {?} el\n * @param {?} msg\n * @return {?}\n */\n I18nToHtmlVisitor.prototype._addError = function (el, msg) {\n this._errors.push(new I18nError(el.sourceSpan, msg));\n };\n return I18nToHtmlVisitor;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar I18NHtmlParser = (function () {\n /**\n * @param {?} _htmlParser\n * @param {?=} translations\n * @param {?=} translationsFormat\n * @param {?=} missingTranslation\n * @param {?=} console\n */\n function I18NHtmlParser(_htmlParser, translations, translationsFormat, missingTranslation, console) {\n if (missingTranslation === void 0) { missingTranslation = __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"MissingTranslationStrategy\"].Warning; }\n this._htmlParser = _htmlParser;\n if (translations) {\n var serializer = createSerializer(translationsFormat);\n this._translationBundle =\n TranslationBundle.load(translations, 'i18n', serializer, missingTranslation, console);\n }\n else {\n this._translationBundle =\n new TranslationBundle({}, null, digest, undefined, missingTranslation, console);\n }\n }\n /**\n * @param {?} source\n * @param {?} url\n * @param {?=} parseExpansionForms\n * @param {?=} interpolationConfig\n * @return {?}\n */\n I18NHtmlParser.prototype.parse = function (source, url, parseExpansionForms, interpolationConfig) {\n if (parseExpansionForms === void 0) { parseExpansionForms = false; }\n if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }\n var /** @type {?} */ parseResult = this._htmlParser.parse(source, url, parseExpansionForms, interpolationConfig);\n if (parseResult.errors.length) {\n return new ParseTreeResult(parseResult.rootNodes, parseResult.errors);\n }\n return mergeTranslations(parseResult.rootNodes, this._translationBundle, interpolationConfig, [], {});\n };\n return I18NHtmlParser;\n}());\n/**\n * @param {?=} format\n * @return {?}\n */\nfunction createSerializer(format) {\n format = (format || 'xlf').toLowerCase();\n switch (format) {\n case 'xmb':\n return new Xmb();\n case 'xtb':\n return new Xtb();\n case 'xliff2':\n case 'xlf2':\n return new Xliff2();\n case 'xliff':\n case 'xlf':\n default:\n return new Xliff();\n }\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar CORE = '@angular/core';\nvar Identifiers = (function () {\n function Identifiers() {\n }\n return Identifiers;\n}());\nIdentifiers.ANALYZE_FOR_ENTRY_COMPONENTS = {\n name: 'ANALYZE_FOR_ENTRY_COMPONENTS',\n moduleName: CORE,\n runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ANALYZE_FOR_ENTRY_COMPONENTS\"]\n};\nIdentifiers.ElementRef = { name: 'ElementRef', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ElementRef\"] };\nIdentifiers.NgModuleRef = { name: 'NgModuleRef', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"NgModuleRef\"] };\nIdentifiers.ViewContainerRef = { name: 'ViewContainerRef', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ViewContainerRef\"] };\nIdentifiers.ChangeDetectorRef = {\n name: 'ChangeDetectorRef',\n moduleName: CORE,\n runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ChangeDetectorRef\"]\n};\nIdentifiers.QueryList = { name: 'QueryList', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"QueryList\"] };\nIdentifiers.TemplateRef = { name: 'TemplateRef', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"TemplateRef\"] };\nIdentifiers.CodegenComponentFactoryResolver = {\n name: 'ɵCodegenComponentFactoryResolver',\n moduleName: CORE,\n runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵCodegenComponentFactoryResolver\"]\n};\nIdentifiers.ComponentFactoryResolver = {\n name: 'ComponentFactoryResolver',\n moduleName: CORE,\n runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ComponentFactoryResolver\"]\n};\nIdentifiers.ComponentFactory = { name: 'ComponentFactory', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ComponentFactory\"] };\nIdentifiers.ComponentRef = { name: 'ComponentRef', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ComponentRef\"] };\nIdentifiers.NgModuleFactory = { name: 'NgModuleFactory', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"NgModuleFactory\"] };\nIdentifiers.createModuleFactory = {\n name: 'ɵcmf',\n moduleName: CORE,\n runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵcmf\"],\n};\nIdentifiers.moduleDef = {\n name: 'ɵmod',\n moduleName: CORE,\n runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵmod\"],\n};\nIdentifiers.moduleProviderDef = {\n name: 'ɵmpd',\n moduleName: CORE,\n runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵmpd\"],\n};\nIdentifiers.RegisterModuleFactoryFn = {\n name: 'ɵregisterModuleFactory',\n moduleName: CORE,\n runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵregisterModuleFactory\"],\n};\nIdentifiers.Injector = { name: 'Injector', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injector\"] };\nIdentifiers.ViewEncapsulation = {\n name: 'ViewEncapsulation',\n moduleName: CORE,\n runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ViewEncapsulation\"]\n};\nIdentifiers.ChangeDetectionStrategy = {\n name: 'ChangeDetectionStrategy',\n moduleName: CORE,\n runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ChangeDetectionStrategy\"]\n};\nIdentifiers.SecurityContext = {\n name: 'SecurityContext',\n moduleName: CORE,\n runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"SecurityContext\"],\n};\nIdentifiers.LOCALE_ID = { name: 'LOCALE_ID', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"LOCALE_ID\"] };\nIdentifiers.TRANSLATIONS_FORMAT = {\n name: 'TRANSLATIONS_FORMAT',\n moduleName: CORE,\n runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"TRANSLATIONS_FORMAT\"]\n};\nIdentifiers.inlineInterpolate = {\n name: 'ɵinlineInterpolate',\n moduleName: CORE,\n runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵinlineInterpolate\"]\n};\nIdentifiers.interpolate = { name: 'ɵinterpolate', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵinterpolate\"] };\nIdentifiers.EMPTY_ARRAY = { name: 'ɵEMPTY_ARRAY', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵEMPTY_ARRAY\"] };\nIdentifiers.EMPTY_MAP = { name: 'ɵEMPTY_MAP', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵEMPTY_MAP\"] };\nIdentifiers.Renderer = { name: 'Renderer', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Renderer\"] };\nIdentifiers.viewDef = { name: 'ɵvid', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵvid\"] };\nIdentifiers.elementDef = { name: 'ɵeld', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵeld\"] };\nIdentifiers.anchorDef = { name: 'ɵand', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵand\"] };\nIdentifiers.textDef = { name: 'ɵted', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵted\"] };\nIdentifiers.directiveDef = { name: 'ɵdid', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵdid\"] };\nIdentifiers.providerDef = { name: 'ɵprd', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵprd\"] };\nIdentifiers.queryDef = { name: 'ɵqud', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵqud\"] };\nIdentifiers.pureArrayDef = { name: 'ɵpad', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵpad\"] };\nIdentifiers.pureObjectDef = { name: 'ɵpod', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵpod\"] };\nIdentifiers.purePipeDef = { name: 'ɵppd', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵppd\"] };\nIdentifiers.pipeDef = { name: 'ɵpid', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵpid\"] };\nIdentifiers.nodeValue = { name: 'ɵnov', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵnov\"] };\nIdentifiers.ngContentDef = { name: 'ɵncd', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵncd\"] };\nIdentifiers.unwrapValue = { name: 'ɵunv', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵunv\"] };\nIdentifiers.createRendererType2 = { name: 'ɵcrt', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵcrt\"] };\nIdentifiers.RendererType2 = {\n name: 'RendererType2',\n moduleName: CORE,\n // type only\n runtime: null\n};\nIdentifiers.ViewDefinition = {\n name: 'ɵViewDefinition',\n moduleName: CORE,\n // type only\n runtime: null\n};\nIdentifiers.createComponentFactory = { name: 'ɵccf', moduleName: CORE, runtime: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵccf\"] };\n/**\n * @param {?} reference\n * @return {?}\n */\nfunction createTokenForReference(reference) {\n return { identifier: { reference: reference } };\n}\n/**\n * @param {?} reflector\n * @param {?} reference\n * @return {?}\n */\nfunction createTokenForExternalReference(reflector, reference) {\n return createTokenForReference(reflector.resolveExternalReference(reference));\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// http://cldr.unicode.org/index/cldr-spec/plural-rules\nvar PLURAL_CASES = ['zero', 'one', 'two', 'few', 'many', 'other'];\n/**\n * Expands special forms into elements.\n *\n * For example,\n *\n * ```\n * { messages.length, plural,\n * =0 {zero}\n * =1 {one}\n * other {more than one}\n * }\n * ```\n *\n * will be expanded into\n *\n * ```\n * \n * zero\n * one\n * more than one\n * \n * ```\n * @param {?} nodes\n * @return {?}\n */\nfunction expandNodes(nodes) {\n var /** @type {?} */ expander = new _Expander();\n return new ExpansionResult(visitAll(expander, nodes), expander.isExpanded, expander.errors);\n}\nvar ExpansionResult = (function () {\n /**\n * @param {?} nodes\n * @param {?} expanded\n * @param {?} errors\n */\n function ExpansionResult(nodes, expanded, errors) {\n this.nodes = nodes;\n this.expanded = expanded;\n this.errors = errors;\n }\n return ExpansionResult;\n}());\nvar ExpansionError = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](ExpansionError, _super);\n /**\n * @param {?} span\n * @param {?} errorMsg\n */\n function ExpansionError(span, errorMsg) {\n return _super.call(this, span, errorMsg) || this;\n }\n return ExpansionError;\n}(ParseError));\n/**\n * Expand expansion forms (plural, select) to directives\n *\n * \\@internal\n */\nvar _Expander = (function () {\n function _Expander() {\n this.isExpanded = false;\n this.errors = [];\n }\n /**\n * @param {?} element\n * @param {?} context\n * @return {?}\n */\n _Expander.prototype.visitElement = function (element, context) {\n return new Element(element.name, element.attrs, visitAll(this, element.children), element.sourceSpan, element.startSourceSpan, element.endSourceSpan);\n };\n /**\n * @param {?} attribute\n * @param {?} context\n * @return {?}\n */\n _Expander.prototype.visitAttribute = function (attribute, context) { return attribute; };\n /**\n * @param {?} text\n * @param {?} context\n * @return {?}\n */\n _Expander.prototype.visitText = function (text, context) { return text; };\n /**\n * @param {?} comment\n * @param {?} context\n * @return {?}\n */\n _Expander.prototype.visitComment = function (comment, context) { return comment; };\n /**\n * @param {?} icu\n * @param {?} context\n * @return {?}\n */\n _Expander.prototype.visitExpansion = function (icu, context) {\n this.isExpanded = true;\n return icu.type == 'plural' ? _expandPluralForm(icu, this.errors) :\n _expandDefaultForm(icu, this.errors);\n };\n /**\n * @param {?} icuCase\n * @param {?} context\n * @return {?}\n */\n _Expander.prototype.visitExpansionCase = function (icuCase, context) {\n throw new Error('Should not be reached');\n };\n return _Expander;\n}());\n/**\n * @param {?} ast\n * @param {?} errors\n * @return {?}\n */\nfunction _expandPluralForm(ast, errors) {\n var /** @type {?} */ children = ast.cases.map(function (c) {\n if (PLURAL_CASES.indexOf(c.value) == -1 && !c.value.match(/^=\\d+$/)) {\n errors.push(new ExpansionError(c.valueSourceSpan, \"Plural cases should be \\\"=\\\" or one of \" + PLURAL_CASES.join(\", \")));\n }\n var /** @type {?} */ expansionResult = expandNodes(c.expression);\n errors.push.apply(errors, expansionResult.errors);\n return new Element(\"ng-template\", [new Attribute$1('ngPluralCase', \"\" + c.value, c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);\n });\n var /** @type {?} */ switchAttr = new Attribute$1('[ngPlural]', ast.switchValue, ast.switchValueSourceSpan);\n return new Element('ng-container', [switchAttr], children, ast.sourceSpan, ast.sourceSpan, ast.sourceSpan);\n}\n/**\n * @param {?} ast\n * @param {?} errors\n * @return {?}\n */\nfunction _expandDefaultForm(ast, errors) {\n var /** @type {?} */ children = ast.cases.map(function (c) {\n var /** @type {?} */ expansionResult = expandNodes(c.expression);\n errors.push.apply(errors, expansionResult.errors);\n if (c.value === 'other') {\n // other is the default case when no values match\n return new Element(\"ng-template\", [new Attribute$1('ngSwitchDefault', '', c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);\n }\n return new Element(\"ng-template\", [new Attribute$1('ngSwitchCase', \"\" + c.value, c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);\n });\n var /** @type {?} */ switchAttr = new Attribute$1('[ngSwitch]', ast.switchValue, ast.switchValueSourceSpan);\n return new Element('ng-container', [switchAttr], children, ast.sourceSpan, ast.sourceSpan, ast.sourceSpan);\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar ProviderError = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](ProviderError, _super);\n /**\n * @param {?} message\n * @param {?} span\n */\n function ProviderError(message, span) {\n return _super.call(this, span, message) || this;\n }\n return ProviderError;\n}(ParseError));\nvar ProviderViewContext = (function () {\n /**\n * @param {?} reflector\n * @param {?} component\n */\n function ProviderViewContext(reflector, component) {\n var _this = this;\n this.reflector = reflector;\n this.component = component;\n this.errors = [];\n this.viewQueries = _getViewQueries(component);\n this.viewProviders = new Map();\n component.viewProviders.forEach(function (provider) {\n if (_this.viewProviders.get(tokenReference(provider.token)) == null) {\n _this.viewProviders.set(tokenReference(provider.token), true);\n }\n });\n }\n return ProviderViewContext;\n}());\nvar ProviderElementContext = (function () {\n /**\n * @param {?} viewContext\n * @param {?} _parent\n * @param {?} _isViewRoot\n * @param {?} _directiveAsts\n * @param {?} attrs\n * @param {?} refs\n * @param {?} isTemplate\n * @param {?} contentQueryStartId\n * @param {?} _sourceSpan\n */\n function ProviderElementContext(viewContext, _parent, _isViewRoot, _directiveAsts, attrs, refs, isTemplate, contentQueryStartId, _sourceSpan) {\n var _this = this;\n this.viewContext = viewContext;\n this._parent = _parent;\n this._isViewRoot = _isViewRoot;\n this._directiveAsts = _directiveAsts;\n this._sourceSpan = _sourceSpan;\n this._transformedProviders = new Map();\n this._seenProviders = new Map();\n this._hasViewContainer = false;\n this._queriedTokens = new Map();\n this._attrs = {};\n attrs.forEach(function (attrAst) { return _this._attrs[attrAst.name] = attrAst.value; });\n var directivesMeta = _directiveAsts.map(function (directiveAst) { return directiveAst.directive; });\n this._allProviders =\n _resolveProvidersFromDirectives(directivesMeta, _sourceSpan, viewContext.errors);\n this._contentQueries = _getContentQueries(contentQueryStartId, directivesMeta);\n Array.from(this._allProviders.values()).forEach(function (provider) {\n _this._addQueryReadsTo(provider.token, provider.token, _this._queriedTokens);\n });\n if (isTemplate) {\n var templateRefId = createTokenForExternalReference(this.viewContext.reflector, Identifiers.TemplateRef);\n this._addQueryReadsTo(templateRefId, templateRefId, this._queriedTokens);\n }\n refs.forEach(function (refAst) {\n var defaultQueryValue = refAst.value ||\n createTokenForExternalReference(_this.viewContext.reflector, Identifiers.ElementRef);\n _this._addQueryReadsTo({ value: refAst.name }, defaultQueryValue, _this._queriedTokens);\n });\n if (this._queriedTokens.get(this.viewContext.reflector.resolveExternalReference(Identifiers.ViewContainerRef))) {\n this._hasViewContainer = true;\n }\n // create the providers that we know are eager first\n Array.from(this._allProviders.values()).forEach(function (provider) {\n var eager = provider.eager || _this._queriedTokens.get(tokenReference(provider.token));\n if (eager) {\n _this._getOrCreateLocalProvider(provider.providerType, provider.token, true);\n }\n });\n }\n /**\n * @return {?}\n */\n ProviderElementContext.prototype.afterElement = function () {\n var _this = this;\n // collect lazy providers\n Array.from(this._allProviders.values()).forEach(function (provider) {\n _this._getOrCreateLocalProvider(provider.providerType, provider.token, false);\n });\n };\n Object.defineProperty(ProviderElementContext.prototype, \"transformProviders\", {\n /**\n * @return {?}\n */\n get: function () {\n // Note: Maps keep their insertion order.\n var /** @type {?} */ lazyProviders = [];\n var /** @type {?} */ eagerProviders = [];\n this._transformedProviders.forEach(function (provider) {\n if (provider.eager) {\n eagerProviders.push(provider);\n }\n else {\n lazyProviders.push(provider);\n }\n });\n return lazyProviders.concat(eagerProviders);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ProviderElementContext.prototype, \"transformedDirectiveAsts\", {\n /**\n * @return {?}\n */\n get: function () {\n var /** @type {?} */ sortedProviderTypes = this.transformProviders.map(function (provider) { return provider.token.identifier; });\n var /** @type {?} */ sortedDirectives = this._directiveAsts.slice();\n sortedDirectives.sort(function (dir1, dir2) { return sortedProviderTypes.indexOf(dir1.directive.type) -\n sortedProviderTypes.indexOf(dir2.directive.type); });\n return sortedDirectives;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ProviderElementContext.prototype, \"transformedHasViewContainer\", {\n /**\n * @return {?}\n */\n get: function () { return this._hasViewContainer; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ProviderElementContext.prototype, \"queryMatches\", {\n /**\n * @return {?}\n */\n get: function () {\n var /** @type {?} */ allMatches = [];\n this._queriedTokens.forEach(function (matches) { allMatches.push.apply(allMatches, matches); });\n return allMatches;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @param {?} token\n * @param {?} defaultValue\n * @param {?} queryReadTokens\n * @return {?}\n */\n ProviderElementContext.prototype._addQueryReadsTo = function (token, defaultValue, queryReadTokens) {\n this._getQueriesFor(token).forEach(function (query) {\n var /** @type {?} */ queryValue = query.meta.read || defaultValue;\n var /** @type {?} */ tokenRef = tokenReference(queryValue);\n var /** @type {?} */ queryMatches = queryReadTokens.get(tokenRef);\n if (!queryMatches) {\n queryMatches = [];\n queryReadTokens.set(tokenRef, queryMatches);\n }\n queryMatches.push({ queryId: query.queryId, value: queryValue });\n });\n };\n /**\n * @param {?} token\n * @return {?}\n */\n ProviderElementContext.prototype._getQueriesFor = function (token) {\n var /** @type {?} */ result = [];\n var /** @type {?} */ currentEl = this;\n var /** @type {?} */ distance = 0;\n var /** @type {?} */ queries;\n while (currentEl !== null) {\n queries = currentEl._contentQueries.get(tokenReference(token));\n if (queries) {\n result.push.apply(result, queries.filter(function (query) { return query.meta.descendants || distance <= 1; }));\n }\n if (currentEl._directiveAsts.length > 0) {\n distance++;\n }\n currentEl = currentEl._parent;\n }\n queries = this.viewContext.viewQueries.get(tokenReference(token));\n if (queries) {\n result.push.apply(result, queries);\n }\n return result;\n };\n /**\n * @param {?} requestingProviderType\n * @param {?} token\n * @param {?} eager\n * @return {?}\n */\n ProviderElementContext.prototype._getOrCreateLocalProvider = function (requestingProviderType, token, eager) {\n var _this = this;\n var /** @type {?} */ resolvedProvider = this._allProviders.get(tokenReference(token));\n if (!resolvedProvider || ((requestingProviderType === ProviderAstType.Directive ||\n requestingProviderType === ProviderAstType.PublicService) &&\n resolvedProvider.providerType === ProviderAstType.PrivateService) ||\n ((requestingProviderType === ProviderAstType.PrivateService ||\n requestingProviderType === ProviderAstType.PublicService) &&\n resolvedProvider.providerType === ProviderAstType.Builtin)) {\n return null;\n }\n var /** @type {?} */ transformedProviderAst = this._transformedProviders.get(tokenReference(token));\n if (transformedProviderAst) {\n return transformedProviderAst;\n }\n if (this._seenProviders.get(tokenReference(token)) != null) {\n this.viewContext.errors.push(new ProviderError(\"Cannot instantiate cyclic dependency! \" + tokenName(token), this._sourceSpan));\n return null;\n }\n this._seenProviders.set(tokenReference(token), true);\n var /** @type {?} */ transformedProviders = resolvedProvider.providers.map(function (provider) {\n var /** @type {?} */ transformedUseValue = provider.useValue;\n var /** @type {?} */ transformedUseExisting = ((provider.useExisting));\n var /** @type {?} */ transformedDeps = ((undefined));\n if (provider.useExisting != null) {\n var /** @type {?} */ existingDiDep = ((_this._getDependency(resolvedProvider.providerType, { token: provider.useExisting }, eager)));\n if (existingDiDep.token != null) {\n transformedUseExisting = existingDiDep.token;\n }\n else {\n transformedUseExisting = ((null));\n transformedUseValue = existingDiDep.value;\n }\n }\n else if (provider.useFactory) {\n var /** @type {?} */ deps = provider.deps || provider.useFactory.diDeps;\n transformedDeps =\n deps.map(function (dep) { return ((_this._getDependency(resolvedProvider.providerType, dep, eager))); });\n }\n else if (provider.useClass) {\n var /** @type {?} */ deps = provider.deps || provider.useClass.diDeps;\n transformedDeps =\n deps.map(function (dep) { return ((_this._getDependency(resolvedProvider.providerType, dep, eager))); });\n }\n return _transformProvider(provider, {\n useExisting: transformedUseExisting,\n useValue: transformedUseValue,\n deps: transformedDeps\n });\n });\n transformedProviderAst =\n _transformProviderAst(resolvedProvider, { eager: eager, providers: transformedProviders });\n this._transformedProviders.set(tokenReference(token), transformedProviderAst);\n return transformedProviderAst;\n };\n /**\n * @param {?} requestingProviderType\n * @param {?} dep\n * @param {?=} eager\n * @return {?}\n */\n ProviderElementContext.prototype._getLocalDependency = function (requestingProviderType, dep, eager) {\n if (eager === void 0) { eager = false; }\n if (dep.isAttribute) {\n var /** @type {?} */ attrValue = this._attrs[((dep.token)).value];\n return { isValue: true, value: attrValue == null ? null : attrValue };\n }\n if (dep.token != null) {\n // access builtints\n if ((requestingProviderType === ProviderAstType.Directive ||\n requestingProviderType === ProviderAstType.Component)) {\n if (tokenReference(dep.token) ===\n this.viewContext.reflector.resolveExternalReference(Identifiers.Renderer) ||\n tokenReference(dep.token) ===\n this.viewContext.reflector.resolveExternalReference(Identifiers.ElementRef) ||\n tokenReference(dep.token) ===\n this.viewContext.reflector.resolveExternalReference(Identifiers.ChangeDetectorRef) ||\n tokenReference(dep.token) ===\n this.viewContext.reflector.resolveExternalReference(Identifiers.TemplateRef)) {\n return dep;\n }\n if (tokenReference(dep.token) ===\n this.viewContext.reflector.resolveExternalReference(Identifiers.ViewContainerRef)) {\n this._hasViewContainer = true;\n }\n }\n // access the injector\n if (tokenReference(dep.token) ===\n this.viewContext.reflector.resolveExternalReference(Identifiers.Injector)) {\n return dep;\n }\n // access providers\n if (this._getOrCreateLocalProvider(requestingProviderType, dep.token, eager) != null) {\n return dep;\n }\n }\n return null;\n };\n /**\n * @param {?} requestingProviderType\n * @param {?} dep\n * @param {?=} eager\n * @return {?}\n */\n ProviderElementContext.prototype._getDependency = function (requestingProviderType, dep, eager) {\n if (eager === void 0) { eager = false; }\n var /** @type {?} */ currElement = this;\n var /** @type {?} */ currEager = eager;\n var /** @type {?} */ result = null;\n if (!dep.isSkipSelf) {\n result = this._getLocalDependency(requestingProviderType, dep, eager);\n }\n if (dep.isSelf) {\n if (!result && dep.isOptional) {\n result = { isValue: true, value: null };\n }\n }\n else {\n // check parent elements\n while (!result && currElement._parent) {\n var /** @type {?} */ prevElement = currElement;\n currElement = currElement._parent;\n if (prevElement._isViewRoot) {\n currEager = false;\n }\n result = currElement._getLocalDependency(ProviderAstType.PublicService, dep, currEager);\n }\n // check @Host restriction\n if (!result) {\n if (!dep.isHost || this.viewContext.component.isHost ||\n this.viewContext.component.type.reference === tokenReference(/** @type {?} */ ((dep.token))) ||\n this.viewContext.viewProviders.get(tokenReference(/** @type {?} */ ((dep.token)))) != null) {\n result = dep;\n }\n else {\n result = dep.isOptional ? result = { isValue: true, value: null } : null;\n }\n }\n }\n if (!result) {\n this.viewContext.errors.push(new ProviderError(\"No provider for \" + tokenName(/** @type {?} */ ((dep.token))), this._sourceSpan));\n }\n return result;\n };\n return ProviderElementContext;\n}());\nvar NgModuleProviderAnalyzer = (function () {\n /**\n * @param {?} reflector\n * @param {?} ngModule\n * @param {?} extraProviders\n * @param {?} sourceSpan\n */\n function NgModuleProviderAnalyzer(reflector, ngModule, extraProviders, sourceSpan) {\n var _this = this;\n this.reflector = reflector;\n this._transformedProviders = new Map();\n this._seenProviders = new Map();\n this._errors = [];\n this._allProviders = new Map();\n ngModule.transitiveModule.modules.forEach(function (ngModuleType) {\n var ngModuleProvider = { token: { identifier: ngModuleType }, useClass: ngModuleType };\n _resolveProviders([ngModuleProvider], ProviderAstType.PublicService, true, sourceSpan, _this._errors, _this._allProviders);\n });\n _resolveProviders(ngModule.transitiveModule.providers.map(function (entry) { return entry.provider; }).concat(extraProviders), ProviderAstType.PublicService, false, sourceSpan, this._errors, this._allProviders);\n }\n /**\n * @return {?}\n */\n NgModuleProviderAnalyzer.prototype.parse = function () {\n var _this = this;\n Array.from(this._allProviders.values()).forEach(function (provider) {\n _this._getOrCreateLocalProvider(provider.token, provider.eager);\n });\n if (this._errors.length > 0) {\n var /** @type {?} */ errorString = this._errors.join('\\n');\n throw new Error(\"Provider parse errors:\\n\" + errorString);\n }\n // Note: Maps keep their insertion order.\n var /** @type {?} */ lazyProviders = [];\n var /** @type {?} */ eagerProviders = [];\n this._transformedProviders.forEach(function (provider) {\n if (provider.eager) {\n eagerProviders.push(provider);\n }\n else {\n lazyProviders.push(provider);\n }\n });\n return lazyProviders.concat(eagerProviders);\n };\n /**\n * @param {?} token\n * @param {?} eager\n * @return {?}\n */\n NgModuleProviderAnalyzer.prototype._getOrCreateLocalProvider = function (token, eager) {\n var _this = this;\n var /** @type {?} */ resolvedProvider = this._allProviders.get(tokenReference(token));\n if (!resolvedProvider) {\n return null;\n }\n var /** @type {?} */ transformedProviderAst = this._transformedProviders.get(tokenReference(token));\n if (transformedProviderAst) {\n return transformedProviderAst;\n }\n if (this._seenProviders.get(tokenReference(token)) != null) {\n this._errors.push(new ProviderError(\"Cannot instantiate cyclic dependency! \" + tokenName(token), resolvedProvider.sourceSpan));\n return null;\n }\n this._seenProviders.set(tokenReference(token), true);\n var /** @type {?} */ transformedProviders = resolvedProvider.providers.map(function (provider) {\n var /** @type {?} */ transformedUseValue = provider.useValue;\n var /** @type {?} */ transformedUseExisting = ((provider.useExisting));\n var /** @type {?} */ transformedDeps = ((undefined));\n if (provider.useExisting != null) {\n var /** @type {?} */ existingDiDep = _this._getDependency({ token: provider.useExisting }, eager, resolvedProvider.sourceSpan);\n if (existingDiDep.token != null) {\n transformedUseExisting = existingDiDep.token;\n }\n else {\n transformedUseExisting = ((null));\n transformedUseValue = existingDiDep.value;\n }\n }\n else if (provider.useFactory) {\n var /** @type {?} */ deps = provider.deps || provider.useFactory.diDeps;\n transformedDeps =\n deps.map(function (dep) { return _this._getDependency(dep, eager, resolvedProvider.sourceSpan); });\n }\n else if (provider.useClass) {\n var /** @type {?} */ deps = provider.deps || provider.useClass.diDeps;\n transformedDeps =\n deps.map(function (dep) { return _this._getDependency(dep, eager, resolvedProvider.sourceSpan); });\n }\n return _transformProvider(provider, {\n useExisting: transformedUseExisting,\n useValue: transformedUseValue,\n deps: transformedDeps\n });\n });\n transformedProviderAst =\n _transformProviderAst(resolvedProvider, { eager: eager, providers: transformedProviders });\n this._transformedProviders.set(tokenReference(token), transformedProviderAst);\n return transformedProviderAst;\n };\n /**\n * @param {?} dep\n * @param {?=} eager\n * @param {?=} requestorSourceSpan\n * @return {?}\n */\n NgModuleProviderAnalyzer.prototype._getDependency = function (dep, eager, requestorSourceSpan) {\n if (eager === void 0) { eager = false; }\n var /** @type {?} */ foundLocal = false;\n if (!dep.isSkipSelf && dep.token != null) {\n // access the injector\n if (tokenReference(dep.token) ===\n this.reflector.resolveExternalReference(Identifiers.Injector) ||\n tokenReference(dep.token) ===\n this.reflector.resolveExternalReference(Identifiers.ComponentFactoryResolver)) {\n foundLocal = true;\n // access providers\n }\n else if (this._getOrCreateLocalProvider(dep.token, eager) != null) {\n foundLocal = true;\n }\n }\n var /** @type {?} */ result = dep;\n if (dep.isSelf && !foundLocal) {\n if (dep.isOptional) {\n result = { isValue: true, value: null };\n }\n else {\n this._errors.push(new ProviderError(\"No provider for \" + tokenName(/** @type {?} */ ((dep.token))), requestorSourceSpan));\n }\n }\n return result;\n };\n return NgModuleProviderAnalyzer;\n}());\n/**\n * @param {?} provider\n * @param {?} __1\n * @return {?}\n */\nfunction _transformProvider(provider, _a) {\n var useExisting = _a.useExisting, useValue = _a.useValue, deps = _a.deps;\n return {\n token: provider.token,\n useClass: provider.useClass,\n useExisting: useExisting,\n useFactory: provider.useFactory,\n useValue: useValue,\n deps: deps,\n multi: provider.multi\n };\n}\n/**\n * @param {?} provider\n * @param {?} __1\n * @return {?}\n */\nfunction _transformProviderAst(provider, _a) {\n var eager = _a.eager, providers = _a.providers;\n return new ProviderAst(provider.token, provider.multiProvider, provider.eager || eager, providers, provider.providerType, provider.lifecycleHooks, provider.sourceSpan);\n}\n/**\n * @param {?} directives\n * @param {?} sourceSpan\n * @param {?} targetErrors\n * @return {?}\n */\nfunction _resolveProvidersFromDirectives(directives, sourceSpan, targetErrors) {\n var /** @type {?} */ providersByToken = new Map();\n directives.forEach(function (directive) {\n var /** @type {?} */ dirProvider = { token: { identifier: directive.type }, useClass: directive.type };\n _resolveProviders([dirProvider], directive.isComponent ? ProviderAstType.Component : ProviderAstType.Directive, true, sourceSpan, targetErrors, providersByToken);\n });\n // Note: directives need to be able to overwrite providers of a component!\n var /** @type {?} */ directivesWithComponentFirst = directives.filter(function (dir) { return dir.isComponent; }).concat(directives.filter(function (dir) { return !dir.isComponent; }));\n directivesWithComponentFirst.forEach(function (directive) {\n _resolveProviders(directive.providers, ProviderAstType.PublicService, false, sourceSpan, targetErrors, providersByToken);\n _resolveProviders(directive.viewProviders, ProviderAstType.PrivateService, false, sourceSpan, targetErrors, providersByToken);\n });\n return providersByToken;\n}\n/**\n * @param {?} providers\n * @param {?} providerType\n * @param {?} eager\n * @param {?} sourceSpan\n * @param {?} targetErrors\n * @param {?} targetProvidersByToken\n * @return {?}\n */\nfunction _resolveProviders(providers, providerType, eager, sourceSpan, targetErrors, targetProvidersByToken) {\n providers.forEach(function (provider) {\n var /** @type {?} */ resolvedProvider = targetProvidersByToken.get(tokenReference(provider.token));\n if (resolvedProvider != null && !!resolvedProvider.multiProvider !== !!provider.multi) {\n targetErrors.push(new ProviderError(\"Mixing multi and non multi provider is not possible for token \" + tokenName(resolvedProvider.token), sourceSpan));\n }\n if (!resolvedProvider) {\n var /** @type {?} */ lifecycleHooks = provider.token.identifier &&\n ((provider.token.identifier)).lifecycleHooks ?\n ((provider.token.identifier)).lifecycleHooks :\n [];\n var /** @type {?} */ isUseValue = !(provider.useClass || provider.useExisting || provider.useFactory);\n resolvedProvider = new ProviderAst(provider.token, !!provider.multi, eager || isUseValue, [provider], providerType, lifecycleHooks, sourceSpan);\n targetProvidersByToken.set(tokenReference(provider.token), resolvedProvider);\n }\n else {\n if (!provider.multi) {\n resolvedProvider.providers.length = 0;\n }\n resolvedProvider.providers.push(provider);\n }\n });\n}\n/**\n * @param {?} component\n * @return {?}\n */\nfunction _getViewQueries(component) {\n // Note: queries start with id 1 so we can use the number in a Bloom filter!\n var /** @type {?} */ viewQueryId = 1;\n var /** @type {?} */ viewQueries = new Map();\n if (component.viewQueries) {\n component.viewQueries.forEach(function (query) { return _addQueryToTokenMap(viewQueries, { meta: query, queryId: viewQueryId++ }); });\n }\n return viewQueries;\n}\n/**\n * @param {?} contentQueryStartId\n * @param {?} directives\n * @return {?}\n */\nfunction _getContentQueries(contentQueryStartId, directives) {\n var /** @type {?} */ contentQueryId = contentQueryStartId;\n var /** @type {?} */ contentQueries = new Map();\n directives.forEach(function (directive, directiveIndex) {\n if (directive.queries) {\n directive.queries.forEach(function (query) { return _addQueryToTokenMap(contentQueries, { meta: query, queryId: contentQueryId++ }); });\n }\n });\n return contentQueries;\n}\n/**\n * @param {?} map\n * @param {?} query\n * @return {?}\n */\nfunction _addQueryToTokenMap(map, query) {\n query.meta.selectors.forEach(function (token) {\n var /** @type {?} */ entry = map.get(tokenReference(token));\n if (!entry) {\n entry = [];\n map.set(tokenReference(token), entry);\n }\n entry.push(query);\n });\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @abstract\n */\nvar ElementSchemaRegistry = (function () {\n function ElementSchemaRegistry() {\n }\n /**\n * @abstract\n * @param {?} tagName\n * @param {?} propName\n * @param {?} schemaMetas\n * @return {?}\n */\n ElementSchemaRegistry.prototype.hasProperty = function (tagName, propName, schemaMetas) { };\n /**\n * @abstract\n * @param {?} tagName\n * @param {?} schemaMetas\n * @return {?}\n */\n ElementSchemaRegistry.prototype.hasElement = function (tagName, schemaMetas) { };\n /**\n * @abstract\n * @param {?} elementName\n * @param {?} propName\n * @param {?} isAttribute\n * @return {?}\n */\n ElementSchemaRegistry.prototype.securityContext = function (elementName, propName, isAttribute) { };\n /**\n * @abstract\n * @return {?}\n */\n ElementSchemaRegistry.prototype.allKnownElementNames = function () { };\n /**\n * @abstract\n * @param {?} propName\n * @return {?}\n */\n ElementSchemaRegistry.prototype.getMappedPropName = function (propName) { };\n /**\n * @abstract\n * @return {?}\n */\n ElementSchemaRegistry.prototype.getDefaultComponentElementName = function () { };\n /**\n * @abstract\n * @param {?} name\n * @return {?}\n */\n ElementSchemaRegistry.prototype.validateProperty = function (name) { };\n /**\n * @abstract\n * @param {?} name\n * @return {?}\n */\n ElementSchemaRegistry.prototype.validateAttribute = function (name) { };\n /**\n * @abstract\n * @param {?} propName\n * @return {?}\n */\n ElementSchemaRegistry.prototype.normalizeAnimationStyleProperty = function (propName) { };\n /**\n * @abstract\n * @param {?} camelCaseProp\n * @param {?} userProvidedProp\n * @param {?} val\n * @return {?}\n */\n ElementSchemaRegistry.prototype.normalizeAnimationStyleValue = function (camelCaseProp, userProvidedProp, val) { };\n return ElementSchemaRegistry;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar StyleWithImports = (function () {\n /**\n * @param {?} style\n * @param {?} styleUrls\n */\n function StyleWithImports(style$$1, styleUrls) {\n this.style = style$$1;\n this.styleUrls = styleUrls;\n }\n return StyleWithImports;\n}());\n/**\n * @param {?} url\n * @return {?}\n */\nfunction isStyleUrlResolvable(url) {\n if (url == null || url.length === 0 || url[0] == '/')\n return false;\n var /** @type {?} */ schemeMatch = url.match(URL_WITH_SCHEMA_REGEXP);\n return schemeMatch === null || schemeMatch[1] == 'package' || schemeMatch[1] == 'asset';\n}\n/**\n * Rewrites stylesheets by resolving and removing the \\@import urls that\n * are either relative or don't have a `package:` scheme\n * @param {?} resolver\n * @param {?} baseUrl\n * @param {?} cssText\n * @return {?}\n */\nfunction extractStyleUrls(resolver, baseUrl, cssText) {\n var /** @type {?} */ foundUrls = [];\n var /** @type {?} */ modifiedCssText = cssText.replace(CSS_COMMENT_REGEXP, '').replace(CSS_IMPORT_REGEXP, function () {\n var m = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n m[_i] = arguments[_i];\n }\n var /** @type {?} */ url = m[1] || m[2];\n if (!isStyleUrlResolvable(url)) {\n // Do not attempt to resolve non-package absolute URLs with URI scheme\n return m[0];\n }\n foundUrls.push(resolver.resolve(baseUrl, url));\n return '';\n });\n return new StyleWithImports(modifiedCssText, foundUrls);\n}\nvar CSS_IMPORT_REGEXP = /@import\\s+(?:url\\()?\\s*(?:(?:['\"]([^'\"]*))|([^;\\)\\s]*))[^;]*;?/g;\nvar CSS_COMMENT_REGEXP = /\\/\\*.+?\\*\\//g;\nvar URL_WITH_SCHEMA_REGEXP = /^([^:/?#]+):/;\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar PROPERTY_PARTS_SEPARATOR = '.';\nvar ATTRIBUTE_PREFIX = 'attr';\nvar CLASS_PREFIX = 'class';\nvar STYLE_PREFIX = 'style';\nvar ANIMATE_PROP_PREFIX = 'animate-';\nvar BoundPropertyType = {};\nBoundPropertyType.DEFAULT = 0;\nBoundPropertyType.LITERAL_ATTR = 1;\nBoundPropertyType.ANIMATION = 2;\nBoundPropertyType[BoundPropertyType.DEFAULT] = \"DEFAULT\";\nBoundPropertyType[BoundPropertyType.LITERAL_ATTR] = \"LITERAL_ATTR\";\nBoundPropertyType[BoundPropertyType.ANIMATION] = \"ANIMATION\";\n/**\n * Represents a parsed property.\n */\nvar BoundProperty = (function () {\n /**\n * @param {?} name\n * @param {?} expression\n * @param {?} type\n * @param {?} sourceSpan\n */\n function BoundProperty(name, expression, type, sourceSpan) {\n this.name = name;\n this.expression = expression;\n this.type = type;\n this.sourceSpan = sourceSpan;\n }\n Object.defineProperty(BoundProperty.prototype, \"isLiteral\", {\n /**\n * @return {?}\n */\n get: function () { return this.type === BoundPropertyType.LITERAL_ATTR; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BoundProperty.prototype, \"isAnimation\", {\n /**\n * @return {?}\n */\n get: function () { return this.type === BoundPropertyType.ANIMATION; },\n enumerable: true,\n configurable: true\n });\n return BoundProperty;\n}());\n/**\n * Parses bindings in templates and in the directive host area.\n */\nvar BindingParser = (function () {\n /**\n * @param {?} _exprParser\n * @param {?} _interpolationConfig\n * @param {?} _schemaRegistry\n * @param {?} pipes\n * @param {?} _targetErrors\n */\n function BindingParser(_exprParser, _interpolationConfig, _schemaRegistry, pipes, _targetErrors) {\n var _this = this;\n this._exprParser = _exprParser;\n this._interpolationConfig = _interpolationConfig;\n this._schemaRegistry = _schemaRegistry;\n this._targetErrors = _targetErrors;\n this.pipesByName = new Map();\n this._usedPipes = new Map();\n pipes.forEach(function (pipe) { return _this.pipesByName.set(pipe.name, pipe); });\n }\n /**\n * @return {?}\n */\n BindingParser.prototype.getUsedPipes = function () { return Array.from(this._usedPipes.values()); };\n /**\n * @param {?} dirMeta\n * @param {?} elementSelector\n * @param {?} sourceSpan\n * @return {?}\n */\n BindingParser.prototype.createDirectiveHostPropertyAsts = function (dirMeta, elementSelector, sourceSpan) {\n var _this = this;\n if (dirMeta.hostProperties) {\n var /** @type {?} */ boundProps_1 = [];\n Object.keys(dirMeta.hostProperties).forEach(function (propName) {\n var /** @type {?} */ expression = dirMeta.hostProperties[propName];\n if (typeof expression === 'string') {\n _this.parsePropertyBinding(propName, expression, true, sourceSpan, [], boundProps_1);\n }\n else {\n _this._reportError(\"Value of the host property binding \\\"\" + propName + \"\\\" needs to be a string representing an expression but got \\\"\" + expression + \"\\\" (\" + typeof expression + \")\", sourceSpan);\n }\n });\n return boundProps_1.map(function (prop) { return _this.createElementPropertyAst(elementSelector, prop); });\n }\n return null;\n };\n /**\n * @param {?} dirMeta\n * @param {?} sourceSpan\n * @return {?}\n */\n BindingParser.prototype.createDirectiveHostEventAsts = function (dirMeta, sourceSpan) {\n var _this = this;\n if (dirMeta.hostListeners) {\n var /** @type {?} */ targetEventAsts_1 = [];\n Object.keys(dirMeta.hostListeners).forEach(function (propName) {\n var /** @type {?} */ expression = dirMeta.hostListeners[propName];\n if (typeof expression === 'string') {\n _this.parseEvent(propName, expression, sourceSpan, [], targetEventAsts_1);\n }\n else {\n _this._reportError(\"Value of the host listener \\\"\" + propName + \"\\\" needs to be a string representing an expression but got \\\"\" + expression + \"\\\" (\" + typeof expression + \")\", sourceSpan);\n }\n });\n return targetEventAsts_1;\n }\n return null;\n };\n /**\n * @param {?} value\n * @param {?} sourceSpan\n * @return {?}\n */\n BindingParser.prototype.parseInterpolation = function (value, sourceSpan) {\n var /** @type {?} */ sourceInfo = sourceSpan.start.toString();\n try {\n var /** @type {?} */ ast = ((this._exprParser.parseInterpolation(value, sourceInfo, this._interpolationConfig)));\n if (ast)\n this._reportExpressionParserErrors(ast.errors, sourceSpan);\n this._checkPipes(ast, sourceSpan);\n return ast;\n }\n catch (e) {\n this._reportError(\"\" + e, sourceSpan);\n return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);\n }\n };\n /**\n * @param {?} prefixToken\n * @param {?} value\n * @param {?} sourceSpan\n * @param {?} targetMatchableAttrs\n * @param {?} targetProps\n * @param {?} targetVars\n * @return {?}\n */\n BindingParser.prototype.parseInlineTemplateBinding = function (prefixToken, value, sourceSpan, targetMatchableAttrs, targetProps, targetVars) {\n var /** @type {?} */ bindings = this._parseTemplateBindings(prefixToken, value, sourceSpan);\n for (var /** @type {?} */ i = 0; i < bindings.length; i++) {\n var /** @type {?} */ binding = bindings[i];\n if (binding.keyIsVar) {\n targetVars.push(new VariableAst(binding.key, binding.name, sourceSpan));\n }\n else if (binding.expression) {\n this._parsePropertyAst(binding.key, binding.expression, sourceSpan, targetMatchableAttrs, targetProps);\n }\n else {\n targetMatchableAttrs.push([binding.key, '']);\n this.parseLiteralAttr(binding.key, null, sourceSpan, targetMatchableAttrs, targetProps);\n }\n }\n };\n /**\n * @param {?} prefixToken\n * @param {?} value\n * @param {?} sourceSpan\n * @return {?}\n */\n BindingParser.prototype._parseTemplateBindings = function (prefixToken, value, sourceSpan) {\n var _this = this;\n var /** @type {?} */ sourceInfo = sourceSpan.start.toString();\n try {\n var /** @type {?} */ bindingsResult = this._exprParser.parseTemplateBindings(prefixToken, value, sourceInfo);\n this._reportExpressionParserErrors(bindingsResult.errors, sourceSpan);\n bindingsResult.templateBindings.forEach(function (binding) {\n if (binding.expression) {\n _this._checkPipes(binding.expression, sourceSpan);\n }\n });\n bindingsResult.warnings.forEach(function (warning) { _this._reportError(warning, sourceSpan, ParseErrorLevel.WARNING); });\n return bindingsResult.templateBindings;\n }\n catch (e) {\n this._reportError(\"\" + e, sourceSpan);\n return [];\n }\n };\n /**\n * @param {?} name\n * @param {?} value\n * @param {?} sourceSpan\n * @param {?} targetMatchableAttrs\n * @param {?} targetProps\n * @return {?}\n */\n BindingParser.prototype.parseLiteralAttr = function (name, value, sourceSpan, targetMatchableAttrs, targetProps) {\n if (_isAnimationLabel(name)) {\n name = name.substring(1);\n if (value) {\n this._reportError(\"Assigning animation triggers via @prop=\\\"exp\\\" attributes with an expression is invalid.\" +\n \" Use property bindings (e.g. [@prop]=\\\"exp\\\") or use an attribute without a value (e.g. @prop) instead.\", sourceSpan, ParseErrorLevel.ERROR);\n }\n this._parseAnimation(name, value, sourceSpan, targetMatchableAttrs, targetProps);\n }\n else {\n targetProps.push(new BoundProperty(name, this._exprParser.wrapLiteralPrimitive(value, ''), BoundPropertyType.LITERAL_ATTR, sourceSpan));\n }\n };\n /**\n * @param {?} name\n * @param {?} expression\n * @param {?} isHost\n * @param {?} sourceSpan\n * @param {?} targetMatchableAttrs\n * @param {?} targetProps\n * @return {?}\n */\n BindingParser.prototype.parsePropertyBinding = function (name, expression, isHost, sourceSpan, targetMatchableAttrs, targetProps) {\n var /** @type {?} */ isAnimationProp = false;\n if (name.startsWith(ANIMATE_PROP_PREFIX)) {\n isAnimationProp = true;\n name = name.substring(ANIMATE_PROP_PREFIX.length);\n }\n else if (_isAnimationLabel(name)) {\n isAnimationProp = true;\n name = name.substring(1);\n }\n if (isAnimationProp) {\n this._parseAnimation(name, expression, sourceSpan, targetMatchableAttrs, targetProps);\n }\n else {\n this._parsePropertyAst(name, this._parseBinding(expression, isHost, sourceSpan), sourceSpan, targetMatchableAttrs, targetProps);\n }\n };\n /**\n * @param {?} name\n * @param {?} value\n * @param {?} sourceSpan\n * @param {?} targetMatchableAttrs\n * @param {?} targetProps\n * @return {?}\n */\n BindingParser.prototype.parsePropertyInterpolation = function (name, value, sourceSpan, targetMatchableAttrs, targetProps) {\n var /** @type {?} */ expr = this.parseInterpolation(value, sourceSpan);\n if (expr) {\n this._parsePropertyAst(name, expr, sourceSpan, targetMatchableAttrs, targetProps);\n return true;\n }\n return false;\n };\n /**\n * @param {?} name\n * @param {?} ast\n * @param {?} sourceSpan\n * @param {?} targetMatchableAttrs\n * @param {?} targetProps\n * @return {?}\n */\n BindingParser.prototype._parsePropertyAst = function (name, ast, sourceSpan, targetMatchableAttrs, targetProps) {\n targetMatchableAttrs.push([name, /** @type {?} */ ((ast.source))]);\n targetProps.push(new BoundProperty(name, ast, BoundPropertyType.DEFAULT, sourceSpan));\n };\n /**\n * @param {?} name\n * @param {?} expression\n * @param {?} sourceSpan\n * @param {?} targetMatchableAttrs\n * @param {?} targetProps\n * @return {?}\n */\n BindingParser.prototype._parseAnimation = function (name, expression, sourceSpan, targetMatchableAttrs, targetProps) {\n // This will occur when a @trigger is not paired with an expression.\n // For animations it is valid to not have an expression since */void\n // states will be applied by angular when the element is attached/detached\n var /** @type {?} */ ast = this._parseBinding(expression || 'null', false, sourceSpan);\n targetMatchableAttrs.push([name, /** @type {?} */ ((ast.source))]);\n targetProps.push(new BoundProperty(name, ast, BoundPropertyType.ANIMATION, sourceSpan));\n };\n /**\n * @param {?} value\n * @param {?} isHostBinding\n * @param {?} sourceSpan\n * @return {?}\n */\n BindingParser.prototype._parseBinding = function (value, isHostBinding, sourceSpan) {\n var /** @type {?} */ sourceInfo = sourceSpan.start.toString();\n try {\n var /** @type {?} */ ast = isHostBinding ?\n this._exprParser.parseSimpleBinding(value, sourceInfo, this._interpolationConfig) :\n this._exprParser.parseBinding(value, sourceInfo, this._interpolationConfig);\n if (ast)\n this._reportExpressionParserErrors(ast.errors, sourceSpan);\n this._checkPipes(ast, sourceSpan);\n return ast;\n }\n catch (e) {\n this._reportError(\"\" + e, sourceSpan);\n return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);\n }\n };\n /**\n * @param {?} elementSelector\n * @param {?} boundProp\n * @return {?}\n */\n BindingParser.prototype.createElementPropertyAst = function (elementSelector, boundProp) {\n if (boundProp.isAnimation) {\n return new BoundElementPropertyAst(boundProp.name, PropertyBindingType.Animation, __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"SecurityContext\"].NONE, boundProp.expression, null, boundProp.sourceSpan);\n }\n var /** @type {?} */ unit = null;\n var /** @type {?} */ bindingType = ((undefined));\n var /** @type {?} */ boundPropertyName = null;\n var /** @type {?} */ parts = boundProp.name.split(PROPERTY_PARTS_SEPARATOR);\n var /** @type {?} */ securityContexts = ((undefined));\n // Check check for special cases (prefix style, attr, class)\n if (parts.length > 1) {\n if (parts[0] == ATTRIBUTE_PREFIX) {\n boundPropertyName = parts[1];\n this._validatePropertyOrAttributeName(boundPropertyName, boundProp.sourceSpan, true);\n securityContexts = calcPossibleSecurityContexts(this._schemaRegistry, elementSelector, boundPropertyName, true);\n var /** @type {?} */ nsSeparatorIdx = boundPropertyName.indexOf(':');\n if (nsSeparatorIdx > -1) {\n var /** @type {?} */ ns = boundPropertyName.substring(0, nsSeparatorIdx);\n var /** @type {?} */ name = boundPropertyName.substring(nsSeparatorIdx + 1);\n boundPropertyName = mergeNsAndName(ns, name);\n }\n bindingType = PropertyBindingType.Attribute;\n }\n else if (parts[0] == CLASS_PREFIX) {\n boundPropertyName = parts[1];\n bindingType = PropertyBindingType.Class;\n securityContexts = [__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"SecurityContext\"].NONE];\n }\n else if (parts[0] == STYLE_PREFIX) {\n unit = parts.length > 2 ? parts[2] : null;\n boundPropertyName = parts[1];\n bindingType = PropertyBindingType.Style;\n securityContexts = [__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"SecurityContext\"].STYLE];\n }\n }\n // If not a special case, use the full property name\n if (boundPropertyName === null) {\n boundPropertyName = this._schemaRegistry.getMappedPropName(boundProp.name);\n securityContexts = calcPossibleSecurityContexts(this._schemaRegistry, elementSelector, boundPropertyName, false);\n bindingType = PropertyBindingType.Property;\n this._validatePropertyOrAttributeName(boundPropertyName, boundProp.sourceSpan, false);\n }\n return new BoundElementPropertyAst(boundPropertyName, bindingType, securityContexts[0], boundProp.expression, unit, boundProp.sourceSpan);\n };\n /**\n * @param {?} name\n * @param {?} expression\n * @param {?} sourceSpan\n * @param {?} targetMatchableAttrs\n * @param {?} targetEvents\n * @return {?}\n */\n BindingParser.prototype.parseEvent = function (name, expression, sourceSpan, targetMatchableAttrs, targetEvents) {\n if (_isAnimationLabel(name)) {\n name = name.substr(1);\n this._parseAnimationEvent(name, expression, sourceSpan, targetEvents);\n }\n else {\n this._parseEvent(name, expression, sourceSpan, targetMatchableAttrs, targetEvents);\n }\n };\n /**\n * @param {?} name\n * @param {?} expression\n * @param {?} sourceSpan\n * @param {?} targetEvents\n * @return {?}\n */\n BindingParser.prototype._parseAnimationEvent = function (name, expression, sourceSpan, targetEvents) {\n var /** @type {?} */ matches = splitAtPeriod(name, [name, '']);\n var /** @type {?} */ eventName = matches[0];\n var /** @type {?} */ phase = matches[1].toLowerCase();\n if (phase) {\n switch (phase) {\n case 'start':\n case 'done':\n var /** @type {?} */ ast = this._parseAction(expression, sourceSpan);\n targetEvents.push(new BoundEventAst(eventName, null, phase, ast, sourceSpan));\n break;\n default:\n this._reportError(\"The provided animation output phase value \\\"\" + phase + \"\\\" for \\\"@\" + eventName + \"\\\" is not supported (use start or done)\", sourceSpan);\n break;\n }\n }\n else {\n this._reportError(\"The animation trigger output event (@\" + eventName + \") is missing its phase value name (start or done are currently supported)\", sourceSpan);\n }\n };\n /**\n * @param {?} name\n * @param {?} expression\n * @param {?} sourceSpan\n * @param {?} targetMatchableAttrs\n * @param {?} targetEvents\n * @return {?}\n */\n BindingParser.prototype._parseEvent = function (name, expression, sourceSpan, targetMatchableAttrs, targetEvents) {\n // long format: 'target: eventName'\n var _a = splitAtColon(name, [/** @type {?} */ ((null)), name]), target = _a[0], eventName = _a[1];\n var /** @type {?} */ ast = this._parseAction(expression, sourceSpan);\n targetMatchableAttrs.push([/** @type {?} */ ((name)), /** @type {?} */ ((ast.source))]);\n targetEvents.push(new BoundEventAst(eventName, target, null, ast, sourceSpan));\n // Don't detect directives for event names for now,\n // so don't add the event name to the matchableAttrs\n };\n /**\n * @param {?} value\n * @param {?} sourceSpan\n * @return {?}\n */\n BindingParser.prototype._parseAction = function (value, sourceSpan) {\n var /** @type {?} */ sourceInfo = sourceSpan.start.toString();\n try {\n var /** @type {?} */ ast = this._exprParser.parseAction(value, sourceInfo, this._interpolationConfig);\n if (ast) {\n this._reportExpressionParserErrors(ast.errors, sourceSpan);\n }\n if (!ast || ast.ast instanceof EmptyExpr) {\n this._reportError(\"Empty expressions are not allowed\", sourceSpan);\n return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);\n }\n this._checkPipes(ast, sourceSpan);\n return ast;\n }\n catch (e) {\n this._reportError(\"\" + e, sourceSpan);\n return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);\n }\n };\n /**\n * @param {?} message\n * @param {?} sourceSpan\n * @param {?=} level\n * @return {?}\n */\n BindingParser.prototype._reportError = function (message, sourceSpan, level) {\n if (level === void 0) { level = ParseErrorLevel.ERROR; }\n this._targetErrors.push(new ParseError(sourceSpan, message, level));\n };\n /**\n * @param {?} errors\n * @param {?} sourceSpan\n * @return {?}\n */\n BindingParser.prototype._reportExpressionParserErrors = function (errors, sourceSpan) {\n for (var _i = 0, errors_1 = errors; _i < errors_1.length; _i++) {\n var error = errors_1[_i];\n this._reportError(error.message, sourceSpan);\n }\n };\n /**\n * @param {?} ast\n * @param {?} sourceSpan\n * @return {?}\n */\n BindingParser.prototype._checkPipes = function (ast, sourceSpan) {\n var _this = this;\n if (ast) {\n var /** @type {?} */ collector = new PipeCollector();\n ast.visit(collector);\n collector.pipes.forEach(function (ast, pipeName) {\n var /** @type {?} */ pipeMeta = _this.pipesByName.get(pipeName);\n if (!pipeMeta) {\n _this._reportError(\"The pipe '\" + pipeName + \"' could not be found\", new ParseSourceSpan(sourceSpan.start.moveBy(ast.span.start), sourceSpan.start.moveBy(ast.span.end)));\n }\n else {\n _this._usedPipes.set(pipeName, pipeMeta);\n }\n });\n }\n };\n /**\n * @param {?} propName the name of the property / attribute\n * @param {?} sourceSpan\n * @param {?} isAttr true when binding to an attribute\n * @return {?}\n */\n BindingParser.prototype._validatePropertyOrAttributeName = function (propName, sourceSpan, isAttr) {\n var /** @type {?} */ report = isAttr ? this._schemaRegistry.validateAttribute(propName) :\n this._schemaRegistry.validateProperty(propName);\n if (report.error) {\n this._reportError(/** @type {?} */ ((report.msg)), sourceSpan, ParseErrorLevel.ERROR);\n }\n };\n return BindingParser;\n}());\nvar PipeCollector = (function (_super) {\n __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](PipeCollector, _super);\n function PipeCollector() {\n var _this = _super.apply(this, arguments) || this;\n _this.pipes = new Map();\n return _this;\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n PipeCollector.prototype.visitPipe = function (ast, context) {\n this.pipes.set(ast.name, ast);\n ast.exp.visit(this);\n this.visitAll(ast.args, context);\n return null;\n };\n return PipeCollector;\n}(RecursiveAstVisitor));\n/**\n * @param {?} name\n * @return {?}\n */\nfunction _isAnimationLabel(name) {\n return name[0] == '@';\n}\n/**\n * @param {?} registry\n * @param {?} selector\n * @param {?} propName\n * @param {?} isAttribute\n * @return {?}\n */\nfunction calcPossibleSecurityContexts(registry, selector, propName, isAttribute) {\n var /** @type {?} */ ctxs = [];\n CssSelector.parse(selector).forEach(function (selector) {\n var /** @type {?} */ elementNames = selector.element ? [selector.element] : registry.allKnownElementNames();\n var /** @type {?} */ notElementNames = new Set(selector.notSelectors.filter(function (selector) { return selector.isElementSelector(); })\n .map(function (selector) { return selector.element; }));\n var /** @type {?} */ possibleElementNames = elementNames.filter(function (elementName) { return !notElementNames.has(elementName); });\n ctxs.push.apply(ctxs, possibleElementNames.map(function (elementName) { return registry.securityContext(elementName, propName, isAttribute); }));\n });\n return ctxs.length === 0 ? [__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"SecurityContext\"].NONE] : Array.from(new Set(ctxs)).sort();\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar NG_CONTENT_SELECT_ATTR = 'select';\nvar LINK_ELEMENT = 'link';\nvar LINK_STYLE_REL_ATTR = 'rel';\nvar LINK_STYLE_HREF_ATTR = 'href';\nvar LINK_STYLE_REL_VALUE = 'stylesheet';\nvar STYLE_ELEMENT = 'style';\nvar SCRIPT_ELEMENT = 'script';\nvar NG_NON_BINDABLE_ATTR = 'ngNonBindable';\nvar NG_PROJECT_AS = 'ngProjectAs';\n/**\n * @param {?} ast\n * @return {?}\n */\nfunction preparseElement(ast) {\n var /** @type {?} */ selectAttr = ((null));\n var /** @type {?} */ hrefAttr = ((null));\n var /** @type {?} */ relAttr = ((null));\n var /** @type {?} */ nonBindable = false;\n var /** @type {?} */ projectAs = ((null));\n ast.attrs.forEach(function (attr) {\n var /** @type {?} */ lcAttrName = attr.name.toLowerCase();\n if (lcAttrName == NG_CONTENT_SELECT_ATTR) {\n selectAttr = attr.value;\n }\n else if (lcAttrName == LINK_STYLE_HREF_ATTR) {\n hrefAttr = attr.value;\n }\n else if (lcAttrName == LINK_STYLE_REL_ATTR) {\n relAttr = attr.value;\n }\n else if (attr.name == NG_NON_BINDABLE_ATTR) {\n nonBindable = true;\n }\n else if (attr.name == NG_PROJECT_AS) {\n if (attr.value.length > 0) {\n projectAs = attr.value;\n }\n }\n });\n selectAttr = normalizeNgContentSelect(selectAttr);\n var /** @type {?} */ nodeName = ast.name.toLowerCase();\n var /** @type {?} */ type = PreparsedElementType.OTHER;\n if (isNgContent(nodeName)) {\n type = PreparsedElementType.NG_CONTENT;\n }\n else if (nodeName == STYLE_ELEMENT) {\n type = PreparsedElementType.STYLE;\n }\n else if (nodeName == SCRIPT_ELEMENT) {\n type = PreparsedElementType.SCRIPT;\n }\n else if (nodeName == LINK_ELEMENT && relAttr == LINK_STYLE_REL_VALUE) {\n type = PreparsedElementType.STYLESHEET;\n }\n return new PreparsedElement(type, selectAttr, hrefAttr, nonBindable, projectAs);\n}\nvar PreparsedElementType = {};\nPreparsedElementType.NG_CONTENT = 0;\nPreparsedElementType.STYLE = 1;\nPreparsedElementType.STYLESHEET = 2;\nPreparsedElementType.SCRIPT = 3;\nPreparsedElementType.OTHER = 4;\nPreparsedElementType[PreparsedElementType.NG_CONTENT] = \"NG_CONTENT\";\nPreparsedElementType[PreparsedElementType.STYLE] = \"STYLE\";\nPreparsedElementType[PreparsedElementType.STYLESHEET] = \"STYLESHEET\";\nPreparsedElementType[PreparsedElementType.SCRIPT] = \"SCRIPT\";\nPreparsedElementType[PreparsedElementType.OTHER] = \"OTHER\";\nvar PreparsedElement = (function () {\n /**\n * @param {?} type\n * @param {?} selectAttr\n * @param {?} hrefAttr\n * @param {?} nonBindable\n * @param {?} projectAs\n */\n function PreparsedElement(type, selectAttr, hrefAttr, nonBindable, projectAs) {\n this.type = type;\n this.selectAttr = selectAttr;\n this.hrefAttr = hrefAttr;\n this.nonBindable = nonBindable;\n this.projectAs = projectAs;\n }\n return PreparsedElement;\n}());\n/**\n * @param {?} selectAttr\n * @return {?}\n */\nfunction normalizeNgContentSelect(selectAttr) {\n if (selectAttr === null || selectAttr.length === 0) {\n return '*';\n }\n return selectAttr;\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar BIND_NAME_REGEXP = /^(?:(?:(?:(bind-)|(let-)|(ref-|#)|(on-)|(bindon-)|(@))(.+))|\\[\\(([^\\)]+)\\)\\]|\\[([^\\]]+)\\]|\\(([^\\)]+)\\))$/;\n// Group 1 = \"bind-\"\nvar KW_BIND_IDX = 1;\n// Group 2 = \"let-\"\nvar KW_LET_IDX = 2;\n// Group 3 = \"ref-/#\"\nvar KW_REF_IDX = 3;\n// Group 4 = \"on-\"\nvar KW_ON_IDX = 4;\n// Group 5 = \"bindon-\"\nvar KW_BINDON_IDX = 5;\n// Group 6 = \"@\"\nvar KW_AT_IDX = 6;\n// Group 7 = the identifier after \"bind-\", \"let-\", \"ref-/#\", \"on-\", \"bindon-\" or \"@\"\nvar IDENT_KW_IDX = 7;\n// Group 8 = identifier inside [()]\nvar IDENT_BANANA_BOX_IDX = 8;\n// Group 9 = identifier inside []\nvar IDENT_PROPERTY_IDX = 9;\n// Group 10 = identifier inside ()\nvar IDENT_EVENT_IDX = 10;\n// deprecated in 4.x\nvar TEMPLATE_ELEMENT = 'template';\n// deprecated in 4.x\nvar TEMPLATE_ATTR = 'template';\nvar TEMPLATE_ATTR_PREFIX = '*';\nvar CLASS_ATTR = 'class';\nvar TEXT_CSS_SELECTOR = CssSelector.parse('*')[0];\nvar TEMPLATE_ELEMENT_DEPRECATION_WARNING = 'The