@ksremp/ngx-ksremp-app-lib 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -0
- package/esm2022/ksremp-ngx-ksremp-app-lib.mjs +5 -0
- package/esm2022/lib/annimations/app-animations.mjs +37 -0
- package/esm2022/lib/components/add-employer/add-employer.component.mjs +2655 -0
- package/esm2022/lib/components/add-participant/add-participant.component.mjs +399 -0
- package/esm2022/lib/components/add-payment/add-payment.component.mjs +201 -0
- package/esm2022/lib/components/address/address.component.mjs +565 -0
- package/esm2022/lib/components/bank-details/bank-details.component.mjs +416 -0
- package/esm2022/lib/components/captcha/captcha.component.mjs +181 -0
- package/esm2022/lib/components/card/card.component.mjs +55 -0
- package/esm2022/lib/components/contact-us/contact-us.component.mjs +984 -0
- package/esm2022/lib/components/content/content.component.mjs +61 -0
- package/esm2022/lib/components/correspondence-download/correspondence-download.component.mjs +89 -0
- package/esm2022/lib/components/dashboard-card/dashboard-card.component.mjs +223 -0
- package/esm2022/lib/components/dependent-grid/dependent-grid.component.mjs +301 -0
- package/esm2022/lib/components/disclosure/disclosure.component.mjs +60 -0
- package/esm2022/lib/components/dropdown/dropdown.component.mjs +1974 -0
- package/esm2022/lib/components/dropdown/dropdown.interface.mjs +2 -0
- package/esm2022/lib/components/email-update/email-update.component.mjs +376 -0
- package/esm2022/lib/components/employer-grid/employer-grid.component.mjs +1102 -0
- package/esm2022/lib/components/error/error.component.mjs +86 -0
- package/esm2022/lib/components/fav-menu/fav-menu.component.mjs +163 -0
- package/esm2022/lib/components/file-download/file-download.component.mjs +104 -0
- package/esm2022/lib/components/file-uploader/file-uploader.component.mjs +315 -0
- package/esm2022/lib/components/footer/footer.component.mjs +350 -0
- package/esm2022/lib/components/header/header.component.mjs +535 -0
- package/esm2022/lib/components/help/help.component.mjs +49 -0
- package/esm2022/lib/components/idle-detector/idle-detector.component.mjs +76 -0
- package/esm2022/lib/components/info/info.component.mjs +187 -0
- package/esm2022/lib/components/job-search-result-page/job-search-result-page.component.mjs +212 -0
- package/esm2022/lib/components/job-title/job-title.component.mjs +162 -0
- package/esm2022/lib/components/legal-disclaimar/legal-disclaimar.component.mjs +617 -0
- package/esm2022/lib/components/lexis-nexis/lexis-nexis.component.mjs +402 -0
- package/esm2022/lib/components/link/link.component.mjs +131 -0
- package/esm2022/lib/components/maintenance-detector/maintenance-detector.component.mjs +43 -0
- package/esm2022/lib/components/mask/mask.component.mjs +48 -0
- package/esm2022/lib/components/menu/menu.component.mjs +452 -0
- package/esm2022/lib/components/mfa/mfa.component.mjs +574 -0
- package/esm2022/lib/components/mfa-popup/mfa-popup.component.mjs +57 -0
- package/esm2022/lib/components/mfa2/mfa2.component.mjs +285 -0
- package/esm2022/lib/components/money-expect/money-expect.component.mjs +98 -0
- package/esm2022/lib/components/msg/msg.component.mjs +48 -0
- package/esm2022/lib/components/news/news.component.mjs +90 -0
- package/esm2022/lib/components/overlay-info/overlay-info.component.mjs +213 -0
- package/esm2022/lib/components/page/page.component.mjs +136 -0
- package/esm2022/lib/components/profile/profile.component.mjs +505 -0
- package/esm2022/lib/components/profile-redirect/profile-redirect.component.mjs +70 -0
- package/esm2022/lib/components/questionnaire/AppValidators.mjs +541 -0
- package/esm2022/lib/components/questionnaire/FbConstants.mjs +8 -0
- package/esm2022/lib/components/questionnaire/SelectItem.mjs +2 -0
- package/esm2022/lib/components/questionnaire/account-success/account-success.page.mjs +310 -0
- package/esm2022/lib/components/questionnaire/common-success/common-success.page.mjs +528 -0
- package/esm2022/lib/components/questionnaire/dynamic-form-panel.component.mjs +1115 -0
- package/esm2022/lib/components/questionnaire/dynamic-form-question.component.mjs +2521 -0
- package/esm2022/lib/components/questionnaire/dynamic-form.component.mjs +1788 -0
- package/esm2022/lib/components/questionnaire/form-builder/form-builder.page.mjs +256 -0
- package/esm2022/lib/components/questionnaire/input-focus.directive.mjs +44 -0
- package/esm2022/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.mjs +255 -0
- package/esm2022/lib/components/questionnaire/question-base.mjs +3 -0
- package/esm2022/lib/components/questionnaire/question-control.service.mjs +408 -0
- package/esm2022/lib/components/questionnaire/question.service.mjs +33 -0
- package/esm2022/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.mjs +282 -0
- package/esm2022/lib/components/read-more/read-more.component.mjs +72 -0
- package/esm2022/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.mjs +690 -0
- package/esm2022/lib/components/search-employer/search-employer.component.mjs +132 -0
- package/esm2022/lib/components/security-question/security-question.component.mjs +199 -0
- package/esm2022/lib/components/select/select.component.mjs +159 -0
- package/esm2022/lib/components/sign-ssn/sign-ssn.component.mjs +141 -0
- package/esm2022/lib/components/ssn/ssn.component.mjs +44 -0
- package/esm2022/lib/components/ssn-reverify/ssn-reverify.component.mjs +171 -0
- package/esm2022/lib/components/test/test.component.mjs +19 -0
- package/esm2022/lib/components/user-login/user-login.component.mjs +619 -0
- package/esm2022/lib/components/weekly-cert-employer/weekly-cert-employer.component.mjs +772 -0
- package/esm2022/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.mjs +356 -0
- package/esm2022/lib/directives/auto-focus/auto-focus.directive.mjs +31 -0
- package/esm2022/lib/directives/caps-lock.directive.mjs +38 -0
- package/esm2022/lib/directives/required-roles/required-roles.directive.mjs +30 -0
- package/esm2022/lib/enums/EmailStatusEnum.mjs +9 -0
- package/esm2022/lib/guards/auth.guard.mjs +138 -0
- package/esm2022/lib/guards/no-login/no-login.guard.mjs +21 -0
- package/esm2022/lib/interceptors/error-interceptor/http-error-interceptor.mjs +107 -0
- package/esm2022/lib/interceptors/header-interceptor/http-header.interceptor.mjs +99 -0
- package/esm2022/lib/models/AddressComponentModel.mjs +3 -0
- package/esm2022/lib/models/BankDetailsComponentModel.mjs +3 -0
- package/esm2022/lib/models/BankDetailsModel.mjs +3 -0
- package/esm2022/lib/models/CinRequalificationCriteriaModel.mjs +3 -0
- package/esm2022/lib/models/EmployerDetailSearchResult.mjs +6 -0
- package/esm2022/lib/models/ErrorModel.mjs +6 -0
- package/esm2022/lib/models/FileModel.mjs +2 -0
- package/esm2022/lib/models/LexisNexisAccountCreationModel.mjs +2 -0
- package/esm2022/lib/models/LexisNexisAuthSelectionRequestModel.mjs +2 -0
- package/esm2022/lib/models/LexisNexisAuthSelectionResponseModel.mjs +2 -0
- package/esm2022/lib/models/LexisNexisEnabledResponseModel.mjs +2 -0
- package/esm2022/lib/models/LexisNexisResponseModel.mjs +3 -0
- package/esm2022/lib/models/LibConstants.mjs +132 -0
- package/esm2022/lib/models/NewsAndAnnouncementModel.mjs +3 -0
- package/esm2022/lib/models/NotificationModel.mjs +6 -0
- package/esm2022/lib/models/OtpAuthModel.mjs +3 -0
- package/esm2022/lib/models/PartialEmploymentModel.mjs +3 -0
- package/esm2022/lib/models/PaymentComponentModel.mjs +2 -0
- package/esm2022/lib/models/RequalifyLiftPageModel.mjs +11 -0
- package/esm2022/lib/models/SecurityQuestionModel.mjs +3 -0
- package/esm2022/lib/models/SsaVerificationModel.mjs +3 -0
- package/esm2022/lib/models/TrendModel.mjs +3 -0
- package/esm2022/lib/models/UserDetailsModel.mjs +3 -0
- package/esm2022/lib/models/UserModel.mjs +6 -0
- package/esm2022/lib/models/case/CaseAttachmentModel.mjs +3 -0
- package/esm2022/lib/models/claimant/ClaimantModel.mjs +3 -0
- package/esm2022/lib/models/claimant/JobResultsData.mjs +3 -0
- package/esm2022/lib/models/claimant/MatchingJobs.mjs +3 -0
- package/esm2022/lib/models/claimant/ResetPasswordModel.mjs +3 -0
- package/esm2022/lib/models/cmp/CaseCoreModel.mjs +3 -0
- package/esm2022/lib/models/cmp/ComplaintCategoryModel.mjs +3 -0
- package/esm2022/lib/models/cmp/ComplaintCategoryOutputModel.mjs +5 -0
- package/esm2022/lib/models/cmp/ContactUsModel.mjs +3 -0
- package/esm2022/lib/models/cmp/EmailTemplateModel.mjs +3 -0
- package/esm2022/lib/models/cmp/contactUsInqueryModel.mjs +7 -0
- package/esm2022/lib/models/cmp/messageRourceModel.mjs +3 -0
- package/esm2022/lib/models/dashboard-model.mjs +3 -0
- package/esm2022/lib/models/dependent.model.mjs +8 -0
- package/esm2022/lib/models/questionnaire/AutocoderModel.mjs +3 -0
- package/esm2022/lib/models/questionnaire/ClaimAppEmpRequestModel.mjs +3 -0
- package/esm2022/lib/models/questionnaire/ClaimAppEmpResponseModel.mjs +8 -0
- package/esm2022/lib/models/questionnaire/ClaimAppEmployerDetailsModel.mjs +6 -0
- package/esm2022/lib/models/questionnaire/ClaimOnlyEmployerDataModel.mjs +3 -0
- package/esm2022/lib/models/questionnaire/ComboModel.mjs +1010 -0
- package/esm2022/lib/models/questionnaire/ElementsModel.mjs +8 -0
- package/esm2022/lib/models/questionnaire/EmployerDetailSearchResult.mjs +3 -0
- package/esm2022/lib/models/questionnaire/EmployerWagesModel.mjs +3 -0
- package/esm2022/lib/models/questionnaire/FBConfigModel.mjs +6 -0
- package/esm2022/lib/models/questionnaire/KeyValueModel.mjs +3 -0
- package/esm2022/lib/models/questionnaire/LegalDiscaimarModel.mjs +3 -0
- package/esm2022/lib/models/questionnaire/LoaderModel.mjs +3 -0
- package/esm2022/lib/models/questionnaire/PollingStatusModel.mjs +3 -0
- package/esm2022/lib/models/questionnaire/QtrYearEmployerWageModel.mjs +3 -0
- package/esm2022/lib/models/questionnaire/QuestionnaireQueryModel.mjs +8 -0
- package/esm2022/lib/models/questionnaire/QuestionnaireReturnModel.mjs +11 -0
- package/esm2022/lib/models/questionnaire/QuestionnaireSaveModel.mjs +3 -0
- package/esm2022/lib/models/questionnaire/RequalifyLiftIssuesModel.mjs +3 -0
- package/esm2022/lib/models/questionnaire/ServiceActionResponseModel.mjs +3 -0
- package/esm2022/lib/models/questionnaire/StatusModel.mjs +6 -0
- package/esm2022/lib/models/questionnaire/SuccessPageElement.mjs +3 -0
- package/esm2022/lib/models/questionnaire/UI512AResponseModel.mjs +3 -0
- package/esm2022/lib/models/questionnaire/ValidationModel.mjs +3 -0
- package/esm2022/lib/ngx-reusa-app-lib.component.mjs +23 -0
- package/esm2022/lib/ngx-reusa-app-lib.module.mjs +410 -0
- package/esm2022/lib/ngx-reusa-app-lib.service.mjs +14 -0
- package/esm2022/lib/pages/BasePage.mjs +98 -0
- package/esm2022/lib/pages/common/accessibility-policy/accessibility-policy.page.mjs +77 -0
- package/esm2022/lib/pages/common/change-password/change-password.page.mjs +471 -0
- package/esm2022/lib/pages/common/landing/landing.component.mjs +209 -0
- package/esm2022/lib/pages/common/landing2/landing2.component.mjs +244 -0
- package/esm2022/lib/pages/common/login/login.component.mjs +533 -0
- package/esm2022/lib/pages/common/not-found/not-found.page.mjs +24 -0
- package/esm2022/lib/pages/common/privacy-disclaimer/privacy-disclaimer.page.mjs +306 -0
- package/esm2022/lib/pages/common/security-policy/security-policy.page.mjs +61 -0
- package/esm2022/lib/pages/common/unauthorized/unauthorized.page.mjs +24 -0
- package/esm2022/lib/pages/popovers/language/language.page.mjs +62 -0
- package/esm2022/lib/pages/popovers/my-notifications/my-notifications.page.mjs +204 -0
- package/esm2022/lib/pages/popovers/my-profile/my-profile.page.mjs +129 -0
- package/esm2022/lib/pages/popovers/user-search/user-search.component.mjs +251 -0
- package/esm2022/lib/pipes/filter.pipe.mjs +30 -0
- package/esm2022/lib/pipes/mask/mask.email.pipe.mjs +23 -0
- package/esm2022/lib/pipes/proper-case/proper-case.pipe.mjs +27 -0
- package/esm2022/lib/pipes/translate/dynamic-translate.pipe.mjs +44 -0
- package/esm2022/lib/pipes/trust-html/trust-html.pipe.mjs +20 -0
- package/esm2022/lib/services/base-service.mjs +50 -0
- package/esm2022/lib/services/captcha/captcha.service.mjs +46 -0
- package/esm2022/lib/services/case-service/case.service.mjs +47 -0
- package/esm2022/lib/services/chatbot/chatbot.service.mjs +258 -0
- package/esm2022/lib/services/chatbot/script.const.mjs +42 -0
- package/esm2022/lib/services/claimant/claimant.service.mjs +31 -0
- package/esm2022/lib/services/claimant-context/claimant-context.service.mjs +48 -0
- package/esm2022/lib/services/claimant-service/claimant-usps-redirect.service.mjs +36 -0
- package/esm2022/lib/services/claimant-service/claimant.service.mjs +62 -0
- package/esm2022/lib/services/claims/claims.service.mjs +102 -0
- package/esm2022/lib/services/cmp-service/cmp.service.mjs +84 -0
- package/esm2022/lib/services/dms-service/dms.service.mjs +60 -0
- package/esm2022/lib/services/fpjs/fingerprint.service.mjs +70 -0
- package/esm2022/lib/services/google-analytics/google-analytics.service.mjs +29 -0
- package/esm2022/lib/services/help/help.service.mjs +63 -0
- package/esm2022/lib/services/idle/idle.service.mjs +159 -0
- package/esm2022/lib/services/lexis-nexis/lexis.nexis.service.mjs +60 -0
- package/esm2022/lib/services/logger/logger.service.mjs +67 -0
- package/esm2022/lib/services/login/login.service.mjs +343 -0
- package/esm2022/lib/services/maintenance/maintenance.service.mjs +21 -0
- package/esm2022/lib/services/notification/notification.service.mjs +113 -0
- package/esm2022/lib/services/ovp/ovp.service.mjs +43 -0
- package/esm2022/lib/services/questionnaire/questionnaire.service.mjs +69 -0
- package/esm2022/lib/services/questionnaire/validation.service.mjs +59 -0
- package/esm2022/lib/services/security-service/security.service.mjs +42 -0
- package/esm2022/lib/services/tour/tour.service.mjs +60 -0
- package/esm2022/lib/services/util/util.service.mjs +450 -0
- package/esm2022/lib/services/weekly-cert/weekly-cert-v2.service.mjs +42 -0
- package/esm2022/lib/validations/AppRegex.mjs +51 -0
- package/esm2022/lib/validations/AppValidators.mjs +253 -0
- package/esm2022/public-api.mjs +138 -0
- package/fesm2022/ksremp-ngx-ksremp-app-lib.mjs +33786 -0
- package/fesm2022/ksremp-ngx-ksremp-app-lib.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/ksremp-ngx-ksremp-app-lib.d.ts.map +1 -0
- package/lib/annimations/app-animations.d.ts +4 -0
- package/lib/annimations/app-animations.d.ts.map +1 -0
- package/lib/components/add-employer/add-employer.component.d.ts +234 -0
- package/lib/components/add-employer/add-employer.component.d.ts.map +1 -0
- package/lib/components/add-participant/add-participant.component.d.ts +49 -0
- package/lib/components/add-participant/add-participant.component.d.ts.map +1 -0
- package/lib/components/add-payment/add-payment.component.d.ts +33 -0
- package/lib/components/add-payment/add-payment.component.d.ts.map +1 -0
- package/lib/components/address/address.component.d.ts +81 -0
- package/lib/components/address/address.component.d.ts.map +1 -0
- package/lib/components/bank-details/bank-details.component.d.ts +62 -0
- package/lib/components/bank-details/bank-details.component.d.ts.map +1 -0
- package/lib/components/captcha/captcha.component.d.ts +45 -0
- package/lib/components/captcha/captcha.component.d.ts.map +1 -0
- package/lib/components/card/card.component.d.ts +12 -0
- package/lib/components/card/card.component.d.ts.map +1 -0
- package/lib/components/contact-us/contact-us.component.d.ts +109 -0
- package/lib/components/contact-us/contact-us.component.d.ts.map +1 -0
- package/lib/components/content/content.component.d.ts +14 -0
- package/lib/components/content/content.component.d.ts.map +1 -0
- package/lib/components/correspondence-download/correspondence-download.component.d.ts +22 -0
- package/lib/components/correspondence-download/correspondence-download.component.d.ts.map +1 -0
- package/lib/components/dashboard-card/dashboard-card.component.d.ts +26 -0
- package/lib/components/dashboard-card/dashboard-card.component.d.ts.map +1 -0
- package/lib/components/dependent-grid/dependent-grid.component.d.ts +36 -0
- package/lib/components/dependent-grid/dependent-grid.component.d.ts.map +1 -0
- package/lib/components/disclosure/disclosure.component.d.ts +13 -0
- package/lib/components/disclosure/disclosure.component.d.ts.map +1 -0
- package/lib/components/dropdown/dropdown.component.d.ts +582 -0
- package/lib/components/dropdown/dropdown.component.d.ts.map +1 -0
- package/lib/components/dropdown/dropdown.interface.d.ts +155 -0
- package/lib/components/dropdown/dropdown.interface.d.ts.map +1 -0
- package/lib/components/email-update/email-update.component.d.ts +43 -0
- package/lib/components/email-update/email-update.component.d.ts.map +1 -0
- package/lib/components/employer-grid/employer-grid.component.d.ts +90 -0
- package/lib/components/employer-grid/employer-grid.component.d.ts.map +1 -0
- package/lib/components/error/error.component.d.ts +18 -0
- package/lib/components/error/error.component.d.ts.map +1 -0
- package/lib/components/fav-menu/fav-menu.component.d.ts +22 -0
- package/lib/components/fav-menu/fav-menu.component.d.ts.map +1 -0
- package/lib/components/file-download/file-download.component.d.ts +23 -0
- package/lib/components/file-download/file-download.component.d.ts.map +1 -0
- package/lib/components/file-uploader/file-uploader.component.d.ts +48 -0
- package/lib/components/file-uploader/file-uploader.component.d.ts.map +1 -0
- package/lib/components/footer/footer.component.d.ts +37 -0
- package/lib/components/footer/footer.component.d.ts.map +1 -0
- package/lib/components/header/header.component.d.ts +64 -0
- package/lib/components/header/header.component.d.ts.map +1 -0
- package/lib/components/help/help.component.d.ts +11 -0
- package/lib/components/help/help.component.d.ts.map +1 -0
- package/lib/components/idle-detector/idle-detector.component.d.ts +16 -0
- package/lib/components/idle-detector/idle-detector.component.d.ts.map +1 -0
- package/lib/components/info/info.component.d.ts +23 -0
- package/lib/components/info/info.component.d.ts.map +1 -0
- package/lib/components/job-search-result-page/job-search-result-page.component.d.ts +24 -0
- package/lib/components/job-search-result-page/job-search-result-page.component.d.ts.map +1 -0
- package/lib/components/job-title/job-title.component.d.ts +38 -0
- package/lib/components/job-title/job-title.component.d.ts.map +1 -0
- package/lib/components/legal-disclaimar/legal-disclaimar.component.d.ts +39 -0
- package/lib/components/legal-disclaimar/legal-disclaimar.component.d.ts.map +1 -0
- package/lib/components/lexis-nexis/lexis-nexis.component.d.ts +59 -0
- package/lib/components/lexis-nexis/lexis-nexis.component.d.ts.map +1 -0
- package/lib/components/link/link.component.d.ts +35 -0
- package/lib/components/link/link.component.d.ts.map +1 -0
- package/lib/components/maintenance-detector/maintenance-detector.component.d.ts +16 -0
- package/lib/components/maintenance-detector/maintenance-detector.component.d.ts.map +1 -0
- package/lib/components/mask/mask.component.d.ts +12 -0
- package/lib/components/mask/mask.component.d.ts.map +1 -0
- package/lib/components/menu/menu.component.d.ts +54 -0
- package/lib/components/menu/menu.component.d.ts.map +1 -0
- package/lib/components/mfa/mfa.component.d.ts +72 -0
- package/lib/components/mfa/mfa.component.d.ts.map +1 -0
- package/lib/components/mfa-popup/mfa-popup.component.d.ts +19 -0
- package/lib/components/mfa-popup/mfa-popup.component.d.ts.map +1 -0
- package/lib/components/mfa2/mfa2.component.d.ts +48 -0
- package/lib/components/mfa2/mfa2.component.d.ts.map +1 -0
- package/lib/components/money-expect/money-expect.component.d.ts +19 -0
- package/lib/components/money-expect/money-expect.component.d.ts.map +1 -0
- package/lib/components/msg/msg.component.d.ts +11 -0
- package/lib/components/msg/msg.component.d.ts.map +1 -0
- package/lib/components/news/news.component.d.ts +15 -0
- package/lib/components/news/news.component.d.ts.map +1 -0
- package/lib/components/overlay-info/overlay-info.component.d.ts +35 -0
- package/lib/components/overlay-info/overlay-info.component.d.ts.map +1 -0
- package/lib/components/page/page.component.d.ts +24 -0
- package/lib/components/page/page.component.d.ts.map +1 -0
- package/lib/components/profile/profile.component.d.ts +74 -0
- package/lib/components/profile/profile.component.d.ts.map +1 -0
- package/lib/components/profile-redirect/profile-redirect.component.d.ts +14 -0
- package/lib/components/profile-redirect/profile-redirect.component.d.ts.map +1 -0
- package/lib/components/questionnaire/AppValidators.d.ts +16 -0
- package/lib/components/questionnaire/AppValidators.d.ts.map +1 -0
- package/lib/components/questionnaire/FbConstants.d.ts +8 -0
- package/lib/components/questionnaire/FbConstants.d.ts.map +1 -0
- package/lib/components/questionnaire/SelectItem.d.ts +5 -0
- package/lib/components/questionnaire/SelectItem.d.ts.map +1 -0
- package/lib/components/questionnaire/account-success/account-success.page.d.ts +61 -0
- package/lib/components/questionnaire/account-success/account-success.page.d.ts.map +1 -0
- package/lib/components/questionnaire/common-success/common-success.page.d.ts +77 -0
- package/lib/components/questionnaire/common-success/common-success.page.d.ts.map +1 -0
- package/lib/components/questionnaire/dynamic-form-panel.component.d.ts +47 -0
- package/lib/components/questionnaire/dynamic-form-panel.component.d.ts.map +1 -0
- package/lib/components/questionnaire/dynamic-form-question.component.d.ts +128 -0
- package/lib/components/questionnaire/dynamic-form-question.component.d.ts.map +1 -0
- package/lib/components/questionnaire/dynamic-form.component.d.ts +161 -0
- package/lib/components/questionnaire/dynamic-form.component.d.ts.map +1 -0
- package/lib/components/questionnaire/form-builder/form-builder.page.d.ts +74 -0
- package/lib/components/questionnaire/form-builder/form-builder.page.d.ts.map +1 -0
- package/lib/components/questionnaire/input-focus.directive.d.ts +12 -0
- package/lib/components/questionnaire/input-focus.directive.d.ts.map +1 -0
- package/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.d.ts +39 -0
- package/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.d.ts.map +1 -0
- package/lib/components/questionnaire/question-base.d.ts +17 -0
- package/lib/components/questionnaire/question-base.d.ts.map +1 -0
- package/lib/components/questionnaire/question-control.service.d.ts +21 -0
- package/lib/components/questionnaire/question-control.service.d.ts.map +1 -0
- package/lib/components/questionnaire/question.service.d.ts +19 -0
- package/lib/components/questionnaire/question.service.d.ts.map +1 -0
- package/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.d.ts +83 -0
- package/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.d.ts.map +1 -0
- package/lib/components/read-more/read-more.component.d.ts +15 -0
- package/lib/components/read-more/read-more.component.d.ts.map +1 -0
- package/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.d.ts +68 -0
- package/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.d.ts.map +1 -0
- package/lib/components/search-employer/search-employer.component.d.ts +40 -0
- package/lib/components/search-employer/search-employer.component.d.ts.map +1 -0
- package/lib/components/security-question/security-question.component.d.ts +37 -0
- package/lib/components/security-question/security-question.component.d.ts.map +1 -0
- package/lib/components/select/select.component.d.ts +56 -0
- package/lib/components/select/select.component.d.ts.map +1 -0
- package/lib/components/sign-ssn/sign-ssn.component.d.ts +34 -0
- package/lib/components/sign-ssn/sign-ssn.component.d.ts.map +1 -0
- package/lib/components/ssn/ssn.component.d.ts +12 -0
- package/lib/components/ssn/ssn.component.d.ts.map +1 -0
- package/lib/components/ssn-reverify/ssn-reverify.component.d.ts +27 -0
- package/lib/components/ssn-reverify/ssn-reverify.component.d.ts.map +1 -0
- package/lib/components/test/test.component.d.ts +9 -0
- package/lib/components/test/test.component.d.ts.map +1 -0
- package/lib/components/user-login/user-login.component.d.ts +82 -0
- package/lib/components/user-login/user-login.component.d.ts.map +1 -0
- package/lib/components/weekly-cert-employer/weekly-cert-employer.component.d.ts +67 -0
- package/lib/components/weekly-cert-employer/weekly-cert-employer.component.d.ts.map +1 -0
- package/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.d.ts +47 -0
- package/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.d.ts.map +1 -0
- package/lib/directives/auto-focus/auto-focus.directive.d.ts +13 -0
- package/lib/directives/auto-focus/auto-focus.directive.d.ts.map +1 -0
- package/lib/directives/caps-lock.directive.d.ts +12 -0
- package/lib/directives/caps-lock.directive.d.ts.map +1 -0
- package/lib/directives/required-roles/required-roles.directive.d.ts +15 -0
- package/lib/directives/required-roles/required-roles.directive.d.ts.map +1 -0
- package/lib/enums/EmailStatusEnum.d.ts +8 -0
- package/lib/enums/EmailStatusEnum.d.ts.map +1 -0
- package/lib/guards/auth.guard.d.ts +29 -0
- package/lib/guards/auth.guard.d.ts.map +1 -0
- package/lib/guards/no-login/no-login.guard.d.ts +12 -0
- package/lib/guards/no-login/no-login.guard.d.ts.map +1 -0
- package/lib/interceptors/error-interceptor/http-error-interceptor.d.ts +23 -0
- package/lib/interceptors/error-interceptor/http-error-interceptor.d.ts.map +1 -0
- package/lib/interceptors/header-interceptor/http-header.interceptor.d.ts +22 -0
- package/lib/interceptors/header-interceptor/http-header.interceptor.d.ts.map +1 -0
- package/lib/models/AddressComponentModel.d.ts +14 -0
- package/lib/models/AddressComponentModel.d.ts.map +1 -0
- package/lib/models/BankDetailsComponentModel.d.ts +12 -0
- package/lib/models/BankDetailsComponentModel.d.ts.map +1 -0
- package/lib/models/BankDetailsModel.d.ts +5 -0
- package/lib/models/BankDetailsModel.d.ts.map +1 -0
- package/lib/models/CinRequalificationCriteriaModel.d.ts +11 -0
- package/lib/models/CinRequalificationCriteriaModel.d.ts.map +1 -0
- package/lib/models/EmployerDetailSearchResult.d.ts +51 -0
- package/lib/models/EmployerDetailSearchResult.d.ts.map +1 -0
- package/lib/models/ErrorModel.d.ts +7 -0
- package/lib/models/ErrorModel.d.ts.map +1 -0
- package/lib/models/FileModel.d.ts +5 -0
- package/lib/models/FileModel.d.ts.map +1 -0
- package/lib/models/LexisNexisAccountCreationModel.d.ts +15 -0
- package/lib/models/LexisNexisAccountCreationModel.d.ts.map +1 -0
- package/lib/models/LexisNexisAuthSelectionRequestModel.d.ts +16 -0
- package/lib/models/LexisNexisAuthSelectionRequestModel.d.ts.map +1 -0
- package/lib/models/LexisNexisAuthSelectionResponseModel.d.ts +39 -0
- package/lib/models/LexisNexisAuthSelectionResponseModel.d.ts.map +1 -0
- package/lib/models/LexisNexisEnabledResponseModel.d.ts +5 -0
- package/lib/models/LexisNexisEnabledResponseModel.d.ts.map +1 -0
- package/lib/models/LexisNexisResponseModel.d.ts +7 -0
- package/lib/models/LexisNexisResponseModel.d.ts.map +1 -0
- package/lib/models/LibConstants.d.ts +125 -0
- package/lib/models/LibConstants.d.ts.map +1 -0
- package/lib/models/NewsAndAnnouncementModel.d.ts +6 -0
- package/lib/models/NewsAndAnnouncementModel.d.ts.map +1 -0
- package/lib/models/NotificationModel.d.ts +11 -0
- package/lib/models/NotificationModel.d.ts.map +1 -0
- package/lib/models/OtpAuthModel.d.ts +8 -0
- package/lib/models/OtpAuthModel.d.ts.map +1 -0
- package/lib/models/PartialEmploymentModel.d.ts +6 -0
- package/lib/models/PartialEmploymentModel.d.ts.map +1 -0
- package/lib/models/PaymentComponentModel.d.ts +8 -0
- package/lib/models/PaymentComponentModel.d.ts.map +1 -0
- package/lib/models/RequalifyLiftPageModel.d.ts +12 -0
- package/lib/models/RequalifyLiftPageModel.d.ts.map +1 -0
- package/lib/models/SecurityQuestionModel.d.ts +7 -0
- package/lib/models/SecurityQuestionModel.d.ts.map +1 -0
- package/lib/models/SsaVerificationModel.d.ts +9 -0
- package/lib/models/SsaVerificationModel.d.ts.map +1 -0
- package/lib/models/TrendModel.d.ts +14 -0
- package/lib/models/TrendModel.d.ts.map +1 -0
- package/lib/models/UserDetailsModel.d.ts +10 -0
- package/lib/models/UserDetailsModel.d.ts.map +1 -0
- package/lib/models/UserModel.d.ts +48 -0
- package/lib/models/UserModel.d.ts.map +1 -0
- package/lib/models/case/CaseAttachmentModel.d.ts +6 -0
- package/lib/models/case/CaseAttachmentModel.d.ts.map +1 -0
- package/lib/models/claimant/ClaimantModel.d.ts +23 -0
- package/lib/models/claimant/ClaimantModel.d.ts.map +1 -0
- package/lib/models/claimant/JobResultsData.d.ts +8 -0
- package/lib/models/claimant/JobResultsData.d.ts.map +1 -0
- package/lib/models/claimant/MatchingJobs.d.ts +13 -0
- package/lib/models/claimant/MatchingJobs.d.ts.map +1 -0
- package/lib/models/claimant/ResetPasswordModel.d.ts +9 -0
- package/lib/models/claimant/ResetPasswordModel.d.ts.map +1 -0
- package/lib/models/cmp/CaseCoreModel.d.ts +21 -0
- package/lib/models/cmp/CaseCoreModel.d.ts.map +1 -0
- package/lib/models/cmp/ComplaintCategoryModel.d.ts +9 -0
- package/lib/models/cmp/ComplaintCategoryModel.d.ts.map +1 -0
- package/lib/models/cmp/ComplaintCategoryOutputModel.d.ts +6 -0
- package/lib/models/cmp/ComplaintCategoryOutputModel.d.ts.map +1 -0
- package/lib/models/cmp/ContactUsModel.d.ts +23 -0
- package/lib/models/cmp/ContactUsModel.d.ts.map +1 -0
- package/lib/models/cmp/EmailTemplateModel.d.ts +7 -0
- package/lib/models/cmp/EmailTemplateModel.d.ts.map +1 -0
- package/lib/models/cmp/contactUsInqueryModel.d.ts +47 -0
- package/lib/models/cmp/contactUsInqueryModel.d.ts.map +1 -0
- package/lib/models/cmp/messageRourceModel.d.ts +6 -0
- package/lib/models/cmp/messageRourceModel.d.ts.map +1 -0
- package/lib/models/dashboard-model.d.ts +44 -0
- package/lib/models/dashboard-model.d.ts.map +1 -0
- package/lib/models/dependent.model.d.ts +20 -0
- package/lib/models/dependent.model.d.ts.map +1 -0
- package/lib/models/questionnaire/AutocoderModel.d.ts +9 -0
- package/lib/models/questionnaire/AutocoderModel.d.ts.map +1 -0
- package/lib/models/questionnaire/ClaimAppEmpRequestModel.d.ts +9 -0
- package/lib/models/questionnaire/ClaimAppEmpRequestModel.d.ts.map +1 -0
- package/lib/models/questionnaire/ClaimAppEmpResponseModel.d.ts +18 -0
- package/lib/models/questionnaire/ClaimAppEmpResponseModel.d.ts.map +1 -0
- package/lib/models/questionnaire/ClaimAppEmployerDetailsModel.d.ts +156 -0
- package/lib/models/questionnaire/ClaimAppEmployerDetailsModel.d.ts.map +1 -0
- package/lib/models/questionnaire/ClaimOnlyEmployerDataModel.d.ts +18 -0
- package/lib/models/questionnaire/ClaimOnlyEmployerDataModel.d.ts.map +1 -0
- package/lib/models/questionnaire/ComboModel.d.ts +178 -0
- package/lib/models/questionnaire/ComboModel.d.ts.map +1 -0
- package/lib/models/questionnaire/ElementsModel.d.ts +71 -0
- package/lib/models/questionnaire/ElementsModel.d.ts.map +1 -0
- package/lib/models/questionnaire/EmployerDetailSearchResult.d.ts +18 -0
- package/lib/models/questionnaire/EmployerDetailSearchResult.d.ts.map +1 -0
- package/lib/models/questionnaire/EmployerWagesModel.d.ts +5 -0
- package/lib/models/questionnaire/EmployerWagesModel.d.ts.map +1 -0
- package/lib/models/questionnaire/FBConfigModel.d.ts +12 -0
- package/lib/models/questionnaire/FBConfigModel.d.ts.map +1 -0
- package/lib/models/questionnaire/KeyValueModel.d.ts +11 -0
- package/lib/models/questionnaire/KeyValueModel.d.ts.map +1 -0
- package/lib/models/questionnaire/LegalDiscaimarModel.d.ts +11 -0
- package/lib/models/questionnaire/LegalDiscaimarModel.d.ts.map +1 -0
- package/lib/models/questionnaire/LoaderModel.d.ts +5 -0
- package/lib/models/questionnaire/LoaderModel.d.ts.map +1 -0
- package/lib/models/questionnaire/PollingStatusModel.d.ts +7 -0
- package/lib/models/questionnaire/PollingStatusModel.d.ts.map +1 -0
- package/lib/models/questionnaire/QtrYearEmployerWageModel.d.ts +9 -0
- package/lib/models/questionnaire/QtrYearEmployerWageModel.d.ts.map +1 -0
- package/lib/models/questionnaire/QuestionnaireQueryModel.d.ts +24 -0
- package/lib/models/questionnaire/QuestionnaireQueryModel.d.ts.map +1 -0
- package/lib/models/questionnaire/QuestionnaireReturnModel.d.ts +21 -0
- package/lib/models/questionnaire/QuestionnaireReturnModel.d.ts.map +1 -0
- package/lib/models/questionnaire/QuestionnaireSaveModel.d.ts +26 -0
- package/lib/models/questionnaire/QuestionnaireSaveModel.d.ts.map +1 -0
- package/lib/models/questionnaire/RequalifyLiftIssuesModel.d.ts +14 -0
- package/lib/models/questionnaire/RequalifyLiftIssuesModel.d.ts.map +1 -0
- package/lib/models/questionnaire/ServiceActionResponseModel.d.ts +7 -0
- package/lib/models/questionnaire/ServiceActionResponseModel.d.ts.map +1 -0
- package/lib/models/questionnaire/StatusModel.d.ts +16 -0
- package/lib/models/questionnaire/StatusModel.d.ts.map +1 -0
- package/lib/models/questionnaire/SuccessPageElement.d.ts +9 -0
- package/lib/models/questionnaire/SuccessPageElement.d.ts.map +1 -0
- package/lib/models/questionnaire/UI512AResponseModel.d.ts +13 -0
- package/lib/models/questionnaire/UI512AResponseModel.d.ts.map +1 -0
- package/lib/models/questionnaire/ValidationModel.d.ts +18 -0
- package/lib/models/questionnaire/ValidationModel.d.ts.map +1 -0
- package/lib/ngx-reusa-app-lib.component.d.ts +9 -0
- package/lib/ngx-reusa-app-lib.component.d.ts.map +1 -0
- package/lib/ngx-reusa-app-lib.module.d.ts +155 -0
- package/lib/ngx-reusa-app-lib.module.d.ts.map +1 -0
- package/lib/ngx-reusa-app-lib.service.d.ts +7 -0
- package/lib/ngx-reusa-app-lib.service.d.ts.map +1 -0
- package/lib/pages/BasePage.d.ts +32 -0
- package/lib/pages/BasePage.d.ts.map +1 -0
- package/lib/pages/common/accessibility-policy/accessibility-policy.page.d.ts +12 -0
- package/lib/pages/common/accessibility-policy/accessibility-policy.page.d.ts.map +1 -0
- package/lib/pages/common/change-password/change-password.page.d.ts +41 -0
- package/lib/pages/common/change-password/change-password.page.d.ts.map +1 -0
- package/lib/pages/common/landing/landing.component.d.ts +25 -0
- package/lib/pages/common/landing/landing.component.d.ts.map +1 -0
- package/lib/pages/common/landing2/landing2.component.d.ts +31 -0
- package/lib/pages/common/landing2/landing2.component.d.ts.map +1 -0
- package/lib/pages/common/login/login.component.d.ts +65 -0
- package/lib/pages/common/login/login.component.d.ts.map +1 -0
- package/lib/pages/common/not-found/not-found.page.d.ts +9 -0
- package/lib/pages/common/not-found/not-found.page.d.ts.map +1 -0
- package/lib/pages/common/privacy-disclaimer/privacy-disclaimer.page.d.ts +12 -0
- package/lib/pages/common/privacy-disclaimer/privacy-disclaimer.page.d.ts.map +1 -0
- package/lib/pages/common/security-policy/security-policy.page.d.ts +12 -0
- package/lib/pages/common/security-policy/security-policy.page.d.ts.map +1 -0
- package/lib/pages/common/unauthorized/unauthorized.page.d.ts +9 -0
- package/lib/pages/common/unauthorized/unauthorized.page.d.ts.map +1 -0
- package/lib/pages/popovers/language/language.page.d.ts +17 -0
- package/lib/pages/popovers/language/language.page.d.ts.map +1 -0
- package/lib/pages/popovers/my-notifications/my-notifications.page.d.ts +22 -0
- package/lib/pages/popovers/my-notifications/my-notifications.page.d.ts.map +1 -0
- package/lib/pages/popovers/my-profile/my-profile.page.d.ts +21 -0
- package/lib/pages/popovers/my-profile/my-profile.page.d.ts.map +1 -0
- package/lib/pages/popovers/user-search/user-search.component.d.ts +32 -0
- package/lib/pages/popovers/user-search/user-search.component.d.ts.map +1 -0
- package/lib/pipes/filter.pipe.d.ts +8 -0
- package/lib/pipes/filter.pipe.d.ts.map +1 -0
- package/lib/pipes/mask/mask.email.pipe.d.ts +11 -0
- package/lib/pipes/mask/mask.email.pipe.d.ts.map +1 -0
- package/lib/pipes/proper-case/proper-case.pipe.d.ts +9 -0
- package/lib/pipes/proper-case/proper-case.pipe.d.ts.map +1 -0
- package/lib/pipes/translate/dynamic-translate.pipe.d.ts +11 -0
- package/lib/pipes/translate/dynamic-translate.pipe.d.ts.map +1 -0
- package/lib/pipes/trust-html/trust-html.pipe.d.ts +11 -0
- package/lib/pipes/trust-html/trust-html.pipe.d.ts.map +1 -0
- package/lib/services/base-service.d.ts +93 -0
- package/lib/services/base-service.d.ts.map +1 -0
- package/lib/services/captcha/captcha.service.d.ts +16 -0
- package/lib/services/captcha/captcha.service.d.ts.map +1 -0
- package/lib/services/case-service/case.service.d.ts +20 -0
- package/lib/services/case-service/case.service.d.ts.map +1 -0
- package/lib/services/chatbot/chatbot.service.d.ts +61 -0
- package/lib/services/chatbot/chatbot.service.d.ts.map +1 -0
- package/lib/services/chatbot/script.const.d.ts +16 -0
- package/lib/services/chatbot/script.const.d.ts.map +1 -0
- package/lib/services/claimant/claimant.service.d.ts +18 -0
- package/lib/services/claimant/claimant.service.d.ts.map +1 -0
- package/lib/services/claimant-context/claimant-context.service.d.ts +19 -0
- package/lib/services/claimant-context/claimant-context.service.d.ts.map +1 -0
- package/lib/services/claimant-service/claimant-usps-redirect.service.d.ts +16 -0
- package/lib/services/claimant-service/claimant-usps-redirect.service.d.ts.map +1 -0
- package/lib/services/claimant-service/claimant.service.d.ts +26 -0
- package/lib/services/claimant-service/claimant.service.d.ts.map +1 -0
- package/lib/services/claims/claims.service.d.ts +42 -0
- package/lib/services/claims/claims.service.d.ts.map +1 -0
- package/lib/services/cmp-service/cmp.service.d.ts +34 -0
- package/lib/services/cmp-service/cmp.service.d.ts.map +1 -0
- package/lib/services/dms-service/dms.service.d.ts +24 -0
- package/lib/services/dms-service/dms.service.d.ts.map +1 -0
- package/lib/services/fpjs/fingerprint.service.d.ts +19 -0
- package/lib/services/fpjs/fingerprint.service.d.ts.map +1 -0
- package/lib/services/google-analytics/google-analytics.service.d.ts +9 -0
- package/lib/services/google-analytics/google-analytics.service.d.ts.map +1 -0
- package/lib/services/help/help.service.d.ts +26 -0
- package/lib/services/help/help.service.d.ts.map +1 -0
- package/lib/services/idle/idle.service.d.ts +44 -0
- package/lib/services/idle/idle.service.d.ts.map +1 -0
- package/lib/services/lexis-nexis/lexis.nexis.service.d.ts +26 -0
- package/lib/services/lexis-nexis/lexis.nexis.service.d.ts.map +1 -0
- package/lib/services/logger/logger.service.d.ts +32 -0
- package/lib/services/logger/logger.service.d.ts.map +1 -0
- package/lib/services/login/login.service.d.ts +79 -0
- package/lib/services/login/login.service.d.ts.map +1 -0
- package/lib/services/maintenance/maintenance.service.d.ts +16 -0
- package/lib/services/maintenance/maintenance.service.d.ts.map +1 -0
- package/lib/services/notification/notification.service.d.ts +39 -0
- package/lib/services/notification/notification.service.d.ts.map +1 -0
- package/lib/services/ovp/ovp.service.d.ts +17 -0
- package/lib/services/ovp/ovp.service.d.ts.map +1 -0
- package/lib/services/questionnaire/questionnaire.service.d.ts +36 -0
- package/lib/services/questionnaire/questionnaire.service.d.ts.map +1 -0
- package/lib/services/questionnaire/validation.service.d.ts +82 -0
- package/lib/services/questionnaire/validation.service.d.ts.map +1 -0
- package/lib/services/security-service/security.service.d.ts +18 -0
- package/lib/services/security-service/security.service.d.ts.map +1 -0
- package/lib/services/tour/tour.service.d.ts +25 -0
- package/lib/services/tour/tour.service.d.ts.map +1 -0
- package/lib/services/util/util.service.d.ts +194 -0
- package/lib/services/util/util.service.d.ts.map +1 -0
- package/lib/services/weekly-cert/weekly-cert-v2.service.d.ts +17 -0
- package/lib/services/weekly-cert/weekly-cert-v2.service.d.ts.map +1 -0
- package/lib/validations/AppRegex.d.ts +50 -0
- package/lib/validations/AppRegex.d.ts.map +1 -0
- package/lib/validations/AppValidators.d.ts +82 -0
- package/lib/validations/AppValidators.d.ts.map +1 -0
- package/package.json +28 -0
- package/public-api.d.ts +128 -0
- package/public-api.d.ts.map +1 -0
|
@@ -0,0 +1,541 @@
|
|
|
1
|
+
export class AppValidators {
|
|
2
|
+
// @dynamic
|
|
3
|
+
static customValidation(element, validation, stateName) {
|
|
4
|
+
let validationName = validation.customValidationName;
|
|
5
|
+
const func = (formGroup) => {
|
|
6
|
+
if (validationName === "basePeriodEmplValidation") {
|
|
7
|
+
let val;
|
|
8
|
+
if (formGroup.controls[element.name]) {
|
|
9
|
+
val = formGroup.controls[element.name].value;
|
|
10
|
+
if (val) {
|
|
11
|
+
let bpEmpList;
|
|
12
|
+
bpEmpList = val.bpEmpList;
|
|
13
|
+
if (formGroup.controls['workforemp'] && formGroup.controls['workforemp'].value === 'Y'
|
|
14
|
+
&& bpEmpList.length < 1) {
|
|
15
|
+
formGroup.controls[element.name].setErrors({ bpEmplrLengthFlag: true });
|
|
16
|
+
return { bpEmplrLengthFlag: true };
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
formGroup.controls[element.name].setErrors(null);
|
|
20
|
+
}
|
|
21
|
+
for (var bpEmp of bpEmpList) {
|
|
22
|
+
if (bpEmp.bpEmployerFlag === '1' && !bpEmp.empDeleted) {
|
|
23
|
+
formGroup.controls[element.name].setErrors({ bpEmplrFlag: true });
|
|
24
|
+
return { bpEmplrFlag: true };
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
formGroup.controls[element.name].setErrors(null);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else if (validationName === "simpleCheckBoxValidation") {
|
|
34
|
+
if (formGroup.controls[element.name]) {
|
|
35
|
+
if (!formGroup.controls[element.name].value) {
|
|
36
|
+
formGroup.controls[element.name].setErrors({ simpleCheckBoxValidationFlag: true });
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
formGroup.controls[element.name].setErrors(null);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else if (validationName === "cpatchvalidation") {
|
|
44
|
+
if (formGroup.controls[element.name]) {
|
|
45
|
+
if (!formGroup.controls[element.name].value) {
|
|
46
|
+
formGroup.controls[element.name].setErrors({ cpatchvalidationFlag: true });
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
formGroup.controls[element.name].setErrors(null);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (validationName === "uploadvalidation") {
|
|
54
|
+
if (formGroup.controls[element.name]) {
|
|
55
|
+
if (!formGroup.controls[element.name].value || (Array.isArray(formGroup.controls[element.name].value) && !formGroup.controls[element.name].value.length)) {
|
|
56
|
+
formGroup.controls[element.name].setErrors({ uploadvalidationFlag: true });
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
formGroup.controls[element.name].setErrors(null);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (validationName === "addressValidation") {
|
|
64
|
+
let addressCompValue;
|
|
65
|
+
if (formGroup.controls[element.name]) {
|
|
66
|
+
addressCompValue = formGroup.controls[element.name].value;
|
|
67
|
+
if (addressCompValue) {
|
|
68
|
+
if (!addressCompValue.city || !addressCompValue.state ||
|
|
69
|
+
!addressCompValue['zip'] || !addressCompValue.country ||
|
|
70
|
+
!addressCompValue['streetAddress']) {
|
|
71
|
+
formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
|
|
72
|
+
}
|
|
73
|
+
if (addressCompValue.state && addressCompValue.state.value && ((addressCompValue.state.value === 'MS' && stateName === 'MS')
|
|
74
|
+
|| (addressCompValue.state.value === 'CT' && stateName === 'CT'))
|
|
75
|
+
&& element.countyRequired === true && !addressCompValue['county']) {
|
|
76
|
+
formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
|
|
77
|
+
}
|
|
78
|
+
if (addressCompValue.state && addressCompValue.state.value
|
|
79
|
+
&& addressCompValue.state.value === 'ME' && stateName === 'ME'
|
|
80
|
+
&& element.countyRequired === true && !addressCompValue['town']) {
|
|
81
|
+
formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
|
|
82
|
+
}
|
|
83
|
+
if ((addressCompValue.country.value === 'US'
|
|
84
|
+
&& !(/^\d{5}(\d{4})?$/.test(addressCompValue.zip))) ||
|
|
85
|
+
(addressCompValue.country.value === 'CA'
|
|
86
|
+
&& !(/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ -]?\d[ABCEGHJ-NPRSTV-Z]\d$/i.test(addressCompValue.zip)))) {
|
|
87
|
+
formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
if (element.requiredIf) {
|
|
92
|
+
let expression = element.requiredIf;
|
|
93
|
+
var splitArray = expression.split('==');
|
|
94
|
+
let contolName = splitArray[0];
|
|
95
|
+
let value = splitArray[1];
|
|
96
|
+
contolName = contolName.replace('{', '').replace('}', '').trim();
|
|
97
|
+
value = value.replace('\'', '').replace('\'', '').trim();
|
|
98
|
+
if (formGroup.controls[contolName] && formGroup.controls[contolName].value) {
|
|
99
|
+
var valueOfCnrtrlToCheck = formGroup.controls[contolName].value.trim();
|
|
100
|
+
if (valueOfCnrtrlToCheck === value) {
|
|
101
|
+
formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else if (validationName === "bankDetailsValidationFlag") {
|
|
112
|
+
let bankDetailsComponentVal;
|
|
113
|
+
if (formGroup.controls[element.name]) {
|
|
114
|
+
bankDetailsComponentVal = formGroup.controls[element.name].value;
|
|
115
|
+
if (element.requiredIf) {
|
|
116
|
+
let expression = element.requiredIf;
|
|
117
|
+
var splitArray = expression.split('==');
|
|
118
|
+
let contolName = splitArray[0];
|
|
119
|
+
let value = splitArray[1];
|
|
120
|
+
contolName = contolName.replace('{', '').replace('}', '').trim();
|
|
121
|
+
value = value.replace('\'', '').replace('\'', '').trim();
|
|
122
|
+
if (formGroup.controls[contolName] && formGroup.controls[contolName].value) {
|
|
123
|
+
var valueOfCnrtrlToCheck = formGroup.controls[contolName].value.trim();
|
|
124
|
+
if (valueOfCnrtrlToCheck === value) {
|
|
125
|
+
if (bankDetailsComponentVal) {
|
|
126
|
+
if (!bankDetailsComponentVal.accountNumber || !bankDetailsComponentVal.accountType
|
|
127
|
+
|| !bankDetailsComponentVal.nameOnAccount || !bankDetailsComponentVal.reEnterAccountNumber
|
|
128
|
+
|| !bankDetailsComponentVal.routingNumber) {
|
|
129
|
+
formGroup.controls[element.name].setErrors({ bankDetailsValidationFlag: true });
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
formGroup.controls[element.name].setErrors(null);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else if (validationName === "notEquals") {
|
|
141
|
+
let currentFormControl = formGroup.controls[element.name];
|
|
142
|
+
if (currentFormControl) {
|
|
143
|
+
let fields = validation.expression.split(",");
|
|
144
|
+
fields.forEach(field => {
|
|
145
|
+
let val = currentFormControl.value;
|
|
146
|
+
let otherFieldFormControlName = formGroup.controls[field.trim()];
|
|
147
|
+
let otherFieldValue = otherFieldFormControlName.value;
|
|
148
|
+
if (val && otherFieldValue
|
|
149
|
+
&& ((val.value && otherFieldValue.value && val.value === otherFieldValue.value) || val === otherFieldValue)) {
|
|
150
|
+
otherFieldFormControlName.setErrors({ notEquals: true });
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
if (!currentFormControl.errors && val && otherFieldValue
|
|
154
|
+
&& ((val.value && otherFieldValue.value && val.value != otherFieldValue.value) || val != otherFieldValue)) {
|
|
155
|
+
let values = this.getOtherFormFieldsValues(fields, formGroup);
|
|
156
|
+
if (values.size == fields.length) {
|
|
157
|
+
otherFieldFormControlName.setErrors(null);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else if (validationName === "wcEmployerValidation") {
|
|
165
|
+
let empModels = formGroup.controls[element.name]?.value;
|
|
166
|
+
let ifWorkPerformed = formGroup.controls["workPerformed"].value;
|
|
167
|
+
if (ifWorkPerformed === "Y") {
|
|
168
|
+
if (empModels) {
|
|
169
|
+
let nonCompletedEmps = empModels.filter(e => !e.isPartTimeEmployerEdited && e.isPartTimeEmployer);
|
|
170
|
+
if (nonCompletedEmps && nonCompletedEmps.length > 0) {
|
|
171
|
+
formGroup.controls[element.name].setErrors({ wcEmployerValidation: true });
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
formGroup.controls[element.name].setErrors({ wcEmployerValidation: true });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else if (validationName === "jobTitleValidation") {
|
|
180
|
+
let jobTitleModels = formGroup.controls[element.name]?.value;
|
|
181
|
+
// validation code placeholder for job title
|
|
182
|
+
}
|
|
183
|
+
return null;
|
|
184
|
+
};
|
|
185
|
+
return func;
|
|
186
|
+
}
|
|
187
|
+
static getOtherFormFieldsValues(fields, formGroup) {
|
|
188
|
+
let set = new Set();
|
|
189
|
+
fields.forEach(f => {
|
|
190
|
+
let value = formGroup.controls[f]?.value;
|
|
191
|
+
value && typeof (value) == 'object' ? set.add(value.value) : set.add(value);
|
|
192
|
+
});
|
|
193
|
+
return set;
|
|
194
|
+
}
|
|
195
|
+
// @dynamic
|
|
196
|
+
static createValidator(validationService, element) {
|
|
197
|
+
const func = (formGroup) => {
|
|
198
|
+
const control = formGroup.controls[element.name];
|
|
199
|
+
let fieldValue = control.value;
|
|
200
|
+
if (!fieldValue) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
let serviceName = element.serviceName;
|
|
204
|
+
let serviceCallType = element.serviceCallType;
|
|
205
|
+
let serviceType = element.serviceType;
|
|
206
|
+
if (serviceCallType === 'GET') {
|
|
207
|
+
validationService
|
|
208
|
+
.get(`${serviceName}${fieldValue}`)
|
|
209
|
+
.subscribe(res => {
|
|
210
|
+
console.log('res ', res);
|
|
211
|
+
});
|
|
212
|
+
if (serviceType === 'VALIDATE') {
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
if (serviceType === 'VALIDATE') {
|
|
217
|
+
}
|
|
218
|
+
if (serviceType === 'UPDATE') {
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return null;
|
|
222
|
+
};
|
|
223
|
+
return func;
|
|
224
|
+
}
|
|
225
|
+
// @dynamic
|
|
226
|
+
static setRequiredIfValidation(element, sharedData) {
|
|
227
|
+
const func = (formGroup) => {
|
|
228
|
+
//console.log('setRequiredIfValidation --',element);
|
|
229
|
+
// console.log('formGroup --',formGroup);
|
|
230
|
+
let expression = element.requiredIf;
|
|
231
|
+
if (element.customTag && element.customTag === 'Optional') {
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
let isRequired = false;
|
|
235
|
+
if (expression.includes('&&') && !expression.includes('||')) {
|
|
236
|
+
let expr = expression.split('&&');
|
|
237
|
+
isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, sharedData)
|
|
238
|
+
&& AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, sharedData);
|
|
239
|
+
if (expr.length >= 3) {
|
|
240
|
+
isRequired = isRequired && AppValidators.calculateOperandValueForRequiredIf(expr[2].trim(), formGroup, element, sharedData);
|
|
241
|
+
}
|
|
242
|
+
if (expr.length >= 4) {
|
|
243
|
+
isRequired = isRequired && AppValidators.calculateOperandValueForRequiredIf(expr[3].trim(), formGroup, element, sharedData);
|
|
244
|
+
}
|
|
245
|
+
if (expr.length == 5) {
|
|
246
|
+
isRequired = isRequired && AppValidators.calculateOperandValueForRequiredIf(expr[4].trim(), formGroup, element, sharedData);
|
|
247
|
+
}
|
|
248
|
+
if (expr.length > 5) {
|
|
249
|
+
throw "AppValidators : More than 5 '&&' expressions are not supported.";
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (expression.includes('||') && !expression.includes('&&')) {
|
|
253
|
+
let expr = expression.split('||');
|
|
254
|
+
isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, sharedData)
|
|
255
|
+
|| AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, sharedData);
|
|
256
|
+
if (expr.length >= 3) {
|
|
257
|
+
isRequired = isRequired || AppValidators.calculateOperandValueForRequiredIf(expr[2].trim(), formGroup, element, sharedData);
|
|
258
|
+
}
|
|
259
|
+
if (expr.length >= 4) {
|
|
260
|
+
isRequired = isRequired || AppValidators.calculateOperandValueForRequiredIf(expr[3].trim(), formGroup, element, sharedData);
|
|
261
|
+
}
|
|
262
|
+
if (expr.length == 5) {
|
|
263
|
+
isRequired = isRequired || AppValidators.calculateOperandValueForRequiredIf(expr[4].trim(), formGroup, element, sharedData);
|
|
264
|
+
}
|
|
265
|
+
if (expr.length > 5) {
|
|
266
|
+
throw "AppValidators : More than 5 '||' expressions are not supported.";
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
if (!expression.includes('||') && !expression.includes('&&')) {
|
|
270
|
+
isRequired = AppValidators.calculateOperandValueForRequiredIf(expression.trim(), formGroup, element, sharedData);
|
|
271
|
+
}
|
|
272
|
+
if (isRequired) {
|
|
273
|
+
formGroup.controls[element.name].setErrors({ requiredIf: true });
|
|
274
|
+
return { requiredIf: true };
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
formGroup.controls[element.name]?.setErrors(null);
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
return func;
|
|
282
|
+
}
|
|
283
|
+
static calculateOperandValueForRequiredIf(expression, formGroup, element, sharedData) {
|
|
284
|
+
var splitArray;
|
|
285
|
+
let isDoesNotEqual;
|
|
286
|
+
let isContains;
|
|
287
|
+
if (expression.includes('==')) {
|
|
288
|
+
splitArray = expression.split('==');
|
|
289
|
+
isDoesNotEqual = false;
|
|
290
|
+
}
|
|
291
|
+
else if (expression.includes('!=')) {
|
|
292
|
+
splitArray = expression.split('!=');
|
|
293
|
+
isDoesNotEqual = true;
|
|
294
|
+
}
|
|
295
|
+
else if (expression.includes('contains')) {
|
|
296
|
+
splitArray = expression.split('contains');
|
|
297
|
+
isContains = true;
|
|
298
|
+
}
|
|
299
|
+
let operand1 = splitArray[0];
|
|
300
|
+
let operand2 = splitArray[1];
|
|
301
|
+
operand1 = operand1.replace('{', '').replace('}', '').trim();
|
|
302
|
+
operand2 = operand2.replace('{', '').replace('}', '').trim();
|
|
303
|
+
const control1 = formGroup.controls[operand1];
|
|
304
|
+
var valueOfActualControl;
|
|
305
|
+
if (formGroup.controls[element.name]) {
|
|
306
|
+
valueOfActualControl = formGroup.controls[element.name].value;
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
sharedData.forEach(data => {
|
|
310
|
+
let strIntoObj = JSON.parse(data);
|
|
311
|
+
if (strIntoObj[element.name]) {
|
|
312
|
+
valueOfActualControl = strIntoObj[element.name];
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
var valueOfCnrtrlToCheck;
|
|
317
|
+
if (formGroup.controls[operand1] && formGroup.controls[operand1].value && typeof (formGroup.controls[operand1]).value === 'string') {
|
|
318
|
+
valueOfCnrtrlToCheck = formGroup.controls[operand1].value.trim();
|
|
319
|
+
}
|
|
320
|
+
if (formGroup.controls[operand1] && formGroup.controls[operand1].value && typeof (formGroup.controls[operand1]).value != 'string') {
|
|
321
|
+
if (formGroup.controls[operand1].value['value']) {
|
|
322
|
+
valueOfCnrtrlToCheck = formGroup.controls[operand1].value['value'].trim();
|
|
323
|
+
}
|
|
324
|
+
else if (formGroup.controls[operand1].value[0]) {
|
|
325
|
+
valueOfCnrtrlToCheck = formGroup.controls[operand1].value;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
if (!valueOfCnrtrlToCheck) {
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
if (valueOfCnrtrlToCheck && !Array.isArray(valueOfCnrtrlToCheck)) {
|
|
332
|
+
valueOfCnrtrlToCheck = valueOfCnrtrlToCheck.trim();
|
|
333
|
+
}
|
|
334
|
+
if (operand2 === 'null' && isDoesNotEqual && valueOfCnrtrlToCheck && !valueOfActualControl) {
|
|
335
|
+
return true;
|
|
336
|
+
}
|
|
337
|
+
if (operand2 === 'null' && !isDoesNotEqual && valueOfCnrtrlToCheck && valueOfActualControl) {
|
|
338
|
+
return true;
|
|
339
|
+
}
|
|
340
|
+
operand2 = operand2.replace(/\'/g, ""); //null
|
|
341
|
+
if (isContains && (valueOfCnrtrlToCheck && Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2)) && !formGroup.controls[element?.name]?.value) {
|
|
342
|
+
return true;
|
|
343
|
+
}
|
|
344
|
+
if (isContains && (valueOfCnrtrlToCheck && !Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2)) && !formGroup.controls[element?.name]?.value) {
|
|
345
|
+
return true;
|
|
346
|
+
}
|
|
347
|
+
if (operand2 != 'null' && !isDoesNotEqual && valueOfCnrtrlToCheck === operand2 && !valueOfActualControl && formGroup.controls[element?.name]) {
|
|
348
|
+
return true;
|
|
349
|
+
}
|
|
350
|
+
if (operand2 != 'null' && isDoesNotEqual && valueOfCnrtrlToCheck != operand2 && !valueOfActualControl) {
|
|
351
|
+
return true;
|
|
352
|
+
}
|
|
353
|
+
return false;
|
|
354
|
+
}
|
|
355
|
+
// @dynamic
|
|
356
|
+
static setEqualsValidation(element, sharedData) {
|
|
357
|
+
const func = (formGroup) => {
|
|
358
|
+
if (!formGroup.controls[element.name].value) {
|
|
359
|
+
return null;
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
return func;
|
|
363
|
+
}
|
|
364
|
+
// @dynamic
|
|
365
|
+
static setPasswordValidation(element, sharedData) {
|
|
366
|
+
const func = (formGroup) => {
|
|
367
|
+
if (!formGroup.controls[element.name].value) {
|
|
368
|
+
return null;
|
|
369
|
+
}
|
|
370
|
+
let expression = null;
|
|
371
|
+
let validatorList = element.validators;
|
|
372
|
+
var splitArray;
|
|
373
|
+
validatorList.forEach(validator => {
|
|
374
|
+
if (validator.type === 'expression') {
|
|
375
|
+
expression = validator.expression;
|
|
376
|
+
}
|
|
377
|
+
});
|
|
378
|
+
let index = expression.indexOf('===');
|
|
379
|
+
let isEqualOperand;
|
|
380
|
+
if (index === -1) {
|
|
381
|
+
splitArray = expression.split('>');
|
|
382
|
+
isEqualOperand = false;
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
splitArray = expression.split('===');
|
|
386
|
+
isEqualOperand = true;
|
|
387
|
+
}
|
|
388
|
+
let operand1 = splitArray[0];
|
|
389
|
+
let operand2 = splitArray[1];
|
|
390
|
+
// console.log('setDateValidation sharedData', sharedData);
|
|
391
|
+
operand1 = operand1.replace('{', '').replace('}', '');
|
|
392
|
+
operand2 = operand2.replace('{', '').replace('}', '');
|
|
393
|
+
//console.log('control.parent', control.parent)
|
|
394
|
+
let control1 = formGroup.controls[operand1];
|
|
395
|
+
let control2 = formGroup.controls[operand2];
|
|
396
|
+
if (control1.value != control2.value) {
|
|
397
|
+
formGroup.controls[element.name].setErrors({ passwordComparision: true });
|
|
398
|
+
return { passwordComparision: true };
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
return func;
|
|
402
|
+
}
|
|
403
|
+
// @dynamic
|
|
404
|
+
static setDateValidation(element, sharedData) {
|
|
405
|
+
const func = (formGroup) => {
|
|
406
|
+
if (!formGroup.controls[element.name].value) {
|
|
407
|
+
return null;
|
|
408
|
+
}
|
|
409
|
+
let expression = null;
|
|
410
|
+
let validatorList = element.validators;
|
|
411
|
+
for (let validator of validatorList) {
|
|
412
|
+
if (validator.type === 'expression') {
|
|
413
|
+
expression = validator.expression;
|
|
414
|
+
let operator = '';
|
|
415
|
+
if (expression.includes('>=') || expression.includes('<=')) {
|
|
416
|
+
operator = expression.includes('>=') ? '>=' : '<=';
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
operator = expression.includes('>') ? '>' : '<';
|
|
420
|
+
}
|
|
421
|
+
let splitArray = expression.split(operator).map(str => str.trim());
|
|
422
|
+
let operand1 = splitArray[0];
|
|
423
|
+
let operand2 = splitArray[1];
|
|
424
|
+
operand1 = operand1.replace('{', '').replace('}', '');
|
|
425
|
+
operand2 = operand2.replace('{', '').replace('}', '');
|
|
426
|
+
let control1 = formGroup.controls[operand1];
|
|
427
|
+
let control2 = formGroup.controls[operand2];
|
|
428
|
+
let date1 = null;
|
|
429
|
+
let date2 = null;
|
|
430
|
+
if (control1) {
|
|
431
|
+
date1 = new Date(control1.value);
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
sharedData.forEach((data) => {
|
|
435
|
+
let strIntoObj = JSON.parse(data);
|
|
436
|
+
if (strIntoObj[operand1]) {
|
|
437
|
+
date1 = new Date(strIntoObj[operand1]);
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
if (control2) {
|
|
442
|
+
date2 = new Date(control2.value);
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
sharedData.forEach((data) => {
|
|
446
|
+
let strIntoObj = JSON.parse(data);
|
|
447
|
+
if (strIntoObj[operand2]) {
|
|
448
|
+
date2 = new Date(strIntoObj[operand2]);
|
|
449
|
+
}
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
if (date1 && date2) {
|
|
453
|
+
if (operator === '>=' && date1 >= date2) {
|
|
454
|
+
return null;
|
|
455
|
+
}
|
|
456
|
+
else if (operator === '<=' && date1 <= date2) {
|
|
457
|
+
return null;
|
|
458
|
+
}
|
|
459
|
+
else if (operator === '>' && date1 > date2) {
|
|
460
|
+
return null;
|
|
461
|
+
}
|
|
462
|
+
else if (operator === '<' && date1 < date2) {
|
|
463
|
+
return null;
|
|
464
|
+
}
|
|
465
|
+
else {
|
|
466
|
+
formGroup.controls[element.name].setErrors({ dateComparision: true });
|
|
467
|
+
return { dateComparision: true };
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
return null;
|
|
473
|
+
};
|
|
474
|
+
return func;
|
|
475
|
+
}
|
|
476
|
+
static isEqual(value) {
|
|
477
|
+
const func = (control) => {
|
|
478
|
+
if (value != control.value) {
|
|
479
|
+
return { notEqual: true };
|
|
480
|
+
}
|
|
481
|
+
return null;
|
|
482
|
+
};
|
|
483
|
+
return func;
|
|
484
|
+
}
|
|
485
|
+
static calculateOperandValue(strExp, formGroup) {
|
|
486
|
+
var splitArray;
|
|
487
|
+
let isDoesNotEqual;
|
|
488
|
+
let isContains;
|
|
489
|
+
if (strExp.includes('==')) {
|
|
490
|
+
splitArray = strExp.split('==');
|
|
491
|
+
isDoesNotEqual = false;
|
|
492
|
+
}
|
|
493
|
+
else if (strExp.includes('!=')) {
|
|
494
|
+
splitArray = strExp.split('!=');
|
|
495
|
+
isDoesNotEqual = true;
|
|
496
|
+
}
|
|
497
|
+
else if (strExp.includes('contains')) {
|
|
498
|
+
splitArray = strExp.split('contains');
|
|
499
|
+
isContains = true;
|
|
500
|
+
}
|
|
501
|
+
let operand1 = splitArray[0];
|
|
502
|
+
let operand2 = splitArray[1];
|
|
503
|
+
operand1 = operand1.replace('{', '').replace('}', '').trim(); //claimantPriorPay102
|
|
504
|
+
operand2 = operand2.replace('{', '').replace('}', '').trim(); //null
|
|
505
|
+
var valueOfCnrtrlToCheck;
|
|
506
|
+
//console.log('operand1',operand1);
|
|
507
|
+
if (formGroup.controls[operand1] && formGroup.controls[operand1].value && typeof (formGroup.controls[operand1]).value === 'string') {
|
|
508
|
+
valueOfCnrtrlToCheck = formGroup.controls[operand1].value.trim();
|
|
509
|
+
}
|
|
510
|
+
if (formGroup.controls[operand1] && formGroup.controls[operand1].value && typeof (formGroup.controls[operand1]).value != 'string') {
|
|
511
|
+
//console.log('operanformGroup.controls[operand1].value[value]',formGroup.controls[operand1].value[0]);
|
|
512
|
+
if (formGroup.controls[operand1].value['value']) {
|
|
513
|
+
valueOfCnrtrlToCheck = formGroup.controls[operand1].value['value'].trim();
|
|
514
|
+
}
|
|
515
|
+
else if (formGroup.controls[operand1].value[0]) {
|
|
516
|
+
valueOfCnrtrlToCheck = formGroup.controls[operand1].value;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
if (operand2 === 'null' && isDoesNotEqual && valueOfCnrtrlToCheck) {
|
|
520
|
+
return true;
|
|
521
|
+
}
|
|
522
|
+
if (operand2 === 'null' && !isDoesNotEqual && !valueOfCnrtrlToCheck) {
|
|
523
|
+
return true;
|
|
524
|
+
}
|
|
525
|
+
operand2 = operand2.replace('\'', '').replace('\'', '').trim(); //null
|
|
526
|
+
if (isContains && (valueOfCnrtrlToCheck && Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2))) {
|
|
527
|
+
return true;
|
|
528
|
+
}
|
|
529
|
+
if (isContains && (valueOfCnrtrlToCheck && !Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2))) {
|
|
530
|
+
return true;
|
|
531
|
+
}
|
|
532
|
+
if (operand2 != 'null' && !isDoesNotEqual && (valueOfCnrtrlToCheck && valueOfCnrtrlToCheck === operand2)) {
|
|
533
|
+
return true;
|
|
534
|
+
}
|
|
535
|
+
if (operand2 != 'null' && isDoesNotEqual && (valueOfCnrtrlToCheck && valueOfCnrtrlToCheck.trim() != operand2)) {
|
|
536
|
+
return true;
|
|
537
|
+
}
|
|
538
|
+
return false;
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwVmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL0FwcFZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsTUFBTSxPQUFPLGFBQWE7SUFJdEIsV0FBVztJQUNYLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFZLEVBQUUsVUFBMkIsRUFBRSxTQUFpQjtRQUNoRixJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUEyQixFQUFFLEVBQUU7WUFDekMsSUFBSSxjQUFjLEtBQUssMEJBQTBCLEVBQUU7Z0JBQy9DLElBQUksR0FBNkIsQ0FBQztnQkFDbEMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbEMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDN0MsSUFBSSxHQUFHLEVBQUU7d0JBQ0wsSUFBSSxTQUF5QyxDQUFDO3dCQUM5QyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQzt3QkFDMUIsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUc7K0JBQy9FLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUN6QixTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7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QUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQztZQUN6SCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsb0JBQW9CLElBQUksb0JBQW9CLEtBQUssUUFBUSxDQUFDLEVBQUU7WUFDeEcsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxjQUFjLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxRQUFRLENBQUMsRUFBRTtZQUM3RyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBRU4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBZGRyZXNzQ29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvQWRkcmVzc0NvbXBvbmVudE1vZGVsJztcclxuaW1wb3J0IHsgQmFua0RldGFpbHNDb21wb25lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9CYW5rRGV0YWlsc0NvbXBvbmVudE1vZGVsJztcclxuaW1wb3J0IHsgQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0NsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWwnO1xyXG5pbXBvcnQgeyBDbGFpbUFwcEVtcFJlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9DbGFpbUFwcEVtcFJlc3BvbnNlTW9kZWwnO1xyXG5pbXBvcnQgeyBFbGVtZW50c01vZGVsLCBWYWxpZGF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9FbGVtZW50c01vZGVsJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVzdGlvbm5haXJlL3ZhbGlkYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEVtcGxveWVySW5mb01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0VtcGxveWVyRGV0YWlsU2VhcmNoUmVzdWx0JztcclxuaW1wb3J0IHsgQXV0b2NvZGVyTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9BdXRvY29kZXJNb2RlbCc7XHJcbmV4cG9ydCBjbGFzcyBBcHBWYWxpZGF0b3JzIHtcclxuXHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgY3VzdG9tVmFsaWRhdGlvbihlbGVtZW50OiBhbnksIHZhbGlkYXRpb246IFZhbGlkYXRpb25Nb2RlbCwgc3RhdGVOYW1lOiBzdHJpbmcsKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGxldCB2YWxpZGF0aW9uTmFtZSA9IHZhbGlkYXRpb24uY3VzdG9tVmFsaWRhdGlvbk5hbWU7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImJhc2VQZXJpb2RFbXBsVmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsOiBDbGFpbUFwcEVtcFJlc3BvbnNlTW9kZWw7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBicEVtcExpc3Q6IENsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWxbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnBFbXBMaXN0ID0gdmFsLmJwRW1wTGlzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1snd29ya2ZvcmVtcCddICYmIGZvcm1Hcm91cC5jb250cm9sc1snd29ya2ZvcmVtcCddLnZhbHVlID09PSAnWSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGJwRW1wTGlzdC5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBicEVtcGxyTGVuZ3RoRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGJwRW1wbHJMZW5ndGhGbGFnOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYnBFbXAgb2YgYnBFbXBMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnBFbXAuYnBFbXBsb3llckZsYWcgPT09ICcxJyAmJiAhYnBFbXAuZW1wRGVsZXRlZCApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBicEVtcGxyRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBicEVtcGxyRmxhZzogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwic2ltcGxlQ2hlY2tCb3hWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgc2ltcGxlQ2hlY2tCb3hWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImNwYXRjaHZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBjcGF0Y2h2YWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcInVwbG9hZHZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSB8fCAoQXJyYXkuaXNBcnJheShmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkgJiYgIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgdXBsb2FkdmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJhZGRyZXNzVmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYWRkcmVzc0NvbXBWYWx1ZTogQWRkcmVzc0NvbXBvbmVudE1vZGVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc0NvbXBWYWx1ZSA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzQ29tcFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWRkcmVzc0NvbXBWYWx1ZS5jaXR5IHx8ICFhZGRyZXNzQ29tcFZhbHVlLnN0YXRlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWRkcmVzc0NvbXBWYWx1ZVsnemlwJ10gfHwgIWFkZHJlc3NDb21wVmFsdWUuY291bnRyeSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWFkZHJlc3NDb21wVmFsdWVbJ3N0cmVldEFkZHJlc3MnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGFkZHJlc3NWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUgJiYgYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZSAmJiAoKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgPT09ICdNUycgJiYgc3RhdGVOYW1lID09PSAnTVMnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgPT09ICdDVCcgJiYgc3RhdGVOYW1lID09PSAnQ1QnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVsZW1lbnQuY291bnR5UmVxdWlyZWQgPT09IHRydWUgJiYgIWFkZHJlc3NDb21wVmFsdWVbJ2NvdW50eSddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUgJiYgYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZSA9PT0gJ01FJyAmJiBzdGF0ZU5hbWUgPT09ICdNRSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVsZW1lbnQuY291bnR5UmVxdWlyZWQgPT09IHRydWUgJiYgIWFkZHJlc3NDb21wVmFsdWVbJ3Rvd24nXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGRyZXNzQ29tcFZhbHVlLmNvdW50cnkudmFsdWUgPT09ICdVUycgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgISgvXlxcZHs1fShcXGR7NH0pPyQvLnRlc3QoYWRkcmVzc0NvbXBWYWx1ZS56aXApKSkgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRkcmVzc0NvbXBWYWx1ZS5jb3VudHJ5LnZhbHVlID09PSAnQ0EnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEoIC9eW0FCQ0VHSEotTlBSU1RWWFldXFxkW0FCQ0VHSEotTlBSU1RWLVpdWyAtXT9cXGRbQUJDRUdISi1OUFJTVFYtWl1cXGQkL2kudGVzdChhZGRyZXNzQ29tcFZhbHVlLnppcCkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IGVsZW1lbnQucmVxdWlyZWRJZjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnPT0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250b2xOYW1lOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udG9sTmFtZSA9IGNvbnRvbE5hbWUucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnXFwnJywgJycpLnJlcGxhY2UoJ1xcJycsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdICYmIGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGFkZHJlc3NWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiYmFua0RldGFpbHNWYWxpZGF0aW9uRmxhZ1wiKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGJhbmtEZXRhaWxzQ29tcG9uZW50VmFsOiBCYW5rRGV0YWlsc0NvbXBvbmVudE1vZGVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFua0RldGFpbHNDb21wb25lbnRWYWwgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udG9sTmFtZTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRvbE5hbWUgPSBjb250b2xOYW1lLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJ1xcJycsICcnKS5yZXBsYWNlKCdcXCcnLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXSAmJiBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhbmtEZXRhaWxzQ29tcG9uZW50VmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLmFjY291bnROdW1iZXIgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLmFjY291bnRUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLm5hbWVPbkFjY291bnQgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLnJlRW50ZXJBY2NvdW50TnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLnJvdXRpbmdOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYmFua0RldGFpbHNWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwibm90RXF1YWxzXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50Rm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGRzOiBzdHJpbmdbXSA9IHZhbGlkYXRpb24uZXhwcmVzc2lvbi5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gY3VycmVudEZvcm1Db250cm9sLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvdGhlckZpZWxkRm9ybUNvbnRyb2xOYW1lID0gZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLnRyaW0oKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvdGhlckZpZWxkVmFsdWUgPSBvdGhlckZpZWxkRm9ybUNvbnRyb2xOYW1lLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsICYmIG90aGVyRmllbGRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCh2YWwudmFsdWUgJiYgb3RoZXJGaWVsZFZhbHVlLnZhbHVlICYmIHZhbC52YWx1ZSA9PT0gb3RoZXJGaWVsZFZhbHVlLnZhbHVlKSB8fCB2YWwgPT09IG90aGVyRmllbGRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyRmllbGRGb3JtQ29udHJvbE5hbWUuc2V0RXJyb3JzKHsgbm90RXF1YWxzOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWN1cnJlbnRGb3JtQ29udHJvbC5lcnJvcnMgJiYgdmFsICYmIG90aGVyRmllbGRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgodmFsLnZhbHVlICYmIG90aGVyRmllbGRWYWx1ZS52YWx1ZSAmJiB2YWwudmFsdWUgIT0gb3RoZXJGaWVsZFZhbHVlLnZhbHVlKSB8fCB2YWwgIT0gb3RoZXJGaWVsZFZhbHVlKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA6IFNldDxhbnk+ID0gdGhpcy5nZXRPdGhlckZvcm1GaWVsZHNWYWx1ZXMoZmllbGRzLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlcy5zaXplID09IGZpZWxkcy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlckZpZWxkRm9ybUNvbnRyb2xOYW1lLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ3Y0VtcGxveWVyVmFsaWRhdGlvblwiKXtcclxuICAgICAgICAgICAgICAgIGxldCBlbXBNb2RlbHMgOiBFbXBsb3llckluZm9Nb2RlbFtdID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgbGV0IGlmV29ya1BlcmZvcm1lZCA9IGZvcm1Hcm91cC5jb250cm9sc1tcIndvcmtQZXJmb3JtZWRcIl0udmFsdWU7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYoaWZXb3JrUGVyZm9ybWVkID09PSBcIllcIil7XHJcbiAgICAgICAgICAgICAgICBpZihlbXBNb2RlbHMpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBub25Db21wbGV0ZWRFbXBzID0gZW1wTW9kZWxzLmZpbHRlcihlID0+ICFlLmlzUGFydFRpbWVFbXBsb3llckVkaXRlZCAmJiBlLmlzUGFydFRpbWVFbXBsb3llcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobm9uQ29tcGxldGVkRW1wcyAmJiBub25Db21wbGV0ZWRFbXBzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyB3Y0VtcGxveWVyVmFsaWRhdGlvbiA6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHdjRW1wbG95ZXJWYWxpZGF0aW9uIDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiam9iVGl0bGVWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBqb2JUaXRsZU1vZGVscyA6IEF1dG9jb2Rlck1vZGVsW10gPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXT8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGNvZGUgcGxhY2Vob2xkZXIgZm9yIGpvYiB0aXRsZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuICAgIHN0YXRpYyBnZXRPdGhlckZvcm1GaWVsZHNWYWx1ZXMoZmllbGRzOiBzdHJpbmdbXSwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA6IFNldDxhbnk+e1xyXG4gICAgICAgIGxldCBzZXQgOiBTZXQ8YW55PiA9IG5ldyBTZXQoKTtcclxuICAgICAgICBmaWVsZHMuZm9yRWFjaCAoZiA9PiB7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA6IGFueSA9IGZvcm1Hcm91cC5jb250cm9sc1tmXT8udmFsdWU7XHJcbiAgICAgICAgICAgIHZhbHVlICYmIHR5cGVvZih2YWx1ZSkgPT0gJ29iamVjdCcgPyBzZXQuYWRkKHZhbHVlLnZhbHVlKSA6IHNldC5hZGQodmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBzZXQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgY3JlYXRlVmFsaWRhdG9yKHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSwgZWxlbWVudDogYW55KTogQXN5bmNWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnM+ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdO1xyXG4gICAgICAgICAgICBsZXQgZmllbGRWYWx1ZTogc3RyaW5nID0gY29udHJvbC52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKCFmaWVsZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHNlcnZpY2VOYW1lOiBzdHJpbmcgPSBlbGVtZW50LnNlcnZpY2VOYW1lO1xyXG4gICAgICAgICAgICBsZXQgc2VydmljZUNhbGxUeXBlID0gZWxlbWVudC5zZXJ2aWNlQ2FsbFR5cGU7XHJcbiAgICAgICAgICAgIGxldCBzZXJ2aWNlVHlwZSA9IGVsZW1lbnQuc2VydmljZVR5cGU7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VydmljZUNhbGxUeXBlID09PSAnR0VUJykge1xyXG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvblNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuZ2V0KGAke3NlcnZpY2VOYW1lfSR7ZmllbGRWYWx1ZX1gKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVzICcsIHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ1ZBTElEQVRFJykge1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ1ZBTElEQVRFJykge1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ1VQREFURScpIHtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgc2V0UmVxdWlyZWRJZlZhbGlkYXRpb24oZWxlbWVudDogRWxlbWVudHNNb2RlbCwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3NldFJlcXVpcmVkSWZWYWxpZGF0aW9uIC0tJyxlbGVtZW50KTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2Zvcm1Hcm91cCAtLScsZm9ybUdyb3VwKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmN1c3RvbVRhZyAmJiBlbGVtZW50LmN1c3RvbVRhZyA9PT0gJ09wdGlvbmFsJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpc1JlcXVpcmVkIDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZihleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpKXtcclxuICAgICAgICAgICAgbGV0IGV4cHIgOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJyYmJyk7XHJcbiAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYoZXhwci5sZW5ndGggPj0gMyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMl0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihleHByLmxlbmd0aCA+PSA0KXtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclszXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKGV4cHIubGVuZ3RoID09IDUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzRdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoZXhwci5sZW5ndGggPiA1KXtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIkFwcFZhbGlkYXRvcnMgOiBNb3JlIHRoYW4gNSAnJiYnIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkLlwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZihleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpKXtcclxuICAgICAgICAgICAgbGV0IGV4cHIgOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJ3x8Jyk7XHJcbiAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgaWYoZXhwci5sZW5ndGggPj0gMyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMl0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihleHByLmxlbmd0aCA+PSA0KXtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclszXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKGV4cHIubGVuZ3RoID09IDUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzRdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoZXhwci5sZW5ndGggPiA1KXtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIkFwcFZhbGlkYXRvcnMgOiBNb3JlIHRoYW4gNSAnfHwnIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkLlwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZighZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSl7XHJcbiAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJlc3Npb24udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZihpc1JlcXVpcmVkKXtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHJlcXVpcmVkSWY6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZElmOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXT8uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJlc3Npb246IHN0cmluZywgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLCBlbGVtZW50OiBFbGVtZW50c01vZGVsLCBzaGFyZWREYXRhOiBhbnkpIDogYm9vbGVhbntcclxuICAgICAgICB2YXIgc3BsaXRBcnJheTtcclxuICAgICAgICBsZXQgaXNEb2VzTm90RXF1YWw6IGJvb2xlYW47XHJcbiAgICAgICAgbGV0IGlzQ29udGFpbnM6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCc9PScpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICBpc0RvZXNOb3RFcXVhbCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnIT0nKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnIT0nKTtcclxuICAgICAgICAgICAgaXNEb2VzTm90RXF1YWwgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnY29udGFpbnMnKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnY29udGFpbnMnKTtcclxuICAgICAgICAgICAgaXNDb250YWlucyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvcGVyYW5kMTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcbiAgICAgICAgb3BlcmFuZDEgPSBvcGVyYW5kMS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpO1xyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgIHZhciB2YWx1ZU9mQWN0dWFsQ29udHJvbDtcclxuICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgdmFsdWVPZkFjdHVhbENvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaGFyZWREYXRhLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RySW50b09iajogW10gPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0ckludG9PYmpbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlT2ZBY3R1YWxDb250cm9sID0gc3RySW50b09ialtlbGVtZW50Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2YWx1ZU9mQ25ydHJsVG9DaGVjaztcclxuXHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSAmJiB0eXBlb2YgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0pLnZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUudHJpbSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSAmJiB0eXBlb2YgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0pLnZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWyd2YWx1ZSddKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbJ3ZhbHVlJ10udHJpbSgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbMF0pIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmICFBcnJheS5pc0FycmF5KHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSkge1xyXG4gICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLnRyaW0oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiA9PT0gJ251bGwnICYmIGlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmICF2YWx1ZU9mQWN0dWFsQ29udHJvbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiA9PT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiB2YWx1ZU9mQWN0dWFsQ29udHJvbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgvXFwnL2csIFwiXCIpOyAvL251bGxcclxuXHJcbiAgICAgICAgaWYgKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIEFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkgJiYgIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Py5uYW1lXT8udmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNDb250YWlucyAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIUFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkgJiYgIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Py5uYW1lXT8udmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gb3BlcmFuZDIgJiYgIXZhbHVlT2ZBY3R1YWxDb250cm9sICYmIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Py5uYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmIGlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICE9IG9wZXJhbmQyICYmICF2YWx1ZU9mQWN0dWFsQ29udHJvbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldEVxdWFsc1ZhbGlkYXRpb24oZWxlbWVudDogYW55LCBzaGFyZWREYXRhOiBhbnkpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApID0+IHtcclxuICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgc2V0UGFzc3dvcmRWYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcbiAgICAgICAgICAgIHZhciBzcGxpdEFycmF5O1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JMaXN0LmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHZhbGlkYXRvci5leHByZXNzaW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBleHByZXNzaW9uLmluZGV4T2YoJz09PScpO1xyXG4gICAgICAgICAgICBsZXQgaXNFcXVhbE9wZXJhbmQ6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc+Jyk7XHJcbiAgICAgICAgICAgICAgICBpc0VxdWFsT3BlcmFuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09PScpO1xyXG4gICAgICAgICAgICAgICAgaXNFcXVhbE9wZXJhbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgb3BlcmFuZDE6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF07XHJcbiAgICAgICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICAgICAgLy8gIGNvbnNvbGUubG9nKCdzZXREYXRlVmFsaWRhdGlvbiBzaGFyZWREYXRhJywgc2hhcmVkRGF0YSk7XHJcblxyXG5cclxuICAgICAgICAgICAgb3BlcmFuZDEgPSBvcGVyYW5kMS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb250cm9sLnBhcmVudCcsIGNvbnRyb2wucGFyZW50KVxyXG4gICAgICAgICAgICBsZXQgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgICAgICBsZXQgY29udHJvbDIgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDJdO1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbDEudmFsdWUgIT0gY29udHJvbDIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHBhc3N3b3JkQ29tcGFyaXNpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwYXNzd29yZENvbXBhcmlzaW9uOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldERhdGVWYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCB2YWxpZGF0b3Igb2YgdmFsaWRhdG9yTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gdmFsaWRhdG9yLmV4cHJlc3Npb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYXRvciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCc+PScpIHx8IGV4cHJlc3Npb24uaW5jbHVkZXMoJzw9JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmluY2x1ZGVzKCc+PScpID8gJz49JyA6ICc8PSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmluY2x1ZGVzKCc+JykgPyAnPicgOiAnPCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXRBcnJheTogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KG9wZXJhdG9yKS5tYXAoc3RyID0+IHN0ci50cmltKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYW5kMTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmFuZDEgPSBvcGVyYW5kMS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRyb2wxID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udHJvbDIgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDJdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0ZTE6IERhdGUgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0ZTI6IERhdGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUxID0gbmV3IERhdGUoY29udHJvbDEudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZERhdGEuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RySW50b09iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RySW50b09ialtvcGVyYW5kMV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlMSA9IG5ldyBEYXRlKHN0ckludG9PYmpbb3BlcmFuZDFdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKGNvbnRyb2wyLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWREYXRhLmZvckVhY2goKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0ckludG9PYmogPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ckludG9PYmpbb3BlcmFuZDJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTIgPSBuZXcgRGF0ZShzdHJJbnRvT2JqW29wZXJhbmQyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGUxICYmIGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gJz49JyAmJiBkYXRlMSA+PSBkYXRlMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09ICc8PScgJiYgZGF0ZTEgPD0gZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yID09PSAnPicgJiYgZGF0ZTEgPiBkYXRlMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09ICc8JyAmJiBkYXRlMSA8IGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGRhdGVDb21wYXJpc2lvbjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGVDb21wYXJpc2lvbjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0VxdWFsKHZhbHVlKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBub3RFcXVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgY2FsY3VsYXRlT3BlcmFuZFZhbHVlKHN0ckV4cDogc3RyaW5nLCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApe1xyXG4gICAgICAgIHZhciBzcGxpdEFycmF5OiBzdHJpbmdbXTtcclxuICAgICAgICBsZXQgaXNEb2VzTm90RXF1YWw6IGJvb2xlYW47XHJcbiAgICAgICAgbGV0IGlzQ29udGFpbnM6IGJvb2xlYW47XHJcbiAgICAgICAgaWYgKHN0ckV4cC5pbmNsdWRlcygnPT0nKSkge1xyXG4gICAgICAgICAgc3BsaXRBcnJheSA9IHN0ckV4cC5zcGxpdCgnPT0nKTtcclxuICAgICAgICAgIGlzRG9lc05vdEVxdWFsID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmKHN0ckV4cC5pbmNsdWRlcygnIT0nKSl7XHJcbiAgICAgICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCchPScpO1xyXG4gICAgICAgICAgaXNEb2VzTm90RXF1YWwgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZihzdHJFeHAuaW5jbHVkZXMoJ2NvbnRhaW5zJykpe1xyXG4gICAgICAgICAgc3BsaXRBcnJheSA9IHN0ckV4cC5zcGxpdCgnY29udGFpbnMnKTtcclxuICAgICAgICAgIGlzQ29udGFpbnMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgb3BlcmFuZDE6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF07XHJcbiAgICAgICAgbGV0IG9wZXJhbmQyOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdO1xyXG4gICAgICAgIG9wZXJhbmQxID0gb3BlcmFuZDEucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTsgLy9jbGFpbWFudFByaW9yUGF5MTAyXHJcbiAgICAgICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpOyAvL251bGxcclxuICAgICAgICB2YXIgdmFsdWVPZkNucnRybFRvQ2hlY2s7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnb3BlcmFuZDEnLG9wZXJhbmQxKTtcclxuICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSAmJiBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlICYmIHR5cGVvZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSkudmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICBcclxuICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSAmJiB0eXBlb2YgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0pLnZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdvcGVyYW5mb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlW3ZhbHVlXScsZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVswXSk7XHJcbiAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVsndmFsdWUnXSkge1xyXG4gICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbJ3ZhbHVlJ10udHJpbSgpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbMF0pe1xyXG4gICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChvcGVyYW5kMiA9PT0gJ251bGwnICYmIGlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wZXJhbmQyID09PSAnbnVsbCcgJiYgIWlzRG9lc05vdEVxdWFsICYmICF2YWx1ZU9mQ25ydHJsVG9DaGVjaykge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgnXFwnJywgJycpLnJlcGxhY2UoJ1xcJycsICcnKS50cmltKCk7IC8vbnVsbFxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIEFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkpe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgaWYoaXNDb250YWlucyAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIUFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkpe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyICE9ICdudWxsJyAmJiAhaXNEb2VzTm90RXF1YWwgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSBvcGVyYW5kMikpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGlmIChvcGVyYW5kMiAhPSAnbnVsbCcgJiYgaXNEb2VzTm90RXF1YWwgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLnRyaW0oKSAhPSBvcGVyYW5kMikpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxufSJdfQ==
|