@sunbird-cb/toc 0.0.1
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/esm2022/lib/_collection/_common/attendance-card/attendance-card.component.mjs +55 -0
- package/esm2022/lib/_collection/_common/attendance-card/attendance-card.module.mjs +126 -0
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.component.mjs +32 -0
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.module.mjs +85 -0
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.component.mjs +100 -0
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.module.mjs +48 -0
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.component.mjs +120 -0
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.module.mjs +92 -0
- package/esm2022/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.mjs +48 -0
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.component.mjs +25 -0
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.module.mjs +41 -0
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover-card.component.mjs +89 -0
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.module.mjs +42 -0
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.servive.mjs +41 -0
- package/esm2022/lib/_collection/_common/connection-name/connection-name.component.mjs +78 -0
- package/esm2022/lib/_collection/_common/connection-name/connection-name.module.mjs +45 -0
- package/esm2022/lib/_collection/_common/connection-name/profile-v2.model.mjs +2 -0
- package/esm2022/lib/_collection/_common/content-progress/content-progress.component.mjs +70 -0
- package/esm2022/lib/_collection/_common/content-progress/content-progress.module.mjs +28 -0
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.mjs +187 -0
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.mjs +86 -0
- package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +31 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +941 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.mjs +183 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.mjs +327 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.mjs +297 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +223 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +591 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.mjs +16 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.mjs +43 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.mjs +133 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.mjs +66 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.mjs +278 -0
- package/esm2022/lib/_collection/_common/content-toc/content-services/handle-claim.service.mjs +21 -0
- package/esm2022/lib/_collection/_common/content-toc/content-services/review-component-data.service.mjs +21 -0
- package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +847 -0
- package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +219 -0
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +209 -0
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.module.mjs +26 -0
- package/esm2022/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.mjs +19 -0
- package/esm2022/lib/_collection/_common/content-toc/pipes/truncate.pipe.mjs +23 -0
- package/esm2022/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.mjs +113 -0
- package/esm2022/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.mjs +110 -0
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.component.mjs +26 -0
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.module.mjs +19 -0
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.mjs +67 -0
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.mjs +28 -0
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.component.mjs +77 -0
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.model.mjs +2 -0
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.module.mjs +61 -0
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.module.mjs +20 -0
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.mjs +73 -0
- package/esm2022/lib/_collection/_common/player-brief/player-brief.component.mjs +139 -0
- package/esm2022/lib/_collection/_common/player-brief/player-brief.module.mjs +71 -0
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.component.mjs +34 -0
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.module.mjs +56 -0
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.component.mjs +25 -0
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.module.mjs +37 -0
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.mjs +32 -0
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner.module.mjs +30 -0
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +38 -0
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.mjs +51 -0
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.component.mjs +115 -0
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.model.mjs +12 -0
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.module.mjs +51 -0
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.service.mjs +61 -0
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.component.mjs +87 -0
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.module.mjs +36 -0
- package/esm2022/lib/_collection/_common/user-image/user-image.component.mjs +62 -0
- package/esm2022/lib/_collection/_common/user-image/user-image.module.mjs +24 -0
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.component.mjs +192 -0
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.module.mjs +44 -0
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.service.mjs +99 -0
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.component.mjs +58 -0
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.module.mjs +67 -0
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.component.mjs +112 -0
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.model.mjs +2 -0
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.module.mjs +69 -0
- package/esm2022/lib/_collection-api.mjs +57 -0
- package/esm2022/lib/_constants/widget-content.constants.mjs +19 -0
- package/esm2022/lib/_directives/tooltip.directive.mjs +68 -0
- package/esm2022/lib/_models/common.model.mjs +2 -0
- package/esm2022/lib/_models/error.model.mjs +2 -0
- package/esm2022/lib/_pipes/highlight.pipe.mjs +24 -0
- package/esm2022/lib/_services/rating.service.mjs +89 -0
- package/esm2022/lib/_services/samuhik-charcha.service.mjs +29 -0
- package/esm2022/lib/_services/viewer-route-util.mjs +103 -0
- package/esm2022/lib/_services/widget-content.model.mjs +246 -0
- package/esm2022/lib/_services/widget-content.service.mjs +589 -0
- package/esm2022/lib/_shared/translate-loader.factory.mjs +9 -0
- package/esm2022/lib/app-toc-lib.module.mjs +499 -0
- package/esm2022/lib/collection.config.mjs +161 -0
- package/esm2022/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.mjs +37 -0
- package/esm2022/lib/components/app-toc-banner/app-toc-banner.component.mjs +1436 -0
- package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +475 -0
- package/esm2022/lib/components/app-toc-cios-home/consent-dialog.component.mjs +119 -0
- package/esm2022/lib/components/app-toc-cohorts/app-toc-cohorts.component.mjs +80 -0
- package/esm2022/lib/components/app-toc-content-card/app-toc-content-card.component.mjs +249 -0
- package/esm2022/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.mjs +39 -0
- package/esm2022/lib/components/app-toc-discussion/app-toc-discussion.component.mjs +58 -0
- package/esm2022/lib/components/app-toc-home/app-toc-home.component.mjs +2229 -0
- package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +2796 -0
- package/esm2022/lib/components/app-toc-overview/app-toc-overview.component.mjs +157 -0
- package/esm2022/lib/components/app-toc-session-card/app-toc-session-card.component.mjs +48 -0
- package/esm2022/lib/components/app-toc-sessions/app-toc-sessions.component.mjs +47 -0
- package/esm2022/lib/components/app-toc-single-page/app-toc-single-page.component.mjs +766 -0
- package/esm2022/lib/components/completion-survey-form/completion-survey-form.component.mjs +243 -0
- package/esm2022/lib/components/create-batch-dialog/create-batch-dialog.component.mjs +116 -0
- package/esm2022/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.mjs +44 -0
- package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +1838 -0
- package/esm2022/lib/components/enroll-questionnaire/enroll-questionnaire.component.mjs +236 -0
- package/esm2022/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.mjs +213 -0
- package/esm2022/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.mjs +36 -0
- package/esm2022/lib/components/public-survey-form/public-survey-form.component.mjs +256 -0
- package/esm2022/lib/components/survey-form-question/survey-form-question.component.mjs +133 -0
- package/esm2022/lib/components/survey-form-section/survey-form-section.component.mjs +36 -0
- package/esm2022/lib/models/app-toc-analytics.model.mjs +2 -0
- package/esm2022/lib/models/app-toc.model.mjs +38 -0
- package/esm2022/lib/models/auto-complete.model.mjs +2 -0
- package/esm2022/lib/models/card-content.model.mjs +13 -0
- package/esm2022/lib/models/content-strip-with-tabs.model.mjs +2 -0
- package/esm2022/lib/models/discussion-forum.model.mjs +14 -0
- package/esm2022/lib/models/goal.model.mjs +2 -0
- package/esm2022/lib/models/meta-tag.model.mjs +8 -0
- package/esm2022/lib/models/playlist.model.mjs +2 -0
- package/esm2022/lib/models/profile-revamp.model.mjs +2 -0
- package/esm2022/lib/models/rating.model.mjs +2 -0
- package/esm2022/lib/models/user-profile.model.mjs +21 -0
- package/esm2022/lib/resolvers/app-toc-cios-resolver.service.mjs +24 -0
- package/esm2022/lib/resolvers/app-toc-cios-user-enroll-resolver.service.mjs +24 -0
- package/esm2022/lib/resolvers/app-toc-content-read-resolver.service.mjs +60 -0
- package/esm2022/lib/resolvers/app-toc-ext-public-resolver.service.mjs +25 -0
- package/esm2022/lib/resolvers/app-toc-resolver.service.mjs +106 -0
- package/esm2022/lib/resolvers/config-resolver.service.mjs +25 -0
- package/esm2022/lib/resolvers/profile-resolver.service.mjs +25 -0
- package/esm2022/lib/resolvers/restricted-features-resolver.service.mjs +25 -0
- package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +51 -0
- package/esm2022/lib/routes/app-toc-home/app-toc-home.directive.mjs +16 -0
- package/esm2022/lib/routes/app-toc-home/app-toc-home.service.mjs +18 -0
- package/esm2022/lib/services/access-control.service.mjs +56 -0
- package/esm2022/lib/services/action.service.mjs +23 -0
- package/esm2022/lib/services/app-toc-v2.service.mjs +47 -0
- package/esm2022/lib/services/app-toc.service.mjs +1001 -0
- package/esm2022/lib/services/certificate.service.mjs +69 -0
- package/esm2022/lib/services/discuss-utils.service.mjs +58 -0
- package/esm2022/lib/services/editor.service.mjs +34 -0
- package/esm2022/lib/services/load-check.service.mjs +21 -0
- package/esm2022/lib/services/loader.service.mjs +33 -0
- package/esm2022/lib/services/mobile-apps.service.mjs +67 -0
- package/esm2022/lib/services/netcore.service.mjs +56 -0
- package/esm2022/lib/services/nps-grid.service.mjs +31 -0
- package/esm2022/lib/services/otp.service.mjs +43 -0
- package/esm2022/lib/services/profile-v2.service.mjs +43 -0
- package/esm2022/lib/services/reset-ratings.service.mjs +19 -0
- package/esm2022/lib/services/resource-download-helper.service.mjs +64 -0
- package/esm2022/lib/services/timer.service.mjs +23 -0
- package/esm2022/lib/services/title-tag.service.mjs +71 -0
- package/esm2022/lib/services/user-profile.service.mjs +55 -0
- package/esm2022/lib/services/viewer-data.service.mjs +64 -0
- package/esm2022/lib/services/viewer-util.service.mjs +500 -0
- package/esm2022/lib/share-toc/share-toc/share-toc.component.mjs +291 -0
- package/esm2022/lib/share-toc/share-toc.module.mjs +119 -0
- package/esm2022/public-api.mjs +56 -0
- package/esm2022/sunbird-cb-toc.mjs +5 -0
- package/fesm2022/sunbird-cb-toc.mjs +23517 -0
- package/fesm2022/sunbird-cb-toc.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +17 -0
- package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts.map +1 -0
- package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +32 -0
- package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts.map +1 -0
- package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +16 -0
- package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts.map +1 -0
- package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +21 -0
- package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts.map +1 -0
- package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +23 -0
- package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts.map +1 -0
- package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +16 -0
- package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts.map +1 -0
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +23 -0
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts.map +1 -0
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +23 -0
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts.map +1 -0
- package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +10 -0
- package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts.map +1 -0
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +12 -0
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts.map +1 -0
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +13 -0
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts.map +1 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +19 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts.map +1 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +15 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts.map +1 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +12 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts.map +1 -0
- package/lib/_collection/_common/connection-name/connection-name.component.d.ts +18 -0
- package/lib/_collection/_common/connection-name/connection-name.component.d.ts.map +1 -0
- package/lib/_collection/_common/connection-name/connection-name.module.d.ts +15 -0
- package/lib/_collection/_common/connection-name/connection-name.module.d.ts.map +1 -0
- package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +200 -0
- package/lib/_collection/_common/connection-name/profile-v2.model.d.ts.map +1 -0
- package/lib/_collection/_common/content-progress/content-progress.component.d.ts +17 -0
- package/lib/_collection/_common/content-progress/content-progress.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-progress/content-progress.module.d.ts +11 -0
- package/lib/_collection/_common/content-progress/content-progress.module.d.ts.map +1 -0
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +39 -0
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +20 -0
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +12 -0
- package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +184 -0
- package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +42 -0
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +55 -0
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +48 -0
- package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +49 -0
- package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +92 -0
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +9 -0
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +17 -0
- package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +41 -0
- package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +22 -0
- package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +46 -0
- package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +11 -0
- package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +11 -0
- package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts +129 -0
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/content-toc.module.d.ts +52 -0
- package/lib/_collection/_common/content-toc/content-toc.module.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +30 -0
- package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +10 -0
- package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +8 -0
- package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +8 -0
- package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +29 -0
- package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +25 -0
- package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts.map +1 -0
- package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +15 -0
- package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts.map +1 -0
- package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +10 -0
- package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts.map +1 -0
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +13 -0
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts.map +1 -0
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +11 -0
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts.map +1 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +23 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts.map +1 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +9 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts.map +1 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +19 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts.map +1 -0
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +9 -0
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts.map +1 -0
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +17 -0
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts.map +1 -0
- package/lib/_collection/_common/player-brief/player-brief.component.d.ts +36 -0
- package/lib/_collection/_common/player-brief/player-brief.component.d.ts.map +1 -0
- package/lib/_collection/_common/player-brief/player-brief.module.d.ts +20 -0
- package/lib/_collection/_common/player-brief/player-brief.module.d.ts.map +1 -0
- package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +15 -0
- package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts.map +1 -0
- package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +14 -0
- package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts.map +1 -0
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +12 -0
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +12 -0
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts.map +1 -0
- package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +16 -0
- package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts.map +1 -0
- package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +11 -0
- package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts.map +1 -0
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +17 -0
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts.map +1 -0
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +12 -0
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts.map +1 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +35 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts.map +1 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +18 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts.map +1 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +16 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts.map +1 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +16 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts.map +1 -0
- package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +22 -0
- package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts.map +1 -0
- package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +13 -0
- package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts.map +1 -0
- package/lib/_collection/_common/user-image/user-image.component.d.ts +22 -0
- package/lib/_collection/_common/user-image/user-image.component.d.ts.map +1 -0
- package/lib/_collection/_common/user-image/user-image.module.d.ts +10 -0
- package/lib/_collection/_common/user-image/user-image.module.d.ts.map +1 -0
- package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +48 -0
- package/lib/_collection/btn-page-back/btn-page-back.component.d.ts.map +1 -0
- package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +15 -0
- package/lib/_collection/btn-page-back/btn-page-back.module.d.ts.map +1 -0
- package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +23 -0
- package/lib/_collection/btn-page-back/btn-page-back.service.d.ts.map +1 -0
- package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +20 -0
- package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts.map +1 -0
- package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +16 -0
- package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts.map +1 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +26 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts.map +1 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +22 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts.map +1 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +19 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts.map +1 -0
- package/lib/_collection-api.d.ts +35 -0
- package/lib/_collection-api.d.ts.map +1 -0
- package/lib/_constants/widget-content.constants.d.ts +8 -0
- package/lib/_constants/widget-content.constants.d.ts.map +1 -0
- package/lib/_directives/tooltip.directive.d.ts +18 -0
- package/lib/_directives/tooltip.directive.d.ts.map +1 -0
- package/lib/_models/common.model.d.ts +4 -0
- package/lib/_models/common.model.d.ts.map +1 -0
- package/lib/_models/error.model.d.ts +6 -0
- package/lib/_models/error.model.d.ts.map +1 -0
- package/lib/_pipes/highlight.pipe.d.ts +11 -0
- package/lib/_pipes/highlight.pipe.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/samuhik-charcha.service.d.ts +14 -0
- package/lib/_services/samuhik-charcha.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.model.d.ts +515 -0
- package/lib/_services/widget-content.model.d.ts.map +1 -0
- package/lib/_services/widget-content.service.d.ts +101 -0
- package/lib/_services/widget-content.service.d.ts.map +1 -0
- package/lib/_shared/translate-loader.factory.d.ts +8 -0
- package/lib/_shared/translate-loader.factory.d.ts.map +1 -0
- package/lib/app-toc-lib.module.d.ts +89 -0
- package/lib/app-toc-lib.module.d.ts.map +1 -0
- package/lib/collection.config.d.ts +160 -0
- package/lib/collection.config.d.ts.map +1 -0
- package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +18 -0
- package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts.map +1 -0
- package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +226 -0
- package/lib/components/app-toc-banner/app-toc-banner.component.d.ts.map +1 -0
- package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +79 -0
- package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts.map +1 -0
- package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +23 -0
- package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts.map +1 -0
- package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +32 -0
- package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts.map +1 -0
- package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +48 -0
- package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts.map +1 -0
- package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +15 -0
- package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts.map +1 -0
- package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +22 -0
- package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts.map +1 -0
- package/lib/components/app-toc-home/app-toc-home.component.d.ts +315 -0
- package/lib/components/app-toc-home/app-toc-home.component.d.ts.map +1 -0
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +386 -0
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts.map +1 -0
- package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +48 -0
- package/lib/components/app-toc-overview/app-toc-overview.component.d.ts.map +1 -0
- package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +23 -0
- package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts.map +1 -0
- package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +15 -0
- package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts.map +1 -0
- package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +150 -0
- package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts.map +1 -0
- package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +43 -0
- package/lib/components/completion-survey-form/completion-survey-form.component.d.ts.map +1 -0
- package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +28 -0
- package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts.map +1 -0
- package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +16 -0
- package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts.map +1 -0
- package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +196 -0
- package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts.map +1 -0
- package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +45 -0
- package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts.map +1 -0
- package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +55 -0
- package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts.map +1 -0
- package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +19 -0
- package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts.map +1 -0
- package/lib/components/public-survey-form/public-survey-form.component.d.ts +44 -0
- package/lib/components/public-survey-form/public-survey-form.component.d.ts.map +1 -0
- package/lib/components/survey-form-question/survey-form-question.component.d.ts +21 -0
- package/lib/components/survey-form-question/survey-form-question.component.d.ts.map +1 -0
- package/lib/components/survey-form-section/survey-form-section.component.d.ts +14 -0
- package/lib/components/survey-form-section/survey-form-section.component.d.ts.map +1 -0
- package/lib/models/app-toc-analytics.model.d.ts +153 -0
- package/lib/models/app-toc-analytics.model.d.ts.map +1 -0
- package/lib/models/app-toc.model.d.ts +85 -0
- package/lib/models/app-toc.model.d.ts.map +1 -0
- package/lib/models/auto-complete.model.d.ts +28 -0
- package/lib/models/auto-complete.model.d.ts.map +1 -0
- package/lib/models/card-content.model.d.ts +20 -0
- package/lib/models/card-content.model.d.ts.map +1 -0
- package/lib/models/content-strip-with-tabs.model.d.ts +45 -0
- package/lib/models/content-strip-with-tabs.model.d.ts.map +1 -0
- package/lib/models/discussion-forum.model.d.ts +41 -0
- package/lib/models/discussion-forum.model.d.ts.map +1 -0
- package/lib/models/goal.model.d.ts +23 -0
- package/lib/models/goal.model.d.ts.map +1 -0
- package/lib/models/meta-tag.model.d.ts +7 -0
- package/lib/models/meta-tag.model.d.ts.map +1 -0
- package/lib/models/playlist.model.d.ts +24 -0
- package/lib/models/playlist.model.d.ts.map +1 -0
- package/lib/models/profile-revamp.model.d.ts +15 -0
- package/lib/models/profile-revamp.model.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/user-profile.model.d.ts +38 -0
- package/lib/models/user-profile.model.d.ts.map +1 -0
- package/lib/resolvers/app-toc-cios-resolver.service.d.ts +13 -0
- package/lib/resolvers/app-toc-cios-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +13 -0
- package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +17 -0
- package/lib/resolvers/app-toc-content-read-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +13 -0
- package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/app-toc-resolver.service.d.ts +17 -0
- package/lib/resolvers/app-toc-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/config-resolver.service.d.ts +12 -0
- package/lib/resolvers/config-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/profile-resolver.service.d.ts +12 -0
- package/lib/resolvers/profile-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/restricted-features-resolver.service.d.ts +12 -0
- package/lib/resolvers/restricted-features-resolver.service.d.ts.map +1 -0
- package/lib/routes/app-toc-home/app-toc-home.component.d.ts +20 -0
- package/lib/routes/app-toc-home/app-toc-home.component.d.ts.map +1 -0
- package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +9 -0
- package/lib/routes/app-toc-home/app-toc-home.directive.d.ts.map +1 -0
- package/lib/routes/app-toc-home/app-toc-home.service.d.ts +9 -0
- package/lib/routes/app-toc-home/app-toc-home.service.d.ts.map +1 -0
- package/lib/services/access-control.service.d.ts +30 -0
- package/lib/services/access-control.service.d.ts.map +1 -0
- package/lib/services/action.service.d.ts +10 -0
- package/lib/services/action.service.d.ts.map +1 -0
- package/lib/services/app-toc-v2.service.d.ts +8 -0
- package/lib/services/app-toc-v2.service.d.ts.map +1 -0
- package/lib/services/app-toc.service.d.ts +131 -0
- package/lib/services/app-toc.service.d.ts.map +1 -0
- package/lib/services/certificate.service.d.ts +43 -0
- package/lib/services/certificate.service.d.ts.map +1 -0
- package/lib/services/discuss-utils.service.d.ts +34 -0
- package/lib/services/discuss-utils.service.d.ts.map +1 -0
- package/lib/services/editor.service.d.ts +18 -0
- package/lib/services/editor.service.d.ts.map +1 -0
- package/lib/services/load-check.service.d.ts +9 -0
- package/lib/services/load-check.service.d.ts.map +1 -0
- package/lib/services/loader.service.d.ts +17 -0
- package/lib/services/loader.service.d.ts.map +1 -0
- package/lib/services/mobile-apps.service.d.ts +39 -0
- package/lib/services/mobile-apps.service.d.ts.map +1 -0
- package/lib/services/netcore.service.d.ts +34 -0
- package/lib/services/netcore.service.d.ts.map +1 -0
- package/lib/services/nps-grid.service.d.ts +16 -0
- package/lib/services/nps-grid.service.d.ts.map +1 -0
- package/lib/services/otp.service.d.ts +21 -0
- package/lib/services/otp.service.d.ts.map +1 -0
- package/lib/services/profile-v2.service.d.ts +21 -0
- package/lib/services/profile-v2.service.d.ts.map +1 -0
- package/lib/services/reset-ratings.service.d.ts +9 -0
- package/lib/services/reset-ratings.service.d.ts.map +1 -0
- package/lib/services/resource-download-helper.service.d.ts +30 -0
- package/lib/services/resource-download-helper.service.d.ts.map +1 -0
- package/lib/services/timer.service.d.ts +10 -0
- package/lib/services/timer.service.d.ts.map +1 -0
- package/lib/services/title-tag.service.d.ts +22 -0
- package/lib/services/title-tag.service.d.ts.map +1 -0
- package/lib/services/user-profile.service.d.ts +25 -0
- package/lib/services/user-profile.service.d.ts.map +1 -0
- package/lib/services/viewer-data.service.d.ts +59 -0
- package/lib/services/viewer-data.service.d.ts.map +1 -0
- package/lib/services/viewer-util.service.d.ts +63 -0
- package/lib/services/viewer-util.service.d.ts.map +1 -0
- package/lib/share-toc/share-toc/share-toc.component.d.ts +57 -0
- package/lib/share-toc/share-toc/share-toc.component.d.ts.map +1 -0
- package/lib/share-toc/share-toc.module.d.ts +33 -0
- package/lib/share-toc/share-toc.module.d.ts.map +1 -0
- package/package.json +36 -0
- package/public-api.d.ts +44 -0
- package/public-api.d.ts.map +1 -0
- package/sunbird-cb-toc.d.ts.map +1 -0
|
@@ -0,0 +1,1838 @@
|
|
|
1
|
+
import { Component, Inject, ViewChild, HostListener } from '@angular/core';
|
|
2
|
+
import { FormControl, FormGroup, Validators } from '@angular/forms';
|
|
3
|
+
import { debounceTime, distinctUntilChanged, startWith, takeUntil } from 'rxjs/operators';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import { NsUserProfileDetails } from '../../models/user-profile.model';
|
|
6
|
+
import { MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA } from '@angular/material/legacy-dialog';
|
|
7
|
+
/* tslint:disable */
|
|
8
|
+
import _ from 'lodash';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/material/legacy-snack-bar";
|
|
11
|
+
import * as i2 from "@angular/material/legacy-dialog";
|
|
12
|
+
import * as i3 from "../../services/user-profile.service";
|
|
13
|
+
import * as i4 from "@sunbird-cb/utils-v2";
|
|
14
|
+
import * as i5 from "../../services/profile-v2.service";
|
|
15
|
+
import * as i6 from "../../services/otp.service";
|
|
16
|
+
import * as i7 from "../../services/nps-grid.service";
|
|
17
|
+
import * as i8 from "@ngx-translate/core";
|
|
18
|
+
import * as i9 from "@angular/common";
|
|
19
|
+
import * as i10 from "@angular/forms";
|
|
20
|
+
import * as i11 from "@angular/material/icon";
|
|
21
|
+
import * as i12 from "@angular/material/legacy-form-field";
|
|
22
|
+
import * as i13 from "@angular/material/legacy-input";
|
|
23
|
+
import * as i14 from "@angular/material/legacy-progress-spinner";
|
|
24
|
+
import * as i15 from "@angular/material/legacy-select";
|
|
25
|
+
import * as i16 from "@angular/material/legacy-core";
|
|
26
|
+
import * as i17 from "@angular/material/datepicker";
|
|
27
|
+
const MOBILE_PATTERN = /^[0]?[6789]\d{9}$/;
|
|
28
|
+
const PIN_CODE_PATTERN = /^[1-9][0-9]{5}$/;
|
|
29
|
+
const EMP_ID_PATTERN = /^[a-z0-9]+$/i;
|
|
30
|
+
/* tslint:disable */
|
|
31
|
+
const EMAIL_PATTERN = /^[a-zA-Z0-9]+[a-zA-Z0-9._-]*[a-zA-Z0-9]+@[a-zA-Z0-9]+([-a-zA-Z0-9]*[a-zA-Z0-9]+)?(\.[a-zA-Z0-9-]+)*\.[a-zA-Z]{2,4}$/;
|
|
32
|
+
export class EnrollProfileFormComponent {
|
|
33
|
+
constructor(snackBar, dialogRef, userProfileService, configSrc, profileV2Svc, otpService, npsSvc, translateService, datePipe,
|
|
34
|
+
// private signupService: SignupService,
|
|
35
|
+
data) {
|
|
36
|
+
this.snackBar = snackBar;
|
|
37
|
+
this.dialogRef = dialogRef;
|
|
38
|
+
this.userProfileService = userProfileService;
|
|
39
|
+
this.configSrc = configSrc;
|
|
40
|
+
this.profileV2Svc = profileV2Svc;
|
|
41
|
+
this.otpService = otpService;
|
|
42
|
+
this.npsSvc = npsSvc;
|
|
43
|
+
this.translateService = translateService;
|
|
44
|
+
this.datePipe = datePipe;
|
|
45
|
+
this.data = data;
|
|
46
|
+
this.afterSubmitAction = this.checkAfterSubmit.bind(this);
|
|
47
|
+
this.isReadOnly = false;
|
|
48
|
+
this.customForm = false;
|
|
49
|
+
this.destroySubject$ = new Subject();
|
|
50
|
+
this.designationsMeta = [];
|
|
51
|
+
// filterDesignationsMeta: any = []
|
|
52
|
+
this.eUserGender = Object.keys(NsUserProfileDetails.EUserGender);
|
|
53
|
+
this.eCategory = Object.keys(NsUserProfileDetails.ECategory);
|
|
54
|
+
this.eligible = false;
|
|
55
|
+
this.isCadreStatus = false;
|
|
56
|
+
this.showBatchForNoCadre = true;
|
|
57
|
+
this.verifyMobile = false;
|
|
58
|
+
this.otpSent = false;
|
|
59
|
+
this.emailOtpSent = false;
|
|
60
|
+
this.otpEntered = '';
|
|
61
|
+
this.mVerified = false;
|
|
62
|
+
this.eVerified = false;
|
|
63
|
+
this.timeLeft = 150;
|
|
64
|
+
this.emailTimeLeft = 150;
|
|
65
|
+
this.showResendOTP = false;
|
|
66
|
+
this.showEmailResendOTP = false;
|
|
67
|
+
this.showname = false;
|
|
68
|
+
this.showDesignation = false;
|
|
69
|
+
this.showGroup = false;
|
|
70
|
+
this.showEmployeeCode = false;
|
|
71
|
+
this.showMobile = false;
|
|
72
|
+
this.showGender = false;
|
|
73
|
+
this.showDob = false;
|
|
74
|
+
this.showCategory = false;
|
|
75
|
+
this.showDecimalMedium = false;
|
|
76
|
+
this.showPinCode = false;
|
|
77
|
+
this.showCadreDetails = false;
|
|
78
|
+
this.updateProfile = false;
|
|
79
|
+
this.isLoading = false;
|
|
80
|
+
this.canShowEmployeeCode = false;
|
|
81
|
+
this.canshowMobile = false;
|
|
82
|
+
this.canShowGender = false;
|
|
83
|
+
this.canShowDob = false;
|
|
84
|
+
this.canShowDomicileMedium = false;
|
|
85
|
+
this.canShowCategory = false;
|
|
86
|
+
this.canShowpinCode = false;
|
|
87
|
+
this.canShowshowCadreDetails = false;
|
|
88
|
+
this.canShowGroup = false;
|
|
89
|
+
this.canShowDesignation = false;
|
|
90
|
+
this.showCounter = 0;
|
|
91
|
+
this.disableCounter = 0;
|
|
92
|
+
this.canShowEmail = false;
|
|
93
|
+
this.showEmail = false;
|
|
94
|
+
this.canShowName = false;
|
|
95
|
+
this.canShowOrg = false;
|
|
96
|
+
this.showOrg = false;
|
|
97
|
+
this.showDoptChanges = false;
|
|
98
|
+
this.verifyEmail = false;
|
|
99
|
+
this.approvedDomainList = [];
|
|
100
|
+
this.currentDate = new Date();
|
|
101
|
+
this.openDesignationDropdown = false;
|
|
102
|
+
this.openLanguageDropdown = false;
|
|
103
|
+
this.canShowOtherDesignation = false;
|
|
104
|
+
this.designationListLoadCount = 50;
|
|
105
|
+
this.addLoader = 0;
|
|
106
|
+
this.isLoadingMoreDesignations = false;
|
|
107
|
+
this.designationDefaultLoadCount = 50;
|
|
108
|
+
this.desigantionFilterEnable = false;
|
|
109
|
+
this.organisationId = '';
|
|
110
|
+
this.selectedOrgHasDesignations = false;
|
|
111
|
+
this.designationsOffset = 0;
|
|
112
|
+
this.designationSearchText = '';
|
|
113
|
+
this.designationsTotalCount = 0;
|
|
114
|
+
this.formId = '';
|
|
115
|
+
if (localStorage.getItem('websiteLanguage')) {
|
|
116
|
+
this.translateService.setDefaultLang('en');
|
|
117
|
+
const lang = localStorage.getItem('websiteLanguage');
|
|
118
|
+
this.translateService.use(lang);
|
|
119
|
+
}
|
|
120
|
+
this.batchDetails = this.data.batchData;
|
|
121
|
+
this.surveyId = this.data.surveyId;
|
|
122
|
+
this.showDoptChanges = this.data.showDoptChanges;
|
|
123
|
+
this.profileFormType = this.batchDetails.batchAttributes.userProfileFileds;
|
|
124
|
+
this.userDetailsForm = new FormGroup({
|
|
125
|
+
name: new FormControl(''),
|
|
126
|
+
organisation: new FormControl(''),
|
|
127
|
+
group: new FormControl(''),
|
|
128
|
+
designation: new FormControl(''),
|
|
129
|
+
employeeCode: new FormControl(''),
|
|
130
|
+
primaryEmail: new FormControl('', [Validators.pattern(EMAIL_PATTERN)]),
|
|
131
|
+
mobile: new FormControl(''),
|
|
132
|
+
gender: new FormControl('', []),
|
|
133
|
+
dob: new FormControl('', []),
|
|
134
|
+
domicileMedium: new FormControl(''),
|
|
135
|
+
category: new FormControl('', []),
|
|
136
|
+
pinCode: new FormControl(''),
|
|
137
|
+
isCadre: new FormControl(),
|
|
138
|
+
typeOfCivilService: new FormControl(''),
|
|
139
|
+
serviceType: new FormControl(''),
|
|
140
|
+
cadreName: new FormControl(''),
|
|
141
|
+
cadreBatch: new FormControl(''),
|
|
142
|
+
cadreControllingAuthority: new FormControl(''),
|
|
143
|
+
otherDesignation: new FormControl(''),
|
|
144
|
+
searchDesignation: new FormControl('')
|
|
145
|
+
});
|
|
146
|
+
this.isLoading = true;
|
|
147
|
+
this.userProfileObject = this.configSrc.unMappedUser;
|
|
148
|
+
this.organisationId = _.get(this.userProfileObject, 'rootOrgId', _.get(this.userProfileObject, 'personalDetails.rootOrgId', ''));
|
|
149
|
+
this.otpForm = new FormGroup({
|
|
150
|
+
otp: new FormControl('', Validators.required)
|
|
151
|
+
});
|
|
152
|
+
this.emailOtpForm = new FormGroup({
|
|
153
|
+
eOtp: new FormControl('', Validators.required)
|
|
154
|
+
});
|
|
155
|
+
// To check the mobile number entered by the user is same or not, validating the mobile number to show the Get OTP.
|
|
156
|
+
if (this.userDetailsForm.get('mobile')) {
|
|
157
|
+
this.userDetailsForm.get('mobile').valueChanges
|
|
158
|
+
.subscribe(res => {
|
|
159
|
+
if (res && res !== this.userProfileObject.profileDetails.personalDetails.mobile ||
|
|
160
|
+
!this.userProfileObject.profileDetails.personalDetails.phoneVerified) {
|
|
161
|
+
if (MOBILE_PATTERN.test(res)) {
|
|
162
|
+
this.verifyMobile = true;
|
|
163
|
+
this.mVerified = false;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
this.verifyMobile = false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.verifyMobile = false;
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
// To check the email entered by the user is same or not, validating the email to show the Get OTP.
|
|
175
|
+
if (this.userDetailsForm.get('primaryEmail')) {
|
|
176
|
+
this.userDetailsForm.get('primaryEmail').valueChanges
|
|
177
|
+
.subscribe(res => {
|
|
178
|
+
if (res && res !== this.userProfileObject.profileDetails.personalDetails.primaryEmail) {
|
|
179
|
+
if (EMAIL_PATTERN.test(res)) {
|
|
180
|
+
this.verifyEmail = true;
|
|
181
|
+
this.eVerified = false;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
this.verifyEmail = false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
this.verifyEmail = false;
|
|
189
|
+
this.eVerified = true;
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
scrollToActive(type) {
|
|
195
|
+
let activeElement;
|
|
196
|
+
let container;
|
|
197
|
+
if (type === 'language') {
|
|
198
|
+
container = this.languageDropdown.nativeElement;
|
|
199
|
+
activeElement = container.querySelector('.language-item-active');
|
|
200
|
+
}
|
|
201
|
+
else if (type === 'designation') {
|
|
202
|
+
container = this.dropdown.nativeElement;
|
|
203
|
+
activeElement = container.querySelector('.item-active');
|
|
204
|
+
}
|
|
205
|
+
if (activeElement) {
|
|
206
|
+
activeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
handleClickOutside(event) {
|
|
210
|
+
const clickedElement = event.target;
|
|
211
|
+
if (this.textBox && !this.textBox.nativeElement.contains(clickedElement) &&
|
|
212
|
+
this.dropdown && !this.dropdown.nativeElement.contains(clickedElement)) {
|
|
213
|
+
this.openDesignationDropdown = false;
|
|
214
|
+
}
|
|
215
|
+
if (this.languageTextBox && !this.languageTextBox.nativeElement.contains(clickedElement) &&
|
|
216
|
+
this.languageDropdown && !this.languageDropdown.nativeElement.contains(clickedElement)) {
|
|
217
|
+
this.openLanguageDropdown = false;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
onDesignationsFocus() {
|
|
221
|
+
// this.openDesignationDropdown = true
|
|
222
|
+
setTimeout(() => {
|
|
223
|
+
this.scrollToActive('designation');
|
|
224
|
+
}, 100);
|
|
225
|
+
}
|
|
226
|
+
onLanguageFocus() {
|
|
227
|
+
this.openLanguageDropdown = true;
|
|
228
|
+
setTimeout(() => {
|
|
229
|
+
this.scrollToActive('language');
|
|
230
|
+
}, 100);
|
|
231
|
+
}
|
|
232
|
+
filterLanguage(value) {
|
|
233
|
+
if (value.length) {
|
|
234
|
+
this.masterLanguages = this.masterLanguageBackup.filter((val) => val && val.name.trim().toLowerCase().includes(value.toLowerCase()));
|
|
235
|
+
if (this.masterLanguages.length === 0) {
|
|
236
|
+
const usernameControl = this.userDetailsForm.get('domicileMedium');
|
|
237
|
+
if (usernameControl) {
|
|
238
|
+
usernameControl.setErrors({ required: true });
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
this.openLanguageDropdown = true;
|
|
243
|
+
}
|
|
244
|
+
// filterdesignation(value: any) {
|
|
245
|
+
// if (value.length) {
|
|
246
|
+
// this.desigantionFilterEnable =true
|
|
247
|
+
// this.filterDesignationsMeta = this.designationsMeta.filter((val: any) =>
|
|
248
|
+
// val && val.name.trim().toLowerCase().includes(value.toLowerCase())
|
|
249
|
+
// )
|
|
250
|
+
// if (this.filterDesignationsMeta.length === 0) {
|
|
251
|
+
// const usernameControl = this.userDetailsForm.get('designation')
|
|
252
|
+
// if (usernameControl) {
|
|
253
|
+
// usernameControl.setErrors({ required: true });
|
|
254
|
+
// }
|
|
255
|
+
// }
|
|
256
|
+
// } else {
|
|
257
|
+
// this.filterDesignationsMeta = this.designationsMeta.slice(0, this.designationDefaultLoadCount)
|
|
258
|
+
// this.desigantionFilterEnable =false
|
|
259
|
+
// this.designationListLoadCount = this.designationDefaultLoadCount;
|
|
260
|
+
// }
|
|
261
|
+
// // this.openDesignationDropdown = true
|
|
262
|
+
// }
|
|
263
|
+
// async getMasterDesignation() {
|
|
264
|
+
// this.signupService.getOrgReadData(this.userProfileObject.rootOrgId).subscribe((result: any) => {
|
|
265
|
+
// if (result && result.frameworkid) {
|
|
266
|
+
// this.signupService.getFrameworkInfo(result.frameworkid).subscribe((res: any) => {
|
|
267
|
+
// const frameworkDetails = _.get(res, 'result.framework')
|
|
268
|
+
// const categoriesOfFramework = _.get(frameworkDetails, 'categories', [])
|
|
269
|
+
// const organisationsList = this.getTermsByCode(categoriesOfFramework, 'org')
|
|
270
|
+
// const disOrderedList = _.get(organisationsList, '[0].children', [])
|
|
271
|
+
// this.designationsMeta = _.sortBy(disOrderedList, 'name')
|
|
272
|
+
// this.filterDesignationsMeta = this.designationsMeta.slice(0, this.designationDefaultLoadCount)
|
|
273
|
+
// if (this.canShowDesignation) {
|
|
274
|
+
// let field = this.userDetailsForm.get('designation')
|
|
275
|
+
// if (field && field.value) {
|
|
276
|
+
// let _value = field.value.toLowerCase()
|
|
277
|
+
// if (!this.designationsMeta.find((d: any) => d.name.toLowerCase() === _value)) {
|
|
278
|
+
// field.patchValue('')
|
|
279
|
+
// }
|
|
280
|
+
// }
|
|
281
|
+
// }
|
|
282
|
+
// }, (error: any) => {
|
|
283
|
+
// // tslint:disable-next-line
|
|
284
|
+
// console.error('Error occurred:', error)
|
|
285
|
+
// })
|
|
286
|
+
// }
|
|
287
|
+
// }, (error: any) => {
|
|
288
|
+
// // tslint:disable-next-line
|
|
289
|
+
// console.error('Error occurred:', error)
|
|
290
|
+
// })
|
|
291
|
+
// }
|
|
292
|
+
// private getTermsByCode(categories: any[], code: string) {
|
|
293
|
+
// const selectedCategory = categories.filter(
|
|
294
|
+
// (category: any) => category.code === code
|
|
295
|
+
// );
|
|
296
|
+
// return _.get(selectedCategory, '[0].terms', []);
|
|
297
|
+
// }
|
|
298
|
+
preventBlur(event) {
|
|
299
|
+
event.preventDefault();
|
|
300
|
+
}
|
|
301
|
+
preventLanguageBlur(event) {
|
|
302
|
+
event.preventDefault();
|
|
303
|
+
}
|
|
304
|
+
selectDesignation(designation) {
|
|
305
|
+
this.userDetailsForm.patchValue({ designation: designation });
|
|
306
|
+
const fieldControl = this.userDetailsForm.get('otherDesignation');
|
|
307
|
+
if (this.showDoptChanges && designation === 'Others') {
|
|
308
|
+
if (fieldControl) {
|
|
309
|
+
fieldControl.setValidators([Validators.required]);
|
|
310
|
+
fieldControl.updateValueAndValidity();
|
|
311
|
+
}
|
|
312
|
+
this.canShowOtherDesignation = true;
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
if (fieldControl) {
|
|
316
|
+
fieldControl.clearValidators();
|
|
317
|
+
fieldControl.updateValueAndValidity();
|
|
318
|
+
}
|
|
319
|
+
this.canShowOtherDesignation = false;
|
|
320
|
+
}
|
|
321
|
+
this.openDesignationDropdown = false;
|
|
322
|
+
}
|
|
323
|
+
selectLanguage(language) {
|
|
324
|
+
this.userDetailsForm.patchValue({ domicileMedium: language });
|
|
325
|
+
this.openLanguageDropdown = false;
|
|
326
|
+
}
|
|
327
|
+
isEmailAllowed(email) {
|
|
328
|
+
const domain = email.split('@')[1];
|
|
329
|
+
return domain ? this.approvedDomainList.includes(domain) : false;
|
|
330
|
+
}
|
|
331
|
+
handleGenerateEmailOTP(verifyType) {
|
|
332
|
+
console.log(verifyType);
|
|
333
|
+
this.userProfileService.getWhiteListDomain().subscribe((response) => {
|
|
334
|
+
if (response && response.result && response.result.domains && response.result.domains.length > 0) {
|
|
335
|
+
this.approvedDomainList = response.result.domains;
|
|
336
|
+
if (this.approvedDomainList && this.approvedDomainList.length && this.approvedDomainList.length > 0) {
|
|
337
|
+
if (this.isEmailAllowed(this.userDetailsForm.value['primaryEmail'])) {
|
|
338
|
+
this.otpService.sendEmailOtp(this.userDetailsForm.value['primaryEmail'])
|
|
339
|
+
.pipe(takeUntil(this.destroySubject$))
|
|
340
|
+
.subscribe((_res) => {
|
|
341
|
+
this.emailOtpForm.reset();
|
|
342
|
+
if (verifyType) {
|
|
343
|
+
this.emailOtpSent = true;
|
|
344
|
+
this.startEmailTimer();
|
|
345
|
+
this.snackBar.open(this.handleTranslateTo('otpSentEmail'));
|
|
346
|
+
}
|
|
347
|
+
}, (error) => {
|
|
348
|
+
if (!error.ok) {
|
|
349
|
+
this.snackBar.open(this.handleTranslateTo('emailOTPSentFail'));
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
this.snackBar.open(this.handleTranslateTo('emailApprovedPopupMsg'));
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
handleGenerateOTP(verifyType) {
|
|
361
|
+
this.otpService.sendOtp(this.userDetailsForm.value['mobile'])
|
|
362
|
+
.pipe(takeUntil(this.destroySubject$))
|
|
363
|
+
.subscribe((_res) => {
|
|
364
|
+
this.snackBar.open(this.handleTranslateTo('otpSentMobile'));
|
|
365
|
+
this.otpForm.reset();
|
|
366
|
+
if (verifyType) {
|
|
367
|
+
this.otpSent = true;
|
|
368
|
+
this.startTimer();
|
|
369
|
+
//this.handleVerifyOTP(verifyType, this.userDetailsForm.value['mobile'])
|
|
370
|
+
}
|
|
371
|
+
}, (error) => {
|
|
372
|
+
if (!error.ok) {
|
|
373
|
+
this.snackBar.open(this.handleTranslateTo('mobileOTPSentFail'));
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
handleResendOTP() {
|
|
378
|
+
this.timeLeft = 150;
|
|
379
|
+
this.showResendOTP = true;
|
|
380
|
+
this.startTimer();
|
|
381
|
+
let otpValue$;
|
|
382
|
+
otpValue$ = this.otpService.resendOtp(this.userDetailsForm.controls['mobile'].value);
|
|
383
|
+
otpValue$.pipe(takeUntil(this.destroySubject$))
|
|
384
|
+
.subscribe((_res) => {
|
|
385
|
+
this.snackBar.open(this.handleTranslateTo('otpSentMobile'));
|
|
386
|
+
}, (error) => {
|
|
387
|
+
if (!error.ok) {
|
|
388
|
+
this.snackBar.open(_.get(error, 'error.params.errmsg') || 'Unable to resend OTP, please try again later!');
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
handleResendEmailOTP() {
|
|
393
|
+
this.emailTimeLeft = 150;
|
|
394
|
+
this.showEmailResendOTP = true;
|
|
395
|
+
this.startEmailTimer();
|
|
396
|
+
let otpValue$;
|
|
397
|
+
otpValue$ = this.otpService.sendEmailOtp(this.userDetailsForm.controls['primaryEmail'].value);
|
|
398
|
+
otpValue$.pipe(takeUntil(this.destroySubject$))
|
|
399
|
+
.subscribe((_res) => {
|
|
400
|
+
this.snackBar.open(this.handleTranslateTo('otpSentEmail'));
|
|
401
|
+
}, (error) => {
|
|
402
|
+
if (!error.ok) {
|
|
403
|
+
this.snackBar.open(_.get(error, 'error.params.errmsg') || 'Unable to resend OTP, please try again later!');
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
verifyEmailOTP() {
|
|
408
|
+
this.otpService.verifyEmailOTP(this.emailOtpForm.controls['eOtp'].value, this.userDetailsForm.controls['primaryEmail'].value)
|
|
409
|
+
.pipe(takeUntil(this.destroySubject$))
|
|
410
|
+
.subscribe((_res) => {
|
|
411
|
+
this.snackBar.open(this.handleTranslateTo('OTPSentSuccess'));
|
|
412
|
+
this.verifyEmail = true;
|
|
413
|
+
this.eVerified = true;
|
|
414
|
+
this.emailOtpSent = false;
|
|
415
|
+
this.contextToken = _res.result.contextToken;
|
|
416
|
+
this.emailOtpForm.reset();
|
|
417
|
+
}, (error) => {
|
|
418
|
+
if (!error.ok) {
|
|
419
|
+
this.snackBar.open(_.get(error, 'error.params.errmsg') || this.handleTranslateTo('OTPVerifyFailed'));
|
|
420
|
+
}
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
verifyMobileOTP() {
|
|
424
|
+
this.otpService.verifyOTP(this.otpForm.controls['otp'].value, this.userDetailsForm.controls['mobile'].value)
|
|
425
|
+
.pipe(takeUntil(this.destroySubject$))
|
|
426
|
+
.subscribe((_res) => {
|
|
427
|
+
this.snackBar.open(this.handleTranslateTo('OTPSentSuccess'));
|
|
428
|
+
this.verifyMobile = true;
|
|
429
|
+
this.mVerified = true;
|
|
430
|
+
this.otpSent = false;
|
|
431
|
+
this.otpForm.reset();
|
|
432
|
+
}, (error) => {
|
|
433
|
+
if (!error.ok) {
|
|
434
|
+
this.snackBar.open(_.get(error, 'error.params.errmsg') || this.handleTranslateTo('OTPVerifyFailed'));
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
startTimer() {
|
|
439
|
+
this.interval = setInterval(() => {
|
|
440
|
+
if (this.timeLeft > 0) {
|
|
441
|
+
this.timeLeft = this.timeLeft - 1;
|
|
442
|
+
if (this.timerDiv) {
|
|
443
|
+
this.timerDiv.nativeElement.innerHTML = `${Math.floor(this.timeLeft / 60)}m: ${this.timeLeft % 60}s`;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
clearInterval(this.interval);
|
|
448
|
+
this.showResendOTP = true;
|
|
449
|
+
}
|
|
450
|
+
}, 1000);
|
|
451
|
+
}
|
|
452
|
+
startEmailTimer() {
|
|
453
|
+
this.emailInterval = setInterval(() => {
|
|
454
|
+
if (this.emailTimeLeft > 0) {
|
|
455
|
+
this.emailTimeLeft = this.emailTimeLeft - 1;
|
|
456
|
+
if (this.emailTimerDiv) {
|
|
457
|
+
this.emailTimerDiv.nativeElement.innerHTML = `${Math.floor(this.emailTimeLeft / 60)}m: ${this.emailTimeLeft % 60}s`;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
else {
|
|
461
|
+
clearInterval(this.emailInterval);
|
|
462
|
+
this.showEmailResendOTP = true;
|
|
463
|
+
}
|
|
464
|
+
}, 1000);
|
|
465
|
+
}
|
|
466
|
+
checkAfterSubmit(_e) {
|
|
467
|
+
// this.renderSubject.next()
|
|
468
|
+
// tslint:disable-next-line:no-console
|
|
469
|
+
console.log('Form is submitted successfully');
|
|
470
|
+
if (this.batchDetails.batchAttributes.userProfileFileds &&
|
|
471
|
+
this.batchDetails.batchAttributes.userProfileFileds === "Available user filled iGOT profile") {
|
|
472
|
+
this.submitSurevy(true);
|
|
473
|
+
}
|
|
474
|
+
if (this.batchDetails.batchAttributes.userProfileFileds && !this.updateProfile &&
|
|
475
|
+
(this.batchDetails.batchAttributes.userProfileFileds === "Full iGOT profile" ||
|
|
476
|
+
this.batchDetails.batchAttributes.userProfileFileds === "Custom iGOT profile")) {
|
|
477
|
+
this.submitSurevy(true);
|
|
478
|
+
}
|
|
479
|
+
this.openSnackbar('Form is submitted successfully');
|
|
480
|
+
this.dialogRef.close(true);
|
|
481
|
+
}
|
|
482
|
+
closePopup() {
|
|
483
|
+
this.dialogRef.close(true);
|
|
484
|
+
}
|
|
485
|
+
openSnackbar(primaryMsg, duration = 5000) {
|
|
486
|
+
this.snackBar.open(primaryMsg, 'X', {
|
|
487
|
+
duration,
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
ngOnInit() {
|
|
491
|
+
this.formId = _.get(this.data, 'batchData.batchAttributes.profileSurveyId');
|
|
492
|
+
this.getFormDetails();
|
|
493
|
+
this.setValueChangeFunctions();
|
|
494
|
+
this.fetchCadreData();
|
|
495
|
+
this.getGroupData();
|
|
496
|
+
this.getPendingDetails();
|
|
497
|
+
setTimeout(() => {
|
|
498
|
+
// this.loadDesignations()
|
|
499
|
+
this.checkSelectedOrgHasDesignations();
|
|
500
|
+
//this.getMasterDesignation()
|
|
501
|
+
this.getMasterLanguage();
|
|
502
|
+
}, 500);
|
|
503
|
+
}
|
|
504
|
+
getFormDetails() {
|
|
505
|
+
if (this.formId) {
|
|
506
|
+
this.profileV2Svc.getFormV2ByID(this.formId).subscribe((responce) => {
|
|
507
|
+
if (responce) {
|
|
508
|
+
this.formsDetils = _.get(responce, 'result.response', {});
|
|
509
|
+
}
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
setValueChangeFunctions() {
|
|
514
|
+
const searchDesignationControl = this.userDetailsForm.get('searchDesignation');
|
|
515
|
+
if (searchDesignationControl) {
|
|
516
|
+
let settingValueChange = true;
|
|
517
|
+
searchDesignationControl.valueChanges.pipe(debounceTime(300), distinctUntilChanged(), startWith('')).subscribe(searchText => {
|
|
518
|
+
this.designationsOffset = 0;
|
|
519
|
+
if (searchText && searchText.length > 1) {
|
|
520
|
+
this.designationSearchText = searchText;
|
|
521
|
+
this.getdesignationsMeta();
|
|
522
|
+
}
|
|
523
|
+
else if (!searchText) {
|
|
524
|
+
this.designationSearchText = searchText;
|
|
525
|
+
if (!settingValueChange) {
|
|
526
|
+
this.getdesignationsMeta();
|
|
527
|
+
}
|
|
528
|
+
this.checkCurrentDesignationPresent();
|
|
529
|
+
}
|
|
530
|
+
settingValueChange = false;
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
fetchCadreData() {
|
|
535
|
+
this.addLoader = this.addLoader + 1;
|
|
536
|
+
this.profileV2Svc.fetchCadre().subscribe((response) => {
|
|
537
|
+
this.addLoader = this.addLoader - 1;
|
|
538
|
+
this.civilServiceData = response.result.response.value.civilServiceType;
|
|
539
|
+
this.civilServiceTypes = this.civilServiceData.civilServiceTypeList.map((service) => service.name);
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
getIsCadreStatus(value) {
|
|
543
|
+
this.isCadreStatus = value;
|
|
544
|
+
if (value) {
|
|
545
|
+
this.userDetailsForm.patchValue({
|
|
546
|
+
typeOfCivilService: '',
|
|
547
|
+
serviceType: '',
|
|
548
|
+
cadreName: '',
|
|
549
|
+
cadreBatch: '',
|
|
550
|
+
cadreControllingAuthority: '',
|
|
551
|
+
});
|
|
552
|
+
this.addValidators();
|
|
553
|
+
}
|
|
554
|
+
else {
|
|
555
|
+
this.showBatchForNoCadre = false;
|
|
556
|
+
this.removeValidators();
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
getAllErrors() {
|
|
560
|
+
const errorMessages = [];
|
|
561
|
+
Object.keys(this.userDetailsForm.controls).forEach((key) => {
|
|
562
|
+
const controlErrors = this.userDetailsForm.controls[key].errors;
|
|
563
|
+
if (controlErrors) {
|
|
564
|
+
Object.keys(controlErrors).forEach((errorKey) => {
|
|
565
|
+
switch (errorKey) {
|
|
566
|
+
case 'required':
|
|
567
|
+
errorMessages.push(`${key} is required.`);
|
|
568
|
+
break;
|
|
569
|
+
case 'minlength':
|
|
570
|
+
const requiredLength = controlErrors['minlength'].requiredLength;
|
|
571
|
+
errorMessages.push(`${key} must be at least ${requiredLength} characters long.`);
|
|
572
|
+
break;
|
|
573
|
+
case 'email':
|
|
574
|
+
errorMessages.push(`Please enter a valid email address.`);
|
|
575
|
+
break;
|
|
576
|
+
// Add more cases for other validators as needed
|
|
577
|
+
}
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
});
|
|
581
|
+
return errorMessages;
|
|
582
|
+
}
|
|
583
|
+
addValidators() {
|
|
584
|
+
const fieldControl0 = this.userDetailsForm.get('isCadre');
|
|
585
|
+
if (fieldControl0) {
|
|
586
|
+
fieldControl0.setValidators([Validators.required]);
|
|
587
|
+
fieldControl0.updateValueAndValidity();
|
|
588
|
+
}
|
|
589
|
+
const fieldControl = this.userDetailsForm.get('typeOfCivilService');
|
|
590
|
+
if (fieldControl) {
|
|
591
|
+
fieldControl.setValidators([Validators.required]);
|
|
592
|
+
fieldControl.updateValueAndValidity();
|
|
593
|
+
}
|
|
594
|
+
const fieldControl1 = this.userDetailsForm.get('serviceType');
|
|
595
|
+
if (fieldControl1) {
|
|
596
|
+
fieldControl1.setValidators([Validators.required]);
|
|
597
|
+
fieldControl1.updateValueAndValidity();
|
|
598
|
+
}
|
|
599
|
+
const fieldControl3 = this.userDetailsForm.get('cadreBatch');
|
|
600
|
+
if (fieldControl3) {
|
|
601
|
+
fieldControl3.setValidators([Validators.required]);
|
|
602
|
+
fieldControl3.updateValueAndValidity();
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
removeValidators() {
|
|
606
|
+
const fieldControl = this.userDetailsForm.get('typeOfCivilService');
|
|
607
|
+
if (fieldControl) {
|
|
608
|
+
fieldControl.clearValidators();
|
|
609
|
+
fieldControl.updateValueAndValidity();
|
|
610
|
+
}
|
|
611
|
+
const fieldControl1 = this.userDetailsForm.get('serviceType');
|
|
612
|
+
if (fieldControl1) {
|
|
613
|
+
fieldControl1.clearValidators();
|
|
614
|
+
fieldControl1.updateValueAndValidity();
|
|
615
|
+
}
|
|
616
|
+
const fieldControl2 = this.userDetailsForm.get('cadreName');
|
|
617
|
+
if (fieldControl2) {
|
|
618
|
+
fieldControl2.clearValidators();
|
|
619
|
+
fieldControl2.updateValueAndValidity();
|
|
620
|
+
}
|
|
621
|
+
const fieldControl3 = this.userDetailsForm.get('cadreBatch');
|
|
622
|
+
if (fieldControl3) {
|
|
623
|
+
fieldControl3.clearValidators();
|
|
624
|
+
fieldControl3.updateValueAndValidity();
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
getService(event) {
|
|
628
|
+
const serviceTypeControl = this.userDetailsForm.get('serviceType');
|
|
629
|
+
const cadreControl = this.userDetailsForm.get('cadreName');
|
|
630
|
+
const batchControl = this.userDetailsForm.get('cadreBatch');
|
|
631
|
+
const cadreControllingAuthorityControl = this.userDetailsForm.get('cadreControllingAuthority');
|
|
632
|
+
if (serviceTypeControl) {
|
|
633
|
+
serviceTypeControl.reset();
|
|
634
|
+
}
|
|
635
|
+
if (cadreControl) {
|
|
636
|
+
cadreControl.reset();
|
|
637
|
+
}
|
|
638
|
+
if (batchControl) {
|
|
639
|
+
batchControl.reset();
|
|
640
|
+
}
|
|
641
|
+
if (cadreControllingAuthorityControl) {
|
|
642
|
+
cadreControllingAuthorityControl.reset();
|
|
643
|
+
}
|
|
644
|
+
this.serviceType = this.civilServiceData.civilServiceTypeList.find((element) => element.name === event);
|
|
645
|
+
this.serviceType = this.civilServiceData.civilServiceTypeList.find((element) => element.name === event);
|
|
646
|
+
if (this.serviceType) {
|
|
647
|
+
this.serviceListData = this.serviceType.serviceList;
|
|
648
|
+
this.serviceName = this.serviceListData.map((service) => service.name);
|
|
649
|
+
this.serviceId = this.serviceType.id;
|
|
650
|
+
this.errorMessage = '';
|
|
651
|
+
}
|
|
652
|
+
else {
|
|
653
|
+
this.errorMessage = 'Service Type not found';
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
onServiceSelect(event) {
|
|
657
|
+
const cadreControl = this.userDetailsForm.get('cadreName');
|
|
658
|
+
const batchControl = this.userDetailsForm.get('cadreBatch');
|
|
659
|
+
const cadreControllingAuthorityControl = this.userDetailsForm.get('cadreControllingAuthority');
|
|
660
|
+
if (cadreControl) {
|
|
661
|
+
cadreControl.reset();
|
|
662
|
+
}
|
|
663
|
+
if (batchControl) {
|
|
664
|
+
batchControl.reset();
|
|
665
|
+
}
|
|
666
|
+
if (cadreControllingAuthorityControl) {
|
|
667
|
+
cadreControllingAuthorityControl.reset();
|
|
668
|
+
}
|
|
669
|
+
this.selectedServiceName = event.value;
|
|
670
|
+
if (this.serviceListData) {
|
|
671
|
+
this.selectedService = this.serviceListData.find((service) => service.name === this.selectedServiceName);
|
|
672
|
+
if (this.selectedService) {
|
|
673
|
+
this.civilServiceName = this.selectedService.name;
|
|
674
|
+
this.civilServiceId = this.selectedService.id;
|
|
675
|
+
this.cadre = this.selectedService.cadreList ? this.selectedService.cadreList.map((cadre) => cadre.name) : [];
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
if (this.selectedService && this.selectedService.cadreControllingAuthority) {
|
|
679
|
+
this.cadreControllingAuthority = this.selectedService.cadreControllingAuthority;
|
|
680
|
+
}
|
|
681
|
+
else {
|
|
682
|
+
this.cadreControllingAuthority = 'NA';
|
|
683
|
+
}
|
|
684
|
+
if (this.selectedService && this.selectedService.cadreList.length === 0) {
|
|
685
|
+
this.showBatchForNoCadre = true;
|
|
686
|
+
this.startBatch = this.selectedService.commonBatchStartYear;
|
|
687
|
+
this.endBatch = this.selectedService.commonBatchEndYear;
|
|
688
|
+
this.exclusionYear = this.selectedService.commonBatchExclusionYearList;
|
|
689
|
+
// tslint:disable
|
|
690
|
+
this.yearArray = Array.from({ length: this.endBatch - this.startBatch + 1 }, (_, index) => this.startBatch + index)
|
|
691
|
+
.filter(year => !this.exclusionYear.includes(year));
|
|
692
|
+
}
|
|
693
|
+
else {
|
|
694
|
+
this.showBatchForNoCadre = false;
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
onCadreSelect(event) {
|
|
698
|
+
const batchControl = this.userDetailsForm.get('cadreBatch');
|
|
699
|
+
const cadreControllingAuthorityControl = this.userDetailsForm.get('cadreControllingAuthority');
|
|
700
|
+
if (batchControl) {
|
|
701
|
+
batchControl.reset();
|
|
702
|
+
}
|
|
703
|
+
if (cadreControllingAuthorityControl) {
|
|
704
|
+
cadreControllingAuthorityControl.reset();
|
|
705
|
+
}
|
|
706
|
+
this.selectedCadreName = event;
|
|
707
|
+
if (this.selectedService) {
|
|
708
|
+
this.selectedCadre = this.selectedService.cadreList.find((cadre) => cadre.name === this.selectedCadreName);
|
|
709
|
+
this.startBatch = this.selectedCadre ? this.selectedCadre.startBatchYear : '';
|
|
710
|
+
this.endBatch = this.selectedCadre ? this.selectedCadre.endBatchYear : '';
|
|
711
|
+
this.exclusionYear = this.selectedCadre ? this.selectedCadre.exculsionYearList : '';
|
|
712
|
+
// tslint:disable
|
|
713
|
+
this.yearArray = Array.from({ length: this.endBatch - this.startBatch + 1 }, (_, index) => this.startBatch + index)
|
|
714
|
+
.filter(year => !this.exclusionYear.includes(year));
|
|
715
|
+
this.cadreId = this.selectedCadre ? this.selectedCadre.id : '';
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
getPendingDetails() {
|
|
719
|
+
this.addLoader = this.addLoader + 1;
|
|
720
|
+
this.profileV2Svc.fetchApprovalDetails().subscribe((resp) => {
|
|
721
|
+
this.addLoader = this.addLoader - 1;
|
|
722
|
+
if (resp && resp.result && resp.result.data) {
|
|
723
|
+
this.pendingFileds = resp.result.data;
|
|
724
|
+
if (this.pendingFileds.length > 0) {
|
|
725
|
+
this.pendingFileds.forEach((user) => {
|
|
726
|
+
if (user['group']) {
|
|
727
|
+
let ctrl = this.userDetailsForm.get('group');
|
|
728
|
+
if (ctrl) {
|
|
729
|
+
ctrl.patchValue({ group: user['group'] });
|
|
730
|
+
this.pGroup = user['group'];
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
if (user['designation']) {
|
|
734
|
+
let ctrl = this.userDetailsForm.get('designation');
|
|
735
|
+
if (ctrl) {
|
|
736
|
+
ctrl.patchValue({ designation: user['designation'] });
|
|
737
|
+
this.pDesignation = user['designation'];
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
});
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
this.isLoading = false;
|
|
744
|
+
this.defineFormAttributes();
|
|
745
|
+
}, error => {
|
|
746
|
+
// tslint:disable-next-line:no-console
|
|
747
|
+
console.log(error);
|
|
748
|
+
this.addLoader = this.addLoader - 1;
|
|
749
|
+
this.isLoading = false;
|
|
750
|
+
});
|
|
751
|
+
}
|
|
752
|
+
defineFormAttributes() {
|
|
753
|
+
if (this.batchDetails.batchAttributes.userProfileFileds &&
|
|
754
|
+
this.batchDetails.batchAttributes.bpEnrolMandatoryProfileFields) {
|
|
755
|
+
let customAttr = this.batchDetails.batchAttributes.bpEnrolMandatoryProfileFields;
|
|
756
|
+
console.log("customAttr ", customAttr);
|
|
757
|
+
if (this.findAttr(customAttr, 'name')) {
|
|
758
|
+
this.canShowName = true;
|
|
759
|
+
this.showname = true;
|
|
760
|
+
const fieldControl = this.userDetailsForm.get('name');
|
|
761
|
+
if (fieldControl) {
|
|
762
|
+
fieldControl.setValue(this.userProfileObject.profileDetails.personalDetails.firstname);
|
|
763
|
+
fieldControl.disable();
|
|
764
|
+
}
|
|
765
|
+
if (this.profileFormType === 'Available user filled iGOT profile' &&
|
|
766
|
+
!this.userProfileObject.profileDetails.personalDetails.firstname) {
|
|
767
|
+
this.canShowName = false;
|
|
768
|
+
this.showname = false;
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
if (this.findAttr(customAttr, 'email')) {
|
|
772
|
+
this.canShowEmail = true;
|
|
773
|
+
const fieldControl = this.userDetailsForm.get('primaryEmail');
|
|
774
|
+
if (fieldControl) {
|
|
775
|
+
fieldControl.setValue(this.userProfileObject.profileDetails.personalDetails.primaryEmail);
|
|
776
|
+
if (this.userProfileObject.profileDetails.personalDetails.primaryEmail) {
|
|
777
|
+
fieldControl.setValue(this.userProfileObject.profileDetails.personalDetails.primaryEmail);
|
|
778
|
+
this.eVerified = true;
|
|
779
|
+
}
|
|
780
|
+
else if (this.profileFormType === 'Available user filled iGOT profile') {
|
|
781
|
+
this.showEmail = false;
|
|
782
|
+
}
|
|
783
|
+
else {
|
|
784
|
+
this.showEmail = true;
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
else {
|
|
789
|
+
this.eVerified = true;
|
|
790
|
+
}
|
|
791
|
+
if (this.findAttr(customAttr, 'organisation')) {
|
|
792
|
+
this.canShowOrg = true;
|
|
793
|
+
this.showOrg = true;
|
|
794
|
+
const fieldControl = this.userDetailsForm.get('organisation');
|
|
795
|
+
if (fieldControl) {
|
|
796
|
+
fieldControl.setValue(this.userProfileObject.profileDetails.employmentDetails.departmentName);
|
|
797
|
+
fieldControl.disable();
|
|
798
|
+
}
|
|
799
|
+
if (this.profileFormType === 'Available user filled iGOT profile' &&
|
|
800
|
+
!this.userProfileObject.profileDetails.employmentDetails.departmentName) {
|
|
801
|
+
this.canShowOrg = false;
|
|
802
|
+
this.showOrg = false;
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
if (this.findAttr(customAttr, 'group')) {
|
|
806
|
+
this.canShowGroup = true;
|
|
807
|
+
this.showGroup = true;
|
|
808
|
+
const fieldControl = this.userDetailsForm.get('group');
|
|
809
|
+
if (fieldControl) {
|
|
810
|
+
if (this.pGroup) {
|
|
811
|
+
fieldControl.setValue(this.pGroup);
|
|
812
|
+
// if (this.profileFormType === 'Available user filled iGOT profile') {
|
|
813
|
+
// this.canShowGroup = true
|
|
814
|
+
// this.showGroup = true
|
|
815
|
+
// }
|
|
816
|
+
}
|
|
817
|
+
else {
|
|
818
|
+
if (this.userProfileObject.profileDetails.professionalDetails &&
|
|
819
|
+
this.userProfileObject.profileDetails.professionalDetails.length &&
|
|
820
|
+
this.userProfileObject.profileDetails.professionalDetails[0].group) {
|
|
821
|
+
fieldControl.setValue(this.userProfileObject.profileDetails.professionalDetails[0].group);
|
|
822
|
+
// if (this.profileFormType === 'Available user filled iGOT profile') {
|
|
823
|
+
// this.canShowGroup = false
|
|
824
|
+
// this.showGroup = false
|
|
825
|
+
// }
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
fieldControl.setValidators([Validators.required]);
|
|
829
|
+
fieldControl.updateValueAndValidity();
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
if (this.findAttr(customAttr, 'designation')) {
|
|
833
|
+
this.canShowDesignation = true;
|
|
834
|
+
this.showDesignation = true;
|
|
835
|
+
const fieldControl = this.userDetailsForm.get('designation');
|
|
836
|
+
if (fieldControl) {
|
|
837
|
+
if (this.pDesignation) {
|
|
838
|
+
fieldControl.patchValue(this.pDesignation);
|
|
839
|
+
// if (this.profileFormType === 'Available user filled iGOT profile') {
|
|
840
|
+
// this.canShowDesignation = true
|
|
841
|
+
// this.showDesignation = true
|
|
842
|
+
// }
|
|
843
|
+
}
|
|
844
|
+
else {
|
|
845
|
+
if (this.userProfileObject.profileDetails.professionalDetails &&
|
|
846
|
+
this.userProfileObject.profileDetails.professionalDetails.length &&
|
|
847
|
+
this.userProfileObject.profileDetails.professionalDetails[0].designation) {
|
|
848
|
+
fieldControl.patchValue(this.userProfileObject.profileDetails.professionalDetails[0].designation);
|
|
849
|
+
// if (this.profileFormType === 'Available user filled iGOT profile') {
|
|
850
|
+
// this.canShowDesignation = false
|
|
851
|
+
// this.showDesignation = false
|
|
852
|
+
// }
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
fieldControl.setValidators([Validators.required]);
|
|
856
|
+
fieldControl.updateValueAndValidity();
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
if (this.findAttr(customAttr, 'employeeCode')) {
|
|
860
|
+
this.canShowEmployeeCode = true;
|
|
861
|
+
const contrl = this.userDetailsForm.get('employeeCode');
|
|
862
|
+
if (contrl) {
|
|
863
|
+
if (this.userProfileObject.profileDetails.employmentDetails.employeeCode) {
|
|
864
|
+
contrl.setValue(this.userProfileObject.profileDetails.employmentDetails.employeeCode);
|
|
865
|
+
contrl.setValidators([Validators.required, Validators.pattern(EMP_ID_PATTERN)]);
|
|
866
|
+
contrl.updateValueAndValidity();
|
|
867
|
+
}
|
|
868
|
+
else if (this.profileFormType === 'Available user filled iGOT profile') {
|
|
869
|
+
this.canShowEmployeeCode = false;
|
|
870
|
+
}
|
|
871
|
+
else {
|
|
872
|
+
this.showEmployeeCode = true;
|
|
873
|
+
contrl.setValidators([Validators.required, Validators.pattern(EMP_ID_PATTERN)]);
|
|
874
|
+
contrl.updateValueAndValidity();
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
if (this.findAttr(customAttr, 'mobile')) {
|
|
879
|
+
this.canshowMobile = true;
|
|
880
|
+
const contrl = this.userDetailsForm.get('mobile');
|
|
881
|
+
if (contrl) {
|
|
882
|
+
if (this.userProfileObject.profileDetails.personalDetails.mobile && this.userProfileObject.profileDetails.personalDetails.phoneVerified) {
|
|
883
|
+
contrl.setValue(this.userProfileObject.profileDetails.personalDetails.mobile);
|
|
884
|
+
this.mVerified = true;
|
|
885
|
+
contrl.setValidators([Validators.minLength(10), Validators.maxLength(10), Validators.pattern(MOBILE_PATTERN)]);
|
|
886
|
+
contrl.updateValueAndValidity();
|
|
887
|
+
}
|
|
888
|
+
else if (this.profileFormType === 'Available user filled iGOT profile') {
|
|
889
|
+
this.canshowMobile = false;
|
|
890
|
+
this.mVerified = true;
|
|
891
|
+
}
|
|
892
|
+
else {
|
|
893
|
+
this.showMobile = true;
|
|
894
|
+
contrl.setValidators([Validators.minLength(10), Validators.maxLength(10), Validators.pattern(MOBILE_PATTERN)]);
|
|
895
|
+
contrl.updateValueAndValidity();
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
if (this.canshowMobile === false) {
|
|
900
|
+
this.mVerified = true;
|
|
901
|
+
}
|
|
902
|
+
if (this.findAttr(customAttr, 'gender')) {
|
|
903
|
+
this.canShowGender = true;
|
|
904
|
+
const contrl = this.userDetailsForm.get('gender');
|
|
905
|
+
if (contrl) {
|
|
906
|
+
if (this.userProfileObject.profileDetails.personalDetails.gender) {
|
|
907
|
+
contrl.setValue(this.userProfileObject.profileDetails.personalDetails.gender);
|
|
908
|
+
contrl.setValidators([Validators.required]);
|
|
909
|
+
contrl.updateValueAndValidity();
|
|
910
|
+
}
|
|
911
|
+
else if (this.profileFormType === 'Available user filled iGOT profile') {
|
|
912
|
+
this.canShowGender = false;
|
|
913
|
+
}
|
|
914
|
+
else {
|
|
915
|
+
this.showGender = true;
|
|
916
|
+
contrl.setValidators([Validators.required]);
|
|
917
|
+
contrl.updateValueAndValidity();
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
}
|
|
921
|
+
if (this.findAttr(customAttr, 'dob')) {
|
|
922
|
+
this.canShowDob = true;
|
|
923
|
+
const contrl = this.userDetailsForm.get('dob');
|
|
924
|
+
if (contrl) {
|
|
925
|
+
if (this.userProfileObject.profileDetails.personalDetails.dob) {
|
|
926
|
+
let _dob = this.userProfileObject.profileDetails.personalDetails.dob;
|
|
927
|
+
const [day, month, year] = _dob.split('-');
|
|
928
|
+
const date = new Date(Number(year), Number(month) - 1, Number(day));
|
|
929
|
+
const formattedDay = String(date.getDate()).padStart(2, '0');
|
|
930
|
+
const formattedMonth = String(date.getMonth() + 1).padStart(2, '0');
|
|
931
|
+
const formattedYear = date.getFullYear();
|
|
932
|
+
this.selectedDate = new Date(`${formattedYear}-${formattedMonth}-${formattedDay}`);
|
|
933
|
+
contrl.setValue(this.selectedDate);
|
|
934
|
+
contrl.setValidators([Validators.required]);
|
|
935
|
+
contrl.updateValueAndValidity();
|
|
936
|
+
}
|
|
937
|
+
else if (this.profileFormType === 'Available user filled iGOT profile') {
|
|
938
|
+
this.canShowDob = false;
|
|
939
|
+
}
|
|
940
|
+
else {
|
|
941
|
+
this.showDob = true;
|
|
942
|
+
contrl.setValidators([Validators.required]);
|
|
943
|
+
contrl.updateValueAndValidity();
|
|
944
|
+
}
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
if (this.findAttr(customAttr, 'domicileMedium')) {
|
|
948
|
+
this.canShowDomicileMedium = true;
|
|
949
|
+
const contrl = this.userDetailsForm.get('domicileMedium');
|
|
950
|
+
if (contrl) {
|
|
951
|
+
if (this.userProfileObject.profileDetails.personalDetails.domicileMedium) {
|
|
952
|
+
contrl.setValue(this.userProfileObject.profileDetails.personalDetails.domicileMedium);
|
|
953
|
+
contrl.setValidators([Validators.required]);
|
|
954
|
+
contrl.updateValueAndValidity();
|
|
955
|
+
}
|
|
956
|
+
else if (this.profileFormType === 'Available user filled iGOT profile') {
|
|
957
|
+
this.canShowDomicileMedium = false;
|
|
958
|
+
}
|
|
959
|
+
else {
|
|
960
|
+
this.showDecimalMedium = true;
|
|
961
|
+
contrl.setValidators([Validators.required]);
|
|
962
|
+
contrl.updateValueAndValidity();
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
if (this.findAttr(customAttr, 'category')) {
|
|
967
|
+
this.canShowCategory = true;
|
|
968
|
+
const contrl = this.userDetailsForm.get('category');
|
|
969
|
+
if (contrl) {
|
|
970
|
+
if (this.userProfileObject.profileDetails.personalDetails.category) {
|
|
971
|
+
contrl.setValue(this.userProfileObject.profileDetails.personalDetails.category);
|
|
972
|
+
contrl.setValidators([Validators.required]);
|
|
973
|
+
contrl.updateValueAndValidity();
|
|
974
|
+
}
|
|
975
|
+
else if (this.profileFormType === 'Available user filled iGOT profile') {
|
|
976
|
+
this.canShowCategory = false;
|
|
977
|
+
}
|
|
978
|
+
else {
|
|
979
|
+
this.showCategory = true;
|
|
980
|
+
contrl.setValidators([Validators.required]);
|
|
981
|
+
contrl.updateValueAndValidity();
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
if (this.findAttr(customAttr, 'pinCode')) {
|
|
986
|
+
this.canShowpinCode = true;
|
|
987
|
+
const contrl = this.userDetailsForm.get('pinCode');
|
|
988
|
+
if (contrl) {
|
|
989
|
+
if (this.userProfileObject.profileDetails.employmentDetails.pinCode) {
|
|
990
|
+
contrl.setValue(this.userProfileObject.profileDetails.employmentDetails.pinCode);
|
|
991
|
+
contrl.setValidators([Validators.required, Validators.minLength(6), Validators.maxLength(6), Validators.pattern(PIN_CODE_PATTERN)]);
|
|
992
|
+
contrl.updateValueAndValidity();
|
|
993
|
+
}
|
|
994
|
+
else if (this.profileFormType === 'Available user filled iGOT profile') {
|
|
995
|
+
this.canShowpinCode = false;
|
|
996
|
+
}
|
|
997
|
+
else {
|
|
998
|
+
this.showPinCode = true;
|
|
999
|
+
contrl.setValidators([Validators.required, Validators.minLength(6), Validators.maxLength(6), Validators.pattern(PIN_CODE_PATTERN)]);
|
|
1000
|
+
contrl.updateValueAndValidity();
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
if (this.findAttr(customAttr, 'cadreDetails')) {
|
|
1005
|
+
this.canShowshowCadreDetails = true;
|
|
1006
|
+
const contrl = this.userDetailsForm.get('isCadre');
|
|
1007
|
+
if (contrl) {
|
|
1008
|
+
if (Object.keys(this.userProfileObject.profileDetails.personalDetails).includes('isCadre')) {
|
|
1009
|
+
if (this.userProfileObject.profileDetails.personalDetails.isCadre === true) {
|
|
1010
|
+
contrl.setValue(true);
|
|
1011
|
+
this.isCadreStatus = true;
|
|
1012
|
+
this.serviceId = this.userProfileObject.profileDetails.cadreDetails.civilServiceTypeId;
|
|
1013
|
+
this.civilServiceId = this.userProfileObject.profileDetails.cadreDetails.civilServiceId;
|
|
1014
|
+
this.cadreId = this.userProfileObject.profileDetails.cadreDetails.cadreId;
|
|
1015
|
+
this.cadreControllingAuthority = this.userProfileObject.profileDetails.cadreDetails.cadreControllingAuthorityName;
|
|
1016
|
+
setTimeout(() => {
|
|
1017
|
+
this.getService(this.userProfileObject.profileDetails.cadreDetails.civilServiceType);
|
|
1018
|
+
this.onServiceSelect({ value: this.userProfileObject.profileDetails.cadreDetails.civilServiceName });
|
|
1019
|
+
if (this.userProfileObject.profileDetails.cadreDetails.cadreName) {
|
|
1020
|
+
this.onCadreSelect(this.userProfileObject.profileDetails.cadreDetails.cadreName);
|
|
1021
|
+
}
|
|
1022
|
+
this.userDetailsForm.patchValue({
|
|
1023
|
+
typeOfCivilService: this.userProfileObject.profileDetails.cadreDetails.civilServiceType,
|
|
1024
|
+
serviceType: this.userProfileObject.profileDetails.cadreDetails.civilServiceName,
|
|
1025
|
+
cadreName: this.userProfileObject.profileDetails.cadreDetails.cadreName,
|
|
1026
|
+
cadreBatch: this.userProfileObject.profileDetails.cadreDetails.cadreBatch,
|
|
1027
|
+
cadreControllingAuthority: this.userProfileObject.profileDetails.cadreDetails.cadreControllingAuthorityName,
|
|
1028
|
+
});
|
|
1029
|
+
}, 1000);
|
|
1030
|
+
}
|
|
1031
|
+
else {
|
|
1032
|
+
contrl.setValue(false);
|
|
1033
|
+
this.isCadreStatus = false;
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
else if (this.profileFormType === 'Available user filled iGOT profile') {
|
|
1037
|
+
this.canShowshowCadreDetails = false;
|
|
1038
|
+
this.isCadreStatus = false;
|
|
1039
|
+
}
|
|
1040
|
+
else {
|
|
1041
|
+
contrl.setValidators([Validators.required]);
|
|
1042
|
+
contrl.updateValueAndValidity();
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
findAttr(customAttr, fName) {
|
|
1049
|
+
if (fName === 'name') {
|
|
1050
|
+
return customAttr.find((_field) => _field.field === 'profileDetails.personalDetails.firstname');
|
|
1051
|
+
}
|
|
1052
|
+
if (fName === 'email') {
|
|
1053
|
+
return customAttr.find((_field) => _field.field === 'profileDetails.personalDetails.primaryEmail');
|
|
1054
|
+
}
|
|
1055
|
+
if (fName === 'organisation') {
|
|
1056
|
+
return customAttr.find((_field) => _field.field === 'profileDetails.employmentDetails.departmentName');
|
|
1057
|
+
}
|
|
1058
|
+
if (fName === 'group') {
|
|
1059
|
+
return customAttr.find((_field) => _field.field === 'profileDetails.professionalDetails.group');
|
|
1060
|
+
}
|
|
1061
|
+
if (fName === 'designation') {
|
|
1062
|
+
return customAttr.find((_field) => _field.field === 'profileDetails.professionalDetails.designation');
|
|
1063
|
+
}
|
|
1064
|
+
if (fName === 'employeeCode') {
|
|
1065
|
+
return customAttr.find((_field) => _field.field === 'profileDetails.employmentDetails.employeeCode');
|
|
1066
|
+
}
|
|
1067
|
+
if (fName === 'mobile') {
|
|
1068
|
+
return customAttr.find((_field) => _field.field === 'profileDetails.personalDetails.mobile');
|
|
1069
|
+
}
|
|
1070
|
+
if (fName === 'gender') {
|
|
1071
|
+
return customAttr.find((_field) => _field.field === 'profileDetails.personalDetails.gender');
|
|
1072
|
+
}
|
|
1073
|
+
if (fName === 'dob') {
|
|
1074
|
+
return customAttr.find((_field) => _field.field === 'profileDetails.personalDetails.dob');
|
|
1075
|
+
}
|
|
1076
|
+
if (fName === 'domicileMedium') {
|
|
1077
|
+
return customAttr.find((_field) => _field.field === 'profileDetails.personalDetails.domicileMedium');
|
|
1078
|
+
}
|
|
1079
|
+
if (fName === 'category') {
|
|
1080
|
+
return customAttr.find((_field) => _field.field === 'profileDetails.personalDetails.category');
|
|
1081
|
+
}
|
|
1082
|
+
if (fName === 'pinCode') {
|
|
1083
|
+
return customAttr.find((_field) => _field.field === 'profileDetails.employmentDetails.pinCode');
|
|
1084
|
+
}
|
|
1085
|
+
if (fName === 'cadreDetails') {
|
|
1086
|
+
return customAttr.find((_field) => _field.field === 'profileDetails.cadreDetails.civilServiceType');
|
|
1087
|
+
}
|
|
1088
|
+
}
|
|
1089
|
+
findInProfile(attr) {
|
|
1090
|
+
if (attr === 'name') {
|
|
1091
|
+
return this.userProfileObject.profileDetails.personalDetails.firstName || this.userProfileObject.profileDetails.personalDetails.firstname;
|
|
1092
|
+
}
|
|
1093
|
+
if (attr === 'group') {
|
|
1094
|
+
return (!this.userProfileObject.profileDetails.profileGroupStatus) ||
|
|
1095
|
+
this.userProfileObject.profileDetails.profileGroupStatus === 'NOT-VERIFIED' || (this.pGroup ? true : false);
|
|
1096
|
+
}
|
|
1097
|
+
if (attr === 'designation') {
|
|
1098
|
+
return (!this.userProfileObject.profileDetails.profileDesignationStatus) ||
|
|
1099
|
+
this.userProfileObject.profileDetails.profileDesignationStatus === 'NOT-VERIFIED' || (this.pDesignation ? true : false);
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
getGroupData() {
|
|
1103
|
+
this.addLoader = this.addLoader + 1;
|
|
1104
|
+
this.userProfileService.getGroups()
|
|
1105
|
+
.pipe(takeUntil(this.destroySubject$))
|
|
1106
|
+
.subscribe((res) => {
|
|
1107
|
+
this.addLoader = this.addLoader - 1;
|
|
1108
|
+
this.groupData = res.result && res.result.response.filter((ele) => ele !== 'Others');
|
|
1109
|
+
}, (error) => {
|
|
1110
|
+
this.addLoader = this.addLoader - 1;
|
|
1111
|
+
if (!error.ok) {
|
|
1112
|
+
this.snackBar.open(this.handleTranslateTo('groupDataFaile'));
|
|
1113
|
+
}
|
|
1114
|
+
});
|
|
1115
|
+
}
|
|
1116
|
+
handleTranslateTo(menuName) {
|
|
1117
|
+
return this.userProfileService.handleTranslateTo(menuName);
|
|
1118
|
+
}
|
|
1119
|
+
checkSelectedOrgHasDesignations() {
|
|
1120
|
+
if (this.organisationId) {
|
|
1121
|
+
const igotDesignationBody = {
|
|
1122
|
+
request: {
|
|
1123
|
+
filters: {
|
|
1124
|
+
status: 'Live',
|
|
1125
|
+
category: 'designation',
|
|
1126
|
+
categories: [
|
|
1127
|
+
this.organisationId + '_odcs_designation',
|
|
1128
|
+
],
|
|
1129
|
+
objectType: 'Term',
|
|
1130
|
+
},
|
|
1131
|
+
fields: ['name'],
|
|
1132
|
+
offset: 0,
|
|
1133
|
+
limit: 1,
|
|
1134
|
+
sort_by: {
|
|
1135
|
+
lastUpdatedOn: 'desc',
|
|
1136
|
+
objectType: 'Term',
|
|
1137
|
+
},
|
|
1138
|
+
facets: [],
|
|
1139
|
+
},
|
|
1140
|
+
};
|
|
1141
|
+
this.userProfileService.searchIgotDesignation(igotDesignationBody).subscribe({
|
|
1142
|
+
next: (res) => {
|
|
1143
|
+
const count = _.get(res, 'result.count', 0);
|
|
1144
|
+
this.selectedOrgHasDesignations = count > 0;
|
|
1145
|
+
this.getdesignationsMeta();
|
|
1146
|
+
},
|
|
1147
|
+
error: () => {
|
|
1148
|
+
this.selectedOrgHasDesignations = false;
|
|
1149
|
+
this.getdesignationsMeta();
|
|
1150
|
+
}
|
|
1151
|
+
});
|
|
1152
|
+
}
|
|
1153
|
+
else {
|
|
1154
|
+
this.selectedOrgHasDesignations = false;
|
|
1155
|
+
this.getdesignationsMeta();
|
|
1156
|
+
}
|
|
1157
|
+
}
|
|
1158
|
+
getdesignationsMeta() {
|
|
1159
|
+
this.isLoadingMoreDesignations = true;
|
|
1160
|
+
if (this.selectedOrgHasDesignations) {
|
|
1161
|
+
this.getIgotDesignations();
|
|
1162
|
+
}
|
|
1163
|
+
else {
|
|
1164
|
+
this.getDefaultDesignations();
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
getIgotDesignations() {
|
|
1168
|
+
const requestBody = {
|
|
1169
|
+
request: {
|
|
1170
|
+
filters: {
|
|
1171
|
+
status: "Live",
|
|
1172
|
+
category: "designation",
|
|
1173
|
+
categories: [
|
|
1174
|
+
this.organisationId + '_odcs_designation',
|
|
1175
|
+
],
|
|
1176
|
+
objectType: "Term"
|
|
1177
|
+
},
|
|
1178
|
+
fields: [
|
|
1179
|
+
"name"
|
|
1180
|
+
],
|
|
1181
|
+
offset: this.designationsOffset,
|
|
1182
|
+
limit: this.designationListLoadCount,
|
|
1183
|
+
sort_by: {
|
|
1184
|
+
lastUpdatedOn: "desc",
|
|
1185
|
+
objectType: "Term"
|
|
1186
|
+
},
|
|
1187
|
+
facets: []
|
|
1188
|
+
}
|
|
1189
|
+
};
|
|
1190
|
+
if (this.designationSearchText) {
|
|
1191
|
+
requestBody['request']['query'] = this.designationSearchText;
|
|
1192
|
+
}
|
|
1193
|
+
this.userProfileService.searchIgotDesignation(requestBody).subscribe({
|
|
1194
|
+
next: (res) => {
|
|
1195
|
+
this.isLoadingMoreDesignations = false;
|
|
1196
|
+
if (this.designationsOffset === 0) {
|
|
1197
|
+
this.designationsMeta = _.get(res, 'result.Term', []);
|
|
1198
|
+
}
|
|
1199
|
+
else {
|
|
1200
|
+
this.designationsMeta = [...this.designationsMeta, ..._.get(res, 'result.Term', [])];
|
|
1201
|
+
}
|
|
1202
|
+
this.designationsTotalCount = _.get(res, 'result.count', 0);
|
|
1203
|
+
this.checkCurrentDesignationPresent();
|
|
1204
|
+
},
|
|
1205
|
+
error: () => {
|
|
1206
|
+
this.isLoadingMoreDesignations = false;
|
|
1207
|
+
this.openSnackbar('Something went wrong. Please refresh or try again later.');
|
|
1208
|
+
}
|
|
1209
|
+
});
|
|
1210
|
+
}
|
|
1211
|
+
getDefaultDesignations() {
|
|
1212
|
+
const requestBody = {
|
|
1213
|
+
filterCriteriaMap: {
|
|
1214
|
+
status: 'Active'
|
|
1215
|
+
},
|
|
1216
|
+
requestedFields: [],
|
|
1217
|
+
pageNumber: this.designationsOffset,
|
|
1218
|
+
pageSize: this.designationListLoadCount
|
|
1219
|
+
};
|
|
1220
|
+
if (this.designationSearchText) {
|
|
1221
|
+
requestBody['searchString'] = this.designationSearchText;
|
|
1222
|
+
}
|
|
1223
|
+
this.userProfileService.searchDesignation(requestBody).subscribe({
|
|
1224
|
+
next: (res) => {
|
|
1225
|
+
this.isLoadingMoreDesignations = false;
|
|
1226
|
+
const content = _.get(res, 'result.result.data', []);
|
|
1227
|
+
const mapped = content.map((item) => ({
|
|
1228
|
+
name: item.designation || '',
|
|
1229
|
+
status: item.status || 'Active',
|
|
1230
|
+
}));
|
|
1231
|
+
if (this.designationsOffset === 0) {
|
|
1232
|
+
this.designationsMeta = mapped;
|
|
1233
|
+
}
|
|
1234
|
+
else {
|
|
1235
|
+
this.designationsMeta = [...this.designationsMeta, ...mapped];
|
|
1236
|
+
}
|
|
1237
|
+
this.designationsTotalCount = _.get(res, 'result.result.totalCount', 0);
|
|
1238
|
+
this.checkCurrentDesignationPresent();
|
|
1239
|
+
},
|
|
1240
|
+
error: () => {
|
|
1241
|
+
this.isLoadingMoreDesignations = false;
|
|
1242
|
+
this.openSnackbar('Something went wrong. Please refresh or try again later.');
|
|
1243
|
+
}
|
|
1244
|
+
});
|
|
1245
|
+
}
|
|
1246
|
+
getMasterLanguage() {
|
|
1247
|
+
this.userProfileService.getMasterLanguages()
|
|
1248
|
+
.pipe(takeUntil(this.destroySubject$))
|
|
1249
|
+
.subscribe((res) => {
|
|
1250
|
+
this.masterLanguages = res.languages;
|
|
1251
|
+
this.masterLanguageBackup = res.languages;
|
|
1252
|
+
}, (error) => {
|
|
1253
|
+
if (!error.ok) {
|
|
1254
|
+
this.snackBar.open(this.handleTranslateTo('unableFetchMasterLanguageData'));
|
|
1255
|
+
}
|
|
1256
|
+
});
|
|
1257
|
+
}
|
|
1258
|
+
handleEmpty(type) {
|
|
1259
|
+
if (type === 'mobile') {
|
|
1260
|
+
if (this.userProfileObject.profileDetails.personalDetails.mobile && !this.userDetailsForm.controls['mobile'].value) {
|
|
1261
|
+
this.userDetailsForm.controls['mobile'].setErrors({ valid: false });
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
if (type === 'primaryEmail') {
|
|
1265
|
+
if (!this.userProfileObject.profileDetails.personalDetails.primaryEmail && !this.userProfileObject.profileDetails.value['primaryEmail']) {
|
|
1266
|
+
this.userDetailsForm.setErrors({ valid: false });
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
}
|
|
1270
|
+
onSubmitForm(form) {
|
|
1271
|
+
/* tslint:disable */
|
|
1272
|
+
console.log(form);
|
|
1273
|
+
let payload = this.generateProfilePayload();
|
|
1274
|
+
if ((this.canShowDesignation || this.canShowGroup) && !this.showDoptChanges) {
|
|
1275
|
+
if (this.pendingFileds) {
|
|
1276
|
+
this.pendingFileds.forEach((_obj) => {
|
|
1277
|
+
if (Object.keys(_obj).includes('designation')) {
|
|
1278
|
+
this.addLoader = this.addLoader + 1;
|
|
1279
|
+
this.profileV2Svc.withDrawApprovalRequest(this.configSrc.unMappedUser.id, _obj.wfId).subscribe((resp) => {
|
|
1280
|
+
if (resp && resp.result) {
|
|
1281
|
+
this.addLoader = this.addLoader - 1;
|
|
1282
|
+
/* tslint:disable */
|
|
1283
|
+
console.log(resp.result.message);
|
|
1284
|
+
}
|
|
1285
|
+
}, (error) => {
|
|
1286
|
+
if (error) {
|
|
1287
|
+
this.addLoader = this.addLoader - 1;
|
|
1288
|
+
}
|
|
1289
|
+
});
|
|
1290
|
+
}
|
|
1291
|
+
if (Object.keys(_obj).includes('group')) {
|
|
1292
|
+
this.addLoader = this.addLoader + 1;
|
|
1293
|
+
this.profileV2Svc.withDrawApprovalRequest(this.configSrc.unMappedUser.id, _obj.wfId).subscribe((resp) => {
|
|
1294
|
+
if (resp && resp.result) {
|
|
1295
|
+
this.addLoader = this.addLoader - 1;
|
|
1296
|
+
/* tslint:disable */
|
|
1297
|
+
console.log(resp.result.message);
|
|
1298
|
+
}
|
|
1299
|
+
}, (error) => {
|
|
1300
|
+
if (error) {
|
|
1301
|
+
this.addLoader = this.addLoader - 1;
|
|
1302
|
+
}
|
|
1303
|
+
});
|
|
1304
|
+
}
|
|
1305
|
+
});
|
|
1306
|
+
if (this.userProfileObject.profileDetails.personalDetails.primaryEmail !== this.userDetailsForm.value.primaryEmail && this.canShowEmail) {
|
|
1307
|
+
this.updateEmail(this.userDetailsForm.value.primaryEmail);
|
|
1308
|
+
}
|
|
1309
|
+
this.submitProfile(payload);
|
|
1310
|
+
}
|
|
1311
|
+
}
|
|
1312
|
+
else {
|
|
1313
|
+
if (this.userProfileObject.profileDetails.personalDetails.primaryEmail !== this.userDetailsForm.value.primaryEmail && this.canShowEmail) {
|
|
1314
|
+
this.updateEmail(this.userDetailsForm.value.primaryEmail);
|
|
1315
|
+
}
|
|
1316
|
+
this.submitProfile(payload);
|
|
1317
|
+
}
|
|
1318
|
+
}
|
|
1319
|
+
submitProfile(payload) {
|
|
1320
|
+
if (payload && payload['request'] && payload['request']['profileDetails'] && payload['request']['profileDetails']['personalDetails'] && payload['request']['profileDetails']['personalDetails']['dob']) {
|
|
1321
|
+
let dobFormat = payload['request']['profileDetails']['personalDetails']['dob'];
|
|
1322
|
+
let dob = `${new Date(dobFormat).getDate()}-${new Date(dobFormat).getMonth() + 1}-${new Date(dobFormat).getFullYear()}`;
|
|
1323
|
+
payload['request']['profileDetails']['personalDetails']['dob'] = dob;
|
|
1324
|
+
}
|
|
1325
|
+
if (this.updateProfile) {
|
|
1326
|
+
this.addLoader = this.addLoader + 1;
|
|
1327
|
+
this.userProfileService.editProfileDetails(payload).subscribe((res) => {
|
|
1328
|
+
this.addLoader = this.addLoader - 1;
|
|
1329
|
+
if (res.responseCode === 'OK') {
|
|
1330
|
+
this.submitSurevy(true);
|
|
1331
|
+
}
|
|
1332
|
+
}, error => {
|
|
1333
|
+
this.addLoader = this.addLoader - 1;
|
|
1334
|
+
/* tslint:disable */
|
|
1335
|
+
console.log(error);
|
|
1336
|
+
this.snackBar.open("something went wrong!");
|
|
1337
|
+
});
|
|
1338
|
+
}
|
|
1339
|
+
}
|
|
1340
|
+
submitSurevy(status) {
|
|
1341
|
+
let surevyPayload = {
|
|
1342
|
+
formId: _.get(this.data, 'batchData.batchAttributes.profileSurveyId'),
|
|
1343
|
+
version: 4,
|
|
1344
|
+
status: 'SUBMITTED',
|
|
1345
|
+
responses: this.genereateSurveyPayload(status),
|
|
1346
|
+
contextId: _.get(this.data, 'batchData.courseId'),
|
|
1347
|
+
contextName: _.get(this.data, 'courseName', ''),
|
|
1348
|
+
};
|
|
1349
|
+
this.addLoader = this.addLoader + 1;
|
|
1350
|
+
this.npsSvc.submitBpFormWithProfileDetails(surevyPayload).subscribe((resp) => {
|
|
1351
|
+
this.addLoader = this.addLoader - 1;
|
|
1352
|
+
if (_.get(resp, 'params.status') === 'success') {
|
|
1353
|
+
this.customForm = false;
|
|
1354
|
+
this.snackBar.open("Form is submitted successfully");
|
|
1355
|
+
this.closePopup();
|
|
1356
|
+
}
|
|
1357
|
+
if (resp && resp.statusCode && resp.statusCode !== 200) {
|
|
1358
|
+
this.customForm = false;
|
|
1359
|
+
this.snackBar.open(resp.errorMessage);
|
|
1360
|
+
}
|
|
1361
|
+
}, error => {
|
|
1362
|
+
this.addLoader = this.addLoader - 1;
|
|
1363
|
+
/* tslint:disable */
|
|
1364
|
+
console.log(error);
|
|
1365
|
+
this.snackBar.open("something went wrong!");
|
|
1366
|
+
});
|
|
1367
|
+
}
|
|
1368
|
+
generateProfilePayload() {
|
|
1369
|
+
let payload = {
|
|
1370
|
+
request: {
|
|
1371
|
+
userId: this.userProfileObject.identifier,
|
|
1372
|
+
profileDetails: {
|
|
1373
|
+
employmentDetails: {},
|
|
1374
|
+
personalDetails: {},
|
|
1375
|
+
// cadreDetails: {},
|
|
1376
|
+
}
|
|
1377
|
+
}
|
|
1378
|
+
};
|
|
1379
|
+
let _professionalDetails = {};
|
|
1380
|
+
let updateProfessionalDetails = false;
|
|
1381
|
+
if (this.showGroup && this.userDetailsForm.controls['group'].value && !this.showDoptChanges) {
|
|
1382
|
+
_professionalDetails['group'] = this.userDetailsForm.controls['group'].value;
|
|
1383
|
+
this.updateProfile = true;
|
|
1384
|
+
updateProfessionalDetails = true;
|
|
1385
|
+
}
|
|
1386
|
+
if (this.showDesignation && this.userDetailsForm.controls['designation'].value && !this.showDoptChanges) {
|
|
1387
|
+
_professionalDetails['designation'] = this.userDetailsForm.controls['designation'].value;
|
|
1388
|
+
this.updateProfile = true;
|
|
1389
|
+
updateProfessionalDetails = true;
|
|
1390
|
+
}
|
|
1391
|
+
if (updateProfessionalDetails) {
|
|
1392
|
+
payload.request.profileDetails['professionalDetails'] = [_professionalDetails];
|
|
1393
|
+
}
|
|
1394
|
+
if (this.userDetailsForm.controls['employeeCode'].value) {
|
|
1395
|
+
payload.request.profileDetails.employmentDetails['employeeCode'] = this.userDetailsForm.controls['employeeCode'].value;
|
|
1396
|
+
this.updateProfile = true;
|
|
1397
|
+
}
|
|
1398
|
+
if (this.userDetailsForm.controls['mobile'].value) {
|
|
1399
|
+
payload.request.profileDetails.personalDetails['mobile'] = this.userDetailsForm.controls['mobile'].value;
|
|
1400
|
+
payload.request.profileDetails.personalDetails['phoneVerified'] = true;
|
|
1401
|
+
this.updateProfile = true;
|
|
1402
|
+
}
|
|
1403
|
+
if (this.userDetailsForm.controls['gender'].value) {
|
|
1404
|
+
payload.request.profileDetails.personalDetails['gender'] = this.userDetailsForm.controls['gender'].value;
|
|
1405
|
+
this.updateProfile = true;
|
|
1406
|
+
}
|
|
1407
|
+
if (this.userDetailsForm.controls['dob'].value) {
|
|
1408
|
+
payload.request.profileDetails.personalDetails['dob'] = this.userDetailsForm.controls['dob'].value;
|
|
1409
|
+
this.updateProfile = true;
|
|
1410
|
+
}
|
|
1411
|
+
if (this.userDetailsForm.controls['domicileMedium'].value) {
|
|
1412
|
+
payload.request.profileDetails.personalDetails['domicileMedium'] = this.userDetailsForm.controls['domicileMedium'].value;
|
|
1413
|
+
this.updateProfile = true;
|
|
1414
|
+
}
|
|
1415
|
+
if (this.userDetailsForm.controls['category'].value) {
|
|
1416
|
+
payload.request.profileDetails.personalDetails['category'] = this.userDetailsForm.controls['category'].value;
|
|
1417
|
+
this.updateProfile = true;
|
|
1418
|
+
}
|
|
1419
|
+
if (this.userDetailsForm.controls['pinCode'].value) {
|
|
1420
|
+
payload.request.profileDetails.employmentDetails['pinCode'] = this.userDetailsForm.controls['pinCode'].value;
|
|
1421
|
+
payload.request.profileDetails.personalDetails['pincode'] = this.userDetailsForm.controls['pinCode'].value;
|
|
1422
|
+
this.updateProfile = true;
|
|
1423
|
+
}
|
|
1424
|
+
if (this.canShowshowCadreDetails && !this.showDoptChanges) {
|
|
1425
|
+
let _cadreDetails = {};
|
|
1426
|
+
payload.request.profileDetails.personalDetails['isCadre'] = this.userDetailsForm.controls['isCadre'].value;
|
|
1427
|
+
this.updateProfile = true;
|
|
1428
|
+
if (this.userDetailsForm.controls['isCadre'].value) {
|
|
1429
|
+
_cadreDetails['civilServiceType'] = this.userDetailsForm.controls['typeOfCivilService'].value;
|
|
1430
|
+
_cadreDetails['civilServiceName'] = this.userDetailsForm.controls['serviceType'].value;
|
|
1431
|
+
_cadreDetails['cadreName'] = this.userDetailsForm.controls['cadreName'].value;
|
|
1432
|
+
_cadreDetails['cadreBatch'] = this.userDetailsForm.controls['cadreBatch'].value;
|
|
1433
|
+
_cadreDetails['cadreControllingAuthorityName'] = this.cadreControllingAuthority;
|
|
1434
|
+
_cadreDetails['cadreId'] = this.cadreId;
|
|
1435
|
+
_cadreDetails['civilServiceId'] = this.civilServiceId;
|
|
1436
|
+
_cadreDetails['civilServiceTypeId'] = this.serviceId;
|
|
1437
|
+
payload.request.profileDetails['cadreDetails'] = _cadreDetails;
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1440
|
+
return payload;
|
|
1441
|
+
}
|
|
1442
|
+
formatDate(_dob) {
|
|
1443
|
+
let dateObj = null;
|
|
1444
|
+
if (_dob instanceof Date) {
|
|
1445
|
+
dateObj = _dob;
|
|
1446
|
+
}
|
|
1447
|
+
else if (typeof _dob === 'string') {
|
|
1448
|
+
const parts = _dob.split('-');
|
|
1449
|
+
if (parts.length === 3) {
|
|
1450
|
+
const [day, month, year] = parts;
|
|
1451
|
+
dateObj = new Date(Number(year), Number(month) - 1, Number(day));
|
|
1452
|
+
}
|
|
1453
|
+
else {
|
|
1454
|
+
const parsed = new Date(_dob);
|
|
1455
|
+
if (!isNaN(parsed.getTime())) {
|
|
1456
|
+
dateObj = parsed;
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
}
|
|
1460
|
+
if (!dateObj || isNaN(dateObj.getTime())) {
|
|
1461
|
+
return '';
|
|
1462
|
+
}
|
|
1463
|
+
return this.datePipe.transform(dateObj, 'yyyy-MM-dd') || '';
|
|
1464
|
+
}
|
|
1465
|
+
getQuestionId(fieldName) {
|
|
1466
|
+
if (!fieldName || !this.formsDetils.fields) {
|
|
1467
|
+
return '';
|
|
1468
|
+
}
|
|
1469
|
+
const field = this.formsDetils.fields.find((f) => f.field === fieldName) || {};
|
|
1470
|
+
return field.id || '';
|
|
1471
|
+
}
|
|
1472
|
+
genereateSurveyPayload(status) {
|
|
1473
|
+
let dataObject = [];
|
|
1474
|
+
this.batchDetails.batchAttributes.bpEnrolMandatoryProfileFields.forEach((_field) => {
|
|
1475
|
+
const fieldToAdd = {
|
|
1476
|
+
questionId: this.getQuestionId(_field.field),
|
|
1477
|
+
question: _field.displayName,
|
|
1478
|
+
answer: '',
|
|
1479
|
+
answerType: _field.fieldType
|
|
1480
|
+
};
|
|
1481
|
+
if (_field.field === 'profileDetails.personalDetails.firstname') {
|
|
1482
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.personalDetails.firstName', _.get(this.userProfileObject, 'profileDetails.personalDetails.firstname', ''));
|
|
1483
|
+
dataObject.push(fieldToAdd);
|
|
1484
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.personalDetails.firstName || this.userProfileObject.profileDetails.personalDetails.firstname
|
|
1485
|
+
}
|
|
1486
|
+
if (_field.field === 'profileDetails.employmentDetails.departmentName') {
|
|
1487
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.employmentDetails.departmentName', 'N/A');
|
|
1488
|
+
dataObject.push(fieldToAdd);
|
|
1489
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.employmentDetails && this.userProfileObject.profileDetails.employmentDetails.departmentName ?
|
|
1490
|
+
// this.userProfileObject.profileDetails.employmentDetails.departmentName : "N/A"
|
|
1491
|
+
}
|
|
1492
|
+
if (_field.field === 'profileDetails.professionalDetails.group') {
|
|
1493
|
+
if (this.showGroup && status) {
|
|
1494
|
+
fieldToAdd.answer = this.userDetailsForm.controls['group'].value;
|
|
1495
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['group'].value
|
|
1496
|
+
}
|
|
1497
|
+
else {
|
|
1498
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.professionalDetails[0].group', 'N/A');
|
|
1499
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.professionalDetails && this.userProfileObject.profileDetails.professionalDetails[0].group ?
|
|
1500
|
+
// this.userProfileObject.profileDetails.professionalDetails[0].group : "N/A"
|
|
1501
|
+
}
|
|
1502
|
+
dataObject.push(fieldToAdd);
|
|
1503
|
+
}
|
|
1504
|
+
if (_field.field === 'profileDetails.professionalDetails.designation') {
|
|
1505
|
+
if (this.showDesignation && status) {
|
|
1506
|
+
if (this.showDoptChanges && this.userDetailsForm.controls['designation'] &&
|
|
1507
|
+
this.userDetailsForm.controls['designation'].value === 'Others' && this.userDetailsForm.controls['otherDesignation']) {
|
|
1508
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['otherDesignation'].value
|
|
1509
|
+
fieldToAdd.answer = this.userDetailsForm.controls['otherDesignation'].value;
|
|
1510
|
+
}
|
|
1511
|
+
else {
|
|
1512
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['designation'].value
|
|
1513
|
+
fieldToAdd.answer = this.userDetailsForm.controls['designation'].value;
|
|
1514
|
+
}
|
|
1515
|
+
dataObject.push(fieldToAdd);
|
|
1516
|
+
}
|
|
1517
|
+
else {
|
|
1518
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.professionalDetails && this.userProfileObject.profileDetails.professionalDetails[0].designation ?
|
|
1519
|
+
// this.userProfileObject.profileDetails.professionalDetails[0].designation : "N/A"
|
|
1520
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.professionalDetails[0].designation', 'N/A');
|
|
1521
|
+
dataObject.push(fieldToAdd);
|
|
1522
|
+
}
|
|
1523
|
+
}
|
|
1524
|
+
if (_field.field === 'profileDetails.employmentDetails.employeeCode') {
|
|
1525
|
+
if (this.showEmployeeCode && status) {
|
|
1526
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['employeeCode'].value
|
|
1527
|
+
fieldToAdd.answer = this.userDetailsForm.controls['employeeCode'].value;
|
|
1528
|
+
}
|
|
1529
|
+
else {
|
|
1530
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.employmentDetails.employeeCode', 'N/A');
|
|
1531
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.employmentDetails && this.userProfileObject.profileDetails.employmentDetails.employeeCode ?
|
|
1532
|
+
// this.userProfileObject.profileDetails.employmentDetails.employeeCode : "N/A"
|
|
1533
|
+
}
|
|
1534
|
+
dataObject.push(fieldToAdd);
|
|
1535
|
+
}
|
|
1536
|
+
if (_field.field === 'profileDetails.personalDetails.primaryEmail') {
|
|
1537
|
+
fieldToAdd.answer = this.userProfileObject.profileDetails.personalDetails.primaryEmail;
|
|
1538
|
+
dataObject.push(fieldToAdd);
|
|
1539
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.personalDetails.primaryEmail
|
|
1540
|
+
}
|
|
1541
|
+
if (_field.field === 'profileDetails.personalDetails.mobile') {
|
|
1542
|
+
if (this.showMobile && status) {
|
|
1543
|
+
fieldToAdd.answer = this.userDetailsForm.controls['mobile'].value;
|
|
1544
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['mobile'].value
|
|
1545
|
+
}
|
|
1546
|
+
else {
|
|
1547
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.personalDetails.mobile', 'N/A');
|
|
1548
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.personalDetails && this.userProfileObject.profileDetails.personalDetails.mobile ?
|
|
1549
|
+
// this.userProfileObject.profileDetails.personalDetails.mobile : "N/A"
|
|
1550
|
+
}
|
|
1551
|
+
dataObject.push(fieldToAdd);
|
|
1552
|
+
}
|
|
1553
|
+
if (_field.field === 'profileDetails.personalDetails.dob') {
|
|
1554
|
+
if (this.showDob && status) {
|
|
1555
|
+
let _dob = this.userDetailsForm.controls['dob'].value;
|
|
1556
|
+
// dataObject[_field.name] = this.formatDate(_dob)
|
|
1557
|
+
fieldToAdd.answer = this.formatDate(_dob);
|
|
1558
|
+
dataObject.push(fieldToAdd);
|
|
1559
|
+
}
|
|
1560
|
+
else {
|
|
1561
|
+
if (this.userProfileObject.profileDetails.personalDetails && this.userProfileObject.profileDetails.personalDetails.dob) {
|
|
1562
|
+
let _dob = this.userProfileObject.profileDetails.personalDetails.dob;
|
|
1563
|
+
const [day, month, year] = _dob.split('-');
|
|
1564
|
+
const date = new Date(Number(year), Number(month) - 1, Number(day));
|
|
1565
|
+
const formattedDay = String(date.getDate()).padStart(2, '0');
|
|
1566
|
+
const formattedMonth = String(date.getMonth() + 1).padStart(2, '0');
|
|
1567
|
+
const formattedYear = date.getFullYear();
|
|
1568
|
+
// dataObject[_field.name] = `${formattedYear}-${formattedMonth}-${formattedDay}`
|
|
1569
|
+
fieldToAdd.answer = `${formattedYear}-${formattedMonth}-${formattedDay}`;
|
|
1570
|
+
}
|
|
1571
|
+
else {
|
|
1572
|
+
// dataObject[_field.name] = "1950-06-01"
|
|
1573
|
+
fieldToAdd.answer = "1950-06-01";
|
|
1574
|
+
}
|
|
1575
|
+
dataObject.push(fieldToAdd);
|
|
1576
|
+
}
|
|
1577
|
+
}
|
|
1578
|
+
if (_field.field === 'profileDetails.personalDetails.gender') {
|
|
1579
|
+
if (this.showGender && status) {
|
|
1580
|
+
fieldToAdd.answer = this.userDetailsForm.controls['gender'].value;
|
|
1581
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['gender'].value
|
|
1582
|
+
}
|
|
1583
|
+
else {
|
|
1584
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.personalDetails.gender', 'N/A');
|
|
1585
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.personalDetails && this.userProfileObject.profileDetails.personalDetails.gender ?
|
|
1586
|
+
// this.userProfileObject.profileDetails.personalDetails.gender : "N/A"
|
|
1587
|
+
}
|
|
1588
|
+
dataObject.push(fieldToAdd);
|
|
1589
|
+
}
|
|
1590
|
+
if (_field.field === 'profileDetails.personalDetails.domicileMedium') {
|
|
1591
|
+
if (this.showDecimalMedium && status) {
|
|
1592
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['domicileMedium'].value
|
|
1593
|
+
fieldToAdd.answer = this.userDetailsForm.controls['domicileMedium'].value;
|
|
1594
|
+
}
|
|
1595
|
+
else {
|
|
1596
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.personalDetails.domicileMedium', 'N/A');
|
|
1597
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.personalDetails && this.userProfileObject.profileDetails.personalDetails.domicileMedium ?
|
|
1598
|
+
// this.userProfileObject.profileDetails.personalDetails.domicileMedium : "N/A"
|
|
1599
|
+
}
|
|
1600
|
+
dataObject.push(fieldToAdd);
|
|
1601
|
+
}
|
|
1602
|
+
if (_field.field === 'profileDetails.personalDetails.category') {
|
|
1603
|
+
if (this.showCategory && status) {
|
|
1604
|
+
fieldToAdd.answer = this.userDetailsForm.controls['category'].value;
|
|
1605
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['category'].value
|
|
1606
|
+
}
|
|
1607
|
+
else {
|
|
1608
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.personalDetails.category', 'N/A');
|
|
1609
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.personalDetails && this.userProfileObject.profileDetails.personalDetails.category ?
|
|
1610
|
+
// this.userProfileObject.profileDetails.personalDetails.category : "N/A"
|
|
1611
|
+
}
|
|
1612
|
+
dataObject.push(fieldToAdd);
|
|
1613
|
+
}
|
|
1614
|
+
if (_field.field === 'profileDetails.employmentDetails.pinCode') {
|
|
1615
|
+
if (this.showPinCode && status) {
|
|
1616
|
+
fieldToAdd.answer = this.userDetailsForm.controls['pinCode'].value;
|
|
1617
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['pinCode'].value
|
|
1618
|
+
}
|
|
1619
|
+
else {
|
|
1620
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.employmentDetails.pinCode', 'N/A');
|
|
1621
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.employmentDetails && this.userProfileObject.profileDetails.employmentDetails.pinCode ?
|
|
1622
|
+
// this.userProfileObject.profileDetails.employmentDetails.pinCode : "N/A"
|
|
1623
|
+
}
|
|
1624
|
+
dataObject.push(fieldToAdd);
|
|
1625
|
+
}
|
|
1626
|
+
if (_field.field === 'profileDetails.cadreDetails') {
|
|
1627
|
+
if (this.canShowshowCadreDetails && this.userDetailsForm.controls['isCadre'].value && status) {
|
|
1628
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['isCadre'].value
|
|
1629
|
+
fieldToAdd.answer = this.userDetailsForm.controls['isCadre'].value;
|
|
1630
|
+
}
|
|
1631
|
+
else {
|
|
1632
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails &&
|
|
1633
|
+
// this.userProfileObject.profileDetails.personalDetails.isCadre ? 'Yes' : 'No'
|
|
1634
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.personalDetails.isCadre') ? 'Yes' : 'No';
|
|
1635
|
+
}
|
|
1636
|
+
dataObject.push(fieldToAdd);
|
|
1637
|
+
}
|
|
1638
|
+
if (_field.field === 'profileDetails.cadreDetails.civilServiceType') {
|
|
1639
|
+
if (this.canShowshowCadreDetails && this.userDetailsForm.controls['isCadre'].value && status) {
|
|
1640
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['typeOfCivilService'].value
|
|
1641
|
+
fieldToAdd.answer = this.userDetailsForm.controls['typeOfCivilService'].value;
|
|
1642
|
+
}
|
|
1643
|
+
else {
|
|
1644
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.cadreDetails && this.userProfileObject.profileDetails.cadreDetails.civilServiceType ?
|
|
1645
|
+
// this.userProfileObject.profileDetails.cadreDetails.civilServiceType : 'N/A'
|
|
1646
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.cadreDetails.civilServiceType', 'N/A');
|
|
1647
|
+
}
|
|
1648
|
+
dataObject.push(fieldToAdd);
|
|
1649
|
+
}
|
|
1650
|
+
if (_field.field === 'profileDetails.cadreDetails.civilServiceName') {
|
|
1651
|
+
if (this.canShowshowCadreDetails && this.userDetailsForm.controls['isCadre'].value && status) {
|
|
1652
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['serviceType'].value
|
|
1653
|
+
fieldToAdd.answer = this.userDetailsForm.controls['serviceType'].value;
|
|
1654
|
+
}
|
|
1655
|
+
else {
|
|
1656
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.cadreDetails && this.userProfileObject.profileDetails.cadreDetails.civilServiceName ?
|
|
1657
|
+
// this.userProfileObject.profileDetails.cadreDetails.civilServiceName : 'N/A'
|
|
1658
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.cadreDetails.civilServiceName', 'N/A');
|
|
1659
|
+
}
|
|
1660
|
+
dataObject.push(fieldToAdd);
|
|
1661
|
+
}
|
|
1662
|
+
if (_field.field === 'profileDetails.cadreDetails.cadreName') {
|
|
1663
|
+
if (this.canShowshowCadreDetails && this.userDetailsForm.controls['isCadre'].value && status) {
|
|
1664
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['cadreName'].value
|
|
1665
|
+
fieldToAdd.answer = this.userDetailsForm.controls['cadreName'].value;
|
|
1666
|
+
}
|
|
1667
|
+
else {
|
|
1668
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.cadreDetails.cadreName', 'N/A');
|
|
1669
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.cadreDetails && this.userProfileObject.profileDetails.cadreDetails.cadreName ?
|
|
1670
|
+
// this.userProfileObject.profileDetails.cadreDetails.cadreName : 'N/A'
|
|
1671
|
+
}
|
|
1672
|
+
dataObject.push(fieldToAdd);
|
|
1673
|
+
}
|
|
1674
|
+
if (_field.field === 'profileDetails.cadreDetails.cadreBatch') {
|
|
1675
|
+
if (this.canShowshowCadreDetails && this.userDetailsForm.controls['isCadre'].value && status) {
|
|
1676
|
+
// dataObject[_field.name] = this.userDetailsForm.controls['cadreBatch'].value
|
|
1677
|
+
fieldToAdd.answer = this.userDetailsForm.controls['cadreBatch'].value;
|
|
1678
|
+
}
|
|
1679
|
+
else {
|
|
1680
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.cadreDetails && this.userProfileObject.profileDetails.cadreDetails.cadreBatch ?
|
|
1681
|
+
// JSON.stringify(this.userProfileObject.profileDetails.cadreDetails.cadreBatch) : 'N/A'
|
|
1682
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.cadreDetails.cadreBatch') ? JSON.stringify(this.userProfileObject.profileDetails.cadreDetails.cadreBatch) : 'N/A';
|
|
1683
|
+
}
|
|
1684
|
+
dataObject.push(fieldToAdd);
|
|
1685
|
+
}
|
|
1686
|
+
if (_field.field === 'profileDetails.cadreDetails.cadreControllingAuthorityName') {
|
|
1687
|
+
if (this.canShowshowCadreDetails && this.userDetailsForm.controls['isCadre'].value && status) {
|
|
1688
|
+
// dataObject[_field.name] = this.cadreControllingAuthority
|
|
1689
|
+
fieldToAdd.answer = this.cadreControllingAuthority;
|
|
1690
|
+
}
|
|
1691
|
+
else {
|
|
1692
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.cadreDetails && this.userProfileObject.profileDetails.cadreDetails.cadreControllingAuthorityName ?
|
|
1693
|
+
// this.userProfileObject.profileDetails.cadreDetails.cadreControllingAuthorityName : 'N/A'
|
|
1694
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.cadreDetails.cadreControllingAuthorityName', 'N/A');
|
|
1695
|
+
}
|
|
1696
|
+
dataObject.push(fieldToAdd);
|
|
1697
|
+
}
|
|
1698
|
+
if (_field.field === 'profileDetails.additionalProperties.externalSystemId') {
|
|
1699
|
+
if (this.userProfileObject.profileDetails.additionalProperties &&
|
|
1700
|
+
this.userProfileObject.profileDetails.additionalProperties.externalSystemId) {
|
|
1701
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.additionalProperties && this.userProfileObject.profileDetails.additionalProperties.externalSystemId
|
|
1702
|
+
// ? this.userProfileObject.profileDetails.additionalProperties.externalSystemId : "N/A"
|
|
1703
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.additionalProperties.externalSystemId', 'N/A');
|
|
1704
|
+
}
|
|
1705
|
+
else {
|
|
1706
|
+
dataObject[_field.name] = 'N/A';
|
|
1707
|
+
}
|
|
1708
|
+
dataObject.push(fieldToAdd);
|
|
1709
|
+
}
|
|
1710
|
+
if (_field.field === 'profileDetails.additionalProperties.externalSystemDor') {
|
|
1711
|
+
if (this.userProfileObject.profileDetails.additionalProperties &&
|
|
1712
|
+
this.userProfileObject.profileDetails.additionalProperties.externalSystemDor) {
|
|
1713
|
+
// dataObject[_field.name] = this.userProfileObject.profileDetails.additionalProperties && this.userProfileObject.profileDetails.additionalProperties.externalSystemDor
|
|
1714
|
+
// ? this.userProfileObject.profileDetails.additionalProperties.externalSystemDor : "N/A"
|
|
1715
|
+
fieldToAdd.answer = _.get(this.userProfileObject, 'profileDetails.additionalProperties.externalSystemDor', 'N/A');
|
|
1716
|
+
}
|
|
1717
|
+
else {
|
|
1718
|
+
// dataObject[_field.name] = 'N/A'
|
|
1719
|
+
fieldToAdd.answer = 'N/A';
|
|
1720
|
+
}
|
|
1721
|
+
dataObject.push(fieldToAdd);
|
|
1722
|
+
}
|
|
1723
|
+
});
|
|
1724
|
+
return dataObject;
|
|
1725
|
+
}
|
|
1726
|
+
updateEmail(email) {
|
|
1727
|
+
const postData = {
|
|
1728
|
+
request: {
|
|
1729
|
+
'userId': this.configSrc.unMappedUser.id,
|
|
1730
|
+
'contextToken': this.contextToken,
|
|
1731
|
+
'profileDetails': {
|
|
1732
|
+
'personalDetails': {
|
|
1733
|
+
'primaryEmail': email,
|
|
1734
|
+
},
|
|
1735
|
+
},
|
|
1736
|
+
},
|
|
1737
|
+
};
|
|
1738
|
+
this.addLoader = this.addLoader + 1;
|
|
1739
|
+
this.userProfileService.updatePrimaryEmailDetails(postData)
|
|
1740
|
+
.pipe(takeUntil(this.destroySubject$))
|
|
1741
|
+
.subscribe((_res) => {
|
|
1742
|
+
this.addLoader = this.addLoader - 1;
|
|
1743
|
+
this.userProfileObject.profileDetails.personalDetails.primaryEmail = email;
|
|
1744
|
+
this.snackBar.open(this.handleTranslateTo('emailUpdated'));
|
|
1745
|
+
}, (error) => {
|
|
1746
|
+
this.addLoader = this.addLoader - 1;
|
|
1747
|
+
if (!error.ok) {
|
|
1748
|
+
this.snackBar.open(this.handleTranslateTo('updateEmailFailed'));
|
|
1749
|
+
}
|
|
1750
|
+
});
|
|
1751
|
+
}
|
|
1752
|
+
setupScrollListener(opened) {
|
|
1753
|
+
const searchDesignationControl = this.userDetailsForm.get('searchDesignation');
|
|
1754
|
+
if (opened && searchDesignationControl) {
|
|
1755
|
+
searchDesignationControl.setValue('');
|
|
1756
|
+
this.designationsOffset = 0;
|
|
1757
|
+
this.designationsMeta = [];
|
|
1758
|
+
this.getdesignationsMeta();
|
|
1759
|
+
const searchInput = document.querySelector('.search-input');
|
|
1760
|
+
if (searchInput) {
|
|
1761
|
+
searchInput.focus();
|
|
1762
|
+
}
|
|
1763
|
+
const panel = document.querySelector('.mat-select-panel');
|
|
1764
|
+
if (panel) {
|
|
1765
|
+
panel.addEventListener('scroll', this.onDesignationSelectScroll.bind(this));
|
|
1766
|
+
}
|
|
1767
|
+
}
|
|
1768
|
+
}
|
|
1769
|
+
onDesignationSelectScroll(event) {
|
|
1770
|
+
const element = event.target;
|
|
1771
|
+
// Check if user has scrolled to the bottom (with a small threshold)
|
|
1772
|
+
if (element.scrollTop + element.clientHeight >= element.scrollHeight - 5) {
|
|
1773
|
+
// Only load more if not already loading and if there are potentially more items
|
|
1774
|
+
if (!this.isLoadingMoreDesignations && this.designationsMeta.length < this.designationsTotalCount) {
|
|
1775
|
+
this.isLoadingMoreDesignations = true;
|
|
1776
|
+
this.designationsOffset += 1;
|
|
1777
|
+
this.getdesignationsMeta();
|
|
1778
|
+
}
|
|
1779
|
+
}
|
|
1780
|
+
}
|
|
1781
|
+
checkCurrentDesignationPresent() {
|
|
1782
|
+
// Get the current designation value
|
|
1783
|
+
const searchDesignationControl = this.userDetailsForm.get('designation');
|
|
1784
|
+
const currentDesignation = searchDesignationControl ? searchDesignationControl.value : '';
|
|
1785
|
+
// Check if current designation exists in the list
|
|
1786
|
+
if (currentDesignation) {
|
|
1787
|
+
const designationExists = this.designationsMeta.some((designation) => designation.name.toLowerCase() === currentDesignation.toLowerCase());
|
|
1788
|
+
// If designation doesn't exist in the list, add it
|
|
1789
|
+
if (!designationExists) {
|
|
1790
|
+
// Create a new designation object to match the structure of other items
|
|
1791
|
+
const newDesignation = {
|
|
1792
|
+
name: currentDesignation,
|
|
1793
|
+
status: 'Active'
|
|
1794
|
+
};
|
|
1795
|
+
this.designationsMeta.unshift(newDesignation);
|
|
1796
|
+
}
|
|
1797
|
+
}
|
|
1798
|
+
}
|
|
1799
|
+
onDesignationDropdownClosed() {
|
|
1800
|
+
const searchDesignationControl = this.userDetailsForm.get('searchDesignation');
|
|
1801
|
+
if (searchDesignationControl) {
|
|
1802
|
+
searchDesignationControl.setValue('');
|
|
1803
|
+
this.designationSearchText = '';
|
|
1804
|
+
}
|
|
1805
|
+
this.checkCurrentDesignationPresent();
|
|
1806
|
+
}
|
|
1807
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EnrollProfileFormComponent, deps: [{ token: i1.MatLegacySnackBar }, { token: i2.MatLegacyDialogRef }, { token: i3.UserProfileService }, { token: i4.ConfigurationsService }, { token: i5.ProfileV2Service }, { token: i6.OtpService }, { token: i7.NPSGridService }, { token: i8.TranslateService }, { token: i9.DatePipe }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1808
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EnrollProfileFormComponent, selector: "ws-app-enroll-profile-form", host: { listeners: { "document:click": "handleClickOutside($event)" } }, viewQueries: [{ propertyName: "timerDiv", first: true, predicate: ["timerDiv"], descendants: true }, { propertyName: "emailTimerDiv", first: true, predicate: ["emailTimerDiv"], descendants: true }, { propertyName: "textBox", first: true, predicate: ["textBox"], descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }, { propertyName: "languageTextBox", first: true, predicate: ["languageTextBox"], descendants: true }, { propertyName: "languageDropdown", first: true, predicate: ["languageDropdown"], descendants: true }], ngImport: i0, template: "<div #fullScreenContainer>\n <div class=\"dialog-header text-right mb-2\">\n <mat-icon class=\"mat-icon notranslate material-icons close-icon cursor-pointer\" matprefix=\"\" role=\"img\" aria-hidden=\"true\" [mat-dialog-close]=\"false\">close</mat-icon>\n </div>\n <h1> {{data?.courseName}} </h1>\n <div class=\"w-full\" *ngIf=\"!isLoading\">\n <form [formGroup]=\"userDetailsForm\" class=\"userDetailsForm\">\n <div class=\"w-full\" *ngIf=\"canShowName\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.name' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input type=\"text\" class=\"input-text\" matInput formControlName=\"name\" placeholder=\"Name\"/>\n </mat-form-field>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowOrg\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ (showDoptChanges ? 'profileInfo.presentOrganisation' : 'profileInfo.organisation') | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input type=\"text\" class=\"input-text\" matInput formControlName=\"organisation\" placeholder=\"Organisation\"/>\n </mat-form-field>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowEmail\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.email' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input type=\"text\" class=\"input-text\" matInput formControlName=\"primaryEmail\" placeholder=\"Enter email\" (keyup)=\"handleEmpty('primaryEmail')\"/>\n </mat-form-field>\n <mat-error class=\"mat-error\" *ngIf=\"userDetailsForm.get('primaryEmail').hasError('required') || userDetailsForm.get('primaryEmail').hasError('pattern')\">\n {{ 'profileInfo.invalidEmail' | translate }}\n </mat-error>\n <div class=\"flex justify-end\" *ngIf=\"verifyEmail && !otpSent && !eVerified\">\n <span class=\"get-otp\" (click)=\"handleGenerateEmailOTP('email')\">{{ 'profileInfo.getOTP' | translate\n }}</span>\n </div>\n <div *ngIf=\"emailOtpSent\">\n <form [formGroup]=\"emailOtpForm\">\n <div class=\"w-full\">\n <div class=\"flex enter-otp\">\n <div class=\"font-semibold required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.enterOTP' | translate }}\n </div>\n <div class=\"mb-3\">Time Remaining: <span #emailTimerDiv></span></div>\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field mobile-num\">\n <input type=\"text\" matInput formControlName=\"eOtp\" class=\"input-text custom-size\" placeholder=\"{{ 'profileInfo.enterTheOTP' | translate }}\" maxlength=\"6\" />\n </mat-form-field>\n </div>\n <div class=\"w-full\">\n <div class=\"flex justify-center\" *ngIf=\"showEmailResendOTP\">\n <div class=\"flex flex-row\">\n <div class=\"timer\">{{ 'profileInfo.didNotReceiveOTP' | translate }}</div>\n <div class=\"resend-otp\" (click)=\"handleResendEmailOTP()\"> {{ 'profileInfo.resentOTP' | translate }}</div>\n </div>\n </div>\n </div>\n <div class=\"w-full mb-4\">\n <div class=\"flex flex-row justify-between\">\n <button class=\"save-button\" (click)=\"verifyEmailOTP()\">{{ 'profileInfo.submit' | translate }}</button>\n </div>\n </div>\n </form>\n </div>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowGroup\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.group' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-select formControlName=\"group\" placeholder=\"{{ 'profileInfo.chooseAGroup' | translate }}\">\n <mat-option *ngFor=\"let group of groupData\" value=\"{{group}}\">{{ group }}</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"text-xs mb-2\" *ngIf=\"showDoptChanges\">\n {{'profileInfo.groupNote' | translate}}\n </div>\n </div>\n <div class=\"w-full relative\" *ngIf=\"canShowDesignation\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.designation' | translate }}\n </div>\n <!-- <mat-form-field appearance=\"outline\" class=\"w-full\">\n <div class=\"flex flex-row auto-complete-row relative\">\n <input type=\"text\" class=\"input-text high-zindex\" matInput formControlName=\"designation\"\n (input)=\"filterdesignation($event.target.value)\" (focus)=\"onDesignationsFocus()\" #textBox\n placeholder=\"{{ 'profileInfo.chooseADesignation' | translate }}\">\n <mat-icon class=\"disagnation-caret\">arrow_drop_down</mat-icon>\n </div>\n </mat-form-field> -->\n <div class=\"custom-select-container\">\n <mat-form-field appearance=\"outline\" class=\"fixed-height-select\">\n <mat-select placeholder=\"{{ 'profileInfo.chooseADesignation' | translate }}\" formControlName=\"designation\" (closed)=\"onDesignationDropdownClosed()\" (openedChange)=\"setupScrollListener($event)\" panelClass=\"search-panel\">\n <!-- Sticky search input container -->\n <div class=\"sticky-search-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"search-input-wrapper\">\n <input \n type=\"text\" \n placeholder=\"Search designation\" \n formControlName=\"searchDesignation\" \n class=\"search-input\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n autocomplete=\"off\">\n <button \n *ngIf=\"searchDesignation?.value\" \n type=\"button\" \n class=\"clear-button\" \n (click)=\"searchDesignation?.setValue('')\">\n \u2715\n </button>\n </div>\n </div>\n <!-- Options list -->\n <mat-option *ngFor=\"let option of designationsMeta \" [value]=\"option?.name\" (click)=\"selectDesignation(option?.name)\">\n {{ option?.name }}\n </mat-option>\n <!-- Loading indicator -->\n <div *ngIf=\"isLoadingMoreDesignations\" class=\"loading-indicator\">\n Loading more...\n </div>\n <!-- No results message -->\n <mat-option *ngIf=\"(designationsMeta )?.length === 0\" disabled>\n No matches found\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"userDetailsForm?.controls['designation']?.invalid && userDetailsForm?.controls['designation']?.touched\"\n class=\"mat-error\">\n Please select a valid designation.\n </mat-error>\n <div class=\"text-xs mb-2\" *ngIf=\"showDoptChanges\">\n {{'profileInfo.designationNote' | translate}}\n </div>\n <!-- <div class=\"auto-list flex flex-col ignore-blur\" #dropdown\n *ngIf=\"openDesignationDropdown && filterDesignationsMeta.length\">\n <div (mousedown)=\"preventBlur($event)\"\n class=\"item {{userDetailsForm.controls['designation']?.value?.toLowerCase() === designation?.name?.toLowerCase() ? 'item-active' : ''}}\"\n *ngFor=\"let designation of filterDesignationsMeta\" (click)=\"selectDesignation(designation.name)\">\n {{ designation?.name }}\n </div>\n </div> -->\n </div>\n <div class=\"w-full relative\" *ngIf=\"canShowDesignation && canShowOtherDesignation\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.otherDesignation' | translate }}\n </div>\n <div *ngIf=\"canShowOtherDesignation\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input type=\"text\" class=\"input-text\" matInput formControlName=\"otherDesignation\" placeholder=\"{{ 'profileInfo.enterDesignation' | translate }}\"/>\n </mat-form-field>\n </div>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowEmployeeCode\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.employeeId' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input type=\"text\" class=\"input-text\" matInput formControlName=\"employeeCode\" placeholder=\"Enter employee code\"/>\n </mat-form-field> \n <mat-error class=\"mat-error\" *ngIf=\"userDetailsForm?.get('employeeCode')?.hasError('pattern')\">\n Please enter an Alpha-numeric value only\n </mat-error> \n </div>\n <div class=\"w-full\" *ngIf=\"canshowMobile\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.mobileNumber' | translate }}\n </div>\n <div class=\"flex flex-row gap-4\">\n <div class=\"country-code flex justify-center items-center\" appearance=\"outline\">\n +91\n </div>\n <div class=\"flex-1\">\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"outline\" class=\"mobile-num\">\n <input type=\"text\" class=\"input-text mobile-text relative\" maxlength=\"10\" (keyup)=\"handleEmpty('mobile')\"\n matInput formControlName=\"mobile\" placeholder=\"Enter mobile number\"/>\n <mat-icon class=\"verified-check\" *ngIf=\"mVerified\">check_circle</mat-icon>\n </mat-form-field>\n <mat-error class=\"mat-error\"\n *ngIf=\"userDetailsForm.get('mobile').hasError('required') || userDetailsForm.get('mobile').hasError('pattern')\">\n {{ 'profileInfo.pleaseEnterValidMobileNumber' | translate }}\n </mat-error>\n </div>\n <div class=\"flex justify-end\" *ngIf=\"verifyMobile && !otpSent && !mVerified\">\n <span class=\"get-otp sm:mr-4\" (click)=\"handleGenerateOTP('phone')\">{{ 'profileInfo.getOTP' |\n translate }}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"otpSent\"> \n <form [formGroup]=\"otpForm\">\n <div class=\"w-full\">\n <div class=\"flex enter-otp\">\n <div class=\"font-semibold required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.enterOTP' | translate }}\n </div>\n <div class=\"mb-3\">Time Remaining: <span #timerDiv></span></div>\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field mobile-num\">\n <input type=\"text\" matInput formControlName=\"otp\" class=\"input-text custom-size\" placeholder=\"{{ 'profileInfo.enterTheOTP' | translate }}\" maxlength=\"6\" />\n </mat-form-field>\n </div>\n <div class=\"w-full\">\n <div class=\"flex justify-center\" *ngIf=\"showResendOTP\"> \n <div class=\"flex flex-row\">\n <div class=\"timer\">{{ 'profileInfo.didNotReceiveOTP' | translate }}</div>\n <div class=\"resend-otp\" (click)=\"handleResendOTP()\"> {{ 'profileInfo.resentOTP' | translate }}</div>\n </div>\n </div>\n </div>\n <div class=\"w-full mb-4\">\n <div class=\"flex flex-row justify-between\">\n <button class=\"save-button\" (click)=\"verifyMobileOTP()\">{{ 'profileInfo.submit' | translate }}</button>\n </div>\n </div>\n </form>\n </div>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowGender\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.gender' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-select formControlName=\"gender\" placeholder=\"Select gender\">\n <mat-option *ngFor=\"let _gender of eUserGender\" value=\"{{ _gender }}\">{{\n handleTranslateTo(_gender.toLowerCase()) }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowDob\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.dob' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input matInput class=\"input-text icon-include-input\" [max]=\"currentDate\" [matDatepicker]=\"picker\" [(ngModel)]=\"selectedDate\"\n formControlName=\"dob\" placeholder=\"Select date of birth\" />\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n <div class=\"w-full relative\" *ngIf=\"canShowDomicileMedium\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.motherTongue' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <div class=\"flex flex-row auto-complete-row relative\">\n <input type=\"text\" class=\"input-text high-zindex\" aria-label=\"Domicile Medium (Mother Tongue)\" matInput\n formControlName=\"domicileMedium\" placeholder=\"Select mother tongue\"\n (input)=\"filterLanguage($event.target.value)\" (focus)=\"onLanguageFocus()\" #languageTextBox/>\n <mat-icon class=\"mother-toungue-caret\">arrow_drop_down</mat-icon>\n </div>\n </mat-form-field>\n <mat-error *ngIf=\"userDetailsForm.controls['domicileMedium'].invalid && userDetailsForm.controls['domicileMedium'].touched\"\n class=\"mat-error\">\n Please select a valid mother tongue.\n </mat-error>\n <div class=\"auto-language-list flex flex-col ignore-blur\" #languageDropdown\n *ngIf=\"openLanguageDropdown && masterLanguages?.length\">\n <div (mousedown)=\"preventLanguageBlur($event)\"\n class=\"language-item {{userDetailsForm.controls['domicileMedium']?.value?.toLowerCase() === language?.name?.toLowerCase() ? 'language-item-active' : ''}}\"\n *ngFor=\"let language of masterLanguages\" (click)=\"selectLanguage(language.name)\">\n {{ language?.name }}\n </div>\n </div>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowCategory\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.category' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-select formControlName=\"category\" placeholder=\"Select category\">\n <mat-option *ngFor=\"let category of eCategory\" value=\"{{ category }}\">{{\n handleTranslateTo(category?.toLowerCase()) }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowpinCode\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'userProfile.officePinCode' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input type=\"email\" class=\"input-text\" matInput maxlength=\"6\" formControlName=\"pinCode\" placeholder=\"Enter pincode\"/>\n </mat-form-field>\n <mat-error class=\"mat-error\" *ngIf=\"userDetailsForm?.get('pinCode')?.hasError('pattern')\">\n {{ 'profileInfo.invalidPinCode' | translate }}\n </mat-error> \n </div>\n <div class=\"w-full\" *ngIf=\"canShowshowCadreDetails && !showDoptChanges\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.fromGovOrganization' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field\">\n <mat-select formControlName=\"isCadre\" (selectionChange)=\"getIsCadreStatus($event.value)\" placeholder=\"Select cadre\">\n <mat-option [value]=\"true\">Yes</mat-option>\n <mat-option [value]=\"false\">No</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"w-full\" *ngIf=\"canShowshowCadreDetails && isCadreStatus && !showDoptChanges\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.typeOfCivilService' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field\">\n <mat-select formControlName=\"typeOfCivilService\" (selectionChange)=\"getService($event.value)\" placeholder=\"Select type of civil service\">\n <mat-option *ngFor=\"let service of civilServiceTypes\" [value]=\"service\">{{ service }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"w-full\" *ngIf=\"canShowshowCadreDetails && userDetailsForm.get('typeOfCivilService').value && userDetailsForm.get('isCadre').value && !showDoptChanges\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.serviceType' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field\">\n <mat-select formControlName=\"serviceType\" (selectionChange)=\"onServiceSelect($event)\" placeholder=\"Select service\">\n <mat-option *ngFor=\"let service of serviceName\" [value]=\"service\">{{ service }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"w-full\" *ngIf=\"canShowshowCadreDetails && userDetailsForm.get('serviceType').value && \n userDetailsForm.get('isCadre').value \n && userDetailsForm.get('typeOfCivilService').value && (\n userDetailsForm.get('serviceType').value === 'Indian Administrative Service (IAS)' || \n userDetailsForm.get('serviceType').value === 'Indian Police Service (IPS)' || \n userDetailsForm.get('serviceType').value === 'Indian Forest Service (IFoS)' \n ) && !showDoptChanges\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.cadre' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field\">\n <mat-select formControlName=\"cadreName\" (selectionChange)=\"onCadreSelect($event.value)\" placeholder=\"Select cadre\">\n <mat-option *ngFor=\"let state of cadre\" [value]=\"state\">{{ state }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container *ngIf=\"!showDoptChanges\">\n <div class=\"w-full\" *ngIf=\"canShowshowCadreDetails && userDetailsForm.get('serviceType') && (userDetailsForm.get('serviceType').value && \n userDetailsForm.get('isCadre').value && userDetailsForm.get('typeOfCivilService').value && (\n userDetailsForm.get('serviceType').value === 'Indian Administrative Service (IAS)' || \n userDetailsForm.get('serviceType').value === 'Indian Police Service (IPS)' || \n userDetailsForm.get('serviceType').value === 'Indian Forest Service (IFoS)' \n ) && userDetailsForm.get('cadreName').value) ? true : ((userDetailsForm.get('serviceType').value && \n userDetailsForm.get('isCadre').value \n && userDetailsForm.get('typeOfCivilService').value && (\n userDetailsForm.get('serviceType').value !== 'Indian Administrative Service (IAS)' && \n userDetailsForm.get('serviceType').value !== 'Indian Police Service (IPS)' && \n userDetailsForm.get('serviceType').value !== 'Indian Forest Service (IFoS)' \n ))) ? true : false\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.batch' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field\">\n <mat-select formControlName=\"cadreBatch\" placeholder=\"Select batch\">\n <mat-option *ngFor=\"let year of yearArray\" [value]=\"year\">{{ year }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n <div class=\"w-full\" *ngIf=\"canShowshowCadreDetails && userDetailsForm.get('isCadre').value && userDetailsForm.get('cadreBatch').value && !showDoptChanges\">\n <div class=\"font-semibold margin-0 required mb-3\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.cadreControllingAuthority' | translate }}\n </div>\n <span class=\"cadreControl-name\">{{cadreControllingAuthority}}</span>\n </div>\n <ng-container>\n <div class=\"w-full flex flex-row gap-4 justify-end margin-top-m\">\n <button\n class=\"save-button\"\n [disabled]=\"userDetailsForm?.invalid || !mVerified || !eVerified\"\n (click)=\"onSubmitForm(userDetailsForm)\">\n {{ 'profileInfo.saveChanges' | translate }}\n </button>\n </div>\n </ng-container>\n </form>\n </div>\n <ng-container *ngIf=\"addLoader > 0\" >\n <div class=\"text-center my-2 loader flex justify-center items-center\">\n <mat-spinner class=\"inline-block\"></mat-spinner>\n </div>\n </ng-container>\n</div>\n", styles: ["::ng-deep .course-survey .main-container{width:auto!important;overflow-y:auto!important;max-height:auto!important}.high-zindex{z-index:9999}.auto-list{display:flex;border:1px solid #e3dede;padding:15px 0;border-radius:7px;max-height:200px;overflow:auto;position:absolute;background:#fff;z-index:99;width:100%}.auto-list .item{padding:5px 15px}.auto-list .item:hover{background-color:#f3f3f3;cursor:pointer}.auto-list .item-active{background-color:#1b4ca1!important;color:#fff!important}.auto-language-list{display:flex;border:1px solid #e3dede;padding:15px 0;border-radius:7px;max-height:200px;overflow:auto;position:absolute;background:#fff;z-index:99;width:100%}.auto-language-list .language-item{padding:5px 15px}.auto-language-list .language-item:hover{background-color:#f3f3f3;cursor:pointer}.auto-language-list .language-item-active{background-color:#1b4ca1!important;color:#fff!important}::ng-deep .mat-calendar-body-active{background:#1b4ca1!important;border-radius:100%!important}::ng-deep .course-survey .lib-container{height:100%!important}@media screen and (max-width: 430px){::ng-deep .course-survey .lib-container{padding-left:0!important;padding-right:0!important;padding-bottom:1rem!important}}.disagnation-caret,.mother-toungue-caret{position:absolute;right:0;bottom:0}::ng-deep .userDetailsForm .mat-form-field-appearance-outline .mat-form-field-infix{padding:.5rem 0 .8rem}input[disabled]+mat-icon.disagnation-caret{opacity:.5}input[disabled]+mat-icon.mother-toungue-caret{opacity:.5}::ng-deep .course-survey .lib-container-2{height:auto;min-height:unset!important;padding:0!important;box-shadow:none!important;margin-bottom:2rem!important}@media screen and (max-width: 430px){::ng-deep .course-survey .lib-container-2{padding-left:0!important;padding-right:0!important}}.profile-form-field .mat-select{border:none}.customForm{padding-right:0!important;padding-bottom:1rem!important;padding:1rem 3rem}.cadreControl-name{background:#c3c3c3;padding:10px}.country-code{margin-top:5px;text-align:center;width:50px;height:46px;border:1px solid #d6d5d5;border-radius:5px}.get-otp{color:#1b4ca1;font-weight:700;cursor:pointer;font-size:14px}.enter-otp{align-items:center;justify-content:space-between}.custom-size{width:96%}.resend-otp{color:#1b4ca1;font-weight:700;cursor:pointer}.verified-check{position:absolute;right:3px;color:#5fa800;font-size:18px;width:18px;height:18px}.save-button:disabled{opacity:.6!important}.loader{position:absolute;top:0;left:0;z-index:1000;height:100vh;width:100vw;background-color:#80808045}.mat-error{margin:-10px 0 5px}:host ::ng-deep .userDetailsForm .mat-form-field-wrapper{padding-bottom:8px!important}.custom-select-container,.fixed-height-select{width:100%}.fixed-height-select ::ng-deep .mat-form-field-flex{height:48px!important;min-height:45px!important;align-items:center}.fixed-height-select ::ng-deep .mat-form-field-infix{padding:0!important;border-top:0!important;height:45px!important;display:flex;align-items:center}.fixed-height-select ::ng-deep .mat-form-field-wrapper{padding-bottom:0!important}.fixed-height-select ::ng-deep .mat-select-arrow-wrapper{transform:translateY(0)!important}.fixed-height-select ::ng-deep .mat-form-field-label-wrapper{top:-1.1em}::ng-deep .search-panel{max-height:350px}::ng-deep .search-panel .sticky-search-container{position:sticky;top:0;z-index:2;background:#fff;padding:8px;border-bottom:1px solid rgba(0,0,0,.12);box-shadow:0 2px 4px #00000014}::ng-deep .search-panel .search-input-wrapper{position:relative;width:100%}::ng-deep .search-panel .search-input{width:100%;height:35px;padding:0 30px 0 12px;border:1px solid rgba(0,0,0,.12);border-radius:4px;font-size:14px;box-sizing:border-box}::ng-deep .search-panel .search-input:focus{outline:none;border-color:#f3962f;box-shadow:0 0 0 1px #f3962f33}::ng-deep .search-panel .clear-button{position:absolute;right:8px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;color:#00000080;font-size:14px;padding:4px;display:flex;align-items:center;justify-content:center}::ng-deep .search-panel .clear-button:hover{color:#000c}::ng-deep .search-panel .mat-option.mat-option-disabled{color:#00000061;font-style:italic}::ng-deep .mat-mdc-form-field.fixed-height-select .mat-mdc-text-field-wrapper{height:45px!important}::ng-deep .mat-mdc-form-field.fixed-height-select .mat-mdc-form-field-flex{min-height:45px!important;height:45px!important}::ng-deep .mat-mdc-form-field.fixed-height-select .mat-mdc-form-field-infix{min-height:45px!important;height:45px!important;padding-top:0!important;padding-bottom:0!important}\n"], dependencies: [{ kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i12.MatLegacyError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i12.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i12.MatLegacySuffix, selector: "[matSuffix]" }, { kind: "directive", type: i13.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i14.MatLegacyProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i2.MatLegacyDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "component", type: i15.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i16.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i17.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i17.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i17.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
|
|
1809
|
+
}
|
|
1810
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EnrollProfileFormComponent, decorators: [{
|
|
1811
|
+
type: Component,
|
|
1812
|
+
args: [{ selector: 'ws-app-enroll-profile-form', template: "<div #fullScreenContainer>\n <div class=\"dialog-header text-right mb-2\">\n <mat-icon class=\"mat-icon notranslate material-icons close-icon cursor-pointer\" matprefix=\"\" role=\"img\" aria-hidden=\"true\" [mat-dialog-close]=\"false\">close</mat-icon>\n </div>\n <h1> {{data?.courseName}} </h1>\n <div class=\"w-full\" *ngIf=\"!isLoading\">\n <form [formGroup]=\"userDetailsForm\" class=\"userDetailsForm\">\n <div class=\"w-full\" *ngIf=\"canShowName\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.name' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input type=\"text\" class=\"input-text\" matInput formControlName=\"name\" placeholder=\"Name\"/>\n </mat-form-field>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowOrg\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ (showDoptChanges ? 'profileInfo.presentOrganisation' : 'profileInfo.organisation') | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input type=\"text\" class=\"input-text\" matInput formControlName=\"organisation\" placeholder=\"Organisation\"/>\n </mat-form-field>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowEmail\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.email' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input type=\"text\" class=\"input-text\" matInput formControlName=\"primaryEmail\" placeholder=\"Enter email\" (keyup)=\"handleEmpty('primaryEmail')\"/>\n </mat-form-field>\n <mat-error class=\"mat-error\" *ngIf=\"userDetailsForm.get('primaryEmail').hasError('required') || userDetailsForm.get('primaryEmail').hasError('pattern')\">\n {{ 'profileInfo.invalidEmail' | translate }}\n </mat-error>\n <div class=\"flex justify-end\" *ngIf=\"verifyEmail && !otpSent && !eVerified\">\n <span class=\"get-otp\" (click)=\"handleGenerateEmailOTP('email')\">{{ 'profileInfo.getOTP' | translate\n }}</span>\n </div>\n <div *ngIf=\"emailOtpSent\">\n <form [formGroup]=\"emailOtpForm\">\n <div class=\"w-full\">\n <div class=\"flex enter-otp\">\n <div class=\"font-semibold required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.enterOTP' | translate }}\n </div>\n <div class=\"mb-3\">Time Remaining: <span #emailTimerDiv></span></div>\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field mobile-num\">\n <input type=\"text\" matInput formControlName=\"eOtp\" class=\"input-text custom-size\" placeholder=\"{{ 'profileInfo.enterTheOTP' | translate }}\" maxlength=\"6\" />\n </mat-form-field>\n </div>\n <div class=\"w-full\">\n <div class=\"flex justify-center\" *ngIf=\"showEmailResendOTP\">\n <div class=\"flex flex-row\">\n <div class=\"timer\">{{ 'profileInfo.didNotReceiveOTP' | translate }}</div>\n <div class=\"resend-otp\" (click)=\"handleResendEmailOTP()\"> {{ 'profileInfo.resentOTP' | translate }}</div>\n </div>\n </div>\n </div>\n <div class=\"w-full mb-4\">\n <div class=\"flex flex-row justify-between\">\n <button class=\"save-button\" (click)=\"verifyEmailOTP()\">{{ 'profileInfo.submit' | translate }}</button>\n </div>\n </div>\n </form>\n </div>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowGroup\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.group' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-select formControlName=\"group\" placeholder=\"{{ 'profileInfo.chooseAGroup' | translate }}\">\n <mat-option *ngFor=\"let group of groupData\" value=\"{{group}}\">{{ group }}</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"text-xs mb-2\" *ngIf=\"showDoptChanges\">\n {{'profileInfo.groupNote' | translate}}\n </div>\n </div>\n <div class=\"w-full relative\" *ngIf=\"canShowDesignation\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.designation' | translate }}\n </div>\n <!-- <mat-form-field appearance=\"outline\" class=\"w-full\">\n <div class=\"flex flex-row auto-complete-row relative\">\n <input type=\"text\" class=\"input-text high-zindex\" matInput formControlName=\"designation\"\n (input)=\"filterdesignation($event.target.value)\" (focus)=\"onDesignationsFocus()\" #textBox\n placeholder=\"{{ 'profileInfo.chooseADesignation' | translate }}\">\n <mat-icon class=\"disagnation-caret\">arrow_drop_down</mat-icon>\n </div>\n </mat-form-field> -->\n <div class=\"custom-select-container\">\n <mat-form-field appearance=\"outline\" class=\"fixed-height-select\">\n <mat-select placeholder=\"{{ 'profileInfo.chooseADesignation' | translate }}\" formControlName=\"designation\" (closed)=\"onDesignationDropdownClosed()\" (openedChange)=\"setupScrollListener($event)\" panelClass=\"search-panel\">\n <!-- Sticky search input container -->\n <div class=\"sticky-search-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"search-input-wrapper\">\n <input \n type=\"text\" \n placeholder=\"Search designation\" \n formControlName=\"searchDesignation\" \n class=\"search-input\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n autocomplete=\"off\">\n <button \n *ngIf=\"searchDesignation?.value\" \n type=\"button\" \n class=\"clear-button\" \n (click)=\"searchDesignation?.setValue('')\">\n \u2715\n </button>\n </div>\n </div>\n <!-- Options list -->\n <mat-option *ngFor=\"let option of designationsMeta \" [value]=\"option?.name\" (click)=\"selectDesignation(option?.name)\">\n {{ option?.name }}\n </mat-option>\n <!-- Loading indicator -->\n <div *ngIf=\"isLoadingMoreDesignations\" class=\"loading-indicator\">\n Loading more...\n </div>\n <!-- No results message -->\n <mat-option *ngIf=\"(designationsMeta )?.length === 0\" disabled>\n No matches found\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <mat-error *ngIf=\"userDetailsForm?.controls['designation']?.invalid && userDetailsForm?.controls['designation']?.touched\"\n class=\"mat-error\">\n Please select a valid designation.\n </mat-error>\n <div class=\"text-xs mb-2\" *ngIf=\"showDoptChanges\">\n {{'profileInfo.designationNote' | translate}}\n </div>\n <!-- <div class=\"auto-list flex flex-col ignore-blur\" #dropdown\n *ngIf=\"openDesignationDropdown && filterDesignationsMeta.length\">\n <div (mousedown)=\"preventBlur($event)\"\n class=\"item {{userDetailsForm.controls['designation']?.value?.toLowerCase() === designation?.name?.toLowerCase() ? 'item-active' : ''}}\"\n *ngFor=\"let designation of filterDesignationsMeta\" (click)=\"selectDesignation(designation.name)\">\n {{ designation?.name }}\n </div>\n </div> -->\n </div>\n <div class=\"w-full relative\" *ngIf=\"canShowDesignation && canShowOtherDesignation\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.otherDesignation' | translate }}\n </div>\n <div *ngIf=\"canShowOtherDesignation\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input type=\"text\" class=\"input-text\" matInput formControlName=\"otherDesignation\" placeholder=\"{{ 'profileInfo.enterDesignation' | translate }}\"/>\n </mat-form-field>\n </div>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowEmployeeCode\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.employeeId' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input type=\"text\" class=\"input-text\" matInput formControlName=\"employeeCode\" placeholder=\"Enter employee code\"/>\n </mat-form-field> \n <mat-error class=\"mat-error\" *ngIf=\"userDetailsForm?.get('employeeCode')?.hasError('pattern')\">\n Please enter an Alpha-numeric value only\n </mat-error> \n </div>\n <div class=\"w-full\" *ngIf=\"canshowMobile\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.mobileNumber' | translate }}\n </div>\n <div class=\"flex flex-row gap-4\">\n <div class=\"country-code flex justify-center items-center\" appearance=\"outline\">\n +91\n </div>\n <div class=\"flex-1\">\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"outline\" class=\"mobile-num\">\n <input type=\"text\" class=\"input-text mobile-text relative\" maxlength=\"10\" (keyup)=\"handleEmpty('mobile')\"\n matInput formControlName=\"mobile\" placeholder=\"Enter mobile number\"/>\n <mat-icon class=\"verified-check\" *ngIf=\"mVerified\">check_circle</mat-icon>\n </mat-form-field>\n <mat-error class=\"mat-error\"\n *ngIf=\"userDetailsForm.get('mobile').hasError('required') || userDetailsForm.get('mobile').hasError('pattern')\">\n {{ 'profileInfo.pleaseEnterValidMobileNumber' | translate }}\n </mat-error>\n </div>\n <div class=\"flex justify-end\" *ngIf=\"verifyMobile && !otpSent && !mVerified\">\n <span class=\"get-otp sm:mr-4\" (click)=\"handleGenerateOTP('phone')\">{{ 'profileInfo.getOTP' |\n translate }}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"otpSent\"> \n <form [formGroup]=\"otpForm\">\n <div class=\"w-full\">\n <div class=\"flex enter-otp\">\n <div class=\"font-semibold required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.enterOTP' | translate }}\n </div>\n <div class=\"mb-3\">Time Remaining: <span #timerDiv></span></div>\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field mobile-num\">\n <input type=\"text\" matInput formControlName=\"otp\" class=\"input-text custom-size\" placeholder=\"{{ 'profileInfo.enterTheOTP' | translate }}\" maxlength=\"6\" />\n </mat-form-field>\n </div>\n <div class=\"w-full\">\n <div class=\"flex justify-center\" *ngIf=\"showResendOTP\"> \n <div class=\"flex flex-row\">\n <div class=\"timer\">{{ 'profileInfo.didNotReceiveOTP' | translate }}</div>\n <div class=\"resend-otp\" (click)=\"handleResendOTP()\"> {{ 'profileInfo.resentOTP' | translate }}</div>\n </div>\n </div>\n </div>\n <div class=\"w-full mb-4\">\n <div class=\"flex flex-row justify-between\">\n <button class=\"save-button\" (click)=\"verifyMobileOTP()\">{{ 'profileInfo.submit' | translate }}</button>\n </div>\n </div>\n </form>\n </div>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowGender\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.gender' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-select formControlName=\"gender\" placeholder=\"Select gender\">\n <mat-option *ngFor=\"let _gender of eUserGender\" value=\"{{ _gender }}\">{{\n handleTranslateTo(_gender.toLowerCase()) }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowDob\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.dob' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input matInput class=\"input-text icon-include-input\" [max]=\"currentDate\" [matDatepicker]=\"picker\" [(ngModel)]=\"selectedDate\"\n formControlName=\"dob\" placeholder=\"Select date of birth\" />\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n <div class=\"w-full relative\" *ngIf=\"canShowDomicileMedium\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.motherTongue' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <div class=\"flex flex-row auto-complete-row relative\">\n <input type=\"text\" class=\"input-text high-zindex\" aria-label=\"Domicile Medium (Mother Tongue)\" matInput\n formControlName=\"domicileMedium\" placeholder=\"Select mother tongue\"\n (input)=\"filterLanguage($event.target.value)\" (focus)=\"onLanguageFocus()\" #languageTextBox/>\n <mat-icon class=\"mother-toungue-caret\">arrow_drop_down</mat-icon>\n </div>\n </mat-form-field>\n <mat-error *ngIf=\"userDetailsForm.controls['domicileMedium'].invalid && userDetailsForm.controls['domicileMedium'].touched\"\n class=\"mat-error\">\n Please select a valid mother tongue.\n </mat-error>\n <div class=\"auto-language-list flex flex-col ignore-blur\" #languageDropdown\n *ngIf=\"openLanguageDropdown && masterLanguages?.length\">\n <div (mousedown)=\"preventLanguageBlur($event)\"\n class=\"language-item {{userDetailsForm.controls['domicileMedium']?.value?.toLowerCase() === language?.name?.toLowerCase() ? 'language-item-active' : ''}}\"\n *ngFor=\"let language of masterLanguages\" (click)=\"selectLanguage(language.name)\">\n {{ language?.name }}\n </div>\n </div>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowCategory\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.category' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-select formControlName=\"category\" placeholder=\"Select category\">\n <mat-option *ngFor=\"let category of eCategory\" value=\"{{ category }}\">{{\n handleTranslateTo(category?.toLowerCase()) }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"w-full\" *ngIf=\"canShowpinCode\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'userProfile.officePinCode' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <input type=\"email\" class=\"input-text\" matInput maxlength=\"6\" formControlName=\"pinCode\" placeholder=\"Enter pincode\"/>\n </mat-form-field>\n <mat-error class=\"mat-error\" *ngIf=\"userDetailsForm?.get('pinCode')?.hasError('pattern')\">\n {{ 'profileInfo.invalidPinCode' | translate }}\n </mat-error> \n </div>\n <div class=\"w-full\" *ngIf=\"canShowshowCadreDetails && !showDoptChanges\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.fromGovOrganization' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field\">\n <mat-select formControlName=\"isCadre\" (selectionChange)=\"getIsCadreStatus($event.value)\" placeholder=\"Select cadre\">\n <mat-option [value]=\"true\">Yes</mat-option>\n <mat-option [value]=\"false\">No</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"w-full\" *ngIf=\"canShowshowCadreDetails && isCadreStatus && !showDoptChanges\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.typeOfCivilService' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field\">\n <mat-select formControlName=\"typeOfCivilService\" (selectionChange)=\"getService($event.value)\" placeholder=\"Select type of civil service\">\n <mat-option *ngFor=\"let service of civilServiceTypes\" [value]=\"service\">{{ service }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"w-full\" *ngIf=\"canShowshowCadreDetails && userDetailsForm.get('typeOfCivilService').value && userDetailsForm.get('isCadre').value && !showDoptChanges\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.serviceType' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field\">\n <mat-select formControlName=\"serviceType\" (selectionChange)=\"onServiceSelect($event)\" placeholder=\"Select service\">\n <mat-option *ngFor=\"let service of serviceName\" [value]=\"service\">{{ service }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"w-full\" *ngIf=\"canShowshowCadreDetails && userDetailsForm.get('serviceType').value && \n userDetailsForm.get('isCadre').value \n && userDetailsForm.get('typeOfCivilService').value && (\n userDetailsForm.get('serviceType').value === 'Indian Administrative Service (IAS)' || \n userDetailsForm.get('serviceType').value === 'Indian Police Service (IPS)' || \n userDetailsForm.get('serviceType').value === 'Indian Forest Service (IFoS)' \n ) && !showDoptChanges\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.cadre' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field\">\n <mat-select formControlName=\"cadreName\" (selectionChange)=\"onCadreSelect($event.value)\" placeholder=\"Select cadre\">\n <mat-option *ngFor=\"let state of cadre\" [value]=\"state\">{{ state }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container *ngIf=\"!showDoptChanges\">\n <div class=\"w-full\" *ngIf=\"canShowshowCadreDetails && userDetailsForm.get('serviceType') && (userDetailsForm.get('serviceType').value && \n userDetailsForm.get('isCadre').value && userDetailsForm.get('typeOfCivilService').value && (\n userDetailsForm.get('serviceType').value === 'Indian Administrative Service (IAS)' || \n userDetailsForm.get('serviceType').value === 'Indian Police Service (IPS)' || \n userDetailsForm.get('serviceType').value === 'Indian Forest Service (IFoS)' \n ) && userDetailsForm.get('cadreName').value) ? true : ((userDetailsForm.get('serviceType').value && \n userDetailsForm.get('isCadre').value \n && userDetailsForm.get('typeOfCivilService').value && (\n userDetailsForm.get('serviceType').value !== 'Indian Administrative Service (IAS)' && \n userDetailsForm.get('serviceType').value !== 'Indian Police Service (IPS)' && \n userDetailsForm.get('serviceType').value !== 'Indian Forest Service (IFoS)' \n ))) ? true : false\">\n <div class=\"font-semibold margin-0 required\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.batch' | translate }}\n </div>\n <mat-form-field appearance=\"outline\" class=\"profile-form-field\">\n <mat-select formControlName=\"cadreBatch\" placeholder=\"Select batch\">\n <mat-option *ngFor=\"let year of yearArray\" [value]=\"year\">{{ year }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n <div class=\"w-full\" *ngIf=\"canShowshowCadreDetails && userDetailsForm.get('isCadre').value && userDetailsForm.get('cadreBatch').value && !showDoptChanges\">\n <div class=\"font-semibold margin-0 required mb-3\"\n i18n=\"Title label|Label which explains the user to enter title\">\n {{ 'profileInfo.cadreControllingAuthority' | translate }}\n </div>\n <span class=\"cadreControl-name\">{{cadreControllingAuthority}}</span>\n </div>\n <ng-container>\n <div class=\"w-full flex flex-row gap-4 justify-end margin-top-m\">\n <button\n class=\"save-button\"\n [disabled]=\"userDetailsForm?.invalid || !mVerified || !eVerified\"\n (click)=\"onSubmitForm(userDetailsForm)\">\n {{ 'profileInfo.saveChanges' | translate }}\n </button>\n </div>\n </ng-container>\n </form>\n </div>\n <ng-container *ngIf=\"addLoader > 0\" >\n <div class=\"text-center my-2 loader flex justify-center items-center\">\n <mat-spinner class=\"inline-block\"></mat-spinner>\n </div>\n </ng-container>\n</div>\n", styles: ["::ng-deep .course-survey .main-container{width:auto!important;overflow-y:auto!important;max-height:auto!important}.high-zindex{z-index:9999}.auto-list{display:flex;border:1px solid #e3dede;padding:15px 0;border-radius:7px;max-height:200px;overflow:auto;position:absolute;background:#fff;z-index:99;width:100%}.auto-list .item{padding:5px 15px}.auto-list .item:hover{background-color:#f3f3f3;cursor:pointer}.auto-list .item-active{background-color:#1b4ca1!important;color:#fff!important}.auto-language-list{display:flex;border:1px solid #e3dede;padding:15px 0;border-radius:7px;max-height:200px;overflow:auto;position:absolute;background:#fff;z-index:99;width:100%}.auto-language-list .language-item{padding:5px 15px}.auto-language-list .language-item:hover{background-color:#f3f3f3;cursor:pointer}.auto-language-list .language-item-active{background-color:#1b4ca1!important;color:#fff!important}::ng-deep .mat-calendar-body-active{background:#1b4ca1!important;border-radius:100%!important}::ng-deep .course-survey .lib-container{height:100%!important}@media screen and (max-width: 430px){::ng-deep .course-survey .lib-container{padding-left:0!important;padding-right:0!important;padding-bottom:1rem!important}}.disagnation-caret,.mother-toungue-caret{position:absolute;right:0;bottom:0}::ng-deep .userDetailsForm .mat-form-field-appearance-outline .mat-form-field-infix{padding:.5rem 0 .8rem}input[disabled]+mat-icon.disagnation-caret{opacity:.5}input[disabled]+mat-icon.mother-toungue-caret{opacity:.5}::ng-deep .course-survey .lib-container-2{height:auto;min-height:unset!important;padding:0!important;box-shadow:none!important;margin-bottom:2rem!important}@media screen and (max-width: 430px){::ng-deep .course-survey .lib-container-2{padding-left:0!important;padding-right:0!important}}.profile-form-field .mat-select{border:none}.customForm{padding-right:0!important;padding-bottom:1rem!important;padding:1rem 3rem}.cadreControl-name{background:#c3c3c3;padding:10px}.country-code{margin-top:5px;text-align:center;width:50px;height:46px;border:1px solid #d6d5d5;border-radius:5px}.get-otp{color:#1b4ca1;font-weight:700;cursor:pointer;font-size:14px}.enter-otp{align-items:center;justify-content:space-between}.custom-size{width:96%}.resend-otp{color:#1b4ca1;font-weight:700;cursor:pointer}.verified-check{position:absolute;right:3px;color:#5fa800;font-size:18px;width:18px;height:18px}.save-button:disabled{opacity:.6!important}.loader{position:absolute;top:0;left:0;z-index:1000;height:100vh;width:100vw;background-color:#80808045}.mat-error{margin:-10px 0 5px}:host ::ng-deep .userDetailsForm .mat-form-field-wrapper{padding-bottom:8px!important}.custom-select-container,.fixed-height-select{width:100%}.fixed-height-select ::ng-deep .mat-form-field-flex{height:48px!important;min-height:45px!important;align-items:center}.fixed-height-select ::ng-deep .mat-form-field-infix{padding:0!important;border-top:0!important;height:45px!important;display:flex;align-items:center}.fixed-height-select ::ng-deep .mat-form-field-wrapper{padding-bottom:0!important}.fixed-height-select ::ng-deep .mat-select-arrow-wrapper{transform:translateY(0)!important}.fixed-height-select ::ng-deep .mat-form-field-label-wrapper{top:-1.1em}::ng-deep .search-panel{max-height:350px}::ng-deep .search-panel .sticky-search-container{position:sticky;top:0;z-index:2;background:#fff;padding:8px;border-bottom:1px solid rgba(0,0,0,.12);box-shadow:0 2px 4px #00000014}::ng-deep .search-panel .search-input-wrapper{position:relative;width:100%}::ng-deep .search-panel .search-input{width:100%;height:35px;padding:0 30px 0 12px;border:1px solid rgba(0,0,0,.12);border-radius:4px;font-size:14px;box-sizing:border-box}::ng-deep .search-panel .search-input:focus{outline:none;border-color:#f3962f;box-shadow:0 0 0 1px #f3962f33}::ng-deep .search-panel .clear-button{position:absolute;right:8px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;color:#00000080;font-size:14px;padding:4px;display:flex;align-items:center;justify-content:center}::ng-deep .search-panel .clear-button:hover{color:#000c}::ng-deep .search-panel .mat-option.mat-option-disabled{color:#00000061;font-style:italic}::ng-deep .mat-mdc-form-field.fixed-height-select .mat-mdc-text-field-wrapper{height:45px!important}::ng-deep .mat-mdc-form-field.fixed-height-select .mat-mdc-form-field-flex{min-height:45px!important;height:45px!important}::ng-deep .mat-mdc-form-field.fixed-height-select .mat-mdc-form-field-infix{min-height:45px!important;height:45px!important;padding-top:0!important;padding-bottom:0!important}\n"] }]
|
|
1813
|
+
}], ctorParameters: function () { return [{ type: i1.MatLegacySnackBar }, { type: i2.MatLegacyDialogRef }, { type: i3.UserProfileService }, { type: i4.ConfigurationsService }, { type: i5.ProfileV2Service }, { type: i6.OtpService }, { type: i7.NPSGridService }, { type: i8.TranslateService }, { type: i9.DatePipe }, { type: undefined, decorators: [{
|
|
1814
|
+
type: Inject,
|
|
1815
|
+
args: [MAT_DIALOG_DATA]
|
|
1816
|
+
}] }]; }, propDecorators: { timerDiv: [{
|
|
1817
|
+
type: ViewChild,
|
|
1818
|
+
args: ['timerDiv', { static: false }]
|
|
1819
|
+
}], emailTimerDiv: [{
|
|
1820
|
+
type: ViewChild,
|
|
1821
|
+
args: ['emailTimerDiv', { static: false }]
|
|
1822
|
+
}], textBox: [{
|
|
1823
|
+
type: ViewChild,
|
|
1824
|
+
args: ['textBox']
|
|
1825
|
+
}], dropdown: [{
|
|
1826
|
+
type: ViewChild,
|
|
1827
|
+
args: ['dropdown']
|
|
1828
|
+
}], languageTextBox: [{
|
|
1829
|
+
type: ViewChild,
|
|
1830
|
+
args: ['languageTextBox']
|
|
1831
|
+
}], languageDropdown: [{
|
|
1832
|
+
type: ViewChild,
|
|
1833
|
+
args: ['languageDropdown']
|
|
1834
|
+
}], handleClickOutside: [{
|
|
1835
|
+
type: HostListener,
|
|
1836
|
+
args: ['document:click', ['$event']]
|
|
1837
|
+
}] } });
|
|
1838
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5yb2xsLXByb2ZpbGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdG9jL3NyYy9saWIvY29tcG9uZW50cy9lbnJvbGwtcHJvZmlsZS1mb3JtL2Vucm9sbC1wcm9maWxlLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvZW5yb2xsLXByb2ZpbGUtZm9ybS9lbnJvbGwtcHJvZmlsZS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFekYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM5QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUt0RSxPQUFPLEVBQXNDLHNCQUFzQixJQUFJLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBRS9ILG9CQUFvQjtBQUNwQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLdEIsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUE7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQTtBQUMxQyxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUE7QUFDckMsb0JBQW9CO0FBQ3BCLE1BQU0sYUFBYSxHQUFHLHFIQUFxSCxDQUFB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IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCB7IFVzZXJQcm9maWxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItcHJvZmlsZS5zZXJ2aWNlJ1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IE5zVXNlclByb2ZpbGVEZXRhaWxzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXItcHJvZmlsZS5tb2RlbCdcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xuaW1wb3J0IHsgUHJvZmlsZVYyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2ZpbGUtdjIuc2VydmljZSdcbmltcG9ydCB7IE90cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vdHAuc2VydmljZSdcbmltcG9ydCB7IE5QU0dyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbnBzLWdyaWQuc2VydmljZSdcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZ1JlZiBhcyBNYXREaWFsb2dSZWYsIE1BVF9MRUdBQ1lfRElBTE9HX0RBVEEgYXMgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZydcbmltcG9ydCB7IE1hdExlZ2FjeVNuYWNrQmFyIGFzIE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXNuYWNrLWJhcidcbi8qIHRzbGludDpkaXNhYmxlICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbi8vIGltcG9ydCB7IFNpZ251cFNlcnZpY2UgfSBmcm9tICdzcmMvYXBwL3JvdXRlcy9wdWJsaWMvcHVibGljLXNpZ251cC9zaWdudXAuc2VydmljZSdcbmltcG9ydCB7IGRlc2lnbmF0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Byb2ZpbGUtcmV2YW1wLm1vZGVsJ1xuXG5jb25zdCBNT0JJTEVfUEFUVEVSTiA9IC9eWzBdP1s2Nzg5XVxcZHs5fSQvXG5jb25zdCBQSU5fQ09ERV9QQVRURVJOID0gL15bMS05XVswLTldezV9JC9cbmNvbnN0IEVNUF9JRF9QQVRURVJOID0gL15bYS16MC05XSskL2lcbi8qIHRzbGludDpkaXNhYmxlICovXG5jb25zdCBFTUFJTF9QQVRURVJOID0gL15bYS16QS1aMC05XStbYS16QS1aMC05Ll8tXSpbYS16QS1aMC05XStAW2EtekEtWjAtOV0rKFstYS16QS1aMC05XSpbYS16QS1aMC05XSspPyhcXC5bYS16QS1aMC05LV0rKSpcXC5bYS16QS1aXXsyLDR9JC9cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd3MtYXBwLWVucm9sbC1wcm9maWxlLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZW5yb2xsLXByb2ZpbGUtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Vucm9sbC1wcm9maWxlLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRW5yb2xsUHJvZmlsZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgYWZ0ZXJTdWJtaXRBY3Rpb24gPSB0aGlzLmNoZWNrQWZ0ZXJTdWJtaXQuYmluZCh0aGlzKVxuICBpc1JlYWRPbmx5ID0gZmFsc2VcbiAgYmF0Y2hEZXRhaWxzOiBhbnlcbiAgY3VzdG9tRm9ybTogYm9vbGVhbiA9IGZhbHNlXG4gIHVzZXJEZXRhaWxzRm9ybTogRm9ybUdyb3VwXG4gIGdyb3VwRGF0YTogYW55IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgZGVzdHJveVN1YmplY3QkID0gbmV3IFN1YmplY3QoKVxuICBkZXNpZ25hdGlvbnNNZXRhOiBhbnkgPSBbXVxuICAvLyBmaWx0ZXJEZXNpZ25hdGlvbnNNZXRhOiBhbnkgPSBbXVxuICBlVXNlckdlbmRlciA9IE9iamVjdC5rZXlzKE5zVXNlclByb2ZpbGVEZXRhaWxzLkVVc2VyR2VuZGVyKVxuICBtYXN0ZXJMYW5ndWFnZXM6IGFueVxuICBtYXN0ZXJMYW5ndWFnZUJhY2t1cDogYW55XG4gIGVDYXRlZ29yeSA9IE9iamVjdC5rZXlzKE5zVXNlclByb2ZpbGVEZXRhaWxzLkVDYXRlZ29yeSlcbiAgdXNlclByb2ZpbGVPYmplY3Q6IGFueVxuICBlbGlnaWJsZTogYm9vbGVhbiA9IGZhbHNlXG4gIGlzQ2FkcmVTdGF0dXMgPSBmYWxzZVxuICBzaG93QmF0Y2hGb3JOb0NhZHJlID0gdHJ1ZVxuICBjaXZpbFNlcnZpY2VEYXRhOiBhbnlcbiAgY2l2aWxTZXJ2aWNlVHlwZXM6IGFueVxuICBzZXJ2aWNlTmFtZTogYW55XG4gIHNlcnZpY2VUeXBlOiBhbnlcbiAgc2VydmljZUxpc3REYXRhOiBhbnlcbiAgc2VydmljZUlkOiBhbnlcbiAgZXJyb3JNZXNzYWdlOiBhbnlcbiAgc2VsZWN0ZWRTZXJ2aWNlTmFtZTogYW55XG4gIHNlbGVjdGVkU2VydmljZTogYW55XG4gIGNpdmlsU2VydmljZU5hbWU6IGFueVxuICBjaXZpbFNlcnZpY2VJZDogYW55XG4gIGNhZHJlSWQ6IGFueVxuICBjYWRyZTogYW55XG4gIGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHk6IGFueVxuICBzdGFydEJhdGNoOiBhbnlcbiAgZW5kQmF0Y2g6IGFueVxuICB5ZWFyQXJyYXk6IGFueVxuICBleGNsdXNpb25ZZWFyOiBhbnlcbiAgc2VsZWN0ZWRDYWRyZU5hbWU6IGFueVxuICBzZWxlY3RlZENhZHJlOiBhbnlcbiAgdmVyaWZ5TW9iaWxlOiBib29sZWFuID0gZmFsc2VcbiAgb3RwU2VudDogYm9vbGVhbiA9IGZhbHNlXG4gIGVtYWlsT3RwU2VudDogYm9vbGVhbiA9IGZhbHNlXG4gIG90cEVudGVyZWQgPSAnJ1xuICBtVmVyaWZpZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICBlVmVyaWZpZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICBAVmlld0NoaWxkKCd0aW1lckRpdicsIHsgc3RhdGljOiBmYWxzZSB9KSB0aW1lckRpdiAhOiBhbnlcbiAgQFZpZXdDaGlsZCgnZW1haWxUaW1lckRpdicsIHsgc3RhdGljOiBmYWxzZSB9KSBlbWFpbFRpbWVyRGl2ICE6IGFueVxuICB0aW1lTGVmdCA9IDE1MFxuICBlbWFpbFRpbWVMZWZ0ID0gMTUwXG4gIGludGVydmFsOiBhbnlcbiAgZW1haWxJbnRlcnZhbDogYW55XG4gIHNob3dSZXNlbmRPVFAgPSBmYWxzZVxuICBzaG93RW1haWxSZXNlbmRPVFAgPSBmYWxzZVxuICBvdHBGb3JtOiBGb3JtR3JvdXBcbiAgZW1haWxPdHBGb3JtOiBGb3JtR3JvdXBcbiAgc2hvd25hbWUgPSBmYWxzZVxuICBzaG93RGVzaWduYXRpb24gPSBmYWxzZVxuICBzaG93R3JvdXAgPSBmYWxzZVxuICBzaG93RW1wbG95ZWVDb2RlID0gZmFsc2VcbiAgc2hvd01vYmlsZSA9IGZhbHNlXG4gIHNob3dHZW5kZXIgPSBmYWxzZVxuICBzaG93RG9iID0gZmFsc2VcbiAgc2hvd0NhdGVnb3J5ID0gZmFsc2VcbiAgc2hvd0RlY2ltYWxNZWRpdW0gPSBmYWxzZVxuICBzaG93UGluQ29kZSA9IGZhbHNlXG4gIHNob3dDYWRyZURldGFpbHMgPSBmYWxzZVxuICB1cGRhdGVQcm9maWxlID0gZmFsc2VcbiAgcGVuZGluZ0ZpbGVkczogYW55XG4gIHBHcm91cDogYW55XG4gIHBEZXNpZ25hdGlvbjogYW55XG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dFbXBsb3llZUNvZGU6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5zaG93TW9iaWxlOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0dlbmRlcjogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dEb2I6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93RG9taWNpbGVNZWRpdW06IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93Q2F0ZWdvcnk6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93cGluQ29kZTogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dzaG93Q2FkcmVEZXRhaWxzOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0dyb3VwOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0Rlc2lnbmF0aW9uOiBib29sZWFuID0gZmFsc2VcbiAgc2VsZWN0ZWREYXRlOiBhbnlcbiAgc2hvd0NvdW50ZXI6IG51bWJlciA9IDBcbiAgZGlzYWJsZUNvdW50ZXI6IG51bWJlciA9IDBcbiAgY2FuU2hvd0VtYWlsOiBib29sZWFuID0gZmFsc2VcbiAgc2hvd0VtYWlsOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd05hbWU6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93T3JnOiBib29sZWFuID0gZmFsc2VcbiAgc2hvd09yZzogYm9vbGVhbiA9IGZhbHNlXG4gIHN1cnZleUlkOiBhbnlcbiAgc2hvd0RvcHRDaGFuZ2VzOiBib29sZWFuID0gZmFsc2VcbiAgcHJvZmlsZUZvcm1UeXBlOiBhbnlcbiAgdmVyaWZ5RW1haWwgPSBmYWxzZVxuICBhcHByb3ZlZERvbWFpbkxpc3Q6IGFueSA9IFtdXG4gIGNvbnRleHRUb2tlbjogYW55XG4gIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxuICBvcGVuRGVzaWduYXRpb25Ecm9wZG93biA9IGZhbHNlXG4gIG9wZW5MYW5ndWFnZURyb3Bkb3duID0gZmFsc2VcbiAgY2FuU2hvd090aGVyRGVzaWduYXRpb24gPSBmYWxzZVxuICBkZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSA1MFxuICBhZGRMb2FkZXIgPSAwXG4gIGlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50ID0gIDUwXG4gIGRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgb3JnYW5pc2F0aW9uSWQgPSAnJ1xuICBzZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICBkZXNpZ25hdGlvbnNPZmZzZXQgPSAwO1xuICBkZXNpZ25hdGlvblNlYXJjaFRleHQgPSAnJztcbiAgZGVzaWduYXRpb25zVG90YWxDb3VudCA9IDA7XG4gIGZvcm1JZDogc3RyaW5nID0gJyc7XG4gIGZvcm1zRGV0aWxzOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ3RleHRCb3gnKSB0ZXh0Qm94ITogRWxlbWVudFJlZlxuICBAVmlld0NoaWxkKCdkcm9wZG93bicpIGRyb3Bkb3duITogRWxlbWVudFJlZlxuICBAVmlld0NoaWxkKCdsYW5ndWFnZVRleHRCb3gnKSBsYW5ndWFnZVRleHRCb3ghOiBFbGVtZW50UmVmXG4gIEBWaWV3Q2hpbGQoJ2xhbmd1YWdlRHJvcGRvd24nKSBsYW5ndWFnZURyb3Bkb3duITogRWxlbWVudFJlZlxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RW5yb2xsUHJvZmlsZUZvcm1Db21wb25lbnQ+LFxuICAgIHByaXZhdGUgdXNlclByb2ZpbGVTZXJ2aWNlOiBVc2VyUHJvZmlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTcmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHByb2ZpbGVWMlN2YzogUHJvZmlsZVYyU2VydmljZSxcbiAgICBwcml2YXRlIG90cFNlcnZpY2U6IE90cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBucHNTdmM6IE5QU0dyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICAvLyBwcml2YXRlIHNpZ251cFNlcnZpY2U6IFNpZ251cFNlcnZpY2UsXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICkge1xuXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSkge1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldERlZmF1bHRMYW5nKCdlbicpXG4gICAgICBjb25zdCBsYW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpIVxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShsYW5nKVxuICAgIH1cblxuICAgIHRoaXMuYmF0Y2hEZXRhaWxzID0gdGhpcy5kYXRhLmJhdGNoRGF0YVxuICAgIHRoaXMuc3VydmV5SWQgPSB0aGlzLmRhdGEuc3VydmV5SWRcbiAgICB0aGlzLnNob3dEb3B0Q2hhbmdlcyA9IHRoaXMuZGF0YS5zaG93RG9wdENoYW5nZXNcbiAgICB0aGlzLnByb2ZpbGVGb3JtVHlwZSA9IHRoaXMuYmF0Y2hEZXRhaWxzLmJhdGNoQXR0cmlidXRlcy51c2VyUHJvZmlsZUZpbGVkc1xuICAgIHRoaXMudXNlckRldGFpbHNGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgb3JnYW5pc2F0aW9uOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgZ3JvdXA6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBkZXNpZ25hdGlvbjogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGVtcGxveWVlQ29kZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIHByaW1hcnlFbWFpbDogbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5wYXR0ZXJuKEVNQUlMX1BBVFRFUk4pXSksXG4gICAgICBtb2JpbGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBnZW5kZXI6IG5ldyBGb3JtQ29udHJvbCgnJywgW10pLFxuICAgICAgZG9iOiBuZXcgRm9ybUNvbnRyb2woJycsIFtdKSxcbiAgICAgIGRvbWljaWxlTWVkaXVtOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgY2F0ZWdvcnk6IG5ldyBGb3JtQ29udHJvbCgnJywgW10pLFxuICAgICAgcGluQ29kZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGlzQ2FkcmU6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgICAgdHlwZU9mQ2l2aWxTZXJ2aWNlOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgc2VydmljZVR5cGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBjYWRyZU5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBjYWRyZUJhdGNoOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIG90aGVyRGVzaWduYXRpb246IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbjogbmV3IEZvcm1Db250cm9sKCcnKVxuICAgIH0pXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlXG4gICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdCA9IHRoaXMuY29uZmlnU3JjLnVuTWFwcGVkVXNlclxuICAgIHRoaXMub3JnYW5pc2F0aW9uSWQgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncm9vdE9yZ0lkJywgXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3BlcnNvbmFsRGV0YWlscy5yb290T3JnSWQnLCAnJykpXG5cbiAgICB0aGlzLm90cEZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIG90cDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgIH0pXG4gICAgdGhpcy5lbWFpbE90cEZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIGVPdHA6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgICB9KVxuXG4gICAgLy8gVG8gY2hlY2sgdGhlIG1vYmlsZSBudW1iZXIgZW50ZXJlZCBieSB0aGUgdXNlciBpcyBzYW1lIG9yIG5vdCwgdmFsaWRhdGluZyB0aGUgbW9iaWxlIG51bWJlciB0byBzaG93IHRoZSBHZXQgT1RQLlxuICAgIGlmICh0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpKSB7XG4gICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpIS52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIGlmIChyZXMgJiYgcmVzICE9PSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUgfHxcbiAgICAgICAgICAgICF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5waG9uZVZlcmlmaWVkKSB7XG4gICAgICAgICAgICBpZiAoTU9CSUxFX1BBVFRFUk4udGVzdChyZXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMudmVyaWZ5TW9iaWxlID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLm1WZXJpZmllZCA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnZlcmlmeU1vYmlsZSA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmVyaWZ5TW9iaWxlID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gVG8gY2hlY2sgdGhlIGVtYWlsIGVudGVyZWQgYnkgdGhlIHVzZXIgaXMgc2FtZSBvciBub3QsIHZhbGlkYXRpbmcgdGhlIGVtYWlsIHRvIHNob3cgdGhlIEdldCBPVFAuXG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykpIHtcbiAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykhLnZhbHVlQ2hhbmdlc1xuICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMgIT09IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCkge1xuICAgICAgICAgICAgaWYgKEVNQUlMX1BBVFRFUk4udGVzdChyZXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMudmVyaWZ5RW1haWwgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMuZVZlcmlmaWVkID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMudmVyaWZ5RW1haWwgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZlcmlmeUVtYWlsID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBzY3JvbGxUb0FjdGl2ZSh0eXBlOiBhbnkpOiB2b2lkIHtcbiAgICBsZXQgYWN0aXZlRWxlbWVudDogYW55XG4gICAgbGV0IGNvbnRhaW5lcjogYW55XG4gICAgaWYgKHR5cGUgPT09ICdsYW5ndWFnZScpIHtcbiAgICAgIGNvbnRhaW5lciA9IHRoaXMubGFuZ3VhZ2VEcm9wZG93bi5uYXRpdmVFbGVtZW50XG4gICAgICBhY3RpdmVFbGVtZW50ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5sYW5ndWFnZS1pdGVtLWFjdGl2ZScpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnZGVzaWduYXRpb24nKSB7XG4gICAgICBjb250YWluZXIgPSB0aGlzLmRyb3Bkb3duLm5hdGl2ZUVsZW1lbnRcbiAgICAgIGFjdGl2ZUVsZW1lbnQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLml0ZW0tYWN0aXZlJylcbiAgICB9XG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuXG4gIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgaWYgKFxuICAgICAgdGhpcy50ZXh0Qm94ICYmICF0aGlzLnRleHRCb3gubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja2VkRWxlbWVudCkgJiZcbiAgICAgIHRoaXMuZHJvcGRvd24gJiYgIXRoaXMuZHJvcGRvd24ubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja2VkRWxlbWVudClcbiAgICApIHtcbiAgICAgIHRoaXMub3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gPSBmYWxzZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmxhbmd1YWdlVGV4dEJveCAmJiAhdGhpcy5sYW5ndWFnZVRleHRCb3gubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja2VkRWxlbWVudCkgJiZcbiAgICAgIHRoaXMubGFuZ3VhZ2VEcm9wZG93biAmJiAhdGhpcy5sYW5ndWFnZURyb3Bkb3duLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoY2xpY2tlZEVsZW1lbnQpXG4gICAgKSB7XG4gICAgICB0aGlzLm9wZW5MYW5ndWFnZURyb3Bkb3duID0gZmFsc2VcbiAgICB9XG4gIH1cbiAgb25EZXNpZ25hdGlvbnNGb2N1cygpIHtcbiAgICAvLyB0aGlzLm9wZW5EZXNpZ25hdGlvbkRyb3Bkb3duID0gdHJ1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZSgnZGVzaWduYXRpb24nKVxuICAgIH0sIDEwMClcbiAgfVxuICBvbkxhbmd1YWdlRm9jdXMoKSB7XG4gICAgdGhpcy5vcGVuTGFuZ3VhZ2VEcm9wZG93biA9IHRydWVcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmUoJ2xhbmd1YWdlJylcbiAgICB9LCAxMDApXG4gIH1cblxuICBmaWx0ZXJMYW5ndWFnZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy5tYXN0ZXJMYW5ndWFnZXMgPSB0aGlzLm1hc3Rlckxhbmd1YWdlQmFja3VwLmZpbHRlcigodmFsOiBhbnkpID0+XG4gICAgICAgIHZhbCAmJiB2YWwubmFtZS50cmltKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgICAgaWYgKHRoaXMubWFzdGVyTGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zdCB1c2VybmFtZUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2RvbWljaWxlTWVkaXVtJylcbiAgICAgICAgaWYgKHVzZXJuYW1lQ29udHJvbCkge1xuICAgICAgICAgIHVzZXJuYW1lQ29udHJvbC5zZXRFcnJvcnMoeyByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9wZW5MYW5ndWFnZURyb3Bkb3duID0gdHJ1ZVxuICB9XG5cbiAgLy8gZmlsdGVyZGVzaWduYXRpb24odmFsdWU6IGFueSkge1xuICAvLyAgIGlmICh2YWx1ZS5sZW5ndGgpIHtcbiAgLy8gICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPXRydWVcbiAgLy8gICAgIHRoaXMuZmlsdGVyRGVzaWduYXRpb25zTWV0YSA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5maWx0ZXIoKHZhbDogYW55KSA9PlxuICAvLyAgICAgICB2YWwgJiYgdmFsLm5hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgLy8gICAgIClcbiAgLy8gICAgIGlmICh0aGlzLmZpbHRlckRlc2lnbmF0aW9uc01ldGEubGVuZ3RoID09PSAwKSB7XG4gIC8vICAgICAgIGNvbnN0IHVzZXJuYW1lQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZGVzaWduYXRpb24nKVxuICAvLyAgICAgICBpZiAodXNlcm5hbWVDb250cm9sKSB7XG4gIC8vICAgICAgICAgdXNlcm5hbWVDb250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHRoaXMuZmlsdGVyRGVzaWduYXRpb25zTWV0YSA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5zbGljZSgwLCB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudClcbiAgLy8gICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPWZhbHNlXG5cbiAgLy8gICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG4gIC8vICAgfVxuICAvLyAgIC8vIHRoaXMub3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gPSB0cnVlXG4gIC8vIH1cblxuICAvLyBhc3luYyBnZXRNYXN0ZXJEZXNpZ25hdGlvbigpIHtcbiAgLy8gICB0aGlzLnNpZ251cFNlcnZpY2UuZ2V0T3JnUmVhZERhdGEodGhpcy51c2VyUHJvZmlsZU9iamVjdC5yb290T3JnSWQpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgLy8gICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmZyYW1ld29ya2lkKSB7XG4gIC8vICAgICAgIHRoaXMuc2lnbnVwU2VydmljZS5nZXRGcmFtZXdvcmtJbmZvKHJlc3VsdC5mcmFtZXdvcmtpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnN0IGZyYW1ld29ya0RldGFpbHMgPSBfLmdldChyZXMsICdyZXN1bHQuZnJhbWV3b3JrJylcbiAgLy8gICAgICAgICBjb25zdCBjYXRlZ29yaWVzT2ZGcmFtZXdvcmsgPSBfLmdldChmcmFtZXdvcmtEZXRhaWxzLCAnY2F0ZWdvcmllcycsIFtdKVxuICAvLyAgICAgICAgIGNvbnN0IG9yZ2FuaXNhdGlvbnNMaXN0ID0gdGhpcy5nZXRUZXJtc0J5Q29kZShjYXRlZ29yaWVzT2ZGcmFtZXdvcmssICdvcmcnKVxuICAvLyAgICAgICAgIGNvbnN0IGRpc09yZGVyZWRMaXN0ID0gXy5nZXQob3JnYW5pc2F0aW9uc0xpc3QsICdbMF0uY2hpbGRyZW4nLCBbXSlcbiAgLy8gICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc01ldGEgPSBfLnNvcnRCeShkaXNPcmRlcmVkTGlzdCwgJ25hbWUnKVxuICAvLyAgICAgICAgIHRoaXMuZmlsdGVyRGVzaWduYXRpb25zTWV0YSA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5zbGljZSgwLCB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudClcbiAgLy8gICAgICAgICBpZiAodGhpcy5jYW5TaG93RGVzaWduYXRpb24pIHtcbiAgLy8gICAgICAgICAgIGxldCBmaWVsZCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZGVzaWduYXRpb24nKVxuICAvLyAgICAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLnZhbHVlKSB7XG4gIC8vICAgICAgICAgICAgIGxldCBfdmFsdWUgPSBmaWVsZC52YWx1ZS50b0xvd2VyQ2FzZSgpXG4gIC8vICAgICAgICAgICAgIGlmICghdGhpcy5kZXNpZ25hdGlvbnNNZXRhLmZpbmQoKGQ6IGFueSkgPT4gZC5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IF92YWx1ZSkpIHtcbiAgLy8gICAgICAgICAgICAgICBmaWVsZC5wYXRjaFZhbHVlKCcnKVxuICAvLyAgICAgICAgICAgICB9XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAvLyAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9jY3VycmVkOicsIGVycm9yKVxuICAvLyAgICAgICB9KVxuICAvLyAgICAgfVxuICAvLyAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gIC8vICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9jY3VycmVkOicsIGVycm9yKVxuICAvLyAgIH0pXG4gIC8vIH1cblxuICAvLyBwcml2YXRlIGdldFRlcm1zQnlDb2RlKGNhdGVnb3JpZXM6IGFueVtdLCBjb2RlOiBzdHJpbmcpIHtcbiAgLy8gICBjb25zdCBzZWxlY3RlZENhdGVnb3J5ID0gY2F0ZWdvcmllcy5maWx0ZXIoXG4gIC8vICAgICAoY2F0ZWdvcnk6IGFueSkgPT4gY2F0ZWdvcnkuY29kZSA9PT0gY29kZVxuICAvLyAgICk7XG4gIC8vICAgcmV0dXJuIF8uZ2V0KHNlbGVjdGVkQ2F0ZWdvcnksICdbMF0udGVybXMnLCBbXSk7XG4gIC8vIH1cblxuICBwcmV2ZW50Qmx1cihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgfVxuICBwcmV2ZW50TGFuZ3VhZ2VCbHVyKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgc2VsZWN0RGVzaWduYXRpb24oZGVzaWduYXRpb246IGFueSkge1xuICAgIHRoaXMudXNlckRldGFpbHNGb3JtLnBhdGNoVmFsdWUoeyBkZXNpZ25hdGlvbjogZGVzaWduYXRpb24gfSlcbiAgICBjb25zdCBmaWVsZENvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ290aGVyRGVzaWduYXRpb24nKVxuICAgIGlmICh0aGlzLnNob3dEb3B0Q2hhbmdlcyAmJiBkZXNpZ25hdGlvbiA9PT0gJ090aGVycycpIHtcbiAgICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgICAgZmllbGRDb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgfVxuICAgICAgdGhpcy5jYW5TaG93T3RoZXJEZXNpZ25hdGlvbiA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICBmaWVsZENvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKClcbiAgICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgfVxuICAgICAgdGhpcy5jYW5TaG93T3RoZXJEZXNpZ25hdGlvbiA9IGZhbHNlXG4gICAgfVxuICAgIHRoaXMub3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gPSBmYWxzZVxuICB9XG5cblxuICBzZWxlY3RMYW5ndWFnZShsYW5ndWFnZTogYW55KSB7XG4gICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0ucGF0Y2hWYWx1ZSh7IGRvbWljaWxlTWVkaXVtOiBsYW5ndWFnZSB9KVxuICAgIHRoaXMub3Blbkxhbmd1YWdlRHJvcGRvd24gPSBmYWxzZVxuICB9XG5cbiAgaXNFbWFpbEFsbG93ZWQoZW1haWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRvbWFpbiA9IGVtYWlsLnNwbGl0KCdAJylbMV1cbiAgICByZXR1cm4gZG9tYWluID8gdGhpcy5hcHByb3ZlZERvbWFpbkxpc3QuaW5jbHVkZXMoZG9tYWluKSA6IGZhbHNlXG4gIH1cblxuICBoYW5kbGVHZW5lcmF0ZUVtYWlsT1RQKHZlcmlmeVR5cGU/OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyh2ZXJpZnlUeXBlKVxuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLmdldFdoaXRlTGlzdERvbWFpbigpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdCAmJiByZXNwb25zZS5yZXN1bHQuZG9tYWlucyAmJiByZXNwb25zZS5yZXN1bHQuZG9tYWlucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYXBwcm92ZWREb21haW5MaXN0ID0gcmVzcG9uc2UucmVzdWx0LmRvbWFpbnNcbiAgICAgICAgaWYgKHRoaXMuYXBwcm92ZWREb21haW5MaXN0ICYmIHRoaXMuYXBwcm92ZWREb21haW5MaXN0Lmxlbmd0aCAmJiB0aGlzLmFwcHJvdmVkRG9tYWluTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbWFpbEFsbG93ZWQodGhpcy51c2VyRGV0YWlsc0Zvcm0udmFsdWVbJ3ByaW1hcnlFbWFpbCddKSkge1xuICAgICAgICAgICAgdGhpcy5vdHBTZXJ2aWNlLnNlbmRFbWFpbE90cCh0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZVsncHJpbWFyeUVtYWlsJ10pXG4gICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1haWxPdHBGb3JtLnJlc2V0KClcbiAgICAgICAgICAgICAgICBpZiAodmVyaWZ5VHlwZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lbWFpbE90cFNlbnQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RW1haWxUaW1lcigpXG4gICAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnb3RwU2VudEVtYWlsJykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ2VtYWlsT1RQU2VudEZhaWwnKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnZW1haWxBcHByb3ZlZFBvcHVwTXNnJykpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGhhbmRsZUdlbmVyYXRlT1RQKHZlcmlmeVR5cGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm90cFNlcnZpY2Uuc2VuZE90cCh0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZVsnbW9iaWxlJ10pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgoX3JlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdvdHBTZW50TW9iaWxlJykpXG4gICAgICAgIHRoaXMub3RwRm9ybS5yZXNldCgpXG4gICAgICAgIGlmICh2ZXJpZnlUeXBlKSB7XG4gICAgICAgICAgdGhpcy5vdHBTZW50ID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcigpXG4gICAgICAgICAgLy90aGlzLmhhbmRsZVZlcmlmeU9UUCh2ZXJpZnlUeXBlLCB0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZVsnbW9iaWxlJ10pXG4gICAgICAgIH1cbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdtb2JpbGVPVFBTZW50RmFpbCcpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgaGFuZGxlUmVzZW5kT1RQKCk6IHZvaWQge1xuICAgIHRoaXMudGltZUxlZnQgPSAxNTBcbiAgICB0aGlzLnNob3dSZXNlbmRPVFAgPSB0cnVlXG4gICAgdGhpcy5zdGFydFRpbWVyKClcbiAgICBsZXQgb3RwVmFsdWUkOiBhbnlcbiAgICBvdHBWYWx1ZSQgPSB0aGlzLm90cFNlcnZpY2UucmVzZW5kT3RwKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZSlcblxuICAgIG90cFZhbHVlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ290cFNlbnRNb2JpbGUnKSlcbiAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGlmICghZXJyb3Iub2spIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXy5nZXQoZXJyb3IsICdlcnJvci5wYXJhbXMuZXJybXNnJykgfHwgJ1VuYWJsZSB0byByZXNlbmQgT1RQLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBoYW5kbGVSZXNlbmRFbWFpbE9UUCgpOiB2b2lkIHtcbiAgICB0aGlzLmVtYWlsVGltZUxlZnQgPSAxNTBcbiAgICB0aGlzLnNob3dFbWFpbFJlc2VuZE9UUCA9IHRydWVcbiAgICB0aGlzLnN0YXJ0RW1haWxUaW1lcigpXG4gICAgbGV0IG90cFZhbHVlJDogYW55XG4gICAgb3RwVmFsdWUkID0gdGhpcy5vdHBTZXJ2aWNlLnNlbmRFbWFpbE90cCh0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncHJpbWFyeUVtYWlsJ10udmFsdWUpXG4gICAgb3RwVmFsdWUkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QkKSlcbiAgICAgIC5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnb3RwU2VudEVtYWlsJykpXG4gICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIWVycm9yLm9rKSB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKF8uZ2V0KGVycm9yLCAnZXJyb3IucGFyYW1zLmVycm1zZycpIHx8ICdVbmFibGUgdG8gcmVzZW5kIE9UUCwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEnKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgdmVyaWZ5RW1haWxPVFAoKTogdm9pZCB7XG4gICAgdGhpcy5vdHBTZXJ2aWNlLnZlcmlmeUVtYWlsT1RQKHRoaXMuZW1haWxPdHBGb3JtLmNvbnRyb2xzWydlT3RwJ10udmFsdWUsIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydwcmltYXJ5RW1haWwnXS52YWx1ZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ09UUFNlbnRTdWNjZXNzJykpXG4gICAgICAgIHRoaXMudmVyaWZ5RW1haWwgPSB0cnVlXG4gICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmVtYWlsT3RwU2VudCA9IGZhbHNlXG4gICAgICAgIHRoaXMuY29udGV4dFRva2VuID0gX3Jlcy5yZXN1bHQuY29udGV4dFRva2VuXG4gICAgICAgIHRoaXMuZW1haWxPdHBGb3JtLnJlc2V0KClcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihfLmdldChlcnJvciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCB0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdPVFBWZXJpZnlGYWlsZWQnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIHZlcmlmeU1vYmlsZU9UUCgpOiB2b2lkIHtcbiAgICB0aGlzLm90cFNlcnZpY2UudmVyaWZ5T1RQKHRoaXMub3RwRm9ybS5jb250cm9sc1snb3RwJ10udmFsdWUsIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ09UUFNlbnRTdWNjZXNzJykpXG4gICAgICAgIHRoaXMudmVyaWZ5TW9iaWxlID0gdHJ1ZVxuICAgICAgICB0aGlzLm1WZXJpZmllZCA9IHRydWVcbiAgICAgICAgdGhpcy5vdHBTZW50ID0gZmFsc2VcbiAgICAgICAgdGhpcy5vdHBGb3JtLnJlc2V0KClcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihfLmdldChlcnJvciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCB0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdPVFBWZXJpZnlGYWlsZWQnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIHN0YXJ0VGltZXIoKSB7XG4gICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRpbWVMZWZ0ID4gMCkge1xuICAgICAgICB0aGlzLnRpbWVMZWZ0ID0gdGhpcy50aW1lTGVmdCAtIDFcbiAgICAgICAgaWYgKHRoaXMudGltZXJEaXYpIHtcbiAgICAgICAgICB0aGlzLnRpbWVyRGl2Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gYCR7TWF0aC5mbG9vcih0aGlzLnRpbWVMZWZ0IC8gNjApfW06ICR7dGhpcy50aW1lTGVmdCAlIDYwfXNgXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbClcbiAgICAgICAgdGhpcy5zaG93UmVzZW5kT1RQID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sIDEwMDApXG4gIH1cblxuICBzdGFydEVtYWlsVGltZXIoKSB7XG4gICAgdGhpcy5lbWFpbEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZW1haWxUaW1lTGVmdCA+IDApIHtcbiAgICAgICAgdGhpcy5lbWFpbFRpbWVMZWZ0ID0gdGhpcy5lbWFpbFRpbWVMZWZ0IC0gMVxuICAgICAgICBpZiAodGhpcy5lbWFpbFRpbWVyRGl2KSB7XG4gICAgICAgICAgdGhpcy5lbWFpbFRpbWVyRGl2Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gYCR7TWF0aC5mbG9vcih0aGlzLmVtYWlsVGltZUxlZnQgLyA2MCl9bTogJHt0aGlzLmVtYWlsVGltZUxlZnQgJSA2MH1zYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuZW1haWxJbnRlcnZhbClcbiAgICAgICAgdGhpcy5zaG93RW1haWxSZXNlbmRPVFAgPSB0cnVlXG4gICAgICB9XG4gICAgfSwgMTAwMClcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0FmdGVyU3VibWl0KF9lOiBhbnkpIHtcbiAgICAvLyB0aGlzLnJlbmRlclN1YmplY3QubmV4dCgpXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnRm9ybSBpcyBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5JylcbiAgICBpZiAodGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzICYmXG4gICAgICB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZVwiKSB7XG4gICAgICB0aGlzLnN1Ym1pdFN1cmV2eSh0cnVlKVxuICAgIH1cbiAgICBpZiAodGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzICYmICF0aGlzLnVwZGF0ZVByb2ZpbGUgJiZcbiAgICAgICh0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiRnVsbCBpR09UIHByb2ZpbGVcIiB8fFxuICAgICAgICB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiQ3VzdG9tIGlHT1QgcHJvZmlsZVwiKSkge1xuICAgICAgdGhpcy5zdWJtaXRTdXJldnkodHJ1ZSlcbiAgICB9XG4gICAgdGhpcy5vcGVuU25hY2tiYXIoJ0Zvcm0gaXMgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSlcbiAgfVxuXG4gIGNsb3NlUG9wdXAoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSlcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNuYWNrYmFyKHByaW1hcnlNc2c6IHN0cmluZywgZHVyYXRpb246IG51bWJlciA9IDUwMDApIHtcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocHJpbWFyeU1zZywgJ1gnLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICB9KVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtSWQgPSBfLmdldCh0aGlzLmRhdGEsICdiYXRjaERhdGEuYmF0Y2hBdHRyaWJ1dGVzLnByb2ZpbGVTdXJ2ZXlJZCcpXG4gICAgdGhpcy5nZXRGb3JtRGV0YWlscygpXG4gICAgdGhpcy5zZXRWYWx1ZUNoYW5nZUZ1bmN0aW9ucygpXG4gICAgdGhpcy5mZXRjaENhZHJlRGF0YSgpXG4gICAgdGhpcy5nZXRHcm91cERhdGEoKVxuICAgIHRoaXMuZ2V0UGVuZGluZ0RldGFpbHMoKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gdGhpcy5sb2FkRGVzaWduYXRpb25zKClcbiAgICAgIHRoaXMuY2hlY2tTZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucygpO1xuICAgICAgLy90aGlzLmdldE1hc3RlckRlc2lnbmF0aW9uKClcbiAgICAgIHRoaXMuZ2V0TWFzdGVyTGFuZ3VhZ2UoKVxuICAgIH0sIDUwMClcbiAgfVxuXG4gIGdldEZvcm1EZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLmZvcm1JZCkge1xuICAgICAgdGhpcy5wcm9maWxlVjJTdmMuZ2V0Rm9ybVYyQnlJRCh0aGlzLmZvcm1JZCkuc3Vic2NyaWJlKChyZXNwb25jZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25jZSkge1xuICAgICAgICAgIHRoaXMuZm9ybXNEZXRpbHMgPSBfLmdldChyZXNwb25jZSwgJ3Jlc3VsdC5yZXNwb25zZScsIHt9KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHNldFZhbHVlQ2hhbmdlRnVuY3Rpb25zKCkge1xuICAgIGNvbnN0IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKVxuICAgIGlmIChzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wpIHtcbiAgICAgIGxldCBzZXR0aW5nVmFsdWVDaGFuZ2UgPSB0cnVlXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzdGFydFdpdGgoJycpLFxuICAgICAgKS5zdWJzY3JpYmUoc2VhcmNoVGV4dCA9PiB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQgPSAwXG4gICAgICAgICAgaWYgKHNlYXJjaFRleHQgJiYgc2VhcmNoVGV4dC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSBzZWFyY2hUZXh0XG4gICAgICAgICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKVxuICAgICAgICAgIH0gZWxzZSBpZiAoIXNlYXJjaFRleHQpIHtcbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9IHNlYXJjaFRleHRcbiAgICAgICAgICAgIGlmKCFzZXR0aW5nVmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKCkgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIHNldHRpbmdWYWx1ZUNoYW5nZSA9IGZhbHNlXG4gICAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZmV0Y2hDYWRyZURhdGEoKSB7XG4gICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICB0aGlzLnByb2ZpbGVWMlN2Yy5mZXRjaENhZHJlKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgdGhpcy5jaXZpbFNlcnZpY2VEYXRhID0gcmVzcG9uc2UucmVzdWx0LnJlc3BvbnNlLnZhbHVlLmNpdmlsU2VydmljZVR5cGVcbiAgICAgIHRoaXMuY2l2aWxTZXJ2aWNlVHlwZXMgPSB0aGlzLmNpdmlsU2VydmljZURhdGEuY2l2aWxTZXJ2aWNlVHlwZUxpc3QubWFwKChzZXJ2aWNlOiBhbnkpID0+IHNlcnZpY2UubmFtZSlcbiAgICB9KVxuICB9XG5cbiAgZ2V0SXNDYWRyZVN0YXR1cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNDYWRyZVN0YXR1cyA9IHZhbHVlXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgdHlwZU9mQ2l2aWxTZXJ2aWNlOiAnJyxcbiAgICAgICAgc2VydmljZVR5cGU6ICcnLFxuICAgICAgICBjYWRyZU5hbWU6ICcnLFxuICAgICAgICBjYWRyZUJhdGNoOiAnJyxcbiAgICAgICAgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eTogJycsXG4gICAgICB9KVxuICAgICAgdGhpcy5hZGRWYWxpZGF0b3JzKClcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd0JhdGNoRm9yTm9DYWRyZSA9IGZhbHNlXG4gICAgICB0aGlzLnJlbW92ZVZhbGlkYXRvcnMoKVxuICAgIH1cbiAgfVxuXG4gIGdldEFsbEVycm9ycygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlczogc3RyaW5nW10gPSBbXTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9scykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sRXJyb3JzID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNba2V5XS5lcnJvcnM7XG4gICAgICBpZiAoY29udHJvbEVycm9ycykge1xuICAgICAgICBPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKChlcnJvcktleSkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZXJyb3JLZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGAke2tleX0gaXMgcmVxdWlyZWQuYCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWlubGVuZ3RoJzpcbiAgICAgICAgICAgICAgY29uc3QgcmVxdWlyZWRMZW5ndGggPSBjb250cm9sRXJyb3JzWydtaW5sZW5ndGgnXS5yZXF1aXJlZExlbmd0aDtcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGAke2tleX0gbXVzdCBiZSBhdCBsZWFzdCAke3JlcXVpcmVkTGVuZ3RofSBjaGFyYWN0ZXJzIGxvbmcuYCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VzLnB1c2goYFBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuYCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gQWRkIG1vcmUgY2FzZXMgZm9yIG90aGVyIHZhbGlkYXRvcnMgYXMgbmVlZGVkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JNZXNzYWdlcztcbiAgfVxuXG4gIGFkZFZhbGlkYXRvcnMoKSB7XG4gICAgY29uc3QgZmllbGRDb250cm9sMCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpXG4gICAgaWYgKGZpZWxkQ29udHJvbDApIHtcbiAgICAgIGZpZWxkQ29udHJvbDAuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgZmllbGRDb250cm9sMC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCd0eXBlT2ZDaXZpbFNlcnZpY2UnKVxuICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICBmaWVsZENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgfVxuICAgIGNvbnN0IGZpZWxkQ29udHJvbDEgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJylcbiAgICBpZiAoZmllbGRDb250cm9sMSkge1xuICAgICAgZmllbGRDb250cm9sMS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICBmaWVsZENvbnRyb2wxLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZENvbnRyb2wzID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUJhdGNoJylcbiAgICBpZiAoZmllbGRDb250cm9sMykge1xuICAgICAgZmllbGRDb250cm9sMy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICBmaWVsZENvbnRyb2wzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVZhbGlkYXRvcnMoKSB7XG4gICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCd0eXBlT2ZDaXZpbFNlcnZpY2UnKVxuICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgIGZpZWxkQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKVxuICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZENvbnRyb2wxID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpXG4gICAgaWYgKGZpZWxkQ29udHJvbDEpIHtcbiAgICAgIGZpZWxkQ29udHJvbDEuY2xlYXJWYWxpZGF0b3JzKClcbiAgICAgIGZpZWxkQ29udHJvbDEudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgfVxuICAgIGNvbnN0IGZpZWxkQ29udHJvbDIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlTmFtZScpXG4gICAgaWYgKGZpZWxkQ29udHJvbDIpIHtcbiAgICAgIGZpZWxkQ29udHJvbDIuY2xlYXJWYWxpZGF0b3JzKClcbiAgICAgIGZpZWxkQ29udHJvbDIudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgfVxuICAgIGNvbnN0IGZpZWxkQ29udHJvbDMgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQmF0Y2gnKVxuICAgIGlmIChmaWVsZENvbnRyb2wzKSB7XG4gICAgICBmaWVsZENvbnRyb2wzLmNsZWFyVmFsaWRhdG9ycygpXG4gICAgICBmaWVsZENvbnRyb2wzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgfVxuXG4gIGdldFNlcnZpY2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHNlcnZpY2VUeXBlQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKVxuICAgIGNvbnN0IGNhZHJlQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVOYW1lJylcbiAgICBjb25zdCBiYXRjaENvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQmF0Y2gnKVxuICAgIGNvbnN0IGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5JylcblxuICAgIGlmIChzZXJ2aWNlVHlwZUNvbnRyb2wpIHsgc2VydmljZVR5cGVDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChjYWRyZUNvbnRyb2wpIHsgY2FkcmVDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChiYXRjaENvbnRyb2wpIHsgYmF0Y2hDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbCkgeyBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbC5yZXNldCgpIH1cblxuICAgIHRoaXMuc2VydmljZVR5cGUgPSB0aGlzLmNpdmlsU2VydmljZURhdGEuY2l2aWxTZXJ2aWNlVHlwZUxpc3QuZmluZCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IGV2ZW50KVxuICAgIHRoaXMuc2VydmljZVR5cGUgPSB0aGlzLmNpdmlsU2VydmljZURhdGEuY2l2aWxTZXJ2aWNlVHlwZUxpc3QuZmluZCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IGV2ZW50KVxuICAgIGlmICh0aGlzLnNlcnZpY2VUeXBlKSB7XG4gICAgICB0aGlzLnNlcnZpY2VMaXN0RGF0YSA9IHRoaXMuc2VydmljZVR5cGUuc2VydmljZUxpc3RcbiAgICAgIHRoaXMuc2VydmljZU5hbWUgPSB0aGlzLnNlcnZpY2VMaXN0RGF0YS5tYXAoKHNlcnZpY2U6IGFueSkgPT4gc2VydmljZS5uYW1lKVxuICAgICAgdGhpcy5zZXJ2aWNlSWQgPSB0aGlzLnNlcnZpY2VUeXBlLmlkXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ1NlcnZpY2UgVHlwZSBub3QgZm91bmQnXG4gICAgfVxuICB9XG5cbiAgb25TZXJ2aWNlU2VsZWN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBjYWRyZUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlTmFtZScpXG4gICAgY29uc3QgYmF0Y2hDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUJhdGNoJylcbiAgICBjb25zdCBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eScpXG4gICAgaWYgKGNhZHJlQ29udHJvbCkgeyBjYWRyZUNvbnRyb2wucmVzZXQoKSB9XG4gICAgaWYgKGJhdGNoQ29udHJvbCkgeyBiYXRjaENvbnRyb2wucmVzZXQoKSB9XG4gICAgaWYgKGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlDb250cm9sKSB7IGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlDb250cm9sLnJlc2V0KCkgfVxuICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlTmFtZSA9IGV2ZW50LnZhbHVlXG4gICAgaWYgKHRoaXMuc2VydmljZUxpc3REYXRhKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU2VydmljZSA9IHRoaXMuc2VydmljZUxpc3REYXRhLmZpbmQoKHNlcnZpY2U6IGFueSkgPT4gc2VydmljZS5uYW1lID09PSB0aGlzLnNlbGVjdGVkU2VydmljZU5hbWUpXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5jaXZpbFNlcnZpY2VOYW1lID0gdGhpcy5zZWxlY3RlZFNlcnZpY2UubmFtZVxuICAgICAgICB0aGlzLmNpdmlsU2VydmljZUlkID0gdGhpcy5zZWxlY3RlZFNlcnZpY2UuaWRcbiAgICAgICAgdGhpcy5jYWRyZSA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlTGlzdCA/IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlTGlzdC5tYXAoKGNhZHJlOiBhbnkpID0+IGNhZHJlLm5hbWUpIDogW11cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlICYmIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHkpIHtcbiAgICAgIHRoaXMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eSA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5ID0gJ05BJ1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZFNlcnZpY2UgJiYgdGhpcy5zZWxlY3RlZFNlcnZpY2UuY2FkcmVMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zaG93QmF0Y2hGb3JOb0NhZHJlID0gdHJ1ZVxuICAgICAgdGhpcy5zdGFydEJhdGNoID0gdGhpcy5zZWxlY3RlZFNlcnZpY2UuY29tbW9uQmF0Y2hTdGFydFllYXJcbiAgICAgIHRoaXMuZW5kQmF0Y2ggPSB0aGlzLnNlbGVjdGVkU2VydmljZS5jb21tb25CYXRjaEVuZFllYXJcbiAgICAgIHRoaXMuZXhjbHVzaW9uWWVhciA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNvbW1vbkJhdGNoRXhjbHVzaW9uWWVhckxpc3RcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlXG4gICAgICB0aGlzLnllYXJBcnJheSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMuZW5kQmF0Y2ggLSB0aGlzLnN0YXJ0QmF0Y2ggKyAxIH0sIChfLCBpbmRleCkgPT4gdGhpcy5zdGFydEJhdGNoICsgaW5kZXgpXG4gICAgICAgIC5maWx0ZXIoeWVhciA9PiAhdGhpcy5leGNsdXNpb25ZZWFyLmluY2x1ZGVzKHllYXIpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dCYXRjaEZvck5vQ2FkcmUgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIG9uQ2FkcmVTZWxlY3QoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGJhdGNoQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVCYXRjaCcpXG4gICAgY29uc3QgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQ29udHJvbGxpbmdBdXRob3JpdHknKVxuXG4gICAgaWYgKGJhdGNoQ29udHJvbCkgeyBiYXRjaENvbnRyb2wucmVzZXQoKSB9XG4gICAgaWYgKGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlDb250cm9sKSB7IGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlDb250cm9sLnJlc2V0KCkgfVxuICAgIHRoaXMuc2VsZWN0ZWRDYWRyZU5hbWUgPSBldmVudFxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2VydmljZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENhZHJlID0gdGhpcy5zZWxlY3RlZFNlcnZpY2UuY2FkcmVMaXN0LmZpbmQoKGNhZHJlOiBhbnkpID0+IGNhZHJlLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRDYWRyZU5hbWUpXG4gICAgICB0aGlzLnN0YXJ0QmF0Y2ggPSB0aGlzLnNlbGVjdGVkQ2FkcmUgPyB0aGlzLnNlbGVjdGVkQ2FkcmUuc3RhcnRCYXRjaFllYXIgOiAnJ1xuICAgICAgdGhpcy5lbmRCYXRjaCA9IHRoaXMuc2VsZWN0ZWRDYWRyZSA/IHRoaXMuc2VsZWN0ZWRDYWRyZS5lbmRCYXRjaFllYXIgOiAnJ1xuICAgICAgdGhpcy5leGNsdXNpb25ZZWFyID0gdGhpcy5zZWxlY3RlZENhZHJlID8gdGhpcy5zZWxlY3RlZENhZHJlLmV4Y3Vsc2lvblllYXJMaXN0IDogJydcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlXG4gICAgICB0aGlzLnllYXJBcnJheSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMuZW5kQmF0Y2ggLSB0aGlzLnN0YXJ0QmF0Y2ggKyAxIH0sIChfLCBpbmRleCkgPT4gdGhpcy5zdGFydEJhdGNoICsgaW5kZXgpXG4gICAgICAgIC5maWx0ZXIoeWVhciA9PiAhdGhpcy5leGNsdXNpb25ZZWFyLmluY2x1ZGVzKHllYXIpKVxuICAgICAgdGhpcy5jYWRyZUlkID0gdGhpcy5zZWxlY3RlZENhZHJlID8gdGhpcy5zZWxlY3RlZENhZHJlLmlkIDogJydcbiAgICB9XG5cbiAgfVxuXG4gIGdldFBlbmRpbmdEZXRhaWxzKCkge1xuICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgKyAxXG4gICAgdGhpcy5wcm9maWxlVjJTdmMuZmV0Y2hBcHByb3ZhbERldGFpbHMoKS5zdWJzY3JpYmUoKHJlc3A6IGFueSkgPT4ge1xuICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgIGlmIChyZXNwICYmIHJlc3AucmVzdWx0ICYmIHJlc3AucmVzdWx0LmRhdGEpIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nRmlsZWRzID0gcmVzcC5yZXN1bHQuZGF0YVxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nRmlsZWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdGaWxlZHMuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodXNlclsnZ3JvdXAnXSkge1xuICAgICAgICAgICAgICBsZXQgY3RybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZ3JvdXAnKVxuICAgICAgICAgICAgICBpZiAoY3RybCkge1xuICAgICAgICAgICAgICAgIGN0cmwucGF0Y2hWYWx1ZSh7IGdyb3VwOiB1c2VyWydncm91cCddIH0pXG4gICAgICAgICAgICAgICAgdGhpcy5wR3JvdXAgPSB1c2VyWydncm91cCddXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1c2VyWydkZXNpZ25hdGlvbiddKSB7XG4gICAgICAgICAgICAgIGxldCBjdHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdkZXNpZ25hdGlvbicpXG4gICAgICAgICAgICAgIGlmIChjdHJsKSB7XG4gICAgICAgICAgICAgICAgY3RybC5wYXRjaFZhbHVlKHsgZGVzaWduYXRpb246IHVzZXJbJ2Rlc2lnbmF0aW9uJ10gfSlcbiAgICAgICAgICAgICAgICB0aGlzLnBEZXNpZ25hdGlvbiA9IHVzZXJbJ2Rlc2lnbmF0aW9uJ11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgIHRoaXMuZGVmaW5lRm9ybUF0dHJpYnV0ZXMoKVxuICAgIH0sIGVycm9yID0+IHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcilcbiAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgfSlcbiAgfVxuXG4gIGRlZmluZUZvcm1BdHRyaWJ1dGVzKCkge1xuICAgIGlmICh0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgJiZcbiAgICAgIHRoaXMuYmF0Y2hEZXRhaWxzLmJhdGNoQXR0cmlidXRlcy5icEVucm9sTWFuZGF0b3J5UHJvZmlsZUZpZWxkcykge1xuICAgICAgbGV0IGN1c3RvbUF0dHIgPSB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMuYnBFbnJvbE1hbmRhdG9yeVByb2ZpbGVGaWVsZHNcbiAgICAgIGNvbnNvbGUubG9nKFwiY3VzdG9tQXR0ciBcIiwgY3VzdG9tQXR0cilcbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICduYW1lJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93TmFtZSA9IHRydWVcbiAgICAgICAgdGhpcy5zaG93bmFtZSA9IHRydWVcbiAgICAgICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCduYW1lJylcbiAgICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWUpXG4gICAgICAgICAgZmllbGRDb250cm9sLmRpc2FibGUoKVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnICYmXG4gICAgICAgICAgIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmZpcnN0bmFtZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNhblNob3dOYW1lID0gZmFsc2VcbiAgICAgICAgICB0aGlzLnNob3duYW1lID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnZW1haWwnKSkge1xuICAgICAgICB0aGlzLmNhblNob3dFbWFpbCA9IHRydWVcbiAgICAgICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdwcmltYXJ5RW1haWwnKVxuICAgICAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbClcbiAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsKSB7XG4gICAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsKVxuICAgICAgICAgICAgdGhpcy5lVmVyaWZpZWQgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dFbWFpbCA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0VtYWlsID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lVmVyaWZpZWQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdvcmdhbmlzYXRpb24nKSkge1xuICAgICAgICB0aGlzLmNhblNob3dPcmcgPSB0cnVlXG4gICAgICAgIHRoaXMuc2hvd09yZyA9IHRydWVcbiAgICAgICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdvcmdhbmlzYXRpb24nKVxuICAgICAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZGVwYXJ0bWVudE5hbWUpXG4gICAgICAgICAgZmllbGRDb250cm9sLmRpc2FibGUoKVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnICYmXG4gICAgICAgICAgIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZGVwYXJ0bWVudE5hbWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jYW5TaG93T3JnID0gZmFsc2VcbiAgICAgICAgICB0aGlzLnNob3dPcmcgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdncm91cCcpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0dyb3VwID0gdHJ1ZVxuICAgICAgICB0aGlzLnNob3dHcm91cCA9IHRydWVcbiAgICAgICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdncm91cCcpXG4gICAgICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgICAgICBpZiAodGhpcy5wR3JvdXApIHtcbiAgICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnBHcm91cClcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMuY2FuU2hvd0dyb3VwID0gdHJ1ZVxuICAgICAgICAgICAgLy8gICB0aGlzLnNob3dHcm91cCA9IHRydWVcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscyAmJlxuICAgICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMubGVuZ3RoICYmXG4gICAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5ncm91cFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZ3JvdXApXG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5jYW5TaG93R3JvdXAgPSBmYWxzZVxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hvd0dyb3VwID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnZGVzaWduYXRpb24nKSkge1xuICAgICAgICB0aGlzLmNhblNob3dEZXNpZ25hdGlvbiA9IHRydWVcbiAgICAgICAgdGhpcy5zaG93RGVzaWduYXRpb24gPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZGVzaWduYXRpb24nKVxuICAgICAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICAgICAgaWYgKHRoaXMucERlc2lnbmF0aW9uKSB7XG4gICAgICAgICAgICBmaWVsZENvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLnBEZXNpZ25hdGlvbilcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMuY2FuU2hvd0Rlc2lnbmF0aW9uID0gdHJ1ZVxuICAgICAgICAgICAgLy8gICB0aGlzLnNob3dEZXNpZ25hdGlvbiA9IHRydWVcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscyAmJlxuICAgICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMubGVuZ3RoICYmXG4gICAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5kZXNpZ25hdGlvbikge1xuICAgICAgICAgICAgICBmaWVsZENvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZGVzaWduYXRpb24pXG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5jYW5TaG93RGVzaWduYXRpb24gPSBmYWxzZVxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hvd0Rlc2lnbmF0aW9uID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnZW1wbG95ZWVDb2RlJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93RW1wbG95ZWVDb2RlID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2VtcGxveWVlQ29kZScpXG4gICAgICAgIGlmIChjb250cmwpIHtcbiAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZSlcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oRU1QX0lEX1BBVFRFUk4pXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvZmlsZUZvcm1UeXBlID09PSAnQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZScpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuU2hvd0VtcGxveWVlQ29kZSA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0VtcGxveWVlQ29kZSA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oRU1QX0lEX1BBVFRFUk4pXSk7XG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdtb2JpbGUnKSkge1xuICAgICAgICB0aGlzLmNhbnNob3dNb2JpbGUgPSB0cnVlXG4gICAgICAgIGNvbnN0IGNvbnRybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnbW9iaWxlJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucGhvbmVWZXJpZmllZCkge1xuICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZSlcbiAgICAgICAgICAgIHRoaXMubVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICAgICAgY29udHJsLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMubWluTGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTApLCBWYWxpZGF0b3JzLnBhdHRlcm4oTU9CSUxFX1BBVFRFUk4pXSk7XG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhbnNob3dNb2JpbGUgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5tVmVyaWZpZWQgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd01vYmlsZSA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMCksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5wYXR0ZXJuKE1PQklMRV9QQVRURVJOKV0pO1xuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jYW5zaG93TW9iaWxlID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1WZXJpZmllZCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2dlbmRlcicpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0dlbmRlciA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdnZW5kZXInKVxuICAgICAgICBpZiAoY29udHJsKSB7XG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlcikge1xuICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlcilcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvZmlsZUZvcm1UeXBlID09PSAnQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZScpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuU2hvd0dlbmRlciA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0dlbmRlciA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2RvYicpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0RvYiA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdkb2InKVxuICAgICAgICBpZiAoY29udHJsKSB7XG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvYikge1xuICAgICAgICAgICAgbGV0IF9kb2I6IGFueSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvYlxuICAgICAgICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gX2RvYi5zcGxpdCgnLScpXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoTnVtYmVyKHllYXIpLCBOdW1iZXIobW9udGgpIC0gMSwgTnVtYmVyKGRheSkpXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXkgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZE1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUoYCR7Zm9ybWF0dGVkWWVhcn0tJHtmb3JtYXR0ZWRNb250aH0tJHtmb3JtYXR0ZWREYXl9YClcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkRGF0ZSlcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvZmlsZUZvcm1UeXBlID09PSAnQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZScpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuU2hvd0RvYiA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0RvYiA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2RvbWljaWxlTWVkaXVtJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93RG9taWNpbGVNZWRpdW0gPSB0cnVlXG4gICAgICAgIGNvbnN0IGNvbnRybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZG9taWNpbGVNZWRpdW0nKVxuICAgICAgICBpZiAoY29udHJsKSB7XG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtKSB7XG4gICAgICAgICAgICBjb250cmwuc2V0VmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9taWNpbGVNZWRpdW0pXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dEb21pY2lsZU1lZGl1bSA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0RlY2ltYWxNZWRpdW0gPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdjYXRlZ29yeScpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0NhdGVnb3J5ID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhdGVnb3J5JylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeSkge1xuICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5KVxuICAgICAgICAgICAgY29udHJsLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5TaG93Q2F0ZWdvcnkgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dDYXRlZ29yeSA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ3BpbkNvZGUnKSkge1xuICAgICAgICB0aGlzLmNhblNob3dwaW5Db2RlID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ3BpbkNvZGUnKVxuICAgICAgICBpZiAoY29udHJsKSB7XG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZSkge1xuICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZSlcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNiksIFZhbGlkYXRvcnMucGF0dGVybihQSU5fQ09ERV9QQVRURVJOKV0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dwaW5Db2RlID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UGluQ29kZSA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNiksIFZhbGlkYXRvcnMucGF0dGVybihQSU5fQ09ERV9QQVRURVJOKV0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdjYWRyZURldGFpbHMnKSkge1xuICAgICAgICB0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2lzQ2FkcmUnKVxuICAgICAgICBpZiAoY29udHJsKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzKS5pbmNsdWRlcygnaXNDYWRyZScpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuaXNDYWRyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBjb250cmwuc2V0VmFsdWUodHJ1ZSlcbiAgICAgICAgICAgICAgdGhpcy5pc0NhZHJlU3RhdHVzID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VJZCA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZVR5cGVJZFxuICAgICAgICAgICAgICB0aGlzLmNpdmlsU2VydmljZUlkID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlSWRcbiAgICAgICAgICAgICAgdGhpcy5jYWRyZUlkID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVJZFxuICAgICAgICAgICAgICB0aGlzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHkgPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZVxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlcnZpY2UodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlVHlwZSlcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VydmljZVNlbGVjdCh7IHZhbHVlOiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VOYW1lIH0pXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vbkNhZHJlU2VsZWN0KHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICB0eXBlT2ZDaXZpbFNlcnZpY2U6IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZVR5cGUsXG4gICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZTogdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgICAgICAgIGNhZHJlTmFtZTogdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVOYW1lLFxuICAgICAgICAgICAgICAgICAgY2FkcmVCYXRjaDogdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVCYXRjaCxcbiAgICAgICAgICAgICAgICAgIGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHk6IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlOYW1lLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0sIDEwMDApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb250cmwuc2V0VmFsdWUoZmFsc2UpXG4gICAgICAgICAgICAgIHRoaXMuaXNDYWRyZVN0YXR1cyA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuaXNDYWRyZVN0YXR1cyA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaW5kQXR0cihjdXN0b21BdHRyOiBhbnksIGZOYW1lOiBhbnkpIHtcbiAgICBpZiAoZk5hbWUgPT09ICduYW1lJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWUnKVxuICAgIH1cbiAgICBpZiAoZk5hbWUgPT09ICdlbWFpbCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnb3JnYW5pc2F0aW9uJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnZ3JvdXAnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscy5ncm91cCcpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2Rlc2lnbmF0aW9uJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMuZGVzaWduYXRpb24nKVxuICAgIH1cbiAgICBpZiAoZk5hbWUgPT09ICdlbXBsb3llZUNvZGUnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZW1wbG95ZWVDb2RlJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnbW9iaWxlJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUnKVxuICAgIH1cbiAgICBpZiAoZk5hbWUgPT09ICdnZW5kZXInKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlcicpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2RvYicpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9iJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnZG9taWNpbGVNZWRpdW0nKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnY2F0ZWdvcnknKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5JylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAncGluQ29kZScpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5waW5Db2RlJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnY2FkcmVEZXRhaWxzJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlJylcbiAgICB9XG5cbiAgfVxuXG4gIGZpbmRJblByb2ZpbGUoYXR0cjogc3RyaW5nKSB7XG4gICAgaWYgKGF0dHIgPT09ICduYW1lJykge1xuICAgICAgcmV0dXJuIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmZpcnN0TmFtZSB8fCB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWVcbiAgICB9XG4gICAgaWYgKGF0dHIgPT09ICdncm91cCcpIHtcbiAgICAgIHJldHVybiAoIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmlsZUdyb3VwU3RhdHVzKSB8fFxuICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2ZpbGVHcm91cFN0YXR1cyA9PT0gJ05PVC1WRVJJRklFRCcgfHwgKHRoaXMucEdyb3VwID8gdHJ1ZSA6IGZhbHNlKVxuICAgIH1cbiAgICBpZiAoYXR0ciA9PT0gJ2Rlc2lnbmF0aW9uJykge1xuICAgICAgcmV0dXJuICghdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9maWxlRGVzaWduYXRpb25TdGF0dXMpIHx8XG4gICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmlsZURlc2lnbmF0aW9uU3RhdHVzID09PSAnTk9ULVZFUklGSUVEJyB8fCAodGhpcy5wRGVzaWduYXRpb24gPyB0cnVlIDogZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgZ2V0R3JvdXBEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgKyAxXG4gICAgdGhpcy51c2VyUHJvZmlsZVNlcnZpY2UuZ2V0R3JvdXBzKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgICB0aGlzLmdyb3VwRGF0YSA9IHJlcy5yZXN1bHQgJiYgcmVzLnJlc3VsdC5yZXNwb25zZS5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUgIT09ICdPdGhlcnMnKVxuICAgICAgfSwgKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgICBpZiAoIWVycm9yLm9rKSB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ2dyb3VwRGF0YUZhaWxlJykpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBoYW5kbGVUcmFuc2xhdGVUbyhtZW51TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy51c2VyUHJvZmlsZVNlcnZpY2UuaGFuZGxlVHJhbnNsYXRlVG8obWVudU5hbWUpXG4gIH1cblxuICBjaGVja1NlbGVjdGVkT3JnSGFzRGVzaWduYXRpb25zKCk6IHZvaWQge1xuICAgIGlmKHRoaXMub3JnYW5pc2F0aW9uSWQpIHtcbiAgICAgIGNvbnN0IGlnb3REZXNpZ25hdGlvbkJvZHk6IGFueSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgIHN0YXR1czogJ0xpdmUnLFxuICAgICAgICAgICAgY2F0ZWdvcnk6ICdkZXNpZ25hdGlvbicsXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXG4gICAgICAgICAgICAgIHRoaXMub3JnYW5pc2F0aW9uSWQgKyAnX29kY3NfZGVzaWduYXRpb24nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG9iamVjdFR5cGU6ICdUZXJtJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpZWxkczogWyduYW1lJ10sXG4gICAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICAgIGxpbWl0OiAxLFxuICAgICAgICAgIHNvcnRfYnk6IHtcbiAgICAgICAgICAgIGxhc3RVcGRhdGVkT246ICdkZXNjJyxcbiAgICAgICAgICAgIG9iamVjdFR5cGU6ICdUZXJtJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhY2V0czogW10sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgdGhpcy51c2VyUHJvZmlsZVNlcnZpY2Uuc2VhcmNoSWdvdERlc2lnbmF0aW9uKGlnb3REZXNpZ25hdGlvbkJvZHkpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvdW50ID0gXy5nZXQocmVzLCAncmVzdWx0LmNvdW50JywgMCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucyA9IGNvdW50ID4gMDtcbiAgICAgICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkT3JnSGFzRGVzaWduYXRpb25zID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkT3JnSGFzRGVzaWduYXRpb25zID0gZmFsc2U7XG4gICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKTtcbiAgICB9XG4gIH1cblxuICBnZXRkZXNpZ25hdGlvbnNNZXRhKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPcmdIYXNEZXNpZ25hdGlvbnMpIHtcbiAgICAgIHRoaXMuZ2V0SWdvdERlc2lnbmF0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldERlZmF1bHREZXNpZ25hdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldElnb3REZXNpZ25hdGlvbnMoKSB7XG4gICAgY29uc3QgcmVxdWVzdEJvZHk6IGFueSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgIHN0YXR1czogXCJMaXZlXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZGVzaWduYXRpb25cIixcbiAgICAgICAgICBjYXRlZ29yaWVzOiBbXG4gICAgICAgICAgICB0aGlzLm9yZ2FuaXNhdGlvbklkICsgJ19vZGNzX2Rlc2lnbmF0aW9uJyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG9iamVjdFR5cGU6IFwiVGVybVwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkczogW1xuICAgICAgICAgIFwibmFtZVwiXG4gICAgICAgIF0sXG4gICAgICAgIG9mZnNldDogdGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQsXG4gICAgICAgIGxpbWl0OiB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCxcbiAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgIGxhc3RVcGRhdGVkT246IFwiZGVzY1wiLFxuICAgICAgICAgIG9iamVjdFR5cGU6IFwiVGVybVwiXG4gICAgICAgIH0sXG4gICAgICAgIGZhY2V0czogW11cbiAgICAgIH1cbiAgICB9O1xuICAgIGlmKHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0KXtcbiAgICAgIHJlcXVlc3RCb2R5WydyZXF1ZXN0J11bJ3F1ZXJ5J10gPSB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dDtcbiAgICB9XG4gICAgdGhpcy51c2VyUHJvZmlsZVNlcnZpY2Uuc2VhcmNoSWdvdERlc2lnbmF0aW9uKHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgICBpZih0aGlzLmRlc2lnbmF0aW9uc09mZnNldCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zTWV0YSA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5UZXJtJywgW10pIGFzIGRlc2lnbmF0aW9uW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNNZXRhID0gWy4uLnRoaXMuZGVzaWduYXRpb25zTWV0YSwgLi4uXy5nZXQocmVzLCAncmVzdWx0LlRlcm0nLCBbXSkgYXMgZGVzaWduYXRpb25bXV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNUb3RhbENvdW50ID0gXy5nZXQocmVzLCAncmVzdWx0LmNvdW50JywgMCk7XG4gICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG4gICAgICAgIHRoaXMub3BlblNuYWNrYmFyKCdTb21ldGhpbmcgd2VudCB3cm9uZy4gUGxlYXNlIHJlZnJlc2ggb3IgdHJ5IGFnYWluIGxhdGVyLicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIFxuICAgIHByaXZhdGUgZ2V0RGVmYXVsdERlc2lnbmF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICAgIGZpbHRlckNyaXRlcmlhTWFwOiB7XG4gICAgICAgICAgc3RhdHVzOiAnQWN0aXZlJ1xuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0ZWRGaWVsZHM6IFtdLFxuICAgICAgICBwYWdlTnVtYmVyOiB0aGlzLmRlc2lnbmF0aW9uc09mZnNldCxcbiAgICAgICAgcGFnZVNpemU6IHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQpIHtcbiAgICAgICAgcmVxdWVzdEJvZHlbJ3NlYXJjaFN0cmluZyddID0gdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHRcbiAgICAgIH1cbiAgICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLnNlYXJjaERlc2lnbmF0aW9uKHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC5kYXRhJywgW10pIGFzIGRlc2lnbmF0aW9uW107XG4gICAgICAgICAgY29uc3QgbWFwcGVkID0gY29udGVudC5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0uZGVzaWduYXRpb24gfHwgJycsXG4gICAgICAgICAgICBzdGF0dXM6IGl0ZW0uc3RhdHVzIHx8ICdBY3RpdmUnLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBpZiAodGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zTWV0YSA9IG1hcHBlZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNNZXRhID0gWy4uLnRoaXMuZGVzaWduYXRpb25zTWV0YSwgLi4ubWFwcGVkXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNUb3RhbENvdW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC50b3RhbENvdW50JywgMCk7XG4gICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm9wZW5TbmFja2JhcignU29tZXRoaW5nIHdlbnQgd3JvbmcuIFBsZWFzZSByZWZyZXNoIG9yIHRyeSBhZ2FpbiBsYXRlci4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gIGdldE1hc3Rlckxhbmd1YWdlKCk6IHZvaWQge1xuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLmdldE1hc3Rlckxhbmd1YWdlcygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5tYXN0ZXJMYW5ndWFnZXMgPSByZXMubGFuZ3VhZ2VzXG4gICAgICAgIHRoaXMubWFzdGVyTGFuZ3VhZ2VCYWNrdXAgPSByZXMubGFuZ3VhZ2VzXG4gICAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmICghZXJyb3Iub2spIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygndW5hYmxlRmV0Y2hNYXN0ZXJMYW5ndWFnZURhdGEnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIGhhbmRsZUVtcHR5KHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0eXBlID09PSAnbW9iaWxlJykge1xuICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZSAmJiAhdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ21vYmlsZSddLnZhbHVlKSB7XG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS5zZXRFcnJvcnMoeyB2YWxpZDogZmFsc2UgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdwcmltYXJ5RW1haWwnKSB7XG4gICAgICBpZiAoIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCAmJiAhdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy52YWx1ZVsncHJpbWFyeUVtYWlsJ10pIHtcbiAgICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0uc2V0RXJyb3JzKHsgdmFsaWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG4gIG9uU3VibWl0Rm9ybShmb3JtOiBhbnkpIHtcbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuICAgIGNvbnNvbGUubG9nKGZvcm0pXG4gICAgbGV0IHBheWxvYWQgPSB0aGlzLmdlbmVyYXRlUHJvZmlsZVBheWxvYWQoKVxuICAgIGlmICgodGhpcy5jYW5TaG93RGVzaWduYXRpb24gfHwgdGhpcy5jYW5TaG93R3JvdXApICYmICF0aGlzLnNob3dEb3B0Q2hhbmdlcykge1xuICAgICAgaWYgKHRoaXMucGVuZGluZ0ZpbGVkcykge1xuICAgICAgICB0aGlzLnBlbmRpbmdGaWxlZHMuZm9yRWFjaCgoX29iajogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKF9vYmopLmluY2x1ZGVzKCdkZXNpZ25hdGlvbicpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgICAgICAgICAgdGhpcy5wcm9maWxlVjJTdmMud2l0aERyYXdBcHByb3ZhbFJlcXVlc3QodGhpcy5jb25maWdTcmMudW5NYXBwZWRVc2VyLmlkLCBfb2JqLndmSWQpLnN1YnNjcmliZSgocmVzcDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXNwICYmIHJlc3AucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3AucmVzdWx0Lm1lc3NhZ2UpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKF9vYmopLmluY2x1ZGVzKCdncm91cCcpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgICAgICAgICAgdGhpcy5wcm9maWxlVjJTdmMud2l0aERyYXdBcHByb3ZhbFJlcXVlc3QodGhpcy5jb25maWdTcmMudW5NYXBwZWRVc2VyLmlkLCBfb2JqLndmSWQpLnN1YnNjcmliZSgocmVzcDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXNwICYmIHJlc3AucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3AucmVzdWx0Lm1lc3NhZ2UpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwgIT09IHRoaXMudXNlckRldGFpbHNGb3JtLnZhbHVlLnByaW1hcnlFbWFpbCAmJiB0aGlzLmNhblNob3dFbWFpbCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRW1haWwodGhpcy51c2VyRGV0YWlsc0Zvcm0udmFsdWUucHJpbWFyeUVtYWlsKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VibWl0UHJvZmlsZShwYXlsb2FkKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsICE9PSB0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZS5wcmltYXJ5RW1haWwgJiYgdGhpcy5jYW5TaG93RW1haWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVFbWFpbCh0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZS5wcmltYXJ5RW1haWwpXG4gICAgICB9XG4gICAgICB0aGlzLnN1Ym1pdFByb2ZpbGUocGF5bG9hZClcbiAgICB9XG4gIH1cblxuICBzdWJtaXRQcm9maWxlKHBheWxvYWQ6IGFueSkge1xuICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWRbJ3JlcXVlc3QnXSAmJiBwYXlsb2FkWydyZXF1ZXN0J11bJ3Byb2ZpbGVEZXRhaWxzJ10gJiYgcGF5bG9hZFsncmVxdWVzdCddWydwcm9maWxlRGV0YWlscyddWydwZXJzb25hbERldGFpbHMnXSAmJiBwYXlsb2FkWydyZXF1ZXN0J11bJ3Byb2ZpbGVEZXRhaWxzJ11bJ3BlcnNvbmFsRGV0YWlscyddWydkb2InXSkge1xuICAgICAgbGV0IGRvYkZvcm1hdCA9IHBheWxvYWRbJ3JlcXVlc3QnXVsncHJvZmlsZURldGFpbHMnXVsncGVyc29uYWxEZXRhaWxzJ11bJ2RvYiddO1xuICAgICAgbGV0IGRvYiA9IGAke25ldyBEYXRlKGRvYkZvcm1hdCkuZ2V0RGF0ZSgpfS0ke25ldyBEYXRlKGRvYkZvcm1hdCkuZ2V0TW9udGgoKSArIDF9LSR7bmV3IERhdGUoZG9iRm9ybWF0KS5nZXRGdWxsWWVhcigpfWBcbiAgICAgIHBheWxvYWRbJ3JlcXVlc3QnXVsncHJvZmlsZURldGFpbHMnXVsncGVyc29uYWxEZXRhaWxzJ11bJ2RvYiddID0gZG9iXG4gICAgfVxuICAgIGlmICh0aGlzLnVwZGF0ZVByb2ZpbGUpIHtcbiAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgKyAxXG4gICAgICB0aGlzLnVzZXJQcm9maWxlU2VydmljZS5lZGl0UHJvZmlsZURldGFpbHMocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgICBpZiAocmVzLnJlc3BvbnNlQ29kZSA9PT0gJ09LJykge1xuICAgICAgICAgIHRoaXMuc3VibWl0U3VyZXZ5KHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcInNvbWV0aGluZyB3ZW50IHdyb25nIVwiKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBzdWJtaXRTdXJldnkoc3RhdHVzOiBhbnkpIHtcbiAgICBsZXQgc3VyZXZ5UGF5bG9hZCA9IHtcbiAgICAgIGZvcm1JZDogXy5nZXQodGhpcy5kYXRhLCAnYmF0Y2hEYXRhLmJhdGNoQXR0cmlidXRlcy5wcm9maWxlU3VydmV5SWQnKSxcbiAgICAgIHZlcnNpb246IDQsXG4gICAgICBzdGF0dXM6ICdTVUJNSVRURUQnLFxuICAgICAgcmVzcG9uc2VzOiB0aGlzLmdlbmVyZWF0ZVN1cnZleVBheWxvYWQoc3RhdHVzKSxcbiAgICAgIGNvbnRleHRJZDogXy5nZXQodGhpcy5kYXRhLCAnYmF0Y2hEYXRhLmNvdXJzZUlkJyksXG4gICAgICBjb250ZXh0TmFtZTogXy5nZXQodGhpcy5kYXRhLCAnY291cnNlTmFtZScsICcnKSxcbiAgICB9XG4gICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICB0aGlzLm5wc1N2Yy5zdWJtaXRCcEZvcm1XaXRoUHJvZmlsZURldGFpbHMoc3VyZXZ5UGF5bG9hZCkuc3Vic2NyaWJlKChyZXNwOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICBpZiAoXy5nZXQocmVzcCwgJ3BhcmFtcy5zdGF0dXMnKSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tRm9ybSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcIkZvcm0gaXMgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseVwiKVxuICAgICAgICB0aGlzLmNsb3NlUG9wdXAoKVxuICAgICAgfVxuICAgICAgaWYgKHJlc3AgJiYgcmVzcC5zdGF0dXNDb2RlICYmIHJlc3Auc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tRm9ybSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihyZXNwLmVycm9yTWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFwic29tZXRoaW5nIHdlbnQgd3JvbmchXCIpXG4gICAgfSlcbiAgfVxuXG4gIGdlbmVyYXRlUHJvZmlsZVBheWxvYWQoKSB7XG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LmlkZW50aWZpZXIsXG4gICAgICAgIHByb2ZpbGVEZXRhaWxzOiB7XG4gICAgICAgICAgZW1wbG95bWVudERldGFpbHM6IHt9LFxuICAgICAgICAgIHBlcnNvbmFsRGV0YWlsczoge30sXG4gICAgICAgICAgLy8gY2FkcmVEZXRhaWxzOiB7fSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgX3Byb2Zlc3Npb25hbERldGFpbHM6IGFueSA9IHt9XG4gICAgbGV0IHVwZGF0ZVByb2Zlc3Npb25hbERldGFpbHM6IGJvb2xlYW4gPSBmYWxzZVxuICAgIGlmICh0aGlzLnNob3dHcm91cCAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZ3JvdXAnXS52YWx1ZSAmJiAhdGhpcy5zaG93RG9wdENoYW5nZXMpIHtcbiAgICAgIF9wcm9mZXNzaW9uYWxEZXRhaWxzWydncm91cCddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dyb3VwJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICAgIHVwZGF0ZVByb2Zlc3Npb25hbERldGFpbHMgPSB0cnVlXG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dEZXNpZ25hdGlvbiAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZGVzaWduYXRpb24nXS52YWx1ZSAmJiAhdGhpcy5zaG93RG9wdENoYW5nZXMpIHtcbiAgICAgIF9wcm9mZXNzaW9uYWxEZXRhaWxzWydkZXNpZ25hdGlvbiddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICAgIHVwZGF0ZVByb2Zlc3Npb25hbERldGFpbHMgPSB0cnVlXG4gICAgfVxuICAgIGlmICh1cGRhdGVQcm9mZXNzaW9uYWxEZXRhaWxzKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHNbJ3Byb2Zlc3Npb25hbERldGFpbHMnXSA9IFtfcHJvZmVzc2lvbmFsRGV0YWlsc11cbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydlbXBsb3llZUNvZGUnXS52YWx1ZSkge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzWydlbXBsb3llZUNvZGUnXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydlbXBsb3llZUNvZGUnXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ21vYmlsZSddLnZhbHVlKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydtb2JpbGUnXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZVxuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlsc1sncGhvbmVWZXJpZmllZCddID0gdHJ1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dlbmRlciddLnZhbHVlKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydnZW5kZXInXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvYiddLnZhbHVlKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydkb2InXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb2InXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10udmFsdWUpIHtcbiAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHNbJ2RvbWljaWxlTWVkaXVtJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9taWNpbGVNZWRpdW0nXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhdGVnb3J5J10udmFsdWUpIHtcbiAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHNbJ2NhdGVnb3J5J10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2F0ZWdvcnknXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3BpbkNvZGUnXS52YWx1ZSkge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzWydwaW5Db2RlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncGluQ29kZSddLnZhbHVlXG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydwaW5jb2RlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncGluQ29kZSddLnZhbHVlXG4gICAgICB0aGlzLnVwZGF0ZVByb2ZpbGUgPSB0cnVlXG4gICAgfVxuICAgIGlmICh0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmICF0aGlzLnNob3dEb3B0Q2hhbmdlcykge1xuICAgICAgbGV0IF9jYWRyZURldGFpbHM6IGFueSA9IHt9XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydpc0NhZHJlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snaXNDYWRyZSddLnZhbHVlXG4gICAgICB0aGlzLnVwZGF0ZVByb2ZpbGUgPSB0cnVlXG4gICAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSkge1xuICAgICAgICBfY2FkcmVEZXRhaWxzWydjaXZpbFNlcnZpY2VUeXBlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sndHlwZU9mQ2l2aWxTZXJ2aWNlJ10udmFsdWVcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2l2aWxTZXJ2aWNlTmFtZSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3NlcnZpY2VUeXBlJ10udmFsdWVcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2FkcmVOYW1lJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2FkcmVOYW1lJ10udmFsdWVcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2FkcmVCYXRjaCddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhZHJlQmF0Y2gnXS52YWx1ZVxuICAgICAgICBfY2FkcmVEZXRhaWxzWydjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZSddID0gdGhpcy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5XG4gICAgICAgIF9jYWRyZURldGFpbHNbJ2NhZHJlSWQnXSA9IHRoaXMuY2FkcmVJZFxuICAgICAgICBfY2FkcmVEZXRhaWxzWydjaXZpbFNlcnZpY2VJZCddID0gdGhpcy5jaXZpbFNlcnZpY2VJZFxuICAgICAgICBfY2FkcmVEZXRhaWxzWydjaXZpbFNlcnZpY2VUeXBlSWQnXSA9IHRoaXMuc2VydmljZUlkXG4gICAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlsc1snY2FkcmVEZXRhaWxzJ10gPSBfY2FkcmVEZXRhaWxzXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXlsb2FkXG4gIH1cblxuICBmb3JtYXREYXRlKF9kb2I6IHN0cmluZyB8IERhdGUpOiBzdHJpbmcge1xuICAgIGxldCBkYXRlT2JqOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKF9kb2IgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBkYXRlT2JqID0gX2RvYjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBfZG9iID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgcGFydHMgPSBfZG9iLnNwbGl0KCctJyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHBhcnRzO1xuICAgICAgICBkYXRlT2JqID0gbmV3IERhdGUoTnVtYmVyKHllYXIpLCBOdW1iZXIobW9udGgpIC0gMSwgTnVtYmVyKGRheSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUoX2RvYik7XG4gICAgICAgIGlmICghaXNOYU4ocGFyc2VkLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICBkYXRlT2JqID0gcGFyc2VkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZGF0ZU9iaiB8fCBpc05hTihkYXRlT2JqLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVPYmosICd5eXl5LU1NLWRkJykgfHwgJyc7XG4gIH1cblxuICBnZXRRdWVzdGlvbklkKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWZpZWxkTmFtZSB8fCAhdGhpcy5mb3Jtc0RldGlscy5maWVsZHMpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZm9ybXNEZXRpbHMuZmllbGRzLmZpbmQoKGY6IGFueSkgPT4gZi5maWVsZCA9PT0gZmllbGROYW1lKSB8fCB7fTtcbiAgICByZXR1cm4gZmllbGQuaWQgfHwgJyc7XG4gIH1cblxuICBnZW5lcmVhdGVTdXJ2ZXlQYXlsb2FkKHN0YXR1czogYW55KSB7XG4gICAgbGV0IGRhdGFPYmplY3Q6IGFueSA9IFtdXG4gICAgdGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLmJwRW5yb2xNYW5kYXRvcnlQcm9maWxlRmllbGRzLmZvckVhY2goKF9maWVsZDogYW55KSA9PiB7XG4gICAgICBjb25zdCBmaWVsZFRvQWRkID0ge1xuICAgICAgICBxdWVzdGlvbklkOiB0aGlzLmdldFF1ZXN0aW9uSWQoX2ZpZWxkLmZpZWxkKSxcbiAgICAgICAgcXVlc3Rpb246IF9maWVsZC5kaXNwbGF5TmFtZSxcbiAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgYW5zd2VyVHlwZTogX2ZpZWxkLmZpZWxkVHlwZVxuICAgICAgfVxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWUnKSB7XG4gICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdE5hbWUnLCBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmZpcnN0bmFtZScsICcnKSlcbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3ROYW1lIHx8IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmZpcnN0bmFtZVxuICAgICAgfVxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lJykge1xuICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5kZXBhcnRtZW50TmFtZScsICdOL0EnKVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZGVwYXJ0bWVudE5hbWUgP1xuICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZGVwYXJ0bWVudE5hbWUgOiBcIk4vQVwiXG4gICAgICB9XG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscy5ncm91cCcpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0dyb3VwICYmIHN0YXR1cykge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dyb3VwJ10udmFsdWVcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydncm91cCddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5ncm91cCcsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5ncm91cCA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZ3JvdXAgOiBcIk4vQVwiXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscy5kZXNpZ25hdGlvbicpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0Rlc2lnbmF0aW9uICYmIHN0YXR1cykge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEb3B0Q2hhbmdlcyAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZGVzaWduYXRpb24nXSAmJlxuICAgICAgICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWUgPT09ICdPdGhlcnMnICYmIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydvdGhlckRlc2lnbmF0aW9uJ10pIHtcbiAgICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ290aGVyRGVzaWduYXRpb24nXS52YWx1ZVxuICAgICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snb3RoZXJEZXNpZ25hdGlvbiddLnZhbHVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWVcbiAgICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5kZXNpZ25hdGlvbiA6IFwiTi9BXCJcbiAgICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZGVzaWduYXRpb24nLCAnTi9BJylcbiAgICAgICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUnKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dFbXBsb3llZUNvZGUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZW1wbG95ZWVDb2RlJ10udmFsdWVcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydlbXBsb3llZUNvZGUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZScsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZSA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwnKSB7XG4gICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsXG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbFxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZScpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd01vYmlsZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ21vYmlsZSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZScsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMubW9iaWxlID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZSA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb2InKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dEb2IgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgbGV0IF9kb2I6IGFueSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb2InXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy5mb3JtYXREYXRlKF9kb2IpXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLmZvcm1hdERhdGUoX2RvYilcbiAgICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9iKSB7XG4gICAgICAgICAgICBsZXQgX2RvYjogYW55ID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9iXG4gICAgICAgICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSBfZG9iLnNwbGl0KCctJylcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShOdW1iZXIoeWVhciksIE51bWJlcihtb250aCkgLSAxLCBOdW1iZXIoZGF5KSlcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZERheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkTW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSBgJHtmb3JtYXR0ZWRZZWFyfS0ke2Zvcm1hdHRlZE1vbnRofS0ke2Zvcm1hdHRlZERheX1gXG4gICAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IGAke2Zvcm1hdHRlZFllYXJ9LSR7Zm9ybWF0dGVkTW9udGh9LSR7Zm9ybWF0dGVkRGF5fWBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSBcIjE5NTAtMDYtMDFcIlxuICAgICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBcIjE5NTAtMDYtMDFcIlxuICAgICAgICAgIH1cbiAgICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlcicpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0dlbmRlciAmJiBzdGF0dXMpIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dlbmRlciddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlcicsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZ2VuZGVyID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlciA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb21pY2lsZU1lZGl1bScpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlY2ltYWxNZWRpdW0gJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9taWNpbGVNZWRpdW0nXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10udmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9taWNpbGVNZWRpdW0nLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtIDogXCJOL0FcIlxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5Jykge1xuICAgICAgICBpZiAodGhpcy5zaG93Q2F0ZWdvcnkgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2F0ZWdvcnknXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhdGVnb3J5J10udmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuY2F0ZWdvcnknLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5ID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5IDogXCJOL0FcIlxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZScpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1BpbkNvZGUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncGluQ29kZSddLnZhbHVlXG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncGluQ29kZSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZScsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLnBpbkNvZGUgP1xuICAgICAgICAgIC8vICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5waW5Db2RlIDogXCJOL0FcIlxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzJykge1xuICAgICAgICBpZiAodGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snaXNDYWRyZSddLnZhbHVlICYmIHN0YXR1cykge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscyAmJlxuICAgICAgICAgIC8vICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuaXNDYWRyZSA/ICdZZXMnIDogJ05vJ1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5pc0NhZHJlJykgPyAnWWVzJyA6ICdObydcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlVHlwZScpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWyd0eXBlT2ZDaXZpbFNlcnZpY2UnXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3R5cGVPZkNpdmlsU2VydmljZSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZVR5cGUgOiAnTi9BJ1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlJywgJ04vQScpXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZScpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydzZXJ2aWNlVHlwZSddLnZhbHVlXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snc2VydmljZVR5cGUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VOYW1lIDogJ04vQSdcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZScsICdOL0EnKVxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZScpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydjYWRyZU5hbWUnXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhZHJlTmFtZSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZScsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVOYW1lID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZSA6ICdOL0EnXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQmF0Y2gnKSB7XG4gICAgICAgIGlmICh0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2FkcmVCYXRjaCddLnZhbHVlXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2FkcmVCYXRjaCddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUJhdGNoID9cbiAgICAgICAgICAvLyAgIEpTT04uc3RyaW5naWZ5KHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQmF0Y2gpIDogJ04vQSdcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVCYXRjaCcpID8gSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVCYXRjaCkgOiAnTi9BJ1xuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlOYW1lJykge1xuICAgICAgICBpZiAodGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snaXNDYWRyZSddLnZhbHVlICYmIHN0YXR1cykge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlOYW1lID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlOYW1lIDogJ04vQSdcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eU5hbWUnLCAnTi9BJylcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtSWQnKSB7XG4gICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzICYmXG4gICAgICAgICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbUlkKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMuZXh0ZXJuYWxTeXN0ZW1JZFxuICAgICAgICAgIC8vICAgPyB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtSWQgOiBcIk4vQVwiXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMuZXh0ZXJuYWxTeXN0ZW1JZCcsICdOL0EnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gJ04vQSdcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtRG9yJykge1xuICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcyAmJlxuICAgICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMuZXh0ZXJuYWxTeXN0ZW1Eb3IpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbURvclxuICAgICAgICAgIC8vICAgPyB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtRG9yIDogXCJOL0FcIlxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtRG9yJywgJ04vQScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSAnTi9BJ1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gJ04vQSdcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGRhdGFPYmplY3RcbiAgfVxuXG4gIHVwZGF0ZUVtYWlsKGVtYWlsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwb3N0RGF0YSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgJ3VzZXJJZCc6IHRoaXMuY29uZmlnU3JjLnVuTWFwcGVkVXNlci5pZCxcbiAgICAgICAgJ2NvbnRleHRUb2tlbic6IHRoaXMuY29udGV4dFRva2VuLFxuICAgICAgICAncHJvZmlsZURldGFpbHMnOiB7XG4gICAgICAgICAgJ3BlcnNvbmFsRGV0YWlscyc6IHtcbiAgICAgICAgICAgICdwcmltYXJ5RW1haWwnOiBlbWFpbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLnVwZGF0ZVByaW1hcnlFbWFpbERldGFpbHMocG9zdERhdGEpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgoX3JlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCA9IGVtYWlsXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdlbWFpbFVwZGF0ZWQnKSlcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCd1cGRhdGVFbWFpbEZhaWxlZCcpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgc2V0dXBTY3JvbGxMaXN0ZW5lcihvcGVuZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJyk7XG4gICAgaWYgKG9wZW5lZCAmJiBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wpIHtcbiAgICAgIHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbC5zZXRWYWx1ZSgnJylcbiAgICAgIHRoaXMuZGVzaWduYXRpb25zT2Zmc2V0ID0gMFxuICAgICAgdGhpcy5kZXNpZ25hdGlvbnNNZXRhID0gW107XG4gICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKVxuICAgICAgY29uc3Qgc2VhcmNoSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VhcmNoLWlucHV0JykgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlmIChzZWFyY2hJbnB1dCkge1xuICAgICAgICBzZWFyY2hJbnB1dC5mb2N1cygpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LXNlbGVjdC1wYW5lbCcpO1xuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbC5iaW5kKHRoaXMpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgLy8gQ2hlY2sgaWYgdXNlciBoYXMgc2Nyb2xsZWQgdG8gdGhlIGJvdHRvbSAod2l0aCBhIHNtYWxsIHRocmVzaG9sZClcbiAgICAgIGlmIChlbGVtZW50LnNjcm9sbFRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0ID49IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gNSkge1xuICAgICAgICAvLyBPbmx5IGxvYWQgbW9yZSBpZiBub3QgYWxyZWFkeSBsb2FkaW5nIGFuZCBpZiB0aGVyZSBhcmUgcG90ZW50aWFsbHkgbW9yZSBpdGVtc1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyAmJiB0aGlzLmRlc2lnbmF0aW9uc01ldGEubGVuZ3RoIDwgdGhpcy5kZXNpZ25hdGlvbnNUb3RhbENvdW50KSB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc09mZnNldCArPSAxO1xuICAgICAgICAgIHRoaXMuZ2V0ZGVzaWduYXRpb25zTWV0YSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpIHtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgZGVzaWduYXRpb24gdmFsdWVcbiAgICBjb25zdCBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uJyk7XG4gICAgY29uc3QgY3VycmVudERlc2lnbmF0aW9uID0gc2VhcmNoRGVzaWduYXRpb25Db250cm9sID8gc2VhcmNoRGVzaWduYXRpb25Db250cm9sLnZhbHVlIDogJyc7XG4gICAgLy8gQ2hlY2sgaWYgY3VycmVudCBkZXNpZ25hdGlvbiBleGlzdHMgaW4gdGhlIGxpc3RcbiAgICBpZiAoY3VycmVudERlc2lnbmF0aW9uKSB7XG4gICAgICBjb25zdCBkZXNpZ25hdGlvbkV4aXN0cyA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5zb21lKFxuICAgICAgICAoZGVzaWduYXRpb246IGFueSkgPT4gZGVzaWduYXRpb24ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50RGVzaWduYXRpb24udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcblxuICAgICAgLy8gSWYgZGVzaWduYXRpb24gZG9lc24ndCBleGlzdCBpbiB0aGUgbGlzdCwgYWRkIGl0XG4gICAgICBpZiAoIWRlc2lnbmF0aW9uRXhpc3RzKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBkZXNpZ25hdGlvbiBvYmplY3QgdG8gbWF0Y2ggdGhlIHN0cnVjdHVyZSBvZiBvdGhlciBpdGVtc1xuICAgICAgICBjb25zdCBuZXdEZXNpZ25hdGlvbiA9IHtcbiAgICAgICAgICBuYW1lOiBjdXJyZW50RGVzaWduYXRpb24sXG4gICAgICAgICAgc3RhdHVzOiAnQWN0aXZlJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc01ldGEudW5zaGlmdChuZXdEZXNpZ25hdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKTtcbiAgICBpZiAoc2VhcmNoRGVzaWduYXRpb25Db250cm9sKSB7XG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoJycpXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9ICcnXG4gICAgfVxuICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KClcbiAgfVxuXG59XG4iLCI8ZGl2ICNmdWxsU2NyZWVuQ29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctaGVhZGVyIHRleHQtcmlnaHQgbWItMlwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbiBub3RyYW5zbGF0ZSBtYXRlcmlhbC1pY29ucyBjbG9zZS1pY29uIGN1cnNvci1wb2ludGVyXCIgbWF0cHJlZml4PVwiXCIgcm9sZT1cImltZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFttYXQtZGlhbG9nLWNsb3NlXT1cImZhbHNlXCI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICAgIDxoMT4ge3tkYXRhPy5jb3Vyc2VOYW1lfX0gPC9oMT5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInVzZXJEZXRhaWxzRm9ybVwiIGNsYXNzPVwidXNlckRldGFpbHNGb3JtXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd05hbWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8ubmFtZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcGxhY2Vob2xkZXI9XCJOYW1lXCIvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93T3JnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgKHNob3dEb3B0Q2hhbmdlcyA/ICdwcm9maWxlSW5mby5wcmVzZW50T3JnYW5pc2F0aW9uJyA6ICdwcm9maWxlSW5mby5vcmdhbmlzYXRpb24nKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm9yZ2FuaXNhdGlvblwiIHBsYWNlaG9sZGVyPVwiT3JnYW5pc2F0aW9uXCIvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93RW1haWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZW1haWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicHJpbWFyeUVtYWlsXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBlbWFpbFwiIChrZXl1cCk9XCJoYW5kbGVFbXB0eSgncHJpbWFyeUVtYWlsJylcIi8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cIm1hdC1lcnJvclwiICpuZ0lmPVwidXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykuaGFzRXJyb3IoJ3JlcXVpcmVkJykgfHwgdXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykuaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlxuICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uaW52YWxpZEVtYWlsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZFwiICpuZ0lmPVwidmVyaWZ5RW1haWwgJiYgIW90cFNlbnQgJiYgIWVWZXJpZmllZFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdldC1vdHBcIiAoY2xpY2spPVwiaGFuZGxlR2VuZXJhdGVFbWFpbE9UUCgnZW1haWwnKVwiPnt7ICdwcm9maWxlSW5mby5nZXRPVFAnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlbWFpbE90cFNlbnRcIj5cbiAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJlbWFpbE90cEZvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBlbnRlci1vdHBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5lbnRlck9UUCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+VGltZSBSZW1haW5pbmc6IDxzcGFuICNlbWFpbFRpbWVyRGl2Pjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwcm9maWxlLWZvcm0tZmllbGQgbW9iaWxlLW51bVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlT3RwXCIgY2xhc3M9XCJpbnB1dC10ZXh0IGN1c3RvbS1zaXplXCIgcGxhY2Vob2xkZXI9XCJ7eyAncHJvZmlsZUluZm8uZW50ZXJUaGVPVFAnIHwgdHJhbnNsYXRlIH19XCIgbWF4bGVuZ3RoPVwiNlwiIC8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyXCIgKm5nSWY9XCJzaG93RW1haWxSZXNlbmRPVFBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lclwiPnt7ICdwcm9maWxlSW5mby5kaWROb3RSZWNlaXZlT1RQJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2VuZC1vdHBcIiAoY2xpY2spPVwiaGFuZGxlUmVzZW5kRW1haWxPVFAoKVwiPiZuYnNwOyZuYnNwO3t7ICdwcm9maWxlSW5mby5yZXNlbnRPVFAnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBtYi00XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNhdmUtYnV0dG9uXCIgKGNsaWNrKT1cInZlcmlmeUVtYWlsT1RQKClcIj57eyAncHJvZmlsZUluZm8uc3VibWl0JyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dHcm91cFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmdyb3VwJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImdyb3VwXCIgcGxhY2Vob2xkZXI9XCJ7eyAncHJvZmlsZUluZm8uY2hvb3NlQUdyb3VwJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3VwRGF0YVwiIHZhbHVlPVwie3tncm91cH19XCI+e3sgZ3JvdXAgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIG1iLTJcIiAqbmdJZj1cInNob3dEb3B0Q2hhbmdlc1wiPlxuICAgICAgICAgICAgICB7eydwcm9maWxlSW5mby5ncm91cE5vdGUnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCByZWxhdGl2ZVwiICpuZ0lmPVwiY2FuU2hvd0Rlc2lnbmF0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZGVzaWduYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYXV0by1jb21wbGV0ZS1yb3cgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0IGhpZ2gtemluZGV4XCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzaWduYXRpb25cIlxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXJkZXNpZ25hdGlvbigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIChmb2N1cyk9XCJvbkRlc2lnbmF0aW9uc0ZvY3VzKClcIiAjdGV4dEJveFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmNob29zZUFEZXNpZ25hdGlvbicgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZGlzYWduYXRpb24tY2FyZXRcIj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1zZWxlY3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZpeGVkLWhlaWdodC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJ7eyAncHJvZmlsZUluZm8uY2hvb3NlQURlc2lnbmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiIGZvcm1Db250cm9sTmFtZT1cImRlc2lnbmF0aW9uXCIgIChjbG9zZWQpPVwib25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKClcIiAob3BlbmVkQ2hhbmdlKT1cInNldHVwU2Nyb2xsTGlzdGVuZXIoJGV2ZW50KVwiICBwYW5lbENsYXNzPVwic2VhcmNoLXBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBTdGlja3kgc2VhcmNoIGlucHV0IGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXNlYXJjaC1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBkZXNpZ25hdGlvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hEZXNpZ25hdGlvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWFyY2hEZXNpZ25hdGlvbj8udmFsdWVcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNsZWFyLWJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VhcmNoRGVzaWduYXRpb24/LnNldFZhbHVlKCcnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDinJVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbnMgbGlzdCAtLT5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGRlc2lnbmF0aW9uc01ldGEgXCIgW3ZhbHVlXT1cIm9wdGlvbj8ubmFtZVwiIChjbGljayk9XCJzZWxlY3REZXNpZ25hdGlvbihvcHRpb24/Lm5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgIDwhLS0gTG9hZGluZyBpbmRpY2F0b3IgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9uc1wiIGNsYXNzPVwibG9hZGluZy1pbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgTG9hZGluZyBtb3JlLi4uXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIihkZXNpZ25hdGlvbnNNZXRhICk/Lmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgTm8gbWF0Y2hlcyBmb3VuZFxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwidXNlckRldGFpbHNGb3JtPy5jb250cm9sc1snZGVzaWduYXRpb24nXT8uaW52YWxpZCAmJiB1c2VyRGV0YWlsc0Zvcm0/LmNvbnRyb2xzWydkZXNpZ25hdGlvbiddPy50b3VjaGVkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1lcnJvclwiPlxuICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYSB2YWxpZCBkZXNpZ25hdGlvbi5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIG1iLTJcIiAqbmdJZj1cInNob3dEb3B0Q2hhbmdlc1wiPlxuICAgICAgICAgICAge3sncHJvZmlsZUluZm8uZGVzaWduYXRpb25Ob3RlJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYXV0by1saXN0IGZsZXggZmxleC1jb2wgaWdub3JlLWJsdXJcIiAjZHJvcGRvd25cbiAgICAgICAgICAgICpuZ0lmPVwib3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gJiYgZmlsdGVyRGVzaWduYXRpb25zTWV0YS5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgKG1vdXNlZG93bik9XCJwcmV2ZW50Qmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtIHt7dXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkZXNpZ25hdGlvbiddPy52YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gZGVzaWduYXRpb24/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPyAnaXRlbS1hY3RpdmUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkZXNpZ25hdGlvbiBvZiBmaWx0ZXJEZXNpZ25hdGlvbnNNZXRhXCIgKGNsaWNrKT1cInNlbGVjdERlc2lnbmF0aW9uKGRlc2lnbmF0aW9uLm5hbWUpXCI+XG4gICAgICAgICAgICAgIHt7IGRlc2lnbmF0aW9uPy5uYW1lIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHJlbGF0aXZlXCIgKm5nSWY9XCJjYW5TaG93RGVzaWduYXRpb24gJiYgY2FuU2hvd090aGVyRGVzaWduYXRpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5vdGhlckRlc2lnbmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYW5TaG93T3RoZXJEZXNpZ25hdGlvblwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwib3RoZXJEZXNpZ25hdGlvblwiIHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmVudGVyRGVzaWduYXRpb24nIHwgdHJhbnNsYXRlIH19XCIvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd0VtcGxveWVlQ29kZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5lbXBsb3llZUlkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImVtcGxveWVlQ29kZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgZW1wbG95ZWUgY29kZVwiLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gICAgXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJtYXQtZXJyb3JcIiAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybT8uZ2V0KCdlbXBsb3llZUNvZGUnKT8uaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlxuICAgICAgICAgICAgICAgIFBsZWFzZSBlbnRlciBhbiBBbHBoYS1udW1lcmljIHZhbHVlIG9ubHlcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPiAgICAgICAgICAgICAgICBcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5zaG93TW9iaWxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLm1vYmlsZU51bWJlcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50cnktY29kZSBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgKzkxXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibW9iaWxlLW51bVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHQgbW9iaWxlLXRleHQgcmVsYXRpdmVcIiBtYXhsZW5ndGg9XCIxMFwiIChrZXl1cCk9XCJoYW5kbGVFbXB0eSgnbW9iaWxlJylcIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm1vYmlsZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbW9iaWxlIG51bWJlclwiLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ2ZXJpZmllZC1jaGVja1wiICpuZ0lmPVwibVZlcmlmaWVkXCI+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwibWF0LWVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpLmhhc0Vycm9yKCdyZXF1aXJlZCcpIHx8IHVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpLmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5wbGVhc2VFbnRlclZhbGlkTW9iaWxlTnVtYmVyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZFwiICpuZ0lmPVwidmVyaWZ5TW9iaWxlICYmICFvdHBTZW50ICYmICFtVmVyaWZpZWRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2V0LW90cCBzbTptci00XCIgKGNsaWNrKT1cImhhbmRsZUdlbmVyYXRlT1RQKCdwaG9uZScpXCI+e3sgJ3Byb2ZpbGVJbmZvLmdldE9UUCcgfFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3RwU2VudFwiPiAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJvdHBGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZW50ZXItb3RwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZW50ZXJPVFAnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlRpbWUgUmVtYWluaW5nOiA8c3BhbiAjdGltZXJEaXY+PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInByb2ZpbGUtZm9ybS1maWVsZCBtb2JpbGUtbnVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm90cFwiIGNsYXNzPVwiaW5wdXQtdGV4dCBjdXN0b20tc2l6ZVwiIHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmVudGVyVGhlT1RQJyB8IHRyYW5zbGF0ZSB9fVwiIG1heGxlbmd0aD1cIjZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlclwiICpuZ0lmPVwic2hvd1Jlc2VuZE9UUFwiPiAgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZXJcIj57eyAncHJvZmlsZUluZm8uZGlkTm90UmVjZWl2ZU9UUCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtb3RwXCIgKGNsaWNrKT1cImhhbmRsZVJlc2VuZE9UUCgpXCI+Jm5ic3A7Jm5ic3A7e3sgJ3Byb2ZpbGVJbmZvLnJlc2VudE9UUCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1iLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2F2ZS1idXR0b25cIiAoY2xpY2spPVwidmVyaWZ5TW9iaWxlT1RQKClcIj57eyAncHJvZmlsZUluZm8uc3VibWl0JyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93R2VuZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZ2VuZGVyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImdlbmRlclwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGdlbmRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgX2dlbmRlciBvZiBlVXNlckdlbmRlclwiIHZhbHVlPVwie3sgX2dlbmRlciB9fVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVHJhbnNsYXRlVG8oX2dlbmRlci50b0xvd2VyQ2FzZSgpKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd0RvYlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmRvYicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgY2xhc3M9XCJpbnB1dC10ZXh0IGljb24taW5jbHVkZS1pbnB1dFwiIFttYXhdPVwiY3VycmVudERhdGVcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZG9iXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZGF0ZSBvZiBiaXJ0aFwiIC8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHJlbGF0aXZlXCIgKm5nSWY9XCJjYW5TaG93RG9taWNpbGVNZWRpdW1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5tb3RoZXJUb25ndWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGF1dG8tY29tcGxldGUtcm93IHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0IGhpZ2gtemluZGV4XCIgYXJpYS1sYWJlbD1cIkRvbWljaWxlIE1lZGl1bSAoTW90aGVyIFRvbmd1ZSlcIiBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZG9taWNpbGVNZWRpdW1cIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBtb3RoZXIgdG9uZ3VlXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXJMYW5ndWFnZSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIChmb2N1cyk9XCJvbkxhbmd1YWdlRm9jdXMoKVwiICNsYW5ndWFnZVRleHRCb3gvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1vdGhlci10b3VuZ3VlLWNhcmV0XCI+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9taWNpbGVNZWRpdW0nXS5pbnZhbGlkICYmIHVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9taWNpbGVNZWRpdW0nXS50b3VjaGVkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1lcnJvclwiPlxuICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCBhIHZhbGlkIG1vdGhlciB0b25ndWUuXG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF1dG8tbGFuZ3VhZ2UtbGlzdCBmbGV4IGZsZXgtY29sIGlnbm9yZS1ibHVyXCIgI2xhbmd1YWdlRHJvcGRvd25cbiAgICAgICAgICAgICAgKm5nSWY9XCJvcGVuTGFuZ3VhZ2VEcm9wZG93biAmJiBtYXN0ZXJMYW5ndWFnZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8ZGl2IChtb3VzZWRvd24pPVwicHJldmVudExhbmd1YWdlQmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImxhbmd1YWdlLWl0ZW0ge3t1c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSBsYW5ndWFnZT8ubmFtZT8udG9Mb3dlckNhc2UoKSA/ICdsYW5ndWFnZS1pdGVtLWFjdGl2ZScgOiAnJ319XCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgbWFzdGVyTGFuZ3VhZ2VzXCIgKGNsaWNrKT1cInNlbGVjdExhbmd1YWdlKGxhbmd1YWdlLm5hbWUpXCI+XG4gICAgICAgICAgICAgICAge3sgbGFuZ3VhZ2U/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dDYXRlZ29yeVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmNhdGVnb3J5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNhdGVnb3J5XCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGVDYXRlZ29yeVwiIHZhbHVlPVwie3sgY2F0ZWdvcnkgfX1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRyYW5zbGF0ZVRvKGNhdGVnb3J5Py50b0xvd2VyQ2FzZSgpKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93cGluQ29kZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICd1c2VyUHJvZmlsZS5vZmZpY2VQaW5Db2RlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBjbGFzcz1cImlucHV0LXRleHRcIiBtYXRJbnB1dCBtYXhsZW5ndGg9XCI2XCIgZm9ybUNvbnRyb2xOYW1lPVwicGluQ29kZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcGluY29kZVwiLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cIm1hdC1lcnJvclwiICpuZ0lmPVwidXNlckRldGFpbHNGb3JtPy5nZXQoJ3BpbkNvZGUnKT8uaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5pbnZhbGlkUGluQ29kZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj4gICAgICAgICAgXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgICYmICFzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5mcm9tR292T3JnYW5pemF0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwcm9maWxlLWZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImlzQ2FkcmVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cImdldElzQ2FkcmVTdGF0dXMoJGV2ZW50LnZhbHVlKVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNhZHJlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFsc2VcIj5ObzwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIGlzQ2FkcmVTdGF0dXMgICYmICFzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby50eXBlT2ZDaXZpbFNlcnZpY2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInByb2ZpbGUtZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidHlwZU9mQ2l2aWxTZXJ2aWNlXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJnZXRTZXJ2aWNlKCRldmVudC52YWx1ZSlcIiAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdHlwZSBvZiBjaXZpbCBzZXJ2aWNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzZXJ2aWNlIG9mIGNpdmlsU2VydmljZVR5cGVzXCIgW3ZhbHVlXT1cInNlcnZpY2VcIj57eyBzZXJ2aWNlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdXNlckRldGFpbHNGb3JtLmdldCgndHlwZU9mQ2l2aWxTZXJ2aWNlJykudmFsdWUgJiYgdXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpLnZhbHVlICYmICFzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5zZXJ2aWNlVHlwZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicHJvZmlsZS1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzZXJ2aWNlVHlwZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZXJ2aWNlU2VsZWN0KCRldmVudClcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBzZXJ2aWNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHNlcnZpY2Ugb2Ygc2VydmljZU5hbWVcIiBbdmFsdWVdPVwic2VydmljZVwiPnt7IHNlcnZpY2UgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlICYmIFxuICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdpc0NhZHJlJykudmFsdWUgXG4gICAgICAgICAgICAgICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3R5cGVPZkNpdmlsU2VydmljZScpLnZhbHVlICYmIChcbiAgICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgPT09ICdJbmRpYW4gQWRtaW5pc3RyYXRpdmUgU2VydmljZSAoSUFTKScgfHwgXG4gICAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIFBvbGljZSBTZXJ2aWNlIChJUFMpJyB8fCBcbiAgICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgPT09ICdJbmRpYW4gRm9yZXN0IFNlcnZpY2UgKElGb1MpJyBcbiAgICAgICAgICAgICAgICApICYmICFzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5jYWRyZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicHJvZmlsZS1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjYWRyZU5hbWVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ2FkcmVTZWxlY3QoJGV2ZW50LnZhbHVlKVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNhZHJlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHN0YXRlIG9mIGNhZHJlXCIgW3ZhbHVlXT1cInN0YXRlXCI+e3sgc3RhdGUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpICYmICh1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlICYmIFxuICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpLnZhbHVlICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3R5cGVPZkNpdmlsU2VydmljZScpLnZhbHVlICYmIChcbiAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIEFkbWluaXN0cmF0aXZlIFNlcnZpY2UgKElBUyknIHx8IFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgPT09ICdJbmRpYW4gUG9saWNlIFNlcnZpY2UgKElQUyknIHx8IFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgPT09ICdJbmRpYW4gRm9yZXN0IFNlcnZpY2UgKElGb1MpJyBcbiAgICAgICAgICAgICkgJiYgdXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVOYW1lJykudmFsdWUpICA/IHRydWUgOiAoKHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgJiYgXG4gICAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpLnZhbHVlIFxuICAgICAgICAgICAgJiYgdXNlckRldGFpbHNGb3JtLmdldCgndHlwZU9mQ2l2aWxTZXJ2aWNlJykudmFsdWUgJiYgKFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgIT09ICdJbmRpYW4gQWRtaW5pc3RyYXRpdmUgU2VydmljZSAoSUFTKScgJiYgXG4gICAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSAhPT0gJ0luZGlhbiBQb2xpY2UgU2VydmljZSAoSVBTKScgJiYgXG4gICAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSAhPT0gJ0luZGlhbiBGb3Jlc3QgU2VydmljZSAoSUZvUyknIFxuICAgICAgICAgICAgKSkpID8gdHJ1ZSA6IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uYmF0Y2gnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwcm9maWxlLWZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY2FkcmVCYXRjaFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGJhdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgeWVhciBvZiB5ZWFyQXJyYXlcIiBbdmFsdWVdPVwieWVhclwiPnt7IHllYXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdpc0NhZHJlJykudmFsdWUgJiYgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQmF0Y2gnKS52YWx1ZSAmJiAhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkIG1iLTNcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYWRyZUNvbnRyb2wtbmFtZVwiPnt7Y2FkcmVDb250cm9sbGluZ0F1dGhvcml0eX19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXggZmxleC1yb3cgZ2FwLTQganVzdGlmeS1lbmQgbWFyZ2luLXRvcC1tXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInNhdmUtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidXNlckRldGFpbHNGb3JtPy5pbnZhbGlkIHx8ICFtVmVyaWZpZWQgfHwgIWVWZXJpZmllZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0Rm9ybSh1c2VyRGV0YWlsc0Zvcm0pXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLnNhdmVDaGFuZ2VzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZGRMb2FkZXIgPiAwXCIgPlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG15LTIgbG9hZGVyIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxtYXQtc3Bpbm5lciBjbGFzcz1cImlubGluZS1ibG9ja1wiPjwvbWF0LXNwaW5uZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
|