@acorex/modules 20.0.23 → 20.1.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/auth/index.d.ts +57 -4
- package/common/index.d.ts +8 -1
- package/data-management/index.d.ts +401 -3
- package/fesm2022/{acorex-modules-application-management-module-designer.component-BvuZJdwg.mjs → acorex-modules-application-management-module-designer.component-udoks-Ef.mjs} +17 -17
- package/fesm2022/acorex-modules-application-management-module-designer.component-udoks-Ef.mjs.map +1 -0
- package/fesm2022/acorex-modules-application-management.mjs +53 -53
- package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-DqsEqXec.mjs → acorex-modules-auth-acorex-modules-auth-5TIjp5UG.mjs} +182 -123
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-5TIjp5UG.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-app-chooser.component-D0pKNUts.mjs → acorex-modules-auth-app-chooser.component-B0w1Xzx7.mjs} +6 -6
- package/fesm2022/{acorex-modules-auth-app-chooser.component-D0pKNUts.mjs.map → acorex-modules-auth-app-chooser.component-B0w1Xzx7.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-blank.layout-BwVSMaFI.mjs → acorex-modules-auth-blank.layout-C8NsXB9K.mjs} +5 -5
- package/fesm2022/{acorex-modules-auth-blank.layout-BwVSMaFI.mjs.map → acorex-modules-auth-blank.layout-C8NsXB9K.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-login.module-Dky49ylL.mjs → acorex-modules-auth-login.module-B8sVVZHV.mjs} +8 -8
- package/fesm2022/{acorex-modules-auth-login.module-Dky49ylL.mjs.map → acorex-modules-auth-login.module-B8sVVZHV.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-master.layout-DXfRjCLL.mjs → acorex-modules-auth-master.layout-CMKxj1Qo.mjs} +7 -7
- package/fesm2022/{acorex-modules-auth-master.layout-DXfRjCLL.mjs.map → acorex-modules-auth-master.layout-CMKxj1Qo.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth-oauth-callback.component-C95YLpI_.mjs +101 -0
- package/fesm2022/acorex-modules-auth-oauth-callback.component-C95YLpI_.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-password.component-oH5OFHqQ.mjs → acorex-modules-auth-password.component-DH0qKunk.mjs} +9 -9
- package/fesm2022/{acorex-modules-auth-password.component-oH5OFHqQ.mjs.map → acorex-modules-auth-password.component-DH0qKunk.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth-password.component-Du0EBIiw.mjs +239 -0
- package/fesm2022/acorex-modules-auth-password.component-Du0EBIiw.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-routes-DAiaTm4Y.mjs → acorex-modules-auth-routes-Q9zaIiBS.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-DAiaTm4Y.mjs.map → acorex-modules-auth-routes-Q9zaIiBS.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth-settings.provider-CM-T8nbI.mjs.map +1 -1
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-3-FFY4tI.mjs → acorex-modules-auth-tenant-chooser.component-wp7OOLsH.mjs} +16 -13
- package/fesm2022/acorex-modules-auth-tenant-chooser.component-wp7OOLsH.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-two-factor-code.component-UUmdX7IM.mjs → acorex-modules-auth-two-factor-code.component-DSWd06bn.mjs} +7 -7
- package/fesm2022/{acorex-modules-auth-two-factor-code.component-UUmdX7IM.mjs.map → acorex-modules-auth-two-factor-code.component-DSWd06bn.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor.module-Coe4NNUW.mjs → acorex-modules-auth-two-factor.module-oRixkeAn.mjs} +7 -7
- package/fesm2022/{acorex-modules-auth-two-factor.module-Coe4NNUW.mjs.map → acorex-modules-auth-two-factor.module-oRixkeAn.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth-user-sessions.component-8wwWI0cQ.mjs +135 -0
- package/fesm2022/acorex-modules-auth-user-sessions.component-8wwWI0cQ.mjs.map +1 -0
- package/fesm2022/acorex-modules-auth.mjs +1 -1
- package/fesm2022/acorex-modules-calendar-management.mjs +19 -19
- package/fesm2022/acorex-modules-calendar-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-common-acorex-modules-common-DQESb8jf.mjs +1667 -0
- package/fesm2022/acorex-modules-common-acorex-modules-common-DQESb8jf.mjs.map +1 -0
- package/fesm2022/{acorex-modules-common-search-popup.component-B_bJ0ZRM.mjs → acorex-modules-common-search-popup.component-CpFvcrxw.mjs} +13 -13
- package/fesm2022/acorex-modules-common-search-popup.component-CpFvcrxw.mjs.map +1 -0
- package/fesm2022/{acorex-modules-platform-management-settings.provider-intHn3XI.mjs → acorex-modules-common-settings.provider-ha75F6g5.mjs} +2 -3
- package/fesm2022/acorex-modules-common-settings.provider-ha75F6g5.mjs.map +1 -0
- package/fesm2022/{acorex-modules-common-timeline-version-history-popup.component-D48aDOVu.mjs → acorex-modules-common-timeline-version-history-popup.component-D_6STmWm.mjs} +11 -11
- package/fesm2022/acorex-modules-common-timeline-version-history-popup.component-D_6STmWm.mjs.map +1 -0
- package/fesm2022/acorex-modules-common.mjs +1 -1199
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/{acorex-modules-contact-management-acorex-modules-contact-management-DVjMlS0K.mjs → acorex-modules-contact-management-acorex-modules-contact-management-CM72FkGM.mjs} +47 -222
- package/fesm2022/acorex-modules-contact-management-acorex-modules-contact-management-CM72FkGM.mjs.map +1 -0
- package/fesm2022/{acorex-modules-contact-management-address-type.entity-CWIBwWfZ.mjs → acorex-modules-contact-management-address-type.entity-CW0fx3v8.mjs} +2 -2
- package/fesm2022/{acorex-modules-contact-management-address-type.entity-CWIBwWfZ.mjs.map → acorex-modules-contact-management-address-type.entity-CW0fx3v8.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-contact-management-contact-address.entity-DO6GizbS.mjs → acorex-modules-contact-management-contact-address.entity-D5OGWsSx.mjs} +2 -2
- package/fesm2022/{acorex-modules-contact-management-contact-address.entity-DO6GizbS.mjs.map → acorex-modules-contact-management-contact-address.entity-D5OGWsSx.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-contact-management-contact-method.entity-tEtMSV4f.mjs → acorex-modules-contact-management-contact-method.entity-Cpdd-Xwb.mjs} +2 -2
- package/fesm2022/{acorex-modules-contact-management-contact-method.entity-tEtMSV4f.mjs.map → acorex-modules-contact-management-contact-method.entity-Cpdd-Xwb.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-contact-management-contact-relationship.entity-C-B5aOoq.mjs → acorex-modules-contact-management-contact-relationship.entity-B_gQ7mEo.mjs} +2 -2
- package/fesm2022/{acorex-modules-contact-management-contact-relationship.entity-C-B5aOoq.mjs.map → acorex-modules-contact-management-contact-relationship.entity-B_gQ7mEo.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-contact-management-contact-source.entity-Dw8jwcox.mjs → acorex-modules-contact-management-contact-source.entity-BwYBaS8B.mjs} +2 -2
- package/fesm2022/{acorex-modules-contact-management-contact-source.entity-Dw8jwcox.mjs.map → acorex-modules-contact-management-contact-source.entity-BwYBaS8B.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-contact-management-emergency-contact-category.entity-BJOOhcD1.mjs → acorex-modules-contact-management-emergency-contact-category.entity-CDbm4Rq3.mjs} +2 -2
- package/fesm2022/{acorex-modules-contact-management-emergency-contact-category.entity-BJOOhcD1.mjs.map → acorex-modules-contact-management-emergency-contact-category.entity-CDbm4Rq3.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-contact-management-emergency-contact.entity-Cr7_5JKD.mjs → acorex-modules-contact-management-emergency-contact.entity-BpNDJPVs.mjs} +2 -2
- package/fesm2022/{acorex-modules-contact-management-emergency-contact.entity-Cr7_5JKD.mjs.map → acorex-modules-contact-management-emergency-contact.entity-BpNDJPVs.mjs.map} +1 -1
- package/fesm2022/acorex-modules-contact-management.mjs +1 -1
- package/fesm2022/acorex-modules-content-management.mjs +14 -14
- package/fesm2022/acorex-modules-content-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-conversation.mjs +123 -123
- package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
- package/fesm2022/acorex-modules-dashboard-management.mjs +191 -191
- package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-data-management.mjs +2215 -265
- package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-Bte3VGKC.mjs → acorex-modules-document-management-acorex-modules-document-management-B4Jd-KGV.mjs} +144 -144
- package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-B4Jd-KGV.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-attachment-widget.component-Cc0anIMV.mjs → acorex-modules-document-management-attachment-widget.component-Bp4kKjC4.mjs} +5 -5
- package/fesm2022/{acorex-modules-document-management-attachment-widget.component-Cc0anIMV.mjs.map → acorex-modules-document-management-attachment-widget.component-Bp4kKjC4.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-BNcu8bzT.mjs → acorex-modules-document-management-create-folder-dialog.component-12aUAucS.mjs} +22 -22
- package/fesm2022/acorex-modules-document-management-create-folder-dialog.component-12aUAucS.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-details-view.component-BeN0NPcy.mjs → acorex-modules-document-management-details-view.component-bzA7fJZW.mjs} +5 -5
- package/fesm2022/{acorex-modules-document-management-details-view.component-BeN0NPcy.mjs.map → acorex-modules-document-management-details-view.component-bzA7fJZW.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-drive-choose.component-B66wODCQ.mjs → acorex-modules-document-management-drive-choose.component-DLJdJzp1.mjs} +18 -18
- package/fesm2022/acorex-modules-document-management-drive-choose.component-DLJdJzp1.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-drive.component-CUej0GjY.mjs → acorex-modules-document-management-drive.component-DrkSd6Rv.mjs} +28 -28
- package/fesm2022/acorex-modules-document-management-drive.component-DrkSd6Rv.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-large-icons-view.component-BuwrkLhe.mjs → acorex-modules-document-management-large-icons-view.component-DV8oWdDh.mjs} +5 -5
- package/fesm2022/{acorex-modules-document-management-large-icons-view.component-BuwrkLhe.mjs.map → acorex-modules-document-management-large-icons-view.component-DV8oWdDh.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-Cs-mjiQX.mjs → acorex-modules-document-management-large-tiles-view.component-Bgr9s_zf.mjs} +5 -5
- package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-Cs-mjiQX.mjs.map → acorex-modules-document-management-large-tiles-view.component-Bgr9s_zf.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-link-dialog.component-OTa8ttto.mjs → acorex-modules-document-management-link-dialog.component-CSEIhT4P.mjs} +5 -5
- package/fesm2022/{acorex-modules-document-management-link-dialog.component-OTa8ttto.mjs.map → acorex-modules-document-management-link-dialog.component-CSEIhT4P.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-list-view.component-1M2rIOGv.mjs → acorex-modules-document-management-list-view.component-Dz6ymqrq.mjs} +5 -5
- package/fesm2022/{acorex-modules-document-management-list-view.component-1M2rIOGv.mjs.map → acorex-modules-document-management-list-view.component-Dz6ymqrq.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-meta-choose-popup.component-DsSo15AL.mjs → acorex-modules-document-management-meta-choose-popup.component-DYJN-4Pe.mjs} +20 -20
- package/fesm2022/acorex-modules-document-management-meta-choose-popup.component-DYJN-4Pe.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-meta-selector-widget-column.component-gunvY9et.mjs → acorex-modules-document-management-meta-selector-widget-column.component-C_J1rPak.mjs} +4 -4
- package/fesm2022/{acorex-modules-document-management-meta-selector-widget-column.component-gunvY9et.mjs.map → acorex-modules-document-management-meta-selector-widget-column.component-C_J1rPak.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-meta-selector-widget-designer.component-B-fYrGs1.mjs → acorex-modules-document-management-meta-selector-widget-designer.component-By_NgUX6.mjs} +7 -7
- package/fesm2022/acorex-modules-document-management-meta-selector-widget-designer.component-By_NgUX6.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-meta-selector-widget-view.component-D4gu7liQ.mjs → acorex-modules-document-management-meta-selector-widget-view.component-zwCw3v1w.mjs} +4 -4
- package/fesm2022/{acorex-modules-document-management-meta-selector-widget-view.component-D4gu7liQ.mjs.map → acorex-modules-document-management-meta-selector-widget-view.component-zwCw3v1w.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-permission-definition.provider-BEq3ySY3.mjs → acorex-modules-document-management-permission-definition.provider-CN7HVQLu.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-permission-definition.provider-BEq3ySY3.mjs.map → acorex-modules-document-management-permission-definition.provider-CN7HVQLu.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-DWzD41AV.mjs → acorex-modules-document-management-rename-node-dialog.component-C_dsLLMb.mjs} +15 -15
- package/fesm2022/acorex-modules-document-management-rename-node-dialog.component-C_dsLLMb.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-share-dialog.component-DiyR6CiE.mjs → acorex-modules-document-management-share-dialog.component-CBrf7hjZ.mjs} +6 -6
- package/fesm2022/{acorex-modules-document-management-share-dialog.component-DiyR6CiE.mjs.map → acorex-modules-document-management-share-dialog.component-CBrf7hjZ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-share-email-dialog.component-CKlG3YwB.mjs → acorex-modules-document-management-share-email-dialog.component-D3WcHAOf.mjs} +5 -5
- package/fesm2022/{acorex-modules-document-management-share-email-dialog.component-CKlG3YwB.mjs.map → acorex-modules-document-management-share-email-dialog.component-D3WcHAOf.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-small-icons-view.component-Dh5Di_2Y.mjs → acorex-modules-document-management-small-icons-view.component-wvFkjOqg.mjs} +5 -5
- package/fesm2022/{acorex-modules-document-management-small-icons-view.component-Dh5Di_2Y.mjs.map → acorex-modules-document-management-small-icons-view.component-wvFkjOqg.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-mOjQbw-f.mjs → acorex-modules-document-management-small-tiles-view.component-C4ARGOZR.mjs} +5 -5
- package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-mOjQbw-f.mjs.map → acorex-modules-document-management-small-tiles-view.component-C4ARGOZR.mjs.map} +1 -1
- package/fesm2022/acorex-modules-document-management.mjs +1 -1
- package/fesm2022/{acorex-modules-form-template-management-acorex-modules-form-template-management-EsaVgkdd.mjs → acorex-modules-form-template-management-acorex-modules-form-template-management-zz8KU2BM.mjs} +68 -68
- package/fesm2022/acorex-modules-form-template-management-acorex-modules-form-template-management-zz8KU2BM.mjs.map +1 -0
- package/fesm2022/{acorex-modules-form-template-management-category.entity-CC0qe4pv.mjs → acorex-modules-form-template-management-category.entity-g5YGQjj3.mjs} +2 -2
- package/fesm2022/{acorex-modules-form-template-management-category.entity-CC0qe4pv.mjs.map → acorex-modules-form-template-management-category.entity-g5YGQjj3.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-form-template-management-designer.page-B14QVCAw.mjs → acorex-modules-form-template-management-designer.page-DQorNK3f.mjs} +6 -6
- package/fesm2022/acorex-modules-form-template-management-designer.page-DQorNK3f.mjs.map +1 -0
- package/fesm2022/{acorex-modules-form-template-management-permission-definition.provider-BMd6DvoR.mjs → acorex-modules-form-template-management-permission-definition.provider-BFPqDVO3.mjs} +2 -2
- package/fesm2022/{acorex-modules-form-template-management-permission-definition.provider-BMd6DvoR.mjs.map → acorex-modules-form-template-management-permission-definition.provider-BFPqDVO3.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-form-template-management-settings.provider-BYS5t4c_.mjs → acorex-modules-form-template-management-settings.provider-DYbrgJI7.mjs} +2 -2
- package/fesm2022/{acorex-modules-form-template-management-settings.provider-BYS5t4c_.mjs.map → acorex-modules-form-template-management-settings.provider-DYbrgJI7.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-form-template-management-template-picker.component-C0mLCsFT.mjs → acorex-modules-form-template-management-template-picker.component-DgH_DUIB.mjs} +14 -14
- package/fesm2022/acorex-modules-form-template-management-template-picker.component-DgH_DUIB.mjs.map +1 -0
- package/fesm2022/{acorex-modules-form-template-management-template-widget-edit.component-CffnsEo2.mjs → acorex-modules-form-template-management-template-widget-edit.component-CCL7xNSm.mjs} +9 -9
- package/fesm2022/acorex-modules-form-template-management-template-widget-edit.component-CCL7xNSm.mjs.map +1 -0
- package/fesm2022/{acorex-modules-form-template-management-template.entity-DTx9CejD.mjs → acorex-modules-form-template-management-template.entity-XNBsmQZY.mjs} +2 -2
- package/fesm2022/{acorex-modules-form-template-management-template.entity-DTx9CejD.mjs.map → acorex-modules-form-template-management-template.entity-XNBsmQZY.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-form-template-management-viewer-popup.component-BwVSDsN3.mjs → acorex-modules-form-template-management-viewer-popup.component-Bw9VbGx7.mjs} +12 -12
- package/fesm2022/acorex-modules-form-template-management-viewer-popup.component-Bw9VbGx7.mjs.map +1 -0
- package/fesm2022/acorex-modules-form-template-management.mjs +1 -1
- package/fesm2022/{acorex-modules-issue-management-acorex-modules-issue-management-DKdtV_QL.mjs → acorex-modules-issue-management-acorex-modules-issue-management-B8ZVc-0b.mjs} +45 -45
- package/fesm2022/{acorex-modules-issue-management-acorex-modules-issue-management-DKdtV_QL.mjs.map → acorex-modules-issue-management-acorex-modules-issue-management-B8ZVc-0b.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-issue-management-capture-screen.component-CucnKDr1.mjs → acorex-modules-issue-management-capture-screen.component-D1vapaJC.mjs} +7 -7
- package/fesm2022/{acorex-modules-issue-management-capture-screen.component-CucnKDr1.mjs.map → acorex-modules-issue-management-capture-screen.component-D1vapaJC.mjs.map} +1 -1
- package/fesm2022/acorex-modules-issue-management.mjs +1 -1
- package/fesm2022/acorex-modules-log-management.mjs +427 -479
- package/fesm2022/acorex-modules-log-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs +60 -60
- package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-organization-management-add-item.component-Br70YGJS.mjs → acorex-modules-organization-management-add-item.component-DsDk5cyO.mjs} +16 -16
- package/fesm2022/{acorex-modules-organization-management-add-item.component-Br70YGJS.mjs.map → acorex-modules-organization-management-add-item.component-DsDk5cyO.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-branch.entity-Bsgj4Pow.mjs → acorex-modules-organization-management-branch.entity-CHp5WtIF.mjs} +80 -6
- package/fesm2022/acorex-modules-organization-management-branch.entity-CHp5WtIF.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-chart.entity-UAn44WCP.mjs.map +1 -1
- package/fesm2022/acorex-modules-organization-management-company.entity-D1A1HSkC.mjs.map +1 -1
- package/fesm2022/{acorex-modules-organization-management-department.entity-BMojk26d.mjs → acorex-modules-organization-management-department.entity-BxCyXNtv.mjs} +68 -7
- package/fesm2022/acorex-modules-organization-management-department.entity-BxCyXNtv.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-division.entity-BnWpX4US.mjs → acorex-modules-organization-management-division.entity-DzQT2jpz.mjs} +68 -6
- package/fesm2022/acorex-modules-organization-management-division.entity-DzQT2jpz.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-employee.entity-DBuCVYZP.mjs → acorex-modules-organization-management-employee.entity-CSY_U9Bl.mjs} +152 -28
- package/fesm2022/acorex-modules-organization-management-employee.entity-CSY_U9Bl.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-employment-type.entity-CWYu9tIg.mjs → acorex-modules-organization-management-employment-type.entity-h9Hua7Xe.mjs} +21 -8
- package/fesm2022/acorex-modules-organization-management-employment-type.entity-h9Hua7Xe.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-org-chart-configuration.page-DHu4UuxD.mjs → acorex-modules-organization-management-org-chart-configuration.page-a2JPiCy9.mjs} +6 -6
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-a2JPiCy9.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-org-chart-configuration.service-CcZMGyCz.mjs → acorex-modules-organization-management-org-chart-configuration.service-BkfSow3s.mjs} +5 -5
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.service-BkfSow3s.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-org-chart.page-CSMTnTDi.mjs → acorex-modules-organization-management-org-chart.page-DWQ-5NF_.mjs} +20 -20
- package/fesm2022/acorex-modules-organization-management-org-chart.page-DWQ-5NF_.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-position-category.entity-DrZ9Ott4.mjs → acorex-modules-organization-management-position-category.entity-CIir9UMg.mjs} +20 -35
- package/fesm2022/acorex-modules-organization-management-position-category.entity-CIir9UMg.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-position.entity-BpkjUsoZ.mjs +526 -0
- package/fesm2022/acorex-modules-organization-management-position.entity-BpkjUsoZ.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-responsibility-category.entity-CmafbyCZ.mjs → acorex-modules-organization-management-responsibility-category.entity-tJFpEylO.mjs} +12 -25
- package/fesm2022/acorex-modules-organization-management-responsibility-category.entity-tJFpEylO.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-responsibility.entity-DmLeFogS.mjs → acorex-modules-organization-management-responsibility.entity-DmKSoxpL.mjs} +70 -25
- package/fesm2022/acorex-modules-organization-management-responsibility.entity-DmKSoxpL.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-role-category.entity-Cyt1dAKR.mjs → acorex-modules-organization-management-role-category.entity-CAljzQcH.mjs} +22 -14
- package/fesm2022/acorex-modules-organization-management-role-category.entity-CAljzQcH.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-position.entity-CY4TugWR.mjs → acorex-modules-organization-management-role.entity-CruQeObl.mjs} +77 -79
- package/fesm2022/acorex-modules-organization-management-role.entity-CruQeObl.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-settings.provider-hlbUXugb.mjs.map +1 -1
- package/fesm2022/{acorex-modules-organization-management-skill-category.entity-BPgGGVT3.mjs → acorex-modules-organization-management-skill-category.entity-iIbc-pjJ.mjs} +18 -33
- package/fesm2022/acorex-modules-organization-management-skill-category.entity-iIbc-pjJ.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-skill.entity-D9XojzUV.mjs → acorex-modules-organization-management-skill.entity-DoAsCzm9.mjs} +61 -22
- package/fesm2022/acorex-modules-organization-management-skill.entity-DoAsCzm9.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-team.entity-mYPhrc2l.mjs → acorex-modules-organization-management-team.entity-DMCfAZsr.mjs} +58 -10
- package/fesm2022/acorex-modules-organization-management-team.entity-DMCfAZsr.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management.mjs +221 -136
- package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-platform-management-list-version.component-CgF5pvTa.mjs → acorex-modules-platform-management-list-version.component-BOfUQDwo.mjs} +9 -9
- package/fesm2022/acorex-modules-platform-management-list-version.component-BOfUQDwo.mjs.map +1 -0
- package/fesm2022/acorex-modules-platform-management.mjs +3479 -1
- package/fesm2022/acorex-modules-platform-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-project-management.mjs +43 -43
- package/fesm2022/acorex-modules-project-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-report-management-report-create-root.component-DqrLa6vh.mjs → acorex-modules-report-management-report-create-root.component-DgouOz2M.mjs} +10 -10
- package/fesm2022/acorex-modules-report-management-report-create-root.component-DgouOz2M.mjs.map +1 -0
- package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs → acorex-modules-report-management-report-runner-root-page.component-DHu-kyCd.mjs} +13 -13
- package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs.map → acorex-modules-report-management-report-runner-root-page.component-DHu-kyCd.mjs.map} +1 -1
- package/fesm2022/acorex-modules-report-management.mjs +465 -232
- package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-scheduler-job-management.mjs +14 -14
- package/fesm2022/acorex-modules-scheduler-job-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-security-management.mjs +170 -102
- package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-settings-management-setting-page.component-BbnEqXKu.mjs → acorex-modules-settings-management-setting-page.component-cG4ykm2g.mjs} +17 -17
- package/fesm2022/acorex-modules-settings-management-setting-page.component-cG4ykm2g.mjs.map +1 -0
- package/fesm2022/{acorex-modules-settings-management-setting-view.component-DP8mxDK9.mjs → acorex-modules-settings-management-setting-view.component-CrEK2N1U.mjs} +11 -11
- package/fesm2022/acorex-modules-settings-management-setting-view.component-CrEK2N1U.mjs.map +1 -0
- package/fesm2022/acorex-modules-settings-management.mjs +6 -6
- package/fesm2022/acorex-modules-settings-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-text-template-management-settings.provider-fX0dhWUL.mjs.map +1 -1
- package/fesm2022/acorex-modules-text-template-management.mjs +24 -24
- package/fesm2022/acorex-modules-text-template-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-training-management.mjs +43 -43
- package/fesm2022/acorex-modules-training-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-workflow-management-task-board.page-zaSchG-u.mjs → acorex-modules-workflow-management-task-board.page-BoG_tFGn.mjs} +123 -133
- package/fesm2022/acorex-modules-workflow-management-task-board.page-BoG_tFGn.mjs.map +1 -0
- package/fesm2022/acorex-modules-workflow-management.mjs +12 -12
- package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
- package/log-management/index.d.ts +46 -19
- package/organization-management/index.d.ts +41 -13
- package/package.json +1 -1
- package/platform-management/index.d.ts +8 -277
- package/report-management/index.d.ts +180 -126
- package/security-management/index.d.ts +2 -46
- package/fesm2022/acorex-modules-application-management-module-designer.component-BvuZJdwg.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-DqsEqXec.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-password.component-BbsQWpEh.mjs +0 -134
- package/fesm2022/acorex-modules-auth-password.component-BbsQWpEh.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-tenant-chooser.component-3-FFY4tI.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-user-sessions.component-CtTrstZT.mjs +0 -135
- package/fesm2022/acorex-modules-auth-user-sessions.component-CtTrstZT.mjs.map +0 -1
- package/fesm2022/acorex-modules-common-search-popup.component-B_bJ0ZRM.mjs.map +0 -1
- package/fesm2022/acorex-modules-common-timeline-version-history-popup.component-D48aDOVu.mjs.map +0 -1
- package/fesm2022/acorex-modules-contact-management-acorex-modules-contact-management-DVjMlS0K.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-Bte3VGKC.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-create-folder-dialog.component-BNcu8bzT.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-drive-choose.component-B66wODCQ.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-drive.component-CUej0GjY.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-meta-choose-popup.component-DsSo15AL.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-meta-selector-widget-designer.component-B-fYrGs1.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-rename-node-dialog.component-DWzD41AV.mjs.map +0 -1
- package/fesm2022/acorex-modules-form-template-management-acorex-modules-form-template-management-EsaVgkdd.mjs.map +0 -1
- package/fesm2022/acorex-modules-form-template-management-designer.page-B14QVCAw.mjs.map +0 -1
- package/fesm2022/acorex-modules-form-template-management-template-picker.component-C0mLCsFT.mjs.map +0 -1
- package/fesm2022/acorex-modules-form-template-management-template-widget-edit.component-CffnsEo2.mjs.map +0 -1
- package/fesm2022/acorex-modules-form-template-management-viewer-popup.component-BwVSDsN3.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-branch.entity-Bsgj4Pow.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-department.entity-BMojk26d.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-division.entity-BnWpX4US.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-employee.entity-DBuCVYZP.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-employment-type.entity-CWYu9tIg.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DHu4UuxD.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart-configuration.service-CcZMGyCz.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart.page-CSMTnTDi.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-position-category.entity-DrZ9Ott4.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-position.entity-CY4TugWR.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-responsibility-category.entity-CmafbyCZ.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-responsibility.entity-DmLeFogS.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-role-category.entity-Cyt1dAKR.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-role.entity-BDErzNv-.mjs +0 -324
- package/fesm2022/acorex-modules-organization-management-role.entity-BDErzNv-.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-skill-category.entity-BPgGGVT3.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-skill.entity-D9XojzUV.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-team.entity-mYPhrc2l.mjs.map +0 -1
- package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-BLhzWiXM.mjs +0 -5524
- package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-BLhzWiXM.mjs.map +0 -1
- package/fesm2022/acorex-modules-platform-management-list-version.component-CgF5pvTa.mjs.map +0 -1
- package/fesm2022/acorex-modules-platform-management-settings.provider-intHn3XI.mjs.map +0 -1
- package/fesm2022/acorex-modules-report-management-report-create-root.component-DqrLa6vh.mjs.map +0 -1
- package/fesm2022/acorex-modules-settings-management-setting-page.component-BbnEqXKu.mjs.map +0 -1
- package/fesm2022/acorex-modules-settings-management-setting-view.component-DP8mxDK9.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-task-board.page-zaSchG-u.mjs.map +0 -1
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"acorex-modules-organization-management-org-chart.page-DWQ-5NF_.mjs","sources":["../tmp-esm2022/organization-management/lib/features/organization-chart/org-chart-print.service.js","../tmp-esm2022/organization-management/lib/features/organization-chart/org-chart.service.js","../tmp-esm2022/organization-management/lib/features/organization-chart/org-chart.page.js"],"sourcesContent":["import { AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExportService } from '@acorex/platform/common';\nimport { inject, Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * Service for printing organization charts.\n */\nexport class AXMOrgChartPrintService {\n constructor() {\n this.loadingDialog = inject(AXLoadingDialogService);\n this.exportService = inject(AXPExportService);\n this.translationService = inject(AXTranslationService);\n }\n /**\n * Prints the organization chart.\n * @param element - The HTMLElement representing the chart to be printed.\n * @returns A promise that resolves when the print process is complete.\n */\n async printChart(element) {\n const d = this.loadingDialog.show({\n title: 'Printing Organization Chart...',\n mode: 'determinate',\n progressColor: 'primary',\n progressValue: 0,\n status: '0/10',\n text: 'Initializing print process...',\n buttons: [\n {\n text: 'Cancel',\n color: 'danger',\n onClick: () => {\n d.close();\n },\n },\n ],\n });\n try {\n await this.HandleStep(d, await this.translateStatements('preparing-document'), 10, '1/10');\n const chartElement = element;\n const { originalStyles, modifiedStyles } = this.expandChart(chartElement);\n await this.HandleStep(d, await this.translateStatements('rendering-chart-image'), 25, '2.5/10');\n const canvasBlob = await this.exportService.generateBlobFromElement(chartElement, {\n popup: true,\n filter: (node) => {\n if (node instanceof Element && node.classList.contains('--toggle')) {\n return false;\n }\n return true;\n },\n bgcolor: 'transparent',\n scale: 2,\n quality: 1,\n height: Number.parseInt(modifiedStyles.modifiedHeight),\n width: Number.parseInt(modifiedStyles.modifiedWidth),\n });\n await this.HandleStep(d, await this.translateStatements('finalizing-image-processing'), 50, '5/10');\n this.restoreChartStyles(chartElement, originalStyles);\n await this.HandleStep(d, await this.translateStatements('downloading-image'), 75, '7.5/10');\n this.exportService.download(canvasBlob, 'org-chart.png');\n await this.HandleStep(d, await this.translateStatements('process-complete'), 100, '10/10');\n setTimeout(() => d.close(), 1500);\n }\n catch (err) {\n console.error('Error capturing chart:', err);\n await this.HandleStep(d, await this.translateStatements('failed-to-generate-chart-image'), 100, 'Error', 'danger');\n d.close();\n }\n }\n /**\n * Expands the chart temporarily to capture the full view.\n * @param chartElement - The HTMLElement representing the chart.\n * @returns An object containing the original and modified styles of the chart.\n */\n expandChart(chartElement) {\n const originalStyles = {\n originalOverflow: chartElement.style.overflow,\n originalWidth: chartElement.style.width,\n originalHeight: chartElement.style.height,\n };\n const modifiedStyles = {\n modifiedOverflow: 'visible',\n modifiedWidth: `${chartElement.scrollWidth}px`,\n modifiedHeight: `${chartElement.scrollHeight}px`,\n };\n chartElement.style.overflow = modifiedStyles.modifiedOverflow;\n chartElement.style.width = modifiedStyles.modifiedWidth;\n chartElement.style.height = modifiedStyles.modifiedHeight;\n return { originalStyles, modifiedStyles };\n }\n /**\n * Restores chart styles after capturing.\n * @param chartElement - The HTMLElement representing the chart.\n * @param originalStyles - The original styles to be restored.\n */\n restoreChartStyles(chartElement, originalStyles) {\n chartElement.style.overflow = originalStyles.originalOverflow;\n chartElement.style.width = originalStyles.originalWidth;\n chartElement.style.height = originalStyles.originalHeight;\n }\n /**\n * Handles updating the progress dialog step.\n * @param dialog - The dialog reference.\n * @param text - The text to display in the dialog.\n * @param progress - The progress value to set.\n * @param status - The status to display.\n * @param color - The color of the progress bar.\n * @returns A promise that resolves when the dialog is updated.\n */\n async HandleStep(dialog, text, progress, status, color = 'primary') {\n return new Promise((resolve) => {\n dialog.setProgressColor(color);\n dialog.setProgressText(text);\n dialog.setProgressValue(progress);\n dialog.setProgressStatus(status);\n resolve();\n });\n }\n /**\n * Translates a statement using the translation service.\n * @param key - The translation key.\n * @returns A promise that resolves to the translated string.\n */\n async translateStatements(key) {\n return (await this.translationService.translateAsync(key, { scope: 'organization-management' })) + '...';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXMOrgChartPrintService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXMOrgChartPrintService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXMOrgChartPrintService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LXByaW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9vcmdhbml6YXRpb24tY2hhcnQvb3JnLWNoYXJ0LXByaW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRW5EOztHQUVHO0FBRUgsTUFBTSxPQUFPLHVCQUF1QjtJQURwQztRQUVVLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDL0Msa0JBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6Qyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztLQXdKM0Q7SUF0SkM7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBb0I7UUFDbkMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDaEMsS0FBSyxFQUFFLGdDQUFnQztZQUN2QyxJQUFJLEVBQUUsYUFBYTtZQUNuQixhQUFhLEVBQUUsU0FBUztZQUN4QixhQUFhLEVBQUUsQ0FBQztZQUNoQixNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSwrQkFBK0I7WUFDckMsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxRQUFRO29CQUNmLE9BQU8sRUFBRSxHQUFH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QUFDO1lBQ2xDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBVztRQUMzQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDM0csQ0FBQzs4R0ExSlUsdUJBQXVCO2tIQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFN0eWxlQ29sb3JUeXBlIH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRGlhbG9nUmVmLCBBWExvYWRpbmdEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xvYWRpbmctZGlhbG9nJztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYUEV4cG9ydFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBwcmludGluZyBvcmdhbml6YXRpb24gY2hhcnRzLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNT3JnQ2hhcnRQcmludFNlcnZpY2Uge1xuICBwcml2YXRlIGxvYWRpbmdEaWFsb2cgPSBpbmplY3QoQVhMb2FkaW5nRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgZXhwb3J0U2VydmljZSA9IGluamVjdChBWFBFeHBvcnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBQcmludHMgdGhlIG9yZ2FuaXphdGlvbiBjaGFydC5cbiAgICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgSFRNTEVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjaGFydCB0byBiZSBwcmludGVkLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBwcmludCBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcHJpbnRDaGFydChlbGVtZW50OiBIVE1MRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGQgPSB0aGlzLmxvYWRpbmdEaWFsb2cuc2hvdyh7XG4gICAgICB0aXRsZTogJ1ByaW50aW5nIE9yZ2FuaXphdGlvbiBDaGFydC4uLicsXG4gICAgICBtb2RlOiAnZGV0ZXJtaW5hdGUnLFxuICAgICAgcHJvZ3Jlc3NDb2xvcjogJ3ByaW1hcnknLFxuICAgICAgcHJvZ3Jlc3NWYWx1ZTogMCxcbiAgICAgIHN0YXR1czogJzAvMTAnLFxuICAgICAgdGV4dDogJ0luaXRpYWxpemluZyBwcmludCBwcm9jZXNzLi4uJyxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6ICdDYW5jZWwnLFxuICAgICAgICAgIGNvbG9yOiAnZGFuZ2VyJyxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICBkLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5IYW5kbGVTdGVwKGQsIGF3YWl0IHRoaXMudHJhbnNsYXRlU3RhdGVtZW50cygncHJlcGFyaW5nLWRvY3VtZW50JyksIDEwLCAnMS8xMCcpO1xuICAgICAgY29uc3QgY2hhcnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIGNvbnN0IHsgb3JpZ2luYWxTdHlsZXMsIG1vZGlmaWVkU3R5bGVzIH0gPSB0aGlzLmV4cGFuZENoYXJ0KGNoYXJ0RWxlbWVudCk7XG5cbiAgICAgIGF3YWl0IHRoaXMuSGFuZGxlU3RlcChkLCBhd2FpdCB0aGlzLnRyYW5zbGF0ZVN0YXRlbWVudHMoJ3JlbmRlcmluZy1jaGFydC1pbWFnZScpLCAyNSwgJzIuNS8xMCcpO1xuICAgICAgY29uc3QgY2FudmFzQmxvYiA9IGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5nZW5lcmF0ZUJsb2JGcm9tRWxlbWVudChjaGFydEVsZW1lbnQsIHtcbiAgICAgICAgcG9wdXA6IHRydWUsXG4gICAgICAgIGZpbHRlcjogKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJy0tdG9nZ2xlJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGJnY29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIHNjYWxlOiAyLFxuICAgICAgICBxdWFsaXR5OiAxLFxuICAgICAgICBoZWlnaHQ6IE51bWJlci5wYXJzZUludChtb2RpZmllZFN0eWxlcy5tb2RpZmllZEhlaWdodCksXG4gICAgICAgIHdpZHRoOiBOdW1iZXIucGFyc2VJbnQobW9kaWZpZWRTdHlsZXMubW9kaWZpZWRXaWR0aCksXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdGhpcy5IYW5kbGVTdGVwKGQsIGF3YWl0IHRoaXMudHJhbnNsYXRlU3RhdGVtZW50cygnZmluYWxpemluZy1pbWFnZS1wcm9jZXNzaW5nJyksIDUwLCAnNS8xMCcpO1xuICAgICAgdGhpcy5yZXN0b3JlQ2hhcnRTdHlsZXMoY2hhcnRFbGVtZW50LCBvcmlnaW5hbFN0eWxlcyk7XG5cbiAgICAgIGF3YWl0IHRoaXMuSGFuZGxlU3RlcChkLCBhd2FpdCB0aGlzLnRyYW5zbGF0ZVN0YXRlbWVudHMoJ2Rvd25sb2FkaW5nLWltYWdlJyksIDc1LCAnNy41LzEwJyk7XG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZG93bmxvYWQoY2FudmFzQmxvYiwgJ29yZy1jaGFydC5wbmcnKTtcblxuICAgICAgYXdhaXQgdGhpcy5IYW5kbGVTdGVwKGQsIGF3YWl0IHRoaXMudHJhbnNsYXRlU3RhdGVtZW50cygncHJvY2Vzcy1jb21wbGV0ZScpLCAxMDAsICcxMC8xMCcpO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IGQuY2xvc2UoKSwgMTUwMCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjYXB0dXJpbmcgY2hhcnQ6JywgZXJyKTtcbiAgICAgIGF3YWl0IHRoaXMuSGFuZGxlU3RlcChcbiAgICAgICAgZCxcbiAgICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdGVTdGF0ZW1lbnRzKCdmYWlsZWQtdG8tZ2VuZXJhdGUtY2hhcnQtaW1hZ2UnKSxcbiAgICAgICAgMTAwLFxuICAgICAgICAnRXJyb3InLFxuICAgICAgICAnZGFuZ2VyJyxcbiAgICAgICk7XG4gICAgICBkLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZHMgdGhlIGNoYXJ0IHRlbXBvcmFyaWx5IHRvIGNhcHR1cmUgdGhlIGZ1bGwgdmlldy5cbiAgICogQHBhcmFtIGNoYXJ0RWxlbWVudCAtIFRoZSBIVE1MRWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGNoYXJ0LlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgYW5kIG1vZGlmaWVkIHN0eWxlcyBvZiB0aGUgY2hhcnQuXG4gICAqL1xuICBwcml2YXRlIGV4cGFuZENoYXJ0KGNoYXJ0RWxlbWVudDogSFRNTEVsZW1lbnQpOiB7XG4gICAgb3JpZ2luYWxTdHlsZXM6IHtcbiAgICAgIG9yaWdpbmFsT3ZlcmZsb3c6IHN0cmluZztcbiAgICAgIG9yaWdpbmFsV2lkdGg6IHN0cmluZztcbiAgICAgIG9yaWdpbmFsSGVpZ2h0OiBzdHJpbmc7XG4gICAgfTtcbiAgICBtb2RpZmllZFN0eWxlczoge1xuICAgICAgbW9kaWZpZWRPdmVyZmxvdzogc3RyaW5nO1xuICAgICAgbW9kaWZpZWRXaWR0aDogc3RyaW5nO1xuICAgICAgbW9kaWZpZWRIZWlnaHQ6IHN0cmluZztcbiAgICB9O1xuICB9IHtcbiAgICBjb25zdCBvcmlnaW5hbFN0eWxlcyA9IHtcbiAgICAgIG9yaWdpbmFsT3ZlcmZsb3c6IGNoYXJ0RWxlbWVudC5zdHlsZS5vdmVyZmxvdyxcbiAgICAgIG9yaWdpbmFsV2lkdGg6IGNoYXJ0RWxlbWVudC5zdHlsZS53aWR0aCxcbiAgICAgIG9yaWdpbmFsSGVpZ2h0OiBjaGFydEVsZW1lbnQuc3R5bGUuaGVpZ2h0LFxuICAgIH07XG5cbiAgICBjb25zdCBtb2RpZmllZFN0eWxlcyA9IHtcbiAgICAgIG1vZGlmaWVkT3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgIG1vZGlmaWVkV2lkdGg6IGAke2NoYXJ0RWxlbWVudC5zY3JvbGxXaWR0aH1weGAsXG4gICAgICBtb2RpZmllZEhlaWdodDogYCR7Y2hhcnRFbGVtZW50LnNjcm9sbEhlaWdodH1weGAsXG4gICAgfTtcblxuICAgIGNoYXJ0RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IG1vZGlmaWVkU3R5bGVzLm1vZGlmaWVkT3ZlcmZsb3c7XG4gICAgY2hhcnRFbGVtZW50LnN0eWxlLndpZHRoID0gbW9kaWZpZWRTdHlsZXMubW9kaWZpZWRXaWR0aDtcbiAgICBjaGFydEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gbW9kaWZpZWRTdHlsZXMubW9kaWZpZWRIZWlnaHQ7XG5cbiAgICByZXR1cm4geyBvcmlnaW5hbFN0eWxlcywgbW9kaWZpZWRTdHlsZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyBjaGFydCBzdHlsZXMgYWZ0ZXIgY2FwdHVyaW5nLlxuICAgKiBAcGFyYW0gY2hhcnRFbGVtZW50IC0gVGhlIEhUTUxFbGVtZW50IHJlcHJlc2VudGluZyB0aGUgY2hhcnQuXG4gICAqIEBwYXJhbSBvcmlnaW5hbFN0eWxlcyAtIFRoZSBvcmlnaW5hbCBzdHlsZXMgdG8gYmUgcmVzdG9yZWQuXG4gICAqL1xuICBwcml2YXRlIHJlc3RvcmVDaGFydFN0eWxlcyhcbiAgICBjaGFydEVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgIG9yaWdpbmFsU3R5bGVzOiB7IG9yaWdpbmFsT3ZlcmZsb3c6IHN0cmluZzsgb3JpZ2luYWxXaWR0aDogc3RyaW5nOyBvcmlnaW5hbEhlaWdodDogc3RyaW5nIH0sXG4gICk6IHZvaWQge1xuICAgIGNoYXJ0RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IG9yaWdpbmFsU3R5bGVzLm9yaWdpbmFsT3ZlcmZsb3c7XG4gICAgY2hhcnRFbGVtZW50LnN0eWxlLndpZHRoID0gb3JpZ2luYWxTdHlsZXMub3JpZ2luYWxXaWR0aDtcbiAgICBjaGFydEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gb3JpZ2luYWxTdHlsZXMub3JpZ2luYWxIZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB1cGRhdGluZyB0aGUgcHJvZ3Jlc3MgZGlhbG9nIHN0ZXAuXG4gICAqIEBwYXJhbSBkaWFsb2cgLSBUaGUgZGlhbG9nIHJlZmVyZW5jZS5cbiAgICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBkaWFsb2cuXG4gICAqIEBwYXJhbSBwcm9ncmVzcyAtIFRoZSBwcm9ncmVzcyB2YWx1ZSB0byBzZXQuXG4gICAqIEBwYXJhbSBzdGF0dXMgLSBUaGUgc3RhdHVzIHRvIGRpc3BsYXkuXG4gICAqIEBwYXJhbSBjb2xvciAtIFRoZSBjb2xvciBvZiB0aGUgcHJvZ3Jlc3MgYmFyLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBkaWFsb2cgaXMgdXBkYXRlZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgSGFuZGxlU3RlcChcbiAgICBkaWFsb2c6IEFYRGlhbG9nUmVmLFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBwcm9ncmVzczogbnVtYmVyLFxuICAgIHN0YXR1czogc3RyaW5nLFxuICAgIGNvbG9yOiBBWFN0eWxlQ29sb3JUeXBlID0gJ3ByaW1hcnknLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGRpYWxvZy5zZXRQcm9ncmVzc0NvbG9yKGNvbG9yKTtcbiAgICAgIGRpYWxvZy5zZXRQcm9ncmVzc1RleHQodGV4dCk7XG4gICAgICBkaWFsb2cuc2V0UHJvZ3Jlc3NWYWx1ZShwcm9ncmVzcyk7XG4gICAgICBkaWFsb2cuc2V0UHJvZ3Jlc3NTdGF0dXMoc3RhdHVzKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2xhdGVzIGEgc3RhdGVtZW50IHVzaW5nIHRoZSB0cmFuc2xhdGlvbiBzZXJ2aWNlLlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHRyYW5zbGF0aW9uIGtleS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHRyYW5zbGF0ZWQgc3RyaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB0cmFuc2xhdGVTdGF0ZW1lbnRzKGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKGtleSwgeyBzY29wZTogJ29yZ2FuaXphdGlvbi1tYW5hZ2VtZW50JyB9KSkgKyAnLi4uJztcbiAgfVxufVxuIl19","import { AXDialogService } from '@acorex/components/dialog';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPRegionalService } from '@acorex/platform/common';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport { applyFilterArray } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { inject, Injectable, signal } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport get from 'lodash-es/get';\nimport { AXMOrganizationManagementBranchEntityService, AXMOrganizationManagementChartEntityService, AXMOrganizationManagementDepartmentEntityService, AXMOrganizationManagementDivisionEntityService, AXMOrganizationManagementEmployeeEntityService, AXMOrganizationManagementPositionEntityService, } from '../../entities';\nimport { AXMOrgChartConfigService } from './org-chart-configuration.service';\nimport { AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS, AXMOrganizationNodeType, } from './org-chart.type';\nimport * as i0 from \"@angular/core\";\nexport class AXMOrgChartService {\n constructor() {\n this.departmentService = inject(AXMOrganizationManagementDepartmentEntityService);\n this.divisionService = inject(AXMOrganizationManagementDivisionEntityService);\n this.branchService = inject(AXMOrganizationManagementBranchEntityService);\n this.employmentService = inject(AXMOrganizationManagementEmployeeEntityService);\n this.positionService = inject(AXMOrganizationManagementPositionEntityService);\n this.chartService = inject(AXMOrganizationManagementChartEntityService);\n this.sessionService = inject(AXPSessionService);\n this.configService = inject(AXMOrgChartConfigService);\n this.popupService = inject(AXPopupService);\n this.layoutService = inject(AXPLayoutThemeService);\n this.regionalService = inject(AXPRegionalService);\n this.dialogService = inject(AXDialogService);\n this.translateService = inject(AXTranslationService);\n this._rootNode = signal({ id: AXPDataGenerator.uuid(), title: 'Company' }, ...(ngDevMode ? [{ debugName: \"_rootNode\" }] : []));\n this.rootNode = this._rootNode.asReadonly();\n // The clipboard holds the node being cut or copied.\n this.clipboard = signal(null, ...(ngDevMode ? [{ debugName: \"clipboard\" }] : []));\n }\n //#region Load/Save\n async load() {\n const first = (await this.chartService.query({\n skip: 0,\n take: 1,\n sort: [{ field: 'version', dir: 'desc' }],\n })).items[0];\n //\n if (first) {\n const data = first.data;\n this._rootNode.set(data);\n }\n else {\n await this.createNew();\n await this.load();\n }\n }\n async createNew() {\n const tenant = this.sessionService.tenant;\n const record = {\n id: AXPDataGenerator.uuid(),\n createAt: new Date(),\n updateAt: new Date(),\n version: '0.0.0',\n data: {\n id: AXPDataGenerator.uuid(),\n title: tenant.name,\n type: AXMOrganizationNodeType.Company,\n entity: {\n id: tenant.id,\n source: 'tenant',\n },\n children: [],\n },\n };\n await this.chartService.insertOne({ data: record.data, version: record.version });\n }\n async save() {\n const first = (await this.chartService.query()).items[0];\n await this.chartService.updateOne(first.id, {\n version: first.version,\n data: this._rootNode(),\n });\n }\n //#endregion\n //#region Context Menu\n async getAllowedAddMenuItems(node) {\n const allowedTypes = await this.getAllowedChildCategoriesForParent(node);\n const allowedMenuItems = [];\n // Group items by category for visual breaks.\n const groupedMenuItems = {\n Company: [],\n Location: [],\n BusinessUnit: [],\n Role: [],\n Employee: [],\n };\n Object.entries(AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS).forEach(([entitySource, config]) => {\n if (allowedTypes.includes(config.type)) {\n groupedMenuItems[config.category].push({\n name: 'add',\n text: `${config.title}`,\n icon: config.icon,\n data: {\n node,\n config,\n source: entitySource,\n },\n });\n }\n });\n Object.values(groupedMenuItems).forEach((group) => {\n if (group.length > 0) {\n allowedMenuItems.push(...group);\n group[group.length - 1].break = true;\n }\n });\n if (allowedMenuItems.length > 0) {\n allowedMenuItems[allowedMenuItems.length - 1].break = false;\n }\n return allowedMenuItems;\n }\n //#endregion\n //#region Check Permission\n async getAllowedChildCategoriesForParent(parent) {\n await this.configService.load();\n const types = this.configService.types;\n const currentType = parent.type;\n if (!parent || !currentType) {\n return [];\n }\n const allowedTypes = new Set();\n Object.entries(AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS).forEach(([entitySource, config]) => {\n if (this.configService.isAllowed(currentType, config.type) && types.includes(config.type)) {\n allowedTypes.add(config.type);\n }\n });\n return Array.from(allowedTypes);\n }\n //#endregion\n //#region Remove/Cut/Copy/Past\n async removeNode(id) {\n const title = await this.translateService.translateAsync('dialogs.delete.title');\n const message = await this.translateService.translateAsync('dialogs.delete.message');\n const dialogResult = await this.dialogService.confirm(title, message, 'danger', 'horizontal');\n if (dialogResult.result) {\n this._rootNode.update((node) => this.removeNodeRecursively(node, id));\n await this.save();\n }\n }\n removeNodeRecursively(node, id) {\n // If the node itself is the one to be deleted, return null\n if (node.id === id) {\n return null;\n }\n // Otherwise, recursively check children\n if (node.children) {\n node.children = node.children\n .filter((child) => child.id !== id)\n .map((child) => {\n return { ...child, children: this.removeNodeRecursively(child, id)?.children };\n });\n }\n return node;\n }\n isPasteAvailable() {\n return this.clipboard() != null && this.clipboard()?.node != null;\n }\n async allowPaste(target) {\n if (!this.isPasteAvailable()) {\n return false;\n }\n const allowedTypes = await this.getAllowedChildCategoriesForParent(target);\n // Compare using the clipboard node's category.\n return allowedTypes.includes(this.clipboard()?.node.type);\n }\n /**\n * Cuts the node with the given id.\n * The node is removed from the tree and stored in the clipboard.\n * Cutting the root node is not allowed.\n */\n async cutNode(id) {\n const tree = this._rootNode();\n if (tree.id === id) {\n throw new Error('Cannot cut the root node.');\n }\n const result = this.findNodeAndParent(tree, id);\n if (!result) {\n throw new Error('Node not found.');\n }\n // Set the clipboard signal with mode 'cut'\n this.clipboard.set({ mode: 'cut', node: result.node });\n // Remove the node from the tree.\n const newTree = this.removeNodeRecursively(tree, id);\n this._rootNode.set(newTree);\n await this.save();\n }\n /**\n * Copies the node with the given id.\n * A deep clone of the node is stored in the clipboard.\n */\n copyNode(id) {\n const tree = this._rootNode();\n const result = this.findNodeAndParent(tree, id);\n if (!result) {\n throw new Error('Node not found.');\n }\n // Use lodash's cloneDeep to create a deep clone.\n const copiedNode = cloneDeep(result.node);\n this.clipboard.set({ mode: 'copy', node: copiedNode });\n }\n /**\n * Pastes the node in the clipboard as a child of the node with the given parentId.\n * For a cut, the node is moved; for a copy, new IDs are generated so the pasted node is unique.\n */\n async pasteNode(parentId) {\n const clipboardValue = this.clipboard();\n if (!clipboardValue) {\n throw new Error('Clipboard is empty.');\n }\n const tree = this._rootNode();\n const parentResult = this.findNodeAndParent(tree, parentId);\n if (!parentResult) {\n throw new Error('Parent node not found.');\n }\n let nodeToPaste;\n if (clipboardValue.mode === 'cut') {\n nodeToPaste = clipboardValue.node;\n // Clear the clipboard after pasting.\n this.clipboard.set(null);\n }\n else {\n nodeToPaste = this.cloneNodeWithNewIds(clipboardValue.node);\n }\n const newTree = this.insertNodeRecursively(tree, parentId, nodeToPaste);\n this._rootNode.set(newTree);\n await this.save();\n }\n /**\n * Recursively searches the tree for the node with the given id,\n * returning both the node and its parent.\n */\n findNodeAndParent(node, id, parent = null) {\n if (node.id === id) {\n return { node, parent };\n }\n if (node.children) {\n for (const child of node.children) {\n const result = this.findNodeAndParent(child, id, node);\n if (result) {\n return result;\n }\n }\n }\n return null;\n }\n /**\n * Clones a node recursively and generates new IDs for the node and its children.\n */\n cloneNodeWithNewIds(node) {\n // First, clone the node using lodash.\n const newNode = cloneDeep(node);\n // Then, assign new IDs recursively.\n this.assignNewIds(newNode);\n return newNode;\n }\n /**\n * Recursively assigns new unique IDs to the given node and its children.\n */\n assignNewIds(node) {\n node.id = AXPDataGenerator.uuid();\n if (node.children) {\n node.children.forEach((child) => this.assignNewIds(child));\n }\n }\n /**\n * Recursively traverses the tree to insert newNode as a child of the node with parentId.\n */\n insertNodeRecursively(node, parentId, newNode) {\n if (node.id === parentId) {\n const newChildren = node.children ? [...node.children, newNode] : [newNode];\n return { ...node, children: newChildren };\n }\n if (node.children) {\n return {\n ...node,\n children: node.children.map((child) => this.insertNodeRecursively(child, parentId, newNode)),\n };\n }\n return node;\n }\n //#endregion\n //#region Add Node\n async addNode(data) {\n this.layoutService.setNavigationLoading(true);\n try {\n const component = (await import('./add-item/add-item.component')).AddItemComponent;\n const node = get(data, 'node');\n const type = get(data, 'config.type');\n const icon = get(data, 'config.icon');\n const source = get(data, 'source');\n let query;\n const countrySource = async (request) => {\n let list = await this.regionalService.getCountries();\n if (request.filter) {\n list = applyFilterArray(list, [request.filter]);\n }\n const items = list.map((c) => ({\n id: c.code,\n title: c.title,\n }));\n return { items, total: items.length };\n };\n const provinceSource = async (request) => {\n let list = await this.regionalService.getProvinces(node.type === AXMOrganizationNodeType.Country ? node.entity?.id : undefined);\n if (request.filter) {\n list = applyFilterArray(list, [request.filter]);\n }\n const items = list.map((c) => ({\n id: c.code,\n title: c.title,\n }));\n return { items, total: items.length };\n };\n const citySource = async (request) => {\n let filter = {};\n if (node.type === AXMOrganizationNodeType.Country) {\n filter.countryId = node.entity?.id;\n }\n else if (node.type === AXMOrganizationNodeType.State) {\n filter.provinceId = node.entity?.id;\n }\n let list = await this.regionalService.getCities(filter);\n if (request.filter) {\n list = applyFilterArray(list, [request.filter]);\n }\n const items = list.map((c) => ({\n id: c.code,\n title: c.title,\n }));\n return { items, total: items.length };\n };\n const valueField = 'id';\n const titleField = 'title';\n const subtitleField = null;\n const descriptionField = 'description';\n switch (type) {\n case AXMOrganizationNodeType.Country:\n query = countrySource;\n break;\n case AXMOrganizationNodeType.State:\n query = provinceSource;\n break;\n case AXMOrganizationNodeType.City:\n query = citySource;\n break;\n case AXMOrganizationNodeType.Department:\n query = this.departmentService.query.bind(this.departmentService);\n break;\n case AXMOrganizationNodeType.Division:\n query = this.divisionService.query.bind(this.divisionService);\n break;\n case AXMOrganizationNodeType.Branch:\n query = this.branchService.query.bind(this.branchService);\n break;\n case AXMOrganizationNodeType.Position:\n query = this.positionService.query.bind(this.positionService);\n break;\n case AXMOrganizationNodeType.Employee:\n query = this.employmentService.query.bind(this.employmentService);\n break;\n default:\n throw new Error(`Unsupported node type: ${type}`);\n }\n const result = await this.popupService.open(component, {\n title: `Add ${get(data, 'config.title')}`,\n size: 'md',\n data: {\n config: {\n valueField,\n titleField,\n subtitleField,\n descriptionField,\n query: query,\n },\n },\n });\n if (!result.data) {\n return false;\n }\n const newNode = {\n id: AXPDataGenerator.uuid(),\n title: result.data.title,\n description: result.data.description,\n subtitle: result.data.subtitle,\n type: type,\n parentId: node.id,\n icon,\n entity: {\n id: result.data.id,\n source: source,\n },\n };\n const tree = this._rootNode();\n const newTree = this.insertNodeRecursively(tree, node.id, newNode);\n this._rootNode.set(newTree);\n await this.save();\n return true;\n }\n finally {\n this.layoutService.setNavigationLoading(false);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXMOrgChartService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXMOrgChartService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXMOrgChartService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9vcmdhbml6YXRpb24tY2hhcnQvb3JnLWNoYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUcsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQXVDLE1BQU0sdUJBQXVCLENBQUM7QUFDOUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ2hDLE9BQU8sRUFDTCw0Q0FBNEMsRUFDNUMsMkNBQTJDLEVBQzNDLGdEQUFnRCxFQUNoRCw4Q0FBOEMsRUFDOUMsOENBQThDLEVBQzlDLDhDQUE4QyxHQUMvQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFDTCx1Q0FBdUMsRUFFdkMsdUJBQXVCLEdBRXhC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U0FBUyxFQUFFLENBQUM7WUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRWxCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQzs4R0E1YlUsa0JBQWtCO2tIQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGlhbG9nJztcbmltcG9ydCB7IEFYTWVudUl0ZW0gfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbWVudSc7XG5pbXBvcnQgeyBBWFBvcHVwU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3B1cCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBTZXNzaW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vYXV0aCc7XG5pbXBvcnQgeyAgQVhQUmVnaW9uYWxTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgQVhQRGF0YUdlbmVyYXRvciB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBhcHBseUZpbHRlckFycmF5LCBBWFBQYWdlZExpc3RSZXN1bHQsIEFYUFF1ZXJ5UmVxdWVzdCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBMYXlvdXRUaGVtZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3RoZW1lcy9zaGFyZWQnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC1lcy9nZXQnO1xuaW1wb3J0IHtcbiAgQVhNT3JnYW5pemF0aW9uTWFuYWdlbWVudEJyYW5jaEVudGl0eVNlcnZpY2UsXG4gIEFYTU9yZ2FuaXphdGlvbk1hbmFnZW1lbnRDaGFydEVudGl0eVNlcnZpY2UsXG4gIEFYTU9yZ2FuaXphdGlvbk1hbmFnZW1lbnREZXBhcnRtZW50RW50aXR5U2VydmljZSxcbiAgQVhNT3JnYW5pemF0aW9uTWFuYWdlbWVudERpdmlzaW9uRW50aXR5U2VydmljZSxcbiAgQVhNT3JnYW5pemF0aW9uTWFuYWdlbWVudEVtcGxveWVlRW50aXR5U2VydmljZSxcbiAgQVhNT3JnYW5pemF0aW9uTWFuYWdlbWVudFBvc2l0aW9uRW50aXR5U2VydmljZSxcbn0gZnJvbSAnLi4vLi4vZW50aXRpZXMnO1xuaW1wb3J0IHsgQVhNT3JnQ2hhcnRDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9vcmctY2hhcnQtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFYTV9PUkdfQ0hBUlRfTk9ERV9UWVBFX0VOVElUWV9NQVBQSU5HUyxcbiAgQVhNT3JnYW5pemF0aW9uTm9kZSxcbiAgQVhNT3JnYW5pemF0aW9uTm9kZVR5cGUsXG4gIEFYTU9yZ2FuaXphdGlvbk5vZGVUeXBlQ2F0ZWdvcnksXG59IGZyb20gJy4vb3JnLWNoYXJ0LnR5cGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNT3JnQ2hhcnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBkZXBhcnRtZW50U2VydmljZSA9IGluamVjdChBWE1Pcmdhbml6YXRpb25NYW5hZ2VtZW50RGVwYXJ0bWVudEVudGl0eVNlcnZpY2UpO1xuICBwcml2YXRlIGRpdmlzaW9uU2VydmljZSA9IGluamVjdChBWE1Pcmdhbml6YXRpb25NYW5hZ2VtZW50RGl2aXNpb25FbnRpdHlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBicmFuY2hTZXJ2aWNlID0gaW5qZWN0KEFYTU9yZ2FuaXphdGlvbk1hbmFnZW1lbnRCcmFuY2hFbnRpdHlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlbXBsb3ltZW50U2VydmljZSA9IGluamVjdChBWE1Pcmdhbml6YXRpb25NYW5hZ2VtZW50RW1wbG95ZWVFbnRpdHlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBwb3NpdGlvblNlcnZpY2UgPSBpbmplY3QoQVhNT3JnYW5pemF0aW9uTWFuYWdlbWVudFBvc2l0aW9uRW50aXR5U2VydmljZSk7XG4gIHByaXZhdGUgY2hhcnRTZXJ2aWNlID0gaW5qZWN0KEFYTU9yZ2FuaXphdGlvbk1hbmFnZW1lbnRDaGFydEVudGl0eVNlcnZpY2UpO1xuXG4gIHByaXZhdGUgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuICBwcml2YXRlIGNvbmZpZ1NlcnZpY2UgPSBpbmplY3QoQVhNT3JnQ2hhcnRDb25maWdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBwb3B1cFNlcnZpY2UgPSBpbmplY3QoQVhQb3B1cFNlcnZpY2UpO1xuICBwcml2YXRlIGxheW91dFNlcnZpY2UgPSBpbmplY3QoQVhQTGF5b3V0VGhlbWVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWdpb25hbFNlcnZpY2UgPSBpbmplY3QoQVhQUmVnaW9uYWxTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEFYRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChBWFRyYW5zbGF0aW9uU2VydmljZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcm9vdE5vZGUgPSBzaWduYWw8QVhNT3JnYW5pemF0aW9uTm9kZT4oeyBpZDogQVhQRGF0YUdlbmVyYXRvci51dWlkKCksIHRpdGxlOiAnQ29tcGFueScgfSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJvb3ROb2RlID0gdGhpcy5fcm9vdE5vZGUuYXNSZWFkb25seSgpO1xuXG4gIC8vIFRoZSBjbGlwYm9hcmQgaG9sZHMgdGhlIG5vZGUgYmVpbmcgY3V0IG9yIGNvcGllZC5cbiAgcHJpdmF0ZSBjbGlwYm9hcmQgPSBzaWduYWw8eyBtb2RlOiAnY3V0JyB8ICdjb3B5Jzsgbm9kZTogQVhNT3JnYW5pemF0aW9uTm9kZSB9IHwgbnVsbD4obnVsbCk7XG5cbiAgLy8jcmVnaW9uIExvYWQvU2F2ZVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpcnN0ID0gKFxuICAgICAgYXdhaXQgdGhpcy5jaGFydFNlcnZpY2UucXVlcnkoe1xuICAgICAgICBza2lwOiAwLFxuICAgICAgICB0YWtlOiAxLFxuICAgICAgICBzb3J0OiBbeyBmaWVsZDogJ3ZlcnNpb24nLCBkaXI6ICdkZXNjJyB9XSxcbiAgICAgIH0pXG4gICAgKS5pdGVtc1swXTtcbiAgICAvL1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgY29uc3QgZGF0YSA9IGZpcnN0LmRhdGEgYXMgQVhNT3JnYW5pemF0aW9uTm9kZTtcbiAgICAgIHRoaXMuX3Jvb3ROb2RlLnNldChkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVOZXcoKTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlTmV3KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRlbmFudCA9IHRoaXMuc2Vzc2lvblNlcnZpY2UudGVuYW50ITtcbiAgICBjb25zdCByZWNvcmQgPSB7XG4gICAgICBpZDogQVhQRGF0YUdlbmVyYXRvci51dWlkKCksXG4gICAgICBjcmVhdGVBdDogbmV3IERhdGUoKSxcbiAgICAgIHVwZGF0ZUF0OiBuZXcgRGF0ZSgpLFxuICAgICAgdmVyc2lvbjogJzAuMC4wJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgaWQ6IEFYUERhdGFHZW5lcmF0b3IudXVpZCgpLFxuICAgICAgICB0aXRsZTogdGVuYW50Lm5hbWUsXG4gICAgICAgIHR5cGU6IEFYTU9yZ2FuaXphdGlvbk5vZGVUeXBlLkNvbXBhbnksXG4gICAgICAgIGVudGl0eToge1xuICAgICAgICAgIGlkOiB0ZW5hbnQuaWQsXG4gICAgICAgICAgc291cmNlOiAndGVuYW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLmluc2VydE9uZSh7IGRhdGE6IHJlY29yZC5kYXRhLCB2ZXJzaW9uOiByZWNvcmQudmVyc2lvbiB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpcnN0ID0gKGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLnF1ZXJ5KCkpLml0ZW1zWzBdO1xuICAgIGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLnVwZGF0ZU9uZShmaXJzdC5pZCEsIHtcbiAgICAgIHZlcnNpb246IGZpcnN0LnZlcnNpb24sXG4gICAgICBkYXRhOiB0aGlzLl9yb290Tm9kZSgpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIENvbnRleHQgTWVudVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBbGxvd2VkQWRkTWVudUl0ZW1zKG5vZGU6IEFYTU9yZ2FuaXphdGlvbk5vZGUpOiBQcm9taXNlPEFYTWVudUl0ZW1bXT4ge1xuICAgIGNvbnN0IGFsbG93ZWRUeXBlcyA9IGF3YWl0IHRoaXMuZ2V0QWxsb3dlZENoaWxkQ2F0ZWdvcmllc0ZvclBhcmVudChub2RlKTtcbiAgICBjb25zdCBhbGxvd2VkTWVudUl0ZW1zOiBBWE1lbnVJdGVtW10gPSBbXTtcbiAgICAvLyBHcm91cCBpdGVtcyBieSBjYXRlZ29yeSBmb3IgdmlzdWFsIGJyZWFrcy5cbiAgICBjb25zdCBncm91cGVkTWVudUl0ZW1zOiBSZWNvcmQ8QVhNT3JnYW5pemF0aW9uTm9kZVR5cGVDYXRlZ29yeSwgQVhNZW51SXRlbVtdPiA9IHtcbiAgICAgIENvbXBhbnk6IFtdLFxuICAgICAgTG9jYXRpb246IFtdLFxuICAgICAgQnVzaW5lc3NVbml0OiBbXSxcbiAgICAgIFJvbGU6IFtdLFxuICAgICAgRW1wbG95ZWU6IFtdLFxuICAgIH07XG5cbiAgICBPYmplY3QuZW50cmllcyhBWE1fT1JHX0NIQVJUX05PREVfVFlQRV9FTlRJVFlfTUFQUElOR1MpLmZvckVhY2goKFtlbnRpdHlTb3VyY2UsIGNvbmZpZ10pID0+IHtcbiAgICAgIGlmIChhbGxvd2VkVHlwZXMuaW5jbHVkZXMoY29uZmlnLnR5cGUpKSB7XG4gICAgICAgIGdyb3VwZWRNZW51SXRlbXNbY29uZmlnLmNhdGVnb3J5XS5wdXNoKHtcbiAgICAgICAgICBuYW1lOiAnYWRkJyxcbiAgICAgICAgICB0ZXh0OiBgJHtjb25maWcudGl0bGV9YCxcbiAgICAgICAgICBpY29uOiBjb25maWcuaWNvbixcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgc291cmNlOiBlbnRpdHlTb3VyY2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QudmFsdWVzKGdyb3VwZWRNZW51SXRlbXMpLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICBpZiAoZ3JvdXAubGVuZ3RoID4gMCkge1xuICAgICAgICBhbGxvd2VkTWVudUl0ZW1zLnB1c2goLi4uZ3JvdXApO1xuICAgICAgICBncm91cFtncm91cC5sZW5ndGggLSAxXS5icmVhayA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYWxsb3dlZE1lbnVJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBhbGxvd2VkTWVudUl0ZW1zW2FsbG93ZWRNZW51SXRlbXMubGVuZ3RoIC0gMV0uYnJlYWsgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGFsbG93ZWRNZW51SXRlbXM7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gQ2hlY2sgUGVybWlzc2lvblxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWxsb3dlZENoaWxkQ2F0ZWdvcmllc0ZvclBhcmVudChwYXJlbnQ6IEFYTU9yZ2FuaXphdGlvbk5vZGUpOiBQcm9taXNlPEFYTU9yZ2FuaXphdGlvbk5vZGVUeXBlW10+IHtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ1NlcnZpY2UubG9hZCgpO1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5jb25maWdTZXJ2aWNlLnR5cGVzO1xuICAgIGNvbnN0IGN1cnJlbnRUeXBlID0gcGFyZW50LnR5cGU7XG4gICAgaWYgKCFwYXJlbnQgfHwgIWN1cnJlbnRUeXBlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGFsbG93ZWRUeXBlczogU2V0PEFYTU9yZ2FuaXphdGlvbk5vZGVUeXBlPiA9IG5ldyBTZXQoKTtcbiAgICBPYmplY3QuZW50cmllcyhBWE1fT1JHX0NIQVJUX05PREVfVFlQRV9FTlRJVFlfTUFQUElOR1MpLmZvckVhY2goKFtlbnRpdHlTb3VyY2UsIGNvbmZpZ10pID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaXNBbGxvd2VkKGN1cnJlbnRUeXBlLCBjb25maWcudHlwZSkgJiYgdHlwZXMuaW5jbHVkZXMoY29uZmlnLnR5cGUpKSB7XG4gICAgICAgIGFsbG93ZWRUeXBlcy5hZGQoY29uZmlnLnR5cGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBBcnJheS5mcm9tKGFsbG93ZWRUeXBlcyk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUmVtb3ZlL0N1dC9Db3B5L1Bhc3RcblxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlTm9kZShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ2RpYWxvZ3MuZGVsZXRlLnRpdGxlJyk7XG4gICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnZGlhbG9ncy5kZWxldGUubWVzc2FnZScpO1xuICAgIGNvbnN0IGRpYWxvZ1Jlc3VsdCA9IGF3YWl0IHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKHRpdGxlLCBtZXNzYWdlLCAnZGFuZ2VyJywgJ2hvcml6b250YWwnKTtcbiAgICBpZiAoZGlhbG9nUmVzdWx0LnJlc3VsdCkge1xuICAgICAgdGhpcy5fcm9vdE5vZGUudXBkYXRlKChub2RlKSA9PiB0aGlzLnJlbW92ZU5vZGVSZWN1cnNpdmVseShub2RlLCBpZCkhKTtcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTm9kZVJlY3Vyc2l2ZWx5KG5vZGU6IEFYTU9yZ2FuaXphdGlvbk5vZGUsIGlkOiBzdHJpbmcpOiBBWE1Pcmdhbml6YXRpb25Ob2RlIHwgbnVsbCB7XG4gICAgLy8gSWYgdGhlIG5vZGUgaXRzZWxmIGlzIHRoZSBvbmUgdG8gYmUgZGVsZXRlZCwgcmV0dXJuIG51bGxcbiAgICBpZiAobm9kZS5pZCA9PT0gaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIHJlY3Vyc2l2ZWx5IGNoZWNrIGNoaWxkcmVuXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuXG4gICAgICAgIC5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC5pZCAhPT0gaWQpXG4gICAgICAgIC5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uY2hpbGQsIGNoaWxkcmVuOiB0aGlzLnJlbW92ZU5vZGVSZWN1cnNpdmVseShjaGlsZCwgaWQpPy5jaGlsZHJlbiB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHB1YmxpYyBpc1Bhc3RlQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsaXBib2FyZCgpICE9IG51bGwgJiYgdGhpcy5jbGlwYm9hcmQoKT8ubm9kZSAhPSBudWxsO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFsbG93UGFzdGUodGFyZ2V0OiBBWE1Pcmdhbml6YXRpb25Ob2RlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmlzUGFzdGVBdmFpbGFibGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBhbGxvd2VkVHlwZXMgPSBhd2FpdCB0aGlzLmdldEFsbG93ZWRDaGlsZENhdGVnb3JpZXNGb3JQYXJlbnQodGFyZ2V0KTtcbiAgICAvLyBDb21wYXJlIHVzaW5nIHRoZSBjbGlwYm9hcmQgbm9kZSdzIGNhdGVnb3J5LlxuICAgIHJldHVybiBhbGxvd2VkVHlwZXMuaW5jbHVkZXModGhpcy5jbGlwYm9hcmQoKT8ubm9kZS50eXBlISk7XG4gIH1cblxuICAvKipcbiAgICogQ3V0cyB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBpZC5cbiAgICogVGhlIG5vZGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlIGFuZCBzdG9yZWQgaW4gdGhlIGNsaXBib2FyZC5cbiAgICogQ3V0dGluZyB0aGUgcm9vdCBub2RlIGlzIG5vdCBhbGxvd2VkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGN1dE5vZGUoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRyZWUgPSB0aGlzLl9yb290Tm9kZSgpO1xuICAgIGlmICh0cmVlLmlkID09PSBpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3V0IHRoZSByb290IG5vZGUuJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZE5vZGVBbmRQYXJlbnQodHJlZSwgaWQpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgbm90IGZvdW5kLicpO1xuICAgIH1cbiAgICAvLyBTZXQgdGhlIGNsaXBib2FyZCBzaWduYWwgd2l0aCBtb2RlICdjdXQnXG4gICAgdGhpcy5jbGlwYm9hcmQuc2V0KHsgbW9kZTogJ2N1dCcsIG5vZGU6IHJlc3VsdC5ub2RlIH0pO1xuICAgIC8vIFJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSB0cmVlLlxuICAgIGNvbnN0IG5ld1RyZWUgPSB0aGlzLnJlbW92ZU5vZGVSZWN1cnNpdmVseSh0cmVlLCBpZCk7XG4gICAgdGhpcy5fcm9vdE5vZGUuc2V0KG5ld1RyZWUhKTtcbiAgICBhd2FpdCB0aGlzLnNhdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3BpZXMgdGhlIG5vZGUgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqIEEgZGVlcCBjbG9uZSBvZiB0aGUgbm9kZSBpcyBzdG9yZWQgaW4gdGhlIGNsaXBib2FyZC5cbiAgICovXG4gIHB1YmxpYyBjb3B5Tm9kZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZSA9IHRoaXMuX3Jvb3ROb2RlKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kTm9kZUFuZFBhcmVudCh0cmVlLCBpZCk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBub3QgZm91bmQuJyk7XG4gICAgfVxuICAgIC8vIFVzZSBsb2Rhc2gncyBjbG9uZURlZXAgdG8gY3JlYXRlIGEgZGVlcCBjbG9uZS5cbiAgICBjb25zdCBjb3BpZWROb2RlID0gY2xvbmVEZWVwKHJlc3VsdC5ub2RlKTtcbiAgICB0aGlzLmNsaXBib2FyZC5zZXQoeyBtb2RlOiAnY29weScsIG5vZGU6IGNvcGllZE5vZGUgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGFzdGVzIHRoZSBub2RlIGluIHRoZSBjbGlwYm9hcmQgYXMgYSBjaGlsZCBvZiB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBwYXJlbnRJZC5cbiAgICogRm9yIGEgY3V0LCB0aGUgbm9kZSBpcyBtb3ZlZDsgZm9yIGEgY29weSwgbmV3IElEcyBhcmUgZ2VuZXJhdGVkIHNvIHRoZSBwYXN0ZWQgbm9kZSBpcyB1bmlxdWUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcGFzdGVOb2RlKHBhcmVudElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjbGlwYm9hcmRWYWx1ZSA9IHRoaXMuY2xpcGJvYXJkKCk7XG4gICAgaWYgKCFjbGlwYm9hcmRWYWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDbGlwYm9hcmQgaXMgZW1wdHkuJyk7XG4gICAgfVxuICAgIGNvbnN0IHRyZWUgPSB0aGlzLl9yb290Tm9kZSgpO1xuICAgIGNvbnN0IHBhcmVudFJlc3VsdCA9IHRoaXMuZmluZE5vZGVBbmRQYXJlbnQodHJlZSwgcGFyZW50SWQpO1xuICAgIGlmICghcGFyZW50UmVzdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBub2RlIG5vdCBmb3VuZC4nKTtcbiAgICB9XG4gICAgbGV0IG5vZGVUb1Bhc3RlOiBBWE1Pcmdhbml6YXRpb25Ob2RlO1xuICAgIGlmIChjbGlwYm9hcmRWYWx1ZS5tb2RlID09PSAnY3V0Jykge1xuICAgICAgbm9kZVRvUGFzdGUgPSBjbGlwYm9hcmRWYWx1ZS5ub2RlO1xuICAgICAgLy8gQ2xlYXIgdGhlIGNsaXBib2FyZCBhZnRlciBwYXN0aW5nLlxuICAgICAgdGhpcy5jbGlwYm9hcmQuc2V0KG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlVG9QYXN0ZSA9IHRoaXMuY2xvbmVOb2RlV2l0aE5ld0lkcyhjbGlwYm9hcmRWYWx1ZS5ub2RlKTtcbiAgICB9XG4gICAgY29uc3QgbmV3VHJlZSA9IHRoaXMuaW5zZXJ0Tm9kZVJlY3Vyc2l2ZWx5KHRyZWUsIHBhcmVudElkLCBub2RlVG9QYXN0ZSk7XG4gICAgdGhpcy5fcm9vdE5vZGUuc2V0KG5ld1RyZWUpO1xuICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIHRoZSB0cmVlIGZvciB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBpZCxcbiAgICogcmV0dXJuaW5nIGJvdGggdGhlIG5vZGUgYW5kIGl0cyBwYXJlbnQuXG4gICAqL1xuICBwcml2YXRlIGZpbmROb2RlQW5kUGFyZW50KFxuICAgIG5vZGU6IEFYTU9yZ2FuaXphdGlvbk5vZGUsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwYXJlbnQ6IEFYTU9yZ2FuaXphdGlvbk5vZGUgfCBudWxsID0gbnVsbFxuICApOiB7IG5vZGU6IEFYTU9yZ2FuaXphdGlvbk5vZGU7IHBhcmVudDogQVhNT3JnYW5pemF0aW9uTm9kZSB8IG51bGwgfSB8IG51bGwge1xuICAgIGlmIChub2RlLmlkID09PSBpZCkge1xuICAgICAgcmV0dXJuIHsgbm9kZSwgcGFyZW50IH07XG4gICAgfVxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kTm9kZUFuZFBhcmVudChjaGlsZCwgaWQsIG5vZGUpO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9uZXMgYSBub2RlIHJlY3Vyc2l2ZWx5IGFuZCBnZW5lcmF0ZXMgbmV3IElEcyBmb3IgdGhlIG5vZGUgYW5kIGl0cyBjaGlsZHJlbi5cbiAgICovXG4gIHByaXZhdGUgY2xvbmVOb2RlV2l0aE5ld0lkcyhub2RlOiBBWE1Pcmdhbml6YXRpb25Ob2RlKTogQVhNT3JnYW5pemF0aW9uTm9kZSB7XG4gICAgLy8gRmlyc3QsIGNsb25lIHRoZSBub2RlIHVzaW5nIGxvZGFzaC5cbiAgICBjb25zdCBuZXdOb2RlID0gY2xvbmVEZWVwKG5vZGUpO1xuICAgIC8vIFRoZW4sIGFzc2lnbiBuZXcgSURzIHJlY3Vyc2l2ZWx5LlxuICAgIHRoaXMuYXNzaWduTmV3SWRzKG5ld05vZGUpO1xuICAgIHJldHVybiBuZXdOb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGFzc2lnbnMgbmV3IHVuaXF1ZSBJRHMgdG8gdGhlIGdpdmVuIG5vZGUgYW5kIGl0cyBjaGlsZHJlbi5cbiAgICovXG4gIHByaXZhdGUgYXNzaWduTmV3SWRzKG5vZGU6IEFYTU9yZ2FuaXphdGlvbk5vZGUpOiB2b2lkIHtcbiAgICBub2RlLmlkID0gQVhQRGF0YUdlbmVyYXRvci51dWlkKCk7XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHRoaXMuYXNzaWduTmV3SWRzKGNoaWxkKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlcyB0aGUgdHJlZSB0byBpbnNlcnQgbmV3Tm9kZSBhcyBhIGNoaWxkIG9mIHRoZSBub2RlIHdpdGggcGFyZW50SWQuXG4gICAqL1xuICBwcml2YXRlIGluc2VydE5vZGVSZWN1cnNpdmVseShcbiAgICBub2RlOiBBWE1Pcmdhbml6YXRpb25Ob2RlLFxuICAgIHBhcmVudElkOiBzdHJpbmcsXG4gICAgbmV3Tm9kZTogQVhNT3JnYW5pemF0aW9uTm9kZVxuICApOiBBWE1Pcmdhbml6YXRpb25Ob2RlIHtcbiAgICBpZiAobm9kZS5pZCA9PT0gcGFyZW50SWQpIHtcbiAgICAgIGNvbnN0IG5ld0NoaWxkcmVuID0gbm9kZS5jaGlsZHJlbiA/IFsuLi5ub2RlLmNoaWxkcmVuLCBuZXdOb2RlXSA6IFtuZXdOb2RlXTtcbiAgICAgIHJldHVybiB7IC4uLm5vZGUsIGNoaWxkcmVuOiBuZXdDaGlsZHJlbiB9O1xuICAgIH1cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgY2hpbGRyZW46IG5vZGUuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gdGhpcy5pbnNlcnROb2RlUmVjdXJzaXZlbHkoY2hpbGQsIHBhcmVudElkLCBuZXdOb2RlKSksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBBZGQgTm9kZVxuXG4gIHB1YmxpYyBhc3luYyBhZGROb2RlKGRhdGE6IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMubGF5b3V0U2VydmljZS5zZXROYXZpZ2F0aW9uTG9hZGluZyh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gKGF3YWl0IGltcG9ydCgnLi9hZGQtaXRlbS9hZGQtaXRlbS5jb21wb25lbnQnKSkuQWRkSXRlbUNvbXBvbmVudDtcbiAgICAgIGNvbnN0IG5vZGUgPSBnZXQoZGF0YSwgJ25vZGUnKSBhcyBBWE1Pcmdhbml6YXRpb25Ob2RlO1xuICAgICAgY29uc3QgdHlwZSA9IGdldChkYXRhLCAnY29uZmlnLnR5cGUnKTtcbiAgICAgIGNvbnN0IGljb24gPSBnZXQoZGF0YSwgJ2NvbmZpZy5pY29uJyk7XG4gICAgICBjb25zdCBzb3VyY2UgPSBnZXQoZGF0YSwgJ3NvdXJjZScpO1xuICAgICAgbGV0IHF1ZXJ5OiAocmVxdWVzdDogQVhQUXVlcnlSZXF1ZXN0KSA9PiBQcm9taXNlPEFYUFBhZ2VkTGlzdFJlc3VsdDx1bmtub3duPj47XG5cbiAgICAgIGNvbnN0IGNvdW50cnlTb3VyY2UgPSBhc3luYyAocmVxdWVzdDogQVhQUXVlcnlSZXF1ZXN0KSA9PiB7XG4gICAgICAgIGxldCBsaXN0ID0gYXdhaXQgdGhpcy5yZWdpb25hbFNlcnZpY2UuZ2V0Q291bnRyaWVzKCk7XG4gICAgICAgIGlmIChyZXF1ZXN0LmZpbHRlcikge1xuICAgICAgICAgIGxpc3QgPSBhcHBseUZpbHRlckFycmF5KGxpc3QsIFtyZXF1ZXN0LmZpbHRlcl0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbGlzdC5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgaWQ6IGMuY29kZSxcbiAgICAgICAgICB0aXRsZTogYy50aXRsZSxcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4geyBpdGVtcywgdG90YWw6IGl0ZW1zLmxlbmd0aCB9IGFzIEFYUFBhZ2VkTGlzdFJlc3VsdDtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHByb3ZpbmNlU291cmNlID0gYXN5bmMgKHJlcXVlc3Q6IEFYUFF1ZXJ5UmVxdWVzdCkgPT4ge1xuICAgICAgICBsZXQgbGlzdCA9IGF3YWl0IHRoaXMucmVnaW9uYWxTZXJ2aWNlLmdldFByb3ZpbmNlcyhcbiAgICAgICAgICBub2RlLnR5cGUgPT09IEFYTU9yZ2FuaXphdGlvbk5vZGVUeXBlLkNvdW50cnkgPyBub2RlLmVudGl0eT8uaWQgOiB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHJlcXVlc3QuZmlsdGVyKSB7XG4gICAgICAgICAgbGlzdCA9IGFwcGx5RmlsdGVyQXJyYXkobGlzdCwgW3JlcXVlc3QuZmlsdGVyXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBsaXN0Lm1hcCgoYykgPT4gKHtcbiAgICAgICAgICBpZDogYy5jb2RlLFxuICAgICAgICAgIHRpdGxlOiBjLnRpdGxlLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB7IGl0ZW1zLCB0b3RhbDogaXRlbXMubGVuZ3RoIH0gYXMgQVhQUGFnZWRMaXN0UmVzdWx0O1xuICAgICAgfTtcblxuICAgICAgY29uc3QgY2l0eVNvdXJjZSA9IGFzeW5jIChyZXF1ZXN0OiBBWFBRdWVyeVJlcXVlc3QpID0+IHtcbiAgICAgICAgbGV0IGZpbHRlcjogeyBjb3VudHJ5SWQ/OiBzdHJpbmc7IHByb3ZpbmNlSWQ/OiBzdHJpbmcgfSA9IHt9O1xuXG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IEFYTU9yZ2FuaXphdGlvbk5vZGVUeXBlLkNvdW50cnkpIHtcbiAgICAgICAgICBmaWx0ZXIuY291bnRyeUlkID0gbm9kZS5lbnRpdHk/LmlkO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gQVhNT3JnYW5pemF0aW9uTm9kZVR5cGUuU3RhdGUpIHtcbiAgICAgICAgICBmaWx0ZXIucHJvdmluY2VJZCA9IG5vZGUuZW50aXR5Py5pZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsaXN0ID0gYXdhaXQgdGhpcy5yZWdpb25hbFNlcnZpY2UuZ2V0Q2l0aWVzKGZpbHRlcik7XG4gICAgICAgIGlmIChyZXF1ZXN0LmZpbHRlcikge1xuICAgICAgICAgIGxpc3QgPSBhcHBseUZpbHRlckFycmF5KGxpc3QsIFtyZXF1ZXN0LmZpbHRlcl0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbGlzdC5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgaWQ6IGMuY29kZSxcbiAgICAgICAgICB0aXRsZTogYy50aXRsZSxcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4geyBpdGVtcywgdG90YWw6IGl0ZW1zLmxlbmd0aCB9IGFzIEFYUFBhZ2VkTGlzdFJlc3VsdDtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHZhbHVlRmllbGQgPSAnaWQnO1xuICAgICAgY29uc3QgdGl0bGVGaWVsZCA9ICd0aXRsZSc7XG4gICAgICBjb25zdCBzdWJ0aXRsZUZpZWxkID0gbnVsbDtcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uRmllbGQgPSAnZGVzY3JpcHRpb24nO1xuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBBWE1Pcmdhbml6YXRpb25Ob2RlVHlwZS5Db3VudHJ5OlxuICAgICAgICAgIHF1ZXJ5ID0gY291bnRyeVNvdXJjZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBBWE1Pcmdhbml6YXRpb25Ob2RlVHlwZS5TdGF0ZTpcbiAgICAgICAgICBxdWVyeSA9IHByb3ZpbmNlU291cmNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEFYTU9yZ2FuaXphdGlvbk5vZGVUeXBlLkNpdHk6XG4gICAgICAgICAgcXVlcnkgPSBjaXR5U291cmNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEFYTU9yZ2FuaXphdGlvbk5vZGVUeXBlLkRlcGFydG1lbnQ6XG4gICAgICAgICAgcXVlcnkgPSB0aGlzLmRlcGFydG1lbnRTZXJ2aWNlLnF1ZXJ5LmJpbmQodGhpcy5kZXBhcnRtZW50U2VydmljZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQVhNT3JnYW5pemF0aW9uTm9kZVR5cGUuRGl2aXNpb246XG4gICAgICAgICAgcXVlcnkgPSB0aGlzLmRpdmlzaW9uU2VydmljZS5xdWVyeS5iaW5kKHRoaXMuZGl2aXNpb25TZXJ2aWNlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBBWE1Pcmdhbml6YXRpb25Ob2RlVHlwZS5CcmFuY2g6XG4gICAgICAgICAgcXVlcnkgPSB0aGlzLmJyYW5jaFNlcnZpY2UucXVlcnkuYmluZCh0aGlzLmJyYW5jaFNlcnZpY2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEFYTU9yZ2FuaXphdGlvbk5vZGVUeXBlLlBvc2l0aW9uOlxuICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5wb3NpdGlvblNlcnZpY2UucXVlcnkuYmluZCh0aGlzLnBvc2l0aW9uU2VydmljZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQVhNT3JnYW5pemF0aW9uTm9kZVR5cGUuRW1wbG95ZWU6XG4gICAgICAgICAgcXVlcnkgPSB0aGlzLmVtcGxveW1lbnRTZXJ2aWNlLnF1ZXJ5LmJpbmQodGhpcy5lbXBsb3ltZW50U2VydmljZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBub2RlIHR5cGU6ICR7dHlwZX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wb3B1cFNlcnZpY2Uub3Blbihjb21wb25lbnQsIHtcbiAgICAgICAgdGl0bGU6IGBBZGQgJHtnZXQoZGF0YSwgJ2NvbmZpZy50aXRsZScpfWAsXG4gICAgICAgIHNpemU6ICdtZCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgIHZhbHVlRmllbGQsXG4gICAgICAgICAgICB0aXRsZUZpZWxkLFxuICAgICAgICAgICAgc3VidGl0bGVGaWVsZCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uRmllbGQsXG4gICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3VsdC5kYXRhKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3Tm9kZTogQVhNT3JnYW5pemF0aW9uTm9kZSA9IHtcbiAgICAgICAgaWQ6IEFYUERhdGFHZW5lcmF0b3IudXVpZCgpLFxuICAgICAgICB0aXRsZTogcmVzdWx0LmRhdGEudGl0bGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiByZXN1bHQuZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgc3VidGl0bGU6IHJlc3VsdC5kYXRhLnN1YnRpdGxlLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBwYXJlbnRJZDogbm9kZS5pZCxcbiAgICAgICAgaWNvbixcbiAgICAgICAgZW50aXR5OiB7XG4gICAgICAgICAgaWQ6IHJlc3VsdC5kYXRhLmlkLFxuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHJlZSA9IHRoaXMuX3Jvb3ROb2RlKCk7XG4gICAgICBjb25zdCBuZXdUcmVlID0gdGhpcy5pbnNlcnROb2RlUmVjdXJzaXZlbHkodHJlZSwgbm9kZS5pZCwgbmV3Tm9kZSk7XG4gICAgICB0aGlzLl9yb290Tm9kZS5zZXQobmV3VHJlZSk7XG4gICAgICBhd2FpdCB0aGlzLnNhdmUoKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubGF5b3V0U2VydmljZS5zZXROYXZpZ2F0aW9uTG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=","import { AXPanViewDirective } from '@acorex/cdk/pan-view';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXContextMenuComponent, AXMenuModule, } from '@acorex/components/menu';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, inject, NgZone, signal, viewChild, ViewContainerRef, ViewEncapsulation, } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport get from 'lodash-es/get';\nimport set from 'lodash-es/set';\nimport { RootConfig } from '../../const';\nimport { AXMOrgChartConfigService } from './org-chart-configuration.service';\nimport { AXMOrgChartPrintService } from './org-chart-print.service';\nimport { AXMOrgChartService } from './org-chart.service';\nimport { AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS, AXMOrganizationNodeType, AXMOrganizationNodeTypeCategory, } from './org-chart.type';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@acorex/components/menu\";\nimport * as i3 from \"@acorex/components/button\";\nimport * as i4 from \"@acorex/core/translation\";\nimport * as i5 from \"@acorex/components/decorators\";\n/**\n * Component for displaying and interacting with an organizational chart.\n */\nexport class AXMOrgChartPage extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n this.rootConfig = RootConfig;\n this.nodeTemplate = viewChild.required('nodeTemplate');\n this.treeContainer = viewChild.required('chart');\n this.parent = viewChild.required('parent');\n this.contextMenu = viewChild(AXContextMenuComponent, ...(ngDevMode ? [{ debugName: \"contextMenu\" }] : []));\n this.panView = viewChild(AXPanViewDirective, ...(ngDevMode ? [{ debugName: \"panView\" }] : []));\n this.ngzone = inject(NgZone);\n this.viewContainerRef = inject(ViewContainerRef);\n this.chartPrintService = inject(AXMOrgChartPrintService);\n this.chartService = inject(AXMOrgChartService);\n this.NODE_STROKE_COLOR = 'rgba(var(--ax-sys-color-primary-400))';\n this.LINK_STROKE_WIDTH = 1;\n this.NodeTypes = AXMOrganizationNodeTypeCategory;\n this.isFullscreen = signal(false, ...(ngDevMode ? [{ debugName: \"isFullscreen\" }] : []));\n this.panX = signal(0, ...(ngDevMode ? [{ debugName: \"panX\" }] : []));\n this.panY = signal(0, ...(ngDevMode ? [{ debugName: \"panY\" }] : []));\n this.panZoomLevel = signal(100, ...(ngDevMode ? [{ debugName: \"panZoomLevel\" }] : []));\n this.isChartRendered = false;\n this.nodeTypes = Object.entries(AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS).map((c) => ({\n title: c[1].title,\n color: c[1].color,\n icon: c[1].icon,\n category: c[1].category,\n }));\n this.#initialize = afterNextRender(async () => {\n this.d3 = await import('d3');\n await this.chartService.load();\n await this.refreshChart();\n });\n }\n #initialize;\n /**\n * Zooms in the chart.\n */\n zoomIn() {\n this.panView()?.zoomIn();\n }\n /**\n * Zooms out the chart.\n */\n zoomOut() {\n this.panView()?.zoomOut();\n }\n /**\n * Resets the zoom level and pan position of the chart.\n */\n zoomReset() {\n this.panView()?.resetPosition();\n }\n /**\n * Toggles fullscreen mode for the chart.\n */\n toggleFullscreen() {\n if (this.isFullscreen()) {\n document.exitFullscreen();\n this.isFullscreen.set(false);\n }\n else {\n this.parent().nativeElement.requestFullscreen();\n this.isFullscreen.set(true);\n }\n document.querySelector(`foreignObject[node=\"node-${this.chartService.rootNode().id}\"]`)?.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n inline: 'center',\n });\n }\n /**\n * Calculates the maximum depth of the organizational chart.\n * @param node - The root node of the chart.\n * @returns The maximum depth of the chart.\n */\n calculateMaxDepth(node) {\n if (!node.children || node.children.length === 0 || node.isExpanded === false) {\n return 1;\n }\n return 1 + Math.max(...node.children.map((child) => this.calculateMaxDepth(child)));\n }\n /**\n * Calculates the maximum breadth of the organizational chart.\n * @param node - The root node of the chart.\n * @returns The maximum breadth of the chart.\n */\n calculateMaxBreadth(node) {\n if (!node.children || node.children.length === 0 || node.isExpanded === false) {\n return 1;\n }\n return node.children.reduce((acc, child) => acc + this.calculateMaxBreadth(child), 0);\n }\n /**\n * Creates and renders the organizational chart.\n * @param el - The container element for the chart.\n * @param data - The root node of the organizational chart.\n */\n createChart(el, data) {\n if (!this.d3) {\n return;\n }\n this.ngzone.runOutsideAngular(() => {\n const NODE_WIDTH_BASE = 260;\n const NODE_HEIGHT_BASE = 180;\n const HORIZONTAL_SPACING = 20;\n const VERTICAL_SPACING = 40;\n this.clearChart(el);\n const newSvg = this.d3.select(el).append('svg');\n const root = this.d3.hierarchy(data);\n root.descendants().forEach((node) => {\n if (node.data.isExpanded === false) {\n node.children = undefined;\n }\n });\n const treeLayout = this.d3\n .tree()\n .nodeSize([NODE_WIDTH_BASE + HORIZONTAL_SPACING, NODE_HEIGHT_BASE + VERTICAL_SPACING]);\n treeLayout(root);\n let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;\n root.descendants().forEach((d) => {\n if (d.x < minX)\n minX = d.x;\n if (d.x > maxX)\n maxX = d.x;\n if (d.y < minY)\n minY = d.y;\n if (d.y > maxY)\n maxY = d.y;\n });\n const CONTAINER_WIDTH = maxX - minX + NODE_WIDTH_BASE + 2 * HORIZONTAL_SPACING;\n const CONTAINER_HEIGHT = maxY - minY + NODE_HEIGHT_BASE + 2 * VERTICAL_SPACING;\n newSvg.attr('width', CONTAINER_WIDTH).attr('height', CONTAINER_HEIGHT);\n const g = newSvg\n .append('g')\n .attr('transform', `translate(${-minX + NODE_WIDTH_BASE / 2 + HORIZONTAL_SPACING / 2}, ${-minY + NODE_HEIGHT_BASE / 2 + VERTICAL_SPACING / 2})`);\n const link = g\n .selectAll('.link')\n .data(root.links())\n .enter()\n .append('path')\n .attr('class', 'link')\n .attr('d', (d) => {\n const source = d.source;\n const target = d.target;\n return `M${source.x},${source.y}V${(source.y + target.y) / 2}H${target.x}V${target.y - 10}`;\n })\n .attr('fill', 'none')\n .attr('stroke', this.NODE_STROKE_COLOR)\n .attr('stroke-width', this.LINK_STROKE_WIDTH)\n .attr('from', (d) => `node-${d.source.data.id}`)\n .attr('to', (d) => `node-${d.target.data.id}`);\n const node = g\n .selectAll('.axp-chart-node')\n .data(root.descendants())\n .enter()\n .append('foreignObject')\n .attr('class', 'axp-chart-node')\n .attr('node', (d) => `node-${d.data.id}`)\n .attr('x', (d) => d.x - NODE_WIDTH_BASE / 2)\n .attr('y', (d) => d.y - NODE_HEIGHT_BASE / 2 + 10)\n .attr('width', NODE_WIDTH_BASE)\n .attr('height', NODE_HEIGHT_BASE)\n .each((d) => this.renderNodeTemplate(d.data, d.x, d.y));\n this.contextMenu()?.refresh();\n });\n if (!this.isChartRendered) {\n // document.querySelector(`foreignObject[node=\"node-${data.id}\"] .--heading-container`)?.scrollIntoView({\n // behavior: 'smooth',\n // block: 'center',\n // inline: 'center',\n // });\n this.isChartRendered = true;\n this.panView()?.resetPosition();\n }\n }\n /**\n * Renders the node template for a given organizational node.\n * @param data - The node data.\n * @param x - The x-coordinate of the node.\n * @param y - The y-coordinate of the node.\n */\n renderNodeTemplate(data, x, y) {\n // Find the key that matches the node type\n const entityKey = Object.keys(AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS).find((key) => {\n const keyName = key.split('.').pop(); // Get the last part after splitting by '.'\n return keyName === data.type; // Compare with data.type\n });\n if (entityKey) {\n const categoryMapping = AXM_ORG_CHART_NODE_TYPE_ENTITY_MAPPINGS[entityKey];\n // Add the category to the data object\n set(data, 'category', categoryMapping.category);\n }\n const viewRef = this.viewContainerRef.createEmbeddedView(this.nodeTemplate(), {\n $implicit: data,\n });\n const nodeElement = this.d3.select(this.treeContainer().nativeElement).select(`[node=\"node-${data.id}\"]`);\n const element = nodeElement.node();\n if (element) {\n element.appendChild(viewRef.rootNodes[0]);\n }\n }\n /**\n * Toggles the expansion state of a node.\n * @param data - The node data.\n * @param el - The HTML element representing the node.\n */\n toggleNode(data, el) {\n data.isExpanded = data.isExpanded === undefined ? false : !data.isExpanded;\n this.createChart(this.treeContainer().nativeElement, this.chartService.rootNode());\n // el.scrollIntoView({\n // behavior: 'smooth',\n // });\n }\n /**\n * Clears the chart from the container element.\n * @param el - The container element.\n */\n clearChart(el) {\n if (this.d3) {\n this.d3.select(el).select('svg').remove();\n this.viewContainerRef.clear();\n }\n }\n async refreshChart() {\n if (this.d3) {\n this.createChart(this.treeContainer().nativeElement, this.chartService.rootNode());\n }\n }\n //#region Context Menu\n async handleContextMenuOnOpening(e) {\n const node = get(e.targetElement, '__data__.data');\n const allowedAddItems = await this.chartService.getAllowedAddMenuItems(node);\n const allowDelete = node.type != AXMOrganizationNodeType.Company;\n const isPasteAvailable = await this.chartService.isPasteAvailable();\n const allowPaste = await this.chartService.allowPaste(node);\n //\n if (allowedAddItems.length) {\n e.items.push({\n text: 'Add New',\n icon: 'fa-light fa-plus',\n items: allowedAddItems,\n break: allowDelete,\n });\n }\n //\n if (allowDelete) {\n e.items.push({\n name: 'cut',\n text: 'Cut',\n icon: 'fa-light fa-cut',\n data: node,\n });\n e.items.push({\n name: 'copy',\n text: 'Copy',\n icon: 'fa-light fa-copy',\n data: node,\n break: !isPasteAvailable,\n });\n }\n if (isPasteAvailable) {\n e.items.push({\n name: 'paste',\n text: 'Paste',\n icon: 'fa-light fa-paste',\n data: node,\n break: true,\n disabled: !allowPaste,\n });\n }\n //\n if (allowDelete) {\n e.items.push({\n name: 'remove',\n text: 'Remove',\n color: 'danger',\n icon: 'fa-light fa-trash-can',\n data: node,\n });\n }\n //\n if (e.items.length == 0) {\n e.canceled = true;\n }\n }\n async handleContextMenuItemClick(e) {\n //\n if (e.item.name == 'add') {\n if (await this.chartService.addNode(e.item.data)) {\n await this.refreshChart();\n }\n }\n //\n else if (e.item.name == 'remove') {\n await this.chartService.removeNode(e.item.data.id);\n await this.refreshChart();\n }\n //\n else if (e.item.name == 'copy') {\n await this.chartService.copyNode(e.item.data.id);\n }\n else if (e.item.name == 'cut') {\n await this.chartService.cutNode(e.item.data.id);\n await this.refreshChart();\n }\n else if (e.item.name == 'paste') {\n await this.chartService.pasteNode(e.item.data.id);\n await this.refreshChart();\n }\n }\n //#endregion\n /**\n * Prints the organizational chart.\n */\n async printChart() {\n let [panX, panY, panZoomLevel] = [this.panX(), this.panY(), this.panZoomLevel()];\n this.panX.set(0), this.panY.set(0), this.panZoomLevel.set(100);\n await this.chartPrintService.printChart(this.treeContainer().nativeElement);\n this.panX.set(panX), this.panY.set(panY), this.panZoomLevel.set(panZoomLevel);\n }\n /**\n * Gets the node colors based on the provided color.\n * @param color - The color to use for the node.\n * @returns An object containing the node's background, text, and border colors.\n */\n getNodeColors(color) {\n if (color.includes('surface')) {\n return {\n '--node-bg-color': `var(--ax-sys-color-${color})`,\n '--node-text-color': `var(--ax-sys-color-on-${color})`,\n '--node-border-color': `var(--ax-sys-color-border-${color})`,\n };\n }\n return {\n '--node-bg-color': `var(--ax-sys-color-${color}-surface)`,\n '--node-text-color': `var(--ax-sys-color-on-${color}-surface)`,\n '--node-border-color': `var(--ax-sys-color-border-${color}-surface)`,\n };\n }\n updateVar(oldValue, newValue) {\n oldValue.cat = newValue;\n }\n async getPageTitle() {\n return await this.translateService.translateAsync('chart.page-title', { scope: this.rootConfig.config.i18n });\n }\n async getPageDescription() {\n return await this.translateService.translateAsync('chart.page-description', { scope: this.rootConfig.config.i18n });\n }\n async getSecondaryMenuItems() {\n return [\n {\n title: await this.translateService.translateAsync('chart.actions.print', { scope: this.rootConfig.config.i18n }),\n icon: 'fa-light fa-print',\n color: 'primary',\n name: 'print',\n command: {\n name: 'print',\n },\n }\n ];\n }\n async getPageBreadcrumbs() {\n return [\n {\n title: await this.translateService.translateAsync('root-menu', { scope: this.rootConfig.config.i18n })\n },\n ];\n }\n async execute(command) {\n if (command.name == 'print') {\n await this.printChart();\n }\n }\n ngOnDestroy() {\n this.clearChart(this.treeContainer().nativeElement);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXMOrgChartPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", type: AXMOrgChartPage, isStandalone: true, selector: \"ng-component\", providers: [\n AXMOrgChartConfigService,\n AXMOrgChartService,\n AXMOrgChartPrintService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMOrgChartPage\n }\n ], viewQueries: [{ propertyName: \"nodeTemplate\", first: true, predicate: [\"nodeTemplate\"], descendants: true, isSignal: true }, { propertyName: \"treeContainer\", first: true, predicate: [\"chart\"], descendants: true, isSignal: true }, { propertyName: \"parent\", first: true, predicate: [\"parent\"], descendants: true, isSignal: true }, { propertyName: \"contextMenu\", first: true, predicate: AXContextMenuComponent, descendants: true, isSignal: true }, { propertyName: \"panView\", first: true, predicate: AXPanViewDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout *translate=\\\"let t\\\">\\n <axp-page-content class=\\\"ax-overflow-hidden\\\">\\n <div class=\\\"ax-h-[calc(100vh-290px)]\\\" #parent id=\\\"parent\\\">\\n <div #chart axPanView [(panX)]=\\\"panX\\\" [(panY)]=\\\"panY\\\" [freeMode]=\\\"true\\\" [(zoom)]=\\\"panZoomLevel\\\"\\n [fitContent]=\\\"true\\\" wrapperClasses=\\\"h\\\" class=\\\"ax-light\\\"></div>\\n <ax-context-menu [target]=\\\"'.axp-chart-node'\\\" [orientation]=\\\"'vertical'\\\" [closeOn]=\\\"'leave'\\\"\\n (onItemClick)=\\\"handleContextMenuItemClick($event)\\\" (onOpening)=\\\"handleContextMenuOnOpening($event)\\\">\\n </ax-context-menu>\\n </div>\\n </axp-page-content>\\n <axp-page-footer>\\n <axp-layout-prefix>\\n <div class=\\\"ax-flex ax-gap-1 ax-light ax-flex-wrap ax-justify-center\\\">\\n @let v = {cat:'Company'}; @for (item of nodeTypes; track $index) {\\n <div class=\\\"axp-node-hint\\\" [style]=\\\"getNodeColors(item.color)\\\" [class.ax-ms-4]=\\\"v.cat!=item.category\\\">\\n <div class=\\\"--badge\\\"></div>\\n {{item.title}}\\n </div>\\n {{updateVar(v,item.category)}} }\\n </div>\\n </axp-layout-prefix>\\n <axp-layout-suffix>\\n <div class=\\\"ax-flex ax-gap-2\\\">\\n <ax-button (onClick)=\\\"zoomOut()\\\">\\n <ax-icon class=\\\"fa-solid fa-minus\\\"> </ax-icon>\\n </ax-button>\\n <ax-button [text]=\\\"panZoomLevel()\\\" (onClick)=\\\"zoomReset()\\\"></ax-button>\\n <ax-button (onClick)=\\\"zoomIn()\\\">\\n <ax-icon class=\\\"fa-solid fa-add\\\"> </ax-icon>\\n </ax-button>\\n <ax-button (onClick)=\\\"toggleFullscreen()\\\">\\n <ax-icon>\\n <i class=\\\"fa-solid\\\" [class]=\\\"isFullscreen()? 'fa-compress' : 'fa-expand'\\\"></i>\\n </ax-icon>\\n </ax-button>\\n </div>\\n </axp-layout-suffix>\\n </axp-page-footer>\\n</axp-page-layout>\\n\\n<ng-template #nodeTemplate let-data>\\n <div>\\n @switch (data.category) {\\n <!-- Company -->\\n @case (NodeTypes.Company) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'primary' }\\\"></ng-container>\\n }\\n <!-- Location -->\\n @case (NodeTypes.Location) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n }\\n <!-- BusinessUnit -->\\n @case (NodeTypes.BusinessUnit) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n }\\n <!-- Role -->\\n @case (NodeTypes.Role) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent3' }\\\"></ng-container>\\n }\\n <!-- Employee -->\\n @case (NodeTypes.Employee) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'surface' }\\\"></ng-container>\\n } }\\n </div>\\n</ng-template>\\n\\n<!----------------------------------- General Node Template ----------------------------------->\\n<ng-template #generalTemplate let-data=\\\"data\\\" let-color=\\\"color\\\">\\n <div #node class=\\\"--node-container\\\" [style]=\\\"getNodeColors(color)\\\">\\n <div class=\\\"--container\\\">\\n <div class=\\\"--heading-container\\\">\\n <div class=\\\"--content\\\">\\n <div class=\\\"--icon\\\">\\n <i class=\\\"fa-light fa-xl fa-fw\\\" [class]=\\\"data.icon\\\"></i>\\n </div>\\n <div class=\\\"--titles\\\">\\n <span class=\\\"--title\\\">{{data.title}}</span>\\n @if(data.subtitle) {\\n <span class=\\\"--sub-title\\\">{{data.subtitle}}</span>\\n }\\n </div>\\n @if(data?.children?.length){\\n <div class=\\\"--badge\\\">\\n <span>{{data?.children?.length ?? 0}}</span>\\n </div>\\n }\\n </div>\\n </div>\\n @if(data.description) {\\n <div class=\\\"--body-container\\\">\\n <div class=\\\"--description\\\" [class.ax-pb-3]=\\\"data.children && data.children.length > 0\\\">\\n {{data.description}}\\n </div>\\n </div>\\n } @if(data.children && data.children.length > 0){\\n <div class=\\\"--toggle\\\">\\n <ax-button class=\\\"ax-xs ax-rounded-sm\\\" (onClick)=\\\"toggleNode(data,node)\\\">\\n <ax-icon icon=\\\"fa-solid\\\" [class]=\\\"data.isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n </div>\\n</ng-template>\", styles: [\".axp-node-hint{display:flex;align-items:center;justify-content:center;gap:.25rem;font-size:.75rem;line-height:1rem}.axp-node-hint>div.--badge{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));display:flex;width:.75rem;height:.75rem;align-items:center;justify-content:center;border-radius:.125rem}.axp-chart-node{display:flex;align-items:center;justify-content:center}.axp-chart-node .--node-container{position:relative;cursor:pointer;--node-bg-color: var(--ax-sys-color-primary-surface);--node-text-color: var(--ax-sys-color-on-primary-surface);--node-border-color: var(--ax-sys-color-border-primary-surface)}.axp-chart-node .--node-container .--container{display:flex;max-height:100%;width:100%;flex-direction:column;overflow:hidden;border-radius:.375rem;border-width:1px;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);border-color:rgba(var(--node-border-color))}.axp-chart-node .--node-container .--container .--heading-container{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));width:100%;padding:.5rem .75rem}.axp-chart-node .--node-container .--container .--heading-container .--content{display:flex;width:100%;align-items:center;justify-content:center;gap:.5rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--icon{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:2.75rem;height:2.75rem;flex:none;align-items:center;justify-content:center;border-radius:.5rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:1.5rem;height:1.5rem;flex:none;align-items:center;justify-content:center;border-radius:.375rem;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge>span{font-size:.75rem;line-height:1rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles{display:flex;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--sub-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--body-container{width:100%;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:.5rem .75rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}.axp-chart-node .--node-container .--container .--body-container .--description{text-align:center;font-size:.875rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--toggle{position:absolute;left:0;right:0;bottom:-.75rem;display:flex;width:100%;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;align-items:center;justify-content:center}#parent:fullscreen{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: RouterModule }, { kind: \"ngmodule\", type: \n //\n AXMenuModule }, { kind: \"component\", type: i2.AXContextMenuComponent, selector: \"ax-context-menu\", inputs: [\"orientation\", \"openOn\", \"closeOn\", \"items\", \"target\"], outputs: [\"onItemClick\", \"onOpening\"] }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i3.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDropdownButtonModule }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"directive\", type: i4.AXTranslatorDirective, selector: \"[translate]\" }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i5.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"directive\", type: AXPanViewDirective, selector: \"[axPanView]\", inputs: [\"zoomStep\", \"minZoom\", \"maxZoom\", \"freeMode\", \"fitContent\", \"disablePan\", \"disableZoom\", \"wrapperClasses\", \"panX\", \"panY\", \"zoom\"], outputs: [\"panXChange\", \"panYChange\", \"zoomChange\", \"positionChange\"], exportAs: [\"axPanView\"] }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"ngmodule\", type: AXBreadcrumbsModule }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"component\", type: \n //\n AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPPageLayoutComponent, selector: \"axp-page-layout\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXMOrgChartPage, decorators: [{\n type: Component,\n args: [{ imports: [\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXPanViewDirective,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n AXMOrgChartConfigService,\n AXMOrgChartService,\n AXMOrgChartPrintService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMOrgChartPage\n }\n ], template: \"<axp-page-layout *translate=\\\"let t\\\">\\n <axp-page-content class=\\\"ax-overflow-hidden\\\">\\n <div class=\\\"ax-h-[calc(100vh-290px)]\\\" #parent id=\\\"parent\\\">\\n <div #chart axPanView [(panX)]=\\\"panX\\\" [(panY)]=\\\"panY\\\" [freeMode]=\\\"true\\\" [(zoom)]=\\\"panZoomLevel\\\"\\n [fitContent]=\\\"true\\\" wrapperClasses=\\\"h\\\" class=\\\"ax-light\\\"></div>\\n <ax-context-menu [target]=\\\"'.axp-chart-node'\\\" [orientation]=\\\"'vertical'\\\" [closeOn]=\\\"'leave'\\\"\\n (onItemClick)=\\\"handleContextMenuItemClick($event)\\\" (onOpening)=\\\"handleContextMenuOnOpening($event)\\\">\\n </ax-context-menu>\\n </div>\\n </axp-page-content>\\n <axp-page-footer>\\n <axp-layout-prefix>\\n <div class=\\\"ax-flex ax-gap-1 ax-light ax-flex-wrap ax-justify-center\\\">\\n @let v = {cat:'Company'}; @for (item of nodeTypes; track $index) {\\n <div class=\\\"axp-node-hint\\\" [style]=\\\"getNodeColors(item.color)\\\" [class.ax-ms-4]=\\\"v.cat!=item.category\\\">\\n <div class=\\\"--badge\\\"></div>\\n {{item.title}}\\n </div>\\n {{updateVar(v,item.category)}} }\\n </div>\\n </axp-layout-prefix>\\n <axp-layout-suffix>\\n <div class=\\\"ax-flex ax-gap-2\\\">\\n <ax-button (onClick)=\\\"zoomOut()\\\">\\n <ax-icon class=\\\"fa-solid fa-minus\\\"> </ax-icon>\\n </ax-button>\\n <ax-button [text]=\\\"panZoomLevel()\\\" (onClick)=\\\"zoomReset()\\\"></ax-button>\\n <ax-button (onClick)=\\\"zoomIn()\\\">\\n <ax-icon class=\\\"fa-solid fa-add\\\"> </ax-icon>\\n </ax-button>\\n <ax-button (onClick)=\\\"toggleFullscreen()\\\">\\n <ax-icon>\\n <i class=\\\"fa-solid\\\" [class]=\\\"isFullscreen()? 'fa-compress' : 'fa-expand'\\\"></i>\\n </ax-icon>\\n </ax-button>\\n </div>\\n </axp-layout-suffix>\\n </axp-page-footer>\\n</axp-page-layout>\\n\\n<ng-template #nodeTemplate let-data>\\n <div>\\n @switch (data.category) {\\n <!-- Company -->\\n @case (NodeTypes.Company) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'primary' }\\\"></ng-container>\\n }\\n <!-- Location -->\\n @case (NodeTypes.Location) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n }\\n <!-- BusinessUnit -->\\n @case (NodeTypes.BusinessUnit) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n }\\n <!-- Role -->\\n @case (NodeTypes.Role) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent3' }\\\"></ng-container>\\n }\\n <!-- Employee -->\\n @case (NodeTypes.Employee) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'surface' }\\\"></ng-container>\\n } }\\n </div>\\n</ng-template>\\n\\n<!----------------------------------- General Node Template ----------------------------------->\\n<ng-template #generalTemplate let-data=\\\"data\\\" let-color=\\\"color\\\">\\n <div #node class=\\\"--node-container\\\" [style]=\\\"getNodeColors(color)\\\">\\n <div class=\\\"--container\\\">\\n <div class=\\\"--heading-container\\\">\\n <div class=\\\"--content\\\">\\n <div class=\\\"--icon\\\">\\n <i class=\\\"fa-light fa-xl fa-fw\\\" [class]=\\\"data.icon\\\"></i>\\n </div>\\n <div class=\\\"--titles\\\">\\n <span class=\\\"--title\\\">{{data.title}}</span>\\n @if(data.subtitle) {\\n <span class=\\\"--sub-title\\\">{{data.subtitle}}</span>\\n }\\n </div>\\n @if(data?.children?.length){\\n <div class=\\\"--badge\\\">\\n <span>{{data?.children?.length ?? 0}}</span>\\n </div>\\n }\\n </div>\\n </div>\\n @if(data.description) {\\n <div class=\\\"--body-container\\\">\\n <div class=\\\"--description\\\" [class.ax-pb-3]=\\\"data.children && data.children.length > 0\\\">\\n {{data.description}}\\n </div>\\n </div>\\n } @if(data.children && data.children.length > 0){\\n <div class=\\\"--toggle\\\">\\n <ax-button class=\\\"ax-xs ax-rounded-sm\\\" (onClick)=\\\"toggleNode(data,node)\\\">\\n <ax-icon icon=\\\"fa-solid\\\" [class]=\\\"data.isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n </div>\\n</ng-template>\", styles: [\".axp-node-hint{display:flex;align-items:center;justify-content:center;gap:.25rem;font-size:.75rem;line-height:1rem}.axp-node-hint>div.--badge{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));display:flex;width:.75rem;height:.75rem;align-items:center;justify-content:center;border-radius:.125rem}.axp-chart-node{display:flex;align-items:center;justify-content:center}.axp-chart-node .--node-container{position:relative;cursor:pointer;--node-bg-color: var(--ax-sys-color-primary-surface);--node-text-color: var(--ax-sys-color-on-primary-surface);--node-border-color: var(--ax-sys-color-border-primary-surface)}.axp-chart-node .--node-container .--container{display:flex;max-height:100%;width:100%;flex-direction:column;overflow:hidden;border-radius:.375rem;border-width:1px;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);border-color:rgba(var(--node-border-color))}.axp-chart-node .--node-container .--container .--heading-container{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));width:100%;padding:.5rem .75rem}.axp-chart-node .--node-container .--container .--heading-container .--content{display:flex;width:100%;align-items:center;justify-content:center;gap:.5rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--icon{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:2.75rem;height:2.75rem;flex:none;align-items:center;justify-content:center;border-radius:.5rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:1.5rem;height:1.5rem;flex:none;align-items:center;justify-content:center;border-radius:.375rem;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge>span{font-size:.75rem;line-height:1rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles{display:flex;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--sub-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--body-container{width:100%;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:.5rem .75rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}.axp-chart-node .--node-container .--container .--body-container .--description{text-align:center;font-size:.875rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--toggle{position:absolute;left:0;right:0;bottom:-.75rem;display:flex;width:100%;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;align-items:center;justify-content:center}#parent:fullscreen{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9vcmdhbml6YXRpb24tY2hhcnQvb3JnLWNoYXJ0LnBhZ2UudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9vcmdhbml6YXRpb24tY2hhcnQvb3JnLWNoYXJ0LnBhZ2UuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsc0JBQXNCLEVBR3RCLFlBQVksR0FDYixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxP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bnRlbnQiOlsiaW1wb3J0IHsgQVhQYW5WaWV3RGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jZGsvcGFuLXZpZXcnO1xuaW1wb3J0IHsgQVhCYWRnZU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9iYWRnZSc7XG5pbXBvcnQgeyBBWEJyZWFkY3J1bWJzTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2JyZWFkY3J1bWJzJztcbmltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYRHJvcGRvd25CdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJvcGRvd24tYnV0dG9uJztcbmltcG9ydCB7IEFYTG9hZGluZ01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9sb2FkaW5nJztcbmltcG9ydCB7XG4gIEFYQ29udGV4dE1lbnVDb21wb25lbnQsXG4gIEFYQ29udGV4dE1lbnVJdGVtc0NsaWNrRXZlbnQsXG4gIEFYQ29udGV4dE1lbnVPcGVuaW5nRXZlbnQsXG4gIEFYTWVudU1vZHVsZSxcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL21lbnUnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBQYWdlTGF5b3V0QmFzZSwgQVhQUGFnZUxheW91dEJhc2VDb21wb25lbnQsIEFYUFBhZ2VMYXlvdXRDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC92aWV3cyc7XG5pbXBvcnQgeyBBWFBUaGVtZUxheW91dEJsb2NrQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIE5nWm9uZSxcbiAgc2lnbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgdmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gtZXMvZ2V0JztcbmltcG9ydCBzZXQgZnJvbSAnbG9kYXNoLWVzL3NldCc7XG5pbXBvcnQgeyBSb290Q29uZmlnIH0gZnJvbSAnLi4vLi4vY29uc3QnO1xuaW1wb3J0IHsgQVhNT3JnQ2hhcnRDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9vcmctY2hhcnQtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTU9yZ0NoYXJ0UHJpbnRTZXJ2aWNlIH0gZnJvbSAnLi9vcmctY2hhcnQtcHJpbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBWE1PcmdDaGFydFNlcnZpY2UgfSBmcm9tICcuL29yZy1jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFYTV9PUkdfQ0hBUlRfTk9ERV9UWVBFX0VOVElUWV9NQVBQSU5HUyxcbiAgQVhNT3JnYW5pemF0aW9uTm9kZSxcbiAgQVhNT3JnYW5pemF0aW9uTm9kZVR5cGUsXG4gIEFYTU9yZ2FuaXphdGlvbk5vZGVUeXBlQ2F0ZWdvcnksXG59IGZyb20gJy4vb3JnLWNoYXJ0LnR5cGUnO1xuaW1wb3J0IHsgQVhQQWN0aW9uTWVudUl0ZW0sIEFYUEJyZWFkY3J1bWJJdGVtLCBBWFBFeGVjdXRlQ29tbWFuZCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG4vKipcbiAqIENvbXBvbmVudCBmb3IgZGlzcGxheWluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBhbiBvcmdhbml6YXRpb25hbCBjaGFydC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9vcmctY2hhcnQucGFnZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb3JnLWNoYXJ0LnBhZ2Uuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJvdXRlck1vZHVsZSxcbiAgICAvL1xuICAgIEFYTWVudU1vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWERyb3Bkb3duQnV0dG9uTW9kdWxlLFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhQYW5WaWV3RGlyZWN0aXZlLFxuICAgIEFYTG9hZGluZ01vZHVsZSxcbiAgICBBWEJyZWFkY3J1bWJzTW9kdWxlLFxuICAgIEFYQmFkZ2VNb2R1bGUsXG4gICAgLy9cbiAgICBBWFBUaGVtZUxheW91dEJsb2NrQ29tcG9uZW50LFxuICAgIEFYUFBhZ2VMYXlvdXRDb21wb25lbnQsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICBBWE1PcmdDaGFydENvbmZpZ1NlcnZpY2UsXG4gICAgQVhNT3JnQ2hhcnRTZXJ2aWNlLFxuICAgIEFYTU9yZ0NoYXJ0UHJpbnRTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUFBhZ2VMYXlvdXRCYXNlLFxuICAgICAgdXNlRXhpc3Rpbmc6IEFYTU9yZ0NoYXJ0UGFnZVxuICAgIH1cbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNT3JnQ2hhcnRQYWdlIGV4dGVuZHMgQVhQUGFnZUxheW91dEJhc2VDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm9vdENvbmZpZyA9IFJvb3RDb25maWc7XG5cbiAgcHJpdmF0ZSBkMyE6IHR5cGVvZiBpbXBvcnQoJ2QzJyk7XG5cbiAgcHJpdmF0ZSBub2RlVGVtcGxhdGUgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8YW55Pj4oJ25vZGVUZW1wbGF0ZScpO1xuICBwcml2YXRlIHRyZWVDb250YWluZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdjaGFydCcpO1xuICBwcml2YXRlIHBhcmVudCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ3BhcmVudCcpO1xuICBwcml2YXRlIGNvbnRleHRNZW51ID0gdmlld0NoaWxkKEFYQ29udGV4dE1lbnVDb21wb25lbnQpO1xuICBwcml2YXRlIHBhblZpZXcgPSB2aWV3Q2hpbGQoQVhQYW5WaWV3RGlyZWN0aXZlKTtcblxuICBwcml2YXRlIG5nem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgY2hhcnRQcmludFNlcnZpY2UgPSBpbmplY3QoQVhNT3JnQ2hhcnRQcmludFNlcnZpY2UpO1xuICBwcml2YXRlIGNoYXJ0U2VydmljZSA9IGluamVjdChBWE1PcmdDaGFydFNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgTk9ERV9TVFJPS0VfQ09MT1IgPSAncmdiYSh2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS00MDApKSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgTElOS19TVFJPS0VfV0lEVEggPSAxO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBOb2RlVHlwZXMgPSBBWE1Pcmdhbml6YXRpb25Ob2RlVHlwZUNhdGVnb3J5O1xuXG4gIHByb3RlY3RlZCBpc0Z1bGxzY3JlZW4gPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcGFuWCA9IHNpZ25hbCgwKTtcbiAgcHJvdGVjdGVkIHBhblkgPSBzaWduYWwoMCk7XG4gIHByb3RlY3RlZCBwYW5ab29tTGV2ZWwgPSBzaWduYWwoMTAwKTtcblxuICBwcm90ZWN0ZWQgaXNDaGFydFJlbmRlcmVkID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIG5vZGVUeXBlcyA9IE9iamVjdC5lbnRyaWVzKEFYTV9PUkdfQ0hBUlRfTk9ERV9UWVBFX0VOVElUWV9NQVBQSU5HUykubWFwKChjKSA9PiAoe1xuICAgIHRpdGxlOiBjWzFdLnRpdGxlLFxuICAgIGNvbG9yOiBjWzFdLmNvbG9yLFxuICAgIGljb246IGNbMV0uaWNvbixcbiAgICBjYXRlZ29yeTogY1sxXS5jYXRlZ29yeSxcbiAgfSkpO1xuXG4gICNpbml0aWFsaXplID0gYWZ0ZXJOZXh0UmVuZGVyKGFzeW5jICgpID0+IHtcbiAgICB0aGlzLmQzID0gYXdhaXQgaW1wb3J0KCdkMycpO1xuICAgIGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLmxvYWQoKTtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2hDaGFydCgpO1xuICB9KTtcblxuICAvKipcbiAgICogWm9vbXMgaW4gdGhlIGNoYXJ0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHpvb21JbigpIHtcbiAgICB0aGlzLnBhblZpZXcoKT8uem9vbUluKCk7XG4gIH1cblxuICAvKipcbiAgICogWm9vbXMgb3V0IHRoZSBjaGFydC5cbiAgICovXG4gIHByb3RlY3RlZCB6b29tT3V0KCkge1xuICAgIHRoaXMucGFuVmlldygpPy56b29tT3V0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSB6b29tIGxldmVsIGFuZCBwYW4gcG9zaXRpb24gb2YgdGhlIGNoYXJ0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHpvb21SZXNldCgpIHtcbiAgICB0aGlzLnBhblZpZXcoKT8ucmVzZXRQb3NpdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgZnVsbHNjcmVlbiBtb2RlIGZvciB0aGUgY2hhcnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgdG9nZ2xlRnVsbHNjcmVlbigpIHtcbiAgICBpZiAodGhpcy5pc0Z1bGxzY3JlZW4oKSkge1xuICAgICAgZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcbiAgICAgIHRoaXMuaXNGdWxsc2NyZWVuLnNldChmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyZW50KCkubmF0aXZlRWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgdGhpcy5pc0Z1bGxzY3JlZW4uc2V0KHRydWUpO1xuICAgIH1cbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBmb3JlaWduT2JqZWN0W25vZGU9XCJub2RlLSR7dGhpcy5jaGFydFNlcnZpY2Uucm9vdE5vZGUoKS5pZH1cIl1gKT8uc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgYmxvY2s6ICdzdGFydCcsXG4gICAgICBpbmxpbmU6ICdjZW50ZXInLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG1heGltdW0gZGVwdGggb2YgdGhlIG9yZ2FuaXphdGlvbmFsIGNoYXJ0LlxuICAgKiBAcGFyYW0gbm9kZSAtIFRoZSByb290IG5vZGUgb2YgdGhlIGNoYXJ0LlxuICAgKiBAcmV0dXJucyBUaGUgbWF4aW11bSBkZXB0aCBvZiB0aGUgY2hhcnQuXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZU1heERlcHRoKG5vZGU6IEFYTU9yZ2FuaXphdGlvbk5vZGUpOiBudW1iZXIge1xuICAgIGlmICghbm9kZS5jaGlsZHJlbiB8fCBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCBub2RlLmlzRXhwYW5kZWQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDEgKyBNYXRoLm1heCguLi5ub2RlLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHRoaXMuY2FsY3VsYXRlTWF4RGVwdGgoY2hpbGQpKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgbWF4aW11bSBicmVhZHRoIG9mIHRoZSBvcmdhbml6YXRpb25hbCBjaGFydC5cbiAgICogQHBhcmFtIG5vZGUgLSBUaGUgcm9vdCBub2RlIG9mIHRoZSBjaGFydC5cbiAgICogQHJldHVybnMgVGhlIG1heGltdW0gYnJlYWR0aCBvZiB0aGUgY2hhcnQuXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZU1heEJyZWFkdGgobm9kZTogQVhNT3JnYW5pemF0aW9uTm9kZSk6IG51bWJlciB7XG4gICAgaWYgKCFub2RlLmNoaWxkcmVuIHx8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwIHx8IG5vZGUuaXNFeHBhbmRlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5yZWR1Y2UoKGFjYywgY2hpbGQpID0+IGFjYyArIHRoaXMuY2FsY3VsYXRlTWF4QnJlYWR0aChjaGlsZCksIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJlbmRlcnMgdGhlIG9yZ2FuaXphdGlvbmFsIGNoYXJ0LlxuICAgKiBAcGFyYW0gZWwgLSBUaGUgY29udGFpbmVyIGVsZW1lbnQgZm9yIHRoZSBjaGFydC5cbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgcm9vdCBub2RlIG9mIHRoZSBvcmdhbml6YXRpb25hbCBjaGFydC5cbiAgICovXG4gIGNyZWF0ZUNoYXJ0KGVsOiBFbGVtZW50LCBkYXRhOiBBWE1Pcmdhbml6YXRpb25Ob2RlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmQzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubmd6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGNvbnN0IE5PREVfV0lEVEhfQkFTRSA9IDI2MDtcbiAgICAgIGNvbnN0IE5PREVfSEVJR0hUX0JBU0UgPSAxODA7XG4gICAgICBjb25zdCBIT1JJWk9OVEFMX1NQQUNJTkcgPSAyMDtcbiAgICAgIGNvbnN0IFZFUlRJQ0FMX1NQQUNJTkcgPSA0MDtcblxuICAgICAgdGhpcy5jbGVhckNoYXJ0KGVsKTtcbiAgICAgIGNvbnN0IG5ld1N2ZyA9IHRoaXMuZDMuc2VsZWN0KGVsKS5hcHBlbmQoJ3N2ZycpO1xuXG4gICAgICBjb25zdCByb290ID0gdGhpcy5kMy5oaWVyYXJjaHkoZGF0YSk7XG5cbiAgICAgIHJvb3QuZGVzY2VuZGFudHMoKS5mb3JFYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKG5vZGUuZGF0YS5pc0V4cGFuZGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0cmVlTGF5b3V0ID0gdGhpcy5kM1xuICAgICAgICAudHJlZTxBWE1Pcmdhbml6YXRpb25Ob2RlPigpXG4gICAgICAgIC5ub2RlU2l6ZShbTk9ERV9XSURUSF9CQVNFICsgSE9SSVpPTlRBTF9TUEFDSU5HLCBOT0RFX0hFSUdIVF9CQVNFICsgVkVSVElDQUxfU1BBQ0lOR10pO1xuXG4gICAgICB0cmVlTGF5b3V0KHJvb3QpO1xuXG4gICAgICBsZXQgbWluWCA9IEluZmluaXR5LFxuICAgICAgICBtYXhYID0gLUluZmluaXR5LFxuICAgICAgICBtaW5ZID0gSW5maW5pdHksXG4gICAgICAgIG1heFkgPSAtSW5maW5pdHk7XG4gICAgICByb290LmRlc2NlbmRhbnRzKCkuZm9yRWFjaCgoZDogYW55KSA9PiB7XG4gICAgICAgIGlmIChkLnggPCBtaW5YKSBtaW5YID0gZC54O1xuICAgICAgICBpZiAoZC54ID4gbWF4WCkgbWF4WCA9IGQueDtcbiAgICAgICAgaWYgKGQueSA8IG1pblkpIG1pblkgPSBkLnk7XG4gICAgICAgIGlmIChkLnkgPiBtYXhZKSBtYXhZID0gZC55O1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IENPTlRBSU5FUl9XSURUSCA9IG1heFggLSBtaW5YICsgTk9ERV9XSURUSF9CQVNFICsgMiAqIEhPUklaT05UQUxfU1BBQ0lORztcbiAgICAgIGNvbnN0IENPTlRBSU5FUl9IRUlHSFQgPSBtYXhZIC0gbWluWSArIE5PREVfSEVJR0hUX0JBU0UgKyAyICogVkVSVElDQUxfU1BBQ0lORztcblxuICAgICAgbmV3U3ZnLmF0dHIoJ3dpZHRoJywgQ09OVEFJTkVSX1dJRFRIKS5hdHRyKCdoZWlnaHQnLCBDT05UQUlORVJfSEVJR0hUKTtcblxuICAgICAgY29uc3QgZyA9IG5ld1N2Z1xuICAgICAgICAuYXBwZW5kKCdnJylcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgJ3RyYW5zZm9ybScsXG4gICAgICAgICAgYHRyYW5zbGF0ZSgkey1taW5YICsgTk9ERV9XSURUSF9CQVNFIC8gMiArIEhPUklaT05UQUxfU1BBQ0lORyAvIDJ9LCAkey1taW5ZICsgTk9ERV9IRUlHSFRfQkFTRSAvIDIgKyBWRVJUSUNBTF9TUEFDSU5HIC8gMlxuICAgICAgICAgIH0pYFxuICAgICAgICApO1xuXG4gICAgICBjb25zdCBsaW5rID0gZ1xuICAgICAgICAuc2VsZWN0QWxsKCcubGluaycpXG4gICAgICAgIC5kYXRhKHJvb3QubGlua3MoKSlcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZCgncGF0aCcpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaW5rJylcbiAgICAgICAgLmF0dHIoJ2QnLCAoZDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gZC5zb3VyY2U7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZC50YXJnZXQ7XG4gICAgICAgICAgcmV0dXJuIGBNJHtzb3VyY2UueH0sJHtzb3VyY2UueX1WJHsoc291cmNlLnkgKyB0YXJnZXQueSkgLyAyfUgke3RhcmdldC54fVYke3RhcmdldC55IC0gMTB9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCB0aGlzLk5PREVfU1RST0tFX0NPTE9SKVxuICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgdGhpcy5MSU5LX1NUUk9LRV9XSURUSClcbiAgICAgICAgLmF0dHIoJ2Zyb20nLCAoZDogYW55KSA9PiBgbm9kZS0ke2Quc291cmNlLmRhdGEuaWR9YClcbiAgICAgICAgLmF0dHIoJ3RvJywgKGQ6IGFueSkgPT4gYG5vZGUtJHtkLnRhcmdldC5kYXRhLmlkfWApO1xuXG4gICAgICBjb25zdCBub2RlID0gZ1xuICAgICAgICAuc2VsZWN0QWxsKCcuYXhwLWNoYXJ0LW5vZGUnKVxuICAgICAgICAuZGF0YShyb290LmRlc2NlbmRhbnRzKCkpXG4gICAgICAgIC5lbnRlcigpXG4gICAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnYXhwLWNoYXJ0LW5vZGUnKVxuICAgICAgICAuYXR0cignbm9kZScsIChkOiBhbnkpID0+IGBub2RlLSR7ZC5kYXRhLmlkfWApXG4gICAgICAgIC5hdHRyKCd4JywgKGQ6IGFueSkgPT4gZC54IC0gTk9ERV9XSURUSF9CQVNFIC8gMilcbiAgICAgICAgLmF0dHIoJ3knLCAoZDogYW55KSA9PiBkLnkgLSBOT0RFX0hFSUdIVF9CQVNFIC8gMiArIDEwKVxuICAgICAgICAuYXR0cignd2lkdGgnLCBOT0RFX1dJRFRIX0JBU0UpXG4gICAgICAgIC5hdHRyKCdoZWlnaHQnLCBOT0RFX0hFSUdIVF9CQVNFKVxuICAgICAgICAuZWFjaCgoZDogYW55KSA9PiB0aGlzLnJlbmRlck5vZGVUZW1wbGF0ZShkLmRhdGEsIGQueCwgZC55KSk7XG5cbiAgICAgIHRoaXMuY29udGV4dE1lbnUoKT8ucmVmcmVzaCgpO1xuICAgIH0pO1xuICAgIGlmICghdGhpcy5pc0NoYXJ0UmVuZGVyZWQpIHtcbiAgICAgIC8vIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYGZvcmVpZ25PYmplY3Rbbm9kZT1cIm5vZGUtJHtkYXRhLmlkfVwiXSAuLS1oZWFkaW5nLWNvbnRhaW5lcmApPy5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAvLyAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgIC8vICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgLy8gICBpbmxpbmU6ICdjZW50ZXInLFxuICAgICAgLy8gfSk7XG4gICAgICB0aGlzLmlzQ2hhcnRSZW5kZXJlZCA9IHRydWU7XG4gICAgICB0aGlzLnBhblZpZXcoKT8ucmVzZXRQb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBub2RlIHRlbXBsYXRlIGZvciBhIGdpdmVuIG9yZ2FuaXphdGlvbmFsIG5vZGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIG5vZGUgZGF0YS5cbiAgICogQHBhcmFtIHggLSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBub2RlLlxuICAgKiBAcGFyYW0geSAtIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIG5vZGUuXG4gICAqL1xuICBwcml2YXRlIHJlbmRlck5vZGVUZW1wbGF0ZShkYXRhOiBBWE1Pcmdhbml6YXRpb25Ob2RlLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIEZpbmQgdGhlIGtleSB0aGF0IG1hdGNoZXMgdGhlIG5vZGUgdHlwZVxuICAgIGNvbnN0IGVudGl0eUtleSA9IE9iamVjdC5rZXlzKEFYTV9PUkdfQ0hBUlRfTk9ERV9UWVBFX0VOVElUWV9NQVBQSU5HUykuZmluZCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBrZXlOYW1lID0ga2V5LnNwbGl0KCcuJykucG9wKCk7IC8vIEdldCB0aGUgbGFzdCBwYXJ0IGFmdGVyIHNwbGl0dGluZyBieSAnLidcbiAgICAgIHJldHVybiBrZXlOYW1lID09PSBkYXRhLnR5cGU7IC8vIENvbXBhcmUgd2l0aCBkYXRhLnR5cGVcbiAgICB9KTtcblxuICAgIGlmIChlbnRpdHlLZXkpIHtcbiAgICAgIGNvbnN0IGNhdGVnb3J5TWFwcGluZyA9IEFYTV9PUkdfQ0hBUlRfTk9ERV9UWVBFX0VOVElUWV9NQVBQSU5HU1tlbnRpdHlLZXldO1xuXG4gICAgICAvLyBBZGQgdGhlIGNhdGVnb3J5IHRvIHRoZSBkYXRhIG9iamVjdFxuICAgICAgc2V0KGRhdGEsICdjYXRlZ29yeScsIGNhdGVnb3J5TWFwcGluZy5jYXRlZ29yeSk7XG4gICAgfVxuXG4gICAgY29uc3Qgdmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5ub2RlVGVtcGxhdGUoKSwge1xuICAgICAgJGltcGxpY2l0OiBkYXRhLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgbm9kZUVsZW1lbnQgPSB0aGlzLmQzLnNlbGVjdCh0aGlzLnRyZWVDb250YWluZXIoKS5uYXRpdmVFbGVtZW50KS5zZWxlY3QoYFtub2RlPVwibm9kZS0ke2RhdGEuaWR9XCJdYCk7XG4gICAgY29uc3QgZWxlbWVudCA9IG5vZGVFbGVtZW50Lm5vZGUoKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodmlld1JlZi5yb290Tm9kZXNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBleHBhbnNpb24gc3RhdGUgb2YgYSBub2RlLlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBub2RlIGRhdGEuXG4gICAqIEBwYXJhbSBlbCAtIFRoZSBIVE1MIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBub2RlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHRvZ2dsZU5vZGUoZGF0YTogQVhNT3JnYW5pemF0aW9uTm9kZSwgZWw6IEhUTUxEaXZFbGVtZW50KSB7XG4gICAgZGF0YS5pc0V4cGFuZGVkID0gZGF0YS5pc0V4cGFuZGVkID09PSB1bmRlZmluZWQgPyBmYWxzZSA6ICFkYXRhLmlzRXhwYW5kZWQ7XG4gICAgdGhpcy5jcmVhdGVDaGFydCh0aGlzLnRyZWVDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LCB0aGlzLmNoYXJ0U2VydmljZS5yb290Tm9kZSgpKTtcbiAgICAvLyBlbC5zY3JvbGxJbnRvVmlldyh7XG4gICAgLy8gICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgLy8gfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBjaGFydCBmcm9tIHRoZSBjb250YWluZXIgZWxlbWVudC5cbiAgICogQHBhcmFtIGVsIC0gVGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhckNoYXJ0KGVsOiBFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZDMpIHtcbiAgICAgIHRoaXMuZDMuc2VsZWN0KGVsKS5zZWxlY3QoJ3N2ZycpLnJlbW92ZSgpO1xuICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoQ2hhcnQoKSB7XG4gICAgaWYgKHRoaXMuZDMpIHtcbiAgICAgIHRoaXMuY3JlYXRlQ2hhcnQodGhpcy50cmVlQ29udGFpbmVyKCkubmF0aXZlRWxlbWVudCwgdGhpcy5jaGFydFNlcnZpY2Uucm9vdE5vZGUoKSk7XG4gICAgfVxuICB9XG5cbiAgLy8jcmVnaW9uIENvbnRleHQgTWVudVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVDb250ZXh0TWVudU9uT3BlbmluZyhlOiBBWENvbnRleHRNZW51T3BlbmluZ0V2ZW50KSB7XG4gICAgY29uc3Qgbm9kZSA9IGdldChlLnRhcmdldEVsZW1lbnQsICdfX2RhdGFfXy5kYXRhJykgYXMgYW55IGFzIEFYTU9yZ2FuaXphdGlvbk5vZGU7XG4gICAgY29uc3QgYWxsb3dlZEFkZEl0ZW1zID0gYXdhaXQgdGhpcy5jaGFydFNlcnZpY2UuZ2V0QWxsb3dlZEFkZE1lbnVJdGVtcyhub2RlKTtcbiAgICBjb25zdCBhbGxvd0RlbGV0ZSA9IG5vZGUudHlwZSAhPSBBWE1Pcmdhbml6YXRpb25Ob2RlVHlwZS5Db21wYW55O1xuICAgIGNvbnN0IGlzUGFzdGVBdmFpbGFibGUgPSBhd2FpdCB0aGlzLmNoYXJ0U2VydmljZS5pc1Bhc3RlQXZhaWxhYmxlKCk7XG4gICAgY29uc3QgYWxsb3dQYXN0ZSA9IGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLmFsbG93UGFzdGUobm9kZSk7XG4gICAgLy9cbiAgICBpZiAoYWxsb3dlZEFkZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgZS5pdGVtcy5wdXNoKHtcbiAgICAgICAgdGV4dDogJ0FkZCBOZXcnLFxuICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcGx1cycsXG4gICAgICAgIGl0ZW1zOiBhbGxvd2VkQWRkSXRlbXMsXG4gICAgICAgIGJyZWFrOiBhbGxvd0RlbGV0ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvL1xuICAgIGlmIChhbGxvd0RlbGV0ZSkge1xuICAgICAgZS5pdGVtcy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ2N1dCcsXG4gICAgICAgIHRleHQ6ICdDdXQnLFxuICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtY3V0JyxcbiAgICAgICAgZGF0YTogbm9kZSxcbiAgICAgIH0pO1xuICAgICAgZS5pdGVtcy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ2NvcHknLFxuICAgICAgICB0ZXh0OiAnQ29weScsXG4gICAgICAgIGljb246ICdmYS1saWdodCBmYS1jb3B5JyxcbiAgICAgICAgZGF0YTogbm9kZSxcbiAgICAgICAgYnJlYWs6ICFpc1Bhc3RlQXZhaWxhYmxlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpc1Bhc3RlQXZhaWxhYmxlKSB7XG4gICAgICBlLml0ZW1zLnB1c2goe1xuICAgICAgICBuYW1lOiAncGFzdGUnLFxuICAgICAgICB0ZXh0OiAnUGFzdGUnLFxuICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcGFzdGUnLFxuICAgICAgICBkYXRhOiBub2RlLFxuICAgICAgICBicmVhazogdHJ1ZSxcbiAgICAgICAgZGlzYWJsZWQ6ICFhbGxvd1Bhc3RlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vXG4gICAgaWYgKGFsbG93RGVsZXRlKSB7XG4gICAgICBlLml0ZW1zLnB1c2goe1xuICAgICAgICBuYW1lOiAncmVtb3ZlJyxcbiAgICAgICAgdGV4dDogJ1JlbW92ZScsXG4gICAgICAgIGNvbG9yOiAnZGFuZ2VyJyxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXRyYXNoLWNhbicsXG4gICAgICAgIGRhdGE6IG5vZGUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy9cbiAgICBpZiAoZS5pdGVtcy5sZW5ndGggPT0gMCkge1xuICAgICAgZS5jYW5jZWxlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZUNvbnRleHRNZW51SXRlbUNsaWNrKGU6IEFYQ29udGV4dE1lbnVJdGVtc0NsaWNrRXZlbnQpIHtcbiAgICAvL1xuICAgIGlmIChlLml0ZW0ubmFtZSA9PSAnYWRkJykge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLmFkZE5vZGUoZS5pdGVtLmRhdGEpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaENoYXJ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vXG4gICAgZWxzZSBpZiAoZS5pdGVtLm5hbWUgPT0gJ3JlbW92ZScpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLnJlbW92ZU5vZGUoZS5pdGVtLmRhdGEuaWQpO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQ2hhcnQoKTtcbiAgICB9XG4gICAgLy9cbiAgICBlbHNlIGlmIChlLml0ZW0ubmFtZSA9PSAnY29weScpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLmNvcHlOb2RlKGUuaXRlbS5kYXRhLmlkKTtcbiAgICB9IGVsc2UgaWYgKGUuaXRlbS5uYW1lID09ICdjdXQnKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoYXJ0U2VydmljZS5jdXROb2RlKGUuaXRlbS5kYXRhLmlkKTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaENoYXJ0KCk7XG4gICAgfSBlbHNlIGlmIChlLml0ZW0ubmFtZSA9PSAncGFzdGUnKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoYXJ0U2VydmljZS5wYXN0ZU5vZGUoZS5pdGVtLmRhdGEuaWQpO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQ2hhcnQoKTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvKipcbiAgICogUHJpbnRzIHRoZSBvcmdhbml6YXRpb25hbCBjaGFydC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBwcmludENoYXJ0KCkge1xuICAgIGxldCBbcGFuWCwgcGFuWSwgcGFuWm9vbUxldmVsXSA9IFt0aGlzLnBhblgoKSwgdGhpcy5wYW5ZKCksIHRoaXMucGFuWm9vbUxldmVsKCldO1xuICAgIHRoaXMucGFuWC5zZXQoMCksIHRoaXMucGFuWS5zZXQoMCksIHRoaXMucGFuWm9vbUxldmVsLnNldCgxMDApO1xuICAgIGF3YWl0IHRoaXMuY2hhcnRQcmludFNlcnZpY2UucHJpbnRDaGFydCh0aGlzLnRyZWVDb250YWluZXIoKS5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnBhblguc2V0KHBhblgpLCB0aGlzLnBhblkuc2V0KHBhblkpLCB0aGlzLnBhblpvb21MZXZlbC5zZXQocGFuWm9vbUxldmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBub2RlIGNvbG9ycyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29sb3IuXG4gICAqIEBwYXJhbSBjb2xvciAtIFRoZSBjb2xvciB0byB1c2UgZm9yIHRoZSBub2RlLlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgbm9kZSdzIGJhY2tncm91bmQsIHRleHQsIGFuZCBib3JkZXIgY29sb3JzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE5vZGVDb2xvcnMoY29sb3I6IHN0cmluZykge1xuICAgIGlmIChjb2xvci5pbmNsdWRlcygnc3VyZmFjZScpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1ub2RlLWJnLWNvbG9yJzogYHZhcigtLWF4LXN5cy1jb2xvci0ke2NvbG9yfSlgLFxuICAgICAgICAnLS1ub2RlLXRleHQtY29sb3InOiBgdmFyKC0tYXgtc3lzLWNvbG9yLW9uLSR7Y29sb3J9KWAsXG4gICAgICAgICctLW5vZGUtYm9yZGVyLWNvbG9yJzogYHZhcigtLWF4LXN5cy1jb2xvci1ib3JkZXItJHtjb2xvcn0pYCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAnLS1ub2RlLWJnLWNvbG9yJzogYHZhcigtLWF4LXN5cy1jb2xvci0ke2NvbG9yfS1zdXJmYWNlKWAsXG4gICAgICAnLS1ub2RlLXRleHQtY29sb3InOiBgdmFyKC0tYXgtc3lzLWNvbG9yLW9uLSR7Y29sb3J9LXN1cmZhY2UpYCxcbiAgICAgICctLW5vZGUtYm9yZGVyLWNvbG9yJzogYHZhcigtLWF4LXN5cy1jb2xvci1ib3JkZXItJHtjb2xvcn0tc3VyZmFjZSlgLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlVmFyKG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBBWE1Pcmdhbml6YXRpb25Ob2RlVHlwZUNhdGVnb3J5KSB7XG4gICAgb2xkVmFsdWUuY2F0ID0gbmV3VmFsdWU7XG4gIH1cblxuXG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UGFnZVRpdGxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnY2hhcnQucGFnZS10aXRsZScsIHsgc2NvcGU6IHRoaXMucm9vdENvbmZpZy5jb25maWcuaTE4biB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VEZXNjcmlwdGlvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ2NoYXJ0LnBhZ2UtZGVzY3JpcHRpb24nLCB7IHNjb3BlOiB0aGlzLnJvb3RDb25maWcuY29uZmlnLmkxOG4gfSk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBnZXRTZWNvbmRhcnlNZW51SXRlbXMoKTogUHJvbWlzZTxBWFBBY3Rpb25NZW51SXRlbVtdPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6IGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnY2hhcnQuYWN0aW9ucy5wcmludCcsIHsgc2NvcGU6IHRoaXMucm9vdENvbmZpZy5jb25maWcuaTE4biB9KSxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXByaW50JyxcbiAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgbmFtZTogJ3ByaW50JyxcbiAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgIG5hbWU6ICdwcmludCcsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgXTtcbiAgfVxuICBvdmVycmlkZSBhc3luYyBnZXRQYWdlQnJlYWRjcnVtYnMoKTogUHJvbWlzZTxBWFBCcmVhZGNydW1iSXRlbVtdPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6IGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygncm9vdC1tZW51JywgeyBzY29wZTogdGhpcy5yb290Q29uZmlnLmNvbmZpZy5pMThuIH0pXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBleGVjdXRlKGNvbW1hbmQ6IEFYUEV4ZWN1dGVDb21tYW5kKSB7XG4gICAgaWYgKGNvbW1hbmQubmFtZSA9PSAncHJpbnQnKSB7XG4gICAgICBhd2FpdCB0aGlzLnByaW50Q2hhcnQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyQ2hhcnQodGhpcy50cmVlQ29udGFpbmVyKCkubmF0aXZlRWxlbWVudCk7XG4gIH1cbn1cbiIsIjxheHAtcGFnZS1sYXlvdXQgKnRyYW5zbGF0ZT1cImxldCB0XCI+XG4gIDxheHAtcGFnZS1jb250ZW50IGNsYXNzPVwiYXgtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgPGRpdiBjbGFzcz1cImF4LWgtW2NhbGMoMTAwdmgtMjkwcHgpXVwiICNwYXJlbnQgaWQ9XCJwYXJlbnRcIj5cbiAgICAgIDxkaXYgI2NoYXJ0IGF4UGFuVmlldyBbKHBhblgpXT1cInBhblhcIiBbKHBhblkpXT1cInBhbllcIiBbZnJlZU1vZGVdPVwidHJ1ZVwiIFsoem9vbSldPVwicGFuWm9vbUxldmVsXCJcbiAgICAgICAgW2ZpdENvbnRlbnRdPVwidHJ1ZVwiIHdyYXBwZXJDbGFzc2VzPVwiaFwiIGNsYXNzPVwiYXgtbGlnaHRcIj48L2Rpdj5cbiAgICAgIDxheC1jb250ZXh0LW1lbnUgW3RhcmdldF09XCInLmF4cC1jaGFydC1ub2RlJ1wiIFtvcmllbnRhdGlvbl09XCIndmVydGljYWwnXCIgW2Nsb3NlT25dPVwiJ2xlYXZlJ1wiXG4gICAgICAgIChvbkl0ZW1DbGljayk9XCJoYW5kbGVDb250ZXh0TWVudUl0ZW1DbGljaygkZXZlbnQpXCIgKG9uT3BlbmluZyk9XCJoYW5kbGVDb250ZXh0TWVudU9uT3BlbmluZygkZXZlbnQpXCI+XG4gICAgICA8L2F4LWNvbnRleHQtbWVudT5cbiAgICA8L2Rpdj5cbiAgPC9heHAtcGFnZS1jb250ZW50PlxuICA8YXhwLXBhZ2UtZm9vdGVyPlxuICAgIDxheHAtbGF5b3V0LXByZWZpeD5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0xIGF4LWxpZ2h0IGF4LWZsZXgtd3JhcCBheC1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICBAbGV0IHYgPSB7Y2F0OidDb21wYW55J307IEBmb3IgKGl0ZW0gb2Ygbm9kZVR5cGVzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4cC1ub2RlLWhpbnRcIiBbc3R5bGVdPVwiZ2V0Tm9kZUNvbG9ycyhpdGVtLmNvbG9yKVwiIFtjbGFzcy5heC1tcy00XT1cInYuY2F0IT1pdGVtLmNhdGVnb3J5XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIi0tYmFkZ2VcIj48L2Rpdj5cbiAgICAgICAgICB7e2l0ZW0udGl0bGV9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3t1cGRhdGVWYXIodixpdGVtLmNhdGVnb3J5KX19IH1cbiAgICAgIDwvZGl2PlxuICAgIDwvYXhwLWxheW91dC1wcmVmaXg+XG4gICAgPGF4cC1sYXlvdXQtc3VmZml4PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTJcIj5cbiAgICAgICAgPGF4LWJ1dHRvbiAob25DbGljayk9XCJ6b29tT3V0KClcIj5cbiAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLW1pbnVzXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDxheC1idXR0b24gW3RleHRdPVwicGFuWm9vbUxldmVsKClcIiAob25DbGljayk9XCJ6b29tUmVzZXQoKVwiPjwvYXgtYnV0dG9uPlxuICAgICAgICA8YXgtYnV0dG9uIChvbkNsaWNrKT1cInpvb21JbigpXCI+XG4gICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1hZGRcIj4gPC9heC1pY29uPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LWJ1dHRvbiAob25DbGljayk9XCJ0b2dnbGVGdWxsc2NyZWVuKClcIj5cbiAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWRcIiBbY2xhc3NdPVwiaXNGdWxsc2NyZWVuKCk/ICdmYS1jb21wcmVzcycgOiAnZmEtZXhwYW5kJ1wiPjwvaT5cbiAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9heHAtbGF5b3V0LXN1ZmZpeD5cbiAgPC9heHAtcGFnZS1mb290ZXI+XG48L2F4cC1wYWdlLWxheW91dD5cblxuPG5nLXRlbXBsYXRlICNub2RlVGVtcGxhdGUgbGV0LWRhdGE+XG4gIDxkaXY+XG4gICAgQHN3aXRjaCAoZGF0YS5jYXRlZ29yeSkge1xuICAgIDwhLS0gQ29tcGFueSAtLT5cbiAgICBAY2FzZSAoTm9kZVR5cGVzLkNvbXBhbnkpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2VuZXJhbFRlbXBsYXRlOyBjb250ZXh0OiB7ICBkYXRhLGNvbG9yOidwcmltYXJ5JyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIDwhLS0gTG9jYXRpb24gLS0+XG4gICAgQGNhc2UgKE5vZGVUeXBlcy5Mb2NhdGlvbikge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZW5lcmFsVGVtcGxhdGU7IGNvbnRleHQ6IHsgIGRhdGEsY29sb3I6J2FjY2VudDEnIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgPCEtLSBCdXNpbmVzc1VuaXQgLS0+XG4gICAgQGNhc2UgKE5vZGVUeXBlcy5CdXNpbmVzc1VuaXQpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2VuZXJhbFRlbXBsYXRlOyBjb250ZXh0OiB7ICBkYXRhLGNvbG9yOidhY2NlbnQyJyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIDwhLS0gUm9sZSAtLT5cbiAgICBAY2FzZSAoTm9kZVR5cGVzLlJvbGUpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2VuZXJhbFRlbXBsYXRlOyBjb250ZXh0OiB7ICBkYXRhLGNvbG9yOidhY2NlbnQzJyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIDwhLS0gRW1wbG95ZWUgLS0+XG4gICAgQGNhc2UgKE5vZGVUeXBlcy5FbXBsb3llZSkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZW5lcmFsVGVtcGxhdGU7IGNvbnRleHQ6IHsgIGRhdGEsY29sb3I6J3N1cmZhY2UnIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IH1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdlbmVyYWwgTm9kZSBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbjxuZy10ZW1wbGF0ZSAjZ2VuZXJhbFRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiIGxldC1jb2xvcj1cImNvbG9yXCI+XG4gIDxkaXYgI25vZGUgY2xhc3M9XCItLW5vZGUtY29udGFpbmVyXCIgW3N0eWxlXT1cImdldE5vZGVDb2xvcnMoY29sb3IpXCI+XG4gICAgPGRpdiBjbGFzcz1cIi0tY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiLS1oZWFkaW5nLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiLS1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIi0taWNvblwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS14bCBmYS1md1wiIFtjbGFzc109XCJkYXRhLmljb25cIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIi0tdGl0bGVzXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIi0tdGl0bGVcIj57e2RhdGEudGl0bGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIEBpZihkYXRhLnN1YnRpdGxlKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIi0tc3ViLXRpdGxlXCI+e3tkYXRhLnN1YnRpdGxlfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmKGRhdGE/LmNoaWxkcmVuPy5sZW5ndGgpe1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCItLWJhZGdlXCI+XG4gICAgICAgICAgICA8c3Bhbj57e2RhdGE/LmNoaWxkcmVuPy5sZW5ndGggPz8gMH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZihkYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiLS1ib2R5LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiLS1kZXNjcmlwdGlvblwiIFtjbGFzcy5heC1wYi0zXT1cImRhdGEuY2hpbGRyZW4gJiYgZGF0YS5jaGlsZHJlbi5sZW5ndGggPiAwXCI+XG4gICAgICAgICAge3tkYXRhLmRlc2NyaXB0aW9ufX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIH0gQGlmKGRhdGEuY2hpbGRyZW4gJiYgZGF0YS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgIDxkaXYgY2xhc3M9XCItLXRvZ2dsZVwiPlxuICAgICAgICA8YXgtYnV0dG9uIGNsYXNzPVwiYXgteHMgYXgtcm91bmRlZC1zbVwiIChvbkNsaWNrKT1cInRvZ2dsZU5vZGUoZGF0YSxub2RlKVwiPlxuICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1zb2xpZFwiIFtjbGFzc109XCJkYXRhLmlzRXhwYW5kZWQgPT09IGZhbHNlID8gJ2ZhLWNoZXZyb24tZG93bicgOiAnZmEtY2hldnJvbi11cCdcIj48L2F4LWljb24+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0="],"names":["i5"],"mappings":"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"}
|