@wavemaker/app-ng-runtime 11.14.1-rc.6311 → 11.14.2-rc.242
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/components/advanced/carousel/bundles/index.umd.js +15 -1
- package/components/advanced/carousel/carousel.directive.d.ts +1 -0
- package/components/advanced/carousel/esm2022/carousel.directive.mjs +16 -2
- package/components/advanced/carousel/fesm2022/index.mjs +15 -1
- package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
- package/components/advanced/login/bundles/index.umd.js +24 -3
- package/components/advanced/login/esm2022/login.component.mjs +25 -4
- package/components/advanced/login/fesm2022/index.mjs +24 -3
- package/components/advanced/login/fesm2022/index.mjs.map +1 -1
- package/components/advanced/login/login.component.d.ts +5 -2
- package/components/base/bundles/index.umd.js +323 -28
- package/components/base/directives/show-in-device.directive.d.ts +2 -1
- package/components/base/esm2022/directives/show-in-device.directive.mjs +22 -4
- package/components/base/esm2022/pipes/custom-pipes.mjs +1 -1
- package/components/base/esm2022/utils/widget-utils.mjs +3 -3
- package/components/base/esm2022/widgets/common/base/base-container.component.mjs +27 -1
- package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +18 -1
- package/components/base/esm2022/widgets/common/base/base.component.mjs +68 -7
- package/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +9 -1
- package/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +44 -11
- package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +20 -1
- package/components/base/esm2022/widgets/common/item-template/item-template.directive.mjs +26 -1
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +44 -4
- package/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +16 -1
- package/components/base/esm2022/widgets/common/pull-to-refresh/pull-to-refresh.mjs +22 -1
- package/components/base/esm2022/widgets/framework/property-change-handler.mjs +7 -2
- package/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +5 -3
- package/components/base/esm2022/widgets/framework/widget-registry.mjs +6 -3
- package/components/base/fesm2022/index.mjs +319 -26
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/widgets/common/base/base-container.component.d.ts +3 -2
- package/components/base/widgets/common/base/base-field-validations.d.ts +1 -0
- package/components/base/widgets/common/base/custom-widget-container.directive.d.ts +3 -2
- package/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +6 -2
- package/components/base/widgets/common/base/partial-container.directive.d.ts +3 -2
- package/components/base/widgets/common/item-template/item-template.directive.d.ts +3 -2
- package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +1 -1
- package/components/base/widgets/common/partial-param/partial-param.directive.d.ts +3 -2
- package/components/base/widgets/common/pull-to-refresh/pull-to-refresh.d.ts +3 -2
- package/components/basic/anchor/bundles/index.umd.js +13 -1
- package/components/basic/anchor/esm2022/anchor.component.mjs +14 -2
- package/components/basic/anchor/fesm2022/index.mjs +13 -1
- package/components/basic/anchor/fesm2022/index.mjs.map +1 -1
- package/components/basic/html/bundles/index.umd.js +13 -1
- package/components/basic/html/esm2022/html.directive.mjs +14 -2
- package/components/basic/html/fesm2022/index.mjs +13 -1
- package/components/basic/html/fesm2022/index.mjs.map +1 -1
- package/components/basic/label/bundles/index.umd.js +17 -1
- package/components/basic/label/esm2022/label.directive.mjs +18 -2
- package/components/basic/label/fesm2022/index.mjs +17 -1
- package/components/basic/label/fesm2022/index.mjs.map +1 -1
- package/components/basic/label/label.directive.d.ts +3 -2
- package/components/basic/progress/progress-circle/bundles/index.umd.js +10 -0
- package/components/basic/progress/progress-circle/esm2022/progress-circle.component.mjs +11 -1
- package/components/basic/progress/progress-circle/fesm2022/index.mjs +10 -0
- package/components/basic/progress/progress-circle/fesm2022/index.mjs.map +1 -1
- package/components/basic/progress/progress-circle/progress-circle.component.d.ts +3 -2
- package/components/basic/search/bundles/index.umd.js +27 -1
- package/components/basic/search/esm2022/scrollable.directive.mjs +11 -2
- package/components/basic/search/esm2022/search.component.mjs +18 -1
- package/components/basic/search/fesm2022/index.mjs +27 -1
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/basic/search/scrollable.directive.d.ts +4 -2
- package/components/basic/search/search.component.d.ts +3 -2
- package/components/basic/spinner/bundles/index.umd.js +9 -1
- package/components/basic/spinner/esm2022/spinner.component.mjs +10 -2
- package/components/basic/spinner/fesm2022/index.mjs +9 -1
- package/components/basic/spinner/fesm2022/index.mjs.map +1 -1
- package/components/basic/spinner/spinner.component.d.ts +4 -2
- package/components/chart/bundles/index.umd.js +21 -3
- package/components/chart/esm2022/chart.component.mjs +22 -4
- package/components/chart/fesm2022/index.mjs +21 -3
- package/components/chart/fesm2022/index.mjs.map +1 -1
- package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +3 -2
- package/components/containers/accordion/accordion.directive.d.ts +5 -2
- package/components/containers/accordion/bundles/index.umd.js +49 -2
- package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +10 -1
- package/components/containers/accordion/esm2022/accordion.directive.mjs +41 -3
- package/components/containers/accordion/fesm2022/index.mjs +49 -2
- package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- package/components/containers/panel/bundles/index.umd.js +13 -0
- package/components/containers/panel/esm2022/panel.component.mjs +14 -1
- package/components/containers/panel/fesm2022/index.mjs +13 -0
- package/components/containers/panel/fesm2022/index.mjs.map +1 -1
- package/components/containers/panel/panel.component.d.ts +3 -2
- package/components/containers/tabs/bundles/index.umd.js +54 -2
- package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +10 -1
- package/components/containers/tabs/esm2022/tabs.component.mjs +46 -3
- package/components/containers/tabs/fesm2022/index.mjs +54 -2
- package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +3 -2
- package/components/containers/tabs/tabs.component.d.ts +5 -2
- package/components/containers/wizard/bundles/index.umd.js +47 -3
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +16 -3
- package/components/containers/wizard/esm2022/wizard.component.mjs +33 -2
- package/components/containers/wizard/fesm2022/index.mjs +47 -3
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +3 -2
- package/components/containers/wizard/wizard.component.d.ts +4 -2
- package/components/data/card/bundles/index.umd.js +17 -1
- package/components/data/card/card-content/card-content.component.d.ts +3 -2
- package/components/data/card/card.component.d.ts +4 -2
- package/components/data/card/esm2022/card-content/card-content.component.mjs +6 -1
- package/components/data/card/esm2022/card.component.mjs +13 -2
- package/components/data/card/fesm2022/index.mjs +17 -1
- package/components/data/card/fesm2022/index.mjs.map +1 -1
- package/components/data/form/bundles/index.umd.js +92 -0
- package/components/data/form/esm2022/form-action/form-action.directive.mjs +7 -1
- package/components/data/form/esm2022/form-field/form-field.directive.mjs +28 -1
- package/components/data/form/esm2022/form-widget.directive.mjs +8 -1
- package/components/data/form/esm2022/form.component.mjs +27 -1
- package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +7 -1
- package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +12 -1
- package/components/data/form/esm2022/live-form/live-form.directive.mjs +10 -1
- package/components/data/form/fesm2022/index.mjs +92 -0
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/form/form-action/form-action.directive.d.ts +3 -2
- package/components/data/form/form-field/form-field.directive.d.ts +3 -2
- package/components/data/form/form-widget.directive.d.ts +3 -2
- package/components/data/form/live-actions/live-actions.directive.d.ts +3 -1
- package/components/data/form/live-filter/live-filter.directive.d.ts +3 -1
- package/components/data/form/live-form/live-form.directive.d.ts +3 -1
- package/components/data/list/bundles/index.umd.js +180 -17
- package/components/data/list/esm2022/list-item.directive.mjs +95 -11
- package/components/data/list/esm2022/list.component.mjs +87 -8
- package/components/data/list/fesm2022/index.mjs +180 -17
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/list/list-item.directive.d.ts +7 -2
- package/components/data/list/list.component.d.ts +3 -0
- package/components/data/live-table/bundles/index.umd.js +13 -1
- package/components/data/live-table/esm2022/live-table.component.mjs +14 -2
- package/components/data/live-table/fesm2022/index.mjs +13 -1
- package/components/data/live-table/fesm2022/index.mjs.map +1 -1
- package/components/data/live-table/live-table.component.d.ts +4 -2
- package/components/data/pagination/bundles/index.umd.js +57 -4
- package/components/data/pagination/esm2022/pagination.component.mjs +58 -5
- package/components/data/pagination/fesm2022/index.mjs +57 -4
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/pagination/pagination.component.d.ts +4 -2
- package/components/data/table/bundles/index.umd.js +311 -12
- package/components/data/table/esm2022/table-action/table-action.directive.mjs +8 -1
- package/components/data/table/esm2022/table-column/table-column.directive.mjs +107 -3
- package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +9 -1
- package/components/data/table/esm2022/table-cud.directive.mjs +8 -2
- package/components/data/table/esm2022/table-filter.directive.mjs +12 -2
- package/components/data/table/esm2022/table-row/table-row.directive.mjs +8 -1
- package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +8 -1
- package/components/data/table/esm2022/table.component.mjs +159 -9
- package/components/data/table/fesm2022/index.mjs +311 -12
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/table-action/table-action.directive.d.ts +3 -2
- package/components/data/table/table-column/table-column.directive.d.ts +3 -2
- package/components/data/table/table-column-group/table-column-group.directive.d.ts +3 -2
- package/components/data/table/table-cud.directive.d.ts +3 -1
- package/components/data/table/table-filter.directive.d.ts +3 -1
- package/components/data/table/table-row/table-row.directive.d.ts +3 -2
- package/components/data/table/table-row-action/table-row-action.directive.d.ts +3 -2
- package/components/data/table/table.component.d.ts +2 -2
- package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +3 -2
- package/components/dialogs/alert-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +6 -1
- package/components/dialogs/alert-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/confirm-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +3 -2
- package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +6 -1
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/default/bundles/index.umd.js +15 -2
- package/components/dialogs/default/dialog-body/dialog-body.directive.d.ts +4 -2
- package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +16 -3
- package/components/dialogs/default/fesm2022/index.mjs +15 -2
- package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/design-dialog/bundles/index.umd.js +7 -0
- package/components/dialogs/design-dialog/dialog.component.d.ts +3 -2
- package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +8 -1
- package/components/dialogs/design-dialog/fesm2022/index.mjs +7 -0
- package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/iframe-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +6 -1
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +3 -2
- package/components/dialogs/partial-dialog/bundles/index.umd.js +23 -3
- package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +24 -4
- package/components/dialogs/partial-dialog/fesm2022/index.mjs +23 -3
- package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/partial-dialog/partial-dialog.component.d.ts +4 -2
- package/components/input/base-form/base-form.component.d.ts +4 -2
- package/components/input/base-form/bundles/index.umd.js +16 -2
- package/components/input/base-form/esm2022/base-form.component.mjs +17 -3
- package/components/input/base-form/fesm2022/index.mjs +16 -2
- package/components/input/base-form/fesm2022/index.mjs.map +1 -1
- package/components/input/base-form-custom/base-form-custom.component.d.ts +3 -2
- package/components/input/base-form-custom/bundles/index.umd.js +13 -2
- package/components/input/base-form-custom/esm2022/base-form-custom.component.mjs +14 -3
- package/components/input/base-form-custom/fesm2022/index.mjs +13 -2
- package/components/input/base-form-custom/fesm2022/index.mjs.map +1 -1
- package/components/input/checkbox/bundles/index.umd.js +7 -0
- package/components/input/checkbox/checkbox.component.d.ts +3 -2
- package/components/input/checkbox/esm2022/checkbox.component.mjs +8 -1
- package/components/input/checkbox/fesm2022/index.mjs +7 -0
- package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
- package/components/input/checkboxset/bundles/index.umd.js +18 -2
- package/components/input/checkboxset/checkboxset.component.d.ts +4 -2
- package/components/input/checkboxset/esm2022/checkboxset.component.mjs +19 -3
- package/components/input/checkboxset/fesm2022/index.mjs +18 -2
- package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
- package/components/input/chips/bundles/index.umd.js +45 -5
- package/components/input/chips/chips.component.d.ts +3 -2
- package/components/input/chips/esm2022/chips.component.mjs +46 -6
- package/components/input/chips/fesm2022/index.mjs +45 -5
- package/components/input/chips/fesm2022/index.mjs.map +1 -1
- package/components/input/color-picker/bundles/index.umd.js +8 -0
- package/components/input/color-picker/color-picker.component.d.ts +3 -2
- package/components/input/color-picker/esm2022/color-picker.component.mjs +9 -1
- package/components/input/color-picker/fesm2022/index.mjs +8 -0
- package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
- package/components/input/composite/bundles/index.umd.js +10 -1
- package/components/input/composite/composite.directive.d.ts +3 -2
- package/components/input/composite/esm2022/composite.directive.mjs +11 -2
- package/components/input/composite/fesm2022/index.mjs +10 -1
- package/components/input/composite/fesm2022/index.mjs.map +1 -1
- package/components/input/currency/bundles/index.umd.js +7 -0
- package/components/input/currency/currency.component.d.ts +3 -2
- package/components/input/currency/esm2022/currency.component.mjs +8 -1
- package/components/input/currency/fesm2022/index.mjs +7 -0
- package/components/input/currency/fesm2022/index.mjs.map +1 -1
- package/components/input/dataset-aware-form/bundles/index.umd.js +26 -2
- package/components/input/dataset-aware-form/esm2022/dataset-aware-form.component.mjs +27 -3
- package/components/input/dataset-aware-form/fesm2022/index.mjs +26 -2
- package/components/input/dataset-aware-form/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/date/bundles/index.umd.js +22 -0
- package/components/input/epoch/date/date.component.d.ts +1 -0
- package/components/input/epoch/date/esm2022/date.component.mjs +23 -1
- package/components/input/epoch/date/fesm2022/index.mjs +22 -0
- package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/bundles/index.umd.js +25 -8
- package/components/input/file-upload/esm2022/file-upload.component.mjs +26 -9
- package/components/input/file-upload/fesm2022/index.mjs +25 -8
- package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/file-upload.component.d.ts +3 -0
- package/components/input/number/bundles/index.umd.js +8 -0
- package/components/input/number/esm2022/number.component.mjs +9 -1
- package/components/input/number/fesm2022/index.mjs +8 -0
- package/components/input/number/fesm2022/index.mjs.map +1 -1
- package/components/input/number/number.component.d.ts +3 -2
- package/components/input/radioset/bundles/index.umd.js +18 -2
- package/components/input/radioset/esm2022/radioset.component.mjs +19 -3
- package/components/input/radioset/fesm2022/index.mjs +18 -2
- package/components/input/radioset/fesm2022/index.mjs.map +1 -1
- package/components/input/radioset/radioset.component.d.ts +4 -2
- package/components/input/rating/bundles/index.umd.js +10 -0
- package/components/input/rating/esm2022/rating.component.mjs +11 -1
- package/components/input/rating/fesm2022/index.mjs +10 -0
- package/components/input/rating/fesm2022/index.mjs.map +1 -1
- package/components/input/rating/rating.component.d.ts +3 -2
- package/components/input/select/bundles/index.umd.js +6 -0
- package/components/input/select/esm2022/select.component.mjs +7 -1
- package/components/input/select/fesm2022/index.mjs +6 -0
- package/components/input/select/fesm2022/index.mjs.map +1 -1
- package/components/input/select/select.component.d.ts +3 -2
- package/components/input/slider/bundles/index.umd.js +10 -0
- package/components/input/slider/esm2022/slider.component.mjs +11 -1
- package/components/input/slider/fesm2022/index.mjs +10 -0
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/slider.component.d.ts +3 -2
- package/components/input/switch/bundles/index.umd.js +22 -2
- package/components/input/switch/esm2022/switch.component.mjs +23 -3
- package/components/input/switch/fesm2022/index.mjs +22 -2
- package/components/input/switch/fesm2022/index.mjs.map +1 -1
- package/components/input/switch/switch.component.d.ts +3 -2
- package/components/input/text/bundles/index.umd.js +36 -0
- package/components/input/text/esm2022/input-calendar/input-calendar.component.mjs +8 -1
- package/components/input/text/esm2022/input-color/input-color.component.mjs +8 -1
- package/components/input/text/esm2022/input-email/input-email.component.mjs +8 -1
- package/components/input/text/esm2022/input-number/input-number.component.mjs +8 -1
- package/components/input/text/esm2022/input-text/input-text.component.mjs +9 -1
- package/components/input/text/fesm2022/index.mjs +36 -0
- package/components/input/text/fesm2022/index.mjs.map +1 -1
- package/components/input/text/input-calendar/input-calendar.component.d.ts +3 -2
- package/components/input/text/input-color/input-color.component.d.ts +3 -2
- package/components/input/text/input-email/input-email.component.d.ts +3 -2
- package/components/input/text/input-number/input-number.component.d.ts +3 -2
- package/components/input/text/input-text/input-text.component.d.ts +3 -2
- package/components/input/textarea/bundles/index.umd.js +7 -0
- package/components/input/textarea/esm2022/textarea.component.mjs +8 -1
- package/components/input/textarea/fesm2022/index.mjs +7 -0
- package/components/input/textarea/fesm2022/index.mjs.map +1 -1
- package/components/input/textarea/textarea.component.d.ts +3 -2
- package/components/navigation/menu/bundles/index.umd.js +55 -6
- package/components/navigation/menu/esm2022/menu-adapator.component.mjs +17 -3
- package/components/navigation/menu/esm2022/menu.component.mjs +10 -3
- package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +6 -1
- package/components/navigation/menu/esm2022/nav/nav.component.mjs +11 -1
- package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +16 -3
- package/components/navigation/menu/fesm2022/index.mjs +55 -6
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- package/components/navigation/menu/menu-adapator.component.d.ts +4 -2
- package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +3 -2
- package/components/navigation/menu/nav/nav.component.d.ts +3 -2
- package/components/navigation/menu/nav/navigation-control.directive.d.ts +4 -2
- package/components/navigation/navbar/bundles/index.umd.js +5 -0
- package/components/navigation/navbar/esm2022/navbar.component.mjs +6 -1
- package/components/navigation/navbar/fesm2022/index.mjs +5 -0
- package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
- package/components/navigation/navbar/navbar.component.d.ts +3 -2
- package/components/navigation/popover/bundles/index.umd.js +65 -13
- package/components/navigation/popover/esm2022/popover.component.mjs +63 -11
- package/components/navigation/popover/fesm2022/index.mjs +62 -10
- package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/popover.component.d.ts +11 -3
- package/components/page/default/bundles/index.umd.js +20 -2
- package/components/page/default/esm2022/layout.directive.mjs +9 -1
- package/components/page/default/esm2022/page-content/page-content.component.mjs +13 -3
- package/components/page/default/fesm2022/index.mjs +20 -2
- package/components/page/default/fesm2022/index.mjs.map +1 -1
- package/components/page/default/layout.directive.d.ts +3 -2
- package/components/page/default/page-content/page-content.component.d.ts +3 -2
- package/components/page/left-panel/bundles/index.umd.js +16 -0
- package/components/page/left-panel/esm2022/left-panel.directive.mjs +17 -1
- package/components/page/left-panel/fesm2022/index.mjs +16 -0
- package/components/page/left-panel/fesm2022/index.mjs.map +1 -1
- package/components/page/left-panel/left-panel.directive.d.ts +3 -2
- package/components/page/top-nav/bundles/index.umd.js +2 -1
- package/components/page/top-nav/esm2022/top-nav.props.mjs +3 -2
- package/components/page/top-nav/fesm2022/index.mjs +2 -1
- package/components/page/top-nav/fesm2022/index.mjs.map +1 -1
- package/components/prefab/bundles/index.umd.js +4 -0
- package/components/prefab/esm2022/prefab.directive.mjs +5 -1
- package/components/prefab/fesm2022/index.mjs +4 -0
- package/components/prefab/fesm2022/index.mjs.map +1 -1
- package/core/bundles/index.umd.js +391 -94
- package/core/esm2022/public_api.mjs +3 -3
- package/core/esm2022/services/viewport.service.mjs +24 -10
- package/core/esm2022/types/types.mjs +1 -1
- package/core/esm2022/utils/dom.mjs +18 -2
- package/core/esm2022/utils/event-notifier.mjs +5 -2
- package/core/esm2022/utils/lru-cache.mjs +16 -2
- package/core/esm2022/utils/utils.mjs +6 -2
- package/core/esm2022/utils/watcher.mjs +323 -81
- package/core/fesm2022/index.mjs +390 -96
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +2 -2
- package/core/services/viewport.service.d.ts +5 -2
- package/core/types/types.d.ts +1 -0
- package/core/utils/lru-cache.d.ts +6 -0
- package/core/utils/utils.d.ts +1 -0
- package/core/utils/watcher.d.ts +26 -5
- package/http/bundles/index.umd.js +31 -1
- package/http/esm2022/http.service.mjs +32 -2
- package/http/fesm2022/index.mjs +31 -1
- package/http/fesm2022/index.mjs.map +1 -1
- package/http/http.service.d.ts +6 -2
- package/npm-shrinkwrap.json +2 -2
- package/oAuth/bundles/index.umd.js +9 -0
- package/oAuth/esm2022/oAuth.service.mjs +10 -1
- package/oAuth/fesm2022/index.mjs +9 -0
- package/oAuth/fesm2022/index.mjs.map +1 -1
- package/oAuth/oAuth.service.d.ts +3 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +364 -30
- package/runtime/base/components/app-component/app.component.d.ts +4 -0
- package/runtime/base/components/prefab-preview.component.d.ts +5 -2
- package/runtime/base/directives/accessroles.directive.d.ts +4 -3
- package/runtime/base/directives/prefab.directive.d.ts +3 -2
- package/runtime/base/esm2022/components/app-component/app.component.mjs +40 -9
- package/runtime/base/esm2022/components/base-custom-widget.component.mjs +33 -2
- package/runtime/base/esm2022/components/base-layout.component.mjs +7 -1
- package/runtime/base/esm2022/components/base-page.component.mjs +36 -3
- package/runtime/base/esm2022/components/base-partial.component.mjs +37 -3
- package/runtime/base/esm2022/components/base-prefab.component.mjs +32 -3
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +37 -3
- package/runtime/base/esm2022/components/prefab-preview.component.mjs +23 -4
- package/runtime/base/esm2022/directives/accessroles.directive.mjs +11 -2
- package/runtime/base/esm2022/directives/prefab.directive.mjs +9 -1
- package/runtime/base/esm2022/services/app.manager.service.mjs +37 -10
- package/runtime/base/esm2022/services/app.service.mjs +34 -2
- package/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +4 -1
- package/runtime/base/esm2022/services/pipe-provider.service.mjs +7 -4
- package/runtime/base/esm2022/services/spinner.service.mjs +15 -1
- package/runtime/base/esm2022/util/fragment-monitor.mjs +23 -2
- package/runtime/base/fesm2022/index.mjs +365 -31
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/runtime/base/services/app.manager.service.d.ts +6 -1
- package/runtime/base/services/app.service.d.ts +12 -2
- package/runtime/base/services/dynamic-component-ref-provider.service.d.ts +2 -1
- package/runtime/base/services/spinner.service.d.ts +3 -1
- package/runtime/base/util/fragment-monitor.d.ts +6 -0
- package/runtime/dynamic/bundles/index.umd.js +5 -0
- package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +6 -1
- package/runtime/dynamic/fesm2022/index.mjs +5 -0
- package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- package/scripts/datatable/datatable.js +100 -14
- package/security/bundles/index.umd.js +41 -2
- package/security/esm2022/security.service.mjs +42 -3
- package/security/fesm2022/index.mjs +41 -2
- package/security/fesm2022/index.mjs.map +1 -1
- package/security/security.service.d.ts +5 -2
- package/variables/bundles/index.umd.js +50 -6
- package/variables/esm2022/manager/action/notification-action.manager.mjs +18 -3
- package/variables/esm2022/manager/variable/base-variable.manager.mjs +15 -2
- package/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +13 -3
- package/variables/esm2022/service/variables.service.mjs +8 -2
- package/variables/fesm2022/index.mjs +50 -6
- package/variables/fesm2022/index.mjs.map +1 -1
|
@@ -470,4 +470,4 @@ export class FileExtensionFromMimePipe {
|
|
|
470
470
|
name: 'fileExtensionFromMime'
|
|
471
471
|
}]
|
|
472
472
|
}], null, null); })();
|
|
473
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXBpcGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9iYXNlL3NyYy9waXBlcy9jdXN0b20tcGlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDdEgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxHLE9BQU8sS0FBSyxTQUFTLE1BQU0saUNBQWlDLENBQUM7Ozs7QUFFN0QsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFckQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUU7SUFDekIsSUFBSSxLQUFLLENBQUM7SUFDVixvR0FBb0c7SUFDcEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCx3RkFBd0Y7SUFDeEYsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0YsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBTUYsTUFBTSxPQUFPLHVCQUF1QjtJQUNoQyxTQUFTLENBQUMsS0FBVSxFQUFFLGNBQXNCLEVBQUUsWUFBb0IsRUFBRSxZQUFpQixFQUFFLFlBQXFCLEVBQUUsWUFBb0IsRUFBRSxxQkFBK0IsRUFBRSxlQUFnQjtRQUNqTCxZQUFZLEdBQUcsWUFBWSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFBLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDcEcsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN2RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxJQUFJLE1BQU0sSUFBSSxjQUFjLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBSSxDQUFDO3dIQVB4Qyx1QkFBdUI7aUdBQXZCLHVCQUF1Qjs7aUZBQXZCLHVCQUF1QjtjQUpuQyxJQUFJO2VBQUM7Z0JBQ0YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLElBQUksRUFBRSx5QkFBeUI7YUFDbEM7O0FBZ0JELE1BQU0sT0FBTyxVQUFXLFNBQVEsTUFBTTtJQUNsQyxxRkFBcUY7SUFDckYsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUztRQUMxQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNQLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDbkIsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsU0FBUyxDQUFDLElBQVMsRUFBRSxNQUFXLEVBQUUsUUFBUyxFQUFFLFlBQWE7UUFDdEQsSUFBSSxTQUFTLENBQUM7UUFDZCwySEFBMkg7UUFDM0gsSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsU0FBUyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osSUFBSSxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbkUsQ0FBQztZQUNELElBQUksTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0YsQ0FBQztZQUNELElBQUksWUFBWSxDQUFDO1lBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDMUYsSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELFlBQVksR0FBSSxNQUFNLENBQUMsU0FBUyxDQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0SSxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsWUFBb0IsUUFBa0IsRUFBVSxXQUFnQyxFQUFVLEdBQVEsRUFBWSxpQkFBb0M7UUFDOUksS0FBSyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRG5CLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQVksc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtJQUVsSixDQUFDOzJHQTFDUSxVQUFVO2dGQUFWLFVBQVU7O2lGQUFWLFVBQVU7Y0FKdEIsSUFBSTtlQUFDO2dCQUNGLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixJQUFJLEVBQUUsUUFBUTthQUNqQjs7QUFrREQsTUFBTSxPQUFPLFlBQVk7SUFDckIsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRO1FBQ3BCLElBQUksUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLENBQUM7WUFDckUsUUFBUSxHQUFHLElBQUksR0FBRyxRQUFRLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDdkgsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN6RCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNMLENBQUM7SUFDRCxZQUFvQixXQUF3QixFQUF3QyxXQUFnQztRQUFoRyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUF3QyxnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7SUFDcEgsQ0FBQzs2R0FaUSxZQUFZLGlFQVdrQyxtQkFBbUI7a0ZBWGpFLFlBQVk7O2lGQUFaLFlBQVk7Y0FKeEIsSUFBSTtlQUFDO2dCQUNGLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixJQUFJLEVBQUUsVUFBVTthQUNuQjs7c0JBWW1ELE1BQU07dUJBQUMsbUJBQW1COztBQVE5RSxNQUFNLE9BQU8sY0FBYztJQUN2QixTQUFTLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxRQUFRO1FBQ3BDLE1BQU0sZUFBZSxHQUFHLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxjQUFjLElBQUksRUFBRSxDQUFDO1FBQzdGLElBQUksSUFBSSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDMUYsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQixJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFFLGVBQWUsR0FBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLGVBQWUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3RixDQUFDO0lBRUQsWUFBb0IsV0FBd0IsRUFBdUMsV0FBZ0M7UUFBL0YsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBdUMsZ0JBQVcsR0FBWCxXQUFXLENBQXFCO0lBQ25ILENBQUM7K0dBWlEsY0FBYyxpRUFXK0IsbUJBQW1CO29GQVhoRSxjQUFjOztpRkFBZCxjQUFjO2NBSjFCLElBQUk7ZUFBQztnQkFDRixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsSUFBSSxFQUFFLFlBQVk7YUFDckI7O3NCQVlrRCxNQUFNO3VCQUFDLG1CQUFtQjs7QUFRN0UsTUFBTSxPQUFPLFVBQVU7SUFDbkIsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPO1FBQ25CLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNqRyxDQUFDOzJHQUhRLFVBQVU7Z0ZBQVYsVUFBVTs7aUZBQVYsVUFBVTtjQUp0QixJQUFJO2VBQUM7Z0JBQ0YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLElBQUksRUFBRSxRQUFRO2FBQ2pCOztBQVdELE1BQU0sT0FBTyxVQUFVO0lBQ25CLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTztRQUNuQixPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQzsyR0FIUSxVQUFVO2dGQUFWLFVBQVU7O2lGQUFWLFVBQVU7Y0FKdEIsSUFBSTtlQUFDO2dCQUNGLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixJQUFJLEVBQUUsUUFBUTthQUNqQjs7QUFRRDs7R0FFRztBQUtILE1BQU0sT0FBTyxVQUFVO0lBQ25CLFlBQW9CLEdBQVEsRUFBVSxjQUFpQztRQUFuRCxRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQW1CO0lBRXZFLENBQUM7SUFDRCxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVE7UUFDckIsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLEtBQUksSUFBSSxDQUFDLEdBQUUsQ0FBQyxFQUFHLENBQUMsR0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDeEMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBRUEsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLHVFQUF1RSxDQUFDLENBQUM7WUFDdEYsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUcsQ0FBQztZQUNBLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQUMsT0FBTSxLQUFLLEVBQUMsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3QyxPQUFPLElBQUksQ0FBQztRQUNmLENBQUM7SUFDTixDQUFDOzJHQXRCUSxVQUFVO2dGQUFWLFVBQVU7O2lGQUFWLFVBQVU7Y0FKdEIsSUFBSTtlQUFDO2dCQUNGLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixJQUFJLEVBQUUsUUFBUTthQUNqQjs7QUE4QkQsTUFBTSxPQUFPLGVBQWU7SUFDeEIsU0FBUyxDQUFDLElBQUk7UUFDVixJQUFJLFNBQVMsQ0FBQztRQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQixPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDO1FBQ0QsU0FBUyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDL0QsQ0FBQztnSEFSUSxlQUFlO3FGQUFmLGVBQWU7O2lGQUFmLGVBQWU7Y0FKM0IsSUFBSTtlQUFDO2dCQUNGLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixJQUFJLEVBQUUsYUFBYTthQUN0Qjs7QUFnQkQsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFlBQVk7NFBBQXZDLGtCQUFrQix5QkFBbEIsa0JBQWtCO3dGQUFsQixrQkFBa0I7O2lGQUFsQixrQkFBa0I7Y0FKOUIsSUFBSTtlQUFDO2dCQUNGLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixJQUFJLEVBQUUsZ0JBQWdCO2FBQ3pCOztBQU9ELE1BQU0sT0FBTyxrQkFBa0I7SUFDM0IsU0FBUyxDQUFDLElBQUk7UUFDVixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDckMsQ0FBQzttSEFIUSxrQkFBa0I7d0ZBQWxCLGtCQUFrQjs7aUZBQWxCLGtCQUFrQjtjQUo5QixJQUFJO2VBQUM7Z0JBQ0YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLElBQUksRUFBRSxnQkFBZ0I7YUFDekI7O0FBV0QsTUFBTSxPQUFPLFVBQVU7SUFDbkIsU0FBUyxDQUFDLElBQVcsRUFBRSxLQUFVLEVBQUUsS0FBVTtRQUN6QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCx3Q0FBd0M7UUFDeEMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQixPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELGdDQUFnQztRQUNoQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDdkIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsyR0FiUSxVQUFVO2dGQUFWLFVBQVU7O2lGQUFWLFVBQVU7Y0FKdEIsSUFBSTtlQUFDO2dCQUNGLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixJQUFJLEVBQUUsUUFBUTthQUNqQjs7QUFxQkQsTUFBTSxPQUFPLFlBQVk7SUFDckIsU0FBUyxDQUFDLEtBQWEsRUFBRSxTQUFpQjtRQUN0QyxNQUFNLEtBQUssR0FBRztZQUNWLE9BQU87WUFDUCxJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtTQUNQLENBQUM7UUFFRjs7O1dBR0c7UUFDSCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDYixPQUFPLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNuQixLQUFLLElBQUksSUFBSSxDQUFDO1lBQ2QsSUFBSSxFQUFFLENBQUM7UUFDWCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDOzZHQXJCUSxZQUFZO2tGQUFaLFlBQVk7O2lGQUFaLFlBQVk7Y0FKeEIsSUFBSTtlQUFDO2dCQUNGLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixJQUFJLEVBQUUsVUFBVTthQUNuQjs7QUE2QkQsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQixTQUFTLENBQUMsYUFBa0I7UUFDeEIsTUFBTSxnQkFBZ0IsR0FBRztZQUNyQixLQUFLLEVBQVcsZUFBZTtZQUMvQixLQUFLLEVBQVcsZUFBZTtZQUMvQixLQUFLLEVBQVcsbUJBQW1CO1lBQ25DLEtBQUssRUFBVyxnQkFBZ0I7WUFDaEMsS0FBSyxFQUFXLHNCQUFzQjtZQUN0QyxLQUFLLEVBQVcsc0JBQXNCO1lBQ3RDLEtBQUssRUFBVyxzQkFBc0I7WUFDdEMsTUFBTSxFQUFVLHNCQUFzQjtZQUN0QyxNQUFNLEVBQVUsc0JBQXNCO1lBQ3RDLE1BQU0sRUFBVSxzQkFBc0I7WUFDdEMsS0FBSyxFQUFXLGlCQUFpQjtZQUNqQyxLQUFLLEVBQVcsaUJBQWlCO1lBQ2pDLEtBQUssRUFBVyxpQkFBaUI7WUFDakMsS0FBSyxFQUFXLGlCQUFpQjtZQUNqQyxLQUFLLEVBQVcsaUJBQWlCO1lBQ2pDLE1BQU0sRUFBVSxnQkFBZ0I7WUFDaEMsSUFBSSxFQUFZLGdCQUFnQjtZQUNoQyxJQUFJLEVBQVksZ0JBQWdCO1lBQ2hDLE1BQU0sRUFBVSxnQkFBZ0I7WUFDaEMsS0FBSyxFQUFXLGdCQUFnQjtZQUNoQyxNQUFNLEVBQVUsaUJBQWlCO1lBQ2pDLEtBQUssRUFBVyxpQkFBaUI7WUFDakMsS0FBSyxFQUFXLGlCQUFpQjtZQUNqQyxNQUFNLEVBQVUsaUJBQWlCO1lBQ2pDLE1BQU0sRUFBVSxXQUFXO1lBQzNCLFNBQVMsRUFBTyxXQUFXO1NBQzlCLENBQUM7UUFFRixPQUFPLEtBQUssR0FBRyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7a0hBaENRLGlCQUFpQjt1RkFBakIsaUJBQWlCOztpRkFBakIsaUJBQWlCO2NBSjdCLElBQUk7ZUFBQztnQkFDRixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsSUFBSSxFQUFFLGVBQWU7YUFDeEI7O0FBd0NELE1BQU0sT0FBTyxjQUFjO0lBQ3ZCLFNBQVMsQ0FBQyxLQUFLO1FBQ1gsTUFBTSxhQUFhLEdBQUc7WUFDbEIsU0FBUyxFQUFFLGlDQUFpQztZQUM1QyxPQUFPLEVBQU8seUJBQXlCO1NBQzFDLENBQUM7UUFDRixPQUFPLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDOytHQVBRLGNBQWM7b0ZBQWQsY0FBYzs7aUZBQWQsY0FBYztjQUoxQixJQUFJO2VBQUM7Z0JBQ0YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLElBQUksRUFBRSxZQUFZO2FBQ3JCOztBQWVELE1BQU0sT0FBTyxtQkFBbUI7SUFDNUIsU0FBUyxDQUFDLElBQVEsRUFBRSxVQUFjO1FBQzlCLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyQyxDQUFDO29IQUhRLG1CQUFtQjt5RkFBbkIsbUJBQW1COztpRkFBbkIsbUJBQW1CO2NBSi9CLElBQUk7ZUFBQztnQkFDRixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsSUFBSSxFQUFFLGlCQUFpQjthQUMxQjs7QUFXRCxNQUFNLE9BQU8seUJBQXlCO0lBQ2xDLFNBQVMsQ0FBQyxRQUFhO1FBQ25CLE1BQU0sV0FBVyxHQUFHO1lBQ2hCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLHVCQUF1QixFQUFFLE1BQU07WUFDL0IseUNBQXlDLEVBQUUsTUFBTTtZQUNqRCxpQkFBaUIsRUFBRSxNQUFNO1lBQ3pCLDhCQUE4QixFQUFFLE1BQU07WUFDdEMsMEJBQTBCLEVBQUUsTUFBTTtZQUNsQyxXQUFXLEVBQUUsTUFBTTtZQUNuQixvQkFBb0IsRUFBRSxLQUFLO1lBQzNCLHFCQUFxQixFQUFFLE1BQU07WUFDN0IsbUJBQW1CLEVBQUUsTUFBTTtZQUMzQixVQUFVLEVBQUUsTUFBTTtZQUNsQixVQUFVLEVBQUUsTUFBTTtZQUNsQixvQkFBb0IsRUFBRSxNQUFNO1lBQzVCLHlFQUF5RSxFQUFFLE9BQU87WUFDbEYsK0JBQStCLEVBQUUsTUFBTTtZQUN2QyxzQkFBc0IsRUFBRSxPQUFPO1lBQy9CLHdCQUF3QixFQUFFLEtBQUs7WUFDL0IsV0FBVyxFQUFFLE1BQU07WUFDbkIsV0FBVyxFQUFFLE9BQU87WUFDcEIsY0FBYyxFQUFFLE1BQU07WUFDdEIsZUFBZSxFQUFFLE1BQU07WUFDdkIsMEJBQTBCLEVBQUUsTUFBTTtZQUNsQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1lBQy9CLHdCQUF3QixFQUFFLEtBQUs7WUFDL0Isa0JBQWtCLEVBQUUsT0FBTztZQUMzQixZQUFZLEVBQUUsTUFBTTtZQUNwQixjQUFjLEVBQUUsT0FBTztZQUN2QixZQUFZLEVBQUUsT0FBTztZQUNyQixxQ0FBcUMsRUFBRSxNQUFNO1lBQzdDLGlEQUFpRCxFQUFFLE1BQU07WUFDekQsZ0RBQWdELEVBQUUsTUFBTTtZQUN4RCx5Q0FBeUMsRUFBRSxNQUFNO1lBQ2pELFdBQVcsRUFBRSxNQUFNO1lBQ25CLFdBQVcsRUFBRSxNQUFNO1lBQ25CLGlCQUFpQixFQUFFLE1BQU07WUFDekIsVUFBVSxFQUFFLE1BQU07WUFDbEIsV0FBVyxFQUFFLE1BQU07WUFDbkIsaUJBQWlCLEVBQUUsTUFBTTtZQUN6QiwrQkFBK0IsRUFBRSxNQUFNO1lBQ3ZDLDJFQUEyRSxFQUFFLE9BQU87WUFDcEYsOEJBQThCLEVBQUUsTUFBTTtZQUN0QyxpQkFBaUIsRUFBRSxNQUFNO1lBQ3pCLGtCQUFrQixFQUFFLEtBQUs7WUFDekIsZUFBZSxFQUFFLE1BQU07WUFDdkIsK0JBQStCLEVBQUUsTUFBTTtZQUN2QyxtQkFBbUIsRUFBRSxNQUFNO1lBQzNCLFlBQVksRUFBRSxPQUFPO1lBQ3JCLHdCQUF3QixFQUFFLEtBQUs7WUFDL0IsVUFBVSxFQUFFLE1BQU07WUFDbEIsWUFBWSxFQUFFLE1BQU07WUFDcEIsdUJBQXVCLEVBQUUsTUFBTTtZQUMvQixXQUFXLEVBQUUsTUFBTTtZQUNuQixZQUFZLEVBQUUsT0FBTztZQUNyQixZQUFZLEVBQUUsT0FBTztZQUNyQixZQUFZLEVBQUUsT0FBTztZQUNyQixXQUFXLEVBQUUsT0FBTztZQUNwQixZQUFZLEVBQUUsUUFBUTtZQUN0Qix1QkFBdUIsRUFBRSxRQUFRO1lBQ2pDLDBCQUEwQixFQUFFLE1BQU07WUFDbEMsbUVBQW1FLEVBQUUsT0FBTztZQUM1RSxpQkFBaUIsRUFBRSxNQUFNO1lBQ3pCLGlDQUFpQyxFQUFFLE1BQU07WUFDekMsaUJBQWlCLEVBQUUsTUFBTTtZQUN6QixZQUFZLEVBQUUsTUFBTTtZQUNwQixZQUFZLEVBQUUsTUFBTTtZQUNwQixhQUFhLEVBQUUsTUFBTTtZQUNyQixhQUFhLEVBQUUsTUFBTTtZQUNyQiw2QkFBNkIsRUFBRSxLQUFLO1NBQ3ZDLENBQUM7UUFFRixPQUFPLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDOzBIQTFFUSx5QkFBeUI7K0ZBQXpCLHlCQUF5Qjs7aUZBQXpCLHlCQUF5QjtjQUpyQyxJQUFJO2VBQUM7Z0JBQ0YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLElBQUksRUFBRSx1QkFBdUI7YUFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgUGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RhdGVQaXBlLCBEZWNpbWFsUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QWJzdHJhY3RJMThuU2VydmljZSwgQXBwLCBDVVJSRU5DWV9JTkZPLCBDdXN0b21QaXBlTWFuYWdlciwgaGFzT2Zmc2V0U3RyLCBpc0RlZmluZWQsIHJlcGxhY2V9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7V21QaXBlfSBmcm9tIFwiLi93bS1waXBlXCI7XG5pbXBvcnQge2ZpbHRlciwgaW5jbHVkZXMsIGlzRGF0ZSwgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzVW5kZWZpbmVkLCBzdGFydHNXaXRofSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmltcG9ydCAqIGFzIG1vbWVudExpYiBmcm9tICdtb21lbnQtdGltZXpvbmUvbW9tZW50LXRpbWV6b25lJztcblxuY29uc3QgbW9tZW50ID0gbW9tZW50TGliLmRlZmF1bHQgfHwgd2luZG93Wydtb21lbnQnXTtcblxuY29uc3QgZ2V0RXBvY2hWYWx1ZSA9IGRhdGEgPT4ge1xuICAgIGxldCBlcG9jaDtcbiAgICAvLyBGb3IgZGF0YSBpbiBmb3JtIG9mIHN0cmluZyBudW1iZXIgKCcxMjMnKSwgY29udmVydCB0byBudW1iZXIgKDEyMykuIEFuZCBkb24ndCBwYXJzZSBkYXRlIG9iamVjdHMuXG4gICAgaWYgKCFpc0RhdGUoZGF0YSkgJiYgIWlzTmFOKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBwYXJzZUludChkYXRhLCAxMCk7XG4gICAgfVxuICAgIC8vIGdldCB0aGUgdGltZXN0YW1wIHZhbHVlLiBJZiBkYXRhIGlzIHRpbWUgc3RyaW5nLCBhcHBlbmQgZGF0ZSBzdHJpbmcgdG8gdGhlIHRpbWUgdmFsdWVcbiAgICBlcG9jaCA9IG1vbWVudChkYXRhKS52YWx1ZU9mKCkgfHwgbW9tZW50KG5ldyBEYXRlKCkudG9EYXRlU3RyaW5nKCkgKyAnICcgKyBkYXRhKS52YWx1ZU9mKCk7XG4gICAgcmV0dXJuIGVwb2NoO1xufTtcblxuQFBpcGUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ3RyYWlsaW5nWmVyb0RlY2ltYWxQaXBlJ1xufSlcbmV4cG9ydCBjbGFzcyBUcmFpbGluZ1plcm9EZWNpbWFsUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBzZWxlY3RlZExvY2FsZTogc3RyaW5nLCBudW1iZXJmaWx0ZXI6IHN0cmluZywgbG9jYWxlZmlsdGVyOiBhbnksIHRyYWlsaW5nemVybzogYm9vbGVhbiwgZGVjaW1hbFZhbHVlOiBzdHJpbmcsIHNraXBUcmFpbGluZ1plcm9DaGVjaz86IGJvb2xlYW4sIGZvcm1hdHRlZExvY2FsZT8pOiBhbnkge1xuICAgICAgICBudW1iZXJmaWx0ZXIgPSB0cmFpbGluZ3plcm8gJiYgIXNraXBUcmFpbGluZ1plcm9DaGVjayA/IGAxLiR7ZGVjaW1hbFZhbHVlLmxlbmd0aH0tMTZgOiBudW1iZXJmaWx0ZXI7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IGZvcm1hdHRlZExvY2FsZSA/IGZvcm1hdHRlZExvY2FsZVsnbnVtYmVyJ10gOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgbnVtYmVyZmlsdGVyLCBsb2NhbGVmaWx0ZXIgfHwgbG9jYWxlIHx8IHNlbGVjdGVkTG9jYWxlKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSkgeyB9XG5cbn1cblxuQFBpcGUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ3RvRGF0ZSdcbn0pXG5leHBvcnQgY2xhc3MgVG9EYXRlUGlwZSBleHRlbmRzIFdtUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIC8vIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBjdXN0b20gZm9ybWF0dGVyIGZuIGFmdGVyIGFwcGx5aW5nIHRoZSBleGlzaXRuZyBkYXRlIHBhdHRlcm5cbiAgICByZXR1cm5GbihkYXRhLCBhcmdzLCB2YXJpYWJsZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDdXN0b21QaXBlKSB7XG4gICAgICAgICAgICBpZiAoYXJncykge1xuICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tRm9ybWF0dGVyKGRhdGEsIGFyZ3MsIHZhcmlhYmxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHRyYW5zZm9ybShkYXRhOiBhbnksIGZvcm1hdDogYW55LCB0aW1lem9uZT8sIGNvbXBJbnN0YW5jZT8pIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcDtcbiAgICAgICAgLy8gJ251bGwnIGlzIHRvIGJlIHRyZWF0ZWQgYXMgYSBzcGVjaWFsIGNhc2UsIElmIHVzZXIgd2FudHMgdG8gZW50ZXIgbnVsbCB2YWx1ZSwgZW1wdHkgc3RyaW5nIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBiYWNrZW5kXG4gICAgICAgIGlmIChkYXRhID09PSAnbnVsbCcgfHwgZGF0YSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybkZuKCcnLCBhcmd1bWVudHMsIHRoaXMuYXBwLlZhcmlhYmxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0RlZmluZWQoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybkZuKCcnLGFyZ3VtZW50cywgdGhpcy5hcHAuVmFyaWFibGVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aW1lc3RhbXAgPSBnZXRFcG9jaFZhbHVlKGRhdGEpO1xuICAgICAgICBpZiAodGltZXN0YW1wKSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAndGltZXN0YW1wJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybkZuKHRpbWVzdGFtcCwgYXJndW1lbnRzLCB0aGlzLmFwcC5WYXJpYWJsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ1VUQycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5GbihuZXcgRGF0ZSh0aW1lc3RhbXApLnRvSVNPU3RyaW5nKCksIGFyZ3VtZW50cywgdGhpcy5hcHAuVmFyaWFibGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBmb3JtYXR0ZWRWYWw7XG4gICAgICAgICAgICBjb25zdCB0aW1lWm9uZSA9IHRoaXMuaTE4blNlcnZpY2UgPyB0aGlzLmkxOG5TZXJ2aWNlLmdldFRpbWV6b25lKGNvbXBJbnN0YW5jZSkgOiB0aW1lem9uZTtcbiAgICAgICAgICAgIGlmICh0aW1lWm9uZSAmJiAoZGF0YSA9PT0gdGltZXN0YW1wIHx8IGhhc09mZnNldFN0cihkYXRhKSkpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWwgPSAobW9tZW50KHRpbWVzdGFtcCkgYXMgYW55KS50eih0aW1lWm9uZSkuZm9ybWF0KGZvcm1hdC5yZXBsYWNlQWxsKCd5JywgJ1knKS5yZXBsYWNlQWxsKCdkJywgJ0QnKS5yZXBsYWNlKCdhJywgJ0EnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRpbWVzdGFtcCwgZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybkZuKGZvcm1hdHRlZFZhbCwgYXJndW1lbnRzLCB0aGlzLmFwcC5WYXJpYWJsZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybkZuKCcnLCBhcmd1bWVudHMsdGhpcy5hcHAuVmFyaWFibGVzKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSwgcHJpdmF0ZSBpMThuU2VydmljZTogQWJzdHJhY3RJMThuU2VydmljZSwgcHJpdmF0ZSBhcHA6IEFwcCwgcHJvdGVjdGVkIGN1c3RvbVBpcGVNYW5hZ2VyOiBDdXN0b21QaXBlTWFuYWdlcikge1xuICAgICAgICBzdXBlcigndG9EYXRlJywgY3VzdG9tUGlwZU1hbmFnZXIpO1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ3RvTnVtYmVyJ1xufSlcbmV4cG9ydCBjbGFzcyBUb051bWJlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0oZGF0YSwgZnJhY1NpemUpIHtcbiAgICAgICAgaWYgKGZyYWNTaXplICYmICFTdHJpbmcoZnJhY1NpemUpLm1hdGNoKC9eKFxcZCspP1xcLigoXFxkKykoLShcXGQrKSk/KT8kLykpIHtcbiAgICAgICAgICAgIGZyYWNTaXplID0gJzEuJyArIGZyYWNTaXplICsgJy0nICsgZnJhY1NpemU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc05hTigrZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuaTE4blNlcnZpY2UgJiYgdGhpcy5pMThuU2VydmljZS5nZXR3aWRnZXRMb2NhbGUoKSA/IHRoaXMuaTE4blNlcnZpY2UuZ2V0d2lkZ2V0TG9jYWxlKCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRMb2NhbGUgPSBsb2NhbGUgPyBsb2NhbGVbJ251bWJlciddIDogbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybShkYXRhLCBmcmFjU2l6ZSwgZm9ybWF0dGVkTG9jYWxlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSwgIEBJbmplY3QoQWJzdHJhY3RJMThuU2VydmljZSkgcHJpdmF0ZSBpMThuU2VydmljZTogQWJzdHJhY3RJMThuU2VydmljZSkge1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ3RvQ3VycmVuY3knXG59KVxuZXhwb3J0IGNsYXNzIFRvQ3VycmVuY3lQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKGRhdGEsIGN1cnJlbmN5U3ltYm9sLCBmcmFjU2l6ZSkge1xuICAgICAgICBjb25zdCBfY3VycmVuY3lTeW1ib2wgPSAoQ1VSUkVOQ1lfSU5GT1tjdXJyZW5jeVN5bWJvbF0gfHwge30pLnN5bWJvbCB8fCBjdXJyZW5jeVN5bWJvbCB8fCAnJztcbiAgICAgICAgbGV0IF92YWwgPSBuZXcgVG9OdW1iZXJQaXBlKHRoaXMuZGVjaW1hbFBpcGUsIHRoaXMuaTE4blNlcnZpY2UpLnRyYW5zZm9ybShkYXRhLCBmcmFjU2l6ZSk7XG4gICAgICAgIGNvbnN0IGlzTmVnYXRpdmVOdW1iZXIgPSBzdGFydHNXaXRoKF92YWwsICctJyk7XG4gICAgICAgIGlmIChpc05lZ2F0aXZlTnVtYmVyKSB7XG4gICAgICAgICAgICBfdmFsID0gX3ZhbC5yZXBsYWNlKCctJywnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF92YWwgPyBpc05lZ2F0aXZlTnVtYmVyID8gJy0nKyBfY3VycmVuY3lTeW1ib2wgK192YWwgOl9jdXJyZW5jeVN5bWJvbCArIF92YWwgOiAnJztcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSwgQEluamVjdChBYnN0cmFjdEkxOG5TZXJ2aWNlKSBwcml2YXRlIGkxOG5TZXJ2aWNlOiBBYnN0cmFjdEkxOG5TZXJ2aWNlKSB7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBuYW1lOiAncHJlZml4J1xufSlcbmV4cG9ydCBjbGFzcyBQcmVmaXhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKGRhdGEsIHBhZGRpbmcpIHtcbiAgICAgICAgcmV0dXJuIChpc1VuZGVmaW5lZChkYXRhKSB8fCBkYXRhID09PSBudWxsIHx8IGRhdGEgPT09ICcnKSA/IGRhdGEgOiAoKHBhZGRpbmcgfHwgJycpICsgZGF0YSk7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBuYW1lOiAnc3VmZml4J1xufSlcbmV4cG9ydCBjbGFzcyBTdWZmaXhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKGRhdGEsIHBhZGRpbmcpIHtcbiAgICAgICAgcmV0dXJuIChpc1VuZGVmaW5lZChkYXRhKSB8fCBkYXRhID09PSBudWxsIHx8IGRhdGEgPT09ICcnKSA/IGRhdGEgOiAoZGF0YSArIChwYWRkaW5nIHx8ICcnKSk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogQ3VzdG9tIHBpcGU6IEl0IGlzIHdvcmsgYXMgaW50ZXJjZXB0b3IgYmV0d2VlbiB0aGUgdXNlciBjdXN0b20gcGlwZSBmdW5jdGlvbiBhbmQgYW5ndWxhciBwaXBlXG4gKi9cbkBQaXBlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIG5hbWU6ICdjdXN0b20nXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcDogQXBwLCBwcml2YXRlIGN1c3RtZVVzZXJQaXBlOiBDdXN0b21QaXBlTWFuYWdlcikge1xuXG4gICAgfVxuICAgIHRyYW5zZm9ybShkYXRhLCBwaXBlbmFtZSkge1xuICAgICAgIGxldCBhcmd1bWVudEFyciA9IFtdO1xuICAgICAgIGZvcihsZXQgaSA9MiA7IGk8YXJndW1lbnRzLmxlbmd0aDsgaSsrICl7XG4gICAgICAgIGFyZ3VtZW50QXJyLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICAgICB9XG5cbiAgICAgICAgbGV0IHBpcGVSZWYgPSB0aGlzLmN1c3RtZVVzZXJQaXBlLmdldEN1c3RvbVBpcGUocGlwZW5hbWUpO1xuICAgICAgICBpZiAoIXBpcGVSZWYgfHwgIWlzRnVuY3Rpb24ocGlwZVJlZi5mb3JtYXR0ZXIpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2Zvcm1hdHRlciBpcyBub3QgZGVmaW5lZCwgcGxlYXNlIGNoZWNrIHRoZSBjdXN0b20gcGlwZXMgZG9jdW1lbnRhdGlvbicpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICB0cnl7XG4gICAgICAgICAgICByZXR1cm4gcGlwZVJlZi5mb3JtYXR0ZXIoZGF0YSwgLi4uYXJndW1lbnRBcnIsIHRoaXMuYXBwLlZhcmlhYmxlcyk7XG4gICAgICAgIH0gY2F0Y2goZXJyb3Ipe1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUGlwZSBuYW1lOiAnK3BpcGVuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgIH1cbiAgICB9XG59XG5cbkBQaXBlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIG5hbWU6ICd0aW1lRnJvbU5vdydcbn0pXG5leHBvcnQgY2xhc3MgVGltZUZyb21Ob3dQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKGRhdGEpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcDtcbiAgICAgICAgaWYgKCFpc0RlZmluZWQoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGltZXN0YW1wID0gZ2V0RXBvY2hWYWx1ZShkYXRhKTtcbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcCA/IG1vbWVudCh0aW1lc3RhbXApLmZyb21Ob3coKSA6IHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbkBQaXBlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIG5hbWU6ICdudW1iZXJUb1N0cmluZydcbn0pXG5leHBvcnQgY2xhc3MgTnVtYmVyVG9TdHJpbmdQaXBlIGV4dGVuZHMgVG9OdW1iZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7IH1cblxuQFBpcGUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ3N0cmluZ1RvTnVtYmVyJ1xufSlcbmV4cG9ydCBjbGFzcyBTdHJpbmdUb051bWJlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0oZGF0YSkge1xuICAgICAgICByZXR1cm4gTnVtYmVyKGRhdGEpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbkBQaXBlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIG5hbWU6ICdmaWx0ZXInXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0oZGF0YTogYW55W10sIGZpZWxkOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgb2JqZWN0IGlzIHBhc3NlZCBhcyBmaXJzdCBwYXJhbXRlclxuICAgICAgICBpZiAoaXNPYmplY3QoZmllbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyKGRhdGEsIGZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBrZXkgdmFsdWUgcGFpciBpcyBwcm92aWRlZFxuICAgICAgICByZXR1cm4gZmlsdGVyKGRhdGEsIGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGluY2x1ZGVzKGl0ZW1bZmllbGRdLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ2ZpbGVzaXplJ1xufSlcbmV4cG9ydCBjbGFzcyBGaWxlU2l6ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0oYnl0ZXM6IG51bWJlciwgcHJlY2lzaW9uOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgdW5pdHMgPSBbXG4gICAgICAgICAgICAnYnl0ZXMnLFxuICAgICAgICAgICAgJ0tCJyxcbiAgICAgICAgICAgICdNQicsXG4gICAgICAgICAgICAnR0InLFxuICAgICAgICAgICAgJ1RCJyxcbiAgICAgICAgICAgICdQQidcbiAgICAgICAgXTtcblxuICAgICAgICAvKlRvZG9bc2h1YmhhbV1cbiAgICAgICAgaWYgKGlzTmFOKHBhcnNlRmxvYXQoYnl0ZXMpKSB8fCAhaXNGaW5pdGUoYnl0ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNNb2JpbGUoKSA/ICcnIDogJz8nO1xuICAgICAgICB9Ki9cbiAgICAgICAgbGV0IHVuaXQgPSAwO1xuICAgICAgICB3aGlsZSAoYnl0ZXMgPj0gMTAyNCkge1xuICAgICAgICAgICAgYnl0ZXMgLz0gMTAyNDtcbiAgICAgICAgICAgIHVuaXQrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnl0ZXMudG9GaXhlZCgrcHJlY2lzaW9uKSArICcgJyArIHVuaXRzW3VuaXRdO1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ2ZpbGVJY29uQ2xhc3MnXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVJY29uQ2xhc3NQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKGZpbGVFeHRlbnNpb246IGFueSkge1xuICAgICAgICBjb25zdCBmaWxlQ2xhc3NNYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3ppcCcgICAgICAgOiAgICdmYS1maWxlLXppcC1vJyxcbiAgICAgICAgICAgICdwZGYnICAgICAgIDogICAnZmEtZmlsZS1wZGYtbycsXG4gICAgICAgICAgICAncmFyJyAgICAgICA6ICAgJ2ZhLWZpbGUtYXJjaGl2ZS1vJyxcbiAgICAgICAgICAgICd0eHQnICAgICAgIDogICAnZmEtZmlsZS10ZXh0LW8nLFxuICAgICAgICAgICAgJ3BwdCcgICAgICAgOiAgICdmYS1maWxlLXBvd2VycG9pbnQtbycsXG4gICAgICAgICAgICAncG90JyAgICAgICA6ICAgJ2ZhLWZpbGUtcG93ZXJwb2ludC1vJyxcbiAgICAgICAgICAgICdwcHMnICAgICAgIDogICAnZmEtZmlsZS1wb3dlcnBvaW50LW8nLFxuICAgICAgICAgICAgJ3BwdHgnICAgICAgOiAgICdmYS1maWxlLXBvd2VycG9pbnQtbycsXG4gICAgICAgICAgICAncG90eCcgICAgICA6ICAgJ2ZhLWZpbGUtcG93ZXJwb2ludC1vJyxcbiAgICAgICAgICAgICdwcHN4JyAgICAgIDogICAnZmEtZmlsZS1wb3dlcnBvaW50LW8nLFxuICAgICAgICAgICAgJ21wZycgICAgICAgOiAgICdmYS1maWxlLW1vdmllLW8nLFxuICAgICAgICAgICAgJ21wNCcgICAgICAgOiAgICdmYS1maWxlLW1vdmllLW8nLFxuICAgICAgICAgICAgJ21vdicgICAgICAgOiAgICdmYS1maWxlLW1vdmllLW8nLFxuICAgICAgICAgICAgJ2F2aScgICAgICAgOiAgICdmYS1maWxlLW1vdmllLW8nLFxuICAgICAgICAgICAgJ21wMycgICAgICAgOiAgICdmYS1maWxlLWF1ZGlvLW8nLFxuICAgICAgICAgICAgJ2RvY3gnICAgICAgOiAgICdmYS1maWxlLXdvcmQtbycsXG4gICAgICAgICAgICAnanMnICAgICAgICA6ICAgJ2ZhLWZpbGUtY29kZS1vJyxcbiAgICAgICAgICAgICdtZCcgICAgICAgIDogICAnZmEtZmlsZS1jb2RlLW8nLFxuICAgICAgICAgICAgJ2h0bWwnICAgICAgOiAgICdmYS1maWxlLWNvZGUtbycsXG4gICAgICAgICAgICAnY3NzJyAgICAgICA6ICAgJ2ZhLWZpbGUtY29kZS1vJyxcbiAgICAgICAgICAgICd4bHN4JyAgICAgIDogICAnZmEtZmlsZS1leGNlbC1vJyxcbiAgICAgICAgICAgICdwbmcnICAgICAgIDogICAnZmEtZmlsZS1pbWFnZS1vJyxcbiAgICAgICAgICAgICdqcGcnICAgICAgIDogICAnZmEtZmlsZS1pbWFnZS1vJyxcbiAgICAgICAgICAgICdqcGVnJyAgICAgIDogICAnZmEtZmlsZS1pbWFnZS1vJyxcbiAgICAgICAgICAgICdmaWxlJyAgICAgIDogICAnZmEtZmlsZS1vJyxcbiAgICAgICAgICAgICdkZWZhdWx0JyAgIDogICAnZmEtZmlsZS1vJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAnZmEgJyArIChmaWxlQ2xhc3NNYXBwaW5nW2ZpbGVFeHRlbnNpb25dIHx8ICdmYS1maWxlLW8nKTtcbiAgICB9XG59XG5cbkBQaXBlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIG5hbWU6ICdzdGF0ZUNsYXNzJ1xufSlcbmV4cG9ydCBjbGFzcyBTdGF0ZUNsYXNzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShzdGF0ZSkge1xuICAgICAgICBjb25zdCBzdGF0ZUNsYXNzTWFwID0ge1xuICAgICAgICAgICAgJ3N1Y2Nlc3MnOiAnd2kgd2ktY2hlY2stY2lyY2xlIHRleHQtc3VjY2VzcycsXG4gICAgICAgICAgICAnZXJyb3InICAgICA6ICd3aSB3aS1lcnJvciB0ZXh0LWRhbmdlcidcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHN0YXRlQ2xhc3NNYXBbc3RhdGUudG9Mb3dlckNhc2UoKV07XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBuYW1lOiAndGVtcGxhdGVSZXBsYWNlJ1xufSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZVJlcGxhY2VQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKGRhdGE6YW55LCByZXBsYWNlT2JqOmFueSkge1xuICAgICAgICByZXR1cm4gcmVwbGFjZShkYXRhLCByZXBsYWNlT2JqKTtcbiAgICB9XG59XG5cbkBQaXBlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIG5hbWU6ICdmaWxlRXh0ZW5zaW9uRnJvbU1pbWUnXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVFeHRlbnNpb25Gcm9tTWltZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0obWltZVR5cGU6IGFueSkge1xuICAgICAgICBjb25zdCB0eXBlTWFwcGluZyA9IHtcbiAgICAgICAgICAgICdhdWRpby9hYWMnOiAnLmFhYycsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24veC1hYml3b3JkJzogJy5hYncnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5hbmRyb2lkLnBhY2thZ2UtYXJjaGl2ZSc6ICcuYXBrJyxcbiAgICAgICAgICAgICd2aWRlby94LW1zdmlkZW8nOiAnLmF2aScsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLmFtYXpvbi5lYm9vayc6ICcuYXp3JyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOiAnLmJpbicsXG4gICAgICAgICAgICAnaW1hZ2UvYm1wJzogJy5ibXAnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtYnppcCc6ICcuYnonLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtYnppcDInOiAnLmJ6MicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24veC1jc2gnOiAnLmNzaCcsXG4gICAgICAgICAgICAndGV4dC9jc3MnOiAnLmNzcycsXG4gICAgICAgICAgICAndGV4dC9jc3YnOiAnLmNzdicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vbXN3b3JkJzogJy5kb2MnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JzogJy5kb2N4JyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCc6ICcuZW90JyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9lcHViK3ppcCc6ICcuZXB1YicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vZWNtYXNjcmlwdCc6ICcuZXMnLFxuICAgICAgICAgICAgJ2ltYWdlL2dpZic6ICcuZ2lmJyxcbiAgICAgICAgICAgICd0ZXh0L2h0bWwnOiAnLmh0bWwnLFxuICAgICAgICAgICAgJ2ltYWdlL3gtaWNvbic6ICcuaWNvJyxcbiAgICAgICAgICAgICd0ZXh0L2NhbGVuZGFyJzogJy5pY3MnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2phdmEtYXJjaGl2ZSc6ICcuamFyJyxcbiAgICAgICAgICAgICdpbWFnZS9qcGVnJzogWycuanBlZycsICcuanBnJ10sXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vamF2YXNjcmlwdCc6ICcuanMnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiAnLmpzb24nLFxuICAgICAgICAgICAgJ2F1ZGlvL21pZGknOiAnLm1pZCcsXG4gICAgICAgICAgICAnYXVkaW8veC1taWRpJzogJy5taWRpJyxcbiAgICAgICAgICAgICd2aWRlby9tcGVnJzogJy5tcGVnJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQuYXBwbGUuaW5zdGFsbGVyK3htbCc6ICdtcGtnJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnByZXNlbnRhdGlvbic6ICcub2RwJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0JzogJy5vZHMnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dCc6ICcub2R0JyxcbiAgICAgICAgICAgICdhdWRpby9vZ2cnOiAnLm9nYScsXG4gICAgICAgICAgICAndmlkZW8vb2dnJzogJy5vZ3YnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL29nZyc6ICcub2d4JyxcbiAgICAgICAgICAgICdmb250L290Zic6ICcub3RmJyxcbiAgICAgICAgICAgICdpbWFnZS9wbmcnOiAnLnBuZycsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vcGRmJzogJy5wZGYnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JzogJy5wcHQnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nOiAnLnBwdHgnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWQnOiAnLnJhcicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vcnRmJzogJy5ydGYnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtc2gnOiAnLnNoJyxcbiAgICAgICAgICAgICdpbWFnZS9zdmcreG1sJzogJy5zdmcnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoJzogJy5zd2YnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtdGFyJzogJy50YXInLFxuICAgICAgICAgICAgJ2ltYWdlL3RpZmYnOiAnLnRpZmYnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3R5cGVzY3JpcHQnOiAnLnRzJyxcbiAgICAgICAgICAgICdmb250L3R0Zic6ICcudHRmJyxcbiAgICAgICAgICAgICd0ZXh0L3BsYWluJzogJy50eHQnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC52aXNpbyc6ICcudnNkJyxcbiAgICAgICAgICAgICdhdWRpby93YXYnOiAnLndhdicsXG4gICAgICAgICAgICAnYXVkaW8vd2VibSc6ICcud2ViYScsXG4gICAgICAgICAgICAndmlkZW8vd2VibSc6ICcud2VibScsXG4gICAgICAgICAgICAnaW1hZ2Uvd2VicCc6ICcud2VicCcsXG4gICAgICAgICAgICAnZm9udC93b2ZmJzogJy53b2ZmJyxcbiAgICAgICAgICAgICdmb250L3dvZmYyJzogJy53b2ZmMicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24veGh0bWwreG1sJzogJy54aHRtbCcsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJzogJy54bHMnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JzogJy54bHN4JyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi94bWwnOiAnLnhtbCcsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLm1vemlsbGEueHVsK3htbCc6ICcueHVsJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi96aXAnOiAnLnppcCcsXG4gICAgICAgICAgICAndmlkZW8vM2dwcCc6ICcuM2dwJyxcbiAgICAgICAgICAgICdhdWRpby8zZ3BwJzogJy4zZ3AnLFxuICAgICAgICAgICAgJ3ZpZGVvLzNncHAyJzogJy4zZzInLFxuICAgICAgICAgICAgJ2F1ZGlvLzNncHAyJzogJy4zZzInLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZCc6ICcuN3onXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHR5cGVNYXBwaW5nW21pbWVUeXBlXTtcbiAgICB9XG59XG5cblxuIl19
|
|
473
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXBpcGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9iYXNlL3NyYy9waXBlcy9jdXN0b20tcGlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDdEgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxHLE9BQU8sS0FBSyxTQUFTLE1BQU0saUNBQWlDLENBQUM7Ozs7QUFFN0QsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFckQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUU7SUFDekIsSUFBSSxLQUFLLENBQUM7SUFDVixvR0FBb0c7SUFDcEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCx3RkFBd0Y7SUFDeEYsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxNQUFNLENBQUMs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aXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0ZVBpcGUsIERlY2ltYWxQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtBYnN0cmFjdEkxOG5TZXJ2aWNlLCBBcHAsIENVUlJFTkNZX0lORk8sIEN1c3RvbVBpcGVNYW5hZ2VyLCBoYXNPZmZzZXRTdHIsIGlzRGVmaW5lZCwgcmVwbGFjZX0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtXbVBpcGV9IGZyb20gXCIuL3dtLXBpcGVcIjtcbmltcG9ydCB7ZmlsdGVyLCBpbmNsdWRlcywgaXNEYXRlLCBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNVbmRlZmluZWQsIHN0YXJ0c1dpdGh9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuaW1wb3J0ICogYXMgbW9tZW50TGliIGZyb20gJ21vbWVudC10aW1lem9uZS9tb21lbnQtdGltZXpvbmUnO1xuXG5jb25zdCBtb21lbnQgPSBtb21lbnRMaWIuZGVmYXVsdCB8fCB3aW5kb3dbJ21vbWVudCddO1xuXG5jb25zdCBnZXRFcG9jaFZhbHVlID0gZGF0YSA9PiB7XG4gICAgbGV0IGVwb2NoO1xuICAgIC8vIEZvciBkYXRhIGluIGZvcm0gb2Ygc3RyaW5nIG51bWJlciAoJzEyMycpLCBjb252ZXJ0IHRvIG51bWJlciAoMTIzKS4gQW5kIGRvbid0IHBhcnNlIGRhdGUgb2JqZWN0cy5cbiAgICBpZiAoIWlzRGF0ZShkYXRhKSAmJiAhaXNOYU4oZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IHBhcnNlSW50KGRhdGEsIDEwKTtcbiAgICB9XG4gICAgLy8gZ2V0IHRoZSB0aW1lc3RhbXAgdmFsdWUuIElmIGRhdGEgaXMgdGltZSBzdHJpbmcsIGFwcGVuZCBkYXRlIHN0cmluZyB0byB0aGUgdGltZSB2YWx1ZVxuICAgIGVwb2NoID0gbW9tZW50KGRhdGEpLnZhbHVlT2YoKSB8fCBtb21lbnQobmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKSArICcgJyArIGRhdGEpLnZhbHVlT2YoKTtcbiAgICByZXR1cm4gZXBvY2g7XG59O1xuXG5AUGlwZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBuYW1lOiAndHJhaWxpbmdaZXJvRGVjaW1hbFBpcGUnXG59KVxuZXhwb3J0IGNsYXNzIFRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIHNlbGVjdGVkTG9jYWxlOiBzdHJpbmcsIG51bWJlcmZpbHRlcjogc3RyaW5nLCBsb2NhbGVmaWx0ZXI6IGFueSwgdHJhaWxpbmd6ZXJvOiBib29sZWFuLCBkZWNpbWFsVmFsdWU6IHN0cmluZywgc2tpcFRyYWlsaW5nWmVyb0NoZWNrPzogYm9vbGVhbiwgZm9ybWF0dGVkTG9jYWxlPyk6IGFueSB7XG4gICAgICAgIG51bWJlcmZpbHRlciA9IHRyYWlsaW5nemVybyAmJiAhc2tpcFRyYWlsaW5nWmVyb0NoZWNrID8gYDEuJHtkZWNpbWFsVmFsdWUubGVuZ3RofS0xNmA6IG51bWJlcmZpbHRlcjtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gZm9ybWF0dGVkTG9jYWxlID8gZm9ybWF0dGVkTG9jYWxlWydudW1iZXInXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKHZhbHVlLCBudW1iZXJmaWx0ZXIsIGxvY2FsZWZpbHRlciB8fCBsb2NhbGUgfHwgc2VsZWN0ZWRMb2NhbGUpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlKSB7IH1cblxufVxuXG5AUGlwZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ3RvRGF0ZSdcbn0pXG5leHBvcnQgY2xhc3MgVG9EYXRlUGlwZSBleHRlbmRzIFdtUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIC8vIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBjdXN0b20gZm9ybWF0dGVyIGZuIGFmdGVyIGFwcGx5aW5nIHRoZSBleGlzaXRuZyBkYXRlIHBhdHRlcm5cbiAgICByZXR1cm5GbihkYXRhLCBhcmdzLCB2YXJpYWJsZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDdXN0b21QaXBlKSB7XG4gICAgICAgICAgICBpZiAoYXJncykge1xuICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tRm9ybWF0dGVyKGRhdGEsIGFyZ3MsIHZhcmlhYmxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHRyYW5zZm9ybShkYXRhOiBhbnksIGZvcm1hdDogYW55LCB0aW1lem9uZT8sIGNvbXBJbnN0YW5jZT8pIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcDtcbiAgICAgICAgLy8gJ251bGwnIGlzIHRvIGJlIHRyZWF0ZWQgYXMgYSBzcGVjaWFsIGNhc2UsIElmIHVzZXIgd2FudHMgdG8gZW50ZXIgbnVsbCB2YWx1ZSwgZW1wdHkgc3RyaW5nIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBiYWNrZW5kXG4gICAgICAgIGlmIChkYXRhID09PSAnbnVsbCcgfHwgZGF0YSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybkZuKCcnLCBhcmd1bWVudHMsIHRoaXMuYXBwLlZhcmlhYmxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0RlZmluZWQoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybkZuKCcnLGFyZ3VtZW50cywgdGhpcy5hcHAuVmFyaWFibGVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aW1lc3RhbXAgPSBnZXRFcG9jaFZhbHVlKGRhdGEpO1xuICAgICAgICBpZiAodGltZXN0YW1wKSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAndGltZXN0YW1wJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybkZuKHRpbWVzdGFtcCwgYXJndW1lbnRzLCB0aGlzLmFwcC5WYXJpYWJsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ1VUQycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5GbihuZXcgRGF0ZSh0aW1lc3RhbXApLnRvSVNPU3RyaW5nKCksIGFyZ3VtZW50cywgdGhpcy5hcHAuVmFyaWFibGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBmb3JtYXR0ZWRWYWw7XG4gICAgICAgICAgICBjb25zdCB0aW1lWm9uZSA9IHRoaXMuaTE4blNlcnZpY2UgPyB0aGlzLmkxOG5TZXJ2aWNlLmdldFRpbWV6b25lKGNvbXBJbnN0YW5jZSkgOiB0aW1lem9uZTtcbiAgICAgICAgICAgIGlmICh0aW1lWm9uZSAmJiAoZGF0YSA9PT0gdGltZXN0YW1wIHx8IGhhc09mZnNldFN0cihkYXRhKSkpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWwgPSAobW9tZW50KHRpbWVzdGFtcCkgYXMgYW55KS50eih0aW1lWm9uZSkuZm9ybWF0KGZvcm1hdC5yZXBsYWNlQWxsKCd5JywgJ1knKS5yZXBsYWNlQWxsKCdkJywgJ0QnKS5yZXBsYWNlKCdhJywgJ0EnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRpbWVzdGFtcCwgZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybkZuKGZvcm1hdHRlZFZhbCwgYXJndW1lbnRzLCB0aGlzLmFwcC5WYXJpYWJsZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybkZuKCcnLCBhcmd1bWVudHMsdGhpcy5hcHAuVmFyaWFibGVzKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgICAgIHByaXZhdGUgaTE4blNlcnZpY2U6IEFic3RyYWN0STE4blNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBwOiBBcHAsXG4gICAgICAgIHByb3RlY3RlZCBjdXN0b21QaXBlTWFuYWdlcjogQ3VzdG9tUGlwZU1hbmFnZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIoJ3RvRGF0ZScsIGN1c3RvbVBpcGVNYW5hZ2VyKTtcbiAgICB9XG59XG5cbkBQaXBlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIG5hbWU6ICd0b051bWJlcidcbn0pXG5leHBvcnQgY2xhc3MgVG9OdW1iZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKGRhdGEsIGZyYWNTaXplKSB7XG4gICAgICAgIGlmIChmcmFjU2l6ZSAmJiAhU3RyaW5nKGZyYWNTaXplKS5tYXRjaCgvXihcXGQrKT9cXC4oKFxcZCspKC0oXFxkKykpPyk/JC8pKSB7XG4gICAgICAgICAgICBmcmFjU2l6ZSA9ICcxLicgKyBmcmFjU2l6ZSArICctJyArIGZyYWNTaXplO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOYU4oK2RhdGEpKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbGUgPSB0aGlzLmkxOG5TZXJ2aWNlICYmIHRoaXMuaTE4blNlcnZpY2UuZ2V0d2lkZ2V0TG9jYWxlKCkgPyB0aGlzLmkxOG5TZXJ2aWNlLmdldHdpZGdldExvY2FsZSgpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkTG9jYWxlID0gbG9jYWxlID8gbG9jYWxlWydudW1iZXInXSA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0oZGF0YSwgZnJhY1NpemUsIGZvcm1hdHRlZExvY2FsZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsICBASW5qZWN0KEFic3RyYWN0STE4blNlcnZpY2UpIHByaXZhdGUgaTE4blNlcnZpY2U6IEFic3RyYWN0STE4blNlcnZpY2UpIHtcbiAgICB9XG59XG5cbkBQaXBlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIG5hbWU6ICd0b0N1cnJlbmN5J1xufSlcbmV4cG9ydCBjbGFzcyBUb0N1cnJlbmN5UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShkYXRhLCBjdXJyZW5jeVN5bWJvbCwgZnJhY1NpemUpIHtcbiAgICAgICAgY29uc3QgX2N1cnJlbmN5U3ltYm9sID0gKENVUlJFTkNZX0lORk9bY3VycmVuY3lTeW1ib2xdIHx8IHt9KS5zeW1ib2wgfHwgY3VycmVuY3lTeW1ib2wgfHwgJyc7XG4gICAgICAgIGxldCBfdmFsID0gbmV3IFRvTnVtYmVyUGlwZSh0aGlzLmRlY2ltYWxQaXBlLCB0aGlzLmkxOG5TZXJ2aWNlKS50cmFuc2Zvcm0oZGF0YSwgZnJhY1NpemUpO1xuICAgICAgICBjb25zdCBpc05lZ2F0aXZlTnVtYmVyID0gc3RhcnRzV2l0aChfdmFsLCAnLScpO1xuICAgICAgICBpZiAoaXNOZWdhdGl2ZU51bWJlcikge1xuICAgICAgICAgICAgX3ZhbCA9IF92YWwucmVwbGFjZSgnLScsJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdmFsID8gaXNOZWdhdGl2ZU51bWJlciA/ICctJysgX2N1cnJlbmN5U3ltYm9sICtfdmFsIDpfY3VycmVuY3lTeW1ib2wgKyBfdmFsIDogJyc7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsIEBJbmplY3QoQWJzdHJhY3RJMThuU2VydmljZSkgcHJpdmF0ZSBpMThuU2VydmljZTogQWJzdHJhY3RJMThuU2VydmljZSkge1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ3ByZWZpeCdcbn0pXG5leHBvcnQgY2xhc3MgUHJlZml4UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShkYXRhLCBwYWRkaW5nKSB7XG4gICAgICAgIHJldHVybiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSAnJykgPyBkYXRhIDogKChwYWRkaW5nIHx8ICcnKSArIGRhdGEpO1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ3N1ZmZpeCdcbn0pXG5leHBvcnQgY2xhc3MgU3VmZml4UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShkYXRhLCBwYWRkaW5nKSB7XG4gICAgICAgIHJldHVybiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSAnJykgPyBkYXRhIDogKGRhdGEgKyAocGFkZGluZyB8fCAnJykpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEN1c3RvbSBwaXBlOiBJdCBpcyB3b3JrIGFzIGludGVyY2VwdG9yIGJldHdlZW4gdGhlIHVzZXIgY3VzdG9tIHBpcGUgZnVuY3Rpb24gYW5kIGFuZ3VsYXIgcGlwZVxuICovXG5AUGlwZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBuYW1lOiAnY3VzdG9tJ1xufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhcHA6IEFwcCwgcHJpdmF0ZSBjdXN0bWVVc2VyUGlwZTogQ3VzdG9tUGlwZU1hbmFnZXIpIHtcblxuICAgIH1cbiAgICB0cmFuc2Zvcm0oZGF0YSwgcGlwZW5hbWUpIHtcbiAgICAgICBsZXQgYXJndW1lbnRBcnIgPSBbXTtcbiAgICAgICBmb3IobGV0IGkgPTIgOyBpPGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApe1xuICAgICAgICBhcmd1bWVudEFyci5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICAgfVxuXG4gICAgICAgIGxldCBwaXBlUmVmID0gdGhpcy5jdXN0bWVVc2VyUGlwZS5nZXRDdXN0b21QaXBlKHBpcGVuYW1lKTtcbiAgICAgICAgaWYgKCFwaXBlUmVmIHx8ICFpc0Z1bmN0aW9uKHBpcGVSZWYuZm9ybWF0dGVyKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmb3JtYXR0ZXIgaXMgbm90IGRlZmluZWQsIHBsZWFzZSBjaGVjayB0aGUgY3VzdG9tIHBpcGVzIGRvY3VtZW50YXRpb24nKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgcmV0dXJuIHBpcGVSZWYuZm9ybWF0dGVyKGRhdGEsIC4uLmFyZ3VtZW50QXJyLCB0aGlzLmFwcC5WYXJpYWJsZXMpO1xuICAgICAgICB9IGNhdGNoKGVycm9yKXtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpcGUgbmFtZTogJytwaXBlbmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICB9XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBuYW1lOiAndGltZUZyb21Ob3cnXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVGcm9tTm93UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShkYXRhKSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXA7XG4gICAgICAgIGlmICghaXNEZWZpbmVkKGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRpbWVzdGFtcCA9IGdldEVwb2NoVmFsdWUoZGF0YSk7XG4gICAgICAgIHJldHVybiB0aW1lc3RhbXAgPyBtb21lbnQodGltZXN0YW1wKS5mcm9tTm93KCkgOiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBuYW1lOiAnbnVtYmVyVG9TdHJpbmcnXG59KVxuZXhwb3J0IGNsYXNzIE51bWJlclRvU3RyaW5nUGlwZSBleHRlbmRzIFRvTnVtYmVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0geyB9XG5cbkBQaXBlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIG5hbWU6ICdzdHJpbmdUb051bWJlcidcbn0pXG5leHBvcnQgY2xhc3MgU3RyaW5nVG9OdW1iZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIE51bWJlcihkYXRhKSB8fCB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBuYW1lOiAnZmlsdGVyJ1xufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKGRhdGE6IGFueVtdLCBmaWVsZDogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG9iamVjdCBpcyBwYXNzZWQgYXMgZmlyc3QgcGFyYW10ZXJcbiAgICAgICAgaWYgKGlzT2JqZWN0KGZpZWxkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcihkYXRhLCBmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYga2V5IHZhbHVlIHBhaXIgaXMgcHJvdmlkZWRcbiAgICAgICAgcmV0dXJuIGZpbHRlcihkYXRhLCBpdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpbmNsdWRlcyhpdGVtW2ZpZWxkXSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbkBQaXBlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIG5hbWU6ICdmaWxlc2l6ZSdcbn0pXG5leHBvcnQgY2xhc3MgRmlsZVNpemVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKGJ5dGVzOiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHVuaXRzID0gW1xuICAgICAgICAgICAgJ2J5dGVzJyxcbiAgICAgICAgICAgICdLQicsXG4gICAgICAgICAgICAnTUInLFxuICAgICAgICAgICAgJ0dCJyxcbiAgICAgICAgICAgICdUQicsXG4gICAgICAgICAgICAnUEInXG4gICAgICAgIF07XG5cbiAgICAgICAgLypUb2RvW3NodWJoYW1dXG4gICAgICAgIGlmIChpc05hTihwYXJzZUZsb2F0KGJ5dGVzKSkgfHwgIWlzRmluaXRlKGJ5dGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTW9iaWxlKCkgPyAnJyA6ICc/JztcbiAgICAgICAgfSovXG4gICAgICAgIGxldCB1bml0ID0gMDtcbiAgICAgICAgd2hpbGUgKGJ5dGVzID49IDEwMjQpIHtcbiAgICAgICAgICAgIGJ5dGVzIC89IDEwMjQ7XG4gICAgICAgICAgICB1bml0Kys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ5dGVzLnRvRml4ZWQoK3ByZWNpc2lvbikgKyAnICcgKyB1bml0c1t1bml0XTtcbiAgICB9XG59XG5cbkBQaXBlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIG5hbWU6ICdmaWxlSWNvbkNsYXNzJ1xufSlcbmV4cG9ydCBjbGFzcyBGaWxlSWNvbkNsYXNzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShmaWxlRXh0ZW5zaW9uOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZmlsZUNsYXNzTWFwcGluZyA9IHtcbiAgICAgICAgICAgICd6aXAnICAgICAgIDogICAnZmEtZmlsZS16aXAtbycsXG4gICAgICAgICAgICAncGRmJyAgICAgICA6ICAgJ2ZhLWZpbGUtcGRmLW8nLFxuICAgICAgICAgICAgJ3JhcicgICAgICAgOiAgICdmYS1maWxlLWFyY2hpdmUtbycsXG4gICAgICAgICAgICAndHh0JyAgICAgICA6ICAgJ2ZhLWZpbGUtdGV4dC1vJyxcbiAgICAgICAgICAgICdwcHQnICAgICAgIDogICAnZmEtZmlsZS1wb3dlcnBvaW50LW8nLFxuICAgICAgICAgICAgJ3BvdCcgICAgICAgOiAgICdmYS1maWxlLXBvd2VycG9pbnQtbycsXG4gICAgICAgICAgICAncHBzJyAgICAgICA6ICAgJ2ZhLWZpbGUtcG93ZXJwb2ludC1vJyxcbiAgICAgICAgICAgICdwcHR4JyAgICAgIDogICAnZmEtZmlsZS1wb3dlcnBvaW50LW8nLFxuICAgICAgICAgICAgJ3BvdHgnICAgICAgOiAgICdmYS1maWxlLXBvd2VycG9pbnQtbycsXG4gICAgICAgICAgICAncHBzeCcgICAgICA6ICAgJ2ZhLWZpbGUtcG93ZXJwb2ludC1vJyxcbiAgICAgICAgICAgICdtcGcnICAgICAgIDogICAnZmEtZmlsZS1tb3ZpZS1vJyxcbiAgICAgICAgICAgICdtcDQnICAgICAgIDogICAnZmEtZmlsZS1tb3ZpZS1vJyxcbiAgICAgICAgICAgICdtb3YnICAgICAgIDogICAnZmEtZmlsZS1tb3ZpZS1vJyxcbiAgICAgICAgICAgICdhdmknICAgICAgIDogICAnZmEtZmlsZS1tb3ZpZS1vJyxcbiAgICAgICAgICAgICdtcDMnICAgICAgIDogICAnZmEtZmlsZS1hdWRpby1vJyxcbiAgICAgICAgICAgICdkb2N4JyAgICAgIDogICAnZmEtZmlsZS13b3JkLW8nLFxuICAgICAgICAgICAgJ2pzJyAgICAgICAgOiAgICdmYS1maWxlLWNvZGUtbycsXG4gICAgICAgICAgICAnbWQnICAgICAgICA6ICAgJ2ZhLWZpbGUtY29kZS1vJyxcbiAgICAgICAgICAgICdodG1sJyAgICAgIDogICAnZmEtZmlsZS1jb2RlLW8nLFxuICAgICAgICAgICAgJ2NzcycgICAgICAgOiAgICdmYS1maWxlLWNvZGUtbycsXG4gICAgICAgICAgICAneGxzeCcgICAgICA6ICAgJ2ZhLWZpbGUtZXhjZWwtbycsXG4gICAgICAgICAgICAncG5nJyAgICAgICA6ICAgJ2ZhLWZpbGUtaW1hZ2UtbycsXG4gICAgICAgICAgICAnanBnJyAgICAgICA6ICAgJ2ZhLWZpbGUtaW1hZ2UtbycsXG4gICAgICAgICAgICAnanBlZycgICAgICA6ICAgJ2ZhLWZpbGUtaW1hZ2UtbycsXG4gICAgICAgICAgICAnZmlsZScgICAgICA6ICAgJ2ZhLWZpbGUtbycsXG4gICAgICAgICAgICAnZGVmYXVsdCcgICA6ICAgJ2ZhLWZpbGUtbydcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gJ2ZhICcgKyAoZmlsZUNsYXNzTWFwcGluZ1tmaWxlRXh0ZW5zaW9uXSB8fCAnZmEtZmlsZS1vJyk7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBuYW1lOiAnc3RhdGVDbGFzcydcbn0pXG5leHBvcnQgY2xhc3MgU3RhdGVDbGFzc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0oc3RhdGUpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVDbGFzc01hcCA9IHtcbiAgICAgICAgICAgICdzdWNjZXNzJzogJ3dpIHdpLWNoZWNrLWNpcmNsZSB0ZXh0LXN1Y2Nlc3MnLFxuICAgICAgICAgICAgJ2Vycm9yJyAgICAgOiAnd2kgd2ktZXJyb3IgdGV4dC1kYW5nZXInXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdGF0ZUNsYXNzTWFwW3N0YXRlLnRvTG93ZXJDYXNlKCldO1xuICAgIH1cbn1cblxuQFBpcGUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ3RlbXBsYXRlUmVwbGFjZSdcbn0pXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVSZXBsYWNlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShkYXRhOmFueSwgcmVwbGFjZU9iajphbnkpIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2UoZGF0YSwgcmVwbGFjZU9iaik7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBuYW1lOiAnZmlsZUV4dGVuc2lvbkZyb21NaW1lJ1xufSlcbmV4cG9ydCBjbGFzcyBGaWxlRXh0ZW5zaW9uRnJvbU1pbWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKG1pbWVUeXBlOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdHlwZU1hcHBpbmcgPSB7XG4gICAgICAgICAgICAnYXVkaW8vYWFjJzogJy5hYWMnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtYWJpd29yZCc6ICcuYWJ3JyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQuYW5kcm9pZC5wYWNrYWdlLWFyY2hpdmUnOiAnLmFwaycsXG4gICAgICAgICAgICAndmlkZW8veC1tc3ZpZGVvJzogJy5hdmknLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5hbWF6b24uZWJvb2snOiAnLmF6dycsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzogJy5iaW4nLFxuICAgICAgICAgICAgJ2ltYWdlL2JtcCc6ICcuYm1wJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LWJ6aXAnOiAnLmJ6JyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LWJ6aXAyJzogJy5iejInLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtY3NoJzogJy5jc2gnLFxuICAgICAgICAgICAgJ3RleHQvY3NzJzogJy5jc3MnLFxuICAgICAgICAgICAgJ3RleHQvY3N2JzogJy5jc3YnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL21zd29yZCc6ICcuZG9jJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCc6ICcuZG9jeCcsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnOiAnLmVvdCcsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vZXB1Yit6aXAnOiAnLmVwdWInLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2VjbWFzY3JpcHQnOiAnLmVzJyxcbiAgICAgICAgICAgICdpbWFnZS9naWYnOiAnLmdpZicsXG4gICAgICAgICAgICAndGV4dC9odG1sJzogJy5odG1sJyxcbiAgICAgICAgICAgICdpbWFnZS94LWljb24nOiAnLmljbycsXG4gICAgICAgICAgICAndGV4dC9jYWxlbmRhcic6ICcuaWNzJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmUnOiAnLmphcicsXG4gICAgICAgICAgICAnaW1hZ2UvanBlZyc6IFsnLmpwZWcnLCAnLmpwZyddLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnOiAnLmpzJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJzogJy5qc29uJyxcbiAgICAgICAgICAgICdhdWRpby9taWRpJzogJy5taWQnLFxuICAgICAgICAgICAgJ2F1ZGlvL3gtbWlkaSc6ICcubWlkaScsXG4gICAgICAgICAgICAndmlkZW8vbXBlZyc6ICcubXBlZycsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLmFwcGxlLmluc3RhbGxlcit4bWwnOiAnbXBrZycsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5wcmVzZW50YXRpb24nOiAnLm9kcCcsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCc6ICcub2RzJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQnOiAnLm9kdCcsXG4gICAgICAgICAgICAnYXVkaW8vb2dnJzogJy5vZ2EnLFxuICAgICAgICAgICAgJ3ZpZGVvL29nZyc6ICcub2d2JyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9vZ2cnOiAnLm9neCcsXG4gICAgICAgICAgICAnZm9udC9vdGYnOiAnLm90ZicsXG4gICAgICAgICAgICAnaW1hZ2UvcG5nJzogJy5wbmcnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3BkZic6ICcucGRmJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCc6ICcucHB0JyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJzogJy5wcHR4JyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkJzogJy5yYXInLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3J0Zic6ICcucnRmJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXNoJzogJy5zaCcsXG4gICAgICAgICAgICAnaW1hZ2Uvc3ZnK3htbCc6ICcuc3ZnJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCc6ICcuc3dmJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXRhcic6ICcudGFyJyxcbiAgICAgICAgICAgICdpbWFnZS90aWZmJzogJy50aWZmJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi90eXBlc2NyaXB0JzogJy50cycsXG4gICAgICAgICAgICAnZm9udC90dGYnOiAnLnR0ZicsXG4gICAgICAgICAgICAndGV4dC9wbGFpbic6ICcudHh0JyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQudmlzaW8nOiAnLnZzZCcsXG4gICAgICAgICAgICAnYXVkaW8vd2F2JzogJy53YXYnLFxuICAgICAgICAgICAgJ2F1ZGlvL3dlYm0nOiAnLndlYmEnLFxuICAgICAgICAgICAgJ3ZpZGVvL3dlYm0nOiAnLndlYm0nLFxuICAgICAgICAgICAgJ2ltYWdlL3dlYnAnOiAnLndlYnAnLFxuICAgICAgICAgICAgJ2ZvbnQvd29mZic6ICcud29mZicsXG4gICAgICAgICAgICAnZm9udC93b2ZmMic6ICcud29mZjInLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3hodG1sK3htbCc6ICcueGh0bWwnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCc6ICcueGxzJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCc6ICcueGxzeCcsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24veG1sJzogJy54bWwnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5tb3ppbGxhLnh1bCt4bWwnOiAnLnh1bCcsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vemlwJzogJy56aXAnLFxuICAgICAgICAgICAgJ3ZpZGVvLzNncHAnOiAnLjNncCcsXG4gICAgICAgICAgICAnYXVkaW8vM2dwcCc6ICcuM2dwJyxcbiAgICAgICAgICAgICd2aWRlby8zZ3BwMic6ICcuM2cyJyxcbiAgICAgICAgICAgICdhdWRpby8zZ3BwMic6ICcuM2cyJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnOiAnLjd6J1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0eXBlTWFwcGluZ1ttaW1lVHlwZV07XG4gICAgfVxufVxuXG5cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { forwardRef } from '@angular/core';
|
|
2
|
-
import { $parseExpr, _WM_APP_PROJECT, checkIsCustomPipeExpression, deHyphenate, encodeUrl, FormWidgetType, getClonedObject, initCaps, isValidWebURL, prettifyLabel, stringStartsWith } from '@wm/core';
|
|
2
|
+
import { $parseExpr, _WM_APP_PROJECT, checkIsCustomPipeExpression, deHyphenate, encodeUrl, FormWidgetType, getClonedObject, initCaps, isValidImageUrl, isValidWebURL, prettifyLabel, stringStartsWith } from '@wm/core';
|
|
3
3
|
import { DialogRef, WidgetRef } from '../widgets/framework/types';
|
|
4
4
|
import { createFocusTrap } from '@wavemaker/focus-trap';
|
|
5
5
|
import { assignWith, forEach, get, includes, isArray, isNull, isObject, isString, join, split, union } from "lodash-es";
|
|
@@ -170,7 +170,7 @@ export const getImageUrl = (urlString, shouldEncode, defaultUrl) => {
|
|
|
170
170
|
urlString = (defaultUrl || 'resources/images/imagelists/default-image.png');
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
|
-
if (urlString && !_WM_APP_PROJECT.isPreview && !
|
|
173
|
+
if (urlString && !_WM_APP_PROJECT.isPreview && !isValidImageUrl(urlString) && !urlString.startsWith(_WM_APP_PROJECT.cdnUrl) && !urlString.startsWith('services')) {
|
|
174
174
|
urlString = (_WM_APP_PROJECT.cdnUrl || '') + urlString;
|
|
175
175
|
}
|
|
176
176
|
urlString = shouldEncode ? encodeUrl(urlString) : urlString;
|
|
@@ -485,4 +485,4 @@ export const getKeyboardFocusableElements = (element) => {
|
|
|
485
485
|
&& (!el.hasAttribute('tabindex') || (el.hasAttribute('tabindex') && !el.getAttribute("tabindex").startsWith('-'))));
|
|
486
486
|
});
|
|
487
487
|
};
|
|
488
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9iYXNlL3NyYy91dGlscy93aWRnZXQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQ0gsVUFBVSxFQUNWLGVBQWUsRUFDZiwyQkFBMkIsRUFDM0IsV0FBVyxFQUNYLFNBQVMsRUFDVCxjQUFjLEVBQ2QsZUFBZSxFQUNmLFFBQVEsRUFDUixhQUFhLEVBQ2IsYUFBYSxFQUNiLGdCQUFnQixFQUNuQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUV0SCxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsUUFBUTtJQUN2RyxjQUFjLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hJOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQ3BDLElBQUksT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENB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QGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgJHBhcnNlRXhwcixcbiAgICBfV01fQVBQX1BST0pFQ1QsXG4gICAgY2hlY2tJc0N1c3RvbVBpcGVFeHByZXNzaW9uLFxuICAgIGRlSHlwaGVuYXRlLFxuICAgIGVuY29kZVVybCxcbiAgICBGb3JtV2lkZ2V0VHlwZSxcbiAgICBnZXRDbG9uZWRPYmplY3QsXG4gICAgaW5pdENhcHMsXG4gICAgaXNWYWxpZFdlYlVSTCxcbiAgICBwcmV0dGlmeUxhYmVsLFxuICAgIHN0cmluZ1N0YXJ0c1dpdGhcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtEaWFsb2dSZWYsIFdpZGdldFJlZn0gZnJvbSAnLi4vd2lkZ2V0cy9mcmFtZXdvcmsvdHlwZXMnO1xuaW1wb3J0IHtjcmVhdGVGb2N1c1RyYXB9IGZyb20gJ0B3YXZlbWFrZXIvZm9jdXMtdHJhcCc7XG5pbXBvcnQge05hdk5vZGV9IGZyb20gXCIuLi93aWRnZXRzL2NvbW1vbi9iYXNlL2RhdGFzZXQtYXdhcmUtbmF2LmNvbXBvbmVudFwiO1xuaW1wb3J0IHthc3NpZ25XaXRoLCBmb3JFYWNoLCBnZXQsIGluY2x1ZGVzLCBpc0FycmF5LCBpc051bGwsIGlzT2JqZWN0LCBpc1N0cmluZywgam9pbiwgc3BsaXQsIHVuaW9ufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IERBVEFTRVRfV0lER0VUUyA9IG5ldyBTZXQoW0Zvcm1XaWRnZXRUeXBlLlNFTEVDVCwgRm9ybVdpZGdldFR5cGUuQ0hFQ0tCT1hTRVQsIEZvcm1XaWRnZXRUeXBlLlJBRElPU0VULFxuICAgIEZvcm1XaWRnZXRUeXBlLlNXSVRDSCwgRm9ybVdpZGdldFR5cGUuQVVUT0NPTVBMRVRFLCBGb3JtV2lkZ2V0VHlwZS5DSElQUywgRm9ybVdpZGdldFR5cGUuVFlQRUFIRUFELCBGb3JtV2lkZ2V0VHlwZS5SQVRJTkddKTtcbi8qKlxuICogUmV0dXJucyB0aGUgcGFyc2VkLCB1cGRhdGVkIGJvdW5kIGV4cHJlc3Npb25cbiAqIGlmIHRoZSBleHByZXNzaW9uIGlzICRbZGF0YVskaV1bZmlyc3ROYW1lXV0gKyAnLS0nICsgJFtsYXN0TmFtZV0gKyAnLS0nICsgJFsnQElEQCddXG4gKiByZXR1cm5zIF9fMS5maXJzdE5hbWUgKyAnLS0nICsgbGFzdE5hbWUgKyAnLS0nICsgX18xWydASURAJ11cbiAqL1xuY29uc3QgZ2V0VXBkYXRlZEV4cHIgPSAoZXhwcjogc3RyaW5nKSA9PiB7XG4gICAgbGV0IHVwZGF0ZWQgPSAnJywgY2gsIG5leHQsIGksIGosIG1hdGNoQ2gsIG1hdGNoQ291bnQsIGlzUXVvdGVkU3RyLCBzdWJTdHIsIGlzUXVvdGVkU3RyRXZhbHVhdGVkO1xuXG4gICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXFwkXFxbZGF0YVxcW1xcJGlcXF0vZywgJyRbX18xJyk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZXhwci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjaCA9IGV4cHJbaV07XG4gICAgICAgIG5leHQgPSBleHByW2kgKyAxXTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogaWYgdGhlIGV4cHJlc3Npb24gc3RhcnRzIHdpdGggJFssIGNoZWNrIHRoZSBuZXh0KGNoKSBjaGFyYWN0ZXIsXG4gICAgICAgICAqICAgIGlmIGNoIGlzIGEgcXVvdGUoJywgXCIpIGNoYW5nZSB0aGUgZXhwciB0byBfX1tcbiAgICAgICAgICogICAgaWYgY2ggaXMgYSB3aGl0ZVNwYWNlLCByZW1vdmUgaXRcbiAgICAgICAgICogICAgZWxzZSByZW1vdmUgJFtcbiAgICAgICAgICovXG4gICAgICAgIGlmIChjaCA9PT0gJyQnICYmIG5leHQgPT09ICdbJykge1xuICAgICAgICAgICAgbWF0Y2hDb3VudCA9IDE7XG4gICAgICAgICAgICBpc1F1b3RlZFN0ckV2YWx1YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaXNRdW90ZWRTdHIgPSBmYWxzZTtcblxuICAgICAgICAgICAgZm9yIChqID0gaSArIDI7IGogPCBleHByLmxlbmd0aDsgaisrKSB7XG5cbiAgICAgICAgICAgICAgICBtYXRjaENoID0gZXhwcltqXTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaENoID09PSAnICcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFpc1F1b3RlZFN0ckV2YWx1YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBpc1F1b3RlZFN0ciA9IGV4cHJbal0gPT09ICdcIicgfHwgZXhwcltqXSA9PT0gJ1xcJyc7XG4gICAgICAgICAgICAgICAgICAgIGlzUXVvdGVkU3RyRXZhbHVhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hDaCA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoQ291bnQrKztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoQ2ggPT09ICddJykge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaENvdW50LS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaENvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YlN0ciA9IGV4cHIuc3Vic3RyaW5nKGkgKyAyLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUXVvdGVkU3RyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkICs9ICdfXzFbJyArIHN1YlN0ciArICddJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgKz0gc3ViU3RyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cGRhdGVkICs9IGNoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUgcHJvdmlkZWQga2V5IGluIHRoZSBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE9ialZhbHVlQnlLZXkgPSAob2JqOiBhbnksIHN0cktleTogc3RyaW5nKSA9PiB7XG4gICAgLyogY2hlY2sgZm9yIHRoZSBrZXktc3RyaW5nICovXG4gICAgaWYgKHN0cktleSkge1xuICAgICAgICBsZXQgdmFsO1xuICAgICAgICAvKiBjb252ZXJ0IGluZGV4ZXMgdG8gcHJvcGVydGllcywgc28gYXMgdG8gd29yayBmb3IgZXZlbiAna2V5MVswXS5jaGlsZDEnKi9cbiAgICAgICAgc3RyS2V5LnJlcGxhY2UoL1xcWyhcXHcrKVxcXS9nLCAnLiQxJykuc3BsaXQoJy4nKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAvLyBJZiBvYmogaXMgbnVsbCwgdGhlbiBhc3NpZ24gdmFsIHRvIG51bGwuXG4gICAgICAgICAgICB2YWwgPSAodmFsICYmIHZhbFtrZXldKSB8fCAoaXNOdWxsKG9iaikgPyBvYmogOiBvYmpba2V5XSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufTtcblxuLyoqXG4gKiByZXR1cm5zIHRoZSBkaXNwbGF5IGZpZWxkIGRhdGEgZm9yIGFueSBkYXRhc2V0IHdpZGdldHNcbiAqIEJhc2VkIG9uIHRoZSBiaW5kIGRpc3BsYXkgZXhwcmVzc2lvbiBvciBkaXNwbGF5IGV4cHJlc3Npb24gb3IgZGlzcGxheSBuYW1lLFxuICogZGF0YSBpcyBleHRyYWN0ZWQgYW5kIGZvcm1hdHRlZCBmcm9tIHRoZSBwYXNzZWQgb3B0aW9uIG9iamVjdFxuICogSWYgdGhlcmUgaXMgZmllbGQgaXMgc3BlY2lmaWVkLCBmaWVsZCB2YWx1ZSBpcyBvYnRhaW5lZCBmcm9tIHRoZSBkYXRhT2JqLlxuICogSWYgZXhwcmVzc2lvbiBpcyBnaXZlbiwgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIHZhbHVlLlxuICogZWxzZSBjaGVjayBmb3IgYmluZEV4cHJlc3Npb24sIGV4dHJhY3QgdGhlIHZhbHVlIGZyb20gdGhlIGRhdGFPYmpcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV2YWx1YXRlZERhdGEgPSAoZGF0YU9iajogYW55LCBvcHRpb25zOiBhbnksIGNvbnRleHQ/OiBhbnkpID0+IHtcbiAgICBsZXQgZXhwcmVzc2lvblZhbHVlO1xuICAgIGNvbnN0IGZpZWxkID0gb3B0aW9ucy5maWVsZCxcbiAgICAgICAgZXhwciA9IG9wdGlvbnMuZXhwcmVzc2lvbixcbiAgICAgICAgYmluZEV4cHIgPSBvcHRpb25zLmJpbmRFeHByZXNzaW9uO1xuXG4gICAgLy8gaWYga2V5IGlzIGJvdW5kIGV4cHJlc3Npb25cbiAgICBpZiAoYmluZEV4cHIpIHtcbiAgICAgICAgLy8gcmVtb3ZlICdiaW5kOicgcHJlZml4IGZyb20gdGhlIGJvdW5kRXhwcmVzc2lvbk5hbWVcbiAgICAgICAgZXhwcmVzc2lvblZhbHVlID0gYmluZEV4cHIucmVwbGFjZSgnYmluZDonLCAnJyk7XG5cbiAgICAgICAgLy8gRm9yIGJpbmQgZXhwcmVzc2lvbiBwYXNzaW5nIHRoZSBsYXN0IGFyZ3VtZW50IHRoYXQgdGhlIG9iamVjdCBvZiBkYXRhc2V0IGl0ZW0uXG4gICAgICAgIC8vIE5vdGU6IEZvciBwYXJzZSBleHByZXNzaW9uIHdlIGFyZSBzZW5kaW5nIGRhdGFPYmogd2l0aCB0aGUgcHJvcGVyeSBuYW1lIFwiX18xXCIsIHdlIHVzZWQgdGhlIHNhbWUgcHJvcGVyeSB0byBzZW5kIHRoZSBsYXN0IGFyZ3VtZW50IGFzIGRhdGFzZXQgaXRlbVxuICAgICAgICBpZihjaGVja0lzQ3VzdG9tUGlwZUV4cHJlc3Npb24oZXhwcmVzc2lvblZhbHVlKSl7XG4gICAgICAgICAgICBleHByZXNzaW9uVmFsdWUgPSBleHByZXNzaW9uVmFsdWUrJzogX18xJztcbiAgICAgICAgfVxuICAgICAgICAvLyBwYXJzZSB0aGUgZXhwcmVzc2lvblZhbHVlIGZvciByZXBsYWNpbmcgYWxsIHRoZSBleHByZXNzaW9ucyB3aXRoIHZhbHVlcyBpbiB0aGUgb2JqZWN0XG4gICAgICAgIGV4cHJlc3Npb25WYWx1ZSA9IGdldFVwZGF0ZWRFeHByKGV4cHJlc3Npb25WYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXhwcmVzc2lvblZhbHVlID0gZXhwciA/IGV4cHIgOiBmaWVsZDtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGluZyBmaWVsZCBuYW1lIHdpdGggc3BlY2lhbCBjaGFyZWN0ZXJzXG4gICAgLy8gRXg6IGZpZWxkID0gXCJmIG5hbWVcIlxuICAgIGlmICghYmluZEV4cHIgJiYgIWV4cHIpIHtcbiAgICAgICAgcmV0dXJuIGdldChkYXRhT2JqLCBmaWVsZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICRwYXJzZUV4cHIoZXhwcmVzc2lvblZhbHVlKShjb250ZXh0LCBPYmplY3QuYXNzaWduKHt9LCBkYXRhT2JqLCB7X18xOiBkYXRhT2JqfSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQWN0aXZlTmF2SXRlbSA9IChsaW5rLCByb3V0ZU5hbWUpID0+IHtcbiAgICBpZiAoIWxpbmsgfHwgIXJvdXRlTmFtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJvdXRlTmFtZSA9IHJvdXRlTmFtZS5pbmRleE9mKCc/JykgPT09IC0xID8gcm91dGVOYW1lIDogcm91dGVOYW1lLnN1YnN0cmluZygwLCByb3V0ZU5hbWUuaW5kZXhPZignPycpKTtcbiAgICBsaW5rID0gbGluay5pbmRleE9mKCc/JykgPT09IC0xID8gbGluayA6IGxpbmsuc3Vic3RyaW5nKDAsIGxpbmsuaW5kZXhPZignPycpKTtcbiAgICBjb25zdCByb3V0ZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXigjXFwvfCMpJyArIHJvdXRlTmFtZSArICckJyk7XG4gICAgcmV0dXJuIHJvdXRlUmVnZXgudGVzdChsaW5rKTtcbn07XG5cbi8qKlxuKiByZXR1cm5zIHRydWUgaWYgdGhlIG1lbnUgaGFzIGxpbmsgdG8gdGhlIGN1cnJlbnQgcGFnZS5cbiogQHBhcmFtIG5vZGVzXG4qIEBwYXJhbSByb3V0ZVVybFxuKi9cbmV4cG9ydCBjb25zdCBoYXNMaW5rVG9DdXJyZW50UGFnZSA9IChub2RlczogQXJyYXk8TmF2Tm9kZT4sIHJvdXRlVXJsKSA9PiB7XG4gICAgcmV0dXJuIG5vZGVzLnNvbWUobm9kZSA9PiB7XG4gICAgICAgIGlmIChpc0FjdGl2ZU5hdkl0ZW0obm9kZS5saW5rLCByb3V0ZVVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFzTGlua1RvQ3VycmVudFBhZ2Uobm9kZS5jaGlsZHJlbiwgcm91dGVVcmwpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JkZXJCeSBFeHByZXNzaW9uIGJhc2VkIG9uIHRoZSAnc29ydCAnb3B0aW9uIGluIHBhZ2VhYmxlIG9iamVjdFxuICogcmV0dXJuZWQgYnkgYmFja2VuZFxuICogQHBhcmFtIHBhZ2VhYmxlT2JqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgZ2V0T3JkZXJCeUV4cHIgPSBwYWdlYWJsZU9iaiA9PiB7XG4gICAgcGFnZWFibGVPYmogPSBwYWdlYWJsZU9iaiB8fCBbXTtcbiAgICBjb25zdCBleHByZXNzaW9ucyAgICAgICA9IFtdLFxuICAgICAgICBLRVlfVkFMX1NFUEFSQVRPUiA9ICcgJyxcbiAgICAgICAgRklFTERfU0VQQVJBVE9SICAgPSAnLCc7XG4gICAgZm9yRWFjaChwYWdlYWJsZU9iaiwgb2JqID0+IHtcbiAgICAgICAgaWYgKG9iai5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2gob2JqLnByb3BlcnR5ICsgS0VZX1ZBTF9TRVBBUkFUT1IgKyBvYmouZGlyZWN0aW9uLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gam9pbihleHByZXNzaW9ucywgRklFTERfU0VQQVJBVE9SKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RhdGFTZXRXaWRnZXQgPSB3aWRnZXQgPT4ge1xuICAgIHJldHVybiBEQVRBU0VUX1dJREdFVFMuaGFzKHdpZGdldCk7XG59O1xuXG4vKlRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdXJsIHRvIHRoZSBpbWFnZSBhZnRlciBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgdXJsKi9cbmV4cG9ydCBjb25zdCBnZXRJbWFnZVVybCA9ICh1cmxTdHJpbmcsIHNob3VsZEVuY29kZT8sIGRlZmF1bHRVcmw/KSA9PiB7XG4gICAgLypJbiBzdHVkaW8gbW9kZSBiZWZvcmUgc2V0dGluZyBwaWN0dXJlc291cmNlLCBjaGVjayBpZiB0aGUgc3R1ZGlvQ29udHJvbGxlciBpcyBsb2FkZWQgYW5kIG5ldyBwaWN0dXJlc291cmNlIGlzIGluICdzdHlsZXMvaW1hZ2VzLycgcGF0aCBvciBub3QuXG4gICAgICogV2hlbiBwYWdlIGlzIHJlZnJlc2hlZCwgbG9hZGVyLmdpZiB3aWxsIGJlIGxvYWRlZCBmaXJzdCBhbmQgaXQgd2lsbCBiZSBpbiAnc3R5bGUvaW1hZ2VzLycuXG4gICAgICogUHJlcGVuZCAnc2VydmljZXMvcHJvamVjdHMvJyArICRyb290U2NvcGUucHJvamVjdC5pZCArICcvd2ViL3Jlc291cmNlcy9pbWFnZXMvaW1hZ2VsaXN0cy8nICBpZiB0aGUgaW1hZ2UgdXJsIGlzIGp1c3QgaW1hZ2UgbmFtZSBpbiB0aGUgcHJvamVjdCByb290LFxuICAgICAqIGFuZCBpZiB0aGUgdXJsIHBvaW50aW5nIHRvIHJlc291cmNlcy9pbWFnZXMvIHRoZW4gJ3NlcnZpY2VzL3Byb2plY3RzLycgKyAkcm9vdFNjb3BlLnByb2plY3QuaWQgKyAnL3dlYi8nKi9cbiAgICBpZiAoaXNWYWxpZFdlYlVSTCh1cmxTdHJpbmcpKSB7XG4gICAgICAgIHJldHVybiB1cmxTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQgZm9yIHBpY3R1cmVzb3VyY2UgYXNzaWduIHBpY3R1cmVwbGFjZWhvbGRlciBvciBkZWZhdWx0LWltYWdlXG4gICAgaWYgKCF1cmxTdHJpbmcpIHtcbiAgICAgICAgaWYgKGlzVmFsaWRXZWJVUkwoZGVmYXVsdFVybCkpIHtcbiAgICAgICAgICAgIHVybFN0cmluZyA9IGRlZmF1bHRVcmw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmxTdHJpbmcgPSAgICggZGVmYXVsdFVybCB8fCAncmVzb3VyY2VzL2ltYWdlcy9pbWFnZWxpc3RzL2RlZmF1bHQtaW1hZ2UucG5nJyApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh1cmxTdHJpbmcgJiYgIV9XTV9BUFBfUFJPSkVDVC5pc1ByZXZpZXcgJiYgIWlzVmFsaWRXZWJVUkwodXJsU3RyaW5nKSAmJiAhdXJsU3RyaW5nLnN0YXJ0c1dpdGgoX1dNX0FQUF9QUk9KRUNULmNkblVybCkpIHtcbiAgICAgICAgdXJsU3RyaW5nID0gKF9XTV9BUFBfUFJPSkVDVC5jZG5VcmwgfHwgJycpICsgdXJsU3RyaW5nO1xuICAgIH1cblxuICAgIHVybFN0cmluZyA9IHNob3VsZEVuY29kZSA/IGVuY29kZVVybCh1cmxTdHJpbmcpIDogdXJsU3RyaW5nO1xuXG4gICAgLy8gaWYgdGhlIHJlc291cmNlIHRvIGJlIGxvYWRlZCBpcyBpbnNpZGUgYSBwcmVmYWJcbiAgICBpZiAoc3RyaW5nU3RhcnRzV2l0aCh1cmxTdHJpbmcsICdzZXJ2aWNlcy9wcmVmYWJzJykpIHtcbiAgICAgICAgcmV0dXJuIHVybFN0cmluZztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsU3RyaW5nO1xufTtcblxuLypUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB1cmwgdG8gdGhlIGJhY2tncm91bmRJbWFnZSovXG5leHBvcnQgY29uc3QgZ2V0QmFja0dyb3VuZEltYWdlVXJsID0gKHVybFN0cmluZykgPT4ge1xuICAgIGlmICh1cmxTdHJpbmcgPT09ICcnIHx8IHVybFN0cmluZyA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHJldHVybiB1cmxTdHJpbmc7XG4gICAgfVxuICAgIHJldHVybiAndXJsKCcgKyBnZXRJbWFnZVVybCh1cmxTdHJpbmcpICsgJyknO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBcyhyZWZlcmVuY2U6IGFueSwga2V5OiBhbnksIG11bHRpPzogYm9vbGVhbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHByb3ZpZGU6IGtleSxcbiAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gcmVmZXJlbmNlKSxcbiAgICAgICAgbXVsdGk6IG11bHRpXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBc1dpZGdldFJlZihyZWZlcmVuY2U6IGFueSkge1xuICAgIHJldHVybiBwcm92aWRlQXMocmVmZXJlbmNlLCBXaWRnZXRSZWYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUFzRGlhbG9nUmVmKHJlZmVyZW5jZTogYW55KSB7XG4gICAgcmV0dXJuIHByb3ZpZGVBcyhyZWZlcmVuY2UsIERpYWxvZ1JlZik7XG59XG5cbmV4cG9ydCBjb25zdCBOQVZJR0FUSU9OX1RZUEUgPSB7XG4gICAgQURWQU5DRUQ6ICdBZHZhbmNlZCcsXG4gICAgQkFTSUM6ICdCYXNpYycsXG4gICAgQ0xBU1NJQzogJ0NsYXNzaWMnLFxuICAgIElOTElORTogJ0lubGluZScsXG4gICAgTk9ORTogJ05vbmUnLFxuICAgIE9OREVNQU5EOiAnT24tRGVtYW5kJyxcbiAgICBQQUdFUjogJ1BhZ2VyJyxcbiAgICBTQ1JPTEw6ICdTY3JvbGwnXG59O1xuXG5leHBvcnQgY29uc3QgSU5QVVRNT0RFID0ge1xuICAgIEZJTkFOQ0lBTDogJ2ZpbmFuY2lhbCcsXG4gICAgTkFUVVJBTDogJ25hdHVyYWwnXG59O1xuXG5leHBvcnQgY29uc3QgQVVUT0NMT1NFX1RZUEUgPSB7XG4gICAgT1VUU0lERUNMSUNLOiAnb3V0c2lkZUNsaWNrJyxcbiAgICBBTFdBWVM6ICdhbHdheXMnLFxuICAgIERJU0FCTEVEOiAnZGlzYWJsZWQnXG59XG5cbmV4cG9ydCBjb25zdCB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcyA9IFsnT24tRGVtYW5kJywgJ1Njcm9sbCddO1xuXG5leHBvcnQgY29uc3QgZ2V0V2F0Y2hJZGVudGlmaWVyID0gKC4uLmFyZ3MpID0+IGFyZ3Muam9pbignXycpO1xuXG5jb25zdCB0eXBlc01hcCA9IHtcbiAgICBudW1iZXI6IFsnbnVtYmVyJywgJ2ludGVnZXInLCAnYmlnX2ludGVnZXInLCAnc2hvcnQnLCAnZmxvYXQnLCAnYmlnX2RlY2ltYWwnLCAnZG91YmxlJywgJ2xvbmcnLCAnYnl0ZSddLFxuICAgIHN0cmluZzogWydzdHJpbmcnLCAndGV4dCddLFxuICAgIGNoYXJhY3RlcjogWydjaGFyYWN0ZXInXSxcbiAgICBkYXRlOiBbJ2RhdGUnLCAndGltZScsICAndGltZXN0YW1wJywgJ2RhdGV0aW1lJ11cbn07XG5jb25zdCBtb2RlcyA9IHtcbiAgICBudW1iZXI6IFsnZXhhY3QnLCAnbm90ZXF1YWxzJywgJ2xlc3N0aGFuJywgJ2xlc3N0aGFuZXF1YWwnLCAnZ3JlYXRlcnRoYW4nLCAnZ3JlYXRlcnRoYW5lcXVhbCcsICdudWxsJywgJ2lzbm90bnVsbCddLFxuICAgIHN0cmluZzogWydhbnl3aGVyZWlnbm9yZWNhc2UnLCAnYW55d2hlcmUnLCAnc3RhcnRpZ25vcmVjYXNlJywgJ3N0YXJ0JywgJ2VuZGlnbm9yZWNhc2UnLCAnZW5kJywgJ2V4YWN0aWdub3JlY2FzZScsICdleGFjdCcsICdub3RlcXVhbHNpZ25vcmVjYXNlJywgJ25vdGVxdWFscycsICdudWxsJywgJ2lzbm90bnVsbCcsICdlbXB0eScsICdpc25vdGVtcHR5JywgJ251bGxvcmVtcHR5J10sXG4gICAgY2hhcmFjdGVyOiBbJ2V4YWN0aWdub3JlY2FzZScsICdleGFjdCcsICdub3RlcXVhbHNpZ25vcmVjYXNlJywgJ25vdGVxdWFscycsICdudWxsJywgJ2lzbm90bnVsbCcsICdlbXB0eScsICdpc25vdGVtcHR5JywgJ251bGxvcmVtcHR5J10sXG4gICAgZGF0ZTogWydleGFjdCcsICdsZXNzdGhhbicsICdsZXNzdGhhbmVxdWFsJywgJ2dyZWF0ZXJ0aGFuJywgJ2dyZWF0ZXJ0aGFuZXF1YWwnLCAnbnVsbCcsICdub3RlcXVhbHMnLCAnaXNub3RudWxsJ11cbn07XG5jb25zdCBtYXRjaE1vZGVUeXBlc01hcCA9IHtcbiAgICBib29sZWFuOiBbJ2V4YWN0JywgJ251bGwnLCAnaXNub3RudWxsJ10sXG4gICAgY2xvYjogW10sXG4gICAgYmxvYjogW11cbn07XG5leHBvcnQgY29uc3QgZ2V0TWF0Y2hNb2RlVHlwZXNNYXAgPSAobXVsdGlNb2RlPykgPT4ge1xuICAgIGlmIChtdWx0aU1vZGUpIHtcbiAgICAgICAgbW9kZXMubnVtYmVyLnB1c2goJ2luJywgJ25vdGluJywgJ2JldHdlZW4nKTtcbiAgICAgICAgbW9kZXMuZGF0ZS5wdXNoKCdiZXR3ZWVuJyk7XG4gICAgICAgIG1vZGVzLnN0cmluZy5wdXNoKCdpbicsICdub3RpbicpO1xuICAgICAgICBtb2Rlcy5jaGFyYWN0ZXIucHVzaCgnaW4nLCAnbm90aW4nKTtcbiAgICB9XG5cbiAgICBmb3JFYWNoKHR5cGVzTWFwLCAodHlwZXMsIHByaW1UeXBlKSA9PiB7XG4gICAgICAgIGZvckVhY2godHlwZXMsIHR5cGUgPT4ge1xuICAgICAgICAgICAgbWF0Y2hNb2RlVHlwZXNNYXBbdHlwZV0gPSBtb2Rlc1twcmltVHlwZV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIHRoaXMgaXMgdXNlZCBpbiBmaWx0ZXIgY3JpdGVyaWEgd2hlbiB0aGUgdXNlciB0eXBlcyB0aGUgY29sdW1uIG5hbWUgbWFudWFsbHkgYW5kIHdoZXJlIHdlIGRvbnQga25vdyB0aGUgdHlwZSBvZiB0aGUgY29sdW1uXG4gICAgbWF0Y2hNb2RlVHlwZXNNYXBbJ2RlZmF1bHQnXSA9IHVuaW9uKG1vZGVzWydudW1iZXInXSwgbW9kZXNbJ3N0cmluZyddLCBtb2Rlc1snY2hhcmFjdGVyJ10sIG1vZGVzWydkYXRlJ10sIG1vZGVzWydkYXRlJ10pO1xuICAgIHJldHVybiBtYXRjaE1vZGVUeXBlc01hcDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNYXRjaE1vZGVNc2dzID0gKGFwcExvY2FsZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0ICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfU1RBUlRTX1dJVEgsXG4gICAgICAgIHN0YXJ0aWdub3JlY2FzZSAgOiBhcHBMb2NhbGUuTEFCRUxfU1RBUlRTX1dJVEhfSUdOT1JFQ0FTRSxcbiAgICAgICAgZW5kICAgICAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9FTkRTX1dJVEgsXG4gICAgICAgIGVuZGlnbm9yZWNhc2UgICAgOiBhcHBMb2NhbGUuTEFCRUxfRU5EU19XSVRIX0lHTk9SRUNBU0UsXG4gICAgICAgIGFueXdoZXJlICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfQ09OVEFJTlMsXG4gICAgICAgIGFueXdoZXJlaWdub3JlY2FzZTogYXBwTG9jYWxlLkxBQkVMX0NPTlRBSU5TX0lHTk9SRUNBU0UsXG4gICAgICAgIGV4YWN0ICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfRVFVQUxfVE8sXG4gICAgICAgIGV4YWN0aWdub3JlY2FzZSAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfRVFVQUxfVE9fSUdOT1JFQ0FTRSxcbiAgICAgICAgbm90ZXF1YWxzICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19OT1RfRVFVQUxfVE8sXG4gICAgICAgIG5vdGVxdWFsc2lnbm9yZWNhc2U6IGFwcExvY2FsZS5MQUJFTF9JU19OT1RfRVFVQUxfVE9fSUdOT1JFQ0FTRSxcbiAgICAgICAgbGVzc3RoYW4gICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9MRVNTX1RIQU4sXG4gICAgICAgIGxlc3N0aGFuZXF1YWwgICAgOiBhcHBMb2NhbGUuTEFCRUxfTEVTU19USEFOX09SX0VRVUFMU19UTyxcbiAgICAgICAgZ3JlYXRlcnRoYW4gICAgICA6IGFwcExvY2FsZS5MQUJFTF9HUkVBVEVSX1RIQU4sXG4gICAgICAgIGdyZWF0ZXJ0aGFuZXF1YWwgOiBhcHBMb2NhbGUuTEFCRUxfR1JFQVRFUl9USEFOX09SX0VRVUFMU19UTyxcbiAgICAgICAgbnVsbCAgICAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19OVUxMLFxuICAgICAgICBpc25vdG51bGwgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX05PVF9OVUxMLFxuICAgICAgICBlbXB0eSAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX0VNUFRZLFxuICAgICAgICBpc25vdGVtcHR5ICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX05PVF9FTVBUWSxcbiAgICAgICAgbnVsbG9yZW1wdHkgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19OVUxMX09SX0VNUFRZLFxuICAgICAgICBpbiAgICAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lOLFxuICAgICAgICBub3RpbiAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX05PVF9JTixcbiAgICAgICAgYmV0d2VlbiAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9CRVRXRUVOXG4gICAgfTtcbn07XG5cbi8vIFJldHVybnMgYXJyYXkgb2YgY2xhc3NlcyB0aGF0IGFyZSBldmFsdWF0ZWQgdHJ1ZSBmb3IgZ2l2ZW4gb2JqZWN0IG9yIGFycmF5XG5jb25zdCBnZXRDbGFzc2VzQXJyYXkgPSBjbGFzc1ZhbCA9PiB7XG4gICAgbGV0IGNsYXNzZXMgPSBbXTtcblxuICAgIGlmIChpc0FycmF5KGNsYXNzVmFsKSkge1xuICAgICAgICBjbGFzc1ZhbC5mb3JFYWNoKHYgPT4ge1xuICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuY29uY2F0KGdldENsYXNzZXNBcnJheSh2KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGNsYXNzVmFsKSkge1xuICAgICAgICBmb3JFYWNoKGNsYXNzVmFsLCAodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQoa2V5LnNwbGl0KCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsYXNzZXM7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbmRpdGlvbmFsQ2xhc3NlcyA9IChudiwgb3Y/KSA9PiB7XG4gICAgbGV0IHRvQWRkO1xuICAgIGxldCB0b1JlbW92ZTtcbiAgICAvLyBpZiB0aGUgY29uZGl0aW9uYWwgY2xhc3MgcHJvcGVydHkgaGFzIGFscmVhZHkgdG9BZGQgYW5kIHRvUmVtb3ZlIGFycmF5cyB0aGVuIHRha2UgdGhhdCBvdGhlcndpc2UgYnVpbGQgdGhvc2UgYXJyYXlzXG4gICAgY29uc3QgY2xhc3NUb0FkZCA9IG52LnRvQWRkIHx8IG52O1xuICAgIGNvbnN0IGNsYXNzVG9SZW1vdmUgPSBudi50b1JlbW92ZSB8fCBvdjtcbiAgICBpZiAoaXNPYmplY3QobnYpKSB7XG4gICAgICAgIHRvQWRkID0gaXNBcnJheShjbGFzc1RvQWRkKSA/IGNsYXNzVG9BZGQgOiBnZXRDbGFzc2VzQXJyYXkoY2xhc3NUb0FkZCB8fCBbXSk7XG4gICAgICAgIHRvUmVtb3ZlID0gY2xhc3NUb1JlbW92ZSA/IChpc0FycmF5KGNsYXNzVG9SZW1vdmUpID8gY2xhc3NUb1JlbW92ZSA6IGdldENsYXNzZXNBcnJheShjbGFzc1RvUmVtb3ZlKSkgOiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b0FkZCA9IGNsYXNzVG9BZGQgPyBbY2xhc3NUb0FkZF0gOiBbXTtcbiAgICAgICAgdG9SZW1vdmUgPSBjbGFzc1RvUmVtb3ZlID8gW2NsYXNzVG9SZW1vdmVdIDogW107XG4gICAgfVxuICAgIHJldHVybiB7dG9BZGQsIHRvUmVtb3ZlfTtcbn07XG5cbi8qaGVscGVyIGZ1bmN0aW9uIGZvciBwcmVwYXJlRmllbGREZWZzKi9cbmNvbnN0IHB1c2hGaWVsZERlZiA9IChkYXRhT2JqZWN0LCBjb2x1bW5EZWZPYmosIG5hbWVQcmVmaXgsIG9wdGlvbnMpID0+IHtcbiAgICAvKmxvb3Agb3ZlciB0aGUgZmllbGRzIGluIHRoZSBkYXRhT2JqZWN0IHRvIHByb2Nlc3MgdGhlbSovXG4gICAgbGV0IG1vZGlmaWVkVGl0bGUsXG4gICAgICAgIHJlbGF0ZWRUYWJsZSxcbiAgICAgICAgcmVsYXRlZEZpZWxkLFxuICAgICAgICByZWxhdGVkSW5mbyxcbiAgICAgICAgZmllbGROYW1lLFxuICAgICAgICBpc1JlbGF0ZWQ7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgZm9yRWFjaChkYXRhT2JqZWN0LCAodmFsdWUsIHRpdGxlKSA9PiB7XG4gICAgICAgIGlmIChpbmNsdWRlcyh0aXRsZSwgJy4nKSkge1xuICAgICAgICAgICAgcmVsYXRlZEluZm8gPSBzcGxpdCh0aXRsZSwgJy4nKTtcbiAgICAgICAgICAgIHJlbGF0ZWRUYWJsZSA9IHJlbGF0ZWRJbmZvWzBdO1xuICAgICAgICAgICAgcmVsYXRlZEZpZWxkID0gcmVsYXRlZEluZm9bMV07XG4gICAgICAgICAgICBpc1JlbGF0ZWQgICAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm5vTW9kaWZ5VGl0bGUpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1N0cmluZyh0aXRsZSkpIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllZFRpdGxlID0gcHJldHRpZnlMYWJlbCh0aXRsZSk7XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRUaXRsZSA9IGRlSHlwaGVuYXRlKG1vZGlmaWVkVGl0bGUpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVkVGl0bGUgPSBuYW1lUHJlZml4ID8gaW5pdENhcHMobmFtZVByZWZpeCkgKyAnICcgKyBtb2RpZmllZFRpdGxlIDogbW9kaWZpZWRUaXRsZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRUaXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRpdGxlID0gbmFtZVByZWZpeCA/IG5hbWVQcmVmaXggKyAnLicgKyB0aXRsZSA6IHRpdGxlO1xuICAgICAgICBpZiAoaXNSZWxhdGVkKSB7XG4gICAgICAgICAgICAvLyBGb3IgcmVsYXRlZCBjb2x1bW5zLCBzaG9ydGVuIHRoZSB0aXRsZSB0byBsYXN0IHR3byB3b3Jkc1xuICAgICAgICAgICAgZmllbGROYW1lID0gc3BsaXQobW9kaWZpZWRUaXRsZSwgJyAnKTtcbiAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5sZW5ndGggPiAxID8gZmllbGROYW1lW2ZpZWxkTmFtZS5sZW5ndGggLSAyXSArICcgJyArIGZpZWxkTmFtZVtmaWVsZE5hbWUubGVuZ3RoIC0gMV0gOiBmaWVsZE5hbWVbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZE5hbWUgPSBtb2RpZmllZFRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlZk9iaiA9IG9wdGlvbnMuc2V0QmluZGluZ0ZpZWxkID8geydkaXNwbGF5TmFtZSc6IGZpZWxkTmFtZSwgJ2ZpZWxkJzogdGl0bGUsICdyZWxhdGVkVGFibGUnOiByZWxhdGVkVGFibGUsICdyZWxhdGVkRmllbGQnOiByZWxhdGVkRmllbGQgfHwgbW9kaWZpZWRUaXRsZX1cbiAgICAgICAgOiB7J2Rpc3BsYXlOYW1lJzogZmllbGROYW1lLCAncmVsYXRlZFRhYmxlJzogcmVsYXRlZFRhYmxlLCAncmVsYXRlZEZpZWxkJzogcmVsYXRlZEZpZWxkIHx8IG1vZGlmaWVkVGl0bGV9O1xuICAgICAgICAvKmlmIGZpZWxkIGlzIGEgbGVhZiBub2RlLCBwdXNoIGl0IGluIHRoZSBjb2x1bW5EZWZzKi9cbiAgICAgICAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgKGlzQXJyYXkodmFsdWUpICYmICF2YWx1ZVswXSkpIHtcbiAgICAgICAgICAgIC8qaWYgdGhlIGNvbHVtbiBjb3VudGVyIGhhcyByZWFjaGVkIHVwcGVyQm91bmQgcmV0dXJuKi9cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnVwcGVyQm91bmQgJiYgb3B0aW9ucy5jb2x1bW5Db3VudCA9PT0gb3B0aW9ucy51cHBlckJvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uRGVmT2JqLnRlcm1pbmFscy5wdXNoKGRlZk9iaik7XG4gICAgICAgICAgICAvKmluY3JlbWVudCB0aGUgY29sdW1uIGNvdW50ZXIqL1xuICAgICAgICAgICAgb3B0aW9ucy5jb2x1bW5Db3VudCArPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyplbHNlIGZpZWxkIGlzIGFuIG9iamVjdCwgcHJvY2VzcyBpdCByZWN1cnNpdmVseSovXG4gICAgICAgICAgICAvKiBpZiBwYXJlbnQgbm9kZSB0byBiZSBpbmNsdWRlZCwgaW5jbHVkZSBpdCAqL1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29sdW1uQ291bnQgIT09IG9wdGlvbnMudXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgICAgIGNvbHVtbkRlZk9iai5vYmplY3RzLnB1c2goZGVmT2JqKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyogaWYgZmllbGQgaXMgYW4gYXJyYXkgbm9kZSwgcHJvY2VzcyBpdHMgZmlyc3QgY2hpbGQgKi9cbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZVswXSkge1xuICAgICAgICAgICAgICAgIHB1c2hGaWVsZERlZih2YWx1ZVswXSwgY29sdW1uRGVmT2JqLCB0aXRsZSArICdbMF0nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHVzaEZpZWxkRGVmKHZhbHVlLCBjb2x1bW5EZWZPYmosIHRpdGxlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuY29uc3QgZ2V0TWV0YURhdGFGcm9tRGF0YSA9IChkYXRhKSA9PiB7XG4gICAgbGV0IGRhdGFPYmplY3Q7XG4gICAgaWYgKGlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGFbMF0pKSB7XG4gICAgICAgICAgICBkYXRhT2JqZWN0ID0gZ2V0Q2xvbmVkT2JqZWN0KGRhdGFbMF0pO1xuICAgICAgICAgICAgLypMb29wIG92ZXIgdGhlIG9iamVjdCB0byBmaW5kIG91dCBhbnkgbnVsbCB2YWx1ZXMuIElmIGFueSBudWxsIHZhbHVlcyBhcmUgcHJlc2VudCBpbiB0aGUgZmlyc3Qgcm93LCBjaGVjayBhbmQgYXNzaWduIHRoZSB2YWx1ZXMgZnJvbSBvdGhlciByb3cuXG4gICAgICAgICAgICAgKiBBcyBjb2x1bW4gZ2VuZXJhdGlvbiBpcyBkZXBlbmRlbnQgb24gZGF0YSwgZm9yIHJlbGF0ZWQgZmllbGRzIGlmIGZpcnN0IHJvdyB2YWx1ZSBpcyBudWxsLCBjb2x1bW5zIGFyZSBub3QgZ2VuZXJhdGVkLlxuICAgICAgICAgICAgICogVG8gcHJldmVudCB0aGlzLCBjaGVjayB0aGUgZGF0YSBpbiBvdGhlciByb3dzIGFuZCBnZW5lcmF0ZSB0aGUgY29sdW1ucy4gTmV3IGtleXMgZnJvbSBvdGhlcnMgcm93cyBhcmUgYWxzbyBhZGRlZCovXG4gICAgICAgICAgICBmb3JFYWNoKGRhdGEsIChyb3csIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKChpbmRleCArIDEpID49IDEwKSB7IC8vIExpbWl0IHRoZSBkYXRhIHNlYXJjaCB0byBmaXJzdCAxMCByZWNvcmRzXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNzaWduV2l0aChkYXRhT2JqZWN0LCByb3csIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gbnVsbCB8fCBvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFPYmplY3QgPSBkYXRhWzBdO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YU9iamVjdCA9IGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhT2JqZWN0O1xufTtcblxuZXhwb3J0IGNvbnN0IHByZXBhcmVGaWVsZERlZnMgPSAoZGF0YSwgb3B0aW9ucz8pID0+IHtcbiAgICBsZXQgZGF0YU9iamVjdDtcbiAgICBjb25zdCBjb2x1bW5EZWYgPSB7XG4gICAgICAgICAgICAnb2JqZWN0cycgOiBbXSxcbiAgICAgICAgICAgICd0ZXJtaW5hbHMnIDogW11cbiAgICAgICAgfTtcbiAgICAvKmlmIG5vIGRhdGEgcHJvdmlkZWQsIGluaXRpYWxpemUgZGVmYXVsdCBjb2x1bW4gZGVmaW5pdGlvbnMqL1xuICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gW107XG4gICAgfVxuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIG9wdGlvbnMuc2V0QmluZGluZ0ZpZWxkID0gdHJ1ZTtcbiAgICBvcHRpb25zLmNvbHVtbkNvdW50ID0gMDtcbiAgICBkYXRhT2JqZWN0ID0gZ2V0TWV0YURhdGFGcm9tRGF0YShkYXRhKTtcbiAgICAvKmZpcnN0IG9mIHRoZSBtYW55IGRhdGEgb2JqZWN0cyBmcm9tIGdyaWQgZGF0YSovXG4gICAgcHVzaEZpZWxkRGVmKGRhdGFPYmplY3QsIGNvbHVtbkRlZiwgJycsIG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucyB8fCAob3B0aW9ucyAmJiAhb3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5EZWYudGVybWluYWxzO1xuICAgIH1cbiAgICBzd2l0Y2ggKG9wdGlvbnMuZmlsdGVyKSB7XG4gICAgICAgIGNhc2UgJ2FsbCc6XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uRGVmO1xuICAgICAgICBjYXNlICdvYmplY3RzJzpcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5EZWYub2JqZWN0cztcbiAgICAgICAgY2FzZSAndGVybWluYWxzJzpcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5EZWYudGVybWluYWxzO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRGVmO1xufTtcblxuXG4vKipcbiAqIFRvIGdldCBjb250YWluZXIgdGFyZ2V0IGVsZW1lbnQgdG8gYXBwZW5kIHRoZSBsaXN0IGZvciBzZWFyY2ggYW5kIGRhdGVwaWNrZXIgcGFuZWwgd2hlbiBmaWVsZCBwcmVzZW50IGluIGRpYWxvZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3MgPSAoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiAnLndtLWFwcCc7XG5cbiAgICAvLyBCZWxvdyBjb2RlIGlzIG5vdCB3b3JraW5nIHdoZW4gd2UgaGF2ZSBuZXN0ZWQgZGlhbG9ncy5cbiAgICAvLyBOZXN0ZWQgZGlhbG9ncyBjYXNlIHdlIHdpbGwgaGF2ZSAgbXVsdGlwbGUgJy5tb2RhbC1jb250ZW50JyBjbGFzc2VzIG9uIERPTSBkdWUgdG8gdGhhdCBjb250YWluZXIgcG9zaXRpb25zIGlzIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkLlxuICAgIC8vIEJlbG93IGNvZGUgdG8gZml4IHRoZSBpc3N1ZSA9PT4gV01TLTE4NzUxXG4gICAgLy8gQXMgcmVncmVzc2lvbiB3ZSBnb3QgPT0+IFdNUy0xOTgzNVxuXG4gICAgLy8gaWYgKGVsZW1lbnQuY2xvc2VzdCgnLm1vZGFsLWRpYWxvZycpKSB7XG4gICAgLy8gICAgIHJldHVybiAnLm1vZGFsLWNvbnRlbnQnO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICAgIHJldHVybiAnYm9keSc7XG4gICAgLy8gfVxuXG59XG5cbi8qKlxuICogVG8gZXh0cmFjdCB0aGUgVmFyaWFibGUgTmFtZSBmcm9tIGEgV2lkZ2V0J3MgYmluZGRhdGFzb3VyY2UgYXR0cmlidXRlXG4gKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0RGF0YVNvdXJjZU5hbWUgPSAoYmluZERhdGFTb3VyY2UpID0+IHtcbiAgICBpZiAoIWJpbmREYXRhU291cmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGRhdGFTb3VyY2VOYW1lO1xuICAgIGNvbnN0IHBhcnRzID0gYmluZERhdGFTb3VyY2Uuc3BsaXQoJy4nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1swXSA9PT0gJ1ZhcmlhYmxlcycpIHtcbiAgICAgICAgZGF0YVNvdXJjZU5hbWUgPSBwYXJ0c1sxXTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFTb3VyY2VOYW1lO1xufVxuXG5leHBvcnQgY29uc3Qgc2V0Rm9jdXNUcmFwID0gKGNvbnRhaW5lciwgYWxsb3dPdXRzaWRlQ2xpY2ssIHNldFJldHVybkZvY3VzRWxlbWVudD8pID0+IHtcbiAgICByZXR1cm4gY3JlYXRlRm9jdXNUcmFwKGNvbnRhaW5lciwge1xuICAgICAgICBvbkFjdGl2YXRlOiAoKSA9PiBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyksXG4gICAgICAgIG9uRGVhY3RpdmF0ZTogKCkgPT4gY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpLFxuICAgICAgICBhbGxvd091dHNpZGVDbGljazogYWxsb3dPdXRzaWRlQ2xpY2ssXG4gICAgICAgIHNldFJldHVybkZvY3VzOiBzZXRSZXR1cm5Gb2N1c0VsZW1lbnQsXG4gICAgfSk7XG59XG5cbi8qKlxuICogR2V0cyBrZXlib2FyZCBmb2N1c2FibGUgZWxlbWVudHMgd2l0aGluIGEgc3BlY2lmaWVkIGVsZW1lbnRcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH1cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEtleWJvYXJkRm9jdXNhYmxlRWxlbWVudHMgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBlbGVtZW50Tm9kZUxpc3QgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2EsIGJ1dHRvbiwgaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGRldGFpbHMsIGlmcmFtZSwgZW1iZWQsIG9iamVjdCwgc3VtbWFyeSBkaWFsb2csIGF1ZGlvW2NvbnRyb2xzXSwgdmlkZW9bY29udHJvbHNdLCBbY29udGVudGVkaXRhYmxlXScpO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gQXJyYXkuZnJvbShlbGVtZW50Tm9kZUxpc3QpO1xuICAgIHJldHVybiBlbGVtZW50cy5maWx0ZXIoZWwgPT4ge1xuICAgICAgICByZXR1cm4gKCFlbC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiYgIWVsLmhhc0F0dHJpYnV0ZSgnaGlkZGVuJylcbiAgICAgICAgICAgICYmICghZWwuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpIHx8IChlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgJiYgIWVsLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpLnN0YXJ0c1dpdGgoJy0nKSkpKTtcbiAgICB9KTtcbn1cbiJdfQ==
|
|
488
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9iYXNlL3NyYy91dGlscy93aWRnZXQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQ0gsVUFBVSxFQUNWLGVBQWUsRUFDZiwyQkFBMkIsRUFDM0IsV0FBVyxFQUNYLFNBQVMsRUFDVCxjQUFjLEVBQ2QsZUFBZSxFQUNmLFFBQVEsRUFDUixlQUFlLEVBQ2YsYUFBYSxFQUNiLGFBQWEsRUFDYixnQkFBZ0IsRUFDbkIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFdEgsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLFFBQVE7SUFDdkcsY0FBYyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNoSTs7OztHQUlHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtJQUNwQyxJQUFJLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElB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QUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtmb3J3YXJkUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgICAkcGFyc2VFeHByLFxuICAgIF9XTV9BUFBfUFJPSkVDVCxcbiAgICBjaGVja0lzQ3VzdG9tUGlwZUV4cHJlc3Npb24sXG4gICAgZGVIeXBoZW5hdGUsXG4gICAgZW5jb2RlVXJsLFxuICAgIEZvcm1XaWRnZXRUeXBlLFxuICAgIGdldENsb25lZE9iamVjdCxcbiAgICBpbml0Q2FwcyxcbiAgICBpc1ZhbGlkSW1hZ2VVcmwsXG4gICAgaXNWYWxpZFdlYlVSTCxcbiAgICBwcmV0dGlmeUxhYmVsLFxuICAgIHN0cmluZ1N0YXJ0c1dpdGhcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtEaWFsb2dSZWYsIFdpZGdldFJlZn0gZnJvbSAnLi4vd2lkZ2V0cy9mcmFtZXdvcmsvdHlwZXMnO1xuaW1wb3J0IHtjcmVhdGVGb2N1c1RyYXB9IGZyb20gJ0B3YXZlbWFrZXIvZm9jdXMtdHJhcCc7XG5pbXBvcnQge05hdk5vZGV9IGZyb20gXCIuLi93aWRnZXRzL2NvbW1vbi9iYXNlL2RhdGFzZXQtYXdhcmUtbmF2LmNvbXBvbmVudFwiO1xuaW1wb3J0IHthc3NpZ25XaXRoLCBmb3JFYWNoLCBnZXQsIGluY2x1ZGVzLCBpc0FycmF5LCBpc051bGwsIGlzT2JqZWN0LCBpc1N0cmluZywgam9pbiwgc3BsaXQsIHVuaW9ufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IERBVEFTRVRfV0lER0VUUyA9IG5ldyBTZXQoW0Zvcm1XaWRnZXRUeXBlLlNFTEVDVCwgRm9ybVdpZGdldFR5cGUuQ0hFQ0tCT1hTRVQsIEZvcm1XaWRnZXRUeXBlLlJBRElPU0VULFxuICAgIEZvcm1XaWRnZXRUeXBlLlNXSVRDSCwgRm9ybVdpZGdldFR5cGUuQVVUT0NPTVBMRVRFLCBGb3JtV2lkZ2V0VHlwZS5DSElQUywgRm9ybVdpZGdldFR5cGUuVFlQRUFIRUFELCBGb3JtV2lkZ2V0VHlwZS5SQVRJTkddKTtcbi8qKlxuICogUmV0dXJucyB0aGUgcGFyc2VkLCB1cGRhdGVkIGJvdW5kIGV4cHJlc3Npb25cbiAqIGlmIHRoZSBleHByZXNzaW9uIGlzICRbZGF0YVskaV1bZmlyc3ROYW1lXV0gKyAnLS0nICsgJFtsYXN0TmFtZV0gKyAnLS0nICsgJFsnQElEQCddXG4gKiByZXR1cm5zIF9fMS5maXJzdE5hbWUgKyAnLS0nICsgbGFzdE5hbWUgKyAnLS0nICsgX18xWydASURAJ11cbiAqL1xuY29uc3QgZ2V0VXBkYXRlZEV4cHIgPSAoZXhwcjogc3RyaW5nKSA9PiB7XG4gICAgbGV0IHVwZGF0ZWQgPSAnJywgY2gsIG5leHQsIGksIGosIG1hdGNoQ2gsIG1hdGNoQ291bnQsIGlzUXVvdGVkU3RyLCBzdWJTdHIsIGlzUXVvdGVkU3RyRXZhbHVhdGVkO1xuXG4gICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXFwkXFxbZGF0YVxcW1xcJGlcXF0vZywgJyRbX18xJyk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZXhwci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjaCA9IGV4cHJbaV07XG4gICAgICAgIG5leHQgPSBleHByW2kgKyAxXTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogaWYgdGhlIGV4cHJlc3Npb24gc3RhcnRzIHdpdGggJFssIGNoZWNrIHRoZSBuZXh0KGNoKSBjaGFyYWN0ZXIsXG4gICAgICAgICAqICAgIGlmIGNoIGlzIGEgcXVvdGUoJywgXCIpIGNoYW5nZSB0aGUgZXhwciB0byBfX1tcbiAgICAgICAgICogICAgaWYgY2ggaXMgYSB3aGl0ZVNwYWNlLCByZW1vdmUgaXRcbiAgICAgICAgICogICAgZWxzZSByZW1vdmUgJFtcbiAgICAgICAgICovXG4gICAgICAgIGlmIChjaCA9PT0gJyQnICYmIG5leHQgPT09ICdbJykge1xuICAgICAgICAgICAgbWF0Y2hDb3VudCA9IDE7XG4gICAgICAgICAgICBpc1F1b3RlZFN0ckV2YWx1YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaXNRdW90ZWRTdHIgPSBmYWxzZTtcblxuICAgICAgICAgICAgZm9yIChqID0gaSArIDI7IGogPCBleHByLmxlbmd0aDsgaisrKSB7XG5cbiAgICAgICAgICAgICAgICBtYXRjaENoID0gZXhwcltqXTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaENoID09PSAnICcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFpc1F1b3RlZFN0ckV2YWx1YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBpc1F1b3RlZFN0ciA9IGV4cHJbal0gPT09ICdcIicgfHwgZXhwcltqXSA9PT0gJ1xcJyc7XG4gICAgICAgICAgICAgICAgICAgIGlzUXVvdGVkU3RyRXZhbHVhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hDaCA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoQ291bnQrKztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoQ2ggPT09ICddJykge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaENvdW50LS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaENvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YlN0ciA9IGV4cHIuc3Vic3RyaW5nKGkgKyAyLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUXVvdGVkU3RyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkICs9ICdfXzFbJyArIHN1YlN0ciArICddJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgKz0gc3ViU3RyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cGRhdGVkICs9IGNoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUgcHJvdmlkZWQga2V5IGluIHRoZSBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE9ialZhbHVlQnlLZXkgPSAob2JqOiBhbnksIHN0cktleTogc3RyaW5nKSA9PiB7XG4gICAgLyogY2hlY2sgZm9yIHRoZSBrZXktc3RyaW5nICovXG4gICAgaWYgKHN0cktleSkge1xuICAgICAgICBsZXQgdmFsO1xuICAgICAgICAvKiBjb252ZXJ0IGluZGV4ZXMgdG8gcHJvcGVydGllcywgc28gYXMgdG8gd29yayBmb3IgZXZlbiAna2V5MVswXS5jaGlsZDEnKi9cbiAgICAgICAgc3RyS2V5LnJlcGxhY2UoL1xcWyhcXHcrKVxcXS9nLCAnLiQxJykuc3BsaXQoJy4nKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAvLyBJZiBvYmogaXMgbnVsbCwgdGhlbiBhc3NpZ24gdmFsIHRvIG51bGwuXG4gICAgICAgICAgICB2YWwgPSAodmFsICYmIHZhbFtrZXldKSB8fCAoaXNOdWxsKG9iaikgPyBvYmogOiBvYmpba2V5XSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufTtcblxuLyoqXG4gKiByZXR1cm5zIHRoZSBkaXNwbGF5IGZpZWxkIGRhdGEgZm9yIGFueSBkYXRhc2V0IHdpZGdldHNcbiAqIEJhc2VkIG9uIHRoZSBiaW5kIGRpc3BsYXkgZXhwcmVzc2lvbiBvciBkaXNwbGF5IGV4cHJlc3Npb24gb3IgZGlzcGxheSBuYW1lLFxuICogZGF0YSBpcyBleHRyYWN0ZWQgYW5kIGZvcm1hdHRlZCBmcm9tIHRoZSBwYXNzZWQgb3B0aW9uIG9iamVjdFxuICogSWYgdGhlcmUgaXMgZmllbGQgaXMgc3BlY2lmaWVkLCBmaWVsZCB2YWx1ZSBpcyBvYnRhaW5lZCBmcm9tIHRoZSBkYXRhT2JqLlxuICogSWYgZXhwcmVzc2lvbiBpcyBnaXZlbiwgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIHZhbHVlLlxuICogZWxzZSBjaGVjayBmb3IgYmluZEV4cHJlc3Npb24sIGV4dHJhY3QgdGhlIHZhbHVlIGZyb20gdGhlIGRhdGFPYmpcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV2YWx1YXRlZERhdGEgPSAoZGF0YU9iajogYW55LCBvcHRpb25zOiBhbnksIGNvbnRleHQ/OiBhbnkpID0+IHtcbiAgICBsZXQgZXhwcmVzc2lvblZhbHVlO1xuICAgIGNvbnN0IGZpZWxkID0gb3B0aW9ucy5maWVsZCxcbiAgICAgICAgZXhwciA9IG9wdGlvbnMuZXhwcmVzc2lvbixcbiAgICAgICAgYmluZEV4cHIgPSBvcHRpb25zLmJpbmRFeHByZXNzaW9uO1xuXG4gICAgLy8gaWYga2V5IGlzIGJvdW5kIGV4cHJlc3Npb25cbiAgICBpZiAoYmluZEV4cHIpIHtcbiAgICAgICAgLy8gcmVtb3ZlICdiaW5kOicgcHJlZml4IGZyb20gdGhlIGJvdW5kRXhwcmVzc2lvbk5hbWVcbiAgICAgICAgZXhwcmVzc2lvblZhbHVlID0gYmluZEV4cHIucmVwbGFjZSgnYmluZDonLCAnJyk7XG5cbiAgICAgICAgLy8gRm9yIGJpbmQgZXhwcmVzc2lvbiBwYXNzaW5nIHRoZSBsYXN0IGFyZ3VtZW50IHRoYXQgdGhlIG9iamVjdCBvZiBkYXRhc2V0IGl0ZW0uXG4gICAgICAgIC8vIE5vdGU6IEZvciBwYXJzZSBleHByZXNzaW9uIHdlIGFyZSBzZW5kaW5nIGRhdGFPYmogd2l0aCB0aGUgcHJvcGVyeSBuYW1lIFwiX18xXCIsIHdlIHVzZWQgdGhlIHNhbWUgcHJvcGVyeSB0byBzZW5kIHRoZSBsYXN0IGFyZ3VtZW50IGFzIGRhdGFzZXQgaXRlbVxuICAgICAgICBpZihjaGVja0lzQ3VzdG9tUGlwZUV4cHJlc3Npb24oZXhwcmVzc2lvblZhbHVlKSl7XG4gICAgICAgICAgICBleHByZXNzaW9uVmFsdWUgPSBleHByZXNzaW9uVmFsdWUrJzogX18xJztcbiAgICAgICAgfVxuICAgICAgICAvLyBwYXJzZSB0aGUgZXhwcmVzc2lvblZhbHVlIGZvciByZXBsYWNpbmcgYWxsIHRoZSBleHByZXNzaW9ucyB3aXRoIHZhbHVlcyBpbiB0aGUgb2JqZWN0XG4gICAgICAgIGV4cHJlc3Npb25WYWx1ZSA9IGdldFVwZGF0ZWRFeHByKGV4cHJlc3Npb25WYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXhwcmVzc2lvblZhbHVlID0gZXhwciA/IGV4cHIgOiBmaWVsZDtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGluZyBmaWVsZCBuYW1lIHdpdGggc3BlY2lhbCBjaGFyZWN0ZXJzXG4gICAgLy8gRXg6IGZpZWxkID0gXCJmIG5hbWVcIlxuICAgIGlmICghYmluZEV4cHIgJiYgIWV4cHIpIHtcbiAgICAgICAgcmV0dXJuIGdldChkYXRhT2JqLCBmaWVsZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICRwYXJzZUV4cHIoZXhwcmVzc2lvblZhbHVlKShjb250ZXh0LCBPYmplY3QuYXNzaWduKHt9LCBkYXRhT2JqLCB7X18xOiBkYXRhT2JqfSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQWN0aXZlTmF2SXRlbSA9IChsaW5rLCByb3V0ZU5hbWUpID0+IHtcbiAgICBpZiAoIWxpbmsgfHwgIXJvdXRlTmFtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJvdXRlTmFtZSA9IHJvdXRlTmFtZS5pbmRleE9mKCc/JykgPT09IC0xID8gcm91dGVOYW1lIDogcm91dGVOYW1lLnN1YnN0cmluZygwLCByb3V0ZU5hbWUuaW5kZXhPZignPycpKTtcbiAgICBsaW5rID0gbGluay5pbmRleE9mKCc/JykgPT09IC0xID8gbGluayA6IGxpbmsuc3Vic3RyaW5nKDAsIGxpbmsuaW5kZXhPZignPycpKTtcbiAgICBjb25zdCByb3V0ZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXigjXFwvfCMpJyArIHJvdXRlTmFtZSArICckJyk7XG4gICAgcmV0dXJuIHJvdXRlUmVnZXgudGVzdChsaW5rKTtcbn07XG5cbi8qKlxuKiByZXR1cm5zIHRydWUgaWYgdGhlIG1lbnUgaGFzIGxpbmsgdG8gdGhlIGN1cnJlbnQgcGFnZS5cbiogQHBhcmFtIG5vZGVzXG4qIEBwYXJhbSByb3V0ZVVybFxuKi9cbmV4cG9ydCBjb25zdCBoYXNMaW5rVG9DdXJyZW50UGFnZSA9IChub2RlczogQXJyYXk8TmF2Tm9kZT4sIHJvdXRlVXJsKSA9PiB7XG4gICAgcmV0dXJuIG5vZGVzLnNvbWUobm9kZSA9PiB7XG4gICAgICAgIGlmIChpc0FjdGl2ZU5hdkl0ZW0obm9kZS5saW5rLCByb3V0ZVVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFzTGlua1RvQ3VycmVudFBhZ2Uobm9kZS5jaGlsZHJlbiwgcm91dGVVcmwpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JkZXJCeSBFeHByZXNzaW9uIGJhc2VkIG9uIHRoZSAnc29ydCAnb3B0aW9uIGluIHBhZ2VhYmxlIG9iamVjdFxuICogcmV0dXJuZWQgYnkgYmFja2VuZFxuICogQHBhcmFtIHBhZ2VhYmxlT2JqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgZ2V0T3JkZXJCeUV4cHIgPSBwYWdlYWJsZU9iaiA9PiB7XG4gICAgcGFnZWFibGVPYmogPSBwYWdlYWJsZU9iaiB8fCBbXTtcbiAgICBjb25zdCBleHByZXNzaW9ucyAgICAgICA9IFtdLFxuICAgICAgICBLRVlfVkFMX1NFUEFSQVRPUiA9ICcgJyxcbiAgICAgICAgRklFTERfU0VQQVJBVE9SICAgPSAnLCc7XG4gICAgZm9yRWFjaChwYWdlYWJsZU9iaiwgb2JqID0+IHtcbiAgICAgICAgaWYgKG9iai5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2gob2JqLnByb3BlcnR5ICsgS0VZX1ZBTF9TRVBBUkFUT1IgKyBvYmouZGlyZWN0aW9uLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gam9pbihleHByZXNzaW9ucywgRklFTERfU0VQQVJBVE9SKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RhdGFTZXRXaWRnZXQgPSB3aWRnZXQgPT4ge1xuICAgIHJldHVybiBEQVRBU0VUX1dJREdFVFMuaGFzKHdpZGdldCk7XG59O1xuXG4vKlRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdXJsIHRvIHRoZSBpbWFnZSBhZnRlciBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgdXJsKi9cbmV4cG9ydCBjb25zdCBnZXRJbWFnZVVybCA9ICh1cmxTdHJpbmcsIHNob3VsZEVuY29kZT8sIGRlZmF1bHRVcmw/KSA9PiB7XG4gICAgLypJbiBzdHVkaW8gbW9kZSBiZWZvcmUgc2V0dGluZyBwaWN0dXJlc291cmNlLCBjaGVjayBpZiB0aGUgc3R1ZGlvQ29udHJvbGxlciBpcyBsb2FkZWQgYW5kIG5ldyBwaWN0dXJlc291cmNlIGlzIGluICdzdHlsZXMvaW1hZ2VzLycgcGF0aCBvciBub3QuXG4gICAgICogV2hlbiBwYWdlIGlzIHJlZnJlc2hlZCwgbG9hZGVyLmdpZiB3aWxsIGJlIGxvYWRlZCBmaXJzdCBhbmQgaXQgd2lsbCBiZSBpbiAnc3R5bGUvaW1hZ2VzLycuXG4gICAgICogUHJlcGVuZCAnc2VydmljZXMvcHJvamVjdHMvJyArICRyb290U2NvcGUucHJvamVjdC5pZCArICcvd2ViL3Jlc291cmNlcy9pbWFnZXMvaW1hZ2VsaXN0cy8nICBpZiB0aGUgaW1hZ2UgdXJsIGlzIGp1c3QgaW1hZ2UgbmFtZSBpbiB0aGUgcHJvamVjdCByb290LFxuICAgICAqIGFuZCBpZiB0aGUgdXJsIHBvaW50aW5nIHRvIHJlc291cmNlcy9pbWFnZXMvIHRoZW4gJ3NlcnZpY2VzL3Byb2plY3RzLycgKyAkcm9vdFNjb3BlLnByb2plY3QuaWQgKyAnL3dlYi8nKi9cbiAgICBpZiAoaXNWYWxpZFdlYlVSTCh1cmxTdHJpbmcpKSB7XG4gICAgICAgIHJldHVybiB1cmxTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQgZm9yIHBpY3R1cmVzb3VyY2UgYXNzaWduIHBpY3R1cmVwbGFjZWhvbGRlciBvciBkZWZhdWx0LWltYWdlXG4gICAgaWYgKCF1cmxTdHJpbmcpIHtcbiAgICAgICAgaWYgKGlzVmFsaWRXZWJVUkwoZGVmYXVsdFVybCkpIHtcbiAgICAgICAgICAgIHVybFN0cmluZyA9IGRlZmF1bHRVcmw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmxTdHJpbmcgPSAgICggZGVmYXVsdFVybCB8fCAncmVzb3VyY2VzL2ltYWdlcy9pbWFnZWxpc3RzL2RlZmF1bHQtaW1hZ2UucG5nJyApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh1cmxTdHJpbmcgJiYgIV9XTV9BUFBfUFJPSkVDVC5pc1ByZXZpZXcgJiYgIWlzVmFsaWRJbWFnZVVybCh1cmxTdHJpbmcpICYmICF1cmxTdHJpbmcuc3RhcnRzV2l0aChfV01fQVBQX1BST0pFQ1QuY2RuVXJsKSAmJiAhdXJsU3RyaW5nLnN0YXJ0c1dpdGgoJ3NlcnZpY2VzJykpIHtcbiAgICAgICAgdXJsU3RyaW5nID0gKF9XTV9BUFBfUFJPSkVDVC5jZG5VcmwgfHwgJycpICsgdXJsU3RyaW5nO1xuICAgIH1cblxuICAgIHVybFN0cmluZyA9IHNob3VsZEVuY29kZSA/IGVuY29kZVVybCh1cmxTdHJpbmcpIDogdXJsU3RyaW5nO1xuXG4gICAgLy8gaWYgdGhlIHJlc291cmNlIHRvIGJlIGxvYWRlZCBpcyBpbnNpZGUgYSBwcmVmYWJcbiAgICBpZiAoc3RyaW5nU3RhcnRzV2l0aCh1cmxTdHJpbmcsICdzZXJ2aWNlcy9wcmVmYWJzJykpIHtcbiAgICAgICAgcmV0dXJuIHVybFN0cmluZztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsU3RyaW5nO1xufTtcblxuLypUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB1cmwgdG8gdGhlIGJhY2tncm91bmRJbWFnZSovXG5leHBvcnQgY29uc3QgZ2V0QmFja0dyb3VuZEltYWdlVXJsID0gKHVybFN0cmluZykgPT4ge1xuICAgIGlmICh1cmxTdHJpbmcgPT09ICcnIHx8IHVybFN0cmluZyA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHJldHVybiB1cmxTdHJpbmc7XG4gICAgfVxuICAgIHJldHVybiAndXJsKCcgKyBnZXRJbWFnZVVybCh1cmxTdHJpbmcpICsgJyknO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBcyhyZWZlcmVuY2U6IGFueSwga2V5OiBhbnksIG11bHRpPzogYm9vbGVhbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHByb3ZpZGU6IGtleSxcbiAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gcmVmZXJlbmNlKSxcbiAgICAgICAgbXVsdGk6IG11bHRpXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBc1dpZGdldFJlZihyZWZlcmVuY2U6IGFueSkge1xuICAgIHJldHVybiBwcm92aWRlQXMocmVmZXJlbmNlLCBXaWRnZXRSZWYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUFzRGlhbG9nUmVmKHJlZmVyZW5jZTogYW55KSB7XG4gICAgcmV0dXJuIHByb3ZpZGVBcyhyZWZlcmVuY2UsIERpYWxvZ1JlZik7XG59XG5cbmV4cG9ydCBjb25zdCBOQVZJR0FUSU9OX1RZUEUgPSB7XG4gICAgQURWQU5DRUQ6ICdBZHZhbmNlZCcsXG4gICAgQkFTSUM6ICdCYXNpYycsXG4gICAgQ0xBU1NJQzogJ0NsYXNzaWMnLFxuICAgIElOTElORTogJ0lubGluZScsXG4gICAgTk9ORTogJ05vbmUnLFxuICAgIE9OREVNQU5EOiAnT24tRGVtYW5kJyxcbiAgICBQQUdFUjogJ1BhZ2VyJyxcbiAgICBTQ1JPTEw6ICdTY3JvbGwnXG59O1xuXG5leHBvcnQgY29uc3QgSU5QVVRNT0RFID0ge1xuICAgIEZJTkFOQ0lBTDogJ2ZpbmFuY2lhbCcsXG4gICAgTkFUVVJBTDogJ25hdHVyYWwnXG59O1xuXG5leHBvcnQgY29uc3QgQVVUT0NMT1NFX1RZUEUgPSB7XG4gICAgT1VUU0lERUNMSUNLOiAnb3V0c2lkZUNsaWNrJyxcbiAgICBBTFdBWVM6ICdhbHdheXMnLFxuICAgIERJU0FCTEVEOiAnZGlzYWJsZWQnXG59XG5cbmV4cG9ydCBjb25zdCB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcyA9IFsnT24tRGVtYW5kJywgJ1Njcm9sbCddO1xuXG5leHBvcnQgY29uc3QgZ2V0V2F0Y2hJZGVudGlmaWVyID0gKC4uLmFyZ3MpID0+IGFyZ3Muam9pbignXycpO1xuXG5jb25zdCB0eXBlc01hcCA9IHtcbiAgICBudW1iZXI6IFsnbnVtYmVyJywgJ2ludGVnZXInLCAnYmlnX2ludGVnZXInLCAnc2hvcnQnLCAnZmxvYXQnLCAnYmlnX2RlY2ltYWwnLCAnZG91YmxlJywgJ2xvbmcnLCAnYnl0ZSddLFxuICAgIHN0cmluZzogWydzdHJpbmcnLCAndGV4dCddLFxuICAgIGNoYXJhY3RlcjogWydjaGFyYWN0ZXInXSxcbiAgICBkYXRlOiBbJ2RhdGUnLCAndGltZScsICAndGltZXN0YW1wJywgJ2RhdGV0aW1lJ11cbn07XG5jb25zdCBtb2RlcyA9IHtcbiAgICBudW1iZXI6IFsnZXhhY3QnLCAnbm90ZXF1YWxzJywgJ2xlc3N0aGFuJywgJ2xlc3N0aGFuZXF1YWwnLCAnZ3JlYXRlcnRoYW4nLCAnZ3JlYXRlcnRoYW5lcXVhbCcsICdudWxsJywgJ2lzbm90bnVsbCddLFxuICAgIHN0cmluZzogWydhbnl3aGVyZWlnbm9yZWNhc2UnLCAnYW55d2hlcmUnLCAnc3RhcnRpZ25vcmVjYXNlJywgJ3N0YXJ0JywgJ2VuZGlnbm9yZWNhc2UnLCAnZW5kJywgJ2V4YWN0aWdub3JlY2FzZScsICdleGFjdCcsICdub3RlcXVhbHNpZ25vcmVjYXNlJywgJ25vdGVxdWFscycsICdudWxsJywgJ2lzbm90bnVsbCcsICdlbXB0eScsICdpc25vdGVtcHR5JywgJ251bGxvcmVtcHR5J10sXG4gICAgY2hhcmFjdGVyOiBbJ2V4YWN0aWdub3JlY2FzZScsICdleGFjdCcsICdub3RlcXVhbHNpZ25vcmVjYXNlJywgJ25vdGVxdWFscycsICdudWxsJywgJ2lzbm90bnVsbCcsICdlbXB0eScsICdpc25vdGVtcHR5JywgJ251bGxvcmVtcHR5J10sXG4gICAgZGF0ZTogWydleGFjdCcsICdsZXNzdGhhbicsICdsZXNzdGhhbmVxdWFsJywgJ2dyZWF0ZXJ0aGFuJywgJ2dyZWF0ZXJ0aGFuZXF1YWwnLCAnbnVsbCcsICdub3RlcXVhbHMnLCAnaXNub3RudWxsJ11cbn07XG5jb25zdCBtYXRjaE1vZGVUeXBlc01hcCA9IHtcbiAgICBib29sZWFuOiBbJ2V4YWN0JywgJ251bGwnLCAnaXNub3RudWxsJ10sXG4gICAgY2xvYjogW10sXG4gICAgYmxvYjogW11cbn07XG5leHBvcnQgY29uc3QgZ2V0TWF0Y2hNb2RlVHlwZXNNYXAgPSAobXVsdGlNb2RlPykgPT4ge1xuICAgIGlmIChtdWx0aU1vZGUpIHtcbiAgICAgICAgbW9kZXMubnVtYmVyLnB1c2goJ2luJywgJ25vdGluJywgJ2JldHdlZW4nKTtcbiAgICAgICAgbW9kZXMuZGF0ZS5wdXNoKCdiZXR3ZWVuJyk7XG4gICAgICAgIG1vZGVzLnN0cmluZy5wdXNoKCdpbicsICdub3RpbicpO1xuICAgICAgICBtb2Rlcy5jaGFyYWN0ZXIucHVzaCgnaW4nLCAnbm90aW4nKTtcbiAgICB9XG5cbiAgICBmb3JFYWNoKHR5cGVzTWFwLCAodHlwZXMsIHByaW1UeXBlKSA9PiB7XG4gICAgICAgIGZvckVhY2godHlwZXMsIHR5cGUgPT4ge1xuICAgICAgICAgICAgbWF0Y2hNb2RlVHlwZXNNYXBbdHlwZV0gPSBtb2Rlc1twcmltVHlwZV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIHRoaXMgaXMgdXNlZCBpbiBmaWx0ZXIgY3JpdGVyaWEgd2hlbiB0aGUgdXNlciB0eXBlcyB0aGUgY29sdW1uIG5hbWUgbWFudWFsbHkgYW5kIHdoZXJlIHdlIGRvbnQga25vdyB0aGUgdHlwZSBvZiB0aGUgY29sdW1uXG4gICAgbWF0Y2hNb2RlVHlwZXNNYXBbJ2RlZmF1bHQnXSA9IHVuaW9uKG1vZGVzWydudW1iZXInXSwgbW9kZXNbJ3N0cmluZyddLCBtb2Rlc1snY2hhcmFjdGVyJ10sIG1vZGVzWydkYXRlJ10sIG1vZGVzWydkYXRlJ10pO1xuICAgIHJldHVybiBtYXRjaE1vZGVUeXBlc01hcDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNYXRjaE1vZGVNc2dzID0gKGFwcExvY2FsZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0ICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfU1RBUlRTX1dJVEgsXG4gICAgICAgIHN0YXJ0aWdub3JlY2FzZSAgOiBhcHBMb2NhbGUuTEFCRUxfU1RBUlRTX1dJVEhfSUdOT1JFQ0FTRSxcbiAgICAgICAgZW5kICAgICAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9FTkRTX1dJVEgsXG4gICAgICAgIGVuZGlnbm9yZWNhc2UgICAgOiBhcHBMb2NhbGUuTEFCRUxfRU5EU19XSVRIX0lHTk9SRUNBU0UsXG4gICAgICAgIGFueXdoZXJlICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfQ09OVEFJTlMsXG4gICAgICAgIGFueXdoZXJlaWdub3JlY2FzZTogYXBwTG9jYWxlLkxBQkVMX0NPTlRBSU5TX0lHTk9SRUNBU0UsXG4gICAgICAgIGV4YWN0ICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfRVFVQUxfVE8sXG4gICAgICAgIGV4YWN0aWdub3JlY2FzZSAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfRVFVQUxfVE9fSUdOT1JFQ0FTRSxcbiAgICAgICAgbm90ZXF1YWxzICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19OT1RfRVFVQUxfVE8sXG4gICAgICAgIG5vdGVxdWFsc2lnbm9yZWNhc2U6IGFwcExvY2FsZS5MQUJFTF9JU19OT1RfRVFVQUxfVE9fSUdOT1JFQ0FTRSxcbiAgICAgICAgbGVzc3RoYW4gICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9MRVNTX1RIQU4sXG4gICAgICAgIGxlc3N0aGFuZXF1YWwgICAgOiBhcHBMb2NhbGUuTEFCRUxfTEVTU19USEFOX09SX0VRVUFMU19UTyxcbiAgICAgICAgZ3JlYXRlcnRoYW4gICAgICA6IGFwcExvY2FsZS5MQUJFTF9HUkVBVEVSX1RIQU4sXG4gICAgICAgIGdyZWF0ZXJ0aGFuZXF1YWwgOiBhcHBMb2NhbGUuTEFCRUxfR1JFQVRFUl9USEFOX09SX0VRVUFMU19UTyxcbiAgICAgICAgbnVsbCAgICAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19OVUxMLFxuICAgICAgICBpc25vdG51bGwgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX05PVF9OVUxMLFxuICAgICAgICBlbXB0eSAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX0VNUFRZLFxuICAgICAgICBpc25vdGVtcHR5ICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX05PVF9FTVBUWSxcbiAgICAgICAgbnVsbG9yZW1wdHkgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19OVUxMX09SX0VNUFRZLFxuICAgICAgICBpbiAgICAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lOLFxuICAgICAgICBub3RpbiAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX05PVF9JTixcbiAgICAgICAgYmV0d2VlbiAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9CRVRXRUVOXG4gICAgfTtcbn07XG5cbi8vIFJldHVybnMgYXJyYXkgb2YgY2xhc3NlcyB0aGF0IGFyZSBldmFsdWF0ZWQgdHJ1ZSBmb3IgZ2l2ZW4gb2JqZWN0IG9yIGFycmF5XG5jb25zdCBnZXRDbGFzc2VzQXJyYXkgPSBjbGFzc1ZhbCA9PiB7XG4gICAgbGV0IGNsYXNzZXMgPSBbXTtcblxuICAgIGlmIChpc0FycmF5KGNsYXNzVmFsKSkge1xuICAgICAgICBjbGFzc1ZhbC5mb3JFYWNoKHYgPT4ge1xuICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuY29uY2F0KGdldENsYXNzZXNBcnJheSh2KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGNsYXNzVmFsKSkge1xuICAgICAgICBmb3JFYWNoKGNsYXNzVmFsLCAodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQoa2V5LnNwbGl0KCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsYXNzZXM7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbmRpdGlvbmFsQ2xhc3NlcyA9IChudiwgb3Y/KSA9PiB7XG4gICAgbGV0IHRvQWRkO1xuICAgIGxldCB0b1JlbW92ZTtcbiAgICAvLyBpZiB0aGUgY29uZGl0aW9uYWwgY2xhc3MgcHJvcGVydHkgaGFzIGFscmVhZHkgdG9BZGQgYW5kIHRvUmVtb3ZlIGFycmF5cyB0aGVuIHRha2UgdGhhdCBvdGhlcndpc2UgYnVpbGQgdGhvc2UgYXJyYXlzXG4gICAgY29uc3QgY2xhc3NUb0FkZCA9IG52LnRvQWRkIHx8IG52O1xuICAgIGNvbnN0IGNsYXNzVG9SZW1vdmUgPSBudi50b1JlbW92ZSB8fCBvdjtcbiAgICBpZiAoaXNPYmplY3QobnYpKSB7XG4gICAgICAgIHRvQWRkID0gaXNBcnJheShjbGFzc1RvQWRkKSA/IGNsYXNzVG9BZGQgOiBnZXRDbGFzc2VzQXJyYXkoY2xhc3NUb0FkZCB8fCBbXSk7XG4gICAgICAgIHRvUmVtb3ZlID0gY2xhc3NUb1JlbW92ZSA/IChpc0FycmF5KGNsYXNzVG9SZW1vdmUpID8gY2xhc3NUb1JlbW92ZSA6IGdldENsYXNzZXNBcnJheShjbGFzc1RvUmVtb3ZlKSkgOiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b0FkZCA9IGNsYXNzVG9BZGQgPyBbY2xhc3NUb0FkZF0gOiBbXTtcbiAgICAgICAgdG9SZW1vdmUgPSBjbGFzc1RvUmVtb3ZlID8gW2NsYXNzVG9SZW1vdmVdIDogW107XG4gICAgfVxuICAgIHJldHVybiB7dG9BZGQsIHRvUmVtb3ZlfTtcbn07XG5cbi8qaGVscGVyIGZ1bmN0aW9uIGZvciBwcmVwYXJlRmllbGREZWZzKi9cbmNvbnN0IHB1c2hGaWVsZERlZiA9IChkYXRhT2JqZWN0LCBjb2x1bW5EZWZPYmosIG5hbWVQcmVmaXgsIG9wdGlvbnMpID0+IHtcbiAgICAvKmxvb3Agb3ZlciB0aGUgZmllbGRzIGluIHRoZSBkYXRhT2JqZWN0IHRvIHByb2Nlc3MgdGhlbSovXG4gICAgbGV0IG1vZGlmaWVkVGl0bGUsXG4gICAgICAgIHJlbGF0ZWRUYWJsZSxcbiAgICAgICAgcmVsYXRlZEZpZWxkLFxuICAgICAgICByZWxhdGVkSW5mbyxcbiAgICAgICAgZmllbGROYW1lLFxuICAgICAgICBpc1JlbGF0ZWQ7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgZm9yRWFjaChkYXRhT2JqZWN0LCAodmFsdWUsIHRpdGxlKSA9PiB7XG4gICAgICAgIGlmIChpbmNsdWRlcyh0aXRsZSwgJy4nKSkge1xuICAgICAgICAgICAgcmVsYXRlZEluZm8gPSBzcGxpdCh0aXRsZSwgJy4nKTtcbiAgICAgICAgICAgIHJlbGF0ZWRUYWJsZSA9IHJlbGF0ZWRJbmZvWzBdO1xuICAgICAgICAgICAgcmVsYXRlZEZpZWxkID0gcmVsYXRlZEluZm9bMV07XG4gICAgICAgICAgICBpc1JlbGF0ZWQgICAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm5vTW9kaWZ5VGl0bGUpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1N0cmluZyh0aXRsZSkpIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllZFRpdGxlID0gcHJldHRpZnlMYWJlbCh0aXRsZSk7XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRUaXRsZSA9IGRlSHlwaGVuYXRlKG1vZGlmaWVkVGl0bGUpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVkVGl0bGUgPSBuYW1lUHJlZml4ID8gaW5pdENhcHMobmFtZVByZWZpeCkgKyAnICcgKyBtb2RpZmllZFRpdGxlIDogbW9kaWZpZWRUaXRsZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRUaXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRpdGxlID0gbmFtZVByZWZpeCA/IG5hbWVQcmVmaXggKyAnLicgKyB0aXRsZSA6IHRpdGxlO1xuICAgICAgICBpZiAoaXNSZWxhdGVkKSB7XG4gICAgICAgICAgICAvLyBGb3IgcmVsYXRlZCBjb2x1bW5zLCBzaG9ydGVuIHRoZSB0aXRsZSB0byBsYXN0IHR3byB3b3Jkc1xuICAgICAgICAgICAgZmllbGROYW1lID0gc3BsaXQobW9kaWZpZWRUaXRsZSwgJyAnKTtcbiAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5sZW5ndGggPiAxID8gZmllbGROYW1lW2ZpZWxkTmFtZS5sZW5ndGggLSAyXSArICcgJyArIGZpZWxkTmFtZVtmaWVsZE5hbWUubGVuZ3RoIC0gMV0gOiBmaWVsZE5hbWVbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZE5hbWUgPSBtb2RpZmllZFRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlZk9iaiA9IG9wdGlvbnMuc2V0QmluZGluZ0ZpZWxkID8geydkaXNwbGF5TmFtZSc6IGZpZWxkTmFtZSwgJ2ZpZWxkJzogdGl0bGUsICdyZWxhdGVkVGFibGUnOiByZWxhdGVkVGFibGUsICdyZWxhdGVkRmllbGQnOiByZWxhdGVkRmllbGQgfHwgbW9kaWZpZWRUaXRsZX1cbiAgICAgICAgOiB7J2Rpc3BsYXlOYW1lJzogZmllbGROYW1lLCAncmVsYXRlZFRhYmxlJzogcmVsYXRlZFRhYmxlLCAncmVsYXRlZEZpZWxkJzogcmVsYXRlZEZpZWxkIHx8IG1vZGlmaWVkVGl0bGV9O1xuICAgICAgICAvKmlmIGZpZWxkIGlzIGEgbGVhZiBub2RlLCBwdXNoIGl0IGluIHRoZSBjb2x1bW5EZWZzKi9cbiAgICAgICAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgKGlzQXJyYXkodmFsdWUpICYmICF2YWx1ZVswXSkpIHtcbiAgICAgICAgICAgIC8qaWYgdGhlIGNvbHVtbiBjb3VudGVyIGhhcyByZWFjaGVkIHVwcGVyQm91bmQgcmV0dXJuKi9cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnVwcGVyQm91bmQgJiYgb3B0aW9ucy5jb2x1bW5Db3VudCA9PT0gb3B0aW9ucy51cHBlckJvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uRGVmT2JqLnRlcm1pbmFscy5wdXNoKGRlZk9iaik7XG4gICAgICAgICAgICAvKmluY3JlbWVudCB0aGUgY29sdW1uIGNvdW50ZXIqL1xuICAgICAgICAgICAgb3B0aW9ucy5jb2x1bW5Db3VudCArPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyplbHNlIGZpZWxkIGlzIGFuIG9iamVjdCwgcHJvY2VzcyBpdCByZWN1cnNpdmVseSovXG4gICAgICAgICAgICAvKiBpZiBwYXJlbnQgbm9kZSB0byBiZSBpbmNsdWRlZCwgaW5jbHVkZSBpdCAqL1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29sdW1uQ291bnQgIT09IG9wdGlvbnMudXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgICAgIGNvbHVtbkRlZk9iai5vYmplY3RzLnB1c2goZGVmT2JqKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyogaWYgZmllbGQgaXMgYW4gYXJyYXkgbm9kZSwgcHJvY2VzcyBpdHMgZmlyc3QgY2hpbGQgKi9cbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZVswXSkge1xuICAgICAgICAgICAgICAgIHB1c2hGaWVsZERlZih2YWx1ZVswXSwgY29sdW1uRGVmT2JqLCB0aXRsZSArICdbMF0nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHVzaEZpZWxkRGVmKHZhbHVlLCBjb2x1bW5EZWZPYmosIHRpdGxlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuY29uc3QgZ2V0TWV0YURhdGFGcm9tRGF0YSA9IChkYXRhKSA9PiB7XG4gICAgbGV0IGRhdGFPYmplY3Q7XG4gICAgaWYgKGlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGFbMF0pKSB7XG4gICAgICAgICAgICBkYXRhT2JqZWN0ID0gZ2V0Q2xvbmVkT2JqZWN0KGRhdGFbMF0pO1xuICAgICAgICAgICAgLypMb29wIG92ZXIgdGhlIG9iamVjdCB0byBmaW5kIG91dCBhbnkgbnVsbCB2YWx1ZXMuIElmIGFueSBudWxsIHZhbHVlcyBhcmUgcHJlc2VudCBpbiB0aGUgZmlyc3Qgcm93LCBjaGVjayBhbmQgYXNzaWduIHRoZSB2YWx1ZXMgZnJvbSBvdGhlciByb3cuXG4gICAgICAgICAgICAgKiBBcyBjb2x1bW4gZ2VuZXJhdGlvbiBpcyBkZXBlbmRlbnQgb24gZGF0YSwgZm9yIHJlbGF0ZWQgZmllbGRzIGlmIGZpcnN0IHJvdyB2YWx1ZSBpcyBudWxsLCBjb2x1bW5zIGFyZSBub3QgZ2VuZXJhdGVkLlxuICAgICAgICAgICAgICogVG8gcHJldmVudCB0aGlzLCBjaGVjayB0aGUgZGF0YSBpbiBvdGhlciByb3dzIGFuZCBnZW5lcmF0ZSB0aGUgY29sdW1ucy4gTmV3IGtleXMgZnJvbSBvdGhlcnMgcm93cyBhcmUgYWxzbyBhZGRlZCovXG4gICAgICAgICAgICBmb3JFYWNoKGRhdGEsIChyb3csIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKChpbmRleCArIDEpID49IDEwKSB7IC8vIExpbWl0IHRoZSBkYXRhIHNlYXJjaCB0byBmaXJzdCAxMCByZWNvcmRzXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNzaWduV2l0aChkYXRhT2JqZWN0LCByb3csIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gbnVsbCB8fCBvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFPYmplY3QgPSBkYXRhWzBdO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YU9iamVjdCA9IGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhT2JqZWN0O1xufTtcblxuZXhwb3J0IGNvbnN0IHByZXBhcmVGaWVsZERlZnMgPSAoZGF0YSwgb3B0aW9ucz8pID0+IHtcbiAgICBsZXQgZGF0YU9iamVjdDtcbiAgICBjb25zdCBjb2x1bW5EZWYgPSB7XG4gICAgICAgICAgICAnb2JqZWN0cycgOiBbXSxcbiAgICAgICAgICAgICd0ZXJtaW5hbHMnIDogW11cbiAgICAgICAgfTtcbiAgICAvKmlmIG5vIGRhdGEgcHJvdmlkZWQsIGluaXRpYWxpemUgZGVmYXVsdCBjb2x1bW4gZGVmaW5pdGlvbnMqL1xuICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gW107XG4gICAgfVxuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIG9wdGlvbnMuc2V0QmluZGluZ0ZpZWxkID0gdHJ1ZTtcbiAgICBvcHRpb25zLmNvbHVtbkNvdW50ID0gMDtcbiAgICBkYXRhT2JqZWN0ID0gZ2V0TWV0YURhdGFGcm9tRGF0YShkYXRhKTtcbiAgICAvKmZpcnN0IG9mIHRoZSBtYW55IGRhdGEgb2JqZWN0cyBmcm9tIGdyaWQgZGF0YSovXG4gICAgcHVzaEZpZWxkRGVmKGRhdGFPYmplY3QsIGNvbHVtbkRlZiwgJycsIG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucyB8fCAob3B0aW9ucyAmJiAhb3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5EZWYudGVybWluYWxzO1xuICAgIH1cbiAgICBzd2l0Y2ggKG9wdGlvbnMuZmlsdGVyKSB7XG4gICAgICAgIGNhc2UgJ2FsbCc6XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uRGVmO1xuICAgICAgICBjYXNlICdvYmplY3RzJzpcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5EZWYub2JqZWN0cztcbiAgICAgICAgY2FzZSAndGVybWluYWxzJzpcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5EZWYudGVybWluYWxzO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRGVmO1xufTtcblxuXG4vKipcbiAqIFRvIGdldCBjb250YWluZXIgdGFyZ2V0IGVsZW1lbnQgdG8gYXBwZW5kIHRoZSBsaXN0IGZvciBzZWFyY2ggYW5kIGRhdGVwaWNrZXIgcGFuZWwgd2hlbiBmaWVsZCBwcmVzZW50IGluIGRpYWxvZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3MgPSAoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiAnLndtLWFwcCc7XG5cbiAgICAvLyBCZWxvdyBjb2RlIGlzIG5vdCB3b3JraW5nIHdoZW4gd2UgaGF2ZSBuZXN0ZWQgZGlhbG9ncy5cbiAgICAvLyBOZXN0ZWQgZGlhbG9ncyBjYXNlIHdlIHdpbGwgaGF2ZSAgbXVsdGlwbGUgJy5tb2RhbC1jb250ZW50JyBjbGFzc2VzIG9uIERPTSBkdWUgdG8gdGhhdCBjb250YWluZXIgcG9zaXRpb25zIGlzIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkLlxuICAgIC8vIEJlbG93IGNvZGUgdG8gZml4IHRoZSBpc3N1ZSA9PT4gV01TLTE4NzUxXG4gICAgLy8gQXMgcmVncmVzc2lvbiB3ZSBnb3QgPT0+IFdNUy0xOTgzNVxuXG4gICAgLy8gaWYgKGVsZW1lbnQuY2xvc2VzdCgnLm1vZGFsLWRpYWxvZycpKSB7XG4gICAgLy8gICAgIHJldHVybiAnLm1vZGFsLWNvbnRlbnQnO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICAgIHJldHVybiAnYm9keSc7XG4gICAgLy8gfVxuXG59XG5cbi8qKlxuICogVG8gZXh0cmFjdCB0aGUgVmFyaWFibGUgTmFtZSBmcm9tIGEgV2lkZ2V0J3MgYmluZGRhdGFzb3VyY2UgYXR0cmlidXRlXG4gKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0RGF0YVNvdXJjZU5hbWUgPSAoYmluZERhdGFTb3VyY2UpID0+IHtcbiAgICBpZiAoIWJpbmREYXRhU291cmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGRhdGFTb3VyY2VOYW1lO1xuICAgIGNvbnN0IHBhcnRzID0gYmluZERhdGFTb3VyY2Uuc3BsaXQoJy4nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1swXSA9PT0gJ1ZhcmlhYmxlcycpIHtcbiAgICAgICAgZGF0YVNvdXJjZU5hbWUgPSBwYXJ0c1sxXTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFTb3VyY2VOYW1lO1xufVxuXG5leHBvcnQgY29uc3Qgc2V0Rm9jdXNUcmFwID0gKGNvbnRhaW5lciwgYWxsb3dPdXRzaWRlQ2xpY2ssIHNldFJldHVybkZvY3VzRWxlbWVudD8pID0+IHtcbiAgICByZXR1cm4gY3JlYXRlRm9jdXNUcmFwKGNvbnRhaW5lciwge1xuICAgICAgICBvbkFjdGl2YXRlOiAoKSA9PiBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyksXG4gICAgICAgIG9uRGVhY3RpdmF0ZTogKCkgPT4gY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpLFxuICAgICAgICBhbGxvd091dHNpZGVDbGljazogYWxsb3dPdXRzaWRlQ2xpY2ssXG4gICAgICAgIHNldFJldHVybkZvY3VzOiBzZXRSZXR1cm5Gb2N1c0VsZW1lbnQsXG4gICAgfSk7XG59XG5cbi8qKlxuICogR2V0cyBrZXlib2FyZCBmb2N1c2FibGUgZWxlbWVudHMgd2l0aGluIGEgc3BlY2lmaWVkIGVsZW1lbnRcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH1cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEtleWJvYXJkRm9jdXNhYmxlRWxlbWVudHMgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBlbGVtZW50Tm9kZUxpc3QgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2EsIGJ1dHRvbiwgaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGRldGFpbHMsIGlmcmFtZSwgZW1iZWQsIG9iamVjdCwgc3VtbWFyeSBkaWFsb2csIGF1ZGlvW2NvbnRyb2xzXSwgdmlkZW9bY29udHJvbHNdLCBbY29udGVudGVkaXRhYmxlXScpO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gQXJyYXkuZnJvbShlbGVtZW50Tm9kZUxpc3QpO1xuICAgIHJldHVybiBlbGVtZW50cy5maWx0ZXIoZWwgPT4ge1xuICAgICAgICByZXR1cm4gKCFlbC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiYgIWVsLmhhc0F0dHJpYnV0ZSgnaGlkZGVuJylcbiAgICAgICAgICAgICYmICghZWwuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpIHx8IChlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgJiYgIWVsLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpLnN0YXJ0c1dpdGgoJy0nKSkpKTtcbiAgICB9KTtcbn1cbiJdfQ==
|
|
@@ -37,6 +37,32 @@ export class BaseContainerComponent extends StylableComponent {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
+
ngOnDestroy() {
|
|
41
|
+
// MEMORY LEAK FIX: Clear redrawable components references
|
|
42
|
+
// The reDrawableComponents QueryList holds references to child components
|
|
43
|
+
// and updateRedrawableComponents manually pushes to _results array
|
|
44
|
+
if (this.reDrawableComponents) {
|
|
45
|
+
// Clear the manually added items from _results
|
|
46
|
+
if (this.reDrawableComponents._results) {
|
|
47
|
+
this.reDrawableComponents._results.length = 0;
|
|
48
|
+
}
|
|
49
|
+
// Reset the QueryList
|
|
50
|
+
this.reDrawableComponents.reset([]);
|
|
51
|
+
}
|
|
52
|
+
// MEMORY LEAK FIX: Clear Widgets object to release child widget references
|
|
53
|
+
// This object holds references to all child widgets in the container
|
|
54
|
+
if (this.Widgets) {
|
|
55
|
+
Object.keys(this.Widgets).forEach(key => {
|
|
56
|
+
delete this.Widgets[key];
|
|
57
|
+
});
|
|
58
|
+
this.Widgets = null;
|
|
59
|
+
}
|
|
60
|
+
// MEMORY LEAK FIX: Clear content reference
|
|
61
|
+
this.content = null;
|
|
62
|
+
// Call parent ngOnDestroy (StylableComponent → BaseComponent)
|
|
63
|
+
// This will clear the context and unregister the widget
|
|
64
|
+
super.ngOnDestroy();
|
|
65
|
+
}
|
|
40
66
|
static { this.ɵfac = function BaseContainerComponent_Factory(__ngFactoryType__) { i0.ɵɵinvalidFactory(); }; }
|
|
41
67
|
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: BaseContainerComponent, contentQueries: function BaseContainerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
|
42
68
|
i0.ɵɵcontentQuery(dirIndex, RedrawableDirective, 5);
|
|
@@ -51,4 +77,4 @@ export class BaseContainerComponent extends StylableComponent {
|
|
|
51
77
|
type: ContentChildren,
|
|
52
78
|
args: [RedrawableDirective, { descendants: true }]
|
|
53
79
|
}] }); })();
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9iYXNlL3NyYy93aWRnZXRzL2NvbW1vbi9iYXNlL2Jhc2UtY29udGFpbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFFLFNBQVMsRUFBVSxRQUFRLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXJFLE9BQU8sRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDOztBQUczQyxNQUFNLE9BQWdCLHNCQUF1QixTQUFRLGlCQUFpQjtJQU1sRSxZQUFZLEdBQWEsRUFBRSxhQUE0QixFQUFFLGVBQW9CO1FBQ3pFLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxPQUFPO1FBQ3RDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDckIsd0dBQXdHO1lBQ3hHLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM3SSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxjQUFjO1FBQ2xCLCtGQUErRjtRQUMvRixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNMLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsRUFBTyxFQUFFLEVBQVE7UUFDM0MsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEMsSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDTCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDMUIsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLDBEQUEwRDtRQUMxRCwwRUFBMEU7UUFDMUUsbUVBQW1FO1FBQ25FLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUIsK0NBQStDO1lBQy9DLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUNELHNCQUFzQjtZQUN0QixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCwyRUFBMkU7UUFDM0UscUVBQXFFO1FBQ3JFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLDhEQUE4RDtRQUM5RCx3REFBd0Q7UUFDeEQsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7O29FQXZFaUIsc0JBQXNCO3dDQUV2QixtQkFBbUI7Ozs7OztpRkFGbEIsc0JBQXNCO2NBRDNDLFNBQVM7bUZBR3VELG9CQUFvQjtrQkFBaEYsZUFBZTttQkFBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbnRlbnRDaGlsZHJlbiwgRGlyZWN0aXZlLCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0eWxhYmxlQ29tcG9uZW50IH0gZnJvbSBcIi4vc3R5bGFibGUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBSZWRyYXdhYmxlRGlyZWN0aXZlIH0gZnJvbSBcIi4uL3JlZHJhdy9yZWRyYXdhYmxlLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgSVdpZGdldENvbmZpZyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay90eXBlcyc7XG5pbXBvcnQge2luY2x1ZGVzLCBwaWNrQnl9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbnRhaW5lckNvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvLyByZWZlcmVuY2UgdG8gdGhlIGNvbXBvbmVudHMgd2hpY2ggbmVlZHMgYSByZWRyYXcoZWcsIGdyaWQsIGNoYXJ0KSB3aGVuIHRoZSBzaG93IG9mIHRoaXMgY29tcG9uZW50IGNoYW5nZXNcbiAgICBAQ29udGVudENoaWxkcmVuKFJlZHJhd2FibGVEaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcmVEcmF3YWJsZUNvbXBvbmVudHM7XG4gICAgcHVibGljIGNvbnRlbnQ7XG4gICAgcHVibGljIFdpZGdldHM7XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBXSURHRVRfQ09ORklHOiBJV2lkZ2V0Q29uZmlnLCBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVSZWRyYXdhYmxlQ29tcG9uZW50cyh3aWRnZXRzKSB7XG4gICAgICAgIHBpY2tCeSh3aWRnZXRzLCB3aWRnZXQgPT4ge1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHJlZHJhd2FibGUgd2lkZ2V0IGFuZCB3aGV0aGVyIGl0IGlzIGFscmVhZHkgZXhpc3QgaW4gcmVEcmF3YWJsZUNvbXBvbmVudHMgcXVlcnkgbGlzdCBvciBub3RcbiAgICAgICAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0Lm5hdGl2ZUVsZW1lbnQgJiYgd2lkZ2V0Lm5hdGl2ZUVsZW1lbnQuaGFzQXR0cmlidXRlKCdyZWRyYXdhYmxlJykgJiYgIWluY2x1ZGVzKHRoaXMucmVEcmF3YWJsZUNvbXBvbmVudHMuX3Jlc3VsdHMsIHdpZGdldCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlRHJhd2FibGVDb21wb25lbnRzLl9yZXN1bHRzLnB1c2god2lkZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LldpZGdldHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJlZHJhd2FibGVDb21wb25lbnRzKHdpZGdldC5XaWRnZXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWRyYXdDaGlsZHJlbigpIHtcbiAgICAgICAgLy8gSWYgY29udGFpbmVyIGlzIGJvdW5kIHRvIHBhcnRpYWwgY29udGVudCwgbWFudWFsbHkgdXBkYXRpbmcgcmVEcmF3YWJsZUNvbXBvbmVudHMgcXVlcnkgbGlzdC5cbiAgICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLldpZGdldHMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVkcmF3YWJsZUNvbXBvbmVudHModGhpcy5XaWRnZXRzKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlRHJhd2FibGVDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZURyYXdhYmxlQ29tcG9uZW50cy5mb3JFYWNoKGMgPT4gYy5yZWRyYXcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMCk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIGlmIChrZXkgPT09ICdzaG93Jykge1xuICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWRyYXdDaGlsZHJlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgcmVkcmF3YWJsZSBjb21wb25lbnRzIHJlZmVyZW5jZXNcbiAgICAgICAgLy8gVGhlIHJlRHJhd2FibGVDb21wb25lbnRzIFF1ZXJ5TGlzdCBob2xkcyByZWZlcmVuY2VzIHRvIGNoaWxkIGNvbXBvbmVudHNcbiAgICAgICAgLy8gYW5kIHVwZGF0ZVJlZHJhd2FibGVDb21wb25lbnRzIG1hbnVhbGx5IHB1c2hlcyB0byBfcmVzdWx0cyBhcnJheVxuICAgICAgICBpZiAodGhpcy5yZURyYXdhYmxlQ29tcG9uZW50cykge1xuICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIG1hbnVhbGx5IGFkZGVkIGl0ZW1zIGZyb20gX3Jlc3VsdHNcbiAgICAgICAgICAgIGlmICh0aGlzLnJlRHJhd2FibGVDb21wb25lbnRzLl9yZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZURyYXdhYmxlQ29tcG9uZW50cy5fcmVzdWx0cy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVzZXQgdGhlIFF1ZXJ5TGlzdFxuICAgICAgICAgICAgdGhpcy5yZURyYXdhYmxlQ29tcG9uZW50cy5yZXNldChbXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIFdpZGdldHMgb2JqZWN0IHRvIHJlbGVhc2UgY2hpbGQgd2lkZ2V0IHJlZmVyZW5jZXNcbiAgICAgICAgLy8gVGhpcyBvYmplY3QgaG9sZHMgcmVmZXJlbmNlcyB0byBhbGwgY2hpbGQgd2lkZ2V0cyBpbiB0aGUgY29udGFpbmVyXG4gICAgICAgIGlmICh0aGlzLldpZGdldHMpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuV2lkZ2V0cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLldpZGdldHNba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5XaWRnZXRzID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgY29udGVudCByZWZlcmVuY2VcbiAgICAgICAgdGhpcy5jb250ZW50ID0gbnVsbDtcblxuICAgICAgICAvLyBDYWxsIHBhcmVudCBuZ09uRGVzdHJveSAoU3R5bGFibGVDb21wb25lbnQg4oaSIEJhc2VDb21wb25lbnQpXG4gICAgICAgIC8vIFRoaXMgd2lsbCBjbGVhciB0aGUgY29udGV4dCBhbmQgdW5yZWdpc3RlciB0aGUgd2lkZ2V0XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIl19
|