@sunbird-cb/consumption 0.0.0-watch
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2015/lib/_common/announcements/announcements.component.js +98 -0
- package/esm2015/lib/_common/announcements/announcements.module.js +30 -0
- package/esm2015/lib/_common/avatar-photo-lib/avatar-photo-lib.component.js +113 -0
- package/esm2015/lib/_common/avatar-photo-lib/avatar-photo-lib.module.js +47 -0
- package/esm2015/lib/_common/calender/calender-day/calender-day.component.js +51 -0
- package/esm2015/lib/_common/calender/calender.component.js +191 -0
- package/esm2015/lib/_common/calender/calender.module.js +45 -0
- package/esm2015/lib/_common/cards/card-assessment/card-assessment/card-assessment.component.js +89 -0
- package/esm2015/lib/_common/cards/card-karma-programs/card-karma-programs.component.js +96 -0
- package/esm2015/lib/_common/cards/card-karma-programs-v2/card-karma-programs-v2.component.js +90 -0
- package/esm2015/lib/_common/cards/card-landscape/card-landscape.component.js +109 -0
- package/esm2015/lib/_common/cards/card-mdo-channel/card-mdo-channel.component.js +77 -0
- package/esm2015/lib/_common/cards/card-mdo-channel-v1/card-mdo-channel-v1.component.js +77 -0
- package/esm2015/lib/_common/cards/card-portrait/card-portrait.component.js +95 -0
- package/esm2015/lib/_common/cards/card-portrait-ext/card-portrait-ext.component.js +97 -0
- package/esm2015/lib/_common/cards/card-progress-portrait-lib/card-progress-portrait-lib.component.js +150 -0
- package/esm2015/lib/_common/cards/card-resource/card-resource.component.js +23 -0
- package/esm2015/lib/_common/cards/card-user/card-user.component.js +74 -0
- package/esm2015/lib/_common/cards/card-wide/card-wide.component.js +92 -0
- package/esm2015/lib/_common/cards/card-wide-v2/card-wide-v2.component.js +91 -0
- package/esm2015/lib/_common/cards/cards.component.js +104 -0
- package/esm2015/lib/_common/cards/cards.module.js +168 -0
- package/esm2015/lib/_common/cards/provider-card/provider-card.component.js +52 -0
- package/esm2015/lib/_common/cbp-plan/cbp-plan.component.js +95 -0
- package/esm2015/lib/_common/cbp-plan/cbp-plan.module.js +38 -0
- package/esm2015/lib/_common/common-strip/common-strip.component.js +323 -0
- package/esm2015/lib/_common/common-strip/common-strip.model.js +2 -0
- package/esm2015/lib/_common/common-strip/common-strip.module.js +147 -0
- package/esm2015/lib/_common/competency-passbook/competency-passbook.component.js +366 -0
- package/esm2015/lib/_common/competency-passbook/competency-passbook.module.js +36 -0
- package/esm2015/lib/_common/competency-passbook/competency-passbook.service.js +30 -0
- package/esm2015/lib/_common/competency-passbook-mdo/competency-passbook-mdo.component.js +190 -0
- package/esm2015/lib/_common/competency-passbook-mdo/competency-passbook-mdo.module.js +36 -0
- package/esm2015/lib/_common/competency-passbook-mdo/competency-passbook-mdo.service.js +30 -0
- package/esm2015/lib/_common/content-progress/content-progress.component.js +76 -0
- package/esm2015/lib/_common/content-progress/content-progress.module.js +30 -0
- package/esm2015/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.js +1661 -0
- package/esm2015/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.model.js +2 -0
- package/esm2015/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.module.js +152 -0
- package/esm2015/lib/_common/data-points/data-points.component.js +119 -0
- package/esm2015/lib/_common/data-points/data-points.module.js +28 -0
- package/esm2015/lib/_common/dialog-components/certificate-dialog/certificate-dialog.component.js +138 -0
- package/esm2015/lib/_common/dialog-components/dialog-components.module.js +65 -0
- package/esm2015/lib/_common/display-content-type-lib/display-content-type-lib.component.js +33 -0
- package/esm2015/lib/_common/display-content-type-lib/display-content-type-lib.module.js +19 -0
- package/esm2015/lib/_common/events/event-card/event-card.component.js +46 -0
- package/esm2015/lib/_common/events/events.component.js +111 -0
- package/esm2015/lib/_common/events/events.module.js +35 -0
- package/esm2015/lib/_common/highlights-of-week/highlights-of-week.component.js +50 -0
- package/esm2015/lib/_common/highlights-of-week/highlights-of-week.module.js +40 -0
- package/esm2015/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.component.js +258 -0
- package/esm2015/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.module.js +34 -0
- package/esm2015/lib/_common/key-highlights/key-highlights.component.js +45 -0
- package/esm2015/lib/_common/key-highlights/key-highlights.module.js +37 -0
- package/esm2015/lib/_common/mdo-leaderboard/mdo-leaderboard.component.js +103 -0
- package/esm2015/lib/_common/mdo-leaderboard/mdo-leaderboard.module.js +42 -0
- package/esm2015/lib/_common/microsites/mdo-channels/mdo-channel-v1/mdo-channel-v1.component.js +18 -0
- package/esm2015/lib/_common/microsites/mdo-channels/mdo-channel-v2/mdo-channel-v2.component.js +158 -0
- package/esm2015/lib/_common/microsites/mdo-channels/mdo-channel.module.js +93 -0
- package/esm2015/lib/_common/microsites/national-learning-week/national-learning/national-learning.component.js +85 -0
- package/esm2015/lib/_common/microsites/national-learning-week/national-learning.module.js +87 -0
- package/esm2015/lib/_common/microsites/providers/providers-v2/providers-v2.component.js +156 -0
- package/esm2015/lib/_common/microsites/providers/providers.module.js +90 -0
- package/esm2015/lib/_common/pills/pills.component.js +44 -0
- package/esm2015/lib/_common/pills/pills.module.js +34 -0
- package/esm2015/lib/_common/skeleton-loader-lib/skeleton-loader-lib.component.js +29 -0
- package/esm2015/lib/_common/skeleton-loader-lib/skeleton-loader-lib.module.js +40 -0
- package/esm2015/lib/_common/sliders/sliders.component.js +117 -0
- package/esm2015/lib/_common/sliders/sliders.model.js +2 -0
- package/esm2015/lib/_common/sliders/sliders.module.js +53 -0
- package/esm2015/lib/_common/sliders-ng-content/sliders-ng-content.component.js +138 -0
- package/esm2015/lib/_common/sliders-ng-content/sliders-ng-content.model.js +2 -0
- package/esm2015/lib/_common/sliders-ng-content/sliders-ng-content.module.js +53 -0
- package/esm2015/lib/_common/speakers/speakers.component.js +73 -0
- package/esm2015/lib/_common/speakers/speakers.module.js +40 -0
- package/esm2015/lib/_common/strips/content-strip-facet-filter/content-strip-facet-filter.component.js +684 -0
- package/esm2015/lib/_common/strips/content-strip-facet-filter/content-strip-facet-filter.model.js +5 -0
- package/esm2015/lib/_common/strips/content-strip-facet-filter/content-strip-facet-filter.module.js +152 -0
- package/esm2015/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.component.js +957 -0
- package/esm2015/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.model.js +2 -0
- package/esm2015/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.module.js +152 -0
- package/esm2015/lib/_common/top-learners/top-learners.component.js +104 -0
- package/esm2015/lib/_common/top-learners/top-learners.module.js +30 -0
- package/esm2015/lib/_common/user-content-rating/user-content-rating-lib.component.js +83 -0
- package/esm2015/lib/_common/user-content-rating/user-content-rating-lib.module.js +58 -0
- package/esm2015/lib/_common/user-content-rating/user-content-rating-lib.service.js +23 -0
- package/esm2015/lib/_common/user-progress/user-progress.component.js +111 -0
- package/esm2015/lib/_common/user-progress/user-progress.module.js +40 -0
- package/esm2015/lib/_constants/misc.constants.js +2 -0
- package/esm2015/lib/_directives/default-thumbnail/default-thumbnail.directive.js +40 -0
- package/esm2015/lib/_directives/default-thumbnail/default-thumbnail.module.js +22 -0
- package/esm2015/lib/_directives/image-responsive/image-responsive.directive.js +87 -0
- package/esm2015/lib/_directives/image-responsive/image-responsive.module.js +22 -0
- package/esm2015/lib/_directives/navigation/navigation.directive.js +43 -0
- package/esm2015/lib/_directives/navigation/navigation.module.js +22 -0
- package/esm2015/lib/_directives/scrollable-item/scrollable-item.directive.js +22 -0
- package/esm2015/lib/_directives/scrollable-item/scrollable-item.module.js +22 -0
- package/esm2015/lib/_models/card-content-v2.model.js +23 -0
- package/esm2015/lib/_models/card-content.model.js +23 -0
- package/esm2015/lib/_models/card-users.model.js +2 -0
- package/esm2015/lib/_models/compentencies.model.js +2 -0
- package/esm2015/lib/_models/content-strip-multiple.model.js +2 -0
- package/esm2015/lib/_models/event.js +2 -0
- package/esm2015/lib/_models/profile-v3.models.js +2 -0
- package/esm2015/lib/_models/rating.model.js +2 -0
- package/esm2015/lib/_models/widget-content.model.js +241 -0
- package/esm2015/lib/_models/widget-search.model.js +2 -0
- package/esm2015/lib/_models/widget-user.model.js +2 -0
- package/esm2015/lib/_pipes/object-to-array/object-to-array.pipe.js +24 -0
- package/esm2015/lib/_pipes/object-to-array/object-to-array.pipe.module.js +22 -0
- package/esm2015/lib/_pipes/pipe-duration-transform/pipe-duration-transform.module.js +22 -0
- package/esm2015/lib/_pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +84 -0
- package/esm2015/lib/_pipes/pipe-public-URL/pipe-public-URL.module.js +22 -0
- package/esm2015/lib/_pipes/pipe-public-URL/pipe-public-URL.pipe.js +24 -0
- package/esm2015/lib/_services/certificate.service.js +27 -0
- package/esm2015/lib/_services/common-methods.service.js +52 -0
- package/esm2015/lib/_services/configurations.service.js +106 -0
- package/esm2015/lib/_services/insite-data.service.js +56 -0
- package/esm2015/lib/_services/multilingual-translations.service.js +134 -0
- package/esm2015/lib/_services/rating.service.js +90 -0
- package/esm2015/lib/_services/viewer-route-util.js +100 -0
- package/esm2015/lib/_services/widget-content.service.js +477 -0
- package/esm2015/lib/_services/widget-user.service.js +300 -0
- package/esm2015/lib/consumption.component.js +26 -0
- package/esm2015/lib/consumption.config.js +7 -0
- package/esm2015/lib/consumption.module.js +56 -0
- package/esm2015/lib/consumption.service.js +14 -0
- package/esm2015/lib/registration-lib.config.js +15 -0
- package/esm2015/public-api.js +73 -0
- package/esm2015/sunbird-cb-consumption.js +5 -0
- package/fesm2015/sunbird-cb-consumption.js +11436 -0
- package/fesm2015/sunbird-cb-consumption.js.map +1 -0
- package/lib/_common/announcements/announcements.component.d.ts +25 -0
- package/lib/_common/announcements/announcements.component.d.ts.map +1 -0
- package/lib/_common/announcements/announcements.module.d.ts +11 -0
- package/lib/_common/announcements/announcements.module.d.ts.map +1 -0
- package/lib/_common/avatar-photo-lib/avatar-photo-lib.component.d.ts +24 -0
- package/lib/_common/avatar-photo-lib/avatar-photo-lib.component.d.ts.map +1 -0
- package/lib/_common/avatar-photo-lib/avatar-photo-lib.module.d.ts +15 -0
- package/lib/_common/avatar-photo-lib/avatar-photo-lib.module.d.ts.map +1 -0
- package/lib/_common/calender/calender-day/calender-day.component.d.ts +22 -0
- package/lib/_common/calender/calender-day/calender-day.component.d.ts.map +1 -0
- package/lib/_common/calender/calender.component.d.ts +38 -0
- package/lib/_common/calender/calender.component.d.ts.map +1 -0
- package/lib/_common/calender/calender.module.d.ts +14 -0
- package/lib/_common/calender/calender.module.d.ts.map +1 -0
- package/lib/_common/cards/card-assessment/card-assessment/card-assessment.component.d.ts +35 -0
- package/lib/_common/cards/card-assessment/card-assessment/card-assessment.component.d.ts.map +1 -0
- package/lib/_common/cards/card-karma-programs/card-karma-programs.component.d.ts +32 -0
- package/lib/_common/cards/card-karma-programs/card-karma-programs.component.d.ts.map +1 -0
- package/lib/_common/cards/card-karma-programs-v2/card-karma-programs-v2.component.d.ts +30 -0
- package/lib/_common/cards/card-karma-programs-v2/card-karma-programs-v2.component.d.ts.map +1 -0
- package/lib/_common/cards/card-landscape/card-landscape.component.d.ts +40 -0
- package/lib/_common/cards/card-landscape/card-landscape.component.d.ts.map +1 -0
- package/lib/_common/cards/card-mdo-channel/card-mdo-channel.component.d.ts +31 -0
- package/lib/_common/cards/card-mdo-channel/card-mdo-channel.component.d.ts.map +1 -0
- package/lib/_common/cards/card-mdo-channel-v1/card-mdo-channel-v1.component.d.ts +31 -0
- package/lib/_common/cards/card-mdo-channel-v1/card-mdo-channel-v1.component.d.ts.map +1 -0
- package/lib/_common/cards/card-portrait/card-portrait.component.d.ts +37 -0
- package/lib/_common/cards/card-portrait/card-portrait.component.d.ts.map +1 -0
- package/lib/_common/cards/card-portrait-ext/card-portrait-ext.component.d.ts +37 -0
- package/lib/_common/cards/card-portrait-ext/card-portrait-ext.component.d.ts.map +1 -0
- package/lib/_common/cards/card-progress-portrait-lib/card-progress-portrait-lib.component.d.ts +46 -0
- package/lib/_common/cards/card-progress-portrait-lib/card-progress-portrait-lib.component.d.ts.map +1 -0
- package/lib/_common/cards/card-resource/card-resource.component.d.ts +12 -0
- package/lib/_common/cards/card-resource/card-resource.component.d.ts.map +1 -0
- package/lib/_common/cards/card-user/card-user.component.d.ts +28 -0
- package/lib/_common/cards/card-user/card-user.component.d.ts.map +1 -0
- package/lib/_common/cards/card-wide/card-wide.component.d.ts +34 -0
- package/lib/_common/cards/card-wide/card-wide.component.d.ts.map +1 -0
- package/lib/_common/cards/card-wide-v2/card-wide-v2.component.d.ts +38 -0
- package/lib/_common/cards/card-wide-v2/card-wide-v2.component.d.ts.map +1 -0
- package/lib/_common/cards/cards.component.d.ts +30 -0
- package/lib/_common/cards/cards.component.d.ts.map +1 -0
- package/lib/_common/cards/cards.module.d.ts +39 -0
- package/lib/_common/cards/cards.module.d.ts.map +1 -0
- package/lib/_common/cards/provider-card/provider-card.component.d.ts +18 -0
- package/lib/_common/cards/provider-card/provider-card.component.d.ts.map +1 -0
- package/lib/_common/cbp-plan/cbp-plan.component.d.ts +29 -0
- package/lib/_common/cbp-plan/cbp-plan.component.d.ts.map +1 -0
- package/lib/_common/cbp-plan/cbp-plan.module.d.ts +13 -0
- package/lib/_common/cbp-plan/cbp-plan.module.d.ts.map +1 -0
- package/lib/_common/common-strip/common-strip.component.d.ts +108 -0
- package/lib/_common/common-strip/common-strip.component.d.ts.map +1 -0
- package/lib/_common/common-strip/common-strip.model.d.ts +143 -0
- package/lib/_common/common-strip/common-strip.model.d.ts.map +1 -0
- package/lib/_common/common-strip/common-strip.module.d.ts +36 -0
- package/lib/_common/common-strip/common-strip.module.d.ts.map +1 -0
- package/lib/_common/competency-passbook/competency-passbook.component.d.ts +52 -0
- package/lib/_common/competency-passbook/competency-passbook.component.d.ts.map +1 -0
- package/lib/_common/competency-passbook/competency-passbook.module.d.ts +12 -0
- package/lib/_common/competency-passbook/competency-passbook.module.d.ts.map +1 -0
- package/lib/_common/competency-passbook/competency-passbook.service.d.ts +13 -0
- package/lib/_common/competency-passbook/competency-passbook.service.d.ts.map +1 -0
- package/lib/_common/competency-passbook-mdo/competency-passbook-mdo.component.d.ts +50 -0
- package/lib/_common/competency-passbook-mdo/competency-passbook-mdo.component.d.ts.map +1 -0
- package/lib/_common/competency-passbook-mdo/competency-passbook-mdo.module.d.ts +12 -0
- package/lib/_common/competency-passbook-mdo/competency-passbook-mdo.module.d.ts.map +1 -0
- package/lib/_common/competency-passbook-mdo/competency-passbook-mdo.service.d.ts +13 -0
- package/lib/_common/competency-passbook-mdo/competency-passbook-mdo.service.d.ts.map +1 -0
- package/lib/_common/content-progress/content-progress.component.d.ts +17 -0
- package/lib/_common/content-progress/content-progress.component.d.ts.map +1 -0
- package/lib/_common/content-progress/content-progress.module.d.ts +11 -0
- package/lib/_common/content-progress/content-progress.module.d.ts.map +1 -0
- package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.d.ts +207 -0
- package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.d.ts.map +1 -0
- package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.model.d.ts +151 -0
- package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.model.d.ts.map +1 -0
- package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.module.d.ts +39 -0
- package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.module.d.ts.map +1 -0
- package/lib/_common/data-points/data-points.component.d.ts +24 -0
- package/lib/_common/data-points/data-points.component.d.ts.map +1 -0
- package/lib/_common/data-points/data-points.module.d.ts +10 -0
- package/lib/_common/data-points/data-points.module.d.ts.map +1 -0
- package/lib/_common/dialog-components/certificate-dialog/certificate-dialog.component.d.ts +26 -0
- package/lib/_common/dialog-components/certificate-dialog/certificate-dialog.component.d.ts.map +1 -0
- package/lib/_common/dialog-components/dialog-components.module.d.ts +15 -0
- package/lib/_common/dialog-components/dialog-components.module.d.ts.map +1 -0
- package/lib/_common/display-content-type-lib/display-content-type-lib.component.d.ts +16 -0
- package/lib/_common/display-content-type-lib/display-content-type-lib.component.d.ts.map +1 -0
- package/lib/_common/display-content-type-lib/display-content-type-lib.module.d.ts +10 -0
- package/lib/_common/display-content-type-lib/display-content-type-lib.module.d.ts.map +1 -0
- package/lib/_common/events/event-card/event-card.component.d.ts +17 -0
- package/lib/_common/events/event-card/event-card.component.d.ts.map +1 -0
- package/lib/_common/events/events.component.d.ts +21 -0
- package/lib/_common/events/events.component.d.ts.map +1 -0
- package/lib/_common/events/events.module.d.ts +13 -0
- package/lib/_common/events/events.module.d.ts.map +1 -0
- package/lib/_common/highlights-of-week/highlights-of-week.component.d.ts +18 -0
- package/lib/_common/highlights-of-week/highlights-of-week.component.d.ts.map +1 -0
- package/lib/_common/highlights-of-week/highlights-of-week.module.d.ts +13 -0
- package/lib/_common/highlights-of-week/highlights-of-week.module.d.ts.map +1 -0
- package/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.component.d.ts +37 -0
- package/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.component.d.ts.map +1 -0
- package/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.module.d.ts +12 -0
- package/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.module.d.ts.map +1 -0
- package/lib/_common/key-highlights/key-highlights.component.d.ts +20 -0
- package/lib/_common/key-highlights/key-highlights.component.d.ts.map +1 -0
- package/lib/_common/key-highlights/key-highlights.module.d.ts +12 -0
- package/lib/_common/key-highlights/key-highlights.module.d.ts.map +1 -0
- package/lib/_common/mdo-leaderboard/mdo-leaderboard.component.d.ts +24 -0
- package/lib/_common/mdo-leaderboard/mdo-leaderboard.component.d.ts.map +1 -0
- package/lib/_common/mdo-leaderboard/mdo-leaderboard.module.d.ts +13 -0
- package/lib/_common/mdo-leaderboard/mdo-leaderboard.module.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/mdo-channel-v1/mdo-channel-v1.component.d.ts +9 -0
- package/lib/_common/microsites/mdo-channels/mdo-channel-v1/mdo-channel-v1.component.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/mdo-channel-v2/mdo-channel-v2.component.d.ts +46 -0
- package/lib/_common/microsites/mdo-channels/mdo-channel-v2/mdo-channel-v2.component.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/mdo-channel.module.d.ts +25 -0
- package/lib/_common/microsites/mdo-channels/mdo-channel.module.d.ts.map +1 -0
- package/lib/_common/microsites/national-learning-week/national-learning/national-learning.component.d.ts +24 -0
- package/lib/_common/microsites/national-learning-week/national-learning/national-learning.component.d.ts.map +1 -0
- package/lib/_common/microsites/national-learning-week/national-learning.module.d.ts +23 -0
- package/lib/_common/microsites/national-learning-week/national-learning.module.d.ts.map +1 -0
- package/lib/_common/microsites/providers/providers-v2/providers-v2.component.d.ts +40 -0
- package/lib/_common/microsites/providers/providers-v2/providers-v2.component.d.ts.map +1 -0
- package/lib/_common/microsites/providers/providers.module.d.ts +23 -0
- package/lib/_common/microsites/providers/providers.module.d.ts.map +1 -0
- package/lib/_common/pills/pills.component.d.ts +17 -0
- package/lib/_common/pills/pills.component.d.ts.map +1 -0
- package/lib/_common/pills/pills.module.d.ts +12 -0
- package/lib/_common/pills/pills.module.d.ts.map +1 -0
- package/lib/_common/skeleton-loader-lib/skeleton-loader-lib.component.d.ts +12 -0
- package/lib/_common/skeleton-loader-lib/skeleton-loader-lib.component.d.ts.map +1 -0
- package/lib/_common/skeleton-loader-lib/skeleton-loader-lib.module.d.ts +12 -0
- package/lib/_common/skeleton-loader-lib/skeleton-loader-lib.module.d.ts.map +1 -0
- package/lib/_common/sliders/sliders.component.d.ts +31 -0
- package/lib/_common/sliders/sliders.component.d.ts.map +1 -0
- package/lib/_common/sliders/sliders.model.d.ts +41 -0
- package/lib/_common/sliders/sliders.model.d.ts.map +1 -0
- package/lib/_common/sliders/sliders.module.d.ts +13 -0
- package/lib/_common/sliders/sliders.module.d.ts.map +1 -0
- package/lib/_common/sliders-ng-content/sliders-ng-content.component.d.ts +34 -0
- package/lib/_common/sliders-ng-content/sliders-ng-content.component.d.ts.map +1 -0
- package/lib/_common/sliders-ng-content/sliders-ng-content.model.d.ts +35 -0
- package/lib/_common/sliders-ng-content/sliders-ng-content.model.d.ts.map +1 -0
- package/lib/_common/sliders-ng-content/sliders-ng-content.module.d.ts +13 -0
- package/lib/_common/sliders-ng-content/sliders-ng-content.module.d.ts.map +1 -0
- package/lib/_common/speakers/speakers.component.d.ts +19 -0
- package/lib/_common/speakers/speakers.component.d.ts.map +1 -0
- package/lib/_common/speakers/speakers.module.d.ts +13 -0
- package/lib/_common/speakers/speakers.module.d.ts.map +1 -0
- package/lib/_common/strips/content-strip-facet-filter/content-strip-facet-filter.component.d.ts +135 -0
- package/lib/_common/strips/content-strip-facet-filter/content-strip-facet-filter.component.d.ts.map +1 -0
- package/lib/_common/strips/content-strip-facet-filter/content-strip-facet-filter.model.d.ts +159 -0
- package/lib/_common/strips/content-strip-facet-filter/content-strip-facet-filter.model.d.ts.map +1 -0
- package/lib/_common/strips/content-strip-facet-filter/content-strip-facet-filter.module.d.ts +37 -0
- package/lib/_common/strips/content-strip-facet-filter/content-strip-facet-filter.module.d.ts.map +1 -0
- package/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.component.d.ts +165 -0
- package/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.component.d.ts.map +1 -0
- package/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.model.d.ts +151 -0
- package/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.model.d.ts.map +1 -0
- package/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.module.d.ts +39 -0
- package/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.module.d.ts.map +1 -0
- package/lib/_common/top-learners/top-learners.component.d.ts +22 -0
- package/lib/_common/top-learners/top-learners.component.d.ts.map +1 -0
- package/lib/_common/top-learners/top-learners.module.d.ts +11 -0
- package/lib/_common/top-learners/top-learners.module.d.ts.map +1 -0
- package/lib/_common/user-content-rating/user-content-rating-lib.component.d.ts +26 -0
- package/lib/_common/user-content-rating/user-content-rating-lib.component.d.ts.map +1 -0
- package/lib/_common/user-content-rating/user-content-rating-lib.module.d.ts +17 -0
- package/lib/_common/user-content-rating/user-content-rating-lib.module.d.ts.map +1 -0
- package/lib/_common/user-content-rating/user-content-rating-lib.service.d.ts +11 -0
- package/lib/_common/user-content-rating/user-content-rating-lib.service.d.ts.map +1 -0
- package/lib/_common/user-progress/user-progress.component.d.ts +28 -0
- package/lib/_common/user-progress/user-progress.component.d.ts.map +1 -0
- package/lib/_common/user-progress/user-progress.module.d.ts +13 -0
- package/lib/_common/user-progress/user-progress.module.d.ts.map +1 -0
- package/lib/_constants/misc.constants.d.ts +3 -0
- package/lib/_constants/misc.constants.d.ts.map +1 -0
- package/lib/_directives/default-thumbnail/default-thumbnail.directive.d.ts +13 -0
- package/lib/_directives/default-thumbnail/default-thumbnail.directive.d.ts.map +1 -0
- package/lib/_directives/default-thumbnail/default-thumbnail.module.d.ts +9 -0
- package/lib/_directives/default-thumbnail/default-thumbnail.module.d.ts.map +1 -0
- package/lib/_directives/image-responsive/image-responsive.directive.d.ts +21 -0
- package/lib/_directives/image-responsive/image-responsive.directive.d.ts.map +1 -0
- package/lib/_directives/image-responsive/image-responsive.module.d.ts +9 -0
- package/lib/_directives/image-responsive/image-responsive.module.d.ts.map +1 -0
- package/lib/_directives/navigation/navigation.directive.d.ts +13 -0
- package/lib/_directives/navigation/navigation.directive.d.ts.map +1 -0
- package/lib/_directives/navigation/navigation.module.d.ts +9 -0
- package/lib/_directives/navigation/navigation.module.d.ts.map +1 -0
- package/lib/_directives/scrollable-item/scrollable-item.directive.d.ts +11 -0
- package/lib/_directives/scrollable-item/scrollable-item.directive.d.ts.map +1 -0
- package/lib/_directives/scrollable-item/scrollable-item.module.d.ts +9 -0
- package/lib/_directives/scrollable-item/scrollable-item.module.d.ts.map +1 -0
- package/lib/_models/card-content-v2.model.d.ts +45 -0
- package/lib/_models/card-content-v2.model.d.ts.map +1 -0
- package/lib/_models/card-content.model.d.ts +42 -0
- package/lib/_models/card-content.model.d.ts.map +1 -0
- package/lib/_models/card-users.model.d.ts +51 -0
- package/lib/_models/card-users.model.d.ts.map +1 -0
- package/lib/_models/compentencies.model.d.ts +10 -0
- package/lib/_models/compentencies.model.d.ts.map +1 -0
- package/lib/_models/content-strip-multiple.model.d.ts +130 -0
- package/lib/_models/content-strip-multiple.model.d.ts.map +1 -0
- package/lib/_models/event.d.ts +19 -0
- package/lib/_models/event.d.ts.map +1 -0
- package/lib/_models/profile-v3.models.d.ts +92 -0
- package/lib/_models/profile-v3.models.d.ts.map +1 -0
- package/lib/_models/rating.model.d.ts +18 -0
- package/lib/_models/rating.model.d.ts.map +1 -0
- package/lib/_models/widget-content.model.d.ts +499 -0
- package/lib/_models/widget-content.model.d.ts.map +1 -0
- package/lib/_models/widget-search.model.d.ts +253 -0
- package/lib/_models/widget-search.model.d.ts.map +1 -0
- package/lib/_models/widget-user.model.d.ts +6 -0
- package/lib/_models/widget-user.model.d.ts.map +1 -0
- package/lib/_pipes/object-to-array/object-to-array.pipe.d.ts +8 -0
- package/lib/_pipes/object-to-array/object-to-array.pipe.d.ts.map +1 -0
- package/lib/_pipes/object-to-array/object-to-array.pipe.module.d.ts +9 -0
- package/lib/_pipes/object-to-array/object-to-array.pipe.module.d.ts.map +1 -0
- package/lib/_pipes/pipe-duration-transform/pipe-duration-transform.module.d.ts +9 -0
- package/lib/_pipes/pipe-duration-transform/pipe-duration-transform.module.d.ts.map +1 -0
- package/lib/_pipes/pipe-duration-transform/pipe-duration-transform.pipe.d.ts +10 -0
- package/lib/_pipes/pipe-duration-transform/pipe-duration-transform.pipe.d.ts.map +1 -0
- package/lib/_pipes/pipe-public-URL/pipe-public-URL.module.d.ts +9 -0
- package/lib/_pipes/pipe-public-URL/pipe-public-URL.module.d.ts.map +1 -0
- package/lib/_pipes/pipe-public-URL/pipe-public-URL.pipe.d.ts +10 -0
- package/lib/_pipes/pipe-public-URL/pipe-public-URL.pipe.d.ts.map +1 -0
- package/lib/_services/certificate.service.d.ts +12 -0
- package/lib/_services/certificate.service.d.ts.map +1 -0
- package/lib/_services/common-methods.service.d.ts +43 -0
- package/lib/_services/common-methods.service.d.ts.map +1 -0
- package/lib/_services/configurations.service.d.ts +75 -0
- package/lib/_services/configurations.service.d.ts.map +1 -0
- package/lib/_services/insite-data.service.d.ts +19 -0
- package/lib/_services/insite-data.service.d.ts.map +1 -0
- package/lib/_services/multilingual-translations.service.d.ts +24 -0
- package/lib/_services/multilingual-translations.service.d.ts.map +1 -0
- package/lib/_services/rating.service.d.ts +19 -0
- package/lib/_services/rating.service.d.ts.map +1 -0
- package/lib/_services/viewer-route-util.d.ts +9 -0
- package/lib/_services/viewer-route-util.d.ts.map +1 -0
- package/lib/_services/widget-content.service.d.ts +91 -0
- package/lib/_services/widget-content.service.d.ts.map +1 -0
- package/lib/_services/widget-user.service.d.ts +37 -0
- package/lib/_services/widget-user.service.d.ts.map +1 -0
- package/lib/consumption.component.d.ts +9 -0
- package/lib/consumption.component.d.ts.map +1 -0
- package/lib/consumption.config.d.ts +7 -0
- package/lib/consumption.config.d.ts.map +1 -0
- package/lib/consumption.module.d.ts +16 -0
- package/lib/consumption.module.d.ts.map +1 -0
- package/lib/consumption.service.d.ts +7 -0
- package/lib/consumption.service.d.ts.map +1 -0
- package/lib/registration-lib.config.d.ts +5 -0
- package/lib/registration-lib.config.d.ts.map +1 -0
- package/package.json +21 -0
- package/public-api.d.ts +70 -0
- package/public-api.d.ts.map +1 -0
- package/sunbird-cb-consumption.d.ts +6 -0
- package/sunbird-cb-consumption.d.ts.map +1 -0
|
@@ -0,0 +1,684 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Component, Input, HostBinding, Inject, EventEmitter, Output } from '@angular/core';
|
|
3
|
+
import { WidgetBaseComponent } from '@sunbird-cb/resolver-v2';
|
|
4
|
+
import { ApiRequestFor } from './content-strip-facet-filter.model';
|
|
5
|
+
import { WsEvents, } from '@sunbird-cb/utils-v2';
|
|
6
|
+
import { filter } from 'rxjs/operators';
|
|
7
|
+
// import { environment } from 'src/environments/environment'
|
|
8
|
+
// tslint:disable-next-line
|
|
9
|
+
import * as _ from 'lodash';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "../../../_services/widget-content.service";
|
|
12
|
+
import * as i2 from "@sunbird-cb/utils-v2";
|
|
13
|
+
import * as i3 from "@angular/router";
|
|
14
|
+
import * as i4 from "../../../_services/widget-user.service";
|
|
15
|
+
import * as i5 from "@ngx-translate/core";
|
|
16
|
+
import * as i6 from "../../../_services/multilingual-translations.service";
|
|
17
|
+
import * as i7 from "@angular/forms";
|
|
18
|
+
import * as i8 from "@angular/material/button";
|
|
19
|
+
import * as i9 from "@angular/material/icon";
|
|
20
|
+
import * as i10 from "@angular/material/tabs";
|
|
21
|
+
import * as i11 from "@angular/material/chips";
|
|
22
|
+
import * as i12 from "../../horizontal-scroller-v2/horizontal-scroller-v2.component";
|
|
23
|
+
import * as i13 from "@angular/common";
|
|
24
|
+
import * as i14 from "@sunbird-cb/resolver-v2";
|
|
25
|
+
import * as i15 from "@angular/material/tooltip";
|
|
26
|
+
export class ContentStripFacetFilterComponent extends WidgetBaseComponent {
|
|
27
|
+
constructor(environment, contentSvc, loggerSvc, eventSvc, configSvc, utilitySvc, router, userSvc, translate, langtranslations, _fb) {
|
|
28
|
+
super();
|
|
29
|
+
this.contentSvc = contentSvc;
|
|
30
|
+
this.loggerSvc = loggerSvc;
|
|
31
|
+
this.eventSvc = eventSvc;
|
|
32
|
+
this.configSvc = configSvc;
|
|
33
|
+
this.utilitySvc = utilitySvc;
|
|
34
|
+
this.router = router;
|
|
35
|
+
this.userSvc = userSvc;
|
|
36
|
+
this.translate = translate;
|
|
37
|
+
this.langtranslations = langtranslations;
|
|
38
|
+
this._fb = _fb;
|
|
39
|
+
this.emptyResponse = new EventEmitter();
|
|
40
|
+
this.viewAllResponse = new EventEmitter();
|
|
41
|
+
this.telemtryResponse = new EventEmitter();
|
|
42
|
+
this.providerId = '';
|
|
43
|
+
this.emitViewAll = false;
|
|
44
|
+
this.channnelName = '';
|
|
45
|
+
this.id = `ws-strip-miltiple_${Math.random()}`;
|
|
46
|
+
this.stripsResultDataMap = {};
|
|
47
|
+
this.stripsKeyOrder = [];
|
|
48
|
+
this.showAccordionData = true;
|
|
49
|
+
this.showParentLoader = false;
|
|
50
|
+
this.showParentError = false;
|
|
51
|
+
this.showParentNoData = false;
|
|
52
|
+
this.errorDataCount = 0;
|
|
53
|
+
this.noDataCount = 0;
|
|
54
|
+
this.successDataCount = 0;
|
|
55
|
+
this.contentAvailable = true;
|
|
56
|
+
this.baseUrl = this.configSvc.sitePath || '';
|
|
57
|
+
this.veifiedKarmayogi = false;
|
|
58
|
+
this.changeEventSubscription = null;
|
|
59
|
+
this.defaultMaxWidgets = 12;
|
|
60
|
+
this.todaysEvents = [];
|
|
61
|
+
if (localStorage.getItem('websiteLanguage')) {
|
|
62
|
+
this.translate.setDefaultLang('en');
|
|
63
|
+
let lang = JSON.stringify(localStorage.getItem('websiteLanguage'));
|
|
64
|
+
lang = lang.replace(/\"/g, '');
|
|
65
|
+
this.translate.use(lang);
|
|
66
|
+
}
|
|
67
|
+
this.environment = environment;
|
|
68
|
+
}
|
|
69
|
+
ngOnDestroy() {
|
|
70
|
+
}
|
|
71
|
+
ngOnInit() {
|
|
72
|
+
this.initData();
|
|
73
|
+
this.contentSvc.telemetryData$.subscribe((data) => {
|
|
74
|
+
this.telemtryResponse.emit(data);
|
|
75
|
+
});
|
|
76
|
+
this.facetForm = this._fb.group({
|
|
77
|
+
org: ['0']
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
initData() {
|
|
81
|
+
this.stripsKeyOrder = this.widgetData && this.widgetData.strips && this.widgetData.strips.map(strip => strip.key) || [];
|
|
82
|
+
if (this.widgetData.loader && this.widgetData.strips.length) {
|
|
83
|
+
this.showParentLoader = true;
|
|
84
|
+
}
|
|
85
|
+
// Fetch the data
|
|
86
|
+
for (const strip of this.widgetData.strips) {
|
|
87
|
+
if (this.checkForEmptyWidget(strip)) {
|
|
88
|
+
this.fetchStripFromRequestData(strip, false);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
this.processStrip(strip, [], 'done', true, null);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Subscription for changes
|
|
95
|
+
const keyAndEvent = this.widgetData.strips
|
|
96
|
+
.map(strip => ({
|
|
97
|
+
key: strip.key,
|
|
98
|
+
type: (strip.refreshEvent && strip.refreshEvent.eventType) || '',
|
|
99
|
+
from: (strip.refreshEvent && strip.refreshEvent.from.toString()) || '',
|
|
100
|
+
}))
|
|
101
|
+
.filter(({ key, type, from }) => key && type && from);
|
|
102
|
+
const eventTypeSet = new Set(keyAndEvent.map(e => e.type));
|
|
103
|
+
this.changeEventSubscription = this.eventSvc.events$
|
|
104
|
+
.pipe(filter(event => eventTypeSet.has(event.eventType)))
|
|
105
|
+
.subscribe(event => {
|
|
106
|
+
keyAndEvent
|
|
107
|
+
.filter(e => e.type === event.eventType && e.from === event.from)
|
|
108
|
+
.map(e => e.key)
|
|
109
|
+
.forEach(k => this.fetchStripFromKey(k, false));
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
fetchStripFromKey(key, calculateParentStatus = true) {
|
|
113
|
+
const stripData = this.widgetData.strips.find(strip => strip.key === key);
|
|
114
|
+
if (stripData) {
|
|
115
|
+
this.fetchStripFromRequestData(stripData, calculateParentStatus);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
fetchStripFromRequestData(strip, calculateParentStatus = true) {
|
|
119
|
+
// setting initial values
|
|
120
|
+
strip.loaderWidgets = this.transformSkeletonToWidgets(strip);
|
|
121
|
+
this.processStrip(strip, [], 'fetching', false, null);
|
|
122
|
+
if (strip && strip.stripRequestFor === ApiRequestFor.SEARCH && !strip.onTabClickRequest) {
|
|
123
|
+
this.fetchFromSearch(strip, calculateParentStatus);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
transformSkeletonToWidgets(strip) {
|
|
127
|
+
return [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10].map(_content => ({
|
|
128
|
+
widgetType: 'cardLib',
|
|
129
|
+
widgetSubType: 'cardContentLib',
|
|
130
|
+
widgetHostClass: 'mb-2',
|
|
131
|
+
widgetData: {
|
|
132
|
+
cardSubType: strip.loaderConfig && strip.loaderConfig.cardSubType || 'card-standard-skeleton',
|
|
133
|
+
cardCustomeClass: strip.customeClass ? strip.customeClass : '',
|
|
134
|
+
},
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
processStrip(strip, results = [], fetchStatus, calculateParentStatus = true, _viewMoreUrl, tabsResults) {
|
|
138
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
+
const stripData = {
|
|
140
|
+
viewMoreUrl: strip.viewMoreUrl,
|
|
141
|
+
key: strip.key,
|
|
142
|
+
canHideStrip: Boolean(strip.canHideStrip),
|
|
143
|
+
showStrip: this.getIfStripHidden(strip.key),
|
|
144
|
+
noDataWidget: strip.noDataWidget,
|
|
145
|
+
errorWidget: strip.errorWidget,
|
|
146
|
+
stripInfo: strip.info,
|
|
147
|
+
stripTitle: strip.title,
|
|
148
|
+
stripTitleLink: strip.stripTitleLink,
|
|
149
|
+
disableTranslate: strip.disableTranslate,
|
|
150
|
+
sliderConfig: strip.sliderConfig,
|
|
151
|
+
tabs: tabsResults ? tabsResults : strip.tabs,
|
|
152
|
+
stripName: strip.name,
|
|
153
|
+
mode: strip.mode,
|
|
154
|
+
stripConfig: strip.stripConfig,
|
|
155
|
+
stripBackground: strip.stripBackground,
|
|
156
|
+
secondaryHeading: strip.secondaryHeading,
|
|
157
|
+
loaderWidgets: strip.loaderWidgets || [],
|
|
158
|
+
hideViewMoreUrl: strip.hideViewMoreUrl || false,
|
|
159
|
+
widgets: fetchStatus === 'done'
|
|
160
|
+
? [
|
|
161
|
+
...(strip.preWidgets || []).map(w => (Object.assign(Object.assign({}, w), { widgetHostClass: `mb-2 ${w.widgetHostClass}` }))),
|
|
162
|
+
...results,
|
|
163
|
+
...(strip.postWidgets || []).map(w => (Object.assign(Object.assign({}, w), { widgetHostClass: `mb-2 ${w.widgetHostClass}` }))),
|
|
164
|
+
]
|
|
165
|
+
: [],
|
|
166
|
+
showOnNoData: Boolean(strip.noDataWidget &&
|
|
167
|
+
!((strip.preWidgets || []).length + results.length + (strip.postWidgets || []).length) &&
|
|
168
|
+
fetchStatus === 'done'),
|
|
169
|
+
showOnLoader: Boolean(strip.loader && fetchStatus === 'fetching'),
|
|
170
|
+
showOnError: Boolean(strip.errorWidget && fetchStatus === 'error'),
|
|
171
|
+
};
|
|
172
|
+
// const stripData = this.stripsResultDataMap[strip.key]
|
|
173
|
+
this.stripsResultDataMap = Object.assign(Object.assign({}, this.stripsResultDataMap), { [strip.key]: stripData });
|
|
174
|
+
if (!tabsResults) {
|
|
175
|
+
if (calculateParentStatus &&
|
|
176
|
+
(fetchStatus === 'done' || fetchStatus === 'error') &&
|
|
177
|
+
stripData.widgets) {
|
|
178
|
+
this.checkParentStatus(fetchStatus, stripData.widgets.length);
|
|
179
|
+
}
|
|
180
|
+
if (calculateParentStatus && !(results && results.length > 0)) {
|
|
181
|
+
this.contentAvailable = false;
|
|
182
|
+
}
|
|
183
|
+
else if (results && results.length > 0) {
|
|
184
|
+
this.contentAvailable = true;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
this.contentAvailable = true;
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
checkParentStatus(fetchStatus, stripWidgetsCount) {
|
|
193
|
+
if (fetchStatus === 'done' && !stripWidgetsCount) {
|
|
194
|
+
this.noDataCount += 1;
|
|
195
|
+
}
|
|
196
|
+
else if (fetchStatus === 'done' && stripWidgetsCount) {
|
|
197
|
+
this.successDataCount += 1;
|
|
198
|
+
}
|
|
199
|
+
else if (fetchStatus === 'error') {
|
|
200
|
+
this.errorDataCount += 1;
|
|
201
|
+
}
|
|
202
|
+
const settledCount = this.noDataCount + this.successDataCount + this.errorDataCount;
|
|
203
|
+
const totalCount = this.widgetData.strips.length;
|
|
204
|
+
if (this.successDataCount > 0 && settledCount < totalCount) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
this.showParentLoader = settledCount !== totalCount;
|
|
208
|
+
this.showParentNoData =
|
|
209
|
+
this.noDataCount > 0 && this.noDataCount + this.errorDataCount === totalCount;
|
|
210
|
+
this.showParentError = this.errorDataCount === totalCount;
|
|
211
|
+
}
|
|
212
|
+
checkForEmptyWidget(strip) {
|
|
213
|
+
if (strip.request &&
|
|
214
|
+
((strip.request.requestBody && Object.keys(strip.request.requestBody).length))) {
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
// strip settings
|
|
220
|
+
toggleInfo(data) {
|
|
221
|
+
const stripInfo = this.stripsResultDataMap[data.key].stripInfo;
|
|
222
|
+
if (stripInfo) {
|
|
223
|
+
if (stripInfo.mode !== 'below') {
|
|
224
|
+
this.loggerSvc.warn(`strip info mode: ${stripInfo.mode} not implemented yet`);
|
|
225
|
+
stripInfo.mode = 'below';
|
|
226
|
+
}
|
|
227
|
+
if (stripInfo.mode === 'below') {
|
|
228
|
+
this.stripsResultDataMap[data.key].stripInfo = Object.assign(Object.assign({}, stripInfo), { visibilityMode: stripInfo.visibilityMode === 'hidden' ? 'visible' : 'hidden' });
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
raiseTelemetry(stripData) {
|
|
233
|
+
this.telemtryResponse.emit(stripData);
|
|
234
|
+
}
|
|
235
|
+
setHiddenForStrip(key) {
|
|
236
|
+
this.stripsResultDataMap[key].showStrip = false;
|
|
237
|
+
sessionStorage.setItem(`cstrip_${key}`, '1');
|
|
238
|
+
}
|
|
239
|
+
// selected pills data
|
|
240
|
+
getSelectedPillIndex(tabdata, tabIndex) {
|
|
241
|
+
if (tabdata.pillsData && tabdata.pillsData.length) {
|
|
242
|
+
let index = tabdata.pillsData.findIndex((pill) => {
|
|
243
|
+
return pill.selected;
|
|
244
|
+
});
|
|
245
|
+
return index;
|
|
246
|
+
}
|
|
247
|
+
return 0;
|
|
248
|
+
}
|
|
249
|
+
getdata(data) {
|
|
250
|
+
if (data.stripInfo) {
|
|
251
|
+
return data.stripInfo.widget;
|
|
252
|
+
}
|
|
253
|
+
return {};
|
|
254
|
+
}
|
|
255
|
+
tabClicked(tabEvent, pillIndex, stripMap, stripKey) {
|
|
256
|
+
if (stripMap && stripMap.tabs && stripMap.tabs[tabEvent.index]) {
|
|
257
|
+
stripMap.tabs[tabEvent.index].pillsData[pillIndex].fetchTabStatus = 'inprogress';
|
|
258
|
+
stripMap.tabs[tabEvent.index].pillsData[pillIndex].tabLoading = true;
|
|
259
|
+
stripMap.showOnLoader = true;
|
|
260
|
+
}
|
|
261
|
+
const data = {
|
|
262
|
+
label: `${tabEvent.tab.textLabel}`,
|
|
263
|
+
index: tabEvent.index,
|
|
264
|
+
};
|
|
265
|
+
this.eventSvc.raiseInteractTelemetry({
|
|
266
|
+
type: WsEvents.EnumInteractTypes.CLICK,
|
|
267
|
+
subType: WsEvents.EnumInteractSubTypes.HOME_PAGE_STRIP_TABS,
|
|
268
|
+
id: `${_.camelCase(data.label)}-tab`,
|
|
269
|
+
}, {}, {
|
|
270
|
+
module: WsEvents.EnumTelemetrymodules.HOME,
|
|
271
|
+
});
|
|
272
|
+
const currentTabFromMap = stripMap.tabs && stripMap.tabs[tabEvent.index];
|
|
273
|
+
const currentPillFromMap = stripMap.tabs && stripMap.tabs[tabEvent.index].pillsData[pillIndex];
|
|
274
|
+
const currentStrip = this.widgetData.strips.find(s => s.key === stripKey);
|
|
275
|
+
if (this.stripsResultDataMap[stripKey] && currentTabFromMap) {
|
|
276
|
+
this.stripsResultDataMap[stripKey].viewMoreUrl.queryParams = Object.assign(Object.assign({}, this.stripsResultDataMap[stripKey].viewMoreUrl.queryParams), { tabSelected: currentTabFromMap.value, pillSelected: currentPillFromMap.value });
|
|
277
|
+
}
|
|
278
|
+
if (currentStrip && currentTabFromMap && !currentTabFromMap.computeDataOnClick && currentPillFromMap) {
|
|
279
|
+
if (currentPillFromMap.requestRequired && currentPillFromMap.request) {
|
|
280
|
+
if (currentPillFromMap.request.searchV6) {
|
|
281
|
+
// this.getTabDataByNewReqSearchV6(currentStrip, tabEvent.index, currentTabFromMap, true);
|
|
282
|
+
}
|
|
283
|
+
stripMap.tabs[tabEvent.index].pillsData[pillIndex].tabLoading = false;
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
this.getTabDataByfilter(currentStrip, currentTabFromMap, true);
|
|
287
|
+
if (stripMap && stripMap.tabs && stripMap.tabs[tabEvent.index]) {
|
|
288
|
+
stripMap.tabs[tabEvent.index].pillsData[pillIndex].fetchTabStatus = 'inprogress';
|
|
289
|
+
stripMap.tabs[tabEvent.index].pillsData[pillIndex].tabLoading = false;
|
|
290
|
+
stripMap.showOnLoader = true;
|
|
291
|
+
this.resetFilter(stripMap, tabEvent.index, pillIndex);
|
|
292
|
+
}
|
|
293
|
+
setTimeout(() => {
|
|
294
|
+
if (stripMap && stripMap.tabs && stripMap.tabs[tabEvent.index]) {
|
|
295
|
+
stripMap.tabs[tabEvent.index].pillsData[pillIndex].fetchTabStatus = 'done';
|
|
296
|
+
stripMap.tabs[tabEvent.index].pillsData[pillIndex].tabLoading = false;
|
|
297
|
+
stripMap.showOnLoader = false;
|
|
298
|
+
this.resetSelectedPill(stripMap.tabs[tabEvent.index].pillsData);
|
|
299
|
+
stripMap.tabs[tabEvent.index].pillsData[pillIndex]['selected'] = true;
|
|
300
|
+
}
|
|
301
|
+
}, 200);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
pillClicked(event, stripMap, stripKey, pillIndex, tabIndex) {
|
|
306
|
+
if (stripMap && stripMap.tabs && stripMap.tabs[tabIndex]) {
|
|
307
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].fetchTabStatus = 'inprogress';
|
|
308
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].tabLoading = true;
|
|
309
|
+
stripMap.showOnLoader = true;
|
|
310
|
+
}
|
|
311
|
+
const currentTabFromMap = stripMap.tabs && stripMap.tabs[tabIndex];
|
|
312
|
+
const currentPillFromMap = stripMap.tabs && stripMap.tabs[tabIndex].pillsData[pillIndex];
|
|
313
|
+
const currentStrip = this.widgetData.strips.find(s => s.key === stripKey);
|
|
314
|
+
if (this.stripsResultDataMap[stripKey] && currentTabFromMap) {
|
|
315
|
+
this.stripsResultDataMap[stripKey].viewMoreUrl.queryParams = Object.assign(Object.assign({}, this.stripsResultDataMap[stripKey].viewMoreUrl.queryParams), { tabSelected: currentTabFromMap.value, pillSelected: currentPillFromMap.value });
|
|
316
|
+
}
|
|
317
|
+
if (currentStrip && currentTabFromMap && !currentTabFromMap.computeDataOnClick && currentPillFromMap) {
|
|
318
|
+
if (currentPillFromMap.requestRequired && currentPillFromMap.request) {
|
|
319
|
+
// call API to get tab data and process
|
|
320
|
+
// this.processStrip(currentStrip, [], 'fetching', true, null)
|
|
321
|
+
if (currentPillFromMap.request.searchV6) {
|
|
322
|
+
// this.getTabDataByNewReqSearchV6(currentStrip, tabIndex, pillIndex, currentPillFromMap, true);
|
|
323
|
+
}
|
|
324
|
+
else if (currentPillFromMap.request.trendingSearch) {
|
|
325
|
+
// this.getTabDataByNewReqTrending(currentStrip, tabIndex, pillIndex, currentPillFromMap, true);
|
|
326
|
+
}
|
|
327
|
+
// if (stripMap && stripMap.tabs && stripMap.tabs[tabEvent.index]) {
|
|
328
|
+
// stripMap.tabs[tabEvent.index].tabLoading = false;
|
|
329
|
+
// }
|
|
330
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].tabLoading = false;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
this.getTabDataByfilter(currentStrip, currentTabFromMap, true);
|
|
334
|
+
if (stripMap && stripMap.tabs && stripMap.tabs[tabIndex]) {
|
|
335
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].fetchTabStatus = 'inprogress';
|
|
336
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].tabLoading = false;
|
|
337
|
+
stripMap.showOnLoader = true;
|
|
338
|
+
this.resetFilter(stripMap, tabIndex, pillIndex);
|
|
339
|
+
}
|
|
340
|
+
setTimeout(() => {
|
|
341
|
+
if (stripMap && stripMap.tabs && stripMap.tabs[tabIndex]) {
|
|
342
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].fetchTabStatus = 'done';
|
|
343
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].tabLoading = false;
|
|
344
|
+
stripMap.showOnLoader = false;
|
|
345
|
+
this.resetSelectedPill(stripMap.tabs[tabIndex].pillsData);
|
|
346
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex]['selected'] = true;
|
|
347
|
+
}
|
|
348
|
+
}, 200);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
resetSelectedPill(pillData) {
|
|
353
|
+
if (pillData && pillData.length) {
|
|
354
|
+
pillData.forEach((pill) => {
|
|
355
|
+
pill['selected'] = false;
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
getTabDataByfilter(strip, currentTab, calculateParentStatus) {
|
|
360
|
+
// tslint:disable:no-console
|
|
361
|
+
console.log('strip -- ', strip);
|
|
362
|
+
// tslint:disable:no-console
|
|
363
|
+
console.log('currentTab -- ', currentTab);
|
|
364
|
+
// tslint:disable:no-console
|
|
365
|
+
console.log('calculateParentStatus-- ', calculateParentStatus);
|
|
366
|
+
// TODO: Write logic for individual filter if passed in config
|
|
367
|
+
// add switch case based on config key passed
|
|
368
|
+
}
|
|
369
|
+
getIfStripHidden(key) {
|
|
370
|
+
const storageItem = sessionStorage.getItem(`cstrip_${key}`);
|
|
371
|
+
return Boolean(storageItem !== '1');
|
|
372
|
+
}
|
|
373
|
+
// translate labes
|
|
374
|
+
translateLabels(label, type) {
|
|
375
|
+
return this.langtranslations.translateLabel(label, type, '');
|
|
376
|
+
}
|
|
377
|
+
redirectViewAll(stripData, path, queryParamsData) {
|
|
378
|
+
if (this.emitViewAll) {
|
|
379
|
+
this.viewAllResponse.emit(stripData);
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
this.router.navigate([path], { queryParams: queryParamsData });
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
identify(index, item) {
|
|
386
|
+
if (index >= 0) { }
|
|
387
|
+
return item;
|
|
388
|
+
}
|
|
389
|
+
tracker(index, item) {
|
|
390
|
+
if (index >= 0) { }
|
|
391
|
+
return _.get(item, 'widgetData.content.identifier');
|
|
392
|
+
}
|
|
393
|
+
getContineuLearningLenth(data) {
|
|
394
|
+
return data.widgets ? data.widgets.length : 0;
|
|
395
|
+
}
|
|
396
|
+
showAccordion(key) {
|
|
397
|
+
if (this.utilitySvc.isMobile && this.stripsResultDataMap[key].mode === 'accordion') {
|
|
398
|
+
return this.showAccordionData;
|
|
399
|
+
}
|
|
400
|
+
return true;
|
|
401
|
+
}
|
|
402
|
+
checkCondition(wData, data) {
|
|
403
|
+
if (wData.strips[0].stripConfig && wData.strips[0].stripConfig.hideShowAll) {
|
|
404
|
+
return !wData.strips[0].stripConfig.hideShowAll;
|
|
405
|
+
}
|
|
406
|
+
return wData.strips[0].viewMoreUrl && data.widgets && data.widgets.length >= 4;
|
|
407
|
+
}
|
|
408
|
+
checkVisible(data) {
|
|
409
|
+
return data.stripInfo && data.stripInfo.visibilityMode === 'visible';
|
|
410
|
+
}
|
|
411
|
+
getSelectedIndex(stripsResultDataMap, key) {
|
|
412
|
+
let returnValue = 0;
|
|
413
|
+
return returnValue;
|
|
414
|
+
}
|
|
415
|
+
getLength(data) {
|
|
416
|
+
if (!data.tabs || !data.tabs.length) {
|
|
417
|
+
return data.widgets ? data.widgets.length : 0;
|
|
418
|
+
}
|
|
419
|
+
{
|
|
420
|
+
// if tabs are there check if each tab has widgets and get the tab with max widgets
|
|
421
|
+
let tabWithMaxWidgets = {};
|
|
422
|
+
data.tabs.forEach((tab) => {
|
|
423
|
+
if (tab.pillsData && tab.pillsData.length) {
|
|
424
|
+
tabWithMaxWidgets = tab.pillsData.reduce((prev, current) => {
|
|
425
|
+
if (!prev.widgets && !current.widgets) {
|
|
426
|
+
return current;
|
|
427
|
+
}
|
|
428
|
+
if (prev.widgets && current.widgets) {
|
|
429
|
+
return (prev.widgets.length > current.widgets.length) ? prev : current;
|
|
430
|
+
}
|
|
431
|
+
if (current.widgets && !prev.widgets) {
|
|
432
|
+
return current;
|
|
433
|
+
}
|
|
434
|
+
if (!current.widgets && prev.widgets) {
|
|
435
|
+
return prev;
|
|
436
|
+
}
|
|
437
|
+
return current;
|
|
438
|
+
// return (prev.widgets && current.widgets && (prev.widgets.length > current.widgets.length) ) ? prev : current
|
|
439
|
+
// tslint:disable-next-line: align
|
|
440
|
+
}, data.tabs[0]);
|
|
441
|
+
}
|
|
442
|
+
});
|
|
443
|
+
// if tabs has atleast 1 widgets then strip will show or else not
|
|
444
|
+
return tabWithMaxWidgets.widgets ? tabWithMaxWidgets.widgets.length : 0;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
isStripShowing(data) {
|
|
448
|
+
let count = 0;
|
|
449
|
+
if (data && data.key === this.environment.programStripKey && (!data.tabs || !data.tabs.length) &&
|
|
450
|
+
data.stripTitle === this.environment.programStripName && data.widgets.length > 0) {
|
|
451
|
+
data.widgets.forEach((key) => {
|
|
452
|
+
if (key && key.widgetData.content.primaryCategory === this.environment.programStripPrimaryCategory) {
|
|
453
|
+
count = count + 1;
|
|
454
|
+
}
|
|
455
|
+
});
|
|
456
|
+
if (count > 0) {
|
|
457
|
+
data.showStrip = true;
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
data.showStrip = false;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
// console.log('data.key', data, data.key, data.widgets);
|
|
464
|
+
return data.showStrip;
|
|
465
|
+
}
|
|
466
|
+
get isMobile() {
|
|
467
|
+
return this.utilitySvc.isMobile || false;
|
|
468
|
+
}
|
|
469
|
+
// search api with facets
|
|
470
|
+
postRequestMethod(strip, request, apiUrl, calculateParentStatus) {
|
|
471
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
472
|
+
return new Promise((resolve, reject) => {
|
|
473
|
+
if (request && request) {
|
|
474
|
+
this.contentSvc.postApiMethod(apiUrl, request).subscribe(results => {
|
|
475
|
+
if (results.result && results.result.content) {
|
|
476
|
+
const showViewMore = Boolean(results.result.content && results.result.content.length > 5 && strip.stripConfig && strip.stripConfig.postCardForSearch);
|
|
477
|
+
const viewMoreUrl = showViewMore
|
|
478
|
+
? {
|
|
479
|
+
path: strip.viewMoreUrl && strip.viewMoreUrl.path || '',
|
|
480
|
+
queryParams: {
|
|
481
|
+
tab: 'Learn',
|
|
482
|
+
q: strip.viewMoreUrl && strip.viewMoreUrl.queryParams,
|
|
483
|
+
f: {},
|
|
484
|
+
},
|
|
485
|
+
}
|
|
486
|
+
: null;
|
|
487
|
+
resolve({ results, viewMoreUrl });
|
|
488
|
+
}
|
|
489
|
+
}, (error) => {
|
|
490
|
+
this.processStrip(strip, [], 'error', calculateParentStatus, null);
|
|
491
|
+
reject(error);
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
fetchFromSearch(strip, calculateParentStatus = true) {
|
|
498
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
499
|
+
if (strip.request && Object.keys(strip.request.requestBody).length) {
|
|
500
|
+
try {
|
|
501
|
+
const response = yield this.postRequestMethod(strip, strip.request.requestBody, strip.request.apiUrl, calculateParentStatus);
|
|
502
|
+
let tabIndex = 0;
|
|
503
|
+
let pillIndex = 0;
|
|
504
|
+
if (response.results && response.results.result) {
|
|
505
|
+
this.mapAllDataWithFacets(strip, response.results.result.content, response.results.result.facets, calculateParentStatus);
|
|
506
|
+
const widgets = this.transformContentsToWidgets(response.results.result.content, strip);
|
|
507
|
+
let tabResults = [];
|
|
508
|
+
// if (this.stripsResultDataMap[strip.key] && this.stripsResultDataMap[strip.key].tabs) {
|
|
509
|
+
// const allTabs = this.stripsResultDataMap[strip.key].tabs;
|
|
510
|
+
// const allPills = this.stripsResultDataMap[strip.key].tabs[tabIndex].pillsData;
|
|
511
|
+
// this.resetSelectedPill(allPills)
|
|
512
|
+
// if (allTabs && allTabs.length && allTabs[tabIndex]) {
|
|
513
|
+
// if(allPills && allPills.length && allPills[pillIndex]){
|
|
514
|
+
// allPills[pillIndex] = {
|
|
515
|
+
// ...allPills[pillIndex],
|
|
516
|
+
// widgets,
|
|
517
|
+
// fetchTabStatus: 'done',
|
|
518
|
+
// selected: true
|
|
519
|
+
// };
|
|
520
|
+
// }
|
|
521
|
+
// allTabs[tabIndex] = {
|
|
522
|
+
// ...allTabs[tabIndex],
|
|
523
|
+
// widgets,
|
|
524
|
+
// fetchTabStatus: 'done',
|
|
525
|
+
// };
|
|
526
|
+
// tabResults = allTabs;
|
|
527
|
+
// }
|
|
528
|
+
// }
|
|
529
|
+
// this.processStrip(
|
|
530
|
+
// strip,
|
|
531
|
+
// widgets,
|
|
532
|
+
// 'done',
|
|
533
|
+
// calculateParentStatus,
|
|
534
|
+
// response.viewMoreUrl,
|
|
535
|
+
// tabResults // tabResults as widgets
|
|
536
|
+
// );
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
catch (error) {
|
|
540
|
+
// Handle errors
|
|
541
|
+
// console.error('Error:', error);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
mapAllDataWithFacets(strip, content, facets, calculateParentStatus) {
|
|
547
|
+
console.log(strip, content);
|
|
548
|
+
const allTabs = this.stripsResultDataMap[strip.key].tabs;
|
|
549
|
+
let facet = [];
|
|
550
|
+
allTabs.forEach((ele) => {
|
|
551
|
+
ele['fetchTabStatus'] = 'done';
|
|
552
|
+
let filteredData = content.filter((contEle) => contEle.nlwUserExp.includes(ele.value));
|
|
553
|
+
// filteredData.forEach(element => {
|
|
554
|
+
// facet = [...facet,..._.difference(element.nlwOrgs ,facet)];
|
|
555
|
+
// });
|
|
556
|
+
ele['widgets'] = filteredData;
|
|
557
|
+
ele.pillsData.forEach((pill) => {
|
|
558
|
+
if (pill.value === 'all') {
|
|
559
|
+
pill['widgets'] = this.transformContentsToWidgets(filteredData, strip);
|
|
560
|
+
pill['fetchTabStatus'] = 'done';
|
|
561
|
+
}
|
|
562
|
+
else if (pill.value === 'course') {
|
|
563
|
+
let contentFilteredData = filteredData.filter((contEle) => contEle.courseCategory.toLowerCase() === pill.value);
|
|
564
|
+
pill['widgets'] = this.transformContentsToWidgets(contentFilteredData, strip);
|
|
565
|
+
pill['fetchTabStatus'] = 'done';
|
|
566
|
+
}
|
|
567
|
+
else {
|
|
568
|
+
let contentFilteredData = filteredData.filter((contEle) => contEle.courseCategory.toLowerCase() !== 'course');
|
|
569
|
+
pill['widgets'] = this.transformContentsToWidgets(contentFilteredData, strip);
|
|
570
|
+
pill['fetchTabStatus'] = 'done';
|
|
571
|
+
}
|
|
572
|
+
});
|
|
573
|
+
// ele['facets'] = [{
|
|
574
|
+
// name:'nlwOrgs',
|
|
575
|
+
// values: facet
|
|
576
|
+
// }]
|
|
577
|
+
ele['facets'] = facets;
|
|
578
|
+
});
|
|
579
|
+
strip.tabs[0].pillsData[0].fetchTabStatus = 'done';
|
|
580
|
+
strip.tabs[0].pillsData[0].tabLoading = false;
|
|
581
|
+
strip.showOnLoader = false;
|
|
582
|
+
this.resetSelectedPill(strip.tabs[0].pillsData);
|
|
583
|
+
strip.tabs[0].pillsData[0]['selected'] = true;
|
|
584
|
+
this.processStrip(strip, [], 'done', calculateParentStatus, strip.viewMoreUrl, allTabs // tabResults as widgets
|
|
585
|
+
);
|
|
586
|
+
}
|
|
587
|
+
transformContentsToWidgets(contents, strip) {
|
|
588
|
+
return (contents || []).map((content, idx) => (content ? {
|
|
589
|
+
widgetType: 'cardLib',
|
|
590
|
+
widgetSubType: 'cardContentLib',
|
|
591
|
+
widgetHostClass: 'mb-2',
|
|
592
|
+
widgetData: Object.assign(Object.assign({ content }, (content.batch && { batch: content.batch })), { cardSubType: strip.stripConfig && strip.stripConfig.cardSubType, cardCustomeClass: strip.customeClass ? strip.customeClass : '', context: { pageSection: strip.key, position: idx }, intranetMode: strip.stripConfig && strip.stripConfig.intranetMode, deletedMode: strip.stripConfig && strip.stripConfig.deletedMode, contentTags: strip.stripConfig && strip.stripConfig.contentTags }),
|
|
593
|
+
} : {
|
|
594
|
+
widgetType: 'card',
|
|
595
|
+
widgetSubType: 'cardContent',
|
|
596
|
+
widgetHostClass: 'mb-2',
|
|
597
|
+
widgetData: {},
|
|
598
|
+
}));
|
|
599
|
+
}
|
|
600
|
+
getorgData(eventData, stripMap, tabIndex) {
|
|
601
|
+
console.log(eventData);
|
|
602
|
+
let selectedValue = eventData.target.value;
|
|
603
|
+
let pillIndex = this.getSelectedPillIndex(stripMap.tabs[tabIndex], tabIndex);
|
|
604
|
+
if (stripMap && stripMap.tabs && stripMap.tabs[tabIndex]) {
|
|
605
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].fetchTabStatus = 'inprogress';
|
|
606
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].tabLoading = false;
|
|
607
|
+
stripMap.showOnLoader = true;
|
|
608
|
+
let returnedValues = stripMap.tabs[tabIndex].widgets.filter((ele) => {
|
|
609
|
+
var words = ele.nlwOrgs.map(v => v.toLowerCase());
|
|
610
|
+
return words.includes(selectedValue);
|
|
611
|
+
});
|
|
612
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex]['widgets'] = this.transformContentsToWidgets(returnedValues, stripMap);
|
|
613
|
+
}
|
|
614
|
+
setTimeout(() => {
|
|
615
|
+
if (stripMap && stripMap.tabs && stripMap.tabs[tabIndex]) {
|
|
616
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].fetchTabStatus = 'done';
|
|
617
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].tabLoading = false;
|
|
618
|
+
stripMap.showOnLoader = false;
|
|
619
|
+
this.resetSelectedPill(stripMap.tabs[tabIndex].pillsData);
|
|
620
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex]['selected'] = true;
|
|
621
|
+
}
|
|
622
|
+
}, 200);
|
|
623
|
+
}
|
|
624
|
+
resetFilter(stripMap, tabIndex, pillIndex) {
|
|
625
|
+
// let selectedValue = eventData.target.value
|
|
626
|
+
if (pillIndex) {
|
|
627
|
+
pillIndex = this.getSelectedPillIndex(stripMap.tabs[tabIndex], tabIndex);
|
|
628
|
+
}
|
|
629
|
+
this.facetForm.reset({
|
|
630
|
+
org: 0
|
|
631
|
+
});
|
|
632
|
+
if (stripMap && stripMap.tabs && stripMap.tabs[tabIndex]) {
|
|
633
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].fetchTabStatus = 'inprogress';
|
|
634
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].tabLoading = false;
|
|
635
|
+
stripMap.showOnLoader = true;
|
|
636
|
+
// let returnedValues = stripMap.tabs[tabIndex].widgets.filter((ele: any) => {
|
|
637
|
+
// var words = ele.nlwOrgs.map(v => v.toLowerCase());
|
|
638
|
+
// return words.includes(selectedValue)
|
|
639
|
+
// })
|
|
640
|
+
let contentData = stripMap.tabs[tabIndex].widgets || [];
|
|
641
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex]['widgets'] = this.transformContentsToWidgets(contentData, stripMap);
|
|
642
|
+
}
|
|
643
|
+
setTimeout(() => {
|
|
644
|
+
if (stripMap && stripMap.tabs && stripMap.tabs[tabIndex]) {
|
|
645
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].fetchTabStatus = 'done';
|
|
646
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex].tabLoading = false;
|
|
647
|
+
stripMap.showOnLoader = false;
|
|
648
|
+
this.resetSelectedPill(stripMap.tabs[tabIndex].pillsData);
|
|
649
|
+
stripMap.tabs[tabIndex].pillsData[pillIndex]['selected'] = true;
|
|
650
|
+
}
|
|
651
|
+
}, 200);
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
ContentStripFacetFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ContentStripFacetFilterComponent, deps: [{ token: 'environment' }, { token: i1.WidgetContentService }, { token: i2.LoggerService }, { token: i2.EventService }, { token: i2.ConfigurationsService }, { token: i2.UtilityService }, { token: i3.Router }, { token: i4.WidgetUserService }, { token: i5.TranslateService }, { token: i6.MultilingualTranslationsService }, { token: i7.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
655
|
+
ContentStripFacetFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ContentStripFacetFilterComponent, selector: "sb-uic-content-strip-facet-filter", inputs: { widgetData: "widgetData", providerId: "providerId", emitViewAll: "emitViewAll", channnelName: "channnelName" }, outputs: { emptyResponse: "emptyResponse", viewAllResponse: "viewAllResponse", telemtryResponse: "telemtryResponse" }, host: { properties: { "id": "this.id" } }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!contentAvailable; else otherTemplate\"></ng-container>\n<ng-template #otherTemplate>\n <!-- <div *ngIf=\"showParentLoader\" class=\"text-center my-2\">\n <mat-spinner class=\"inline-block\"></mat-spinner>\n </div> -->\n <ng-container *ngIf=\"showParentError\" [sbUiResolverWidget]=\"widgetData.errorWidget\"></ng-container>\n <ng-container *ngIf=\"showParentNoData\" [sbUiResolverWidget]=\"widgetData.noDataWidget\"></ng-container>\n <ng-container *ngFor=\"let key of stripsKeyOrder; let i = index; trackBy: identify\">\n <ng-container *ngIf=\"isStripShowing(stripsResultDataMap[key])\">\n <a name=\"{{stripsResultDataMap[key]?.stripTitle}}\" [class]=\"key\">\n <div *ngIf=\"stripsResultDataMap && (getLength(stripsResultDataMap[key]) ||\n stripsResultDataMap[key]?.showOnNoData ||\n stripsResultDataMap[key]?.showOnLoader ||\n stripsResultDataMap[key]?.showOnError)\n \" [ngClass]=\"\n !widgetData?.isChannelStrip ? 'xs:px-8 sx:px-10ss' : i > 0 ? 'mt-12' : ''\n \" [id]=\"key\" [ngClass]=\"!widgetData?.isChannelStrip ? 'margin-bottom-custom' : 'margin-bottom-xs'\">\n <div [ngClass]=\"{ pad: stripsResultDataMap[key]?.stripBackground }\"\n [ngStyle]=\"{ 'background-color': stripsResultDataMap[key]?.stripBackground }\">\n <div class=\"flex flex-col pl-4 pr-4 md:pr-0 md:pl-0 \" [ngClass]=\"\n !widgetData?.isChannelStrip\n ? ''\n : stripsResultDataMap[key]?.stripTitle\n ? 'mb-8'\n : ''\n \">\n <div class=\"flex flex-1 items-center\">\n <p class=\"mat-subheading-1 margin-remove inline-block \" *ngIf=\"stripsResultDataMap[key]?.stripTitle\">\n <span class=\"capitalize\" *ngIf=\"stripsResultDataMap[key]?.disableTranslate\">\n {{stripsResultDataMap[key]?.stripTitle}}\n </span>\n <span *ngIf=\"!stripsResultDataMap[key]?.disableTranslate\">\n {{ translateLabels(stripsResultDataMap[key]?.stripTitle, 'home') }}\n </span>\n </p>\n\n <button *ngIf=\"stripsResultDataMap[key]?.stripInfo?.icon\" type=\"button\" mat-icon-button\n (click)=\"toggleInfo(stripsResultDataMap[key])\" i18n-matTooltip matTooltip=\"info\"\n class=\"margin-left-xs\">\n <mat-icon>{{ stripsResultDataMap[key]?.stripInfo?.icon.icon }}</mat-icon>\n </button>\n <a *ngIf=\"stripsResultDataMap[key]?.stripTitleLink?.link\"\n [routerLink]=\"stripsResultDataMap[key]?.stripTitleLink?.link\"\n [queryParams]=\"stripsResultDataMap[key]?.stripTitleLink?.link?.queryParams\">\n <mat-icon class=\"ws-mat-primary-primary-text ws-mat-default-text\" [color]=\"'accent'\">{{\n stripsResultDataMap[key]?.stripTitleLink?.icon }}</mat-icon>\n </a>\n <span class=\"spacer\"></span>\n <!-- viewAll start-->\n <div *ngIf=\"checkCondition(widgetData , stripsResultDataMap[key])\" class=\"block md:hidden\">\n <div \n class=\"ml-4 pl-2 view-more ws-mat-default-text \">\n <a class=\"flex ws-mat-default-text items-center justify-center mat-body-1 cursor-pointer\" \n (click)=\"raiseTelemetry(stripsResultDataMap[key]);redirectViewAll(stripsResultDataMap[key], stripsResultDataMap[key]?.viewMoreUrl?.path, stripsResultDataMap[key]?.viewMoreUrl?.queryParams )\">\n <span i18n class=\"ws-mat-default-text\">{{translateLabels(widgetData.strips[0].viewMoreUrl.viewMoreText,'home') || 'See all'}}</span>\n <mat-icon class=\"ws-mat-default-text mat-icon notranslate material-icons mat-icon-no-color\" color=\"accent\">navigate_next</mat-icon>\n </a>\n </div>\n </div>\n <!-- viewAll end-->\n </div>\n <button mat-icon-button (click)=\"setHiddenForStrip(key)\" *ngIf=\"stripsResultDataMap[key]?.canHideStrip\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-icon class=\"cursor-pointer\" *ngIf=\"stripsResultDataMap[key]?.mode === 'accordion' && isMobile\"\n (click)=\"showAccordionData = !showAccordionData\">{{ showAccordionData ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </div>\n\n <div class=\"mb-4\" *ngIf=\"checkVisible(stripsResultDataMap[key])\">\n <ng-container [sbUiResolverWidget]=\"getdata(stripsResultDataMap[key])\">\n </ng-container>\n </div>\n <ng-container *ngIf=\"stripsResultDataMap[key]?.showOnNoData\"\n [sbUiResolverWidget]=\"stripsResultDataMap[key]?.noDataWidget\"></ng-container>\n <ng-container *ngIf=\"stripsResultDataMap[key]?.showOnError\"\n [sbUiResolverWidget]=\"stripsResultDataMap[key]?.errorWidget\"></ng-container>\n <!-- IF no errors then proceed to show tabs or non tabs strip -->\n <ng-container *ngIf=\"!stripsResultDataMap[key]?.showOnNoData && !stripsResultDataMap[key]?.showOnError\">\n <ng-container *ngIf=\"stripsResultDataMap[key].tabs && stripsResultDataMap[key].tabs.length\">\n <mat-tab-group animationDuration=\"0ms\" [selectedIndex]=\"getSelectedIndex(stripsResultDataMap[key], key)\"\n class=\"mat-tab-labels w-full strips-tabgroup\" dynamicHeight\n (selectedTabChange)=\"tabClicked($event, 0, stripsResultDataMap[key], key)\">\n <mat-tab label=\"{{tab?.label}}\" *ngFor=\"let tab of stripsResultDataMap[key].tabs; let last = last;let tabIndex = index\">\n <ng-template mat-tab-label>\n <span><span *ngIf=\"!tab?.disableTranslate\">{{ translateLabels(tab?.label, 'home') }}</span>\n <span class=\"tab-highlight\" *ngIf=\"tab?.disableTranslate\">{{tab?.label}}</span> </span>\n <span *ngIf=\"tab?.showTabDataCount && tab?.widgets?.length\">({{tab?.widgets?.length}})</span>\n </ng-template>\n\n <div class=\"wfull\" *ngIf=\"tab?.pillsData && tab?.pillsData?.length\">\n <div class=\"flex justify-between item-center flex-wrap gap-4\">\n <div class=\"\">\n <ng-container *ngFor=\"let facet of tab?.facets\">\n <form [formGroup]=\"facetForm\">\n <div class=\"facets-select\">\n <select formControlName=\"org\" (change)=\"getorgData($event, stripsResultDataMap[key], tabIndex)\">\n <option value=\"0\" selected disabled>Choose by organisation</option>\n <option value=\"{{d.name}}\" *ngFor=\"let d of facet.values\" >{{d.name}}</option>\n </select>\n </div>\n </form>\n </ng-container>\n </div>\n <div>\n <ng-container >\n <mat-chip-list class=\"content-pill-data\" aria-label=\"Fish selection\">\n <ng-container *ngFor=\"let pill of tab?.pillsData;let p = index\">\n <mat-chip [selected]=\"pill?.selected\" (click)=\"pillClicked($event, stripsResultDataMap[key], key, p, tabIndex)\">\n <span class=\"pill-name\">{{pill?.label}}</span></mat-chip>\n </ng-container>\n </mat-chip-list>\n </ng-container>\n </div>\n <!-- viewAll start-->\n <div *ngIf=\"!stripsResultDataMap[key]?.hideViewMoreUrl && checkCondition(widgetData , stripsResultDataMap[key])\" class=\" hidden md:block\">\n <div class=\"ml-4 pl-2 view-more ws-mat-default-text\">\n <a class=\"flex ws-mat-default-text items-center justify-center mat-body-1 cursor-pointer\" \n (click)=\"raiseTelemetry(stripsResultDataMap[key]);redirectViewAll(stripsResultDataMap[key], stripsResultDataMap[key]?.viewMoreUrl?.path, stripsResultDataMap[key]?.viewMoreUrl?.queryParams )\">\n <span i18n class=\"ws-mat-default-text\">{{translateLabels(widgetData.strips[0].viewMoreUrl.viewMoreText,'home') || 'See all'}}</span>\n <mat-icon class=\"ws-mat-default-text mat-icon notranslate material-icons mat-icon-no-color\" color=\"accent\">navigate_next</mat-icon>\n </a>\n </div>\n </div>\n \n <!-- viewAll end-->\n </div>\n <div *ngIf=\"stripsResultDataMap && stripsResultDataMap[key]?.showOnLoader ||\n !tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.fetchTabStatus\"\n class=\"text-center my-2\">\n <sb-uic-horizontal-scroller-v2 [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\" [id]=\"key+'-scroller'\"\n [loadStatus]=\"'fetching'\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of stripsResultDataMap[key]?.loaderWidgets; trackBy: tracker\">\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </div>\n <ng-container *ngIf=\"tab?.pillsData && tab?.pillsData.length && tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]\">\n <div *ngIf=\"((tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.fetchTabStatus && tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.fetchTabStatus === 'done') &&\n (!tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.widgets || !tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.widgets?.length))\">\n <ng-container *ngIf=\"tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.value === 'inprogress'; else msgTemp\">\n <div class=\"w-full flex flex-col items-center justify-center\">\n <img alt=\"\" class=\"mt-4 mb-4\" src=\"assets/icons/home/nodataDefault.svg\">\n <div class=\"mat-subheading-1 text-center info-content\">{{ 'contentstripmultiple.getReadyForLearningAdventure' | translate }} -\n <a class=\"click-here\" [routerLink]=\"'/page/learn'\">{{ 'contentstripmultiple.clickHere' | translate }}</a> {{ 'contentstripmultiple.toEnrollNextCourse' | translate }}</div>\n </div>\n </ng-container>\n <ng-template #msgTemp>\n <div class=\"w-full flex flex-col items-center justify-center\">\n <img alt=\"\" class=\"mt-4 mb-4\" src=\"assets/icons/home/nodataDefault.png\">\n <div class=\"mat-subheading-1 text-center\">{{ translateLabels(tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.nodataMsg, 'home') }}</div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n <ng-container *ngIf=\"(tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.fetchTabStatus === 'done' || tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.widgets?.length)\">\n <ng-container *ngIf=\"!tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.tabLoading\">\n <sb-uic-horizontal-scroller-v2 [id]=\"key+'-scroller'\" [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\" [widgetsLength]=\"tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.widgets?.length\"\n [loadStatus]=\"'done'\" [defaultMaxWidgets]=\"tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.maxWidgets ||\n stripsResultDataMap[key]?.sliderConfig?.maxWidgets || defaultMaxWidgets\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.widgets| slice:0:(tab?.pillsData[getSelectedPillIndex(tab ,tabIndex)]?.maxWidgets ||\n stripsResultDataMap[key]?.sliderConfig?.maxWidgets || defaultMaxWidgets); trackBy: tracker\">\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </ng-container>\n </ng-container>\n </div>\n </mat-tab>\n </mat-tab-group>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </a>\n\n </ng-container>\n </ng-container>\n</ng-template>", styles: ["@charset \"UTF-8\";.facets-select{position:relative;display:inline-block;width:250px}.facets-select select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background-color:#fff;border:1px solid #ccc;border-radius:25px;padding:10px 30px 10px 10px;font-size:16px;font-family:Arial,sans-serif;width:100%;height:100%;cursor:pointer}.facets-select:after{content:\"\\25bc\";position:absolute;top:50%;right:10px;transform:translateY(-50%);pointer-events:none;font-size:14px;color:#555}.tab-highlight{color:#1b4ca1!important;font-weight:bold}::ng-deep mat-chip-list.content-pill-data .mat-chip-selected{background-color:#1b4ca1!important}::ng-deep mat-chip-list.content-pill-data .mat-chip-selected .pill-name{color:#fff!important}::ng-deep mat-chip-list.content-pill-data .mat-chip-list-wrapper .mat-chip{cursor:pointer!important}::ng-deep mat-chip-list.content-pill-data .mat-chip-list-wrapper .mat-chip.mat-standard-chip.mat-chip-selected.mat-primary{background:#1B4CA1!important;color:#fff!important}::ng-deep mat-chip-list.content-pill-data .mat-chip-list-wrapper .mat-chip.mat-standard-chip{background:#ffffff!important;border:1px solid rgba(0,0,0,.0784313725)!important}\n"], components: [{ type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i10.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i11.MatChipList, selector: "mat-chip-list", inputs: ["aria-orientation", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "selectable", "tabIndex", "errorStateMatcher"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i12.HorizontalScrollerV2Component, selector: "sb-uic-horizontal-scroller-v2", inputs: ["loadStatus", "id", "onHover", "sliderConfig", "widgetsLength", "defaultMaxWidgets", "stripConfig"], outputs: ["loadNext"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.SbUiResolverDirective, selector: "[sbUiResolverWidget]", inputs: ["sbUiResolverWidget"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i15.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i3.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i10.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i11.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }], pipes: { "translate": i5.TranslatePipe, "slice": i13.SlicePipe } });
|
|
656
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ContentStripFacetFilterComponent, decorators: [{
|
|
657
|
+
type: Component,
|
|
658
|
+
args: [{
|
|
659
|
+
selector: 'sb-uic-content-strip-facet-filter',
|
|
660
|
+
templateUrl: './content-strip-facet-filter.component.html',
|
|
661
|
+
styleUrls: ['./content-strip-facet-filter.component.scss']
|
|
662
|
+
}]
|
|
663
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
664
|
+
type: Inject,
|
|
665
|
+
args: ['environment']
|
|
666
|
+
}] }, { type: i1.WidgetContentService }, { type: i2.LoggerService }, { type: i2.EventService }, { type: i2.ConfigurationsService }, { type: i2.UtilityService }, { type: i3.Router }, { type: i4.WidgetUserService }, { type: i5.TranslateService }, { type: i6.MultilingualTranslationsService }, { type: i7.FormBuilder }]; }, propDecorators: { widgetData: [{
|
|
667
|
+
type: Input
|
|
668
|
+
}], emptyResponse: [{
|
|
669
|
+
type: Output
|
|
670
|
+
}], viewAllResponse: [{
|
|
671
|
+
type: Output
|
|
672
|
+
}], telemtryResponse: [{
|
|
673
|
+
type: Output
|
|
674
|
+
}], providerId: [{
|
|
675
|
+
type: Input
|
|
676
|
+
}], emitViewAll: [{
|
|
677
|
+
type: Input
|
|
678
|
+
}], channnelName: [{
|
|
679
|
+
type: Input
|
|
680
|
+
}], id: [{
|
|
681
|
+
type: HostBinding,
|
|
682
|
+
args: ['id']
|
|
683
|
+
}] } });
|
|
684
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1zdHJpcC1mYWNldC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NvbnN1bXB0aW9uL3NyYy9saWIvX2NvbW1vbi9zdHJpcHMvY29udGVudC1zdHJpcC1mYWNldC1maWx0ZXIvY29udGVudC1zdHJpcC1mYWNldC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NvbnN1bXB0aW9uL3NyYy9saWIvX2NvbW1vbi9zdHJpcHMvY29udGVudC1zdHJpcC1mYWNldC1maWx0ZXIvY29udGVudC1zdHJpcC1mYWNldC1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFhLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQW9CLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEYsT0FBTyxFQUE0QixhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUs3RixPQUFPLEVBTUwsUUFBUSxHQUNULE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLDZEQUE2RDtBQUM3RCwyQkFBMkI7QUFDM0IsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUQzQixNQUFNLE9BQU8sZ0NBQWlDLFNBQVEsbUJBQW1CO0lBaUN2RSxZQUN5QixXQUFnQixFQUMvQixVQUFnQyxFQUNoQyxTQUF3QixFQUN4QixRQUFzQixFQUN0QixTQUFnQyxFQUNqQyxVQUEwQixFQUMxQixNQUFjLEVBQ2IsT0FBMEIsRUFDMUIsU0FB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QUFDLElBQUksQ0FBQTthQUM5RDtRQUNILENBQUMsRUFBVSxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDOzs4SEE1dEJVLGdDQUFnQyxrQkFrQ2pDLGFBQWE7a0hBbENaLGdDQUFnQyw0WEMzRTdDLHk4YUFrTGM7NEZEdkdELGdDQUFnQztrQkFMNUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUNBQW1DO29CQUM3QyxXQUFXLEVBQUUsNkNBQTZDO29CQUMxRCxTQUFTLEVBQUUsQ0FBQyw2Q0FBNkMsQ0FBQztpQkFDM0Q7OzBCQW1DSSxNQUFNOzJCQUFDLGFBQWE7bVdBN0JkLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRSxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFQyxFQUFFO3NCQURSLFdBQVc7dUJBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT25EZXN0cm95LCBIb3N0QmluZGluZywgSW5qZWN0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTnNXaWRnZXRSZXNvbHZlciwgV2lkZ2V0QmFzZUNvbXBvbmVudCB9IGZyb20gJ0BzdW5iaXJkLWNiL3Jlc29sdmVyLXYyJztcbmltcG9ydCB7IE5zQ29udGVudFN0cmlwV2l0aEZhY2V0cywgQXBpUmVxdWVzdEZvciB9IGZyb20gJy4vY29udGVudC1zdHJpcC1mYWNldC1maWx0ZXIubW9kZWwnO1xuLy8gaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgV2lkZ2V0Q29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi8uLi8uLi9fbW9kZWxzL3dpZGdldC1jb250ZW50Lm1vZGVsJztcbmltcG9ydCB7IE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fc2VydmljZXMvbXVsdGlsaW5ndWFsLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFRGZXRjaFN0YXR1cyxcbiAgTG9nZ2VyU2VydmljZSxcbiAgRXZlbnRTZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gIFV0aWxpdHlTZXJ2aWNlLFxuICBXc0V2ZW50cyxcbn0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBXaWRnZXRVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtdXNlci5zZXJ2aWNlJztcbi8vIGltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnc3JjL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCdcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgTnNDYXJkQ29udGVudCB9IGZyb20gJy4uLy4uLy4uL19tb2RlbHMvY2FyZC1jb250ZW50LXYyLm1vZGVsJztcbmltcG9ydCB7IElUb2RheUV2ZW50cyB9IGZyb20gJy4uLy4uLy4uL19tb2RlbHMvZXZlbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbnRlcmZhY2UgSVN0cmlwVW5pdENvbnRlbnREYXRhIHtcbiAga2V5OiBzdHJpbmc7XG4gIGNhbkhpZGVTdHJpcDogYm9vbGVhbjtcbiAgbW9kZT86IHN0cmluZztcbiAgc2hvd1N0cmlwOiBib29sZWFuO1xuICBkaXNhYmxlVHJhbnNsYXRlOiBib29sZWFuO1xuICB3aWRnZXRzPzogTnNXaWRnZXRSZXNvbHZlci5JUmVuZGVyQ29uZmlnV2l0aEFueURhdGFbXTtcbiAgc3RyaXBUaXRsZTogc3RyaW5nO1xuICBoaWRlVmlld01vcmVVcmw/OiBib29sZWFuO1xuICBzdHJpcFRpdGxlTGluaz86IHtcbiAgICBsaW5rOiAge1xuICAgICAgcXVlcnlQYXJhbXM6IHN0cmluZ1xuICAgIH0sXG4gICAgaWNvbjogc3RyaW5nLFxuICAgIHF1ZXJ5UGFyYW1zOiBzdHJpbmdcbiAgfTtcbiAgc2xpZGVyQ29uZmlnPzoge1xuICAgIHNob3dOYXZzOiBib29sZWFuLFxuICAgIHNob3dEb3RzOiBib29sZWFuLFxuICAgIG1heFdpZGdldHM/OiBudW1iZXJcbiAgICBjZXJpZmljYXRlQ2FyZE1hcmdpbj86IGJvb2xlYW5cbiAgfTtcbiAgc3RyaXBDb25maWc6IGFueTtcbiAgdGFicz86IE5zQ29udGVudFN0cmlwV2l0aEZhY2V0cy5JQ29udGVudFN0cmlwVGFiW10gfCB1bmRlZmluZWQ7XG4gIHN0cmlwTmFtZT86IHN0cmluZztcbiAgc3RyaXBMb2dvPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc3RyaXBJbmZvPzogTnNDb250ZW50U3RyaXBXaXRoRmFjZXRzLklTdHJpcEluZm87XG4gIG5vRGF0YVdpZGdldD86IE5zV2lkZ2V0UmVzb2x2ZXIuSVJlbmRlckNvbmZpZ1dpdGhBbnlEYXRhO1xuICBlcnJvcldpZGdldD86IE5zV2lkZ2V0UmVzb2x2ZXIuSVJlbmRlckNvbmZpZ1dpdGhBbnlEYXRhO1xuICBzaG93T25Ob0RhdGE6IGJvb2xlYW47XG4gIHNob3dPbkxvYWRlcjogYm9vbGVhbjtcbiAgc2hvd09uRXJyb3I6IGJvb2xlYW47XG4gIGxvYWRlcldpZGdldHM/OiBhbnk7XG4gIHN0cmlwQmFja2dyb3VuZD86IHN0cmluZztcbiAgc2Vjb25kYXJ5SGVhZGluZz86IGFueTtcbiAgdmlld01vcmVVcmw6IGFueTtcbiAgcmVxdWVzdD86IGFueVxuICBcbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzYi11aWMtY29udGVudC1zdHJpcC1mYWNldC1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC1zdHJpcC1mYWNldC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb250ZW50LXN0cmlwLWZhY2V0LWZpbHRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENvbnRlbnRTdHJpcEZhY2V0RmlsdGVyQ29tcG9uZW50IGV4dGVuZHMgV2lkZ2V0QmFzZUNvbXBvbmVudFxuaW1wbGVtZW50c1xuT25Jbml0LFxuT25EZXN0cm95LFxuTnNXaWRnZXRSZXNvbHZlci5JV2lkZ2V0RGF0YTxOc0NvbnRlbnRTdHJpcFdpdGhGYWNldHMuSUNvbnRlbnRTdHJpcE11bHRpcGxlPiB7XG4gIEBJbnB1dCgpIHdpZGdldERhdGEhOiBOc0NvbnRlbnRTdHJpcFdpdGhGYWNldHMuSUNvbnRlbnRTdHJpcE11bHRpcGxlO1xuICBAT3V0cHV0KCkgZW1wdHlSZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSB2aWV3QWxsUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgdGVsZW10cnlSZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBJbnB1dCgpIHByb3ZpZGVySWQgOiBhbnkgPSAnJ1xuICBASW5wdXQoKSBlbWl0Vmlld0FsbCA6IGJvb2xlYW4gPSBmYWxzZVxuICBASW5wdXQoKSBjaGFubm5lbE5hbWU6IGFueSA9ICcnXG4gIEBIb3N0QmluZGluZygnaWQnKVxuICBwdWJsaWMgaWQgPSBgd3Mtc3RyaXAtbWlsdGlwbGVfJHtNYXRoLnJhbmRvbSgpfWA7XG4gIHN0cmlwc1Jlc3VsdERhdGFNYXA6IHsgW2tleTogc3RyaW5nXTogSVN0cmlwVW5pdENvbnRlbnREYXRhIH0gPSB7fTtcbiAgc3RyaXBzS2V5T3JkZXI6IHN0cmluZ1tdID0gW107XG4gIHNob3dBY2NvcmRpb25EYXRhID0gdHJ1ZTtcbiAgc2hvd1BhcmVudExvYWRlciA9IGZhbHNlO1xuICBzaG93UGFyZW50RXJyb3IgPSBmYWxzZTtcbiAgc2hvd1BhcmVudE5vRGF0YSA9IGZhbHNlO1xuICBlcnJvckRhdGFDb3VudCA9IDA7XG4gIG5vRGF0YUNvdW50ID0gMDtcbiAgc3VjY2Vzc0RhdGFDb3VudCA9IDA7XG4gIGNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICBiYXNlVXJsID0gdGhpcy5jb25maWdTdmMuc2l0ZVBhdGggfHwgJyc7XG4gIHZlaWZpZWRLYXJtYXlvZ2kgPSBmYWxzZTtcbiAgZW52aXJvbm1lbnQhOiBhbnk7XG4gIGNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgZGVmYXVsdE1heFdpZGdldHMgPSAxMjtcbiAgZW5yb2xsSW50ZXJ2YWw6IGFueTtcbiAgdG9kYXlzRXZlbnRzOiBhbnkgPSBbXTtcbiAgZW5yb2xsbWVudE1hcERhdGE6IGFueVxuICBmYWNldEZvcm06IGFueVxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIGVudmlyb25tZW50OiBhbnksXG4gICAgcHJpdmF0ZSBjb250ZW50U3ZjOiBXaWRnZXRDb250ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlclN2YzogTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50U3ZjOiBFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICBwdWJsaWMgdXRpbGl0eVN2YzogVXRpbGl0eVNlcnZpY2UsXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgdXNlclN2YzogV2lkZ2V0VXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndHJhbnNsYXRpb25zOiBNdWx0aWxpbmd1YWxUcmFuc2xhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2ZiOiBGb3JtQnVpbGRlclxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZUxhbmd1YWdlJykpIHtcbiAgICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKCdlbicpO1xuICAgICAgbGV0IGxhbmcgPSBKU09OLnN0cmluZ2lmeShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZUxhbmd1YWdlJykpO1xuICAgICAgbGFuZyA9IGxhbmcucmVwbGFjZSgvXFxcIi9nLCAnJyk7XG4gICAgICB0aGlzLnRyYW5zbGF0ZS51c2UobGFuZyk7XG4gICAgfVxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudFxuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXREYXRhKCk7XG4gICAgdGhpcy5jb250ZW50U3ZjLnRlbGVtZXRyeURhdGEkLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICB0aGlzLnRlbGVtdHJ5UmVzcG9uc2UuZW1pdChkYXRhKVxuICAgIH0pXG4gICAgdGhpcy5mYWNldEZvcm0gPSB0aGlzLl9mYi5ncm91cCh7XG4gICAgICBvcmc6IFsnMCddXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgaW5pdERhdGEoKSB7XG4gICAgdGhpcy5zdHJpcHNLZXlPcmRlciA9IHRoaXMud2lkZ2V0RGF0YSAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzICYmIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMubWFwKHN0cmlwID0+IHN0cmlwLmtleSkgfHwgW107XG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5sb2FkZXIgJiYgdGhpcy53aWRnZXREYXRhLnN0cmlwcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2hvd1BhcmVudExvYWRlciA9IHRydWU7XG4gICAgfVxuICAgIC8vIEZldGNoIHRoZSBkYXRhXG4gICAgZm9yIChjb25zdCBzdHJpcCBvZiB0aGlzLndpZGdldERhdGEuc3RyaXBzKSB7XG4gICAgICBpZiAodGhpcy5jaGVja0ZvckVtcHR5V2lkZ2V0KHN0cmlwKSkge1xuICAgICAgICB0aGlzLmZldGNoU3RyaXBGcm9tUmVxdWVzdERhdGEoc3RyaXAsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2RvbmUnLCB0cnVlLCBudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gU3Vic2NyaXB0aW9uIGZvciBjaGFuZ2VzXG4gICAgY29uc3Qga2V5QW5kRXZlbnQ6IHsga2V5OiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZnJvbTogc3RyaW5nIH1bXSA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHNcbiAgICAgIC5tYXAoc3RyaXAgPT4gKHtcbiAgICAgICAga2V5OiBzdHJpcC5rZXksXG4gICAgICAgIHR5cGU6IChzdHJpcC5yZWZyZXNoRXZlbnQgJiYgc3RyaXAucmVmcmVzaEV2ZW50LmV2ZW50VHlwZSkgfHwgJycsXG4gICAgICAgIGZyb206IChzdHJpcC5yZWZyZXNoRXZlbnQgJiYgc3RyaXAucmVmcmVzaEV2ZW50LmZyb20udG9TdHJpbmcoKSkgfHwgJycsXG4gICAgICB9KSlcbiAgICAgIC5maWx0ZXIoKHsga2V5LCB0eXBlLCBmcm9tIH0pID0+IGtleSAmJiB0eXBlICYmIGZyb20pO1xuICAgIGNvbnN0IGV2ZW50VHlwZVNldCA9IG5ldyBTZXQoa2V5QW5kRXZlbnQubWFwKGUgPT4gZS50eXBlKSk7XG4gICAgdGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbiA9IHRoaXMuZXZlbnRTdmMuZXZlbnRzJFxuICAgICAgLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50VHlwZVNldC5oYXMoZXZlbnQuZXZlbnRUeXBlKSkpXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAga2V5QW5kRXZlbnRcbiAgICAgICAgICAuZmlsdGVyKGUgPT4gZS50eXBlID09PSBldmVudC5ldmVudFR5cGUgJiYgZS5mcm9tID09PSBldmVudC5mcm9tKVxuICAgICAgICAgIC5tYXAoZSA9PiBlLmtleSlcbiAgICAgICAgICAuZm9yRWFjaChrID0+IHRoaXMuZmV0Y2hTdHJpcEZyb21LZXkoaywgZmFsc2UpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaFN0cmlwRnJvbUtleShrZXk6IHN0cmluZywgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHN0cmlwRGF0YSA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMuZmluZChzdHJpcCA9PiBzdHJpcC5rZXkgPT09IGtleSk7XG4gICAgaWYgKHN0cmlwRGF0YSkge1xuICAgICAgdGhpcy5mZXRjaFN0cmlwRnJvbVJlcXVlc3REYXRhKHN0cmlwRGF0YSwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB9XG4gIH1cbiAgXG4gIHByaXZhdGUgZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoRmFjZXRzLklDb250ZW50U3RyaXBVbml0LFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUsXG4gICkge1xuICAgIC8vIHNldHRpbmcgaW5pdGlhbCB2YWx1ZXNcbiAgICBzdHJpcC5sb2FkZXJXaWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Ta2VsZXRvblRvV2lkZ2V0cyhzdHJpcCk7XG4gICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZmV0Y2hpbmcnLCBmYWxzZSwgbnVsbCk7XG4gICAgaWYoc3RyaXAgJiYgc3RyaXAuc3RyaXBSZXF1ZXN0Rm9yID09PSAgQXBpUmVxdWVzdEZvci5TRUFSQ0ggJiYgIXN0cmlwLm9uVGFiQ2xpY2tSZXF1ZXN0KSB7XG4gICAgICB0aGlzLmZldGNoRnJvbVNlYXJjaChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybVNrZWxldG9uVG9XaWRnZXRzKFxuICAgIHN0cmlwOiBhbnlcbiAgKSB7XG4gICAgcmV0dXJuIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA3LCA4LCA5LCAxMF0ubWFwKF9jb250ZW50ID0+ICh7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZExpYicsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICB3aWRnZXREYXRhOiB7XG4gICAgICAgIGNhcmRTdWJUeXBlOiBzdHJpcC5sb2FkZXJDb25maWcgJiYgc3RyaXAubG9hZGVyQ29uZmlnLmNhcmRTdWJUeXBlIHx8ICdjYXJkLXN0YW5kYXJkLXNrZWxldG9uJyxcbiAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0cmlwKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhGYWNldHMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgcmVzdWx0czogTnNXaWRnZXRSZXNvbHZlci5JUmVuZGVyQ29uZmlnV2l0aEFueURhdGFbXSA9IFtdLFxuICAgIGZldGNoU3RhdHVzOiBURmV0Y2hTdGF0dXMsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSxcbiAgICBfdmlld01vcmVVcmw6IGFueSxcbiAgICB0YWJzUmVzdWx0cz86IE5zQ29udGVudFN0cmlwV2l0aEZhY2V0cy5JQ29udGVudFN0cmlwVGFiW10gfCB1bmRlZmluZWQsXG4gICAgLy8gY2FsY3VsYXRlUGFyZW50U3RhdHVzIGlzIHVzZWQgc28gdGhhdCBwYXJlbnRzJyBzdGF0dXMgaXMgbm90IHJlLWNhbGN1bGF0ZWQgaWYgdGhlIEFQSSBpcyBjYWxsZWQgYWdhaW4gY296IG9mIGZpbHRlcnMsIGV0Yy5cbiAgKSB7XG4gICAgY29uc3Qgc3RyaXBEYXRhID0ge1xuICAgICAgdmlld01vcmVVcmw6IHN0cmlwLnZpZXdNb3JlVXJsLFxuICAgICAga2V5OiBzdHJpcC5rZXksXG4gICAgICBjYW5IaWRlU3RyaXA6IEJvb2xlYW4oc3RyaXAuY2FuSGlkZVN0cmlwKSxcbiAgICAgIHNob3dTdHJpcDogdGhpcy5nZXRJZlN0cmlwSGlkZGVuKHN0cmlwLmtleSksXG4gICAgICBub0RhdGFXaWRnZXQ6IHN0cmlwLm5vRGF0YVdpZGdldCxcbiAgICAgIGVycm9yV2lkZ2V0OiBzdHJpcC5lcnJvcldpZGdldCxcbiAgICAgIHN0cmlwSW5mbzogc3RyaXAuaW5mbyxcbiAgICAgIHN0cmlwVGl0bGU6IHN0cmlwLnRpdGxlLFxuICAgICAgc3RyaXBUaXRsZUxpbms6IHN0cmlwLnN0cmlwVGl0bGVMaW5rLFxuICAgICAgZGlzYWJsZVRyYW5zbGF0ZTogc3RyaXAuZGlzYWJsZVRyYW5zbGF0ZSxcbiAgICAgIHNsaWRlckNvbmZpZzogc3RyaXAuc2xpZGVyQ29uZmlnLFxuICAgICAgdGFiczogdGFic1Jlc3VsdHMgPyB0YWJzUmVzdWx0cyA6IHN0cmlwLnRhYnMsXG4gICAgICBzdHJpcE5hbWU6IHN0cmlwLm5hbWUsXG4gICAgICBtb2RlOiBzdHJpcC5tb2RlLFxuICAgICAgc3RyaXBDb25maWc6IHN0cmlwLnN0cmlwQ29uZmlnLFxuICAgICAgc3RyaXBCYWNrZ3JvdW5kOiBzdHJpcC5zdHJpcEJhY2tncm91bmQsXG4gICAgICBzZWNvbmRhcnlIZWFkaW5nOiBzdHJpcC5zZWNvbmRhcnlIZWFkaW5nLFxuICAgICAgbG9hZGVyV2lkZ2V0czogc3RyaXAubG9hZGVyV2lkZ2V0cyB8fCBbXSxcbiAgICAgIGhpZGVWaWV3TW9yZVVybDpzdHJpcC5oaWRlVmlld01vcmVVcmwgfHwgZmFsc2UsXG4gICAgICB3aWRnZXRzOlxuICAgICAgICBmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAuLi4oc3RyaXAucHJlV2lkZ2V0cyB8fCBbXSkubWFwKHcgPT4gKHtcbiAgICAgICAgICAgICAgLi4udyxcbiAgICAgICAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiBgbWItMiAke3cud2lkZ2V0SG9zdENsYXNzfWAsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAuLi5yZXN1bHRzLFxuICAgICAgICAgICAgLi4uKHN0cmlwLnBvc3RXaWRnZXRzIHx8IFtdKS5tYXAodyA9PiAoe1xuICAgICAgICAgICAgICAuLi53LFxuICAgICAgICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6IGBtYi0yICR7dy53aWRnZXRIb3N0Q2xhc3N9YCxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICBdXG4gICAgICAgICAgOiBbXSxcbiAgICAgIHNob3dPbk5vRGF0YTogQm9vbGVhbihcbiAgICAgICAgc3RyaXAubm9EYXRhV2lkZ2V0ICYmXG4gICAgICAgICEoKHN0cmlwLnByZVdpZGdldHMgfHwgW10pLmxlbmd0aCArIHJlc3VsdHMubGVuZ3RoICsgKHN0cmlwLnBvc3RXaWRnZXRzIHx8IFtdKS5sZW5ndGgpICYmXG4gICAgICAgIGZldGNoU3RhdHVzID09PSAnZG9uZScsXG4gICAgICApLFxuICAgICAgc2hvd09uTG9hZGVyOiBCb29sZWFuKHN0cmlwLmxvYWRlciAmJiBmZXRjaFN0YXR1cyA9PT0gJ2ZldGNoaW5nJyksXG4gICAgICBzaG93T25FcnJvcjogQm9vbGVhbihzdHJpcC5lcnJvcldpZGdldCAmJiBmZXRjaFN0YXR1cyA9PT0gJ2Vycm9yJyksXG4gICAgfTtcbiAgICAvLyBjb25zdCBzdHJpcERhdGEgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XVxuICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcCA9IHtcbiAgICAgIC4uLnRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcCxcbiAgICAgIFtzdHJpcC5rZXldOiBzdHJpcERhdGEsXG4gICAgfTtcbiAgICBpZiAoIXRhYnNSZXN1bHRzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyAmJlxuICAgICAgICAoZmV0Y2hTdGF0dXMgPT09ICdkb25lJyB8fCBmZXRjaFN0YXR1cyA9PT0gJ2Vycm9yJykgJiZcbiAgICAgICAgc3RyaXBEYXRhLndpZGdldHNcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNoZWNrUGFyZW50U3RhdHVzKGZldGNoU3RhdHVzLCBzdHJpcERhdGEud2lkZ2V0cy5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgaWYgKGNhbGN1bGF0ZVBhcmVudFN0YXR1cyAmJiAhKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAwKSkge1xuICAgICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrUGFyZW50U3RhdHVzKGZldGNoU3RhdHVzOiBURmV0Y2hTdGF0dXMsIHN0cmlwV2lkZ2V0c0NvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZmV0Y2hTdGF0dXMgPT09ICdkb25lJyAmJiAhc3RyaXBXaWRnZXRzQ291bnQpIHtcbiAgICAgIHRoaXMubm9EYXRhQ291bnQgKz0gMTtcbiAgICB9IGVsc2UgaWYgKGZldGNoU3RhdHVzID09PSAnZG9uZScgJiYgc3RyaXBXaWRnZXRzQ291bnQpIHtcbiAgICAgIHRoaXMuc3VjY2Vzc0RhdGFDb3VudCArPSAxO1xuICAgIH0gZWxzZSBpZiAoZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgIHRoaXMuZXJyb3JEYXRhQ291bnQgKz0gMTtcbiAgICB9XG4gICAgY29uc3Qgc2V0dGxlZENvdW50ID0gdGhpcy5ub0RhdGFDb3VudCArIHRoaXMuc3VjY2Vzc0RhdGFDb3VudCArIHRoaXMuZXJyb3JEYXRhQ291bnQ7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMubGVuZ3RoO1xuICAgIGlmICh0aGlzLnN1Y2Nlc3NEYXRhQ291bnQgPiAwICYmIHNldHRsZWRDb3VudCA8IHRvdGFsQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gc2V0dGxlZENvdW50ICE9PSB0b3RhbENvdW50O1xuICAgIHRoaXMuc2hvd1BhcmVudE5vRGF0YSA9XG4gICAgICB0aGlzLm5vRGF0YUNvdW50ID4gMCAmJiB0aGlzLm5vRGF0YUNvdW50ICsgdGhpcy5lcnJvckRhdGFDb3VudCA9PT0gdG90YWxDb3VudDtcbiAgICB0aGlzLnNob3dQYXJlbnRFcnJvciA9IHRoaXMuZXJyb3JEYXRhQ291bnQgPT09IHRvdGFsQ291bnQ7XG4gIH1cbiAgY2hlY2tGb3JFbXB0eVdpZGdldChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoRmFjZXRzLklDb250ZW50U3RyaXBVbml0KTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgc3RyaXAucmVxdWVzdCAmJlxuICAgICAgKChzdHJpcC5yZXF1ZXN0LnJlcXVlc3RCb2R5ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QucmVxdWVzdEJvZHkpLmxlbmd0aCkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIHN0cmlwIHNldHRpbmdzXG4gIHRvZ2dsZUluZm8oZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgY29uc3Qgc3RyaXBJbmZvID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW2RhdGEua2V5XS5zdHJpcEluZm87XG4gICAgaWYgKHN0cmlwSW5mbykge1xuICAgICAgaWYgKHN0cmlwSW5mby5tb2RlICE9PSAnYmVsb3cnKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLndhcm4oYHN0cmlwIGluZm8gbW9kZTogJHtzdHJpcEluZm8ubW9kZX0gbm90IGltcGxlbWVudGVkIHlldGApO1xuICAgICAgICBzdHJpcEluZm8ubW9kZSA9ICdiZWxvdyc7XG4gICAgICB9XG4gICAgICBpZiAoc3RyaXBJbmZvLm1vZGUgPT09ICdiZWxvdycpIHtcbiAgICAgICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW2RhdGEua2V5XS5zdHJpcEluZm8gPSB7XG4gICAgICAgICAgLi4uc3RyaXBJbmZvLFxuICAgICAgICAgIHZpc2liaWxpdHlNb2RlOiBzdHJpcEluZm8udmlzaWJpbGl0eU1vZGUgPT09ICdoaWRkZW4nID8gJ3Zpc2libGUnIDogJ2hpZGRlbicsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmFpc2VUZWxlbWV0cnkoc3RyaXBEYXRhOiBhbnkpe1xuICAgIHRoaXMudGVsZW10cnlSZXNwb25zZS5lbWl0KHN0cmlwRGF0YSlcbiAgfVxuICBzZXRIaWRkZW5Gb3JTdHJpcChrZXk6IHN0cmluZykge1xuICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLnNob3dTdHJpcCA9IGZhbHNlO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYGNzdHJpcF8ke2tleX1gLCAnMScpO1xuICB9XG4gIC8vIHNlbGVjdGVkIHBpbGxzIGRhdGFcbiAgZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiZGF0YTogYW55LCB0YWJJbmRleDogYW55KSB7XG4gICAgaWYodGFiZGF0YS5waWxsc0RhdGEgJiYgdGFiZGF0YS5waWxsc0RhdGEubGVuZ3RoKSB7XG4gICAgICBsZXQgaW5kZXggPSB0YWJkYXRhLnBpbGxzRGF0YS5maW5kSW5kZXgoKHBpbGw6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBwaWxsLnNlbGVjdGVkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpbmRleFxuICAgIH1cbiAgICByZXR1cm4gMFxuICB9XG5cbiAgZ2V0ZGF0YShkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAoZGF0YS5zdHJpcEluZm8pIHtcbiAgICAgIHJldHVybiBkYXRhLnN0cmlwSW5mby53aWRnZXQ7XG4gICAgfVxuICAgIHJldHVybiB7fTtcblxuICB9XG5cbiAgcHVibGljIHRhYkNsaWNrZWQodGFiRXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50LCBwaWxsSW5kZXg6IGFueSwgc3RyaXBNYXA6IElTdHJpcFVuaXRDb250ZW50RGF0YSwgc3RyaXBLZXk6IHN0cmluZykge1xuICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdKSB7XG4gICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdpbnByb2dyZXNzJztcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLnRhYkxvYWRpbmcgPSB0cnVlO1xuICAgICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZGF0YTogV3NFdmVudHMuSVRlbGVtZXRyeVRhYkRhdGEgPSB7XG4gICAgICBsYWJlbDogYCR7dGFiRXZlbnQudGFiLnRleHRMYWJlbH1gLFxuICAgICAgaW5kZXg6IHRhYkV2ZW50LmluZGV4LFxuICAgIH07XG4gICAgdGhpcy5ldmVudFN2Yy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxuICAgICAge1xuICAgICAgICB0eXBlOiBXc0V2ZW50cy5FbnVtSW50ZXJhY3RUeXBlcy5DTElDSyxcbiAgICAgICAgc3ViVHlwZTogV3NFdmVudHMuRW51bUludGVyYWN0U3ViVHlwZXMuSE9NRV9QQUdFX1NUUklQX1RBQlMsXG4gICAgICAgIGlkOiBgJHtfLmNhbWVsQ2FzZShkYXRhLmxhYmVsKX0tdGFiYCxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgbW9kdWxlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5bW9kdWxlcy5IT01FLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBjdXJyZW50VGFiRnJvbU1hcDogYW55ID0gc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XTtcbiAgICBjb25zdCBjdXJyZW50UGlsbEZyb21NYXA6IGFueSA9IHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF07XG4gICAgY29uc3QgY3VycmVudFN0cmlwID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5maW5kKHMgPT4gcy5rZXkgPT09IHN0cmlwS2V5KTtcbiAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XSAmJiBjdXJyZW50VGFiRnJvbU1hcCkge1xuICAgICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgLi4udGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgdGFiU2VsZWN0ZWQ6IGN1cnJlbnRUYWJGcm9tTWFwLnZhbHVlLFxuICAgICAgICBwaWxsU2VsZWN0ZWQ6IGN1cnJlbnRQaWxsRnJvbU1hcC52YWx1ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRTdHJpcCAmJiBjdXJyZW50VGFiRnJvbU1hcCAmJiAhY3VycmVudFRhYkZyb21NYXAuY29tcHV0ZURhdGFPbkNsaWNrICYmIGN1cnJlbnRQaWxsRnJvbU1hcCkge1xuICAgICAgaWYgKGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0UmVxdWlyZWQgJiYgY3VycmVudFBpbGxGcm9tTWFwLnJlcXVlc3QpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0LnNlYXJjaFY2KSB7XG4gICAgICAgICAgLy8gdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihjdXJyZW50U3RyaXAsIHRhYkV2ZW50LmluZGV4LCBjdXJyZW50VGFiRnJvbU1hcCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLnRhYkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5ZmlsdGVyKGN1cnJlbnRTdHJpcCwgY3VycmVudFRhYkZyb21NYXAsIHRydWUpO1xuICAgICAgICBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XSkge1xuICAgICAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLmZldGNoVGFiU3RhdHVzID0gJ2lucHJvZ3Jlc3MnO1xuICAgICAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLnRhYkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucmVzZXRGaWx0ZXIoc3RyaXBNYXAsIHRhYkV2ZW50LmluZGV4ICxwaWxsSW5kZXgpXG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0pIHtcbiAgICAgICAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLmZldGNoVGFiU3RhdHVzID0gJ2RvbmUnO1xuICAgICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF0udGFiTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRQaWxsKHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnBpbGxzRGF0YSlcbiAgICAgICAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdWydzZWxlY3RlZCddPXRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sICAgICAgICAgMjAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwaWxsQ2xpY2tlZChldmVudDogYW55LCBzdHJpcE1hcDogSVN0cmlwVW5pdENvbnRlbnREYXRhLCBzdHJpcEtleTogYW55LCBwaWxsSW5kZXg6IGFueSwgdGFiSW5kZXg6IGFueSkge1xuICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiSW5kZXhdKSB7XG4gICAgICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdpbnByb2dyZXNzJztcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLnRhYkxvYWRpbmcgPSB0cnVlO1xuICAgICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudFRhYkZyb21NYXA6IGFueSA9IHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJJbmRleF07XG4gICAgY29uc3QgY3VycmVudFBpbGxGcm9tTWFwOiBhbnkgPSBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdO1xuICAgIGNvbnN0IGN1cnJlbnRTdHJpcCA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMuZmluZChzID0+IHMua2V5ID09PSBzdHJpcEtleSk7XG4gICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcEtleV0gJiYgY3VycmVudFRhYkZyb21NYXApIHtcbiAgICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcEtleV0udmlld01vcmVVcmwucXVlcnlQYXJhbXMgPSB7XG4gICAgICAgIC4uLnRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcEtleV0udmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgIHRhYlNlbGVjdGVkOiBjdXJyZW50VGFiRnJvbU1hcC52YWx1ZSxcbiAgICAgICAgcGlsbFNlbGVjdGVkOiBjdXJyZW50UGlsbEZyb21NYXAudmFsdWUsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoY3VycmVudFN0cmlwICYmIGN1cnJlbnRUYWJGcm9tTWFwICYmICFjdXJyZW50VGFiRnJvbU1hcC5jb21wdXRlRGF0YU9uQ2xpY2sgJiYgY3VycmVudFBpbGxGcm9tTWFwKSB7XG4gICAgICBpZiAoY3VycmVudFBpbGxGcm9tTWFwLnJlcXVlc3RSZXF1aXJlZCAmJiBjdXJyZW50UGlsbEZyb21NYXAucmVxdWVzdCkge1xuICAgICAgICAvLyBjYWxsIEFQSSB0byBnZXQgdGFiIGRhdGEgYW5kIHByb2Nlc3NcbiAgICAgICAgLy8gdGhpcy5wcm9jZXNzU3RyaXAoY3VycmVudFN0cmlwLCBbXSwgJ2ZldGNoaW5nJywgdHJ1ZSwgbnVsbClcbiAgICAgICAgaWYgKGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0LnNlYXJjaFY2KSB7XG4gICAgICAgICAgLy8gdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihjdXJyZW50U3RyaXAsIHRhYkluZGV4LCBwaWxsSW5kZXgsIGN1cnJlbnRQaWxsRnJvbU1hcCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBpbGxGcm9tTWFwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gpIHtcbiAgICAgICAgICAvLyB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVRyZW5kaW5nKGN1cnJlbnRTdHJpcCwgdGFiSW5kZXgsIHBpbGxJbmRleCwgY3VycmVudFBpbGxGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XSkge1xuICAgICAgICAvLyAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnRhYkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gfVxuXG4gICAgICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdldFRhYkRhdGFCeWZpbHRlcihjdXJyZW50U3RyaXAsIGN1cnJlbnRUYWJGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJJbmRleF0pIHtcbiAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdpbnByb2dyZXNzJztcbiAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnJlc2V0RmlsdGVyKHN0cmlwTWFwLCB0YWJJbmRleCAscGlsbEluZGV4KVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiSW5kZXhdKSB7XG4gICAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdkb25lJztcbiAgICAgICAgICAgIHN0cmlwTWFwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLnRhYkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHN0cmlwTWFwLnNob3dPbkxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkUGlsbChzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGEpXG4gICAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XVsnc2VsZWN0ZWQnXT10cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LCAgICAgICAgIDIwMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTZWxlY3RlZFBpbGwocGlsbERhdGE6IGFueSl7XG4gICAgaWYocGlsbERhdGEgJiYgcGlsbERhdGEubGVuZ3RoKXtcbiAgICAgIHBpbGxEYXRhLmZvckVhY2goKHBpbGw6IGFueSkgPT4ge1xuICAgICAgICBwaWxsWydzZWxlY3RlZCddID0gZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFRhYkRhdGFCeWZpbHRlcihcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoRmFjZXRzLklDb250ZW50U3RyaXBVbml0LFxuICAgIGN1cnJlbnRUYWI6IE5zQ29udGVudFN0cmlwV2l0aEZhY2V0cy5JQ29udGVudFN0cmlwVGFiLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ3N0cmlwIC0tICcsIHN0cmlwKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnRUYWIgLS0gJywgY3VycmVudFRhYik7XG4gICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKCdjYWxjdWxhdGVQYXJlbnRTdGF0dXMtLSAnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIC8vIFRPRE86IFdyaXRlIGxvZ2ljIGZvciBpbmRpdmlkdWFsIGZpbHRlciBpZiBwYXNzZWQgaW4gY29uZmlnXG4gICAgLy8gYWRkIHN3aXRjaCBjYXNlIGJhc2VkIG9uIGNvbmZpZyBrZXkgcGFzc2VkXG4gIH1cblxuICBwcml2YXRlIGdldElmU3RyaXBIaWRkZW4oa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdG9yYWdlSXRlbSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oYGNzdHJpcF8ke2tleX1gKTtcbiAgICByZXR1cm4gQm9vbGVhbihzdG9yYWdlSXRlbSAhPT0gJzEnKTtcbiAgfVxuXG4gIC8vIHRyYW5zbGF0ZSBsYWJlc1xuICB0cmFuc2xhdGVMYWJlbHMobGFiZWw6IHN0cmluZywgdHlwZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ3RyYW5zbGF0aW9ucy50cmFuc2xhdGVMYWJlbChsYWJlbCwgdHlwZSwgJycpO1xuICB9XG5cbiAgcmVkaXJlY3RWaWV3QWxsKHN0cmlwRGF0YTogYW55LCBwYXRoOiBzdHJpbmcsIHF1ZXJ5UGFyYW1zRGF0YTogYW55KSB7XG4gICAgaWYodGhpcy5lbWl0Vmlld0FsbCkge1xuICAgICAgdGhpcy52aWV3QWxsUmVzcG9uc2UuZW1pdChzdHJpcERhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoXSwgeyAgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zRGF0YSB9KVxuICAgIH1cbiAgfVxuICBpZGVudGlmeShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICBpZiAoaW5kZXggPj0gMCkgeyB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgdHJhY2tlcihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICBpZiAoaW5kZXggPj0gMCkgeyB9XG4gICAgcmV0dXJuIF8uZ2V0KGl0ZW0sICd3aWRnZXREYXRhLmNvbnRlbnQuaWRlbnRpZmllcicpXG4gIH1cblxuICBnZXRDb250aW5ldUxlYXJuaW5nTGVudGgoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICB9XG5cbiAgc2hvd0FjY29yZGlvbihrZXk6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnV0aWxpdHlTdmMuaXNNb2JpbGUgJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW2tleV0ubW9kZSA9PT0gJ2FjY29yZGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3dBY2NvcmRpb25EYXRhO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNoZWNrQ29uZGl0aW9uKHdEYXRhOiBOc0NvbnRlbnRTdHJpcFdpdGhGYWNldHMuSUNvbnRlbnRTdHJpcE11bHRpcGxlLCBkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAod0RhdGEuc3RyaXBzWzBdLnN0cmlwQ29uZmlnICYmIHdEYXRhLnN0cmlwc1swXS5zdHJpcENvbmZpZy5oaWRlU2hvd0FsbCkge1xuICAgICAgcmV0dXJuICF3RGF0YS5zdHJpcHNbMF0uc3RyaXBDb25maWcuaGlkZVNob3dBbGw7XG4gICAgfVxuICAgIHJldHVybiB3RGF0YS5zdHJpcHNbMF0udmlld01vcmVVcmwgJiYgZGF0YS53aWRnZXRzICYmIGRhdGEud2lkZ2V0cy5sZW5ndGggPj0gNDtcbiAgfVxuICBjaGVja1Zpc2libGUoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvICYmIGRhdGEuc3RyaXBJbmZvLnZpc2liaWxpdHlNb2RlID09PSAndmlzaWJsZSc7XG4gIH1cblxuICBnZXRTZWxlY3RlZEluZGV4KHN0cmlwc1Jlc3VsdERhdGFNYXA6IGFueSwga2V5OiBhbnkpOiBudW1iZXIge1xuICAgIGxldCByZXR1cm5WYWx1ZSA9IDA7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgZ2V0TGVuZ3RoKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIGlmICghZGF0YS50YWJzIHx8ICFkYXRhLnRhYnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZGF0YS53aWRnZXRzID8gZGF0YS53aWRnZXRzLmxlbmd0aCA6IDA7XG4gICAgfSB7XG4gICAgICAvLyBpZiB0YWJzIGFyZSB0aGVyZSBjaGVjayBpZiBlYWNoIHRhYiBoYXMgd2lkZ2V0cyBhbmQgZ2V0IHRoZSB0YWIgd2l0aCBtYXggd2lkZ2V0c1xuICAgICAgbGV0IHRhYldpdGhNYXhXaWRnZXRzOiBhbnkgPSB7fVxuICAgICAgZGF0YS50YWJzLmZvckVhY2goKHRhYjogYW55KT0+e1xuICAgICAgICBpZih0YWIucGlsbHNEYXRhICYmIHRhYi5waWxsc0RhdGEubGVuZ3RoKXtcbiAgICAgICAgICB0YWJXaXRoTWF4V2lkZ2V0cyA9IHRhYi5waWxsc0RhdGEucmVkdWNlKFxuICAgICAgICAgICAgKHByZXY6IGFueSwgY3VycmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmICghcHJldi53aWRnZXRzICYmICFjdXJyZW50LndpZGdldHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocHJldi53aWRnZXRzICYmIGN1cnJlbnQud2lkZ2V0cykge1xuICAgICAgICAgICAgICAgIHJldHVybiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpID8gcHJldiA6IGN1cnJlbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnQud2lkZ2V0cyAmJiAhcHJldi53aWRnZXRzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFjdXJyZW50LndpZGdldHMgJiYgcHJldi53aWRnZXRzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgIC8vIHJldHVybiAocHJldi53aWRnZXRzICYmIGN1cnJlbnQud2lkZ2V0cyAmJiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpICkgPyBwcmV2IDogY3VycmVudFxuICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGFsaWduXG4gICAgICAgICAgICB9LCBkYXRhLnRhYnNbMF0pO1xuXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAvLyBpZiB0YWJzIGhhcyBhdGxlYXN0IDEgd2lkZ2V0cyB0aGVuIHN0cmlwIHdpbGwgc2hvdyBvciBlbHNlIG5vdFxuICAgICAgcmV0dXJuIHRhYldpdGhNYXhXaWRnZXRzLndpZGdldHMgPyB0YWJXaXRoTWF4V2lkZ2V0cy53aWRnZXRzLmxlbmd0aCA6IDA7XG4gICAgfVxuICB9XG4gIGlzU3RyaXBTaG93aW5nKGRhdGE6IGFueSkge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5rZXkgPT09IHRoaXMuZW52aXJvbm1lbnQucHJvZ3JhbVN0cmlwS2V5ICYmICghZGF0YS50YWJzIHx8ICFkYXRhLnRhYnMubGVuZ3RoKSAmJlxuICAgICAgZGF0YS5zdHJpcFRpdGxlID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcE5hbWUgJiYgZGF0YS53aWRnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRhdGEud2lkZ2V0cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgICBpZiAoa2V5ICYmIGtleS53aWRnZXREYXRhLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcFByaW1hcnlDYXRlZ29yeSkge1xuICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ2RhdGEua2V5JywgZGF0YSwgZGF0YS5rZXksIGRhdGEud2lkZ2V0cyk7XG4gICAgcmV0dXJuIGRhdGEuc2hvd1N0cmlwO1xuICB9XG4gIGdldCBpc01vYmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy51dGlsaXR5U3ZjLmlzTW9iaWxlIHx8IGZhbHNlO1xuICB9XG5cblxuXG4gIC8vIHNlYXJjaCBhcGkgd2l0aCBmYWNldHNcbiAgYXN5bmMgcG9zdFJlcXVlc3RNZXRob2Qoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aEZhY2V0cy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICByZXF1ZXN0OiBOc0NvbnRlbnRTdHJpcFdpdGhGYWNldHMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICBhcGlVcmw6IHN0cmluZyxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5wb3N0QXBpTWV0aG9kKGFwaVVybCwgcmVxdWVzdCkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHRzLnJlc3VsdCAmJiByZXN1bHRzLnJlc3VsdC5jb250ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgICByZXN1bHRzLnJlc3VsdC5jb250ZW50ICYmIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICAgICAgICBxOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgICAgICAgIGY6IHt9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdHMsIHZpZXdNb3JlVXJsIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRnJvbVNlYXJjaChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoRmFjZXRzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5yZXF1ZXN0Qm9keSkubGVuZ3RoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwLCBzdHJpcC5yZXF1ZXN0LnJlcXVlc3RCb2R5LCBzdHJpcC5yZXF1ZXN0LmFwaVVybCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgICBsZXQgdGFiSW5kZXg9MFxuICAgICAgICAgIGxldCBwaWxsSW5kZXg9IDBcbiAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0cyAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5tYXBBbGxEYXRhV2l0aEZhY2V0cyhzdHJpcCwgcmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgcmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuZmFjZXRzLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpXG4gICAgICAgICAgICBjb25zdCB3aWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCk7XG4gICAgICAgICAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgICAvLyAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgICAgLy8gICBjb25zdCBhbGxQaWxscyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YTtcbiAgICAgICAgICAgIC8vICAgdGhpcy5yZXNldFNlbGVjdGVkUGlsbChhbGxQaWxscylcbiAgICAgICAgICAgIC8vICAgaWYgKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1t0YWJJbmRleF0pIHtcbiAgICAgICAgICAgIC8vICAgICBpZihhbGxQaWxscyAmJiBhbGxQaWxscy5sZW5ndGggJiYgYWxsUGlsbHNbcGlsbEluZGV4XSl7XG4gICAgICAgICAgICAvLyAgICAgICBhbGxQaWxsc1twaWxsSW5kZXhdID0ge1xuICAgICAgICAgICAgLy8gICAgICAgICAuLi5hbGxQaWxsc1twaWxsSW5kZXhdLFxuICAgICAgICAgICAgLy8gICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICAgLy8gICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgLy8gICAgICAgICBzZWxlY3RlZDogdHJ1ZVxuICAgICAgICAgICAgLy8gICAgICAgfTtcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyAgICAgYWxsVGFic1t0YWJJbmRleF0gPSB7XG4gICAgICAgICAgICAvLyAgICAgICAuLi5hbGxUYWJzW3RhYkluZGV4XSxcbiAgICAgICAgICAgIC8vICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgICAvLyAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgLy8gICAgIH07XG4gICAgICAgICAgICAvLyAgICAgdGFiUmVzdWx0cyA9IGFsbFRhYnM7XG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIC8vIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgLy8gICBzdHJpcCxcbiAgICAgICAgICAgIC8vICAgd2lkZ2V0cyxcbiAgICAgICAgICAgIC8vICAgJ2RvbmUnLFxuICAgICAgICAgICAgLy8gICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAvLyAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgLy8gICB0YWJSZXN1bHRzIC8vIHRhYlJlc3VsdHMgYXMgd2lkZ2V0c1xuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgXG4gICAgfVxuICB9XG5cbiAgbWFwQWxsRGF0YVdpdGhGYWNldHMoc3RyaXAgOmFueSwgY29udGVudCA6IGFueSwgZmFjZXRzOmFueSwgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhzdHJpcCwgY29udGVudClcbiAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicztcbiAgICBsZXQgZmFjZXQ6IGFueSA9IFtdXG4gICAgYWxsVGFicy5mb3JFYWNoKChlbGU6IGFueSk9PiB7XG4gICAgICBlbGVbJ2ZldGNoVGFiU3RhdHVzJ109ICdkb25lJ1xuICAgICAgbGV0IGZpbHRlcmVkRGF0YSA9ICBjb250ZW50LmZpbHRlcigoY29udEVsZTogYW55KSA9PiBjb250RWxlLm5sd1VzZXJFeHAuaW5jbHVkZXMoZWxlLnZhbHVlKSlcbiAgICAgIC8vIGZpbHRlcmVkRGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgLy8gICBmYWNldCA9ICBbLi4uZmFjZXQsLi4uXy5kaWZmZXJlbmNlKGVsZW1lbnQubmx3T3JncyAsZmFjZXQpXTtcbiAgICAgIC8vIH0pO1xuICAgICAgZWxlWyd3aWRnZXRzJ10gPSBmaWx0ZXJlZERhdGFcbiAgICAgIGVsZS5waWxsc0RhdGEuZm9yRWFjaCgocGlsbDogYW55KSA9PiB7XG4gICAgICAgIGlmKHBpbGwudmFsdWUgPT09ICdhbGwnKSB7XG4gICAgICAgICAgcGlsbFsnd2lkZ2V0cyddID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhmaWx0ZXJlZERhdGEsIHN0cmlwKTtcbiAgICAgICAgICBwaWxsWydmZXRjaFRhYlN0YXR1cyddPSAnZG9uZSdcbiAgICAgICAgfSBlbHNlIGlmKHBpbGwudmFsdWUgPT09ICdjb3Vyc2UnKSB7XG4gICAgICAgICAgbGV0IGNvbnRlbnRGaWx0ZXJlZERhdGEgPSAgZmlsdGVyZWREYXRhLmZpbHRlcigoY29udEVsZTogYW55KSA9PiBjb250RWxlLmNvdXJzZUNhdGVnb3J5LnRvTG93ZXJDYXNlKCkgPT09IHBpbGwudmFsdWUpXG4gICAgICAgICAgcGlsbFsnd2lkZ2V0cyddID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50RmlsdGVyZWREYXRhLCBzdHJpcCk7XG4gICAgICAgICAgcGlsbFsnZmV0Y2hUYWJTdGF0dXMnXT0gJ2RvbmUnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGNvbnRlbnRGaWx0ZXJlZERhdGEgPSAgZmlsdGVyZWREYXRhLmZpbHRlcigoY29udEVsZTogYW55KSA9PiBjb250RWxlLmNvdXJzZUNhdGVnb3J5LnRvTG93ZXJDYXNlKCkgIT09ICdjb3Vyc2UnKVxuICAgICAgICAgIHBpbGxbJ3dpZGdldHMnXSA9IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29udGVudEZpbHRlcmVkRGF0YSwgc3RyaXApO1xuICAgICAgICAgIHBpbGxbJ2ZldGNoVGFiU3RhdHVzJ109ICdkb25lJ1xuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBlbGVbJ2ZhY2V0cyddID0gW3tcbiAgICAgIC8vICAgbmFtZTonbmx3T3JncycsXG4gICAgICAvLyAgIHZhbHVlczogZmFjZXRcbiAgICAgIC8vIH1dXG4gICAgICBlbGVbJ2ZhY2V0cyddID0gZmFjZXRzXG4gICAgfSlcbiAgICBzdHJpcC50YWJzWzBdLnBpbGxzRGF0YVswXS5mZXRjaFRhYlN0YXR1cyA9ICdkb25lJztcbiAgICBzdHJpcC50YWJzWzBdLnBpbGxzRGF0YVswXS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgc3RyaXAuc2hvd09uTG9hZGVyID0gZmFsc2U7XG4gICAgdGhpcy5yZXNldFNlbGVjdGVkUGlsbChzdHJpcC50YWJzWzBdLnBpbGxzRGF0YSlcbiAgICBzdHJpcC50YWJzWzBdLnBpbGxzRGF0YVswXVsnc2VsZWN0ZWQnXT10cnVlXG4gICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgIHN0cmlwLnZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgICBhbGxUYWJzIC8vIHRhYlJlc3VsdHMgYXMgd2lkZ2V0c1xuICAgICAgICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoXG4gICAgY29udGVudHM6IE5zQ29udGVudC5JQ29udGVudFtdLFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhGYWNldHMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICkge1xuICAgIHJldHVybiAoY29udGVudHMgfHwgW10pLm1hcCgoY29udGVudCwgaWR4KSA9PiAoXG4gICAgICBjb250ZW50ID8ge1xuICAgICAgICB3aWRnZXRUeXBlOiAnY2FyZExpYicsXG4gICAgICAgIHdpZGdldFN1YlR5cGU6ICdjYXJkQ29udGVudExpYicsXG4gICAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgICB3aWRnZXREYXRhOiB7XG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAuLi4oY29udGVudC5iYXRjaCAmJiB7IGJhdGNoOiBjb250ZW50LmJhdGNoIH0pLFxuICAgICAgICAgIGNhcmRTdWJUeXBlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5jYXJkU3ViVHlwZSxcbiAgICAgICAgICBjYXJkQ3VzdG9tZUNsYXNzOiBzdHJpcC5jdXN0b21lQ2xhc3MgPyBzdHJpcC5jdXN0b21lQ2xhc3MgOiAnJyxcbiAgICAgICAgICBjb250ZXh0OiB7IHBhZ2VTZWN0aW9uOiBzdHJpcC5rZXksIHBvc2l0aW9uOiBpZHggfSxcbiAgICAgICAgICBpbnRyYW5ldE1vZGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmludHJhbmV0TW9kZSxcbiAgICAgICAgICBkZWxldGVkTW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuZGVsZXRlZE1vZGUsXG4gICAgICAgICAgY29udGVudFRhZ3M6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNvbnRlbnRUYWdzLFxuICAgICAgICB9LFxuICAgICAgfSA6IHtcbiAgICAgICAgd2lkZ2V0VHlwZTogJ2NhcmQnLFxuICAgICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnQnLFxuICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgICAgd2lkZ2V0RGF0YToge30sXG4gICAgICB9XG4gICAgKSk7XG4gIH1cblxuICBnZXRvcmdEYXRhKGV2ZW50RGF0YTogYW55LCBzdHJpcE1hcDogYW55LCB0YWJJbmRleDogYW55KSB7XG4gICAgY29uc29sZS5sb2coZXZlbnREYXRhKVxuICAgIGxldCBzZWxlY3RlZFZhbHVlID0gZXZlbnREYXRhLnRhcmdldC52YWx1ZVxuICAgIGxldCBwaWxsSW5kZXg6IGFueSA9IHRoaXMuZ2V0U2VsZWN0ZWRQaWxsSW5kZXgoc3RyaXBNYXAudGFic1t0YWJJbmRleF0sIHRhYkluZGV4KVxuICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiSW5kZXhdKSB7XG4gICAgICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdpbnByb2dyZXNzJztcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLnRhYkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHN0cmlwTWFwLnNob3dPbkxvYWRlciA9IHRydWU7XG4gICAgICBsZXQgcmV0dXJuZWRWYWx1ZXMgPSBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS53aWRnZXRzLmZpbHRlcigoZWxlOiBhbnkpID0+IHtcbiAgICAgICAgdmFyIHdvcmRzID0gZWxlLm5sd09yZ3MubWFwKHYgPT4gdi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgcmV0dXJuIHdvcmRzLmluY2x1ZGVzKHNlbGVjdGVkVmFsdWUpXG4gICAgICB9KVxuICAgICAgc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF1bJ3dpZGdldHMnXSA9IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMocmV0dXJuZWRWYWx1ZXMsIHN0cmlwTWFwKTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkluZGV4XSkge1xuICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdkb25lJztcbiAgICAgICAgc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF0udGFiTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkUGlsbChzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGEpXG4gICAgICAgIHN0cmlwTWFwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdWydzZWxlY3RlZCddPXRydWVcbiAgICAgIH1cbiAgICB9LCAgICAgICAgIDIwMCk7XG4gIH1cblxuICByZXNldEZpbHRlcihzdHJpcE1hcDogYW55LCAgdGFiSW5kZXg6IGFueSwgcGlsbEluZGV4OiBhbnkpIHtcbiAgICAvLyBsZXQgc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50RGF0YS50YXJnZXQudmFsdWVcbiAgICBpZihwaWxsSW5kZXgpIHtcbiAgICAgcGlsbEluZGV4ID0gdGhpcy5nZXRTZWxlY3RlZFBpbGxJbmRleChzdHJpcE1hcC50YWJzW3RhYkluZGV4XSwgdGFiSW5kZXgpXG4gICAgfVxuICAgIHRoaXMuZmFjZXRGb3JtLnJlc2V0KHtcbiAgICAgIG9yZzogMFxuICAgICB9KTtcbiAgICBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkluZGV4XSkge1xuICAgICAgc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF0uZmV0Y2hUYWJTdGF0dXMgPSAnaW5wcm9ncmVzcyc7XG4gICAgICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSB0cnVlO1xuICAgICAgLy8gbGV0IHJldHVybmVkVmFsdWVzID0gc3RyaXBNYXAudGFic1t0YWJJbmRleF0ud2lkZ2V0cy5maWx0ZXIoKGVsZTogYW55KSA9PiB7XG4gICAgICAvLyAgIHZhciB3b3JkcyA9IGVsZS5ubHdPcmdzLm1hcCh2ID0+IHYudG9Mb3dlckNhc2UoKSk7XG4gICAgICAvLyAgIHJldHVybiB3b3Jkcy5pbmNsdWRlcyhzZWxlY3RlZFZhbHVlKVxuICAgICAgLy8gfSlcbiAgICAgIGxldCBjb250ZW50RGF0YTogYW55ID0gc3RyaXBNYXAudGFic1t0YWJJbmRleF0ud2lkZ2V0cyB8fCBbXVxuICAgICAgc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF1bJ3dpZGdldHMnXSA9IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29udGVudERhdGEsIHN0cmlwTWFwKTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkluZGV4XSkge1xuICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdkb25lJztcbiAgICAgICAgc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF0udGFiTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkUGlsbChzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGEpXG4gICAgICAgIHN0cmlwTWFwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdWydzZWxlY3RlZCddPXRydWVcbiAgICAgIH1cbiAgICB9LCAgICAgICAgIDIwMCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhY29udGVudEF2YWlsYWJsZTsgZWxzZSBvdGhlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI290aGVyVGVtcGxhdGU+XG4gIDwhLS0gPGRpdiAqbmdJZj1cInNob3dQYXJlbnRMb2FkZXJcIiBjbGFzcz1cInRleHQtY2VudGVyIG15LTJcIj5cbiAgICA8bWF0LXNwaW5uZXIgY2xhc3M9XCJpbmxpbmUtYmxvY2tcIj48L21hdC1zcGlubmVyPlxuICA8L2Rpdj4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UGFyZW50RXJyb3JcIiBbc2JVaVJlc29sdmVyV2lkZ2V0XT1cIndpZGdldERhdGEuZXJyb3JXaWRnZXRcIj48L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dQYXJlbnROb0RhdGFcIiBbc2JVaVJlc29sdmVyV2lkZ2V0XT1cIndpZGdldERhdGEubm9EYXRhV2lkZ2V0XCI+PC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGtleSBvZiBzdHJpcHNLZXlPcmRlcjsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogaWRlbnRpZnlcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTdHJpcFNob3dpbmcoc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldKVwiPlxuICAgICAgPGEgbmFtZT1cInt7c3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcFRpdGxlfX1cIiBbY2xhc3NdPVwia2V5XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzdHJpcHNSZXN1bHREYXRhTWFwICYmIChnZXRMZW5ndGgoc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldKSB8fFxuICAgICAgICAgICAgICAgICAgICBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNob3dPbk5vRGF0YSB8fFxuICAgICAgICAgICAgICAgICAgICBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNob3dPbkxvYWRlciB8fFxuICAgICAgICAgICAgICAgICAgICBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNob3dPbkVycm9yKVxuICAgICAgICAgICAgICAgICAgXCIgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICF3aWRnZXREYXRhPy5pc0NoYW5uZWxTdHJpcCA/ICd4czpweC04IHN4OnB4LTEwc3MnIDogaSA+IDAgPyAnbXQtMTInIDogJydcbiAgICAgICAgICAgICAgICAgIFwiIFtpZF09XCJrZXlcIiBbbmdDbGFzc109XCIhd2lkZ2V0RGF0YT8uaXNDaGFubmVsU3RyaXAgPyAnbWFyZ2luLWJvdHRvbS1jdXN0b20nIDogJ21hcmdpbi1ib3R0b20teHMnXCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IHBhZDogc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcEJhY2tncm91bmQgfVwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcEJhY2tncm91bmQgfVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcGwtNCBwci00IG1kOnByLTAgbWQ6cGwtMCBcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICF3aWRnZXREYXRhPy5pc0NoYW5uZWxTdHJpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcFRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ21iLTgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC0xIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWF0LXN1YmhlYWRpbmctMSBtYXJnaW4tcmVtb3ZlIGlubGluZS1ibG9jayBcIiAqbmdJZj1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBUaXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXBpdGFsaXplXCIgKm5nSWY9XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LmRpc2FibGVUcmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3tzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwVGl0bGV9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5kaXNhYmxlVHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHRyYW5zbGF0ZUxhYmVscyhzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwVGl0bGUsICdob21lJykgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcEluZm8/Lmljb25cIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlSW5mbyhzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0pXCIgaTE4bi1tYXRUb29sdGlwIG1hdFRvb2x0aXA9XCJpbmZvXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWFyZ2luLWxlZnQteHNcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj57eyBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwSW5mbz8uaWNvbi5pY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YSAqbmdJZj1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBUaXRsZUxpbms/LmxpbmtcIlxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcFRpdGxlTGluaz8ubGlua1wiXG4gICAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcFRpdGxlTGluaz8ubGluaz8ucXVlcnlQYXJhbXNcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXByaW1hcnktdGV4dCB3cy1tYXQtZGVmYXVsdC10ZXh0XCIgW2NvbG9yXT1cIidhY2NlbnQnXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcFRpdGxlTGluaz8uaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3BhY2VyXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0gdmlld0FsbCBzdGFydC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjaGVja0NvbmRpdGlvbih3aWRnZXREYXRhICwgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldKVwiIGNsYXNzPVwiYmxvY2sgbWQ6aGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTQgcGwtMiB2aWV3LW1vcmUgd3MtbWF0LWRlZmF1bHQtdGV4dCAgXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZmxleCB3cy1tYXQtZGVmYXVsdC10ZXh0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtYXQtYm9keS0xIGN1cnNvci1wb2ludGVyXCIgXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJhaXNlVGVsZW1ldHJ5KHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSk7cmVkaXJlY3RWaWV3QWxsKHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSwgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy52aWV3TW9yZVVybD8ucGF0aCwgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy52aWV3TW9yZVVybD8ucXVlcnlQYXJhbXMgKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGkxOG4gY2xhc3M9XCJ3cy1tYXQtZGVmYXVsdC10ZXh0XCI+e3t0cmFuc2xhdGVMYWJlbHMod2lkZ2V0RGF0YS5zdHJpcHNbMF0udmlld01vcmVVcmwudmlld01vcmVUZXh0LCdob21lJykgIHx8ICdTZWUgYWxsJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIndzLW1hdC1kZWZhdWx0LXRleHQgbWF0LWljb24gbm90cmFuc2xhdGUgbWF0ZXJpYWwtaWNvbnMgbWF0LWljb24tbm8tY29sb3JcIiBjb2xvcj1cImFjY2VudFwiPm5hdmlnYXRlX25leHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIHZpZXdBbGwgZW5kLS0+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2V0SGlkZGVuRm9yU3RyaXAoa2V5KVwiICpuZ0lmPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5jYW5IaWRlU3RyaXBcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8ubW9kZSA9PT0gJ2FjY29yZGlvbicgJiYgaXNNb2JpbGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93QWNjb3JkaW9uRGF0YSA9ICFzaG93QWNjb3JkaW9uRGF0YVwiPnt7IHNob3dBY2NvcmRpb25EYXRhID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZScgfX1cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiICpuZ0lmPVwiY2hlY2tWaXNpYmxlKHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSlcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbc2JVaVJlc29sdmVyV2lkZ2V0XT1cImdldGRhdGEoc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldKVwiPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc2hvd09uTm9EYXRhXCJcbiAgICAgICAgICAgICAgW3NiVWlSZXNvbHZlcldpZGdldF09XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/Lm5vRGF0YVdpZGdldFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc2hvd09uRXJyb3JcIlxuICAgICAgICAgICAgICBbc2JVaVJlc29sdmVyV2lkZ2V0XT1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uZXJyb3JXaWRnZXRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwhLS0gSUYgbm8gZXJyb3JzIHRoZW4gcHJvY2VlZCB0byBzaG93IHRhYnMgb3Igbm9uIHRhYnMgc3RyaXAgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc2hvd09uTm9EYXRhICYmICFzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNob3dPbkVycm9yXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0udGFicyAmJiBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0udGFicy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXRhYi1ncm91cCBhbmltYXRpb25EdXJhdGlvbj1cIjBtc1wiIFtzZWxlY3RlZEluZGV4XT1cImdldFNlbGVjdGVkSW5kZXgoc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLCBrZXkpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC10YWItbGFiZWxzIHctZnVsbCBzdHJpcHMtdGFiZ3JvdXBcIiBkeW5hbWljSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRUYWJDaGFuZ2UpPVwidGFiQ2xpY2tlZCgkZXZlbnQsIDAsIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSwga2V5KVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJ7e3RhYj8ubGFiZWx9fVwiICpuZ0Zvcj1cImxldCB0YWIgb2Ygc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLnRhYnM7IGxldCBsYXN0ID0gbGFzdDtsZXQgdGFiSW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48c3BhbiAqbmdJZj1cIiF0YWI/LmRpc2FibGVUcmFuc2xhdGVcIj57eyB0cmFuc2xhdGVMYWJlbHModGFiPy5sYWJlbCwgJ2hvbWUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYi1oaWdobGlnaHRcIiAqbmdJZj1cInRhYj8uZGlzYWJsZVRyYW5zbGF0ZVwiPnt7dGFiPy5sYWJlbH19PC9zcGFuPiAmbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWI/LnNob3dUYWJEYXRhQ291bnQgJiYgdGFiPy53aWRnZXRzPy5sZW5ndGhcIj4oe3t0YWI/LndpZGdldHM/Lmxlbmd0aH19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2Z1bGxcIiAqbmdJZj1cInRhYj8ucGlsbHNEYXRhICYmIHRhYj8ucGlsbHNEYXRhPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbS1jZW50ZXIgZmxleC13cmFwIGdhcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZhY2V0IG9mIHRhYj8uZmFjZXRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmYWNldEZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmFjZXRzLXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJvcmdcIiAoY2hhbmdlKT1cImdldG9yZ0RhdGEoJGV2ZW50LCAgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLCB0YWJJbmRleClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjBcIiBzZWxlY3RlZCBkaXNhYmxlZD5DaG9vc2UgYnkgb3JnYW5pc2F0aW9uPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ7e2QubmFtZX19XCIgKm5nRm9yPVwibGV0IGQgb2YgZmFjZXQudmFsdWVzXCIgPnt7ZC5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdCAgY2xhc3M9XCJjb250ZW50LXBpbGwtZGF0YVwiIGFyaWEtbGFiZWw9XCJGaXNoIHNlbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwaWxsIG9mIHRhYj8ucGlsbHNEYXRhO2xldCBwID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBbc2VsZWN0ZWRdPVwicGlsbD8uc2VsZWN0ZWRcIiAoY2xpY2spPVwicGlsbENsaWNrZWQoJGV2ZW50LCBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0sIGtleSwgcCwgdGFiSW5kZXgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGlsbC1uYW1lXCI+e3twaWxsPy5sYWJlbH19PC9zcGFuPjwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHZpZXdBbGwgc3RhcnQtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LmhpZGVWaWV3TW9yZVVybCAmJiBjaGVja0NvbmRpdGlvbih3aWRnZXREYXRhICwgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldKVwiIGNsYXNzPVwiIGhpZGRlbiBtZDpibG9ja1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgIGNsYXNzPVwibWwtNCBwbC0yIHZpZXctbW9yZSB3cy1tYXQtZGVmYXVsdC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZsZXggd3MtbWF0LWRlZmF1bHQtdGV4dCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWF0LWJvZHktMSBjdXJzb3ItcG9pbnRlclwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmFpc2VUZWxlbWV0cnkoc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldKTtyZWRpcmVjdFZpZXdBbGwoc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLCBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnZpZXdNb3JlVXJsPy5wYXRoLCBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnZpZXdNb3JlVXJsPy5xdWVyeVBhcmFtcyApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGkxOG4gY2xhc3M9XCJ3cy1tYXQtZGVmYXVsdC10ZXh0XCI+e3t0cmFuc2xhdGVMYWJlbHMod2lkZ2V0RGF0YS5zdHJpcHNbMF0udmlld01vcmVVcmwudmlld01vcmVUZXh0LCdob21lJykgIHx8ICdTZWUgYWxsJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ3cy1tYXQtZGVmYXVsdC10ZXh0IG1hdC1pY29uIG5vdHJhbnNsYXRlIG1hdGVyaWFsLWljb25zIG1hdC1pY29uLW5vLWNvbG9yXCIgY29sb3I9XCJhY2NlbnRcIj5uYXZpZ2F0ZV9uZXh0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gdmlld0FsbCBlbmQtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3RyaXBzUmVzdWx0RGF0YU1hcCAmJiBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNob3dPbkxvYWRlciB8fFxuICAgICAgICAgICAgICAgICAgICAgICF0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/LmZldGNoVGFiU3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyIG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2ItdWljLWhvcml6b250YWwtc2Nyb2xsZXItdjIgW3NsaWRlckNvbmZpZ109XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNsaWRlckNvbmZpZ1wiIFtpZF09XCJrZXkrJy1zY3JvbGxlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRTdGF0dXNdPVwiJ2ZldGNoaW5nJ1wiIFtzdHJpcENvbmZpZ109XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwQ29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHdpZGdldCBvZiBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LmxvYWRlcldpZGdldHM7IHRyYWNrQnk6IHRyYWNrZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbc2JVaVJlc29sdmVyV2lkZ2V0XT1cIndpZGdldFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zYi11aWMtaG9yaXpvbnRhbC1zY3JvbGxlci12Mj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWI/LnBpbGxzRGF0YSAmJiB0YWI/LnBpbGxzRGF0YS5sZW5ndGggJiYgdGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIigodGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy5mZXRjaFRhYlN0YXR1cyAmJiB0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/LmZldGNoVGFiU3RhdHVzID09PSAnZG9uZScpICYmXG4gICAgICAgICAgICAgICAgICAgICAgKCF0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/LndpZGdldHMgfHwgIXRhYj8ucGlsbHNEYXRhW2dldFNlbGVjdGVkUGlsbEluZGV4KHRhYiAsdGFiSW5kZXgpXT8ud2lkZ2V0cz8ubGVuZ3RoKSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy52YWx1ZSA9PT0gJ2lucHJvZ3Jlc3MnOyBlbHNlIG1zZ1RlbXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBhbHQ9XCJcIiBjbGFzcz1cIm10LTQgbWItNFwiIHNyYz1cImFzc2V0cy9pY29ucy9ob21lL25vZGF0YURlZmF1bHQuc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0xIHRleHQtY2VudGVyIGluZm8tY29udGVudFwiPnt7ICdjb250ZW50c3RyaXBtdWx0aXBsZS5nZXRSZWFkeUZvckxlYXJuaW5nQWR2ZW50dXJlJyB8IHRyYW5zbGF0ZSB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjbGljay1oZXJlXCIgW3JvdXRlckxpbmtdPVwiJy9wYWdlL2xlYXJuJ1wiPnt7ICdjb250ZW50c3RyaXBtdWx0aXBsZS5jbGlja0hlcmUnIHwgdHJhbnNsYXRlIH19PC9hPiB7eyAnY29udGVudHN0cmlwbXVsdGlwbGUudG9FbnJvbGxOZXh0Q291cnNlJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtc2dUZW1wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGFsdD1cIlwiIGNsYXNzPVwibXQtNCBtYi00XCIgc3JjPVwiYXNzZXRzL2ljb25zL2hvbWUvbm9kYXRhRGVmYXVsdC5wbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hdC1zdWJoZWFkaW5nLTEgdGV4dC1jZW50ZXJcIj57eyB0cmFuc2xhdGVMYWJlbHModGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy5ub2RhdGFNc2csICdob21lJykgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHRhYj8ucGlsbHNEYXRhW2dldFNlbGVjdGVkUGlsbEluZGV4KHRhYiAsdGFiSW5kZXgpXT8uZmV0Y2hUYWJTdGF0dXMgPT09ICdkb25lJyB8fCB0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/LndpZGdldHM/Lmxlbmd0aClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgICpuZ0lmPVwiIXRhYj8ucGlsbHNEYXRhW2dldFNlbGVjdGVkUGlsbEluZGV4KHRhYiAsdGFiSW5kZXgpXT8udGFiTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2ItdWljLWhvcml6b250YWwtc2Nyb2xsZXItdjIgW2lkXT1cImtleSsnLXNjcm9sbGVyJ1wiIFtzbGlkZXJDb25maWddPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zbGlkZXJDb25maWdcIiBbd2lkZ2V0c0xlbmd0aF09XCJ0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/LndpZGdldHM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRTdGF0dXNdPVwiJ2RvbmUnXCIgW2RlZmF1bHRNYXhXaWRnZXRzXT1cInRhYj8ucGlsbHNEYXRhW2dldFNlbGVjdGVkUGlsbEluZGV4KHRhYiAsdGFiSW5kZXgpXT8ubWF4V2lkZ2V0cyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc2xpZGVyQ29uZmlnPy5tYXhXaWRnZXRzIHx8IGRlZmF1bHRNYXhXaWRnZXRzXCIgW3N0cmlwQ29uZmlnXT1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBDb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB3aWRnZXQgb2YgdGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy53aWRnZXRzfCBzbGljZTowOih0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/Lm1heFdpZGdldHMgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNsaWRlckNvbmZpZz8ubWF4V2lkZ2V0cyB8fCBkZWZhdWx0TWF4V2lkZ2V0cyk7IHRyYWNrQnk6IHRyYWNrZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbc2JVaVJlc29sdmVyV2lkZ2V0XT1cIndpZGdldFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NiLXVpYy1ob3Jpem9udGFsLXNjcm9sbGVyLXYyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2E+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPiJdfQ==
|