@acorex/components 6.5.79 → 6.5.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -7
- package/acorex-components.d.ts +5 -0
- package/esm2020/acorex-components.mjs +5 -0
- package/esm2020/lib/accordion/accordion.component.mjs +44 -0
- package/esm2020/lib/accordion/accordion.module.mjs +20 -0
- package/esm2020/lib/base/base-page.class.mjs +94 -0
- package/esm2020/lib/base/components.class.mjs +17 -0
- package/esm2020/lib/base/element.class.mjs +294 -0
- package/esm2020/lib/base/events.class.mjs +11 -0
- package/esm2020/lib/button/button.component.mjs +71 -0
- package/esm2020/lib/button/button.module.mjs +21 -0
- package/esm2020/lib/calendar/calendar-box/calendar-box.component.mjs +413 -0
- package/esm2020/lib/calendar/calendar-box/calendar-box.module.mjs +22 -0
- package/esm2020/lib/calendar/scheduler/scheduler-views.property.mjs +54 -0
- package/esm2020/lib/calendar/scheduler/scheduler.class.mjs +18 -0
- package/esm2020/lib/calendar/scheduler/scheduler.component.mjs +213 -0
- package/esm2020/lib/calendar/scheduler/scheduler.module.mjs +68 -0
- package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +132 -0
- package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +37 -0
- package/esm2020/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +47 -0
- package/esm2020/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +95 -0
- package/esm2020/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +204 -0
- package/esm2020/lib/calendar/scheduler/views/scheduler-view.component.mjs +99 -0
- package/esm2020/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +77 -0
- package/esm2020/lib/checkbox/checkbox.component.mjs +98 -0
- package/esm2020/lib/checkbox/checkbox.module.mjs +20 -0
- package/esm2020/lib/color-picker/color-box/color-box.component.mjs +422 -0
- package/esm2020/lib/color-picker/color-picker.component.mjs +82 -0
- package/esm2020/lib/color-picker/color-picker.module.mjs +24 -0
- package/esm2020/lib/context-menu/context-menu.component.mjs +65 -0
- package/esm2020/lib/context-menu/context-menu.directive.mjs +135 -0
- package/esm2020/lib/context-menu/context-menu.module.mjs +20 -0
- package/esm2020/lib/data-filter/columns/filter-column-date.component.mjs +138 -0
- package/esm2020/lib/data-filter/columns/filter-column-number.component.mjs +117 -0
- package/esm2020/lib/data-filter/columns/filter-column-selection.component.mjs +74 -0
- package/esm2020/lib/data-filter/columns/filter-column-string.component.mjs +117 -0
- package/esm2020/lib/data-filter/filter-panel/filter-panel.component.mjs +258 -0
- package/esm2020/lib/data-filter/filter.class.mjs +44 -0
- package/esm2020/lib/data-filter/filter.module.mjs +90 -0
- package/esm2020/lib/data-filter/toolbar/filter-toolbar.component.mjs +166 -0
- package/esm2020/lib/data-list/core/data-list.component.mjs +40 -0
- package/esm2020/lib/data-list/list/list.component.mjs +124 -0
- package/esm2020/lib/data-list/list/list.module.mjs +22 -0
- package/esm2020/lib/data-list/list/toolbar-list-view.component.mjs +85 -0
- package/esm2020/lib/data-source/datasource.component.mjs +47 -0
- package/esm2020/lib/data-source/datasource.module.mjs +18 -0
- package/esm2020/lib/data-source/read-param.mjs +5 -0
- package/esm2020/lib/date-picker/date-picker.component.mjs +702 -0
- package/esm2020/lib/date-picker/date-picker.module.mjs +25 -0
- package/esm2020/lib/dialog/dialog.component.mjs +24 -0
- package/esm2020/lib/dialog/dialog.module.mjs +21 -0
- package/esm2020/lib/dialog/dialog.service.mjs +150 -0
- package/esm2020/lib/drawer/content.component.mjs +18 -0
- package/esm2020/lib/drawer/drawer-container.component.mjs +36 -0
- package/esm2020/lib/drawer/drawer.component.mjs +142 -0
- package/esm2020/lib/drawer/drawer.module.mjs +23 -0
- package/esm2020/lib/dropdown/dropdown.component.mjs +176 -0
- package/esm2020/lib/dropdown/dropdown.module.mjs +26 -0
- package/esm2020/lib/fieldset/fieldset.component.mjs +59 -0
- package/esm2020/lib/fieldset/fieldset.module.mjs +19 -0
- package/esm2020/lib/form-group/form-group.component.mjs +34 -0
- package/esm2020/lib/form-group/form-group.module.mjs +21 -0
- package/esm2020/lib/label/label.component.mjs +19 -0
- package/esm2020/lib/label/label.module.mjs +21 -0
- package/esm2020/lib/loading/loading-indicator.component.mjs +17 -0
- package/esm2020/lib/loading/loading-panel.component.mjs +44 -0
- package/esm2020/lib/loading/loading.module.mjs +21 -0
- package/esm2020/lib/loading/loading.service.mjs +45 -0
- package/esm2020/lib/menu/menu-item.component.mjs +47 -0
- package/esm2020/lib/menu/menu.component.mjs +86 -0
- package/esm2020/lib/menu/menu.module.mjs +22 -0
- package/esm2020/lib/menu/menu2.component.mjs +96 -0
- package/esm2020/lib/number-box/number-box.component.mjs +622 -0
- package/esm2020/lib/number-box/number-box.module.mjs +21 -0
- package/esm2020/lib/page/content.component.mjs +32 -0
- package/esm2020/lib/page/footer.component.mjs +19 -0
- package/esm2020/lib/page/page.component.mjs +53 -0
- package/esm2020/lib/page/page.module.mjs +22 -0
- package/esm2020/lib/panel-box/panel-box.component.mjs +88 -0
- package/esm2020/lib/panel-box/panel-box.module.mjs +19 -0
- package/esm2020/lib/password-box/password-box.component.mjs +31 -0
- package/esm2020/lib/password-box/password-box.module.mjs +23 -0
- package/esm2020/lib/popover/custom-cdk-overlay.service.mjs +48 -0
- package/esm2020/lib/popover/overlay.service.mjs +91 -0
- package/esm2020/lib/popover/popover.component.mjs +133 -0
- package/esm2020/lib/popover/popover.module.mjs +19 -0
- package/esm2020/lib/popup/popup.component.mjs +147 -0
- package/esm2020/lib/popup/popup.module.mjs +25 -0
- package/esm2020/lib/popup/popup.service.mjs +93 -0
- package/esm2020/lib/progress-bar/progress-bar.component.mjs +19 -0
- package/esm2020/lib/progress-bar/progress-bar.module.mjs +19 -0
- package/esm2020/lib/property-editor/editors/check-editor/check-editor.mjs +61 -0
- package/esm2020/lib/property-editor/editors/check-editor/check.module.mjs +22 -0
- package/esm2020/lib/property-editor/editors/color-editor/color.editor.mjs +38 -0
- package/esm2020/lib/property-editor/editors/color-editor/color.module.mjs +24 -0
- package/esm2020/lib/property-editor/editors/column-editor/column.editor.mjs +115 -0
- package/esm2020/lib/property-editor/editors/column-editor/column.module.mjs +32 -0
- package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +211 -0
- package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +78 -0
- package/esm2020/lib/property-editor/editors/date-editor/date.editor.mjs +51 -0
- package/esm2020/lib/property-editor/editors/date-editor/date.module.mjs +24 -0
- package/esm2020/lib/property-editor/editors/number-editor/number.editor.mjs +63 -0
- package/esm2020/lib/property-editor/editors/number-editor/number.module.mjs +24 -0
- package/esm2020/lib/property-editor/editors/range-editor/range.editor.mjs +140 -0
- package/esm2020/lib/property-editor/editors/range-editor/range.module.mjs +61 -0
- package/esm2020/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +72 -0
- package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +71 -0
- package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +25 -0
- package/esm2020/lib/property-editor/editors/selection-editor/selection-editor.mjs +69 -0
- package/esm2020/lib/property-editor/editors/selection-editor/selection.module.mjs +22 -0
- package/esm2020/lib/property-editor/editors/switch-editor/number.editor.mjs +29 -0
- package/esm2020/lib/property-editor/editors/switch-editor/number.module.mjs +25 -0
- package/esm2020/lib/property-editor/editors/text-editor/text.editor.mjs +32 -0
- package/esm2020/lib/property-editor/editors/text-editor/text.module.mjs +24 -0
- package/esm2020/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +32 -0
- package/esm2020/lib/property-editor/editors/textarea-editor/textarea.module.mjs +24 -0
- package/esm2020/lib/property-editor/editors/time-editor/time.editor.mjs +43 -0
- package/esm2020/lib/property-editor/editors/time-editor/time.module.mjs +24 -0
- package/esm2020/lib/property-editor/property-editor-renderer.directive.mjs +157 -0
- package/esm2020/lib/property-editor/property-editor.class.mjs +102 -0
- package/esm2020/lib/property-editor/property-editor.module.mjs +196 -0
- package/esm2020/lib/query-builder/query-builder-group.component.mjs +124 -0
- package/esm2020/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +172 -0
- package/esm2020/lib/query-builder/query-builder-rule.component.mjs +399 -0
- package/esm2020/lib/query-builder/query-builder.class.mjs +20 -0
- package/esm2020/lib/query-builder/query-builder.component.mjs +87 -0
- package/esm2020/lib/query-builder/query-builder.module.mjs +62 -0
- package/esm2020/lib/query-builder/query-builder.service.mjs +197 -0
- package/esm2020/lib/search-bar/search-bar.component.mjs +286 -0
- package/esm2020/lib/search-bar/search-bar.module.mjs +63 -0
- package/esm2020/lib/searchbox/searchbox.component.mjs +81 -0
- package/esm2020/lib/searchbox/searchbox.module.mjs +24 -0
- package/esm2020/lib/selectbox/selectbox.component.mjs +961 -0
- package/esm2020/lib/selectbox/selectbox.module.mjs +44 -0
- package/esm2020/lib/selectbox/selectbox2.component.mjs +574 -0
- package/esm2020/lib/selection-list/selection-list.component.mjs +108 -0
- package/esm2020/lib/selection-list/selection-list.module.mjs +21 -0
- package/esm2020/lib/switch/switch.component.mjs +51 -0
- package/esm2020/lib/switch/switch.module.mjs +20 -0
- package/esm2020/lib/tab-page/tab-page-Renderer.component.mjs +71 -0
- package/esm2020/lib/tab-page/tab-page-host.component.mjs +114 -0
- package/esm2020/lib/tab-page/tab-page.module.mjs +21 -0
- package/esm2020/lib/tab-page/tab-page.service.mjs +160 -0
- package/esm2020/lib/tab-strip/tab-strip.component.mjs +36 -0
- package/esm2020/lib/tab-strip/tab-strip.module.mjs +19 -0
- package/esm2020/lib/tab-view/dynamic-tabs.directive.mjs +24 -0
- package/esm2020/lib/tab-view/tab-view.component.mjs +105 -0
- package/esm2020/lib/tab-view/tab-view.module.mjs +21 -0
- package/esm2020/lib/tab-view/tab.component.mjs +30 -0
- package/esm2020/lib/textarea/textarea.component.mjs +26 -0
- package/esm2020/lib/textarea/textarea.module.mjs +21 -0
- package/esm2020/lib/textbox/textbox.component.mjs +39 -0
- package/esm2020/lib/textbox/textbox.module.mjs +24 -0
- package/esm2020/lib/time-picker/time-picker.component.mjs +943 -0
- package/esm2020/lib/time-picker/time-picker.module.mjs +22 -0
- package/esm2020/lib/toast/toast-message/toast-message.component.mjs +74 -0
- package/esm2020/lib/toast/toast-wrapper/toast-wrapper.component.mjs +13 -0
- package/esm2020/lib/toast/toast.module.mjs +21 -0
- package/esm2020/lib/toast/toast.service.mjs +44 -0
- package/esm2020/lib/toolbar/group-button/toolbar-group-button.component.mjs +78 -0
- package/esm2020/lib/toolbar/menu/toolbar-menu.component.mjs +57 -0
- package/esm2020/lib/toolbar/search/toolbar-search.component.mjs +54 -0
- package/esm2020/lib/toolbar/title/toolbar-title.component.mjs +47 -0
- package/esm2020/lib/toolbar/toolbar-item.mjs +6 -0
- package/esm2020/lib/toolbar/toolbar.component.mjs +13 -0
- package/esm2020/lib/toolbar/toolbar.module.mjs +40 -0
- package/esm2020/lib/tooltip/tooltip.directive.mjs +100 -0
- package/esm2020/lib/tooltip/tooltip.module.mjs +19 -0
- package/esm2020/lib/tree-side-menu/tree-side-menu.component.mjs +646 -0
- package/esm2020/lib/tree-side-menu/tree-side-menu.module.mjs +35 -0
- package/esm2020/lib/tree-view/tree-view.component.mjs +775 -0
- package/esm2020/lib/tree-view/tree-view.module.mjs +22 -0
- package/esm2020/lib/upload-file/upload-file.component.mjs +208 -0
- package/esm2020/lib/upload-file/upload-file.events.mjs +2 -0
- package/esm2020/lib/upload-file/upload-file.module.mjs +24 -0
- package/esm2020/lib/validation/validation-form.component.mjs +65 -0
- package/esm2020/lib/validation/validation-rule.widget.mjs +111 -0
- package/esm2020/lib/validation/validation.class.mjs +2 -0
- package/esm2020/lib/validation/validation.component.mjs +89 -0
- package/esm2020/lib/validation/validation.module.mjs +34 -0
- package/esm2020/public-api.mjs +158 -0
- package/fesm2015/acorex-components.mjs +16013 -0
- package/fesm2015/acorex-components.mjs.map +1 -0
- package/{fesm2022 → fesm2020}/acorex-components.mjs +15581 -16543
- package/fesm2020/acorex-components.mjs.map +1 -0
- package/lib/accordion/accordion.component.d.ts +13 -13
- package/lib/accordion/accordion.module.d.ts +9 -9
- package/lib/base/base-page.class.d.ts +46 -46
- package/lib/base/components.class.d.ts +10 -10
- package/lib/base/element.class.d.ts +106 -106
- package/lib/base/events.class.d.ts +18 -18
- package/lib/button/button.component.d.ts +21 -21
- package/lib/button/button.module.d.ts +8 -8
- package/lib/calendar/calendar-box/calendar-box.component.d.ts +81 -81
- package/lib/calendar/calendar-box/calendar-box.module.d.ts +11 -11
- package/lib/calendar/scheduler/scheduler-views.property.d.ts +19 -19
- package/lib/calendar/scheduler/scheduler.class.d.ts +36 -36
- package/lib/calendar/scheduler/scheduler.component.d.ts +39 -39
- package/lib/calendar/scheduler/scheduler.module.d.ts +21 -21
- package/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.d.ts +25 -25
- package/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.d.ts +14 -14
- package/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.d.ts +16 -16
- package/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.d.ts +26 -26
- package/lib/calendar/scheduler/views/month/scheduler-month-view.component.d.ts +37 -37
- package/lib/calendar/scheduler/views/scheduler-view.component.d.ts +28 -28
- package/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.d.ts +24 -24
- package/lib/checkbox/checkbox.component.d.ts +30 -30
- package/lib/checkbox/checkbox.module.d.ts +9 -9
- package/lib/color-picker/color-box/color-box.component.d.ts +25 -25
- package/lib/color-picker/color-picker.component.d.ts +30 -30
- package/lib/color-picker/color-picker.module.d.ts +13 -13
- package/lib/context-menu/context-menu.component.d.ts +22 -22
- package/lib/context-menu/context-menu.directive.d.ts +38 -38
- package/lib/context-menu/context-menu.module.d.ts +9 -9
- package/lib/data-filter/columns/filter-column-date.component.d.ts +22 -22
- package/lib/data-filter/columns/filter-column-number.component.d.ts +15 -15
- package/lib/data-filter/columns/filter-column-selection.component.d.ts +18 -18
- package/lib/data-filter/columns/filter-column-string.component.d.ts +15 -15
- package/lib/data-filter/filter-panel/filter-panel.component.d.ts +45 -45
- package/lib/data-filter/filter.class.d.ts +40 -40
- package/lib/data-filter/filter.module.d.ts +24 -24
- package/lib/data-filter/toolbar/filter-toolbar.component.d.ts +25 -25
- package/lib/data-list/core/data-list.component.d.ts +15 -15
- package/lib/data-list/list/list.component.d.ts +40 -40
- package/lib/data-list/list/list.module.d.ts +11 -11
- package/lib/data-list/list/toolbar-list-view.component.d.ts +17 -17
- package/lib/data-source/datasource.component.d.ts +16 -16
- package/lib/data-source/datasource.module.d.ts +7 -7
- package/lib/data-source/read-param.d.ts +40 -40
- package/lib/date-picker/date-picker.component.d.ts +81 -81
- package/lib/date-picker/date-picker.module.d.ts +14 -14
- package/lib/dialog/dialog.component.d.ts +14 -14
- package/lib/dialog/dialog.module.d.ts +10 -10
- package/lib/dialog/dialog.service.d.ts +36 -36
- package/lib/drawer/content.component.d.ts +7 -7
- package/lib/drawer/drawer-container.component.d.ts +10 -10
- package/lib/drawer/drawer.component.d.ts +34 -34
- package/lib/drawer/drawer.module.d.ts +10 -10
- package/lib/dropdown/dropdown.component.d.ts +38 -38
- package/lib/dropdown/dropdown.module.d.ts +13 -13
- package/lib/fieldset/fieldset.component.d.ts +11 -11
- package/lib/fieldset/fieldset.module.d.ts +8 -8
- package/lib/form-group/form-group.component.d.ts +14 -14
- package/lib/form-group/form-group.module.d.ts +8 -8
- package/lib/label/label.component.d.ts +9 -9
- package/lib/label/label.module.d.ts +8 -8
- package/lib/loading/loading-indicator.component.d.ts +9 -9
- package/lib/loading/loading-panel.component.d.ts +13 -13
- package/lib/loading/loading.module.d.ts +10 -10
- package/lib/loading/loading.service.d.ts +13 -13
- package/lib/menu/menu-item.component.d.ts +18 -18
- package/lib/menu/menu.component.d.ts +35 -35
- package/lib/menu/menu.module.d.ts +11 -11
- package/lib/menu/menu2.component.d.ts +21 -21
- package/lib/number-box/number-box.component.d.ts +52 -52
- package/lib/number-box/number-box.module.d.ts +10 -10
- package/lib/page/content.component.d.ts +8 -8
- package/lib/page/footer.component.d.ts +5 -5
- package/lib/page/page.component.d.ts +16 -16
- package/lib/page/page.module.d.ts +11 -11
- package/lib/panel-box/panel-box.component.d.ts +19 -19
- package/lib/panel-box/panel-box.module.d.ts +8 -8
- package/lib/password-box/password-box.component.d.ts +12 -12
- package/lib/password-box/password-box.module.d.ts +10 -10
- package/lib/popover/custom-cdk-overlay.service.d.ts +19 -19
- package/lib/popover/overlay.service.d.ts +32 -32
- package/lib/popover/popover.component.d.ts +35 -35
- package/lib/popover/popover.module.d.ts +8 -8
- package/lib/popup/popup.component.d.ts +40 -40
- package/lib/popup/popup.module.d.ts +13 -13
- package/lib/popup/popup.service.d.ts +22 -22
- package/lib/progress-bar/progress-bar.component.d.ts +7 -7
- package/lib/progress-bar/progress-bar.module.d.ts +8 -8
- package/lib/property-editor/editors/check-editor/check-editor.d.ts +19 -19
- package/lib/property-editor/editors/check-editor/check.module.d.ts +11 -11
- package/lib/property-editor/editors/color-editor/color.editor.d.ts +13 -13
- package/lib/property-editor/editors/color-editor/color.module.d.ts +12 -12
- package/lib/property-editor/editors/column-editor/column.editor.d.ts +34 -34
- package/lib/property-editor/editors/column-editor/column.module.d.ts +20 -20
- package/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.d.ts +44 -44
- package/lib/property-editor/editors/conditional-color-editor/conditional-color.module.d.ts +19 -19
- package/lib/property-editor/editors/date-editor/date.editor.d.ts +28 -28
- package/lib/property-editor/editors/date-editor/date.module.d.ts +12 -12
- package/lib/property-editor/editors/number-editor/number.editor.d.ts +20 -20
- package/lib/property-editor/editors/number-editor/number.module.d.ts +12 -12
- package/lib/property-editor/editors/range-editor/range.editor.d.ts +29 -29
- package/lib/property-editor/editors/range-editor/range.module.d.ts +18 -18
- package/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.d.ts +29 -29
- package/lib/property-editor/editors/selectbox-editor/selectbox.editor.d.ts +28 -28
- package/lib/property-editor/editors/selectbox-editor/selectbox.module.d.ts +14 -14
- package/lib/property-editor/editors/selection-editor/selection-editor.d.ts +25 -25
- package/lib/property-editor/editors/selection-editor/selection.module.d.ts +11 -11
- package/lib/property-editor/editors/switch-editor/number.editor.d.ts +11 -11
- package/lib/property-editor/editors/switch-editor/number.module.d.ts +13 -13
- package/lib/property-editor/editors/text-editor/text.editor.d.ts +18 -18
- package/lib/property-editor/editors/text-editor/text.module.d.ts +12 -12
- package/lib/property-editor/editors/textarea-editor/textarea.editor.d.ts +17 -17
- package/lib/property-editor/editors/textarea-editor/textarea.module.d.ts +12 -12
- package/lib/property-editor/editors/time-editor/time.editor.d.ts +17 -17
- package/lib/property-editor/editors/time-editor/time.module.d.ts +12 -12
- package/lib/property-editor/property-editor-renderer.directive.d.ts +31 -31
- package/lib/property-editor/property-editor.class.d.ts +93 -93
- package/lib/property-editor/property-editor.module.d.ts +21 -21
- package/lib/query-builder/query-builder-group.component.d.ts +33 -33
- package/lib/query-builder/query-builder-popup/query-builder-popup.component.d.ts +35 -35
- package/lib/query-builder/query-builder-rule.component.d.ts +45 -45
- package/lib/query-builder/query-builder.class.d.ts +45 -45
- package/lib/query-builder/query-builder.component.d.ts +29 -29
- package/lib/query-builder/query-builder.module.d.ts +23 -23
- package/lib/query-builder/query-builder.service.d.ts +18 -18
- package/lib/search-bar/search-bar.component.d.ts +62 -62
- package/lib/search-bar/search-bar.module.d.ts +18 -18
- package/lib/searchbox/searchbox.component.d.ts +22 -23
- package/lib/searchbox/searchbox.module.d.ts +13 -13
- package/lib/selectbox/selectbox.component.d.ts +118 -120
- package/lib/selectbox/selectbox.module.d.ts +15 -15
- package/lib/selectbox/selectbox2.component.d.ts +103 -103
- package/lib/selection-list/selection-list.component.d.ts +32 -32
- package/lib/selection-list/selection-list.module.d.ts +10 -10
- package/lib/switch/switch.component.d.ts +20 -20
- package/lib/switch/switch.module.d.ts +9 -9
- package/lib/tab-page/tab-page-Renderer.component.d.ts +16 -16
- package/lib/tab-page/tab-page-host.component.d.ts +24 -24
- package/lib/tab-page/tab-page.module.d.ts +10 -10
- package/lib/tab-page/tab-page.service.d.ts +30 -30
- package/lib/tab-strip/tab-strip.component.d.ts +28 -28
- package/lib/tab-strip/tab-strip.module.d.ts +8 -8
- package/lib/tab-view/dynamic-tabs.directive.d.ts +16 -16
- package/lib/tab-view/tab-view.component.d.ts +26 -26
- package/lib/tab-view/tab-view.module.d.ts +10 -10
- package/lib/tab-view/tab.component.d.ts +12 -12
- package/lib/textarea/textarea.component.d.ts +12 -12
- package/lib/textarea/textarea.module.d.ts +8 -8
- package/lib/textbox/textbox.component.d.ts +16 -16
- package/lib/textbox/textbox.module.d.ts +11 -11
- package/lib/time-picker/time-picker.component.d.ts +52 -53
- package/lib/time-picker/time-picker.module.d.ts +11 -11
- package/lib/toast/toast-message/toast-message.component.d.ts +18 -18
- package/lib/toast/toast-wrapper/toast-wrapper.component.d.ts +8 -8
- package/lib/toast/toast.module.d.ts +9 -9
- package/lib/toast/toast.service.d.ts +18 -18
- package/lib/toolbar/group-button/toolbar-group-button.component.d.ts +12 -12
- package/lib/toolbar/menu/toolbar-menu.component.d.ts +24 -24
- package/lib/toolbar/search/toolbar-search.component.d.ts +16 -16
- package/lib/toolbar/title/toolbar-title.component.d.ts +9 -9
- package/lib/toolbar/toolbar-item.d.ts +3 -3
- package/lib/toolbar/toolbar.component.d.ts +8 -8
- package/lib/toolbar/toolbar.module.d.ts +14 -14
- package/lib/tooltip/tooltip.directive.d.ts +21 -21
- package/lib/tooltip/tooltip.module.d.ts +8 -8
- package/lib/tree-side-menu/tree-side-menu.component.d.ts +111 -111
- package/lib/tree-side-menu/tree-side-menu.module.d.ts +11 -11
- package/lib/tree-view/tree-view.component.d.ts +121 -121
- package/lib/tree-view/tree-view.module.d.ts +11 -11
- package/lib/upload-file/upload-file.component.d.ts +42 -42
- package/lib/upload-file/upload-file.events.d.ts +10 -10
- package/lib/upload-file/upload-file.module.d.ts +13 -13
- package/lib/validation/validation-form.component.d.ts +19 -19
- package/lib/validation/validation-rule.widget.d.ts +23 -23
- package/lib/validation/validation.class.d.ts +16 -16
- package/lib/validation/validation.component.d.ts +25 -25
- package/lib/validation/validation.module.d.ts +11 -11
- package/package.json +20 -15
- package/{index.d.ts → public-api.d.ts} +155 -155
- package/esm2022/acorex-components.mjs +0 -5
- package/esm2022/index.mjs +0 -158
- package/esm2022/lib/accordion/accordion.component.mjs +0 -45
- package/esm2022/lib/accordion/accordion.module.mjs +0 -20
- package/esm2022/lib/base/base-page.class.mjs +0 -97
- package/esm2022/lib/base/components.class.mjs +0 -17
- package/esm2022/lib/base/element.class.mjs +0 -301
- package/esm2022/lib/base/events.class.mjs +0 -17
- package/esm2022/lib/button/button.component.mjs +0 -74
- package/esm2022/lib/button/button.module.mjs +0 -21
- package/esm2022/lib/calendar/calendar-box/calendar-box.component.mjs +0 -426
- package/esm2022/lib/calendar/calendar-box/calendar-box.module.mjs +0 -22
- package/esm2022/lib/calendar/scheduler/scheduler-views.property.mjs +0 -59
- package/esm2022/lib/calendar/scheduler/scheduler.class.mjs +0 -16
- package/esm2022/lib/calendar/scheduler/scheduler.component.mjs +0 -226
- package/esm2022/lib/calendar/scheduler/scheduler.module.mjs +0 -68
- package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +0 -136
- package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +0 -37
- package/esm2022/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +0 -49
- package/esm2022/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +0 -102
- package/esm2022/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +0 -214
- package/esm2022/lib/calendar/scheduler/views/scheduler-view.component.mjs +0 -99
- package/esm2022/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +0 -85
- package/esm2022/lib/checkbox/checkbox.component.mjs +0 -102
- package/esm2022/lib/checkbox/checkbox.module.mjs +0 -20
- package/esm2022/lib/color-picker/color-box/color-box.component.mjs +0 -423
- package/esm2022/lib/color-picker/color-picker.component.mjs +0 -89
- package/esm2022/lib/color-picker/color-picker.module.mjs +0 -24
- package/esm2022/lib/context-menu/context-menu.component.mjs +0 -68
- package/esm2022/lib/context-menu/context-menu.directive.mjs +0 -146
- package/esm2022/lib/context-menu/context-menu.module.mjs +0 -20
- package/esm2022/lib/data-filter/columns/filter-column-date.component.mjs +0 -140
- package/esm2022/lib/data-filter/columns/filter-column-number.component.mjs +0 -119
- package/esm2022/lib/data-filter/columns/filter-column-selection.component.mjs +0 -75
- package/esm2022/lib/data-filter/columns/filter-column-string.component.mjs +0 -119
- package/esm2022/lib/data-filter/filter-panel/filter-panel.component.mjs +0 -267
- package/esm2022/lib/data-filter/filter.class.mjs +0 -46
- package/esm2022/lib/data-filter/filter.module.mjs +0 -88
- package/esm2022/lib/data-filter/toolbar/filter-toolbar.component.mjs +0 -168
- package/esm2022/lib/data-list/core/data-list.component.mjs +0 -37
- package/esm2022/lib/data-list/list/list.component.mjs +0 -134
- package/esm2022/lib/data-list/list/list.module.mjs +0 -22
- package/esm2022/lib/data-list/list/toolbar-list-view.component.mjs +0 -84
- package/esm2022/lib/data-source/datasource.component.mjs +0 -47
- package/esm2022/lib/data-source/datasource.module.mjs +0 -18
- package/esm2022/lib/data-source/read-param.mjs +0 -7
- package/esm2022/lib/date-picker/date-picker.component.mjs +0 -718
- package/esm2022/lib/date-picker/date-picker.module.mjs +0 -49
- package/esm2022/lib/dialog/dialog.component.mjs +0 -26
- package/esm2022/lib/dialog/dialog.module.mjs +0 -21
- package/esm2022/lib/dialog/dialog.service.mjs +0 -160
- package/esm2022/lib/drawer/content.component.mjs +0 -18
- package/esm2022/lib/drawer/drawer-container.component.mjs +0 -38
- package/esm2022/lib/drawer/drawer.component.mjs +0 -146
- package/esm2022/lib/drawer/drawer.module.mjs +0 -23
- package/esm2022/lib/dropdown/dropdown.component.mjs +0 -186
- package/esm2022/lib/dropdown/dropdown.module.mjs +0 -26
- package/esm2022/lib/fieldset/fieldset.component.mjs +0 -57
- package/esm2022/lib/fieldset/fieldset.module.mjs +0 -19
- package/esm2022/lib/form-group/form-group.component.mjs +0 -37
- package/esm2022/lib/form-group/form-group.module.mjs +0 -21
- package/esm2022/lib/label/label.component.mjs +0 -19
- package/esm2022/lib/label/label.module.mjs +0 -21
- package/esm2022/lib/loading/loading-indicator.component.mjs +0 -18
- package/esm2022/lib/loading/loading-panel.component.mjs +0 -45
- package/esm2022/lib/loading/loading.module.mjs +0 -21
- package/esm2022/lib/loading/loading.service.mjs +0 -47
- package/esm2022/lib/menu/menu-item.component.mjs +0 -50
- package/esm2022/lib/menu/menu.component.mjs +0 -98
- package/esm2022/lib/menu/menu.module.mjs +0 -22
- package/esm2022/lib/menu/menu2.component.mjs +0 -100
- package/esm2022/lib/number-box/number-box.component.mjs +0 -628
- package/esm2022/lib/number-box/number-box.module.mjs +0 -21
- package/esm2022/lib/page/content.component.mjs +0 -27
- package/esm2022/lib/page/footer.component.mjs +0 -19
- package/esm2022/lib/page/page.component.mjs +0 -57
- package/esm2022/lib/page/page.module.mjs +0 -22
- package/esm2022/lib/panel-box/panel-box.component.mjs +0 -87
- package/esm2022/lib/panel-box/panel-box.module.mjs +0 -19
- package/esm2022/lib/password-box/password-box.component.mjs +0 -32
- package/esm2022/lib/password-box/password-box.module.mjs +0 -23
- package/esm2022/lib/popover/custom-cdk-overlay.service.mjs +0 -50
- package/esm2022/lib/popover/overlay.service.mjs +0 -94
- package/esm2022/lib/popover/popover.component.mjs +0 -145
- package/esm2022/lib/popover/popover.module.mjs +0 -19
- package/esm2022/lib/popup/popup.component.mjs +0 -160
- package/esm2022/lib/popup/popup.module.mjs +0 -25
- package/esm2022/lib/popup/popup.service.mjs +0 -94
- package/esm2022/lib/progress-bar/progress-bar.component.mjs +0 -16
- package/esm2022/lib/progress-bar/progress-bar.module.mjs +0 -19
- package/esm2022/lib/property-editor/editors/check-editor/check-editor.mjs +0 -65
- package/esm2022/lib/property-editor/editors/check-editor/check.module.mjs +0 -22
- package/esm2022/lib/property-editor/editors/color-editor/color.editor.mjs +0 -41
- package/esm2022/lib/property-editor/editors/color-editor/color.module.mjs +0 -24
- package/esm2022/lib/property-editor/editors/column-editor/column.editor.mjs +0 -118
- package/esm2022/lib/property-editor/editors/column-editor/column.module.mjs +0 -32
- package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +0 -216
- package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +0 -76
- package/esm2022/lib/property-editor/editors/date-editor/date.editor.mjs +0 -87
- package/esm2022/lib/property-editor/editors/date-editor/date.module.mjs +0 -24
- package/esm2022/lib/property-editor/editors/number-editor/number.editor.mjs +0 -66
- package/esm2022/lib/property-editor/editors/number-editor/number.module.mjs +0 -24
- package/esm2022/lib/property-editor/editors/range-editor/range.editor.mjs +0 -145
- package/esm2022/lib/property-editor/editors/range-editor/range.module.mjs +0 -59
- package/esm2022/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +0 -76
- package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +0 -75
- package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +0 -25
- package/esm2022/lib/property-editor/editors/selection-editor/selection-editor.mjs +0 -73
- package/esm2022/lib/property-editor/editors/selection-editor/selection.module.mjs +0 -22
- package/esm2022/lib/property-editor/editors/switch-editor/number.editor.mjs +0 -30
- package/esm2022/lib/property-editor/editors/switch-editor/number.module.mjs +0 -25
- package/esm2022/lib/property-editor/editors/text-editor/text.editor.mjs +0 -36
- package/esm2022/lib/property-editor/editors/text-editor/text.module.mjs +0 -24
- package/esm2022/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +0 -35
- package/esm2022/lib/property-editor/editors/textarea-editor/textarea.module.mjs +0 -24
- package/esm2022/lib/property-editor/editors/time-editor/time.editor.mjs +0 -47
- package/esm2022/lib/property-editor/editors/time-editor/time.module.mjs +0 -24
- package/esm2022/lib/property-editor/property-editor-renderer.directive.mjs +0 -167
- package/esm2022/lib/property-editor/property-editor.class.mjs +0 -108
- package/esm2022/lib/property-editor/property-editor.module.mjs +0 -194
- package/esm2022/lib/query-builder/query-builder-group.component.mjs +0 -129
- package/esm2022/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +0 -177
- package/esm2022/lib/query-builder/query-builder-rule.component.mjs +0 -428
- package/esm2022/lib/query-builder/query-builder.class.mjs +0 -42
- package/esm2022/lib/query-builder/query-builder.component.mjs +0 -92
- package/esm2022/lib/query-builder/query-builder.module.mjs +0 -62
- package/esm2022/lib/query-builder/query-builder.service.mjs +0 -199
- package/esm2022/lib/search-bar/search-bar.component.mjs +0 -293
- package/esm2022/lib/search-bar/search-bar.module.mjs +0 -61
- package/esm2022/lib/searchbox/searchbox.component.mjs +0 -106
- package/esm2022/lib/searchbox/searchbox.module.mjs +0 -24
- package/esm2022/lib/selectbox/selectbox.component.mjs +0 -1051
- package/esm2022/lib/selectbox/selectbox.module.mjs +0 -44
- package/esm2022/lib/selectbox/selectbox2.component.mjs +0 -617
- package/esm2022/lib/selection-list/selection-list.component.mjs +0 -113
- package/esm2022/lib/selection-list/selection-list.module.mjs +0 -21
- package/esm2022/lib/switch/switch.component.mjs +0 -55
- package/esm2022/lib/switch/switch.module.mjs +0 -20
- package/esm2022/lib/tab-page/tab-page-Renderer.component.mjs +0 -75
- package/esm2022/lib/tab-page/tab-page-host.component.mjs +0 -124
- package/esm2022/lib/tab-page/tab-page.module.mjs +0 -21
- package/esm2022/lib/tab-page/tab-page.service.mjs +0 -159
- package/esm2022/lib/tab-strip/tab-strip.component.mjs +0 -38
- package/esm2022/lib/tab-strip/tab-strip.module.mjs +0 -19
- package/esm2022/lib/tab-view/dynamic-tabs.directive.mjs +0 -25
- package/esm2022/lib/tab-view/tab-view.component.mjs +0 -110
- package/esm2022/lib/tab-view/tab-view.module.mjs +0 -21
- package/esm2022/lib/tab-view/tab.component.mjs +0 -33
- package/esm2022/lib/textarea/textarea.component.mjs +0 -27
- package/esm2022/lib/textarea/textarea.module.mjs +0 -21
- package/esm2022/lib/textbox/textbox.component.mjs +0 -42
- package/esm2022/lib/textbox/textbox.module.mjs +0 -36
- package/esm2022/lib/time-picker/time-picker.component.mjs +0 -1107
- package/esm2022/lib/time-picker/time-picker.module.mjs +0 -34
- package/esm2022/lib/toast/toast-message/toast-message.component.mjs +0 -76
- package/esm2022/lib/toast/toast-wrapper/toast-wrapper.component.mjs +0 -13
- package/esm2022/lib/toast/toast.module.mjs +0 -21
- package/esm2022/lib/toast/toast.service.mjs +0 -45
- package/esm2022/lib/toolbar/group-button/toolbar-group-button.component.mjs +0 -77
- package/esm2022/lib/toolbar/menu/toolbar-menu.component.mjs +0 -62
- package/esm2022/lib/toolbar/search/toolbar-search.component.mjs +0 -56
- package/esm2022/lib/toolbar/title/toolbar-title.component.mjs +0 -37
- package/esm2022/lib/toolbar/toolbar-item.mjs +0 -4
- package/esm2022/lib/toolbar/toolbar.component.mjs +0 -13
- package/esm2022/lib/toolbar/toolbar.module.mjs +0 -40
- package/esm2022/lib/tooltip/tooltip.directive.mjs +0 -104
- package/esm2022/lib/tooltip/tooltip.module.mjs +0 -19
- package/esm2022/lib/tree-side-menu/tree-side-menu.component.mjs +0 -697
- package/esm2022/lib/tree-side-menu/tree-side-menu.module.mjs +0 -33
- package/esm2022/lib/tree-view/tree-view.component.mjs +0 -854
- package/esm2022/lib/tree-view/tree-view.module.mjs +0 -22
- package/esm2022/lib/upload-file/upload-file.component.mjs +0 -226
- package/esm2022/lib/upload-file/upload-file.events.mjs +0 -2
- package/esm2022/lib/upload-file/upload-file.module.mjs +0 -24
- package/esm2022/lib/validation/validation-form.component.mjs +0 -68
- package/esm2022/lib/validation/validation-rule.widget.mjs +0 -114
- package/esm2022/lib/validation/validation.class.mjs +0 -2
- package/esm2022/lib/validation/validation.component.mjs +0 -89
- package/esm2022/lib/validation/validation.module.mjs +0 -34
- package/fesm2022/acorex-components.mjs.map +0 -1
@@ -1,1051 +0,0 @@
|
|
1
|
-
import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, EventEmitter, Output, ViewChild, ChangeDetectorRef, ElementRef, ContentChild, NgZone, TemplateRef, } from '@angular/core';
|
2
|
-
import { Observable } from 'rxjs';
|
3
|
-
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
4
|
-
import { AXTextBoxComponent } from '../textbox/textbox.component';
|
5
|
-
import { AXDropdownComponent } from '../dropdown/dropdown.component';
|
6
|
-
import { AXValidatableComponent, } from '../base/element.class';
|
7
|
-
import { AXDataSourceComponent } from '../data-source/datasource.component';
|
8
|
-
import { AXValidation } from '../validation/validation.component';
|
9
|
-
import { AXBaseEvent } from '../base/events.class';
|
10
|
-
import { AXSearchBoxComponent } from '../searchbox/searchbox.component';
|
11
|
-
import { AXConfig } from '@acorex/core';
|
12
|
-
import { differenceBy } from 'lodash';
|
13
|
-
import * as i0 from "@angular/core";
|
14
|
-
import * as i1 from "@angular/common";
|
15
|
-
import * as i2 from "../dropdown/dropdown.component";
|
16
|
-
import * as i3 from "../textbox/textbox.component";
|
17
|
-
import * as i4 from "@acorex/core";
|
18
|
-
import * as i5 from "../checkbox/checkbox.component";
|
19
|
-
import * as i6 from "../searchbox/searchbox.component";
|
20
|
-
export class AXSelectBoxSelectionChangedEvent extends AXBaseEvent {
|
21
|
-
selectedItems;
|
22
|
-
selectedValues;
|
23
|
-
constructor(component, selectedItems, selectedValues) {
|
24
|
-
super();
|
25
|
-
this.selectedItems = selectedItems;
|
26
|
-
this.selectedValues = selectedValues;
|
27
|
-
this.component = component;
|
28
|
-
}
|
29
|
-
}
|
30
|
-
export class AXSelectBoxComponent extends AXValidatableComponent {
|
31
|
-
cdr;
|
32
|
-
ref;
|
33
|
-
zone;
|
34
|
-
showDropDownButton = true;
|
35
|
-
rowTemplate;
|
36
|
-
rowInputTemplate;
|
37
|
-
span;
|
38
|
-
textbox;
|
39
|
-
listContainer;
|
40
|
-
serchBox;
|
41
|
-
textBoxSelectBox;
|
42
|
-
showCheckBox = true;
|
43
|
-
readonly = false;
|
44
|
-
rtl = AXConfig.get('layout.rtl');
|
45
|
-
disabled = false;
|
46
|
-
placeholder;
|
47
|
-
size = 'md';
|
48
|
-
allowNull = true;
|
49
|
-
textAlign = null;
|
50
|
-
bufferSize = 20;
|
51
|
-
remoteOperation = false;
|
52
|
-
fitParent = true;
|
53
|
-
dropdownWidth = '300px';
|
54
|
-
dropdownToggle = new EventEmitter();
|
55
|
-
// this input is Private and only use in LOV
|
56
|
-
onDemandTranslate = false;
|
57
|
-
currentfocusedIndex = -1;
|
58
|
-
showLoading = false;
|
59
|
-
skip = -1;
|
60
|
-
searchText = '';
|
61
|
-
// @Input()
|
62
|
-
// chipsWidth: string = '';
|
63
|
-
text = '';
|
64
|
-
totalCount = 0;
|
65
|
-
_contentDataSource;
|
66
|
-
_dataSource;
|
67
|
-
get dataSource() {
|
68
|
-
return this._dataSource ? this._dataSource : this._contentDataSource;
|
69
|
-
}
|
70
|
-
set dataSource(v) {
|
71
|
-
this._dataSource = v;
|
72
|
-
}
|
73
|
-
_contentValidation;
|
74
|
-
_validation;
|
75
|
-
get validation() {
|
76
|
-
return this._validation ? this._validation : this._contentValidation;
|
77
|
-
}
|
78
|
-
set validation(v) {
|
79
|
-
this._validation = v;
|
80
|
-
}
|
81
|
-
constructor(cdr, ref, zone) {
|
82
|
-
super();
|
83
|
-
this.cdr = cdr;
|
84
|
-
this.ref = ref;
|
85
|
-
this.zone = zone;
|
86
|
-
}
|
87
|
-
dropdown;
|
88
|
-
disabledCallback;
|
89
|
-
allowSearch = true;
|
90
|
-
textField = 'text';
|
91
|
-
valueField = 'value';
|
92
|
-
disabledField = 'disabled';
|
93
|
-
mode = 'single';
|
94
|
-
itemRemove = false;
|
95
|
-
itemsChange = new EventEmitter();
|
96
|
-
onBlur = new EventEmitter();
|
97
|
-
onFocus = new EventEmitter();
|
98
|
-
_items = [];
|
99
|
-
get items() {
|
100
|
-
return this._items;
|
101
|
-
}
|
102
|
-
set items(v) {
|
103
|
-
this._items = v;
|
104
|
-
if (this.itemsChange) {
|
105
|
-
this.itemsChange.emit(v);
|
106
|
-
}
|
107
|
-
if (this.itemsStatusObserver) {
|
108
|
-
this.itemsStatusObserver.next(this.items.length);
|
109
|
-
}
|
110
|
-
}
|
111
|
-
hasSelectedValue = false;
|
112
|
-
itemsFiltered = [];
|
113
|
-
// #endregion
|
114
|
-
dropDownDisabled = false;
|
115
|
-
selectionChanged = new EventEmitter();
|
116
|
-
selectedItemsChange = new EventEmitter();
|
117
|
-
_selectedItems = [];
|
118
|
-
get selectedItems() {
|
119
|
-
return this._selectedItems || [];
|
120
|
-
}
|
121
|
-
set selectedItems(v) {
|
122
|
-
this.setSelectedItemsChange(v);
|
123
|
-
// if (!v) {
|
124
|
-
// v = [];
|
125
|
-
// }
|
126
|
-
// const old = this.selectedItems;
|
127
|
-
// if (JSON.stringify(old) !== JSON.stringify(v)) {
|
128
|
-
// this._selectedItems = this.mode == 'single' ? v.slice(0, 1) : [...new Set(v)]; //[...new Set(v[0])] : [...new Set(v)];
|
129
|
-
// this._selectedItems.forEach((c) => (c.selected = true));
|
130
|
-
// this.selectedItemsChange.emit(this._selectedItems);
|
131
|
-
// this.selectedValuesChange.emit(this.selectedValues);
|
132
|
-
// this.clearValidationStyle(this.ref.nativeElement);
|
133
|
-
// this.waitForData(() => {
|
134
|
-
// if (this._selectedItems) {
|
135
|
-
// this.items.forEach((c) => (c.selected = this._selectedItems.some((i) => i[this.valueField] == c[this.valueField])));
|
136
|
-
// }
|
137
|
-
// });
|
138
|
-
// }
|
139
|
-
}
|
140
|
-
setSelectedItemsChange(v, old = this.selectedItems) {
|
141
|
-
if (!v) {
|
142
|
-
v = [];
|
143
|
-
}
|
144
|
-
// const old = this.selectedItems;
|
145
|
-
var f = differenceBy(old, v, this.valueField);
|
146
|
-
var s = differenceBy(v, old, this.valueField);
|
147
|
-
// if (JSON.stringify(old) !== JSON.stringify(v)) {
|
148
|
-
if (f.length != 0 || s.length != 0) {
|
149
|
-
this._selectedItems =
|
150
|
-
this.mode == 'single' ? v.slice(0, 1) : [...new Set(v)]; //[...new Set(v[0])] : [...new Set(v)];
|
151
|
-
this._selectedItems.forEach((c) => (c.selected = true));
|
152
|
-
this.selectedItemsChange.emit(this._selectedItems);
|
153
|
-
this.selectedValuesChange.emit(this.selectedValues);
|
154
|
-
this.clearValidationStyle(this.ref.nativeElement);
|
155
|
-
this.waitForData(() => {
|
156
|
-
if (this._selectedItems) {
|
157
|
-
this.items.forEach((c) => (c.selected = this._selectedItems.some((i) => i[this.valueField] == c[this.valueField])));
|
158
|
-
}
|
159
|
-
});
|
160
|
-
}
|
161
|
-
}
|
162
|
-
ngOnInit() {
|
163
|
-
if (this.rowTemplate === undefined && this.rowInputTemplate != undefined) {
|
164
|
-
this.rowTemplate = this.rowInputTemplate;
|
165
|
-
}
|
166
|
-
if (this.rtl == null) {
|
167
|
-
this.rtl =
|
168
|
-
window
|
169
|
-
.getComputedStyle(this.ref.nativeElement, null)
|
170
|
-
.getPropertyValue('direction') === 'rtl';
|
171
|
-
}
|
172
|
-
}
|
173
|
-
scrolled(e) {
|
174
|
-
if (this.remoteOperation &&
|
175
|
-
this.totalCount > this.items.length &&
|
176
|
-
this.listContainer.nativeElement.scrollHeight != 0 &&
|
177
|
-
this.listContainer.nativeElement.scrollHeight -
|
178
|
-
this.listContainer.nativeElement.scrollTop -
|
179
|
-
300 <
|
180
|
-
50) {
|
181
|
-
if (this.skip !== this.items.length) {
|
182
|
-
this.showLoading = true;
|
183
|
-
this.skip = this.items.length;
|
184
|
-
const params = {};
|
185
|
-
params.skip = this.items.length;
|
186
|
-
params.take = this.bufferSize; //* (Math.floor(this.items.length / this.bufferSize) + 1);
|
187
|
-
if (this.textbox) {
|
188
|
-
params.searchText = this.text;
|
189
|
-
}
|
190
|
-
else {
|
191
|
-
params.searchText = null;
|
192
|
-
}
|
193
|
-
this.fetch(params);
|
194
|
-
}
|
195
|
-
}
|
196
|
-
}
|
197
|
-
setSelectedItems(v, isUserInput) {
|
198
|
-
let changed = false;
|
199
|
-
if (isUserInput) {
|
200
|
-
changed = JSON.stringify(v) !== JSON.stringify(this.selectedItems);
|
201
|
-
}
|
202
|
-
this.selectedItems = v;
|
203
|
-
this.setSelectedIndex();
|
204
|
-
if (isUserInput && changed) {
|
205
|
-
this.emitSelectionChangedEvent();
|
206
|
-
}
|
207
|
-
}
|
208
|
-
searchChangeObserver;
|
209
|
-
delay = 500;
|
210
|
-
textChanged(e) {
|
211
|
-
if ((e.value === null || e.value === undefined || e.value === '') &&
|
212
|
-
(e.oldValue === null || e.oldValue === undefined || e.oldValue === '')) {
|
213
|
-
}
|
214
|
-
else {
|
215
|
-
this.currentfocusedIndex = -1;
|
216
|
-
if (this.remoteOperation) {
|
217
|
-
this.searchText = this.text;
|
218
|
-
// this.searchText = e.value;
|
219
|
-
// this.text = e.value;
|
220
|
-
// this.items = [];
|
221
|
-
if (this.items) {
|
222
|
-
let t = this.items.length;
|
223
|
-
for (let i = 0; i < t; i++) {
|
224
|
-
this.items.pop();
|
225
|
-
}
|
226
|
-
}
|
227
|
-
// this.items.forEach((element) => {
|
228
|
-
// this.items.pop();
|
229
|
-
// });
|
230
|
-
const params = {};
|
231
|
-
params.searchText = this.text;
|
232
|
-
// params.searchText = e.value;
|
233
|
-
params.skip = 0;
|
234
|
-
params.take = this.bufferSize;
|
235
|
-
this.fetch(params);
|
236
|
-
}
|
237
|
-
}
|
238
|
-
}
|
239
|
-
isItemDisabled(item) {
|
240
|
-
if (item[this.disabledField] == true) {
|
241
|
-
return true;
|
242
|
-
}
|
243
|
-
else if (this.disabledCallback) {
|
244
|
-
return this.disabledCallback({ item, index: -1 });
|
245
|
-
}
|
246
|
-
else {
|
247
|
-
return false;
|
248
|
-
}
|
249
|
-
}
|
250
|
-
onButtonClick(e) { }
|
251
|
-
setSelectedIndex(sign = null) {
|
252
|
-
if (sign == null) {
|
253
|
-
if (!this.remoteOperation && this.text && this.text !== '') {
|
254
|
-
this.currentfocusedIndex = this.items
|
255
|
-
.filter((c) => c[this.textField]
|
256
|
-
.toLowerCase()
|
257
|
-
.includes(this.text.toLowerCase()))
|
258
|
-
.indexOf(this.selectedItems[this.selectedItems.length - 1]);
|
259
|
-
}
|
260
|
-
else {
|
261
|
-
this.currentfocusedIndex = this.items.indexOf(this.selectedItems[this.selectedItems.length - 1]);
|
262
|
-
}
|
263
|
-
}
|
264
|
-
else {
|
265
|
-
sign === -1 ? this.currentfocusedIndex-- : this.currentfocusedIndex++;
|
266
|
-
}
|
267
|
-
if (this.remoteOperation) {
|
268
|
-
this.itemsFiltered = this.items;
|
269
|
-
}
|
270
|
-
else {
|
271
|
-
this.itemsFiltered = this.text
|
272
|
-
? this.items.filter((c) => c[this.textField]
|
273
|
-
.toLowerCase()
|
274
|
-
.includes(this.text.toLowerCase()))
|
275
|
-
: this.items;
|
276
|
-
}
|
277
|
-
this.currentfocusedIndex =
|
278
|
-
this.currentfocusedIndex < 0
|
279
|
-
? 0
|
280
|
-
: this.currentfocusedIndex >= this.itemsFiltered.length
|
281
|
-
? this.itemsFiltered.length - 1
|
282
|
-
: this.currentfocusedIndex;
|
283
|
-
//
|
284
|
-
// set scroll
|
285
|
-
if (this.listContainer) {
|
286
|
-
this.zone.runOutsideAngular(() => {
|
287
|
-
const itemDiv = this.listContainer.nativeElement.querySelector(`.list-item:nth-child(${this.currentfocusedIndex})`);
|
288
|
-
if (itemDiv) {
|
289
|
-
itemDiv.scrollIntoView({ behavior: 'smooth' });
|
290
|
-
}
|
291
|
-
});
|
292
|
-
}
|
293
|
-
}
|
294
|
-
selectedValuesChange = new EventEmitter();
|
295
|
-
get selectedValues() {
|
296
|
-
if (this.mode === 'single') {
|
297
|
-
return this._selectedItems.map((c) => c[this.valueField])[0];
|
298
|
-
}
|
299
|
-
else {
|
300
|
-
return this._selectedItems.map((c) => c[this.valueField]) || [];
|
301
|
-
}
|
302
|
-
}
|
303
|
-
set selectedValues(v) {
|
304
|
-
if (this.compareSelectedValues(v)) {
|
305
|
-
return;
|
306
|
-
}
|
307
|
-
if (v == null) {
|
308
|
-
this.selectedItems = [];
|
309
|
-
}
|
310
|
-
else {
|
311
|
-
if (v !== undefined) {
|
312
|
-
if (v != [] && v != '' && v != null) {
|
313
|
-
this.hasSelectedValue = true;
|
314
|
-
}
|
315
|
-
this.waitForData(() => {
|
316
|
-
if (this.mode === 'single') {
|
317
|
-
if (this.items.filter((c) => v == c[this.valueField])) {
|
318
|
-
this.selectedItems = this.items.filter((c) => v == c[this.valueField]);
|
319
|
-
}
|
320
|
-
else {
|
321
|
-
this.selectedItems = [];
|
322
|
-
}
|
323
|
-
}
|
324
|
-
else {
|
325
|
-
if (Array.isArray(v)) {
|
326
|
-
if (this.selectedItems.length > v.length) {
|
327
|
-
this.selectedItems = this.selectedItems.filter((c) => v.includes(c[this.valueField]));
|
328
|
-
}
|
329
|
-
else {
|
330
|
-
let addId = [];
|
331
|
-
v.forEach((vId) => {
|
332
|
-
addId.push({
|
333
|
-
[this.valueField]: vId,
|
334
|
-
});
|
335
|
-
});
|
336
|
-
let newId = differenceBy(addId, this.selectedItems, this.valueField);
|
337
|
-
let vv = [];
|
338
|
-
newId.forEach((rc) => {
|
339
|
-
vv.push(rc[this.valueField]);
|
340
|
-
});
|
341
|
-
this.items
|
342
|
-
.filter((c) => vv.includes(c[this.valueField]))
|
343
|
-
.forEach((res) => {
|
344
|
-
this.selectedItems.push(res);
|
345
|
-
});
|
346
|
-
// this.selectedItems.push(this.items.filter((c) => vv.includes(c[this.valueField])));
|
347
|
-
this.setSelectedItemsChange(this.selectedItems, vv.length > 0 ? [1] : this.selectedItems);
|
348
|
-
}
|
349
|
-
// this.selectedItems = this.items.filter((c) => v.includes(c[this.valueField]));
|
350
|
-
}
|
351
|
-
else if (v) {
|
352
|
-
this.selectedItems = this.items.filter((c) => v === c[this.valueField]);
|
353
|
-
}
|
354
|
-
else {
|
355
|
-
this.selectedItems = [];
|
356
|
-
}
|
357
|
-
}
|
358
|
-
this.selectedValuesChange.emit(this.selectedValues);
|
359
|
-
this.cdr.markForCheck();
|
360
|
-
this.cdr.detectChanges();
|
361
|
-
});
|
362
|
-
}
|
363
|
-
}
|
364
|
-
}
|
365
|
-
compareSelectedValues(newValue) {
|
366
|
-
const currentValue = this.selectedValues;
|
367
|
-
return ((currentValue == null && newValue == null) ||
|
368
|
-
JSON.stringify(currentValue) === JSON.stringify(newValue));
|
369
|
-
}
|
370
|
-
setSelectedValues(v, isUserInput) {
|
371
|
-
const changed = isUserInput ? !this.compareSelectedValues(v) : false;
|
372
|
-
this.selectedValues = v;
|
373
|
-
if (isUserInput && changed) {
|
374
|
-
this.emitSelectionChangedEvent();
|
375
|
-
}
|
376
|
-
}
|
377
|
-
emitSelectionChangedEvent() {
|
378
|
-
this.selectedValuesChange.emit(this.selectedValues);
|
379
|
-
this.selectionChanged.emit(new AXSelectBoxSelectionChangedEvent(this, this.selectedItems, this.selectedValues));
|
380
|
-
}
|
381
|
-
ngAfterViewInit() {
|
382
|
-
if (this.bufferSize < 10) {
|
383
|
-
this.bufferSize = 10;
|
384
|
-
}
|
385
|
-
if (this.mode == 'single') {
|
386
|
-
this.showCheckBox = false;
|
387
|
-
}
|
388
|
-
else {
|
389
|
-
this.showCheckBox = true;
|
390
|
-
}
|
391
|
-
if (!this.remoteOperation ||
|
392
|
-
(this.remoteOperation && this.hasSelectedValue)) {
|
393
|
-
this.refresh();
|
394
|
-
}
|
395
|
-
}
|
396
|
-
dropdownToggleSelecBox(e) {
|
397
|
-
this.text = '';
|
398
|
-
if (this.dropdown.isOpen) {
|
399
|
-
this.refresh();
|
400
|
-
setTimeout(() => {
|
401
|
-
if (this.serchBox) {
|
402
|
-
this.serchBox.focus();
|
403
|
-
}
|
404
|
-
}, 1);
|
405
|
-
}
|
406
|
-
else {
|
407
|
-
// this.refresh();
|
408
|
-
}
|
409
|
-
this.dropdownToggle.emit(e);
|
410
|
-
}
|
411
|
-
ngAfterContentInit() {
|
412
|
-
// if (!this.allowSearch) {
|
413
|
-
// if (this.readonly == false) {
|
414
|
-
// this.itemRemove = true;
|
415
|
-
// this.readonly = true;
|
416
|
-
// }
|
417
|
-
// }
|
418
|
-
this.initValidation(this.ref, 'selectedItems', this.validation);
|
419
|
-
if (this.dataSource) {
|
420
|
-
// if (this.allowSearch == false) {
|
421
|
-
// this.fetch();
|
422
|
-
// }
|
423
|
-
this.dataSource.onDataReceived.subscribe((c) => {
|
424
|
-
this.showLoading = false;
|
425
|
-
this.dataReceived(c.data.result);
|
426
|
-
});
|
427
|
-
}
|
428
|
-
this.cdr.markForCheck();
|
429
|
-
this.cdr.detectChanges();
|
430
|
-
}
|
431
|
-
dataReceived(data) {
|
432
|
-
if (this.remoteOperation) {
|
433
|
-
if (this.searchText &&
|
434
|
-
this.searchText != null &&
|
435
|
-
this.searchText !== '') {
|
436
|
-
if (data.totalCount) {
|
437
|
-
if (this.items.length == 0) {
|
438
|
-
//this.items = data.items;
|
439
|
-
data.items.forEach((item) => {
|
440
|
-
this.items.push(item);
|
441
|
-
});
|
442
|
-
}
|
443
|
-
else {
|
444
|
-
data.items.forEach((item) => {
|
445
|
-
this.items.push(item);
|
446
|
-
});
|
447
|
-
// if (this.itemsStatusObserver) {
|
448
|
-
// this.itemsStatusObserver.next(this.items.length);
|
449
|
-
// }
|
450
|
-
}
|
451
|
-
this.totalCount = data.totalCount;
|
452
|
-
}
|
453
|
-
else {
|
454
|
-
if (this.items.length == 0) {
|
455
|
-
this.items = data.items;
|
456
|
-
}
|
457
|
-
else {
|
458
|
-
data.items.forEach((item) => {
|
459
|
-
this.items.push(item);
|
460
|
-
});
|
461
|
-
// if (this.itemsStatusObserver) {
|
462
|
-
// this.itemsStatusObserver.next(this.items.length);
|
463
|
-
// }
|
464
|
-
}
|
465
|
-
this.totalCount = data.items == undefined ? 0 : data.items.length;
|
466
|
-
}
|
467
|
-
}
|
468
|
-
else if (data.items && data.items.length === data.totalCount) {
|
469
|
-
this.items = data.items;
|
470
|
-
this.totalCount = data.items.length;
|
471
|
-
}
|
472
|
-
else if (data.totalCount) {
|
473
|
-
data.items.forEach((elm) => {
|
474
|
-
this.items.push(elm);
|
475
|
-
});
|
476
|
-
// if (this.itemsStatusObserver) {
|
477
|
-
// this.itemsStatusObserver.next(this.items.length);
|
478
|
-
// }
|
479
|
-
this.totalCount = data.totalCount;
|
480
|
-
}
|
481
|
-
else {
|
482
|
-
data.forEach((elm) => {
|
483
|
-
this.items.push(elm);
|
484
|
-
// if (this.itemsStatusObserver) {
|
485
|
-
// this.itemsStatusObserver.next(this.items.length);
|
486
|
-
// }
|
487
|
-
});
|
488
|
-
this.totalCount = data.length;
|
489
|
-
}
|
490
|
-
}
|
491
|
-
else {
|
492
|
-
this.items = data;
|
493
|
-
}
|
494
|
-
this.cdr.markForCheck();
|
495
|
-
this.cdr.detectChanges();
|
496
|
-
this.dropdown.updatePosition();
|
497
|
-
}
|
498
|
-
// private params: AXDataSourceReadParams = {};
|
499
|
-
fetch(params = {}) {
|
500
|
-
// this.params = params;
|
501
|
-
if (this.dataSource) {
|
502
|
-
if (this.onDemandTranslate && params?.searchText) {
|
503
|
-
params.searchText = this.translateSearch(params?.searchText);
|
504
|
-
}
|
505
|
-
this.showLoading = true;
|
506
|
-
this.dataSource.fetch(params);
|
507
|
-
}
|
508
|
-
}
|
509
|
-
translateSearch(searchText) {
|
510
|
-
const latinPattern = /[A-Za-z;'\/\\[\],]/;
|
511
|
-
const asciiToPersianMap = {
|
512
|
-
113: "ض", 119: "ص", 101: "ث", 114: "ق", 116: "ف", 121: "غ", 117: "ع", 105: "ه", 111: "خ", 112: "ح",
|
513
|
-
97: "ش", 115: "س", 100: "ی", 102: "ب", 103: "ل", 104: "ا", 106: "ت", 107: "ن", 108: "م", 59: "ک",
|
514
|
-
122: "ظ", 120: "ط", 99: "ز", 118: "ر", 98: "ذ", 110: "د", 44: "و", 39: "گ", 67: "ژ", 93: "چ", 91: "ج", 92: "پ", 109: "ئ"
|
515
|
-
};
|
516
|
-
if (latinPattern.test(searchText)) {
|
517
|
-
searchText = searchText.split('').map((char) => {
|
518
|
-
const asciiValue = char.charCodeAt(0);
|
519
|
-
if (asciiToPersianMap[asciiValue]) {
|
520
|
-
return asciiToPersianMap[asciiValue];
|
521
|
-
}
|
522
|
-
else {
|
523
|
-
return char;
|
524
|
-
}
|
525
|
-
}).join('');
|
526
|
-
}
|
527
|
-
return searchText;
|
528
|
-
}
|
529
|
-
refresh() {
|
530
|
-
const params = {};
|
531
|
-
if (this.remoteOperation) {
|
532
|
-
params.skip = 0;
|
533
|
-
this.skip = 0;
|
534
|
-
params.take = this.bufferSize;
|
535
|
-
}
|
536
|
-
if (this.dataSource != undefined) {
|
537
|
-
// this.items = [];
|
538
|
-
// this.items.forEach((element) => {
|
539
|
-
// this.items.pop();
|
540
|
-
// });
|
541
|
-
if (this.items) {
|
542
|
-
let t = this.items.length;
|
543
|
-
for (let i = 0; i < t; i++) {
|
544
|
-
this.items.pop();
|
545
|
-
}
|
546
|
-
}
|
547
|
-
this.fetch(params);
|
548
|
-
}
|
549
|
-
}
|
550
|
-
handleItemRemoveClick(item) {
|
551
|
-
if (this.mode === 'single') {
|
552
|
-
// this.selectedItems = null;
|
553
|
-
this.setSelectedValues(null, true);
|
554
|
-
// this.selectedItemsChange.emit(this._selectedItems);
|
555
|
-
// this.clearValidationStyle(this.ref.nativeElement);
|
556
|
-
}
|
557
|
-
else {
|
558
|
-
// this.selectedItems = this.selectedItems.filter((c) => c !== item);
|
559
|
-
this.setSelectedItems(this.selectedItems.filter((c) => c[this.valueField] !== item[this.valueField]), true);
|
560
|
-
// this._selectedItems = this._selectedItems.filter(c => c !== item);
|
561
|
-
// this.selectedItemsChange.emit(this._selectedItems);
|
562
|
-
// this.clearValidationStyle(this.ref.nativeElement);
|
563
|
-
}
|
564
|
-
// this.text = '';
|
565
|
-
this.validate();
|
566
|
-
this.cdr.markForCheck();
|
567
|
-
}
|
568
|
-
onFocusTextBox(e) { }
|
569
|
-
onTextBoxClick(e) {
|
570
|
-
if (this.disabled == false && this.readonly == false) {
|
571
|
-
this.dropdown.open();
|
572
|
-
}
|
573
|
-
}
|
574
|
-
handleItemClick(e, item) {
|
575
|
-
if (this.isItemDisabled(item) == false) {
|
576
|
-
const value = item[this.valueField];
|
577
|
-
if (this.mode === 'single') {
|
578
|
-
// this.selectedValues = value;
|
579
|
-
this.setSelectedValues(value, true);
|
580
|
-
}
|
581
|
-
else {
|
582
|
-
const exists = this.selectedValues.slice(0);
|
583
|
-
if (exists.includes(value)) {
|
584
|
-
if (this.allowNull == true ||
|
585
|
-
(this.allowNull == false && this.selectedItems.length > 1)) {
|
586
|
-
this.handleItemRemoveClick(item);
|
587
|
-
}
|
588
|
-
}
|
589
|
-
else {
|
590
|
-
exists.push(value);
|
591
|
-
// this.selectedValues = exists;
|
592
|
-
this.setSelectedValues(exists, true);
|
593
|
-
}
|
594
|
-
}
|
595
|
-
if (this.mode == 'single') {
|
596
|
-
this.text = '';
|
597
|
-
this.dropdown.close();
|
598
|
-
this.cdr.markForCheck();
|
599
|
-
}
|
600
|
-
// if (e.stopPropagation() == undefined) {
|
601
|
-
// e.stopPropagation();
|
602
|
-
// }
|
603
|
-
setTimeout(() => {
|
604
|
-
if (this.serchBox) {
|
605
|
-
this.serchBox.focus();
|
606
|
-
}
|
607
|
-
}, 0);
|
608
|
-
}
|
609
|
-
e.stopPropagation();
|
610
|
-
}
|
611
|
-
handleKeyEventSearch(e) {
|
612
|
-
if (this.disabled || this.readonly) {
|
613
|
-
this.dropdown.close();
|
614
|
-
setTimeout(() => {
|
615
|
-
this.textBoxSelectBox.focus();
|
616
|
-
}, 0);
|
617
|
-
return false;
|
618
|
-
}
|
619
|
-
if (e.key === 'Escape') {
|
620
|
-
this.text = null;
|
621
|
-
setTimeout(() => {
|
622
|
-
this.textBoxSelectBox.focus();
|
623
|
-
}, 0);
|
624
|
-
}
|
625
|
-
if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') &&
|
626
|
-
this.getItems().length > 0 &&
|
627
|
-
e.type === 'keydown') {
|
628
|
-
if (this.mode === 'single') {
|
629
|
-
this.currentfocusedIndex =
|
630
|
-
this.currentfocusedIndex + (e.key === 'ArrowDown' ? 1 : -1);
|
631
|
-
this.selectedItemByIndex(this.currentfocusedIndex);
|
632
|
-
}
|
633
|
-
else {
|
634
|
-
if (this.dropdown.isOpen) {
|
635
|
-
this.setSelectedIndex(e.key === 'ArrowDown' ? 1 : -1);
|
636
|
-
}
|
637
|
-
else {
|
638
|
-
this.dropdown.open();
|
639
|
-
setTimeout(() => {
|
640
|
-
if (this.serchBox) {
|
641
|
-
this.serchBox.focus();
|
642
|
-
}
|
643
|
-
}, 0);
|
644
|
-
}
|
645
|
-
}
|
646
|
-
}
|
647
|
-
// if (e.key == 'Enter' && this.dropdown.isOpen && this.mode == 'single') {
|
648
|
-
// this.dropdown.close();
|
649
|
-
// setTimeout(() => {
|
650
|
-
// this.dropdown.focus();
|
651
|
-
// }, 0);
|
652
|
-
// }
|
653
|
-
//e.stopPropagation();
|
654
|
-
//e.preventDefault();
|
655
|
-
e.stopImmediatePropagation();
|
656
|
-
if (e.type === 'keydown' && e.key == 'Enter' && this.dropdown.isOpen) {
|
657
|
-
if (!this.remoteOperation && this.text && this.text !== '') {
|
658
|
-
this.itemsFiltered = this.items.filter((c) => c[this.textField]
|
659
|
-
.toLowerCase()
|
660
|
-
.includes(this.text.toLowerCase()));
|
661
|
-
if (this.itemsFiltered.length === 1) {
|
662
|
-
this.currentfocusedIndex = 0;
|
663
|
-
}
|
664
|
-
}
|
665
|
-
else {
|
666
|
-
this.itemsFiltered = this.items;
|
667
|
-
}
|
668
|
-
if (this.selectedItems.filter((c) => c[this.valueField] ===
|
669
|
-
this.itemsFiltered[this.currentfocusedIndex][this.valueField]).length > 0 &&
|
670
|
-
this.mode == 'multiple') {
|
671
|
-
if (this.allowNull == true ||
|
672
|
-
(this.allowNull == false && this.selectedItems.length > 1)) {
|
673
|
-
if (!this.remoteOperation && this.text && this.text !== '') {
|
674
|
-
this.selectedItems = this.selectedItems.filter((c) => c !==
|
675
|
-
this.items.filter((c) => c[this.textField]
|
676
|
-
.toLowerCase()
|
677
|
-
.includes(this.text.toLowerCase()))[this.currentfocusedIndex]);
|
678
|
-
}
|
679
|
-
else {
|
680
|
-
this.selectedItems = this.selectedItems.filter((c) => c[this.valueField] !==
|
681
|
-
this.items[this.currentfocusedIndex][this.valueField]);
|
682
|
-
}
|
683
|
-
this.emitSelectionChangedEvent();
|
684
|
-
}
|
685
|
-
}
|
686
|
-
else {
|
687
|
-
if (this.mode == 'multiple') {
|
688
|
-
if (this.currentfocusedIndex != -1) {
|
689
|
-
if (!this.remoteOperation && this.text && this.text !== '') {
|
690
|
-
if (this.itemsFiltered.length === 1) {
|
691
|
-
this.selectedItems.push(this.itemsFiltered[0]);
|
692
|
-
}
|
693
|
-
else {
|
694
|
-
this.selectedItems.push(this.itemsFiltered[this.currentfocusedIndex]);
|
695
|
-
}
|
696
|
-
}
|
697
|
-
else {
|
698
|
-
this.selectedItems.push(this.items[this.currentfocusedIndex]);
|
699
|
-
}
|
700
|
-
this.emitSelectionChangedEvent();
|
701
|
-
}
|
702
|
-
}
|
703
|
-
else {
|
704
|
-
if (this.text && this.itemsFiltered?.length === 1) {
|
705
|
-
this.setSelectedItems(this.itemsFiltered, true);
|
706
|
-
}
|
707
|
-
if (this.mode == 'single') {
|
708
|
-
this.dropdown.close();
|
709
|
-
setTimeout(() => {
|
710
|
-
this.textBoxSelectBox.focus();
|
711
|
-
}, 0);
|
712
|
-
}
|
713
|
-
}
|
714
|
-
}
|
715
|
-
e.stopPropagation();
|
716
|
-
e.preventDefault();
|
717
|
-
e.stopImmediatePropagation();
|
718
|
-
}
|
719
|
-
this.cdr.markForCheck();
|
720
|
-
}
|
721
|
-
isChar(str) {
|
722
|
-
if (str.includes('Shift') ||
|
723
|
-
str.includes('Tab') ||
|
724
|
-
str.includes('Control') ||
|
725
|
-
str.includes('Alt') ||
|
726
|
-
str.includes('CapsLock') ||
|
727
|
-
str.includes('Meta') ||
|
728
|
-
str.includes('ContextMenu') ||
|
729
|
-
str.includes('Enter') ||
|
730
|
-
str.includes('Backspace') ||
|
731
|
-
str.includes('PrintScreen') ||
|
732
|
-
str.includes('ScrollLock') ||
|
733
|
-
str.includes('Pause') ||
|
734
|
-
str.includes('Home') ||
|
735
|
-
str.includes('End') ||
|
736
|
-
str.includes('Insert') ||
|
737
|
-
str.includes('PageUp') ||
|
738
|
-
str.includes('Delete') ||
|
739
|
-
str.includes('PageDown') ||
|
740
|
-
str.includes('NumLock') ||
|
741
|
-
str.includes('Escape') ||
|
742
|
-
str.includes('Arrow') ||
|
743
|
-
str.includes('ّF1') ||
|
744
|
-
str.includes('F2') ||
|
745
|
-
str.includes('F3') ||
|
746
|
-
str.includes('F4') ||
|
747
|
-
str.includes('F5') ||
|
748
|
-
str.includes('F6') ||
|
749
|
-
str.includes('F7') ||
|
750
|
-
str.includes('F8') ||
|
751
|
-
str.includes('F9') ||
|
752
|
-
str.includes('F10') ||
|
753
|
-
str.includes('F11') ||
|
754
|
-
str.includes('F12')) {
|
755
|
-
return false;
|
756
|
-
}
|
757
|
-
else {
|
758
|
-
return true;
|
759
|
-
}
|
760
|
-
}
|
761
|
-
handleKeyEvent(e) {
|
762
|
-
// const NumberMinusPattern = /[a-zA-Z0-9\-]/g;
|
763
|
-
// const Farsi = /[پچجحخهعغفقثصضشسیبلاتنمکگوئدذرزطظژؤإأءًٌٍَُِّ\s]+$/;
|
764
|
-
// const inputChar = String.fromCharCode(e.charCode);
|
765
|
-
// const patternEn = /^[a-zA-Z0-9]*$/;
|
766
|
-
// const pattern = /^[\u0600-\u06FF\s]+$/;
|
767
|
-
const inputChar = e.key;
|
768
|
-
if ((inputChar != 'Backspace' &&
|
769
|
-
inputChar != 'Backspace' &&
|
770
|
-
inputChar != 'Tab' &&
|
771
|
-
inputChar != 'Enter' &&
|
772
|
-
inputChar != 'Escape' &&
|
773
|
-
inputChar != 'ArrowDown' &&
|
774
|
-
inputChar != 'ArrowUp') ||
|
775
|
-
e.code === 'Space' ||
|
776
|
-
e.ctrlKey == true) {
|
777
|
-
e.preventDefault();
|
778
|
-
}
|
779
|
-
if (e.key === 'Backspace' &&
|
780
|
-
e.type === 'keydown' &&
|
781
|
-
((this.allowNull === true && this.selectedItems.length > 0) ||
|
782
|
-
(this.allowNull === false && this.selectedItems.length > 1))) {
|
783
|
-
this.selectedItems.pop();
|
784
|
-
this.emitSelectionChangedEvent();
|
785
|
-
}
|
786
|
-
if (this.disabled || this.readonly) {
|
787
|
-
this.dropdown.close();
|
788
|
-
setTimeout(() => {
|
789
|
-
this.textBoxSelectBox.focus();
|
790
|
-
}, 0);
|
791
|
-
return false;
|
792
|
-
}
|
793
|
-
const INPUT = String.fromCharCode(e.keyCode);
|
794
|
-
if (this.isChar(e.key) && this.allowSearch && e.ctrlKey == false) {
|
795
|
-
this.dropdown.open();
|
796
|
-
setTimeout(() => {
|
797
|
-
if (this.serchBox) {
|
798
|
-
this.serchBox.focus();
|
799
|
-
}
|
800
|
-
}, 0);
|
801
|
-
this.text = e.key;
|
802
|
-
}
|
803
|
-
if (e.key === 'Escape') {
|
804
|
-
this.text = null;
|
805
|
-
this.dropdown.close();
|
806
|
-
setTimeout(() => {
|
807
|
-
this.textBoxSelectBox.focus();
|
808
|
-
}, 0);
|
809
|
-
}
|
810
|
-
if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') &&
|
811
|
-
this.getItems().length > 0 &&
|
812
|
-
e.type === 'keydown') {
|
813
|
-
if (this.mode === 'single') {
|
814
|
-
this.selectedItemByIndex(this.currentfocusedIndex + (e.key === 'ArrowDown' ? 1 : -1));
|
815
|
-
}
|
816
|
-
else {
|
817
|
-
if (this.dropdown.isOpen) {
|
818
|
-
// this.setSelectedIndex((e.key === 'ArrowDown' ? 1 : -1));
|
819
|
-
if (this.allowSearch == false) {
|
820
|
-
this.setSelectedIndex(e.key === 'ArrowDown' ? 1 : -1);
|
821
|
-
}
|
822
|
-
else {
|
823
|
-
setTimeout(() => {
|
824
|
-
if (this.serchBox) {
|
825
|
-
this.serchBox.focus();
|
826
|
-
}
|
827
|
-
}, 0);
|
828
|
-
}
|
829
|
-
}
|
830
|
-
else {
|
831
|
-
this.dropdown.open();
|
832
|
-
if (this.allowSearch == true) {
|
833
|
-
setTimeout(() => {
|
834
|
-
if (this.serchBox) {
|
835
|
-
this.serchBox.focus();
|
836
|
-
}
|
837
|
-
}, 0);
|
838
|
-
}
|
839
|
-
}
|
840
|
-
}
|
841
|
-
}
|
842
|
-
if (this.allowSearch === false) {
|
843
|
-
if (e.type === 'keydown' && e.key == 'Enter' && this.dropdown.isOpen) {
|
844
|
-
e.stopImmediatePropagation();
|
845
|
-
if (this.selectedItems.filter((c) => c[this.valueField] ===
|
846
|
-
this.itemsFiltered[this.currentfocusedIndex][this.valueField]).length > 0 &&
|
847
|
-
this.mode == 'multiple') {
|
848
|
-
if (this.allowNull == true ||
|
849
|
-
(this.allowNull == false && this.selectedItems.length > 1)) {
|
850
|
-
if (!this.remoteOperation && this.text && this.text !== '') {
|
851
|
-
this.selectedItems = this.selectedItems.filter((c) => c !==
|
852
|
-
this.items.filter((c) => c[this.textField]
|
853
|
-
.toLowerCase()
|
854
|
-
.includes(this.text.toLowerCase()))[this.currentfocusedIndex]);
|
855
|
-
}
|
856
|
-
else {
|
857
|
-
this.selectedItems = this.selectedItems.filter((c) => c[this.valueField] !==
|
858
|
-
this.items[this.currentfocusedIndex][this.valueField]);
|
859
|
-
}
|
860
|
-
this.emitSelectionChangedEvent();
|
861
|
-
}
|
862
|
-
}
|
863
|
-
else {
|
864
|
-
if (this.mode == 'multiple') {
|
865
|
-
if (this.currentfocusedIndex != -1) {
|
866
|
-
if (!this.remoteOperation && this.text && this.text !== '') {
|
867
|
-
if (this.itemsFiltered.length === 1) {
|
868
|
-
this.selectedItems.push(this.itemsFiltered[0]);
|
869
|
-
}
|
870
|
-
else {
|
871
|
-
this.selectedItems.push(this.itemsFiltered[this.currentfocusedIndex]);
|
872
|
-
}
|
873
|
-
}
|
874
|
-
else {
|
875
|
-
this.selectedItems.push(this.items[this.currentfocusedIndex]);
|
876
|
-
}
|
877
|
-
this.emitSelectionChangedEvent();
|
878
|
-
}
|
879
|
-
}
|
880
|
-
else {
|
881
|
-
if (this.text && this.itemsFiltered.length === 1) {
|
882
|
-
this.setSelectedItems(this.itemsFiltered, true);
|
883
|
-
}
|
884
|
-
if (this.mode == 'single') {
|
885
|
-
this.dropdown.close();
|
886
|
-
setTimeout(() => {
|
887
|
-
this.textBoxSelectBox.focus();
|
888
|
-
}, 0);
|
889
|
-
}
|
890
|
-
}
|
891
|
-
}
|
892
|
-
}
|
893
|
-
}
|
894
|
-
this.cdr.markForCheck();
|
895
|
-
}
|
896
|
-
focus() {
|
897
|
-
this.textbox.focus();
|
898
|
-
}
|
899
|
-
selectedItemByIndex(index) {
|
900
|
-
let item = [];
|
901
|
-
if (!this.remoteOperation && this.text && this.text !== '') {
|
902
|
-
this.itemsFiltered = this.items.filter((c) => c[this.textField]
|
903
|
-
.toLowerCase()
|
904
|
-
.includes(this.text.toLowerCase()));
|
905
|
-
item = this.itemsFiltered[index];
|
906
|
-
}
|
907
|
-
else {
|
908
|
-
item = this.items[index];
|
909
|
-
}
|
910
|
-
//
|
911
|
-
// const item = this.text ? this.items.filter((c) => (c[this.textField] as string).toLowerCase().includes(this.text.toLowerCase()))[index] : this.items[index];
|
912
|
-
if (item) {
|
913
|
-
this.setSelectedItems([item], true);
|
914
|
-
}
|
915
|
-
this.setSelectedIndex();
|
916
|
-
}
|
917
|
-
getItems() {
|
918
|
-
if (this.items == null) {
|
919
|
-
return [];
|
920
|
-
}
|
921
|
-
return !this.remoteOperation && this.text && this.text !== ''
|
922
|
-
? this.items.filter((c) => c[this.textField]
|
923
|
-
.toLowerCase()
|
924
|
-
.includes(this.text.toLowerCase()))
|
925
|
-
: this.items;
|
926
|
-
}
|
927
|
-
isItemSelected(item) {
|
928
|
-
return (this.selectedItems &&
|
929
|
-
this.selectedItems.filter((c) => c[this.valueField] === item[this.valueField]).length > 0);
|
930
|
-
}
|
931
|
-
itemsStatusObserver;
|
932
|
-
waitForData(callbackfn) {
|
933
|
-
if (this.items && this.items.length) {
|
934
|
-
callbackfn();
|
935
|
-
}
|
936
|
-
else if (!this.itemsStatusObserver) {
|
937
|
-
Observable.create((observer) => {
|
938
|
-
this.itemsStatusObserver = observer;
|
939
|
-
})
|
940
|
-
.pipe(debounceTime(100))
|
941
|
-
.pipe(distinctUntilChanged())
|
942
|
-
.subscribe((c) => {
|
943
|
-
callbackfn();
|
944
|
-
});
|
945
|
-
}
|
946
|
-
}
|
947
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXSelectBoxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
948
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AXSelectBoxComponent, selector: "ax-select-box", inputs: { showDropDownButton: "showDropDownButton", rowInputTemplate: "rowInputTemplate", showCheckBox: "showCheckBox", readonly: "readonly", rtl: "rtl", disabled: "disabled", placeholder: "placeholder", size: "size", allowNull: "allowNull", textAlign: "textAlign", bufferSize: "bufferSize", remoteOperation: "remoteOperation", fitParent: "fitParent", dropdownWidth: "dropdownWidth", onDemandTranslate: "onDemandTranslate", dataSource: "dataSource", validation: "validation", disabledCallback: "disabledCallback", allowSearch: "allowSearch", textField: "textField", valueField: "valueField", disabledField: "disabledField", mode: "mode", items: "items", selectedItems: "selectedItems", selectedValues: "selectedValues" }, outputs: { dropdownToggle: "dropdownToggle", itemsChange: "itemsChange", onBlur: "onBlur", onFocus: "onFocus", selectionChanged: "selectionChanged", selectedItemsChange: "selectedItemsChange", selectedValuesChange: "selectedValuesChange" }, host: { styleAttribute: "width: 100%" }, providers: [
|
949
|
-
{ provide: AXValidatableComponent, useExisting: AXSelectBoxComponent },
|
950
|
-
], queries: [{ propertyName: "rowTemplate", first: true, predicate: TemplateRef, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }, { propertyName: "_contentValidation", first: true, predicate: AXValidation, descendants: true, static: true }], viewQueries: [{ propertyName: "span", first: true, predicate: AXTextBoxComponent, descendants: true, static: true }, { propertyName: "textbox", first: true, predicate: AXTextBoxComponent, descendants: true, static: true }, { propertyName: "listContainer", first: true, predicate: ["listContainer"], descendants: true, static: true }, { propertyName: "serchBox", first: true, predicate: ["serchBox"], descendants: true }, { propertyName: "textBoxSelectBox", first: true, predicate: ["textBoxSelectBox"], descendants: true, static: true }, { propertyName: "dropdown", first: true, predicate: ["d"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ax-drop-down #d [size]=\"size\" [fitParent]=\"fitParent\" [dropdownWidth]=\"dropdownWidth\" [rtl]=\"rtl\"\n [showDropDownButton]=\"showDropDownButton\" [disabled]=\"disabled\" [readonly]=\"readonly\"\n (dropdownToggle)=\"dropdownToggleSelecBox($event)\">\n <ng-container start>\n <ng-content select=\"[start]\">\n </ng-content>\n </ng-container>\n <ng-container header>\n <div class=\"ax chips-container\" [horizontalScroll]=\"40\">\n <div class=\"chips\" [class.chips-blank]=\"mode === 'single'\" [title]=\"item[textField]\"\n *ngFor=\"let item of selectedItems\">\n <span class=\"chips-text\"\n [ngStyle]=\"{'width': item[textField].length > 15 && this.mode ==='multiple' ? '110px' : 'auto'}\">\n {{ item[textField] }}\n </span>\n <span class=\"close-icon\" (click)=\"handleItemRemoveClick(item)\"\n *ngIf=\"(readonly!=true || itemRemove ==true)&& disabled!=true && (allowNull==true || (selectedItems.length > 1))\">\n <i class=\"far fa-times close\"></i>\n </span>\n </div>\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\n <ax-text-box #textBoxSelectBox [textAlign]=\"textAlign\"\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\" [readonly]=\"readonly\"\n [disabled]=\"disabled\" (onkey)=\"handleKeyEvent($event)\" [size]=\"size\"\n (onFocus)=\"onFocusTextBox($event)\">\n </ax-text-box>\n </div>\n </div>\n </ng-container>\n <ng-container end>\n <ng-content select=\"[end]\">\n </ng-content>\n </ng-container>\n\n <ng-container panel>\n <div *ngIf=\"allowSearch\" class=\"search-wrapper\" style=\"padding: 0.7em;\">\n <ax-search-box #serchBox [onDemandTranslate]=\"onDemandTranslate\" [(value)]=\"text\" (onkey)=\"handleKeyEventSearch($event)\"\n (textChanged)=\"textChanged($event)\" (onButtonClick)=\"textChanged($event)\">\n </ax-search-box>\n </div>\n <div class=\"ax list-container\">\n <div #listContainer class=\"list-container-items\" (scroll)=\"scrolled($event)\">\n <ng-container *ngIf=\"getItems().length>0; then thenTemplate; else elseTemplate\"></ng-container>\n <ng-template #thenTemplate>\n <div [class.ax-state-disabled]=\"isItemDisabled(item)\" class=\"list-item\"\n *ngFor=\"let item of getItems();let i = index\" [class.focused]=\"i==currentfocusedIndex\"\n [class.selected]=\"isItemSelected(item)\" (click)=\"handleItemClick($event,item)\">\n <div style=\"display: flex;\">\n <ax-check-box *ngIf=\"showCheckBox\" [size]=\"size\" [value]=\"isItemSelected(item)\"\n [disabled]=\"(!allowNull && selectedItems.length === 1 && isItemSelected(item)) || isItemDisabled(item)\"\n (onClick)=\"handleItemClick($event,item)\">\n </ax-check-box>\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\n [title]=\"item[textField]\"\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\n <ng-container *ngTemplateOutlet=\"rowTemplate; context:{ $implicit: item }\">\n </ng-container>\n </div>\n\n </ng-container>\n <ng-template #elseTemplate>\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\n [title]=\"item[textField]\"\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\n {{ item[textField] }}\n </div>\n </ng-template>\n\n </div>\n\n </div>\n\n </ng-template>\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center;\">\n <i class=\"far fa-spinner-third fa-pulse fa-2x\" style=\"color: var(--ax-primary-color);\"></i>\n\n </div>\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\n <ng-template #elseTemplate>\n <ng-container *ngIf=\"showLoading == true; then searchTemplate else noDataTemplate\"></ng-container>\n <ng-template #searchTemplate>\n <div class=\"list-item\">\n {{'common.search' | trans}}\n </div>\n </ng-template>\n <ng-template #noDataTemplate>\n <div class=\"list-item\">\n {{'common.noDataFound' | trans}}\n </div>\n </ng-template>\n\n </ng-template>\n\n </div>\n\n </div>\n </ng-container>\n\n</ax-drop-down>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.AXDropdownComponent, selector: "ax-drop-down", inputs: ["rtl", "readonly", "loading", "dropdownWidth"], outputs: ["dropdownToggle", "onButtonClick"] }, { kind: "component", type: i3.AXTextBoxComponent, selector: "ax-text-box", inputs: ["mask", "showMask", "type", "maxLength", "maskGuid", "maskPlaceholder", "maskKeepCharPositions"] }, { kind: "directive", type: i4.AXHorizontalScrollDirective, selector: "[horizontalScroll]", inputs: ["horizontalScroll"] }, { kind: "component", type: i5.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["readonly", "disabled", "size", "label", "tabIndex", "indeterminate", "value"], outputs: ["onValueChanged", "valueChange", "onClick"] }, { kind: "component", type: i6.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["placeholder", "onDemandTranslate", "text", "delay"], outputs: ["textChanged", "onButtonClick"] }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "trans" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
951
|
-
}
|
952
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXSelectBoxComponent, decorators: [{
|
953
|
-
type: Component,
|
954
|
-
args: [{ selector: 'ax-select-box', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { style: 'width: 100%' }, providers: [
|
955
|
-
{ provide: AXValidatableComponent, useExisting: AXSelectBoxComponent },
|
956
|
-
], template: "<ax-drop-down #d [size]=\"size\" [fitParent]=\"fitParent\" [dropdownWidth]=\"dropdownWidth\" [rtl]=\"rtl\"\n [showDropDownButton]=\"showDropDownButton\" [disabled]=\"disabled\" [readonly]=\"readonly\"\n (dropdownToggle)=\"dropdownToggleSelecBox($event)\">\n <ng-container start>\n <ng-content select=\"[start]\">\n </ng-content>\n </ng-container>\n <ng-container header>\n <div class=\"ax chips-container\" [horizontalScroll]=\"40\">\n <div class=\"chips\" [class.chips-blank]=\"mode === 'single'\" [title]=\"item[textField]\"\n *ngFor=\"let item of selectedItems\">\n <span class=\"chips-text\"\n [ngStyle]=\"{'width': item[textField].length > 15 && this.mode ==='multiple' ? '110px' : 'auto'}\">\n {{ item[textField] }}\n </span>\n <span class=\"close-icon\" (click)=\"handleItemRemoveClick(item)\"\n *ngIf=\"(readonly!=true || itemRemove ==true)&& disabled!=true && (allowNull==true || (selectedItems.length > 1))\">\n <i class=\"far fa-times close\"></i>\n </span>\n </div>\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\n <ax-text-box #textBoxSelectBox [textAlign]=\"textAlign\"\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\" [readonly]=\"readonly\"\n [disabled]=\"disabled\" (onkey)=\"handleKeyEvent($event)\" [size]=\"size\"\n (onFocus)=\"onFocusTextBox($event)\">\n </ax-text-box>\n </div>\n </div>\n </ng-container>\n <ng-container end>\n <ng-content select=\"[end]\">\n </ng-content>\n </ng-container>\n\n <ng-container panel>\n <div *ngIf=\"allowSearch\" class=\"search-wrapper\" style=\"padding: 0.7em;\">\n <ax-search-box #serchBox [onDemandTranslate]=\"onDemandTranslate\" [(value)]=\"text\" (onkey)=\"handleKeyEventSearch($event)\"\n (textChanged)=\"textChanged($event)\" (onButtonClick)=\"textChanged($event)\">\n </ax-search-box>\n </div>\n <div class=\"ax list-container\">\n <div #listContainer class=\"list-container-items\" (scroll)=\"scrolled($event)\">\n <ng-container *ngIf=\"getItems().length>0; then thenTemplate; else elseTemplate\"></ng-container>\n <ng-template #thenTemplate>\n <div [class.ax-state-disabled]=\"isItemDisabled(item)\" class=\"list-item\"\n *ngFor=\"let item of getItems();let i = index\" [class.focused]=\"i==currentfocusedIndex\"\n [class.selected]=\"isItemSelected(item)\" (click)=\"handleItemClick($event,item)\">\n <div style=\"display: flex;\">\n <ax-check-box *ngIf=\"showCheckBox\" [size]=\"size\" [value]=\"isItemSelected(item)\"\n [disabled]=\"(!allowNull && selectedItems.length === 1 && isItemSelected(item)) || isItemDisabled(item)\"\n (onClick)=\"handleItemClick($event,item)\">\n </ax-check-box>\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\n [title]=\"item[textField]\"\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\n <ng-container *ngTemplateOutlet=\"rowTemplate; context:{ $implicit: item }\">\n </ng-container>\n </div>\n\n </ng-container>\n <ng-template #elseTemplate>\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\n [title]=\"item[textField]\"\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\n {{ item[textField] }}\n </div>\n </ng-template>\n\n </div>\n\n </div>\n\n </ng-template>\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center;\">\n <i class=\"far fa-spinner-third fa-pulse fa-2x\" style=\"color: var(--ax-primary-color);\"></i>\n\n </div>\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\n <ng-template #elseTemplate>\n <ng-container *ngIf=\"showLoading == true; then searchTemplate else noDataTemplate\"></ng-container>\n <ng-template #searchTemplate>\n <div class=\"list-item\">\n {{'common.search' | trans}}\n </div>\n </ng-template>\n <ng-template #noDataTemplate>\n <div class=\"list-item\">\n {{'common.noDataFound' | trans}}\n </div>\n </ng-template>\n\n </ng-template>\n\n </div>\n\n </div>\n </ng-container>\n\n</ax-drop-down>" }]
|
957
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { showDropDownButton: [{
|
958
|
-
type: Input
|
959
|
-
}], rowTemplate: [{
|
960
|
-
type: ContentChild,
|
961
|
-
args: [TemplateRef, { static: true }]
|
962
|
-
}], rowInputTemplate: [{
|
963
|
-
type: Input
|
964
|
-
}], span: [{
|
965
|
-
type: ViewChild,
|
966
|
-
args: [AXTextBoxComponent, { static: true }]
|
967
|
-
}], textbox: [{
|
968
|
-
type: ViewChild,
|
969
|
-
args: [AXTextBoxComponent, { static: true }]
|
970
|
-
}], listContainer: [{
|
971
|
-
type: ViewChild,
|
972
|
-
args: ['listContainer', { static: true }]
|
973
|
-
}], serchBox: [{
|
974
|
-
type: ViewChild,
|
975
|
-
args: ['serchBox', { static: false }]
|
976
|
-
}], textBoxSelectBox: [{
|
977
|
-
type: ViewChild,
|
978
|
-
args: ['textBoxSelectBox', { static: true }]
|
979
|
-
}], showCheckBox: [{
|
980
|
-
type: Input
|
981
|
-
}], readonly: [{
|
982
|
-
type: Input
|
983
|
-
}], rtl: [{
|
984
|
-
type: Input
|
985
|
-
}], disabled: [{
|
986
|
-
type: Input
|
987
|
-
}], placeholder: [{
|
988
|
-
type: Input
|
989
|
-
}], size: [{
|
990
|
-
type: Input
|
991
|
-
}], allowNull: [{
|
992
|
-
type: Input
|
993
|
-
}], textAlign: [{
|
994
|
-
type: Input
|
995
|
-
}], bufferSize: [{
|
996
|
-
type: Input
|
997
|
-
}], remoteOperation: [{
|
998
|
-
type: Input
|
999
|
-
}], fitParent: [{
|
1000
|
-
type: Input
|
1001
|
-
}], dropdownWidth: [{
|
1002
|
-
type: Input
|
1003
|
-
}], dropdownToggle: [{
|
1004
|
-
type: Output
|
1005
|
-
}], onDemandTranslate: [{
|
1006
|
-
type: Input
|
1007
|
-
}], _contentDataSource: [{
|
1008
|
-
type: ContentChild,
|
1009
|
-
args: [AXDataSourceComponent, { static: true }]
|
1010
|
-
}], dataSource: [{
|
1011
|
-
type: Input
|
1012
|
-
}], _contentValidation: [{
|
1013
|
-
type: ContentChild,
|
1014
|
-
args: [AXValidation, { static: true }]
|
1015
|
-
}], validation: [{
|
1016
|
-
type: Input
|
1017
|
-
}], dropdown: [{
|
1018
|
-
type: ViewChild,
|
1019
|
-
args: ['d', { static: true }]
|
1020
|
-
}], disabledCallback: [{
|
1021
|
-
type: Input
|
1022
|
-
}], allowSearch: [{
|
1023
|
-
type: Input
|
1024
|
-
}], textField: [{
|
1025
|
-
type: Input
|
1026
|
-
}], valueField: [{
|
1027
|
-
type: Input
|
1028
|
-
}], disabledField: [{
|
1029
|
-
type: Input
|
1030
|
-
}], mode: [{
|
1031
|
-
type: Input
|
1032
|
-
}], itemsChange: [{
|
1033
|
-
type: Output
|
1034
|
-
}], onBlur: [{
|
1035
|
-
type: Output
|
1036
|
-
}], onFocus: [{
|
1037
|
-
type: Output
|
1038
|
-
}], items: [{
|
1039
|
-
type: Input
|
1040
|
-
}], selectionChanged: [{
|
1041
|
-
type: Output
|
1042
|
-
}], selectedItemsChange: [{
|
1043
|
-
type: Output
|
1044
|
-
}], selectedItems: [{
|
1045
|
-
type: Input
|
1046
|
-
}], selectedValuesChange: [{
|
1047
|
-
type: Output
|
1048
|
-
}], selectedValues: [{
|
1049
|
-
type: Input
|
1050
|
-
}] } });
|
1051
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL3NlbGVjdGJveC9zZWxlY3Rib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvc2VsZWN0Ym94L3NlbGVjdGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIsS0FBSyxFQUNMLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFHTixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUlMLHNCQUFzQixHQUN2QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFD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LGFBQWEsQ0FBQztZQUMzQixHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNyQixHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUN6QixHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUMzQixHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztZQUMxQixHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNyQixHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNwQixHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNuQixHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUN4QixHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUN2QixHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNyQixHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNuQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNuQixHQUFHLENBQUMsUUFBUSxDQUFD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Z0I7c0JBRGYsTUFBTTtnQkFLUCxtQkFBbUI7c0JBRGxCLE1BQU07Z0JBS0ksYUFBYTtzQkFEdkIsS0FBSztnQkEwTU4sb0JBQW9CO3NCQURuQixNQUFNO2dCQU1JLGNBQWM7c0JBRHhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgSW5wdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBFbGVtZW50UmVmLFxuICBDb250ZW50Q2hpbGQsXG4gIE5nWm9uZSxcbiAgUXVlcnlMaXN0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBWFRleHRCb3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcbmltcG9ydCB7IEFYRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQVhCYXNlU2l6YWJsZUNvbXBvbmVudCxcbiAgQVhCYXNlSW5wdXRDb21wb25lbnQsXG4gIEFYRWxlbWVudFNpemUsXG4gIEFYVmFsaWRhdGFibGVDb21wb25lbnQsXG59IGZyb20gJy4uL2Jhc2UvZWxlbWVudC5jbGFzcyc7XG5pbXBvcnQgeyBBWERhdGFTb3VyY2VDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhLXNvdXJjZS9kYXRhc291cmNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFZhbGlkYXRpb24gfSBmcm9tICcuLi92YWxpZGF0aW9uL3ZhbGlkYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgfSBmcm9tICcuLi9kYXRhLXNvdXJjZS9yZWFkLXBhcmFtJztcbmltcG9ydCB7IEFYQmFzZUV2ZW50IH0gZnJvbSAnLi4vYmFzZS9ldmVudHMuY2xhc3MnO1xuaW1wb3J0IHsgQVhTZWFyY2hCb3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2hib3gvc2VhcmNoYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWENvbmZpZyB9IGZyb20gJ0BhY29yZXgvY29yZSc7XG5pbXBvcnQgeyBkaWZmZXJlbmNlQnkgfSBmcm9tICdsb2Rhc2gnO1xuZXhwb3J0IGNsYXNzIEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV4dGVuZHMgQVhCYXNlRXZlbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBjb21wb25lbnQ6IGFueSxcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVtczogYW55W10sXG4gICAgcHVibGljIHNlbGVjdGVkVmFsdWVzOiBhbnlbXSB8IGFueVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNlbGVjdC1ib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0Ym94LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgc3R5bGU6ICd3aWR0aDogMTAwJScgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBBWFZhbGlkYXRhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTZWxlY3RCb3hDb21wb25lbnQgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTZWxlY3RCb3hDb21wb25lbnRcbiAgZXh0ZW5kcyBBWFZhbGlkYXRhYmxlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQVhCYXNlU2l6YWJsZUNvbXBvbmVudCwgQVhCYXNlSW5wdXRDb21wb25lbnQge1xuICBASW5wdXQoKSBzaG93RHJvcERvd25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHJvd1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpXG4gIHJvd0lucHV0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoQVhUZXh0Qm94Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBzcGFuOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBAVmlld0NoaWxkKEFYVGV4dEJveENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgdGV4dGJveDogQVhUZXh0Qm94Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ2xpc3RDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBsaXN0Q29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBAVmlld0NoaWxkKCdzZXJjaEJveCcsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBzZXJjaEJveDogQVhTZWFyY2hCb3hDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgndGV4dEJveFNlbGVjdEJveCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHRleHRCb3hTZWxlY3RCb3g6IEFYVGV4dEJveENvbXBvbmVudDtcblxuICBASW5wdXQoKSBzaG93Q2hlY2tCb3g6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgcnRsOiBib29sZWFuID0gQVhDb25maWcuZ2V0KCdsYXlvdXQucnRsJyk7XG5cbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHNpemU6IEFYRWxlbWVudFNpemUgPSAnbWQnO1xuXG4gIEBJbnB1dCgpIGFsbG93TnVsbDogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgdGV4dEFsaWduOiAncmlnaHQnIHwgJ2xlZnQnIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgYnVmZmVyU2l6ZTogbnVtYmVyID0gMjA7XG5cbiAgQElucHV0KCkgcmVtb3RlT3BlcmF0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZml0UGFyZW50OiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSBkcm9wZG93bldpZHRoOiBzdHJpbmcgPSAnMzAwcHgnO1xuXG4gIEBPdXRwdXQoKVxuICBkcm9wZG93blRvZ2dsZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLy8gdGhpcyBpbnB1dCBpcyBQcml2YXRlIGFuZCBvbmx5IHVzZSBpbiBMT1ZcblxuICBASW5wdXQoKSBvbkRlbWFuZFRyYW5zbGF0ZTogYm9vbGVhbiA9IGZhbHNlXG5cbiAgY3VycmVudGZvY3VzZWRJbmRleDogbnVtYmVyID0gLTE7XG4gIHNob3dMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2tpcDogbnVtYmVyID0gLTE7XG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xuICAvLyBASW5wdXQoKVxuICAvLyBjaGlwc1dpZHRoOiBzdHJpbmcgPSAnJztcblxuICB0ZXh0OiBzdHJpbmcgPSAnJztcbiAgdG90YWxDb3VudDogbnVtYmVyID0gMDtcblxuICBAQ29udGVudENoaWxkKEFYRGF0YVNvdXJjZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBfY29udGVudERhdGFTb3VyY2U6IEFYRGF0YVNvdXJjZUNvbXBvbmVudDtcblxuICBwcml2YXRlIF9kYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBkYXRhU291cmNlKCk6IEFYRGF0YVNvdXJjZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2UgPyB0aGlzLl9kYXRhU291cmNlIDogdGhpcy5fY29udGVudERhdGFTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRhdGFTb3VyY2UodjogQVhEYXRhU291cmNlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IHY7XG4gIH1cblxuICBAQ29udGVudENoaWxkKEFYVmFsaWRhdGlvbiwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBfY29udGVudFZhbGlkYXRpb246IEFYVmFsaWRhdGlvbjtcblxuICBwcml2YXRlIF92YWxpZGF0aW9uOiBBWFZhbGlkYXRpb247XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCB2YWxpZGF0aW9uKCk6IEFYVmFsaWRhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRpb24gPyB0aGlzLl92YWxpZGF0aW9uIDogdGhpcy5fY29udGVudFZhbGlkYXRpb247XG4gIH1cblxuICBwdWJsaWMgc2V0IHZhbGlkYXRpb24odjogQVhWYWxpZGF0aW9uKSB7XG4gICAgdGhpcy5fdmFsaWRhdGlvbiA9IHY7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2QnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBkcm9wZG93bjogQVhEcm9wZG93bkNvbXBvbmVudDtcblxuICBASW5wdXQoKSBkaXNhYmxlZENhbGxiYWNrOiAoZTogeyBpdGVtOiBhbnk7IGluZGV4OiBudW1iZXIgfSkgPT4gYm9vbGVhbjtcblxuICBASW5wdXQoKSBhbGxvd1NlYXJjaDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHRleHRGaWVsZDogc3RyaW5nID0gJ3RleHQnO1xuICBASW5wdXQoKSB2YWx1ZUZpZWxkOiBzdHJpbmcgPSAndmFsdWUnO1xuICBASW5wdXQoKSBkaXNhYmxlZEZpZWxkOiBzdHJpbmcgPSAnZGlzYWJsZWQnO1xuICBASW5wdXQoKSBtb2RlOiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgPSAnc2luZ2xlJztcbiAgaXRlbVJlbW92ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgaXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJpdmF0ZSBfaXRlbXM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuICBwdWJsaWMgc2V0IGl0ZW1zKHY6IGFueVtdKSB7XG4gICAgdGhpcy5faXRlbXMgPSB2O1xuICAgIGlmICh0aGlzLml0ZW1zQ2hhbmdlKSB7XG4gICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodik7XG4gICAgfVxuICAgIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcbiAgICB9XG4gIH1cblxuICBoYXNTZWxlY3RlZFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGl0ZW1zRmlsdGVyZWQ6IGFueVtdID0gW107XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIGRyb3BEb3duRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgc2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBWFNlbGVjdEJveFNlbGVjdGlvbkNoYW5nZWRFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcyB8fCBbXTtcbiAgfVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkSXRlbXModjogYW55W10pIHtcbiAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXNDaGFuZ2Uodik7XG4gICAgLy8gaWYgKCF2KSB7XG4gICAgLy8gICB2ID0gW107XG4gICAgLy8gfVxuXG4gICAgLy8gY29uc3Qgb2xkID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xuICAgIC8vIGlmIChKU09OLnN0cmluZ2lmeShvbGQpICE9PSBKU09OLnN0cmluZ2lmeSh2KSkge1xuICAgIC8vICAgdGhpcy5fc2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZSA9PSAnc2luZ2xlJyA/IHYuc2xpY2UoMCwgMSkgOiBbLi4ubmV3IFNldCh2KV07IC8vWy4uLm5ldyBTZXQodlswXSldIDogWy4uLm5ldyBTZXQodildO1xuICAgIC8vICAgdGhpcy5fc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRydWUpKTtcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xuICAgIC8vICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgIC8vICAgdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAvLyAgIHRoaXMud2FpdEZvckRhdGEoKCkgPT4ge1xuICAgIC8vICAgICBpZiAodGhpcy5fc2VsZWN0ZWRJdGVtcykge1xuICAgIC8vICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoYykgPT4gKGMuc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLnNvbWUoKGkpID0+IGlbdGhpcy52YWx1ZUZpZWxkXSA9PSBjW3RoaXMudmFsdWVGaWVsZF0pKSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0pO1xuICAgIC8vIH1cbiAgfVxuXG4gIHNldFNlbGVjdGVkSXRlbXNDaGFuZ2UodjogYW55W10sIG9sZDogYW55W10gPSB0aGlzLnNlbGVjdGVkSXRlbXMpIHtcbiAgICBpZiAoIXYpIHtcbiAgICAgIHYgPSBbXTtcbiAgICB9XG4gICAgLy8gY29uc3Qgb2xkID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xuICAgIHZhciBmID0gZGlmZmVyZW5jZUJ5KG9sZCwgdiwgdGhpcy52YWx1ZUZpZWxkKTtcbiAgICB2YXIgcyA9IGRpZmZlcmVuY2VCeSh2LCBvbGQsIHRoaXMudmFsdWVGaWVsZCk7XG4gICAgLy8gaWYgKEpTT04uc3RyaW5naWZ5KG9sZCkgIT09IEpTT04uc3RyaW5naWZ5KHYpKSB7XG4gICAgaWYgKGYubGVuZ3RoICE9IDAgfHwgcy5sZW5ndGggIT0gMCkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtcyA9XG4gICAgICAgIHRoaXMubW9kZSA9PSAnc2luZ2xlJyA/IHYuc2xpY2UoMCwgMSkgOiBbLi4ubmV3IFNldCh2KV07IC8vWy4uLm5ldyBTZXQodlswXSldIDogWy4uLm5ldyBTZXQodildO1xuICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRydWUpKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIHRoaXMud2FpdEZvckRhdGEoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChcbiAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgKGMuc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLnNvbWUoXG4gICAgICAgICAgICAgIChpKSA9PiBpW3RoaXMudmFsdWVGaWVsZF0gPT0gY1t0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgICApKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnJvd1RlbXBsYXRlID09PSB1bmRlZmluZWQgJiYgdGhpcy5yb3dJbnB1dFRlbXBsYXRlICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb3dUZW1wbGF0ZSA9IHRoaXMucm93SW5wdXRUZW1wbGF0ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucnRsID09IG51bGwpIHtcbiAgICAgIHRoaXMucnRsID1cbiAgICAgICAgd2luZG93XG4gICAgICAgICAgLmdldENvbXB1dGVkU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCwgbnVsbClcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnZGlyZWN0aW9uJykgPT09ICdydGwnO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbGVkKGUpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJlxuICAgICAgdGhpcy50b3RhbENvdW50ID4gdGhpcy5pdGVtcy5sZW5ndGggJiZcbiAgICAgIHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCAhPSAwICYmXG4gICAgICB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLVxuICAgICAgdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIC1cbiAgICAgIDMwMCA8XG4gICAgICA1MFxuICAgICkge1xuICAgICAgaWYgKHRoaXMuc2tpcCAhPT0gdGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2tpcCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcbiAgICAgICAgcGFyYW1zLnNraXAgPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7IC8vKiAoTWF0aC5mbG9vcih0aGlzLml0ZW1zLmxlbmd0aCAvIHRoaXMuYnVmZmVyU2l6ZSkgKyAxKTtcbiAgICAgICAgaWYgKHRoaXMudGV4dGJveCkge1xuICAgICAgICAgIHBhcmFtcy5zZWFyY2hUZXh0ID0gdGhpcy50ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmFtcy5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZldGNoKHBhcmFtcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2V0U2VsZWN0ZWRJdGVtcyh2OiBhbnlbXSwgaXNVc2VySW5wdXQ6IGJvb2xlYW4pIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGlmIChpc1VzZXJJbnB1dCkge1xuICAgICAgY2hhbmdlZCA9IEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB2O1xuICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCgpO1xuICAgIGlmIChpc1VzZXJJbnB1dCAmJiBjaGFuZ2VkKSB7XG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlYXJjaENoYW5nZU9ic2VydmVyOiBhbnk7XG5cbiAgZGVsYXk6IG51bWJlciA9IDUwMDtcblxuICB0ZXh0Q2hhbmdlZChlKSB7XG4gICAgaWYgKFxuICAgICAgKGUudmFsdWUgPT09IG51bGwgfHwgZS52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGUudmFsdWUgPT09ICcnKSAmJlxuICAgICAgKGUub2xkVmFsdWUgPT09IG51bGwgfHwgZS5vbGRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGUub2xkVmFsdWUgPT09ICcnKVxuICAgICkge1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSAtMTtcbiAgICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIC8vICB0aGlzLnNlYXJjaFRleHQgPSBlLnZhbHVlO1xuICAgICAgICAvLyB0aGlzLnRleHQgPSBlLnZhbHVlO1xuICAgICAgICAvLyB0aGlzLml0ZW1zID0gW107XG4gICAgICAgIGlmICh0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgbGV0IHQgPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQ7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5pdGVtcy5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLml0ZW1zLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgLy8gICB0aGlzLml0ZW1zLnBvcCgpO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XG4gICAgICAgIHBhcmFtcy5zZWFyY2hUZXh0ID0gdGhpcy50ZXh0O1xuICAgICAgICAvLyBwYXJhbXMuc2VhcmNoVGV4dCA9IGUudmFsdWU7XG4gICAgICAgIHBhcmFtcy5za2lwID0gMDtcbiAgICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7XG4gICAgICAgIHRoaXMuZmV0Y2gocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc0l0ZW1EaXNhYmxlZChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoaXRlbVt0aGlzLmRpc2FibGVkRmllbGRdID09IHRydWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kaXNhYmxlZENhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZENhbGxiYWNrKHsgaXRlbSwgaW5kZXg6IC0xIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb25CdXR0b25DbGljayhlKSB7IH1cblxuICBwcml2YXRlIHNldFNlbGVjdGVkSW5kZXgoc2lnbjogLTEgfCAxIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoc2lnbiA9PSBudWxsKSB7XG4gICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XG4gICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IHRoaXMuaXRlbXNcbiAgICAgICAgICAuZmlsdGVyKChjKSA9PlxuICAgICAgICAgICAgKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgIClcbiAgICAgICAgICAuaW5kZXhPZih0aGlzLnNlbGVjdGVkSXRlbXNbdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IHRoaXMuaXRlbXMuaW5kZXhPZihcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNbdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNpZ24gPT09IC0xID8gdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4LS0gOiB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXgrKztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcbiAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMudGV4dFxuICAgICAgICA/IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PlxuICAgICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICApXG4gICAgICAgIDogdGhpcy5pdGVtcztcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPVxuICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4IDwgMFxuICAgICAgICA/IDBcbiAgICAgICAgOiB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPj0gdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aFxuICAgICAgICAgID8gdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCAtIDFcbiAgICAgICAgICA6IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleDtcbiAgICAvL1xuICAgIC8vIHNldCBzY3JvbGxcbiAgICBpZiAodGhpcy5saXN0Q29udGFpbmVyKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtRGl2ID0gdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBgLmxpc3QtaXRlbTpudGgtY2hpbGQoJHt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXh9KWBcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGl0ZW1EaXYpIHtcbiAgICAgICAgICBpdGVtRGl2LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAT3V0cHV0KClcbiAgc2VsZWN0ZWRWYWx1ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXSB8IGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIGFueVtdIHwgYW55XG4gID4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkVmFsdWVzKCk6IGFueVtdIHwgYW55IHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbXMubWFwKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0pWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5tYXAoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSkgfHwgW107XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldCBzZWxlY3RlZFZhbHVlcyh2OiBhbnlbXSB8IGFueSkge1xuICAgIGlmICh0aGlzLmNvbXBhcmVTZWxlY3RlZFZhbHVlcyh2KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodiA9PSBudWxsKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodiAhPSBbXSEgJiYgdiAhPSAnJyAmJiB2ICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmhhc1NlbGVjdGVkVmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdiA9PSBjW3RoaXMudmFsdWVGaWVsZF0pKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjKSA9PiB2ID09IGNbdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gdi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PlxuICAgICAgICAgICAgICAgICAgdi5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgYWRkSWQgPSBbXTtcbiAgICAgICAgICAgICAgICB2LmZvckVhY2goKHZJZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgYWRkSWQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLnZhbHVlRmllbGRdOiB2SWQsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGxldCBuZXdJZCA9IGRpZmZlcmVuY2VCeShcbiAgICAgICAgICAgICAgICAgIGFkZElkLFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUZpZWxkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBsZXQgdnYgPSBbXTtcbiAgICAgICAgICAgICAgICBuZXdJZC5mb3JFYWNoKChyYykgPT4ge1xuICAgICAgICAgICAgICAgICAgdnYucHVzaChyY1t0aGlzLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChjKSA9PiB2di5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pKVxuICAgICAgICAgICAgICAgICAgLmZvckVhY2goKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChyZXMpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2di5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zQ2hhbmdlKFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICAgICAgICAgdnYubGVuZ3RoID4gMCA/IFsxXSA6IHRoaXMuc2VsZWN0ZWRJdGVtc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHYuaW5jbHVkZXMoY1t0aGlzLnZhbHVlRmllbGRdKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGMpID0+IHYgPT09IGNbdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZVNlbGVjdGVkVmFsdWVzKG5ld1ZhbHVlOiBhbnlbXSB8IGFueSkge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIChjdXJyZW50VmFsdWUgPT0gbnVsbCAmJiBuZXdWYWx1ZSA9PSBudWxsKSB8fFxuICAgICAgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSA9PT0gSlNPTi5zdHJpbmdpZnkobmV3VmFsdWUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWRWYWx1ZXModjogYW55W10gfCBhbnksIGlzVXNlcklucHV0OiBib29sZWFuKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IGlzVXNlcklucHV0ID8gIXRoaXMuY29tcGFyZVNlbGVjdGVkVmFsdWVzKHYpIDogZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IHY7XG4gICAgaWYgKGlzVXNlcklucHV0ICYmIGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQoXG4gICAgICBuZXcgQVhTZWxlY3RCb3hTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlc1xuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYnVmZmVyU2l6ZSA8IDEwKSB7XG4gICAgICB0aGlzLmJ1ZmZlclNpemUgPSAxMDtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xuICAgICAgdGhpcy5zaG93Q2hlY2tCb3ggPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93Q2hlY2tCb3ggPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhdGhpcy5yZW1vdGVPcGVyYXRpb24gfHxcbiAgICAgICh0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLmhhc1NlbGVjdGVkVmFsdWUpXG4gICAgKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cbiAgZHJvcGRvd25Ub2dnbGVTZWxlY0JveChlKSB7XG4gICAgdGhpcy50ZXh0ID0gJyc7XG4gICAgaWYgKHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZXJjaEJveCkge1xuICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gICAgdGhpcy5kcm9wZG93blRvZ2dsZS5lbWl0KGUpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIC8vIGlmICghdGhpcy5hbGxvd1NlYXJjaCkge1xuICAgIC8vICAgICBpZiAodGhpcy5yZWFkb25seSA9PSBmYWxzZSkge1xuICAgIC8vICAgICAgICAgdGhpcy5pdGVtUmVtb3ZlID0gdHJ1ZTtcbiAgICAvLyAgICAgICAgIHRoaXMucmVhZG9ubHkgPSB0cnVlO1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuICAgIHRoaXMuaW5pdFZhbGlkYXRpb24odGhpcy5yZWYsICdzZWxlY3RlZEl0ZW1zJywgdGhpcy52YWxpZGF0aW9uKTtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XG4gICAgICAvLyBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PSBmYWxzZSkge1xuICAgICAgLy8gICB0aGlzLmZldGNoKCk7XG4gICAgICAvLyB9XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uub25EYXRhUmVjZWl2ZWQuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kYXRhUmVjZWl2ZWQoYy5kYXRhLnJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRhUmVjZWl2ZWQoZGF0YTogYW55KSB7XG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCAmJlxuICAgICAgICB0aGlzLnNlYXJjaFRleHQgIT0gbnVsbCAmJlxuICAgICAgICB0aGlzLnNlYXJjaFRleHQgIT09ICcnXG4gICAgICApIHtcbiAgICAgICAgaWYgKGRhdGEudG90YWxDb3VudCkge1xuICAgICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAvL3RoaXMuaXRlbXMgPSBkYXRhLml0ZW1zO1xuICAgICAgICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLnRvdGFsQ291bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBkYXRhLml0ZW1zO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS5pdGVtcyA9PSB1bmRlZmluZWQgPyAwIDogZGF0YS5pdGVtcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5pdGVtcyAmJiBkYXRhLml0ZW1zLmxlbmd0aCA9PT0gZGF0YS50b3RhbENvdW50KSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBkYXRhLml0ZW1zO1xuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLml0ZW1zLmxlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50b3RhbENvdW50KSB7XG4gICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoZWxtKSA9PiB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGVsbSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XG4gICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgICAgICAvLyB9XG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEudG90YWxDb3VudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuZm9yRWFjaCgoZWxtKSA9PiB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGVsbSk7XG4gICAgICAgICAgLy8gaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xuICAgICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZW1zID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmRyb3Bkb3duLnVwZGF0ZVBvc2l0aW9uKCk7XG4gIH1cblxuICAvLyBwcml2YXRlIHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xuXG4gIGZldGNoKHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9KSB7XG4gICAgLy8gIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIGlmICh0aGlzLm9uRGVtYW5kVHJhbnNsYXRlICYmIHBhcmFtcz8uc2VhcmNoVGV4dCkge1xuICAgICAgICBwYXJhbXMuc2VhcmNoVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VhcmNoKHBhcmFtcz8uc2VhcmNoVGV4dClcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmZldGNoKHBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNsYXRlU2VhcmNoKHNlYXJjaFRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGF0aW5QYXR0ZXJuID0gL1tBLVphLXo7J1xcL1xcXFxbXFxdLF0vO1xuICAgIGNvbnN0IGFzY2lpVG9QZXJzaWFuTWFwID0ge1xuICAgICAgMTEzOiBcIti2XCIsIDExOTogXCLYtVwiLCAxMDE6IFwi2KtcIiwgMTE0OiBcItmCXCIsIDExNjogXCLZgVwiLCAxMjE6IFwi2LpcIiwgMTE3OiBcIti5XCIsIDEwNTogXCLZh1wiLCAxMTE6IFwi2K5cIiwgMTEyOiBcItitXCIsXG4gICAgICA5NzogXCLYtFwiLCAxMTU6IFwi2LNcIiwgMTAwOiBcItuMXCIsIDEwMjogXCLYqFwiLCAxMDM6IFwi2YRcIiwgMTA0OiBcItinXCIsIDEwNjogXCLYqlwiLCAxMDc6IFwi2YZcIiwgMTA4OiBcItmFXCIsIDU5OiBcItqpXCIsXG4gICAgICAxMjI6IFwi2LhcIiwgMTIwOiBcIti3XCIsIDk5OiBcItiyXCIsIDExODogXCLYsVwiLCA5ODogXCLYsFwiLCAxMTA6IFwi2K9cIiwgNDQ6IFwi2YhcIiwgMzk6IFwi2q9cIiwgNjc6IFwi2phcIiwgOTM6IFwi2oZcIiwgOTE6IFwi2KxcIiwgOTI6IFwi2b5cIiwgMTA5OiBcItimXCJcbiAgICB9O1xuICAgIGlmIChsYXRpblBhdHRlcm4udGVzdChzZWFyY2hUZXh0KSkge1xuICAgICAgc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQuc3BsaXQoJycpLm1hcCgoY2hhcikgPT4ge1xuICAgICAgICBjb25zdCBhc2NpaVZhbHVlID0gY2hhci5jaGFyQ29kZUF0KDApO1xuICAgICAgICBpZiAoYXNjaWlUb1BlcnNpYW5NYXBbYXNjaWlWYWx1ZV0pIHtcbiAgICAgICAgICByZXR1cm4gYXNjaWlUb1BlcnNpYW5NYXBbYXNjaWlWYWx1ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNoYXI7XG4gICAgICAgIH1cbiAgICAgIH0pLmpvaW4oJycpO1xuICAgIH1cbiAgICByZXR1cm4gc2VhcmNoVGV4dDtcbiAgfVxuXG5cblxuICByZWZyZXNoKCkge1xuICAgIGNvbnN0IHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xuICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xuICAgICAgcGFyYW1zLnNraXAgPSAwO1xuICAgICAgdGhpcy5za2lwID0gMDtcbiAgICAgIHBhcmFtcy50YWtlID0gdGhpcy5idWZmZXJTaXplO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhU291cmNlICE9IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdGhpcy5pdGVtcyA9IFtdO1xuICAgICAgLy8gdGhpcy5pdGVtcy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAvLyAgIHRoaXMuaXRlbXMucG9wKCk7XG4gICAgICAvLyB9KTtcblxuICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcbiAgICAgICAgbGV0IHQgPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0OyBpKyspIHtcbiAgICAgICAgICB0aGlzLml0ZW1zLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZmV0Y2gocGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVJdGVtUmVtb3ZlQ2xpY2soaXRlbSkge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXMgPSBudWxsO1xuICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyhudWxsLCB0cnVlKTtcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xuICAgICAgLy8gdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gYyAhPT0gaXRlbSk7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXMoXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXG4gICAgICAgICAgKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSAhPT0gaXRlbVt0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICAvLyB0aGlzLl9zZWxlY3RlZEl0ZW1zID0gdGhpcy5fc2VsZWN0ZWRJdGVtcy5maWx0ZXIoYyA9PiBjICE9PSBpdGVtKTtcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xuICAgICAgLy8gdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gICAgLy8gdGhpcy50ZXh0ID0gJyc7XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25Gb2N1c1RleHRCb3goZSkgeyB9XG5cbiAgb25UZXh0Qm94Q2xpY2soZSkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkID09IGZhbHNlICYmIHRoaXMucmVhZG9ubHkgPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUl0ZW1DbGljayhlOiBNb3VzZUV2ZW50LCBpdGVtOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0l0ZW1EaXNhYmxlZChpdGVtKSA9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW3RoaXMudmFsdWVGaWVsZF07XG5cbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyh2YWx1ZSwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLnNlbGVjdGVkVmFsdWVzLnNsaWNlKDApO1xuICAgICAgICBpZiAoZXhpc3RzLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYWxsb3dOdWxsID09IHRydWUgfHxcbiAgICAgICAgICAgICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSXRlbVJlbW92ZUNsaWNrKGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBleGlzdHMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgLy8gdGhpcy5zZWxlY3RlZFZhbHVlcyA9IGV4aXN0cztcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWVzKGV4aXN0cywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xuICAgICAgICB0aGlzLnRleHQgPSAnJztcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIChlLnN0b3BQcm9wYWdhdGlvbigpID09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAvLyB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcbiAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBoYW5kbGVLZXlFdmVudFNlYXJjaChlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMudGV4dCA9IG51bGw7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnKSAmJlxuICAgICAgdGhpcy5nZXRJdGVtcygpLmxlbmd0aCA+IDAgJiZcbiAgICAgIGUudHlwZSA9PT0gJ2tleWRvd24nXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPVxuICAgICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCArIChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUJ5SW5kZXgodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGlmIChlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuICYmIHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xuICAgIC8vICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XG4gICAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgdGhpcy5kcm9wZG93bi5mb2N1cygpO1xuICAgIC8vICAgICB9LCAwKTtcbiAgICAvLyB9XG4gICAgLy9lLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGUudHlwZSA9PT0gJ2tleWRvd24nICYmIGUua2V5ID09ICdFbnRlcicgJiYgdGhpcy5kcm9wZG93bi5pc09wZW4pIHtcbiAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+XG4gICAgICAgICAgKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZylcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy5pdGVtcztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgY1t0aGlzLnZhbHVlRmllbGRdID09PVxuICAgICAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICApLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdGhpcy5tb2RlID09ICdtdWx0aXBsZSdcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5hbGxvd051bGwgPT0gdHJ1ZSB8fFxuICAgICAgICAgICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICAgICAgYyAhPT1cbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT5cbiAgICAgICAgICAgICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICApW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICAgIGNbdGhpcy52YWx1ZUZpZWxkXSAhPT1cbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ211bHRpcGxlJykge1xuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggIT0gLTEpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbMF0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnRleHQgJiYgdGhpcy5pdGVtc0ZpbHRlcmVkPy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyh0aGlzLml0ZW1zRmlsdGVyZWQsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGlzQ2hhcihzdHI6IHN0cmluZykge1xuICAgIGlmIChcbiAgICAgIHN0ci5pbmNsdWRlcygnU2hpZnQnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdUYWInKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdDb250cm9sJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnQWx0JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnQ2Fwc0xvY2snKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdNZXRhJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnQ29udGV4dE1lbnUnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdFbnRlcicpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0JhY2tzcGFjZScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ1ByaW50U2NyZWVuJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnU2Nyb2xsTG9jaycpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ1BhdXNlJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnSG9tZScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0VuZCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0luc2VydCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ1BhZ2VVcCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0RlbGV0ZScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ1BhZ2VEb3duJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnTnVtTG9jaycpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0VzY2FwZScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0Fycm93JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygn2ZFGMScpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0YyJykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjMnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGNCcpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y1JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjYnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGNycpIHx8XG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y4JykgfHxcbiAgICAgIHN0ci5pbmNsdWRlcygnRjknKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGMTAnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGMTEnKSB8fFxuICAgICAgc3RyLmluY2x1ZGVzKCdGMTInKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVLZXlFdmVudChlOiBhbnkpIHtcbiAgICAvLyBjb25zdCBOdW1iZXJNaW51c1BhdHRlcm4gPSAvW2EtekEtWjAtOVxcLV0vZztcbiAgICAvLyBjb25zdCBGYXJzaSA9IC9b2b7ahtis2K3YrtmH2LnYutmB2YLYq9i12LbYtNiz24zYqNmE2KfYqtmG2YXaqdqv2YjYptiv2LDYsdiy2LfYuNqY2KTYpdij2KHZi9mM2Y3ZjtmP2ZDZkVxcc10rJC87XG4gICAgLy8gIGNvbnN0IGlucHV0Q2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSk7XG4gICAgLy8gY29uc3QgcGF0dGVybkVuID0gL15bYS16QS1aMC05XSokLztcbiAgICAvLyBjb25zdCBwYXR0ZXJuID0gL15bXFx1MDYwMC1cXHUwNkZGXFxzXSskLztcbiAgICBjb25zdCBpbnB1dENoYXIgPSBlLmtleTtcbiAgICBpZiAoXG4gICAgICAoaW5wdXRDaGFyICE9ICdCYWNrc3BhY2UnICYmXG4gICAgICAgIGlucHV0Q2hhciAhPSAnQmFja3NwYWNlJyAmJlxuICAgICAgICBpbnB1dENoYXIgIT0gJ1RhYicgJiZcbiAgICAgICAgaW5wdXRDaGFyICE9ICdFbnRlcicgJiZcbiAgICAgICAgaW5wdXRDaGFyICE9ICdFc2NhcGUnICYmXG4gICAgICAgIGlucHV0Q2hhciAhPSAnQXJyb3dEb3duJyAmJlxuICAgICAgICBpbnB1dENoYXIgIT0gJ0Fycm93VXAnKSB8fFxuICAgICAgZS5jb2RlID09PSAnU3BhY2UnIHx8XG4gICAgICBlLmN0cmxLZXkgPT0gdHJ1ZVxuICAgICkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBlLmtleSA9PT0gJ0JhY2tzcGFjZScgJiZcbiAgICAgIGUudHlwZSA9PT0gJ2tleWRvd24nICYmXG4gICAgICAoKHRoaXMuYWxsb3dOdWxsID09PSB0cnVlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAodGhpcy5hbGxvd051bGwgPT09IGZhbHNlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSlcbiAgICApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wb3AoKTtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XG4gICAgICB9LCAwKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgSU5QVVQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSk7XG4gICAgaWYgKHRoaXMuaXNDaGFyKGUua2V5KSAmJiB0aGlzLmFsbG93U2VhcmNoICYmIGUuY3RybEtleSA9PSBmYWxzZSkge1xuICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcbiAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgICAgdGhpcy50ZXh0ID0gZS5rZXk7XG4gICAgfVxuXG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy50ZXh0ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAoZS5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGUua2V5ID09PSAnQXJyb3dVcCcpICYmXG4gICAgICB0aGlzLmdldEl0ZW1zKCkubGVuZ3RoID4gMCAmJlxuICAgICAgZS50eXBlID09PSAna2V5ZG93bidcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQnlJbmRleChcbiAgICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggKyAoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XG4gICAgICAgICAgLy8gIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKSk7XG4gICAgICAgICAgaWYgKHRoaXMuYWxsb3dTZWFyY2ggPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcbiAgICAgICAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PSB0cnVlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFsbG93U2VhcmNoID09PSBmYWxzZSkge1xuICAgICAgaWYgKGUudHlwZSA9PT0gJ2tleWRvd24nICYmIGUua2V5ID09ICdFbnRlcicgJiYgdGhpcy5kcm9wZG93bi5pc09wZW4pIHtcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgY1t0aGlzLnZhbHVlRmllbGRdID09PVxuICAgICAgICAgICAgICB0aGlzLml0ZW1zRmlsdGVyZWRbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdXG4gICAgICAgICAgKS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgdGhpcy5tb2RlID09ICdtdWx0aXBsZSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5hbGxvd051bGwgPT0gdHJ1ZSB8fFxuICAgICAgICAgICAgKHRoaXMuYWxsb3dOdWxsID09IGZhbHNlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICAgICAgYyAhPT1cbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PlxuICAgICAgICAgICAgICAgICAgICAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICAgICAgKVt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICAgICAgY1t0aGlzLnZhbHVlRmllbGRdICE9PVxuICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc1t0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlID09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggIT0gLTEpIHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRleHQgJiYgdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXModGhpcy5pdGVtc0ZpbHRlcmVkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcbiAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLnRleHRib3guZm9jdXMoKTtcbiAgfVxuXG4gIHNlbGVjdGVkSXRlbUJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIGxldCBpdGVtID0gW107XG4gICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xuICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+XG4gICAgICAgIChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICApO1xuXG4gICAgICBpdGVtID0gdGhpcy5pdGVtc0ZpbHRlcmVkW2luZGV4XTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbSA9IHRoaXMuaXRlbXNbaW5kZXhdO1xuICAgIH1cbiAgICAvL1xuICAgIC8vICBjb25zdCBpdGVtID0gdGhpcy50ZXh0ID8gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVtpbmRleF0gOiB0aGlzLml0ZW1zW2luZGV4XTtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKFtpdGVtXSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KCk7XG4gIH1cblxuICBnZXRJdGVtcygpOiBhbnlbXSB7XG4gICAgaWYgKHRoaXMuaXRlbXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnXG4gICAgICA/IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PlxuICAgICAgICAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgICAgOiB0aGlzLml0ZW1zO1xuICB9XG5cbiAgaXNJdGVtU2VsZWN0ZWQoaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyAmJlxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgICAgKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSA9PT0gaXRlbVt0aGlzLnZhbHVlRmllbGRdXG4gICAgICApLmxlbmd0aCA+IDBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpdGVtc1N0YXR1c09ic2VydmVyOiBhbnk7XG4gIHByaXZhdGUgd2FpdEZvckRhdGEoY2FsbGJhY2tmbjogKCkgPT4gdm9pZCkge1xuICAgIGlmICh0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICBjYWxsYmFja2ZuKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XG4gICAgICBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyID0gb2JzZXJ2ZXI7XG4gICAgICB9KVxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZSgoYykgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrZm4oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCI8YXgtZHJvcC1kb3duICNkIFtzaXplXT1cInNpemVcIiBbZml0UGFyZW50XT1cImZpdFBhcmVudFwiIFtkcm9wZG93bldpZHRoXT1cImRyb3Bkb3duV2lkdGhcIiBbcnRsXT1cInJ0bFwiXG4gICAgW3Nob3dEcm9wRG93bkJ1dHRvbl09XCJzaG93RHJvcERvd25CdXR0b25cIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgIChkcm9wZG93blRvZ2dsZSk9XCJkcm9wZG93blRvZ2dsZVNlbGVjQm94KCRldmVudClcIj5cbiAgICA8bmctY29udGFpbmVyIHN0YXJ0PlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3RhcnRdXCI+XG4gICAgICAgIDwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIGhlYWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4IGNoaXBzLWNvbnRhaW5lclwiIFtob3Jpem9udGFsU2Nyb2xsXT1cIjQwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcHNcIiBbY2xhc3MuY2hpcHMtYmxhbmtdPVwibW9kZSA9PT0gJ3NpbmdsZSdcIiBbdGl0bGVdPVwiaXRlbVt0ZXh0RmllbGRdXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWxlY3RlZEl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwcy10ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyd3aWR0aCc6IGl0ZW1bdGV4dEZpZWxkXS5sZW5ndGggPiAxNSAmJiB0aGlzLm1vZGUgPT09J211bHRpcGxlJyA/ICcxMTBweCcgOiAnYXV0byd9XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bdGV4dEZpZWxkXSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNsb3NlLWljb25cIiAoY2xpY2spPVwiaGFuZGxlSXRlbVJlbW92ZUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIocmVhZG9ubHkhPXRydWUgfHwgaXRlbVJlbW92ZSA9PXRydWUpJiYgZGlzYWJsZWQhPXRydWUgJiYgKGFsbG93TnVsbD09dHJ1ZSB8fCAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtdGltZXMgY2xvc2VcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIiAoY2xpY2spPVwib25UZXh0Qm94Q2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxheC10ZXh0LWJveCAjdGV4dEJveFNlbGVjdEJveCBbdGV4dEFsaWduXT1cInRleHRBbGlnblwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PSAwID8gcGxhY2Vob2xkZXIgOiAnJ1wiIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIChvbmtleSk9XCJoYW5kbGVLZXlFdmVudCgkZXZlbnQpXCIgW3NpemVdPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkZvY3VzKT1cIm9uRm9jdXNUZXh0Qm94KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L2F4LXRleHQtYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgZW5kPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZW5kXVwiPlxuICAgICAgICA8L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyIHBhbmVsPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYWxsb3dTZWFyY2hcIiBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCIgc3R5bGU9XCJwYWRkaW5nOiAwLjdlbTtcIj5cbiAgICAgICAgICAgIDxheC1zZWFyY2gtYm94ICNzZXJjaEJveCBbb25EZW1hbmRUcmFuc2xhdGVdPVwib25EZW1hbmRUcmFuc2xhdGVcIiBbKHZhbHVlKV09XCJ0ZXh0XCIgKG9ua2V5KT1cImhhbmRsZUtleUV2ZW50U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICh0ZXh0Q2hhbmdlZCk9XCJ0ZXh0Q2hhbmdlZCgkZXZlbnQpXCIgKG9uQnV0dG9uQ2xpY2spPVwidGV4dENoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9heC1zZWFyY2gtYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4IGxpc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2ICNsaXN0Q29udGFpbmVyIGNsYXNzPVwibGlzdC1jb250YWluZXItaXRlbXNcIiAoc2Nyb2xsKT1cInNjcm9sbGVkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0SXRlbXMoKS5sZW5ndGg+MDsgdGhlbiB0aGVuVGVtcGxhdGU7IGVsc2UgZWxzZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0aGVuVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmF4LXN0YXRlLWRpc2FibGVkXT1cImlzSXRlbURpc2FibGVkKGl0ZW0pXCIgY2xhc3M9XCJsaXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0SXRlbXMoKTtsZXQgaSA9IGluZGV4XCIgW2NsYXNzLmZvY3VzZWRdPVwiaT09Y3VycmVudGZvY3VzZWRJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSlcIiAoY2xpY2spPVwiaGFuZGxlSXRlbUNsaWNrKCRldmVudCxpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWNoZWNrLWJveCAqbmdJZj1cInNob3dDaGVja0JveFwiIFtzaXplXT1cInNpemVcIiBbdmFsdWVdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKCFhbGxvd051bGwgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDEgJiYgaXNJdGVtU2VsZWN0ZWQoaXRlbSkpIHx8IGlzSXRlbURpc2FibGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlSXRlbUNsaWNrKCRldmVudCxpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtY2hlY2stYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dUZW1wbGF0ZTsgZWxzZSBlbHNlVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7b3ZlcmZsb3c6IGhpZGRlbjtmbGV4OiAxO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbVt0ZXh0RmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIihzaG93Q2hlY2tCb3gpID8geydwYWRkaW5nLWlubGluZS1zdGFydCc6ICcwLjVyZW0nfTonJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd1RlbXBsYXRlOyBjb250ZXh0OnsgJGltcGxpY2l0OiBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZVRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDt0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztvdmVyZmxvdzogaGlkZGVuO2ZsZXg6IDE7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtW3RleHRGaWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiKHNob3dDaGVja0JveCkgPyB7J3BhZGRpbmctaW5saW5lLXN0YXJ0JzogJzAuNXJlbSd9OicnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtW3RleHRGaWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93TG9hZGluZ1wiIGNsYXNzPVwiYXgtcGFkLXNtXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLXNwaW5uZXItdGhpcmQgZmEtcHVsc2UgZmEtMnhcIiBzdHlsZT1cImNvbG9yOiB2YXIoLS1heC1wcmltYXJ5LWNvbG9yKTtcIj48L2k+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIDxheC1sb2FkaW5nLWluZGljYXRvciA+PC9heC1sb2FkaW5nLWluZGljYXRvcj4gLS0+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93TG9hZGluZyA9PSB0cnVlOyB0aGVuIHNlYXJjaFRlbXBsYXRlIGVsc2Ugbm9EYXRhVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzZWFyY2hUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydjb21tb24uc2VhcmNoJyB8IHRyYW5zfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vRGF0YVRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J2NvbW1vbi5ub0RhdGFGb3VuZCcgfCB0cmFuc319XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG48L2F4LWRyb3AtZG93bj4iXX0=
|