@po-ui/ng-templates 18.23.0 → 19.0.0-next.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/fesm2022/po-ui-ng-templates.mjs +139 -122
- package/fesm2022/po-ui-ng-templates.mjs.map +1 -1
- package/lib/components/po-modal-password-recovery/po-modal-password-recovery-base.component.d.ts +1 -1
- package/lib/components/po-modal-password-recovery/po-modal-password-recovery.service.d.ts +1 -1
- package/lib/components/po-page-blocked-user/po-page-blocked-user-base.component.d.ts +1 -1
- package/lib/components/po-page-blocked-user/po-page-blocked-user.component.d.ts +1 -1
- package/lib/components/po-page-change-password/po-page-change-password-base.component.d.ts +1 -1
- package/lib/components/po-page-change-password/po-page-change-password.service.d.ts +1 -1
- package/lib/components/po-page-dynamic-search/po-advanced-filter/po-advanced-filter-base.component.d.ts +1 -1
- package/lib/components/po-page-dynamic-search/po-page-dynamic-search-base.component.d.ts +1 -1
- package/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.d.ts +2 -2
- package/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-custom-action.interface.d.ts +1 -1
- package/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-custom-table-action.interface.d.ts +1 -1
- package/lib/components/po-page-dynamic-table/po-page-dynamic-list-base.component.d.ts +2 -2
- package/lib/components/po-page-dynamic-table/po-page-dynamic-table.component.d.ts +2 -2
- package/lib/components/po-page-job-scheduler/po-page-job-scheduler-base.component.d.ts +1 -1
- package/lib/components/po-page-job-scheduler/po-page-job-scheduler-execution/po-page-job-scheduler-execution.component.d.ts +2 -2
- package/lib/components/po-page-job-scheduler/po-page-job-scheduler-parameters/po-job-scheduler-parameters-template/po-job-scheduler-parameters-template.directive.d.ts +1 -1
- package/lib/components/po-page-job-scheduler/po-page-job-scheduler-summary/po-page-job-scheduler-summary.component.d.ts +1 -1
- package/lib/components/po-page-login/po-page-login-base.component.d.ts +1 -1
- package/lib/components/po-page-login/po-page-login.service.d.ts +1 -1
- package/package.json +13 -15
- package/po-ui-ng-templates-19.0.0-next.0.tgz +0 -0
- package/schematics/ng-add/index.js +2 -2
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-generate/po-page-blocked-user/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
- package/schematics/ng-generate/po-page-blocked-user/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
- package/schematics/ng-generate/po-page-blocked-user/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
- package/schematics/ng-generate/po-page-blocked-user/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
- package/schematics/ng-generate/po-page-blocked-user/index.js +1 -1
- package/schematics/ng-generate/po-page-blocked-user/index.js.map +1 -1
- package/schematics/ng-generate/po-page-change-password/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
- package/schematics/ng-generate/po-page-change-password/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
- package/schematics/ng-generate/po-page-change-password/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
- package/schematics/ng-generate/po-page-change-password/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
- package/schematics/ng-generate/po-page-change-password/index.js +1 -1
- package/schematics/ng-generate/po-page-change-password/index.js.map +1 -1
- package/schematics/ng-generate/po-page-dynamic-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
- package/schematics/ng-generate/po-page-dynamic-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
- package/schematics/ng-generate/po-page-dynamic-detail/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
- package/schematics/ng-generate/po-page-dynamic-detail/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
- package/schematics/ng-generate/po-page-dynamic-detail/index.js +1 -1
- package/schematics/ng-generate/po-page-dynamic-detail/index.js.map +1 -1
- package/schematics/ng-generate/po-page-dynamic-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
- package/schematics/ng-generate/po-page-dynamic-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
- package/schematics/ng-generate/po-page-dynamic-edit/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
- package/schematics/ng-generate/po-page-dynamic-edit/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
- package/schematics/ng-generate/po-page-dynamic-edit/index.js +1 -1
- package/schematics/ng-generate/po-page-dynamic-edit/index.js.map +1 -1
- package/schematics/ng-generate/po-page-dynamic-search/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
- package/schematics/ng-generate/po-page-dynamic-search/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
- package/schematics/ng-generate/po-page-dynamic-search/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
- package/schematics/ng-generate/po-page-dynamic-search/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
- package/schematics/ng-generate/po-page-dynamic-search/index.js +1 -1
- package/schematics/ng-generate/po-page-dynamic-search/index.js.map +1 -1
- package/schematics/ng-generate/po-page-dynamic-table/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
- package/schematics/ng-generate/po-page-dynamic-table/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
- package/schematics/ng-generate/po-page-dynamic-table/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
- package/schematics/ng-generate/po-page-dynamic-table/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
- package/schematics/ng-generate/po-page-dynamic-table/index.js +1 -1
- package/schematics/ng-generate/po-page-dynamic-table/index.js.map +1 -1
- package/schematics/ng-generate/po-page-job-scheduler/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
- package/schematics/ng-generate/po-page-job-scheduler/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
- package/schematics/ng-generate/po-page-job-scheduler/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
- package/schematics/ng-generate/po-page-job-scheduler/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
- package/schematics/ng-generate/po-page-job-scheduler/index.js +1 -1
- package/schematics/ng-generate/po-page-job-scheduler/index.js.map +1 -1
- package/schematics/ng-generate/po-page-login/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
- package/schematics/ng-generate/po-page-login/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
- package/schematics/ng-generate/po-page-login/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
- package/schematics/ng-generate/po-page-login/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
- package/schematics/ng-generate/po-page-login/index.js +1 -1
- package/schematics/ng-generate/po-page-login/index.js.map +1 -1
- package/esm2022/lib/components/components.module.mjs +0 -84
- package/esm2022/lib/components/index.mjs +0 -12
- package/esm2022/lib/components/po-modal-password-recovery/enums/po-modal-password-recovery-modal-content.enum.mjs +0 -17
- package/esm2022/lib/components/po-modal-password-recovery/enums/po-modal-password-recovery-type.enum.mjs +0 -17
- package/esm2022/lib/components/po-modal-password-recovery/index.mjs +0 -8
- package/esm2022/lib/components/po-modal-password-recovery/interfaces/po-modal-password-recovery.interface.mjs +0 -2
- package/esm2022/lib/components/po-modal-password-recovery/literals/i18n/po-modal-password-recovery-literals.mjs +0 -119
- package/esm2022/lib/components/po-modal-password-recovery/po-modal-password-recovery-base.component.mjs +0 -293
- package/esm2022/lib/components/po-modal-password-recovery/po-modal-password-recovery-error-message/po-modal-password-recovery-error-message.component.mjs +0 -34
- package/esm2022/lib/components/po-modal-password-recovery/po-modal-password-recovery.component.mjs +0 -451
- package/esm2022/lib/components/po-modal-password-recovery/po-modal-password-recovery.module.mjs +0 -29
- package/esm2022/lib/components/po-modal-password-recovery/po-modal-password-recovery.service.mjs +0 -18
- package/esm2022/lib/components/po-page-background/index.mjs +0 -3
- package/esm2022/lib/components/po-page-background/po-page-background.component.mjs +0 -191
- package/esm2022/lib/components/po-page-background/po-page-background.module.mjs +0 -27
- package/esm2022/lib/components/po-page-blocked-user/enums/po-page-blocked-user-reason.enum.mjs +0 -17
- package/esm2022/lib/components/po-page-blocked-user/index.mjs +0 -8
- package/esm2022/lib/components/po-page-blocked-user/interfaces/po-page-blocked-user-reason-params.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-blocked-user/literals/i18n/po-page-blocked-user-literals.mjs +0 -78
- package/esm2022/lib/components/po-page-blocked-user/po-page-blocked-user-base.component.mjs +0 -197
- package/esm2022/lib/components/po-page-blocked-user/po-page-blocked-user-contacts/po-page-blocked-user-contacts.component.mjs +0 -105
- package/esm2022/lib/components/po-page-blocked-user/po-page-blocked-user-reason/po-page-blocked-user-reason.component.mjs +0 -107
- package/esm2022/lib/components/po-page-blocked-user/po-page-blocked-user.component.mjs +0 -108
- package/esm2022/lib/components/po-page-blocked-user/po-page-blocked-user.module.mjs +0 -29
- package/esm2022/lib/components/po-page-change-password/index.mjs +0 -7
- package/esm2022/lib/components/po-page-change-password/interfaces/po-page-change-password-recovery.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-change-password/interfaces/po-page-change-password-requirement.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-change-password/interfaces/po-page-change-password.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-change-password/literals/i18n/po-page-change-password-literals.mjs +0 -79
- package/esm2022/lib/components/po-page-change-password/po-page-change-password-base.component.mjs +0 -300
- package/esm2022/lib/components/po-page-change-password/po-page-change-password.component.mjs +0 -401
- package/esm2022/lib/components/po-page-change-password/po-page-change-password.module.mjs +0 -30
- package/esm2022/lib/components/po-page-change-password/po-page-change-password.service.mjs +0 -18
- package/esm2022/lib/components/po-page-dynamic-detail/index.mjs +0 -10
- package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-actions.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-before-back.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-before-edit.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-before-remove.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-field.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-metadata.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-options.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-detail/po-page-dynamic-detail-actions.service.mjs +0 -44
- package/esm2022/lib/components/po-page-dynamic-detail/po-page-dynamic-detail.component.mjs +0 -546
- package/esm2022/lib/components/po-page-dynamic-detail/po-page-dynamic-detail.module.mjs +0 -54
- package/esm2022/lib/components/po-page-dynamic-edit/index.mjs +0 -11
- package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-actions.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-before-cancel.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-before-save-new.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-before-save.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-field.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-literals.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-metadata.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-options.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-edit/po-page-dynamic-edit-actions.service.mjs +0 -44
- package/esm2022/lib/components/po-page-dynamic-edit/po-page-dynamic-edit.component.mjs +0 -889
- package/esm2022/lib/components/po-page-dynamic-edit/po-page-dynamic-edit.module.mjs +0 -60
- package/esm2022/lib/components/po-page-dynamic-search/index.mjs +0 -7
- package/esm2022/lib/components/po-page-dynamic-search/po-advanced-filter/po-advanced-filter-base.component.mjs +0 -133
- package/esm2022/lib/components/po-page-dynamic-search/po-advanced-filter/po-advanced-filter-literals.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-search/po-advanced-filter/po-advanced-filter.component.mjs +0 -76
- package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search-base.component.mjs +0 -365
- package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search-filters.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search-literals.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search-options.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.mjs +0 -349
- package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search.module.mjs +0 -52
- package/esm2022/lib/components/po-page-dynamic-table/index.mjs +0 -16
- package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-actions.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-before-detail.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-before-duplicate.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-before-edit.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-before-new.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-before-remove-all.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-before-remove.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-custom-action.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-custom-table-action.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-field.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-filters.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-metadata.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-options.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-dynamic-table/po-page-dynamic-list-base.component.mjs +0 -271
- package/esm2022/lib/components/po-page-dynamic-table/po-page-dynamic-table-actions.service.mjs +0 -59
- package/esm2022/lib/components/po-page-dynamic-table/po-page-dynamic-table-literals.mjs +0 -63
- package/esm2022/lib/components/po-page-dynamic-table/po-page-dynamic-table.component.mjs +0 -1257
- package/esm2022/lib/components/po-page-dynamic-table/po-page-dynamic-table.module.mjs +0 -50
- package/esm2022/lib/components/po-page-job-scheduler/index.mjs +0 -6
- package/esm2022/lib/components/po-page-job-scheduler/interfaces/po-job-scheduler-internal.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-job-scheduler/interfaces/po-job-scheduler.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-base.component.mjs +0 -302
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-execution/po-page-job-scheduler-execution.component.mjs +0 -393
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-internal.mjs +0 -13
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-literals.mjs +0 -195
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-lookup.service.mjs +0 -22
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-parameters/index.mjs +0 -2
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-parameters/po-job-scheduler-parameters-template/index.mjs +0 -2
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-parameters/po-job-scheduler-parameters-template/po-job-scheduler-parameters-template.directive.mjs +0 -92
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-parameters/po-page-job-scheduler-parameters.component.mjs +0 -79
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-summary/index.mjs +0 -2
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-summary/po-job-scheduler-summary-template/index.mjs +0 -2
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-summary/po-job-scheduler-summary-template/po-job-scheduler-summary-template.directive.mjs +0 -44
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-summary/po-page-job-scheduler-summary.component.mjs +0 -211
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler.component.mjs +0 -418
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler.module.mjs +0 -85
- package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler.service.mjs +0 -224
- package/esm2022/lib/components/po-page-login/enums/po-page-login-authentication-type.enum.mjs +0 -15
- package/esm2022/lib/components/po-page-login/index.mjs +0 -8
- package/esm2022/lib/components/po-page-login/interfaces/po-page-login-custom-field.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-login/interfaces/po-page-login-literals.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-login/interfaces/po-page-login-recovery.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-login/interfaces/po-page-login.interface.mjs +0 -2
- package/esm2022/lib/components/po-page-login/po-page-login-base.component.mjs +0 -1099
- package/esm2022/lib/components/po-page-login/po-page-login-popover/po-page-login-popover.component.mjs +0 -137
- package/esm2022/lib/components/po-page-login/po-page-login.component.mjs +0 -483
- package/esm2022/lib/components/po-page-login/po-page-login.module.mjs +0 -31
- package/esm2022/lib/components/po-page-login/po-page-login.service.mjs +0 -32
- package/esm2022/lib/index.mjs +0 -4
- package/esm2022/lib/po-templates.module.mjs +0 -18
- package/esm2022/lib/services/index.mjs +0 -4
- package/esm2022/lib/services/po-page-customization/index.mjs +0 -4
- package/esm2022/lib/services/po-page-customization/po-page-customization.module.mjs +0 -23
- package/esm2022/lib/services/po-page-customization/po-page-customization.service.mjs +0 -86
- package/esm2022/lib/services/po-page-customization/po-page-dynamic-options.interface.mjs +0 -2
- package/esm2022/lib/services/po-page-dynamic/index.mjs +0 -3
- package/esm2022/lib/services/po-page-dynamic/po-page-dynamic-literals.interface.mjs +0 -2
- package/esm2022/lib/services/po-page-dynamic/po-page-dynamic.module.mjs +0 -23
- package/esm2022/lib/services/po-page-dynamic/po-page-dynamic.service.mjs +0 -106
- package/esm2022/lib/services/services.module.mjs +0 -18
- package/esm2022/lib/utils/util.mjs +0 -428
- package/esm2022/po-ui-ng-templates.mjs +0 -5
- package/esm2022/public-api.mjs +0 -2
- package/po-ui-ng-templates-18.23.0.tgz +0 -0
|
@@ -1,546 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { concat, EMPTY, throwError, of } from 'rxjs';
|
|
3
|
-
import { tap, catchError, map, switchMap } from 'rxjs/operators';
|
|
4
|
-
import { poLocaleDefault } from '@po-ui/ng-components';
|
|
5
|
-
import { convertToBoolean, mapObjectByProperties, valuesFromObject } from '../../utils/util';
|
|
6
|
-
import { PoPageDynamicService } from '../../services/po-page-dynamic/po-page-dynamic.service';
|
|
7
|
-
import { PoPageDynamicDetailActionsService } from './po-page-dynamic-detail-actions.service';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/router";
|
|
10
|
-
import * as i2 from "@po-ui/ng-components";
|
|
11
|
-
import * as i3 from "../../services/po-page-dynamic/po-page-dynamic.service";
|
|
12
|
-
import * as i4 from "./po-page-dynamic-detail-actions.service";
|
|
13
|
-
import * as i5 from "./../../services/po-page-customization/po-page-customization.service";
|
|
14
|
-
import * as i6 from "@angular/common";
|
|
15
|
-
function PoPageDynamicDetailComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
-
i0.ɵɵelementContainer(0);
|
|
17
|
-
} }
|
|
18
|
-
function PoPageDynamicDetailComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
-
i0.ɵɵelementStart(0, "po-widget");
|
|
20
|
-
i0.ɵɵelement(1, "po-icon", 4);
|
|
21
|
-
i0.ɵɵelementStart(2, "span", 5);
|
|
22
|
-
i0.ɵɵtext(3);
|
|
23
|
-
i0.ɵɵelementEnd()();
|
|
24
|
-
} if (rf & 2) {
|
|
25
|
-
const ctx_r0 = i0.ɵɵnextContext();
|
|
26
|
-
i0.ɵɵadvance(3);
|
|
27
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r0.literals.registerNotFound, " ");
|
|
28
|
-
} }
|
|
29
|
-
function PoPageDynamicDetailComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) {
|
|
30
|
-
i0.ɵɵelement(0, "po-dynamic-view", 6);
|
|
31
|
-
} if (rf & 2) {
|
|
32
|
-
const ctx_r0 = i0.ɵɵnextContext();
|
|
33
|
-
i0.ɵɵproperty("p-fields", ctx_r0.fields)("p-value", ctx_r0.model);
|
|
34
|
-
} }
|
|
35
|
-
export const poPageDynamicDetailLiteralsDefault = {
|
|
36
|
-
en: {
|
|
37
|
-
pageActionEdit: 'Edit',
|
|
38
|
-
pageActionRemove: 'Delete',
|
|
39
|
-
pageActionBack: 'Back',
|
|
40
|
-
confirmRemoveTitle: 'Confirm delete',
|
|
41
|
-
confirmRemoveMessage: 'Are you sure you want to delete this record? You can not undo this action.',
|
|
42
|
-
removeNotificationSuccess: 'Item deleted successfully.',
|
|
43
|
-
registerNotFound: 'Register not found.'
|
|
44
|
-
},
|
|
45
|
-
es: {
|
|
46
|
-
pageActionEdit: 'Editar',
|
|
47
|
-
pageActionRemove: 'Borrar',
|
|
48
|
-
pageActionBack: 'Regreso',
|
|
49
|
-
confirmRemoveTitle: 'Confirmar la exclusión',
|
|
50
|
-
confirmRemoveMessage: '¿Está seguro de que desea eliminar este registro? No puede deshacer esta acción.',
|
|
51
|
-
removeNotificationSuccess: 'Elemento eliminado con éxito.',
|
|
52
|
-
registerNotFound: 'Registro no encontrado.'
|
|
53
|
-
},
|
|
54
|
-
pt: {
|
|
55
|
-
pageActionEdit: 'Editar',
|
|
56
|
-
pageActionRemove: 'Excluir',
|
|
57
|
-
pageActionBack: 'Voltar',
|
|
58
|
-
confirmRemoveTitle: 'Confirmar exclusão',
|
|
59
|
-
confirmRemoveMessage: 'Tem certeza de que deseja excluir esse registro? Você não poderá desfazer essa ação.',
|
|
60
|
-
removeNotificationSuccess: 'Item excluído com sucesso.',
|
|
61
|
-
registerNotFound: 'Registro não encontrado.'
|
|
62
|
-
},
|
|
63
|
-
ru: {
|
|
64
|
-
pageActionEdit: 'Редактировать',
|
|
65
|
-
pageActionRemove: 'Удалить',
|
|
66
|
-
pageActionBack: 'Назад',
|
|
67
|
-
confirmRemoveTitle: 'Подтверждение удаления',
|
|
68
|
-
confirmRemoveMessage: 'Вы уверены, что хотите удалить эту запись? Вы не можете отменить это действие.',
|
|
69
|
-
removeNotificationSuccess: 'Элемент успешно удален.',
|
|
70
|
-
registerNotFound: 'Запись не найдена.'
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
/**
|
|
74
|
-
* @description
|
|
75
|
-
*
|
|
76
|
-
* O `po-page-dynamic-detail` é uma página que serve para exibir registros em detalhes,
|
|
77
|
-
* o mesmo também suporta metadados conforme especificado na documentação.
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* ### Utilização via rota
|
|
81
|
-
*
|
|
82
|
-
* Ao utilizar as rotas para inicializar o template, o `page-dynamic-detail` disponibiliza propriedades que devem ser fornecidas no arquivo de configuração de rotas da aplicação, para
|
|
83
|
-
* poder especificar o endpoint dos dados e dos metadados que serão carregados na inicialização.
|
|
84
|
-
*
|
|
85
|
-
* Exemplo de utilização:
|
|
86
|
-
*
|
|
87
|
-
* Arquivo de configuração de rotas da aplicação: `app-routing.module.ts`
|
|
88
|
-
* ```
|
|
89
|
-
* const routes: Routes = [
|
|
90
|
-
* {
|
|
91
|
-
* path: 'people/:id',
|
|
92
|
-
* component: PoPageDynamicDetailComponent,
|
|
93
|
-
* data: {
|
|
94
|
-
* serviceApi: 'http://localhost:3000/v1/people', // endpoint dos dados
|
|
95
|
-
* serviceMetadataApi: 'http://localhost:3000/v1/metadata', // endpoint dos metadados utilizando o método HTTP Get
|
|
96
|
-
* serviceLoadApi: 'http://localhost:3000/load-metadata' // endpoint de customizações dos metadados utilizando o método HTTP Post
|
|
97
|
-
* }
|
|
98
|
-
* },
|
|
99
|
-
* {
|
|
100
|
-
* path: 'home',
|
|
101
|
-
* component: HomeExampleComponent
|
|
102
|
-
* }
|
|
103
|
-
* ];
|
|
104
|
-
*
|
|
105
|
-
* ```
|
|
106
|
-
* O componente primeiro irá carregar o metadado da rota definida na propriedade serviceMetadataApi
|
|
107
|
-
* e depois irá buscar da rota definida na propriedade serviceLoadApi.
|
|
108
|
-
*
|
|
109
|
-
* A requisição dos metadados é feita na inicialização do template para buscar os metadados da página passando o
|
|
110
|
-
* tipo do metadado esperado e a versão cacheada pelo browser.
|
|
111
|
-
*
|
|
112
|
-
* > Caso o servidor retornar um erro ao recuperar os metadados, serão repassados os metadados salvos em cache,
|
|
113
|
-
* se o cache não existir será disparada uma notificação.
|
|
114
|
-
*
|
|
115
|
-
* O formato esperado na resposta da requisição está especificado na interface
|
|
116
|
-
* [PoPageDynamicDetailMetadata](/documentation/po-page-dynamic-detail#po-page-dynamic-detail-metadata). Por exemplo:
|
|
117
|
-
*
|
|
118
|
-
* ```
|
|
119
|
-
* {
|
|
120
|
-
* version: 1,
|
|
121
|
-
* title: 'Person Detail',
|
|
122
|
-
* fields: [
|
|
123
|
-
* { property: 'id', key: true, disabled: true },
|
|
124
|
-
* { property: 'status' },
|
|
125
|
-
* { property: 'name' },
|
|
126
|
-
* { property: 'nickname' },
|
|
127
|
-
* { property: 'birthdate', label: 'Birth date' },
|
|
128
|
-
* { property: 'genre' },
|
|
129
|
-
* { property: 'city' },
|
|
130
|
-
* { property: 'country' }
|
|
131
|
-
* ]
|
|
132
|
-
* }
|
|
133
|
-
* ```
|
|
134
|
-
*
|
|
135
|
-
* > Caso o endpoint dos metadados não seja especificado, será feito uma requisição utilizando o `serviceApi` da seguinte forma:
|
|
136
|
-
* ```
|
|
137
|
-
* GET {end-point}/metadata?type=detail&version={version}
|
|
138
|
-
* ```
|
|
139
|
-
*
|
|
140
|
-
* @example
|
|
141
|
-
*
|
|
142
|
-
* <example name="po-page-dynamic-detail-user" title="PO Page Dynamic Detail User">
|
|
143
|
-
* <file name="sample-po-page-dynamic-detail-user/sample-po-page-dynamic-detail-user.component.html"> </file>
|
|
144
|
-
* <file name="sample-po-page-dynamic-detail-user/sample-po-page-dynamic-detail-user.component.ts"> </file>
|
|
145
|
-
* </example>
|
|
146
|
-
*/
|
|
147
|
-
export class PoPageDynamicDetailComponent {
|
|
148
|
-
router;
|
|
149
|
-
activatedRoute;
|
|
150
|
-
poNotification;
|
|
151
|
-
poDialogService;
|
|
152
|
-
poPageDynamicService;
|
|
153
|
-
poPageDynamicDetailActionsService;
|
|
154
|
-
poPageCustomizationService;
|
|
155
|
-
/** Objeto com propriedades do breadcrumb. */
|
|
156
|
-
breadcrumb = { items: [] };
|
|
157
|
-
/**
|
|
158
|
-
* Função ou serviço que será executado na inicialização do componente.
|
|
159
|
-
*
|
|
160
|
-
* A propriedade aceita os seguintes tipos:
|
|
161
|
-
* - `string`: *Endpoint* usado pelo componente para requisição via `POST`.
|
|
162
|
-
* - `function`: Método que será executado.
|
|
163
|
-
*
|
|
164
|
-
* O retorno desta função deve ser do tipo `PoPageDynamicDetailOptions`,
|
|
165
|
-
* onde o usuário poderá customizar novos campos, breadcrumb, title e actions
|
|
166
|
-
*
|
|
167
|
-
* Por exemplo:
|
|
168
|
-
*
|
|
169
|
-
* ```
|
|
170
|
-
* getPageOptions(): PoPageDynamicDetailOptions {
|
|
171
|
-
* return {
|
|
172
|
-
* actions:
|
|
173
|
-
* { new: 'new', edit: 'edit/:id', remove: true },
|
|
174
|
-
* fields: [
|
|
175
|
-
* { property: 'idCard', gridColumns: 6 }
|
|
176
|
-
* ]
|
|
177
|
-
* };
|
|
178
|
-
* }
|
|
179
|
-
*
|
|
180
|
-
* ```
|
|
181
|
-
* Para referenciar a sua função utilize a propriedade `bind`, por exemplo:
|
|
182
|
-
* ```
|
|
183
|
-
* [p-load]="onLoadOptions.bind(this)"
|
|
184
|
-
* ```
|
|
185
|
-
*/
|
|
186
|
-
onLoad;
|
|
187
|
-
/** Título da página. */
|
|
188
|
-
title;
|
|
189
|
-
/**
|
|
190
|
-
* @description
|
|
191
|
-
*
|
|
192
|
-
* Endpoint usado pelo template para requisição do recurso que serão exibido.
|
|
193
|
-
*
|
|
194
|
-
* Caso a ação `remove` estiver configurada, será feito uma requisição de exclusão nesse mesmo endpoint passando os campos
|
|
195
|
-
* setados como `key: true`.
|
|
196
|
-
*
|
|
197
|
-
* > `DELETE {end-point}/{keys}`
|
|
198
|
-
*
|
|
199
|
-
* ```
|
|
200
|
-
* <po-page-dynamic-detail
|
|
201
|
-
* [p-actions]="{ remove: '/' }"
|
|
202
|
-
* [p-fields]="[ { property: 'id', key: true } ]"
|
|
203
|
-
* p-service="/api/po-samples/v1/people"
|
|
204
|
-
* ...>
|
|
205
|
-
* </po-page-dynamic-detail>
|
|
206
|
-
* ```
|
|
207
|
-
*
|
|
208
|
-
* Resquisição disparada, onde a propriedade `id` é igual a 2:
|
|
209
|
-
*
|
|
210
|
-
* ```
|
|
211
|
-
* DELETE /api/po-samples/v1/people/2 HTTP/1.1
|
|
212
|
-
* Host: localhost:4000
|
|
213
|
-
* Connection: keep-alive
|
|
214
|
-
* Accept: application/json, text/plain
|
|
215
|
-
* ...
|
|
216
|
-
* ```
|
|
217
|
-
*
|
|
218
|
-
* > Caso esteja usando metadados com o template, será disparado uma requisição na inicialização do template para buscar
|
|
219
|
-
* > os metadados da página passando o tipo do metadado esperado e a versão cacheada pelo browser.
|
|
220
|
-
* >
|
|
221
|
-
* > `GET {end-point}/metadata?type=detail&version={version}`
|
|
222
|
-
*/
|
|
223
|
-
serviceApi;
|
|
224
|
-
literals;
|
|
225
|
-
model = {};
|
|
226
|
-
subscriptions = [];
|
|
227
|
-
_actions = {};
|
|
228
|
-
_autoRouter = false;
|
|
229
|
-
_duplicates = [];
|
|
230
|
-
_fields = [];
|
|
231
|
-
_keys = [];
|
|
232
|
-
_pageActions = [];
|
|
233
|
-
/**
|
|
234
|
-
* @optional
|
|
235
|
-
*
|
|
236
|
-
* @description
|
|
237
|
-
*
|
|
238
|
-
* Define as ações da página de acordo com a interface `PoPageDynamicDetailActions`.
|
|
239
|
-
*/
|
|
240
|
-
set actions(value) {
|
|
241
|
-
this._actions = this.isObject(value) ? value : {};
|
|
242
|
-
this._pageActions = this.getPageActions(this._actions);
|
|
243
|
-
}
|
|
244
|
-
get actions() {
|
|
245
|
-
return { ...this._actions };
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* @todo Validar rotas na mão pois se existir uma rota '**' o catch do navigation não funciona.
|
|
249
|
-
*
|
|
250
|
-
* @optional
|
|
251
|
-
*
|
|
252
|
-
* @description
|
|
253
|
-
*
|
|
254
|
-
* Cria automaticamente as rotas de edição (novo/duplicate) e detalhes caso as ações
|
|
255
|
-
* estejam definidas nas ações.
|
|
256
|
-
*
|
|
257
|
-
* > Para o correto funcionamento não pode haver nenhum rota coringa (`**`) especificada.
|
|
258
|
-
*
|
|
259
|
-
* @default false
|
|
260
|
-
*/
|
|
261
|
-
set autoRouter(value) {
|
|
262
|
-
this._autoRouter = convertToBoolean(value);
|
|
263
|
-
}
|
|
264
|
-
get autoRouter() {
|
|
265
|
-
return this._autoRouter;
|
|
266
|
-
}
|
|
267
|
-
/** Lista dos campos exibidos na página. */
|
|
268
|
-
set fields(value) {
|
|
269
|
-
this._fields = Array.isArray(value) ? [...value] : [];
|
|
270
|
-
this._keys = this.getKeysByFields(this.fields);
|
|
271
|
-
this._duplicates = this.getDuplicatesByFields(this.fields);
|
|
272
|
-
}
|
|
273
|
-
get fields() {
|
|
274
|
-
return this._fields;
|
|
275
|
-
}
|
|
276
|
-
constructor(router, activatedRoute, poNotification, poDialogService, poPageDynamicService, poPageDynamicDetailActionsService, poPageCustomizationService, languageService) {
|
|
277
|
-
this.router = router;
|
|
278
|
-
this.activatedRoute = activatedRoute;
|
|
279
|
-
this.poNotification = poNotification;
|
|
280
|
-
this.poDialogService = poDialogService;
|
|
281
|
-
this.poPageDynamicService = poPageDynamicService;
|
|
282
|
-
this.poPageDynamicDetailActionsService = poPageDynamicDetailActionsService;
|
|
283
|
-
this.poPageCustomizationService = poPageCustomizationService;
|
|
284
|
-
const language = languageService.getShortLanguage();
|
|
285
|
-
this.literals = {
|
|
286
|
-
...poPageDynamicDetailLiteralsDefault[poLocaleDefault],
|
|
287
|
-
...poPageDynamicDetailLiteralsDefault[language]
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
ngOnInit() {
|
|
291
|
-
this.loadDataFromAPI();
|
|
292
|
-
}
|
|
293
|
-
ngOnDestroy() {
|
|
294
|
-
if (this.subscriptions) {
|
|
295
|
-
this.subscriptions.forEach(subscription => {
|
|
296
|
-
subscription.unsubscribe();
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
get duplicates() {
|
|
301
|
-
return [...this._duplicates];
|
|
302
|
-
}
|
|
303
|
-
get keys() {
|
|
304
|
-
return [...this._keys];
|
|
305
|
-
}
|
|
306
|
-
get pageActions() {
|
|
307
|
-
return [...this._pageActions];
|
|
308
|
-
}
|
|
309
|
-
remove(actionRemove, actionBeforeRemove) {
|
|
310
|
-
const uniqueKey = this.formatUniqueKey(this.model);
|
|
311
|
-
this.subscriptions.push(this.poPageDynamicDetailActionsService
|
|
312
|
-
.beforeRemove(actionBeforeRemove, uniqueKey, { ...this.model })
|
|
313
|
-
.pipe(switchMap((beforeRemoveResult) => {
|
|
314
|
-
const newRemoveAction = beforeRemoveResult?.newUrl ?? actionRemove;
|
|
315
|
-
const allowAction = beforeRemoveResult?.allowAction ?? true;
|
|
316
|
-
if (!allowAction) {
|
|
317
|
-
return of({});
|
|
318
|
-
}
|
|
319
|
-
if (typeof newRemoveAction === 'string') {
|
|
320
|
-
return this.executeRemove(newRemoveAction, uniqueKey);
|
|
321
|
-
}
|
|
322
|
-
else {
|
|
323
|
-
newRemoveAction(uniqueKey, { ...this.model });
|
|
324
|
-
return EMPTY;
|
|
325
|
-
}
|
|
326
|
-
}))
|
|
327
|
-
.subscribe());
|
|
328
|
-
}
|
|
329
|
-
confirmRemove(actionRemove, actionBeforeRemove) {
|
|
330
|
-
const confirmOptions = {
|
|
331
|
-
title: this.literals.confirmRemoveTitle,
|
|
332
|
-
message: this.literals.confirmRemoveMessage,
|
|
333
|
-
confirm: this.remove.bind(this, actionRemove, actionBeforeRemove)
|
|
334
|
-
};
|
|
335
|
-
this.poDialogService.confirm(confirmOptions);
|
|
336
|
-
}
|
|
337
|
-
executeRemove(path, uniqueKey) {
|
|
338
|
-
return this.poPageDynamicService.deleteResource(uniqueKey).pipe(map(() => {
|
|
339
|
-
this.poNotification.success(this.literals.removeNotificationSuccess);
|
|
340
|
-
this.navigateTo({ path: path });
|
|
341
|
-
}));
|
|
342
|
-
}
|
|
343
|
-
formatUniqueKey(item) {
|
|
344
|
-
const keys = mapObjectByProperties(item, this.keys);
|
|
345
|
-
return valuesFromObject(keys).join('|');
|
|
346
|
-
}
|
|
347
|
-
goBack(actionBack) {
|
|
348
|
-
this.subscriptions.push(this.poPageDynamicDetailActionsService
|
|
349
|
-
.beforeBack(this.actions.beforeBack)
|
|
350
|
-
.subscribe((beforeBackResult) => this.executeBackAction(actionBack, beforeBackResult?.allowAction, beforeBackResult?.newUrl)));
|
|
351
|
-
}
|
|
352
|
-
executeBackAction(actionBack, allowAction, newUrl) {
|
|
353
|
-
const isAllowedAction = typeof allowAction === 'boolean' ? allowAction : true;
|
|
354
|
-
if (isAllowedAction) {
|
|
355
|
-
if (actionBack === undefined || typeof actionBack === 'boolean') {
|
|
356
|
-
return window.history.back();
|
|
357
|
-
}
|
|
358
|
-
if (typeof actionBack === 'string' || newUrl) {
|
|
359
|
-
return this.router.navigate([newUrl || actionBack]);
|
|
360
|
-
}
|
|
361
|
-
return actionBack();
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
loadData(id) {
|
|
365
|
-
return this.poPageDynamicService.getResource(id).pipe(tap(response => {
|
|
366
|
-
if (!response) {
|
|
367
|
-
this.setUndefinedToModelAndActions();
|
|
368
|
-
}
|
|
369
|
-
else {
|
|
370
|
-
this.model = response;
|
|
371
|
-
}
|
|
372
|
-
}), catchError(error => {
|
|
373
|
-
this.setUndefinedToModelAndActions();
|
|
374
|
-
return throwError(error);
|
|
375
|
-
}));
|
|
376
|
-
}
|
|
377
|
-
setUndefinedToModelAndActions() {
|
|
378
|
-
this.model = undefined;
|
|
379
|
-
this.actions = undefined;
|
|
380
|
-
}
|
|
381
|
-
getMetadata(serviceApiFromRoute, onLoad) {
|
|
382
|
-
if (serviceApiFromRoute) {
|
|
383
|
-
return this.poPageDynamicService.getMetadata('detail').pipe(tap(response => {
|
|
384
|
-
this.autoRouter = response.autoRouter || this.autoRouter;
|
|
385
|
-
this.actions = response.actions || this.actions;
|
|
386
|
-
this.breadcrumb = response.breadcrumb || this.breadcrumb;
|
|
387
|
-
this.fields = response.fields || this.fields;
|
|
388
|
-
this.title = response.title || this.title;
|
|
389
|
-
}), switchMap(() => this.loadOptionsOnInitialize(onLoad)));
|
|
390
|
-
}
|
|
391
|
-
return this.loadOptionsOnInitialize(onLoad);
|
|
392
|
-
}
|
|
393
|
-
// @todo Validar rotas na mão pois se existir uma rota '**' o catch do navigation não funciona.
|
|
394
|
-
navigateTo(route, forceStopAutoRouter = false) {
|
|
395
|
-
this.router.navigate([route.url || route.path], { queryParams: route.params }).catch(() => {
|
|
396
|
-
if (forceStopAutoRouter || !this.autoRouter) {
|
|
397
|
-
return;
|
|
398
|
-
}
|
|
399
|
-
this.router.config.unshift({
|
|
400
|
-
path: route.path,
|
|
401
|
-
component: route.component,
|
|
402
|
-
data: { serviceApi: this.serviceApi, autoRouter: true }
|
|
403
|
-
});
|
|
404
|
-
this.navigateTo(route, true);
|
|
405
|
-
});
|
|
406
|
-
}
|
|
407
|
-
openEdit(action) {
|
|
408
|
-
const id = this.formatUniqueKey(this.model);
|
|
409
|
-
this.subscriptions.push(this.poPageDynamicDetailActionsService
|
|
410
|
-
.beforeEdit(this.actions.beforeEdit, id, this.model)
|
|
411
|
-
.pipe(switchMap((beforeEditResult) => this.executeEditAction(action, beforeEditResult, id)))
|
|
412
|
-
.subscribe());
|
|
413
|
-
}
|
|
414
|
-
executeEditAction(action, beforeEditResult, id) {
|
|
415
|
-
const newEditAction = beforeEditResult?.newUrl ?? action;
|
|
416
|
-
const allowAction = beforeEditResult?.allowAction ?? true;
|
|
417
|
-
if (!allowAction) {
|
|
418
|
-
return of({});
|
|
419
|
-
}
|
|
420
|
-
if (typeof newEditAction === 'string') {
|
|
421
|
-
this.openEditUrl(newEditAction);
|
|
422
|
-
}
|
|
423
|
-
else {
|
|
424
|
-
newEditAction(id, { ...this.model });
|
|
425
|
-
}
|
|
426
|
-
return EMPTY;
|
|
427
|
-
}
|
|
428
|
-
openEditUrl(path) {
|
|
429
|
-
const url = this.resolveUrl(this.model, path);
|
|
430
|
-
this.navigateTo({ path, url });
|
|
431
|
-
}
|
|
432
|
-
resolveUrl(item, path) {
|
|
433
|
-
const uniqueKey = this.formatUniqueKey(item);
|
|
434
|
-
return path.replace(/:id/g, uniqueKey);
|
|
435
|
-
}
|
|
436
|
-
getPageActions(actions = {}) {
|
|
437
|
-
const pageActions = [];
|
|
438
|
-
if (actions.edit) {
|
|
439
|
-
pageActions.push({ label: this.literals.pageActionEdit, action: this.openEdit.bind(this, actions.edit) });
|
|
440
|
-
}
|
|
441
|
-
if (actions.remove) {
|
|
442
|
-
pageActions.push({
|
|
443
|
-
label: this.literals.pageActionRemove,
|
|
444
|
-
action: this.confirmRemove.bind(this, actions.remove, this.actions.beforeRemove),
|
|
445
|
-
type: 'danger'
|
|
446
|
-
});
|
|
447
|
-
}
|
|
448
|
-
if (actions.back === undefined || actions.back) {
|
|
449
|
-
pageActions.push({ label: this.literals.pageActionBack, action: this.goBack.bind(this, actions.back) });
|
|
450
|
-
}
|
|
451
|
-
return pageActions;
|
|
452
|
-
}
|
|
453
|
-
getKeysByFields(fields = []) {
|
|
454
|
-
return fields.filter(field => field.key === true).map(field => field.property);
|
|
455
|
-
}
|
|
456
|
-
getDuplicatesByFields(fields = []) {
|
|
457
|
-
return fields.filter(field => field.duplicate === true).map(field => field.property);
|
|
458
|
-
}
|
|
459
|
-
isObject(value) {
|
|
460
|
-
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
461
|
-
}
|
|
462
|
-
loadDataFromAPI() {
|
|
463
|
-
const { serviceApi: serviceApiFromRoute, serviceMetadataApi, serviceLoadApi } = this.activatedRoute.snapshot.data;
|
|
464
|
-
const { id } = this.activatedRoute.snapshot.params;
|
|
465
|
-
const onLoad = serviceLoadApi || this.onLoad;
|
|
466
|
-
this.serviceApi = serviceApiFromRoute || this.serviceApi;
|
|
467
|
-
this.poPageDynamicService.configServiceApi({ endpoint: this.serviceApi, metadata: serviceMetadataApi });
|
|
468
|
-
const metadata$ = this.getMetadata(serviceApiFromRoute, onLoad);
|
|
469
|
-
const data$ = this.loadData(id);
|
|
470
|
-
this.subscriptions.push(concat(metadata$, data$).subscribe());
|
|
471
|
-
}
|
|
472
|
-
loadOptionsOnInitialize(onLoad) {
|
|
473
|
-
if (onLoad) {
|
|
474
|
-
return this.getPoDynamicPageOptions(onLoad).pipe(tap(responsePoOption => this.poPageCustomizationService.changeOriginalOptionsToNewOptions(this, responsePoOption)));
|
|
475
|
-
}
|
|
476
|
-
return EMPTY;
|
|
477
|
-
}
|
|
478
|
-
getPoDynamicPageOptions(onLoad) {
|
|
479
|
-
const originalOption = {
|
|
480
|
-
fields: this.fields,
|
|
481
|
-
actions: this.actions,
|
|
482
|
-
breadcrumb: this.breadcrumb,
|
|
483
|
-
title: this.title
|
|
484
|
-
};
|
|
485
|
-
const pageOptionSchema = {
|
|
486
|
-
schema: [
|
|
487
|
-
{
|
|
488
|
-
nameProp: 'fields',
|
|
489
|
-
merge: true,
|
|
490
|
-
keyForMerge: 'property'
|
|
491
|
-
},
|
|
492
|
-
{
|
|
493
|
-
nameProp: 'actions',
|
|
494
|
-
merge: true
|
|
495
|
-
},
|
|
496
|
-
{
|
|
497
|
-
nameProp: 'breadcrumb'
|
|
498
|
-
},
|
|
499
|
-
{
|
|
500
|
-
nameProp: 'title'
|
|
501
|
-
}
|
|
502
|
-
]
|
|
503
|
-
};
|
|
504
|
-
return this.poPageCustomizationService.getCustomOptions(onLoad, originalOption, pageOptionSchema);
|
|
505
|
-
}
|
|
506
|
-
static ɵfac = function PoPageDynamicDetailComponent_Factory(t) { return new (t || PoPageDynamicDetailComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.PoNotificationService), i0.ɵɵdirectiveInject(i2.PoDialogService), i0.ɵɵdirectiveInject(i3.PoPageDynamicService), i0.ɵɵdirectiveInject(i4.PoPageDynamicDetailActionsService), i0.ɵɵdirectiveInject(i5.PoPageCustomizationService), i0.ɵɵdirectiveInject(i2.PoLanguageService)); };
|
|
507
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoPageDynamicDetailComponent, selectors: [["po-page-dynamic-detail"]], inputs: { breadcrumb: [0, "p-breadcrumb", "breadcrumb"], onLoad: [0, "p-load", "onLoad"], title: [0, "p-title", "title"], serviceApi: [0, "p-service-api", "serviceApi"], actions: [0, "p-actions", "actions"], autoRouter: [0, "p-auto-router", "autoRouter"], fields: [0, "p-fields", "fields"] }, features: [i0.ɵɵProvidersFeature([PoPageDynamicService, PoPageDynamicDetailActionsService])], decls: 6, vars: 6, consts: [["registerNotFoundTemplate", ""], ["viewFieldsTemplate", ""], [3, "p-actions", "p-breadcrumb", "p-title"], [4, "ngIf", "ngIfThen", "ngIfElse"], ["p-icon", "ICON_INFO"], [1, "po-font-text-large"], [3, "p-fields", "p-value"]], template: function PoPageDynamicDetailComponent_Template(rf, ctx) { if (rf & 1) {
|
|
508
|
-
i0.ɵɵelementStart(0, "po-page-default", 2);
|
|
509
|
-
i0.ɵɵtemplate(1, PoPageDynamicDetailComponent_ng_container_1_Template, 1, 0, "ng-container", 3);
|
|
510
|
-
i0.ɵɵelementEnd();
|
|
511
|
-
i0.ɵɵtemplate(2, PoPageDynamicDetailComponent_ng_template_2_Template, 4, 1, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(4, PoPageDynamicDetailComponent_ng_template_4_Template, 1, 2, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
|
|
512
|
-
} if (rf & 2) {
|
|
513
|
-
const registerNotFoundTemplate_r2 = i0.ɵɵreference(3);
|
|
514
|
-
const viewFieldsTemplate_r3 = i0.ɵɵreference(5);
|
|
515
|
-
i0.ɵɵproperty("p-actions", ctx.pageActions)("p-breadcrumb", ctx.breadcrumb)("p-title", ctx.title);
|
|
516
|
-
i0.ɵɵadvance();
|
|
517
|
-
i0.ɵɵproperty("ngIf", ctx.model)("ngIfThen", viewFieldsTemplate_r3)("ngIfElse", registerNotFoundTemplate_r2);
|
|
518
|
-
} }, dependencies: [i6.NgIf, i2.PoDynamicViewComponent, i2.PoIconComponent, i2.PoPageDefaultComponent, i2.PoWidgetComponent], encapsulation: 2 });
|
|
519
|
-
}
|
|
520
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoPageDynamicDetailComponent, [{
|
|
521
|
-
type: Component,
|
|
522
|
-
args: [{ selector: 'po-page-dynamic-detail', providers: [PoPageDynamicService, PoPageDynamicDetailActionsService], template: "<po-page-default [p-actions]=\"pageActions\" [p-breadcrumb]=\"breadcrumb\" [p-title]=\"title\">\n <ng-container *ngIf=\"model; then viewFieldsTemplate; else registerNotFoundTemplate\"> </ng-container>\n</po-page-default>\n\n<ng-template #registerNotFoundTemplate>\n <po-widget>\n <po-icon p-icon=\"ICON_INFO\"></po-icon>\n <span class=\"po-font-text-large\">\n {{ literals.registerNotFound }}\n </span>\n </po-widget>\n</ng-template>\n\n<ng-template #viewFieldsTemplate>\n <po-dynamic-view [p-fields]=\"fields\" [p-value]=\"model\"> </po-dynamic-view>\n</ng-template>\n" }]
|
|
523
|
-
}], () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.PoNotificationService }, { type: i2.PoDialogService }, { type: i3.PoPageDynamicService }, { type: i4.PoPageDynamicDetailActionsService }, { type: i5.PoPageCustomizationService }, { type: i2.PoLanguageService }], { breadcrumb: [{
|
|
524
|
-
type: Input,
|
|
525
|
-
args: ['p-breadcrumb']
|
|
526
|
-
}], onLoad: [{
|
|
527
|
-
type: Input,
|
|
528
|
-
args: ['p-load']
|
|
529
|
-
}], title: [{
|
|
530
|
-
type: Input,
|
|
531
|
-
args: ['p-title']
|
|
532
|
-
}], serviceApi: [{
|
|
533
|
-
type: Input,
|
|
534
|
-
args: ['p-service-api']
|
|
535
|
-
}], actions: [{
|
|
536
|
-
type: Input,
|
|
537
|
-
args: ['p-actions']
|
|
538
|
-
}], autoRouter: [{
|
|
539
|
-
type: Input,
|
|
540
|
-
args: ['p-auto-router']
|
|
541
|
-
}], fields: [{
|
|
542
|
-
type: Input,
|
|
543
|
-
args: ['p-fields']
|
|
544
|
-
}] }); })();
|
|
545
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PoPageDynamicDetailComponent, { className: "PoPageDynamicDetailComponent", filePath: "lib/components/po-page-dynamic-detail/po-page-dynamic-detail.component.ts", lineNumber: 151 }); })();
|
|
546
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwvcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwvcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHcEUsT0FBTyxFQUFnQixNQUFNLEVBQUUsS0FBSyxFQUFjLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFPTCxlQUFlLEVBQ2hCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJN0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDOUYsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7OztJQ3BCM0Ysd0JBQW9HOzs7SUFJcEcsaUNBQVc7SUFDVCw2QkFBc0M7SUFDdEMsK0JBQWlDO0lBQy9CLFlBQ0Y7SUFDRixBQURFLGlCQUFPLEVBQ0c7OztJQUZSLGVBQ0Y7SUFERSxpRUFDRjs7O0lBS0YscUNBQTBFOzs7SUFBckMsQUFBcEIsd0NBQW1CLHlCQUFr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LDRCQUE0Qjs2REFBNUIsNEJBQTRCLGlYQUY1QixDQUFDLG9CQUFvQixFQUFFLGlDQUFpQyxDQUFDO1lDcEp0RSwwQ0FBeUY7WUFDdkYsK0ZBQW9GO1lBQ3RGLGlCQUFrQjtZQVdsQixBQVRBLDhIQUF1QyxpSEFTTjs7OztZQWJzQyxBQUE1QixBQUExQiwyQ0FBeUIsZ0NBQTRCLHNCQUFrQjtZQUN2RSxjQUFhO1lBQXlCLEFBQXpCLEFBQWIsZ0NBQWEsbUNBQXlCLHlDQUE2Qjs7O2lGRHFKdkUsNEJBQTRCO2NBTHhDLFNBQVM7MkJBQ0Usd0JBQXdCLGFBRXZCLENBQUMsb0JBQW9CLEVBQUUsaUNBQWlDLENBQUM7a1NBSTdDLFVBQVU7a0JBQWhDLEtBQUs7bUJBQUMsY0FBYztZQStCSixNQUFNO2tCQUF0QixLQUFLO21CQUFDLFFBQVE7WUFHRyxLQUFLO2tCQUF0QixLQUFLO21CQUFDLFNBQVM7WUFvQ1EsVUFBVTtrQkFBakMsS0FBSzttQkFBQyxlQUFlO1lBcUJFLE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQXdCVSxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWU7WUFTQyxNQUFNO2tCQUE1QixLQUFLO21CQUFDLFVBQVU7O2tGQTlITiw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGUsIFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGNvbmNhdCwgRU1QVFksIE9ic2VydmFibGUsIHRocm93RXJyb3IsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAsIGNhdGNoRXJyb3IsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBQb0JyZWFkY3J1bWIsXG4gIFBvRGlhbG9nQ29uZmlybU9wdGlvbnMsXG4gIFBvRGlhbG9nU2VydmljZSxcbiAgUG9MYW5ndWFnZVNlcnZpY2UsXG4gIFBvTm90aWZpY2F0aW9uU2VydmljZSxcbiAgUG9QYWdlQWN0aW9uLFxuICBwb0xvY2FsZURlZmF1bHRcbn0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sZWFuLCBtYXBPYmplY3RCeVByb3BlcnRpZXMsIHZhbHVlc0Zyb21PYmplY3QgfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcblxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWRldGFpbC1hY3Rpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRGV0YWlsRmllbGQgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWRldGFpbC1maWVsZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWR5bmFtaWMvcG8tcGFnZS1keW5hbWljLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9wby1wYWdlLWR5bmFtaWMtZGV0YWlsLWFjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRGV0YWlsT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtZGV0YWlsLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWN1c3RvbWl6YXRpb24vcG8tcGFnZS1jdXN0b21pemF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY09wdGlvbnNTY2hlbWEgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL3BvLXBhZ2UtY3VzdG9taXphdGlvbi9wby1wYWdlLWR5bmFtaWMtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbE1ldGFEYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwtbWV0YWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNEZXRhaWxCZWZvcmVCYWNrIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwtYmVmb3JlLWJhY2suaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNEZXRhaWxCZWZvcmVSZW1vdmUgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWRldGFpbC1iZWZvcmUtcmVtb3ZlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRGV0YWlsQmVmb3JlRWRpdCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtZGV0YWlsLWJlZm9yZS1lZGl0LmludGVyZmFjZSc7XG5cbnR5cGUgVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvbiA9IHN0cmluZyB8ICgoKSA9PiBQb1BhZ2VEeW5hbWljRGV0YWlsT3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCBwb1BhZ2VEeW5hbWljRGV0YWlsTGl0ZXJhbHNEZWZhdWx0ID0ge1xuICBlbjoge1xuICAgIHBhZ2VBY3Rpb25FZGl0OiAnRWRpdCcsXG4gICAgcGFnZUFjdGlvblJlbW92ZTogJ0RlbGV0ZScsXG4gICAgcGFnZUFjdGlvbkJhY2s6ICdCYWNrJyxcbiAgICBjb25maXJtUmVtb3ZlVGl0bGU6ICdDb25maXJtIGRlbGV0ZScsXG4gICAgY29uZmlybVJlbW92ZU1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPyBZb3UgY2FuIG5vdCB1bmRvIHRoaXMgYWN0aW9uLicsXG4gICAgcmVtb3ZlTm90aWZpY2F0aW9uU3VjY2VzczogJ0l0ZW0gZGVsZXRlZCBzdWNjZXNzZnVsbHkuJyxcbiAgICByZWdpc3Rlck5vdEZvdW5kOiAnUmVnaXN0ZXIgbm90IGZvdW5kLidcbiAgfSxcbiAgZXM6IHtcbiAgICBwYWdlQWN0aW9uRWRpdDogJ0VkaXRhcicsXG4gICAgcGFnZUFjdGlvblJlbW92ZTogJ0JvcnJhcicsXG4gICAgcGFnZUFjdGlvbkJhY2s6ICdSZWdyZXNvJyxcbiAgICBjb25maXJtUmVtb3ZlVGl0bGU6ICdDb25maXJtYXIgbGEgZXhjbHVzacOzbicsXG4gICAgY29uZmlybVJlbW92ZU1lc3NhZ2U6ICfCv0VzdMOhIHNlZ3VybyBkZSBxdWUgZGVzZWEgZWxpbWluYXIgZXN0ZSByZWdpc3Rybz8gTm8gcHVlZGUgZGVzaGFjZXIgZXN0YSBhY2Npw7NuLicsXG4gICAgcmVtb3ZlTm90aWZpY2F0aW9uU3VjY2VzczogJ0VsZW1lbnRvIGVsaW1pbmFkbyBjb24gw6l4aXRvLicsXG4gICAgcmVnaXN0ZXJOb3RGb3VuZDogJ1JlZ2lzdHJvIG5vIGVuY29udHJhZG8uJ1xuICB9LFxuICBwdDoge1xuICAgIHBhZ2VBY3Rpb25FZGl0OiAnRWRpdGFyJyxcbiAgICBwYWdlQWN0aW9uUmVtb3ZlOiAnRXhjbHVpcicsXG4gICAgcGFnZUFjdGlvbkJhY2s6ICdWb2x0YXInLFxuICAgIGNvbmZpcm1SZW1vdmVUaXRsZTogJ0NvbmZpcm1hciBleGNsdXPDo28nLFxuICAgIGNvbmZpcm1SZW1vdmVNZXNzYWdlOiAnVGVtIGNlcnRlemEgZGUgcXVlIGRlc2VqYSBleGNsdWlyIGVzc2UgcmVnaXN0cm8/IFZvY8OqIG7Do28gcG9kZXLDoSBkZXNmYXplciBlc3NhIGHDp8Ojby4nLFxuICAgIHJlbW92ZU5vdGlmaWNhdGlvblN1Y2Nlc3M6ICdJdGVtIGV4Y2x1w61kbyBjb20gc3VjZXNzby4nLFxuICAgIHJlZ2lzdGVyTm90Rm91bmQ6ICdSZWdpc3RybyBuw6NvIGVuY29udHJhZG8uJ1xuICB9LFxuICBydToge1xuICAgIHBhZ2VBY3Rpb25FZGl0OiAn0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YwnLFxuICAgIHBhZ2VBY3Rpb25SZW1vdmU6ICfQo9C00LDQu9C40YLRjCcsXG4gICAgcGFnZUFjdGlvbkJhY2s6ICfQndCw0LfQsNC0JyxcbiAgICBjb25maXJtUmVtb3ZlVGl0bGU6ICfQn9C+0LTRgtCy0LXRgNC20LTQtdC90LjQtSDRg9C00LDQu9C10L3QuNGPJyxcbiAgICBjb25maXJtUmVtb3ZlTWVzc2FnZTogJ9CS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0Y3RgtGDINC30LDQv9C40YHRjD8gINCS0Ysg0L3QtSDQvNC+0LbQtdGC0LUg0L7RgtC80LXQvdC40YLRjCDRjdGC0L4g0LTQtdC50YHRgtCy0LjQtS4nLFxuICAgIHJlbW92ZU5vdGlmaWNhdGlvblN1Y2Nlc3M6ICfQrdC70LXQvNC10L3RgiDRg9GB0L/QtdGI0L3QviDRg9C00LDQu9C10L0uJyxcbiAgICByZWdpc3Rlck5vdEZvdW5kOiAn0JfQsNC/0LjRgdGMINC90LUg0L3QsNC50LTQtdC90LAuJ1xuICB9XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gYHBvLXBhZ2UtZHluYW1pYy1kZXRhaWxgIMOpIHVtYSBww6FnaW5hIHF1ZSBzZXJ2ZSBwYXJhIGV4aWJpciByZWdpc3Ryb3MgZW0gZGV0YWxoZXMsXG4gKiBvIG1lc21vIHRhbWLDqW0gc3Vwb3J0YSBtZXRhZGFkb3MgY29uZm9ybWUgZXNwZWNpZmljYWRvIG5hIGRvY3VtZW50YcOnw6NvLlxuICpcbiAqXG4gKiAjIyMgVXRpbGl6YcOnw6NvIHZpYSByb3RhXG4gKlxuICogQW8gdXRpbGl6YXIgYXMgcm90YXMgcGFyYSBpbmljaWFsaXphciBvIHRlbXBsYXRlLCBvIGBwYWdlLWR5bmFtaWMtZGV0YWlsYCBkaXNwb25pYmlsaXphIHByb3ByaWVkYWRlcyBxdWUgZGV2ZW0gc2VyIGZvcm5lY2lkYXMgbm8gYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyBkZSByb3RhcyBkYSBhcGxpY2HDp8OjbywgcGFyYVxuICogcG9kZXIgZXNwZWNpZmljYXIgbyBlbmRwb2ludCBkb3MgZGFkb3MgZSBkb3MgbWV0YWRhZG9zIHF1ZSBzZXLDo28gY2FycmVnYWRvcyBuYSBpbmljaWFsaXphw6fDo28uXG4gKlxuICogRXhlbXBsbyBkZSB1dGlsaXphw6fDo286XG4gKlxuICogQXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyBkZSByb3RhcyBkYSBhcGxpY2HDp8OjbzogYGFwcC1yb3V0aW5nLm1vZHVsZS50c2BcbiAqIGBgYFxuICogY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiB7XG4gKiAgIHBhdGg6ICdwZW9wbGUvOmlkJyxcbiAqICAgY29tcG9uZW50OiBQb1BhZ2VEeW5hbWljRGV0YWlsQ29tcG9uZW50LFxuICogICBkYXRhOiB7XG4gKiAgICAgc2VydmljZUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9wZW9wbGUnLCAvLyBlbmRwb2ludCBkb3MgZGFkb3NcbiAqICAgICBzZXJ2aWNlTWV0YWRhdGFBcGk6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvdjEvbWV0YWRhdGEnLCAvLyBlbmRwb2ludCBkb3MgbWV0YWRhZG9zIHV0aWxpemFuZG8gbyBtw6l0b2RvIEhUVFAgR2V0XG4gKiAgICAgc2VydmljZUxvYWRBcGk6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvbG9hZC1tZXRhZGF0YScgLy8gZW5kcG9pbnQgZGUgY3VzdG9taXphw6fDtWVzIGRvcyBtZXRhZGFkb3MgdXRpbGl6YW5kbyBvIG3DqXRvZG8gSFRUUCBQb3N0XG4gKiAgIH1cbiAqICB9LFxuICogIHtcbiAqICAgcGF0aDogJ2hvbWUnLFxuICogICBjb21wb25lbnQ6IEhvbWVFeGFtcGxlQ29tcG9uZW50XG4gKiAgfVxuICogXTtcbiAqXG4gKiBgYGBcbiAqIE8gY29tcG9uZW50ZSBwcmltZWlybyBpcsOhIGNhcnJlZ2FyIG8gbWV0YWRhZG8gZGEgcm90YSBkZWZpbmlkYSBuYSBwcm9wcmllZGFkZSBzZXJ2aWNlTWV0YWRhdGFBcGlcbiAqIGUgZGVwb2lzIGlyw6EgYnVzY2FyIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZUxvYWRBcGkuXG4gKlxuICogQSByZXF1aXNpw6fDo28gZG9zIG1ldGFkYWRvcyDDqSBmZWl0YSBuYSBpbmljaWFsaXphw6fDo28gZG8gdGVtcGxhdGUgcGFyYSBidXNjYXIgb3MgbWV0YWRhZG9zIGRhIHDDoWdpbmEgcGFzc2FuZG8gb1xuICogdGlwbyBkbyBtZXRhZGFkbyBlc3BlcmFkbyBlIGEgdmVyc8OjbyBjYWNoZWFkYSBwZWxvIGJyb3dzZXIuXG4gKlxuICogPiBDYXNvIG8gc2Vydmlkb3IgcmV0b3JuYXIgdW0gZXJybyBhbyByZWN1cGVyYXIgb3MgbWV0YWRhZG9zLCBzZXLDo28gcmVwYXNzYWRvcyBvcyBtZXRhZGFkb3Mgc2Fsdm9zIGVtIGNhY2hlLFxuICogc2UgbyBjYWNoZSBuw6NvIGV4aXN0aXIgc2Vyw6EgZGlzcGFyYWRhIHVtYSBub3RpZmljYcOnw6NvLlxuICpcbiAqIE8gZm9ybWF0byBlc3BlcmFkbyBuYSByZXNwb3N0YSBkYSByZXF1aXNpw6fDo28gZXN0w6EgZXNwZWNpZmljYWRvIG5hIGludGVyZmFjZVxuICogW1BvUGFnZUR5bmFtaWNEZXRhaWxNZXRhZGF0YV0oL2RvY3VtZW50YXRpb24vcG8tcGFnZS1keW5hbWljLWRldGFpbCNwby1wYWdlLWR5bmFtaWMtZGV0YWlsLW1ldGFkYXRhKS4gUG9yIGV4ZW1wbG86XG4gKlxuICogYGBgXG4gKiAge1xuICogICB2ZXJzaW9uOiAxLFxuICogICB0aXRsZTogJ1BlcnNvbiBEZXRhaWwnLFxuICogICBmaWVsZHM6IFtcbiAqICAgICB7IHByb3BlcnR5OiAnaWQnLCBrZXk6IHRydWUsIGRpc2FibGVkOiB0cnVlIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ3N0YXR1cycgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnbmFtZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnbmlja25hbWUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2JpcnRoZGF0ZScsIGxhYmVsOiAnQmlydGggZGF0ZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnZ2VucmUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2NpdHknIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2NvdW50cnknIH1cbiAqICAgXVxuICogfVxuICogYGBgXG4gKlxuICogPiBDYXNvIG8gZW5kcG9pbnQgZG9zIG1ldGFkYWRvcyBuw6NvIHNlamEgZXNwZWNpZmljYWRvLCBzZXLDoSBmZWl0byB1bWEgcmVxdWlzacOnw6NvIHV0aWxpemFuZG8gbyBgc2VydmljZUFwaWAgZGEgc2VndWludGUgZm9ybWE6XG4gKiBgYGBcbiAqIEdFVCB7ZW5kLXBvaW50fS9tZXRhZGF0YT90eXBlPWRldGFpbCZ2ZXJzaW9uPXt2ZXJzaW9ufVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tcGFnZS1keW5hbWljLWRldGFpbC11c2VyXCIgdGl0bGU9XCJQTyBQYWdlIER5bmFtaWMgRGV0YWlsIFVzZXJcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy1kZXRhaWwtdXNlci9zYW1wbGUtcG8tcGFnZS1keW5hbWljLWRldGFpbC11c2VyLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy1kZXRhaWwtdXNlci9zYW1wbGUtcG8tcGFnZS1keW5hbWljLWRldGFpbC11c2VyLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1BvUGFnZUR5bmFtaWNTZXJ2aWNlLCBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1NlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFBvUGFnZUR5bmFtaWNEZXRhaWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBPYmpldG8gY29tIHByb3ByaWVkYWRlcyBkbyBicmVhZGNydW1iLiAqL1xuICBASW5wdXQoJ3AtYnJlYWRjcnVtYicpIGJyZWFkY3J1bWI/OiBQb0JyZWFkY3J1bWIgPSB7IGl0ZW1zOiBbXSB9O1xuXG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBvdSBzZXJ2acOnbyBxdWUgc2Vyw6EgZXhlY3V0YWRvIG5hIGluaWNpYWxpemHDp8OjbyBkbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBBIHByb3ByaWVkYWRlIGFjZWl0YSBvcyBzZWd1aW50ZXMgdGlwb3M6XG4gICAqIC0gYHN0cmluZ2A6ICpFbmRwb2ludCogdXNhZG8gcGVsbyBjb21wb25lbnRlIHBhcmEgcmVxdWlzacOnw6NvIHZpYSBgUE9TVGAuXG4gICAqIC0gYGZ1bmN0aW9uYDogTcOpdG9kbyBxdWUgc2Vyw6EgZXhlY3V0YWRvLlxuICAgKlxuICAgKiBPIHJldG9ybm8gZGVzdGEgZnVuw6fDo28gZGV2ZSBzZXIgZG8gdGlwbyBgUG9QYWdlRHluYW1pY0RldGFpbE9wdGlvbnNgLFxuICAgKiBvbmRlIG8gdXN1w6FyaW8gcG9kZXLDoSBjdXN0b21pemFyIG5vdm9zIGNhbXBvcywgYnJlYWRjcnVtYiwgdGl0bGUgZSBhY3Rpb25zXG4gICAqXG4gICAqIFBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGBcbiAgICogZ2V0UGFnZU9wdGlvbnMoKTogUG9QYWdlRHluYW1pY0RldGFpbE9wdGlvbnMge1xuICAgKiByZXR1cm4ge1xuICAgKiAgIGFjdGlvbnM6XG4gICAqICAgICB7IG5ldzogJ25ldycsIGVkaXQ6ICdlZGl0LzppZCcsIHJlbW92ZTogdHJ1ZSB9LFxuICAgKiAgIGZpZWxkczogW1xuICAgKiAgICAgeyBwcm9wZXJ0eTogJ2lkQ2FyZCcsIGdyaWRDb2x1bW5zOiA2IH1cbiAgICogICBdXG4gICAqIH07XG4gICAqIH1cbiAgICpcbiAgICogYGBgXG4gICAqIFBhcmEgcmVmZXJlbmNpYXIgYSBzdWEgZnVuw6fDo28gdXRpbGl6ZSBhIHByb3ByaWVkYWRlIGBiaW5kYCwgcG9yIGV4ZW1wbG86XG4gICAqIGBgYFxuICAgKiAgW3AtbG9hZF09XCJvbkxvYWRPcHRpb25zLmJpbmQodGhpcylcIlxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgncC1sb2FkJykgb25Mb2FkOiBzdHJpbmcgfCAoKCkgPT4gUG9QYWdlRHluYW1pY0RldGFpbE9wdGlvbnMpO1xuXG4gIC8qKiBUw610dWxvIGRhIHDDoWdpbmEuICovXG4gIEBJbnB1dCgncC10aXRsZScpIHRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFbmRwb2ludCB1c2FkbyBwZWxvIHRlbXBsYXRlIHBhcmEgcmVxdWlzacOnw6NvIGRvIHJlY3Vyc28gcXVlIHNlcsOjbyBleGliaWRvLlxuICAgKlxuICAgKiBDYXNvIGEgYcOnw6NvIGByZW1vdmVgIGVzdGl2ZXIgY29uZmlndXJhZGEsIHNlcsOhIGZlaXRvIHVtYSByZXF1aXNpw6fDo28gZGUgZXhjbHVzw6NvIG5lc3NlIG1lc21vIGVuZHBvaW50IHBhc3NhbmRvIG9zIGNhbXBvc1xuICAgKiBzZXRhZG9zIGNvbW8gYGtleTogdHJ1ZWAuXG4gICAqXG4gICAqID4gYERFTEVURSB7ZW5kLXBvaW50fS97a2V5c31gXG4gICAqXG4gICAqIGBgYFxuICAgKiAgPHBvLXBhZ2UtZHluYW1pYy1kZXRhaWxcbiAgICogICAgW3AtYWN0aW9uc109XCJ7IHJlbW92ZTogJy8nIH1cIlxuICAgKiAgICBbcC1maWVsZHNdPVwiWyB7IHByb3BlcnR5OiAnaWQnLCBrZXk6IHRydWUgfSBdXCJcbiAgICogICAgcC1zZXJ2aWNlPVwiL2FwaS9wby1zYW1wbGVzL3YxL3Blb3BsZVwiXG4gICAqICAgIC4uLj5cbiAgICogIDwvcG8tcGFnZS1keW5hbWljLWRldGFpbD5cbiAgICogYGBgXG4gICAqXG4gICAqIFJlc3F1aXNpw6fDo28gZGlzcGFyYWRhLCBvbmRlIGEgcHJvcHJpZWRhZGUgYGlkYCDDqSBpZ3VhbCBhIDI6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgREVMRVRFIC9hcGkvcG8tc2FtcGxlcy92MS9wZW9wbGUvMiBIVFRQLzEuMVxuICAgKiAgSG9zdDogbG9jYWxob3N0OjQwMDBcbiAgICogIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAgICogIEFjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpblxuICAgKiAgLi4uXG4gICAqIGBgYFxuICAgKlxuICAgKiA+IENhc28gZXN0ZWphIHVzYW5kbyBtZXRhZGFkb3MgY29tIG8gdGVtcGxhdGUsIHNlcsOhIGRpc3BhcmFkbyB1bWEgcmVxdWlzacOnw6NvIG5hIGluaWNpYWxpemHDp8OjbyBkbyB0ZW1wbGF0ZSBwYXJhIGJ1c2NhclxuICAgKiA+IG9zIG1ldGFkYWRvcyBkYSBww6FnaW5hIHBhc3NhbmRvIG8gdGlwbyBkbyBtZXRhZGFkbyBlc3BlcmFkbyBlIGEgdmVyc8OjbyBjYWNoZWFkYSBwZWxvIGJyb3dzZXIuXG4gICAqID5cbiAgICogPiBgR0VUIHtlbmQtcG9pbnR9L21ldGFkYXRhP3R5cGU9ZGV0YWlsJnZlcnNpb249e3ZlcnNpb259YFxuICAgKi9cbiAgQElucHV0KCdwLXNlcnZpY2UtYXBpJykgc2VydmljZUFwaTogc3RyaW5nO1xuXG4gIGxpdGVyYWxzO1xuICBtb2RlbDogYW55ID0ge307XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgcHJpdmF0ZSBfYWN0aW9uczogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnMgPSB7fTtcbiAgcHJpdmF0ZSBfYXV0b1JvdXRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9kdXBsaWNhdGVzOiBBcnJheTxhbnk+ID0gW107XG4gIHByaXZhdGUgX2ZpZWxkczogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIF9rZXlzOiBBcnJheTxhbnk+ID0gW107XG4gIHByaXZhdGUgX3BhZ2VBY3Rpb25zOiBBcnJheTxQb1BhZ2VBY3Rpb24+ID0gW107XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGFzIGHDp8O1ZXMgZGEgcMOhZ2luYSBkZSBhY29yZG8gY29tIGEgaW50ZXJmYWNlIGBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc2AuXG4gICAqL1xuICBASW5wdXQoJ3AtYWN0aW9ucycpIHNldCBhY3Rpb25zKHZhbHVlOiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9ucykge1xuICAgIHRoaXMuX2FjdGlvbnMgPSB0aGlzLmlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge307XG5cbiAgICB0aGlzLl9wYWdlQWN0aW9ucyA9IHRoaXMuZ2V0UGFnZUFjdGlvbnModGhpcy5fYWN0aW9ucyk7XG4gIH1cblxuICBnZXQgYWN0aW9ucygpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9hY3Rpb25zIH07XG4gIH1cblxuICAvKipcbiAgICogQHRvZG8gVmFsaWRhciByb3RhcyBuYSBtw6NvIHBvaXMgc2UgZXhpc3RpciB1bWEgcm90YSAnKionIG8gY2F0Y2ggZG8gbmF2aWdhdGlvbiBuw6NvIGZ1bmNpb25hLlxuICAgKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIENyaWEgYXV0b21hdGljYW1lbnRlIGFzIHJvdGFzIGRlIGVkacOnw6NvIChub3ZvL2R1cGxpY2F0ZSkgZSBkZXRhbGhlcyBjYXNvIGFzIGHDp8O1ZXNcbiAgICogZXN0ZWphbSBkZWZpbmlkYXMgbmFzIGHDp8O1ZXMuXG4gICAqXG4gICAqID4gUGFyYSBvIGNvcnJldG8gZnVuY2lvbmFtZW50byBuw6NvIHBvZGUgaGF2ZXIgbmVuaHVtIHJvdGEgY29yaW5nYSAoYCoqYCkgZXNwZWNpZmljYWRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCdwLWF1dG8tcm91dGVyJykgc2V0IGF1dG9Sb3V0ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hdXRvUm91dGVyID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgYXV0b1JvdXRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b1JvdXRlcjtcbiAgfVxuXG4gIC8qKiBMaXN0YSBkb3MgY2FtcG9zIGV4aWJpZG9zIG5hIHDDoWdpbmEuICovXG4gIEBJbnB1dCgncC1maWVsZHMnKSBzZXQgZmllbGRzKHZhbHVlOiBBcnJheTxQb1BhZ2VEeW5hbWljRGV0YWlsRmllbGQ+KSB7XG4gICAgdGhpcy5fZmllbGRzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogW107XG5cbiAgICB0aGlzLl9rZXlzID0gdGhpcy5nZXRLZXlzQnlGaWVsZHModGhpcy5maWVsZHMpO1xuICAgIHRoaXMuX2R1cGxpY2F0ZXMgPSB0aGlzLmdldER1cGxpY2F0ZXNCeUZpZWxkcyh0aGlzLmZpZWxkcyk7XG4gIH1cblxuICBnZXQgZmllbGRzKCk6IEFycmF5PFBvUGFnZUR5bmFtaWNEZXRhaWxGaWVsZD4ge1xuICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcG9Ob3RpZmljYXRpb246IFBvTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHBvRGlhbG9nU2VydmljZTogUG9EaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9QYWdlRHluYW1pY1NlcnZpY2U6IFBvUGFnZUR5bmFtaWNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNTZXJ2aWNlOiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZTogUG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZVxuICApIHtcbiAgICBjb25zdCBsYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XG5cbiAgICB0aGlzLmxpdGVyYWxzID0ge1xuICAgICAgLi4ucG9QYWdlRHluYW1pY0RldGFpbExpdGVyYWxzRGVmYXVsdFtwb0xvY2FsZURlZmF1bHRdLFxuICAgICAgLi4ucG9QYWdlRHluYW1pY0RldGFpbExpdGVyYWxzRGVmYXVsdFtsYW5ndWFnZV1cbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRGF0YUZyb21BUEkoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGR1cGxpY2F0ZXMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9kdXBsaWNhdGVzXTtcbiAgfVxuXG4gIGdldCBrZXlzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5fa2V5c107XG4gIH1cblxuICBnZXQgcGFnZUFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9wYWdlQWN0aW9uc107XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZShcbiAgICBhY3Rpb25SZW1vdmU6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydyZW1vdmUnXSxcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmU/OiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1snYmVmb3JlUmVtb3ZlJ11cbiAgKSB7XG4gICAgY29uc3QgdW5pcXVlS2V5ID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkodGhpcy5tb2RlbCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVSZW1vdmUoYWN0aW9uQmVmb3JlUmVtb3ZlLCB1bmlxdWVLZXksIHsgLi4udGhpcy5tb2RlbCB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKGJlZm9yZVJlbW92ZVJlc3VsdDogUG9QYWdlRHluYW1pY0RldGFpbEJlZm9yZVJlbW92ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3UmVtb3ZlQWN0aW9uID0gYmVmb3JlUmVtb3ZlUmVzdWx0Py5uZXdVcmwgPz8gYWN0aW9uUmVtb3ZlO1xuICAgICAgICAgICAgY29uc3QgYWxsb3dBY3Rpb24gPSBiZWZvcmVSZW1vdmVSZXN1bHQ/LmFsbG93QWN0aW9uID8/IHRydWU7XG5cbiAgICAgICAgICAgIGlmICghYWxsb3dBY3Rpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuZXdSZW1vdmVBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZW1vdmUobmV3UmVtb3ZlQWN0aW9uLCB1bmlxdWVLZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3UmVtb3ZlQWN0aW9uKHVuaXF1ZUtleSwgeyAuLi50aGlzLm1vZGVsIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maXJtUmVtb3ZlKFxuICAgIGFjdGlvblJlbW92ZTogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNbJ3JlbW92ZSddLFxuICAgIGFjdGlvbkJlZm9yZVJlbW92ZTogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNbJ2JlZm9yZVJlbW92ZSddXG4gICkge1xuICAgIGNvbnN0IGNvbmZpcm1PcHRpb25zOiBQb0RpYWxvZ0NvbmZpcm1PcHRpb25zID0ge1xuICAgICAgdGl0bGU6IHRoaXMubGl0ZXJhbHMuY29uZmlybVJlbW92ZVRpdGxlLFxuICAgICAgbWVzc2FnZTogdGhpcy5saXRlcmFscy5jb25maXJtUmVtb3ZlTWVzc2FnZSxcbiAgICAgIGNvbmZpcm06IHRoaXMucmVtb3ZlLmJpbmQodGhpcywgYWN0aW9uUmVtb3ZlLCBhY3Rpb25CZWZvcmVSZW1vdmUpXG4gICAgfTtcblxuICAgIHRoaXMucG9EaWFsb2dTZXJ2aWNlLmNvbmZpcm0oY29uZmlybU9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlUmVtb3ZlKHBhdGgsIHVuaXF1ZUtleTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZGVsZXRlUmVzb3VyY2UodW5pcXVlS2V5KS5waXBlKFxuICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5zdWNjZXNzKHRoaXMubGl0ZXJhbHMucmVtb3ZlTm90aWZpY2F0aW9uU3VjY2Vzcyk7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IHBhdGggfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFVuaXF1ZUtleShpdGVtKSB7XG4gICAgY29uc3Qga2V5cyA9IG1hcE9iamVjdEJ5UHJvcGVydGllcyhpdGVtLCB0aGlzLmtleXMpO1xuXG4gICAgcmV0dXJuIHZhbHVlc0Zyb21PYmplY3Qoa2V5cykuam9pbignfCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnb0JhY2soYWN0aW9uQmFjazogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNbJ2JhY2snXSkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZUJhY2sodGhpcy5hY3Rpb25zLmJlZm9yZUJhY2spXG4gICAgICAgIC5zdWJzY3JpYmUoKGJlZm9yZUJhY2tSZXN1bHQ6IFBvUGFnZUR5bmFtaWNEZXRhaWxCZWZvcmVCYWNrKSA9PlxuICAgICAgICAgIHRoaXMuZXhlY3V0ZUJhY2tBY3Rpb24oYWN0aW9uQmFjaywgYmVmb3JlQmFja1Jlc3VsdD8uYWxsb3dBY3Rpb24sIGJlZm9yZUJhY2tSZXN1bHQ/Lm5ld1VybClcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVCYWNrQWN0aW9uKGFjdGlvbkJhY2s6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydiYWNrJ10sIGFsbG93QWN0aW9uPywgbmV3VXJsPzogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNBbGxvd2VkQWN0aW9uID0gdHlwZW9mIGFsbG93QWN0aW9uID09PSAnYm9vbGVhbicgPyBhbGxvd0FjdGlvbiA6IHRydWU7XG5cbiAgICBpZiAoaXNBbGxvd2VkQWN0aW9uKSB7XG4gICAgICBpZiAoYWN0aW9uQmFjayA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBhY3Rpb25CYWNrID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBhY3Rpb25CYWNrID09PSAnc3RyaW5nJyB8fCBuZXdVcmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuZXdVcmwgfHwgYWN0aW9uQmFja10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWN0aW9uQmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5nZXRSZXNvdXJjZShpZCkucGlwZShcbiAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICB0aGlzLnNldFVuZGVmaW5lZFRvTW9kZWxBbmRBY3Rpb25zKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tb2RlbCA9IHJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLnNldFVuZGVmaW5lZFRvTW9kZWxBbmRBY3Rpb25zKCk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VW5kZWZpbmVkVG9Nb2RlbEFuZEFjdGlvbnMoKSB7XG4gICAgdGhpcy5tb2RlbCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFjdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldE1ldGFkYXRhKFxuICAgIHNlcnZpY2VBcGlGcm9tUm91dGU6IHN0cmluZyxcbiAgICBvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb25cbiAgKTogT2JzZXJ2YWJsZTxQb1BhZ2VEeW5hbWljRGV0YWlsTWV0YURhdGE+IHtcbiAgICBpZiAoc2VydmljZUFwaUZyb21Sb3V0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZ2V0TWV0YWRhdGE8UG9QYWdlRHluYW1pY0RldGFpbE1ldGFEYXRhPignZGV0YWlsJykucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICB0aGlzLmF1dG9Sb3V0ZXIgPSByZXNwb25zZS5hdXRvUm91dGVyIHx8IHRoaXMuYXV0b1JvdXRlcjtcbiAgICAgICAgICB0aGlzLmFjdGlvbnMgPSByZXNwb25zZS5hY3Rpb25zIHx8IHRoaXMuYWN0aW9ucztcbiAgICAgICAgICB0aGlzLmJyZWFkY3J1bWIgPSByZXNwb25zZS5icmVhZGNydW1iIHx8IHRoaXMuYnJlYWRjcnVtYjtcbiAgICAgICAgICB0aGlzLmZpZWxkcyA9IHJlc3BvbnNlLmZpZWxkcyB8fCB0aGlzLmZpZWxkcztcbiAgICAgICAgICB0aGlzLnRpdGxlID0gcmVzcG9uc2UudGl0bGUgfHwgdGhpcy50aXRsZTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWRPcHRpb25zT25Jbml0aWFsaXplKG9uTG9hZCkpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxvYWRPcHRpb25zT25Jbml0aWFsaXplKG9uTG9hZCk7XG4gIH1cblxuICAvLyBAdG9kbyBWYWxpZGFyIHJvdGFzIG5hIG3Do28gcG9pcyBzZSBleGlzdGlyIHVtYSByb3RhICcqKicgbyBjYXRjaCBkbyBuYXZpZ2F0aW9uIG7Do28gZnVuY2lvbmEuXG4gIHByaXZhdGUgbmF2aWdhdGVUbyhcbiAgICByb3V0ZTogeyBwYXRoOiBzdHJpbmc7IGNvbXBvbmVudD87IHVybD86IHN0cmluZzsgcGFyYW1zPzogYW55IH0sXG4gICAgZm9yY2VTdG9wQXV0b1JvdXRlcjogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZS51cmwgfHwgcm91dGUucGF0aF0sIHsgcXVlcnlQYXJhbXM6IHJvdXRlLnBhcmFtcyB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBpZiAoZm9yY2VTdG9wQXV0b1JvdXRlciB8fCAhdGhpcy5hdXRvUm91dGVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yb3V0ZXIuY29uZmlnLnVuc2hpZnQoPFJvdXRlPntcbiAgICAgICAgcGF0aDogcm91dGUucGF0aCxcbiAgICAgICAgY29tcG9uZW50OiByb3V0ZS5jb21wb25lbnQsXG4gICAgICAgIGRhdGE6IHsgc2VydmljZUFwaTogdGhpcy5zZXJ2aWNlQXBpLCBhdXRvUm91dGVyOiB0cnVlIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm5hdmlnYXRlVG8ocm91dGUsIHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRWRpdChhY3Rpb246IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydlZGl0J10pIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KHRoaXMubW9kZWwpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlRWRpdCh0aGlzLmFjdGlvbnMuYmVmb3JlRWRpdCwgaWQsIHRoaXMubW9kZWwpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoYmVmb3JlRWRpdFJlc3VsdDogUG9QYWdlRHluYW1pY0RldGFpbEJlZm9yZUVkaXQpID0+XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVFZGl0QWN0aW9uKGFjdGlvbiwgYmVmb3JlRWRpdFJlc3VsdCwgaWQpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVFZGl0QWN0aW9uKFxuICAgIGFjdGlvbjogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNbJ2VkaXQnXSxcbiAgICBiZWZvcmVFZGl0UmVzdWx0OiBQb1BhZ2VEeW5hbWljRGV0YWlsQmVmb3JlRWRpdCxcbiAgICBpZDogYW55XG4gICkge1xuICAgIGNvbnN0IG5ld0VkaXRBY3Rpb24gPSBiZWZvcmVFZGl0UmVzdWx0Py5uZXdVcmwgPz8gYWN0aW9uO1xuICAgIGNvbnN0IGFsbG93QWN0aW9uID0gYmVmb3JlRWRpdFJlc3VsdD8uYWxsb3dBY3Rpb24gPz8gdHJ1ZTtcblxuICAgIGlmICghYWxsb3dBY3Rpb24pIHtcbiAgICAgIHJldHVybiBvZih7fSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdFZGl0QWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5vcGVuRWRpdFVybChuZXdFZGl0QWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RWRpdEFjdGlvbihpZCwgeyAuLi50aGlzLm1vZGVsIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBFTVBUWTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkVkaXRVcmwocGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5yZXNvbHZlVXJsKHRoaXMubW9kZWwsIHBhdGgpO1xuICAgIHRoaXMubmF2aWdhdGVUbyh7IHBhdGgsIHVybCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVVybChpdGVtOiBhbnksIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuXG4gICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvOmlkL2csIHVuaXF1ZUtleSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBhZ2VBY3Rpb25zKGFjdGlvbnM6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zID0ge30pOiBBcnJheTxQb1BhZ2VBY3Rpb24+IHtcbiAgICBjb25zdCBwYWdlQWN0aW9ucyA9IFtdO1xuXG4gICAgaWYgKGFjdGlvbnMuZWRpdCkge1xuICAgICAgcGFnZUFjdGlvbnMucHVzaCh7IGxhYmVsOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb25FZGl0LCBhY3Rpb246IHRoaXMub3BlbkVkaXQuYmluZCh0aGlzLCBhY3Rpb25zLmVkaXQpIH0pO1xuICAgIH1cblxuICAgIGlmIChhY3Rpb25zLnJlbW92ZSkge1xuICAgICAgcGFnZUFjdGlvbnMucHVzaCh7XG4gICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb25SZW1vdmUsXG4gICAgICAgIGFjdGlvbjogdGhpcy5jb25maXJtUmVtb3ZlLmJpbmQodGhpcywgYWN0aW9ucy5yZW1vdmUsIHRoaXMuYWN0aW9ucy5iZWZvcmVSZW1vdmUpLFxuICAgICAgICB0eXBlOiAnZGFuZ2VyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbnMuYmFjayA9PT0gdW5kZWZpbmVkIHx8IGFjdGlvbnMuYmFjaykge1xuICAgICAgcGFnZUFjdGlvbnMucHVzaCh7IGxhYmVsOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb25CYWNrLCBhY3Rpb246IHRoaXMuZ29CYWNrLmJpbmQodGhpcywgYWN0aW9ucy5iYWNrKSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFnZUFjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGdldEtleXNCeUZpZWxkcyhmaWVsZHM6IEFycmF5PGFueT4gPSBbXSkge1xuICAgIHJldHVybiBmaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmtleSA9PT0gdHJ1ZSkubWFwKGZpZWxkID0+IGZpZWxkLnByb3BlcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHVwbGljYXRlc0J5RmllbGRzKGZpZWxkczogQXJyYXk8YW55PiA9IFtdKSB7XG4gICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQuZHVwbGljYXRlID09PSB0cnVlKS5tYXAoZmllbGQgPT4gZmllbGQucHJvcGVydHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRnJvbUFQSSgpIHtcbiAgICBjb25zdCB7IHNlcnZpY2VBcGk6IHNlcnZpY2VBcGlGcm9tUm91dGUsIHNlcnZpY2VNZXRhZGF0YUFwaSwgc2VydmljZUxvYWRBcGkgfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTtcbiAgICBjb25zdCB7IGlkIH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtcztcblxuICAgIGNvbnN0IG9uTG9hZCA9IHNlcnZpY2VMb2FkQXBpIHx8IHRoaXMub25Mb2FkO1xuICAgIHRoaXMuc2VydmljZUFwaSA9IHNlcnZpY2VBcGlGcm9tUm91dGUgfHwgdGhpcy5zZXJ2aWNlQXBpO1xuXG4gICAgdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5jb25maWdTZXJ2aWNlQXBpKHsgZW5kcG9pbnQ6IHRoaXMuc2VydmljZUFwaSwgbWV0YWRhdGE6IHNlcnZpY2VNZXRhZGF0YUFwaSB9KTtcblxuICAgIGNvbnN0IG1ldGFkYXRhJCA9IHRoaXMuZ2V0TWV0YWRhdGEoc2VydmljZUFwaUZyb21Sb3V0ZSwgb25Mb2FkKTtcbiAgICBjb25zdCBkYXRhJCA9IHRoaXMubG9hZERhdGEoaWQpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goY29uY2F0KG1ldGFkYXRhJCwgZGF0YSQpLnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uKSB7XG4gICAgaWYgKG9uTG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9EeW5hbWljUGFnZU9wdGlvbnMob25Mb2FkKS5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2VQb09wdGlvbiA9PlxuICAgICAgICAgIHRoaXMucG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UuY2hhbmdlT3JpZ2luYWxPcHRpb25zVG9OZXdPcHRpb25zKHRoaXMsIHJlc3BvbnNlUG9PcHRpb24pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQb0R5bmFtaWNQYWdlT3B0aW9ucyhvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24pOiBPYnNlcnZhYmxlPFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zPiB7XG4gICAgY29uc3Qgb3JpZ2luYWxPcHRpb246IFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zID0ge1xuICAgICAgZmllbGRzOiB0aGlzLmZpZWxkcyxcbiAgICAgIGFjdGlvbnM6IHRoaXMuYWN0aW9ucyxcbiAgICAgIGJyZWFkY3J1bWI6IHRoaXMuYnJlYWRjcnVtYixcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZ2VPcHRpb25TY2hlbWE6IFBvUGFnZUR5bmFtaWNPcHRpb25zU2NoZW1hPFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zPiA9IHtcbiAgICAgIHNjaGVtYTogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdmaWVsZHMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgICAgIGtleUZvck1lcmdlOiAncHJvcGVydHknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2FjdGlvbnMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2JyZWFkY3J1bWInXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ3RpdGxlJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldEN1c3RvbU9wdGlvbnMob25Mb2FkLCBvcmlnaW5hbE9wdGlvbiwgcGFnZU9wdGlvblNjaGVtYSk7XG4gIH1cbn1cbiIsIjxwby1wYWdlLWRlZmF1bHQgW3AtYWN0aW9uc109XCJwYWdlQWN0aW9uc1wiIFtwLWJyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYlwiIFtwLXRpdGxlXT1cInRpdGxlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlbDsgdGhlbiB2aWV3RmllbGRzVGVtcGxhdGU7IGVsc2UgcmVnaXN0ZXJOb3RGb3VuZFRlbXBsYXRlXCI+IDwvbmctY29udGFpbmVyPlxuPC9wby1wYWdlLWRlZmF1bHQ+XG5cbjxuZy10ZW1wbGF0ZSAjcmVnaXN0ZXJOb3RGb3VuZFRlbXBsYXRlPlxuICA8cG8td2lkZ2V0PlxuICAgIDxwby1pY29uIHAtaWNvbj1cIklDT05fSU5GT1wiPjwvcG8taWNvbj5cbiAgICA8c3BhbiBjbGFzcz1cInBvLWZvbnQtdGV4dC1sYXJnZVwiPlxuICAgICAge3sgbGl0ZXJhbHMucmVnaXN0ZXJOb3RGb3VuZCB9fVxuICAgIDwvc3Bhbj5cbiAgPC9wby13aWRnZXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3ZpZXdGaWVsZHNUZW1wbGF0ZT5cbiAgPHBvLWR5bmFtaWMtdmlldyBbcC1maWVsZHNdPVwiZmllbGRzXCIgW3AtdmFsdWVdPVwibW9kZWxcIj4gPC9wby1keW5hbWljLXZpZXc+XG48L25nLXRlbXBsYXRlPlxuIl19
|