@acorex/components 7.5.0 → 7.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/action-sheet/index.d.ts +1 -1
- package/action-sheet/lib/action-sheet.component.d.ts +3 -3
- package/avatar/index.d.ts +1 -1
- package/badge/lib/badge.component.d.ts +3 -3
- package/breadcrumbs/index.d.ts +2 -2
- package/breadcrumbs/lib/breadcrumbs-item.component.d.ts +1 -1
- package/button/lib/button-item.class.d.ts +1 -1
- package/button/lib/button-item.component.d.ts +3 -1
- package/button/lib/button.component.d.ts +1 -1
- package/calendar/lib/calendar.class.d.ts +1 -1
- package/calendar/lib/calendar.component.d.ts +6 -4
- package/chips/lib/chips.component.d.ts +1 -1
- package/collapse/lib/collapse-group.component.d.ts +9 -6
- package/collapse/lib/collapse.component.d.ts +21 -8
- package/collapse/lib/collapse.module.d.ts +2 -1
- package/color-box/lib/color-box.component.d.ts +2 -2
- package/color-palette/lib/color-palette-input.component.d.ts +3 -3
- package/color-palette/lib/color-palette-picker.component.d.ts +1 -1
- package/color-palette/lib/color-palette.class.d.ts +4 -4
- package/common/index.d.ts +1 -1
- package/common/lib/classes/datasource.class.d.ts +55 -0
- package/common/lib/classes/styles.class.d.ts +2 -3
- package/common/lib/components/colorlook-component.class.d.ts +2 -2
- package/common/lib/components/input-base-value-component.class.d.ts +12 -12
- package/common/lib/components/interactive-component.class.d.ts +1 -7
- package/common/lib/components/selection-base.component.class.d.ts +5 -6
- package/common/lib/directives/delayed-value-changed.directive.d.ts +5 -5
- package/common/lib/directives/hotkey.directive.d.ts +2 -2
- package/common/lib/directives/responsive.directive.d.ts +1 -1
- package/common/lib/directives/ripple.directive.d.ts +2 -1
- package/data-table/lib/data-table.component.d.ts +2 -2
- package/datetime-box/lib/datetime-box.component.d.ts +4 -3
- package/datetime-input/lib/datetime-input.component.d.ts +2 -1
- package/datetime-picker/index.d.ts +1 -1
- package/datetime-picker/lib/datetime-picker.component.d.ts +1 -2
- package/dropdown/lib/dropdown-box.component.d.ts +5 -3
- package/dropdown/lib/dropdown-panel.component.d.ts +1 -0
- package/esm2022/action-sheet/index.mjs +2 -2
- package/esm2022/action-sheet/lib/action-sheet.class.mjs +1 -1
- package/esm2022/action-sheet/lib/action-sheet.component.mjs +22 -14
- package/esm2022/action-sheet/lib/action-sheet.module.mjs +3 -3
- package/esm2022/action-sheet/lib/action-sheet.service.mjs +5 -5
- package/esm2022/alert/lib/alert.component.mjs +4 -5
- package/esm2022/avatar/index.mjs +2 -2
- package/esm2022/avatar/lib/avatar-group.component.mjs +1 -1
- package/esm2022/avatar/lib/avatar.component.mjs +4 -4
- package/esm2022/badge/lib/badge.component.mjs +6 -6
- package/esm2022/badge/lib/badge.module.mjs +2 -2
- package/esm2022/breadcrumbs/index.mjs +3 -3
- package/esm2022/breadcrumbs/lib/breadcrumbs-item.class.mjs +1 -1
- package/esm2022/breadcrumbs/lib/breadcrumbs-item.component.mjs +2 -2
- package/esm2022/breadcrumbs/lib/breadcrumbs.component.mjs +1 -1
- package/esm2022/breadcrumbs/lib/breadcrumbs.module.mjs +3 -3
- package/esm2022/button/lib/button-item.class.mjs +1 -1
- package/esm2022/button/lib/button-item.component.mjs +12 -3
- package/esm2022/button/lib/button.component.mjs +3 -3
- package/esm2022/button-group/lib/button-group.component.mjs +3 -3
- package/esm2022/button-group/lib/button-group.module.mjs +2 -2
- package/esm2022/calendar/lib/calendar-range.component.mjs +4 -7
- package/esm2022/calendar/lib/calendar.class.mjs +3 -68
- package/esm2022/calendar/lib/calendar.component.mjs +53 -43
- package/esm2022/calendar/lib/calendar.module.mjs +4 -4
- package/esm2022/check-box/lib/check-box.component.mjs +9 -9
- package/esm2022/check-box/lib/check-box.module.mjs +3 -3
- package/esm2022/chips/lib/chips.component.mjs +6 -6
- package/esm2022/chips/lib/chips.module.mjs +2 -2
- package/esm2022/collapse/lib/collapse-group.component.mjs +23 -14
- package/esm2022/collapse/lib/collapse.component.mjs +68 -20
- package/esm2022/collapse/lib/collapse.module.mjs +7 -6
- package/esm2022/color-box/lib/color-box.component.mjs +7 -7
- package/esm2022/color-box/lib/color-box.module.mjs +4 -4
- package/esm2022/color-palette/lib/color-palette-input.component.mjs +10 -14
- package/esm2022/color-palette/lib/color-palette-picker.component.mjs +29 -31
- package/esm2022/color-palette/lib/color-palette-preview.component.mjs +8 -16
- package/esm2022/color-palette/lib/color-palette-swatches.component.mjs +5 -5
- package/esm2022/color-palette/lib/color-palette.class.mjs +2 -2
- package/esm2022/color-palette/lib/color-palette.component.mjs +14 -6
- package/esm2022/color-palette/lib/color-palette.module.mjs +12 -12
- package/esm2022/common/index.mjs +2 -2
- package/esm2022/common/lib/classes/components.class.mjs +1 -1
- package/esm2022/common/lib/classes/datalist.class.mjs +1 -53
- package/esm2022/common/lib/classes/datasource.class.mjs +106 -0
- package/esm2022/common/lib/classes/styles.class.mjs +2 -10
- package/esm2022/common/lib/common.module.mjs +4 -2
- package/esm2022/common/lib/components/button-base-component.class.mjs +4 -4
- package/esm2022/common/lib/components/color-component.class.mjs +2 -2
- package/esm2022/common/lib/components/colorlook-component.class.mjs +4 -4
- package/esm2022/common/lib/components/input-base-value-component.class.mjs +15 -15
- package/esm2022/common/lib/components/interactive-component.class.mjs +13 -13
- package/esm2022/common/lib/components/look-component.class.mjs +2 -2
- package/esm2022/common/lib/components/selection-base.component.class.mjs +63 -29
- package/esm2022/common/lib/components/value-component.class.mjs +3 -3
- package/esm2022/common/lib/directives/auto-focus.directive.mjs +4 -12
- package/esm2022/common/lib/directives/delayed-value-changed.directive.mjs +16 -14
- package/esm2022/common/lib/directives/hotkey.directive.mjs +14 -15
- package/esm2022/common/lib/directives/infinite-scroll.directive.mjs +7 -9
- package/esm2022/common/lib/directives/responsive.directive.mjs +12 -10
- package/esm2022/common/lib/directives/ripple.directive.mjs +14 -8
- package/esm2022/common/lib/services/dom.service.mjs +2 -2
- package/esm2022/common/lib/services/hotkey.service.mjs +4 -5
- package/esm2022/common/lib/types/direction.mjs +1 -1
- package/esm2022/common/lib/types/orientation.mjs +1 -1
- package/esm2022/common/lib/types/placement.mjs +23 -23
- package/esm2022/common/lib/types/range.mjs +1 -1
- package/esm2022/data-pager/lib/data-pager-info.component.mjs +3 -3
- package/esm2022/data-pager/lib/data-pager-input-selector.component.mjs +1 -1
- package/esm2022/data-pager/lib/data-pager-next-buttons.components.mjs +21 -8
- package/esm2022/data-pager/lib/data-pager-numeric-selector.component.mjs +3 -3
- package/esm2022/data-pager/lib/data-pager-pagesize-dropdown.component.mjs +17 -5
- package/esm2022/data-pager/lib/data-pager-prev-buttons.component.mjs +19 -7
- package/esm2022/data-pager/lib/data-pager.component.mjs +2 -2
- package/esm2022/data-pager/lib/data-pager.module.mjs +30 -16
- package/esm2022/data-table/lib/data-column.directive.mjs +2 -2
- package/esm2022/data-table/lib/data-table.component.mjs +2 -2
- package/esm2022/data-table/lib/data-table.module.mjs +7 -7
- package/esm2022/datetime-box/lib/datetime-box.component.mjs +10 -7
- package/esm2022/datetime-box/lib/datetime-box.module.mjs +7 -7
- package/esm2022/datetime-input/lib/datetime-input.component.mjs +144 -137
- package/esm2022/datetime-input/lib/datetime-input.module.mjs +4 -4
- package/esm2022/datetime-picker/index.mjs +2 -2
- package/esm2022/datetime-picker/lib/datetime-picker.component.mjs +4 -4
- package/esm2022/datetime-picker/lib/datetime-picker.config.mjs +4 -4
- package/esm2022/decorators/lib/components/clear-button.component.mjs +2 -2
- package/esm2022/decorators/lib/components/close-button.component.mjs +8 -4
- package/esm2022/decorators/lib/components/generic-content.component.mjs +1 -1
- package/esm2022/decorators/lib/components/icon.component.mjs +2 -2
- package/esm2022/dialog/lib/dialog.component.mjs +3 -3
- package/esm2022/dialog/lib/dialog.module.mjs +26 -10
- package/esm2022/drawer/lib/drawer-container.component.mjs +2 -2
- package/esm2022/drawer/lib/drawer.component.mjs +2 -2
- package/esm2022/drawer/lib/drawer.module.mjs +3 -3
- package/esm2022/dropdown/lib/dropdown-box.class.mjs +1 -1
- package/esm2022/dropdown/lib/dropdown-box.component.mjs +14 -11
- package/esm2022/dropdown/lib/dropdown-panel.component.mjs +5 -4
- package/esm2022/dropdown/lib/dropdown.module.mjs +29 -9
- package/esm2022/form/index.mjs +2 -2
- package/esm2022/form/lib/form-field.component.mjs +4 -4
- package/esm2022/form/lib/form.component.mjs +3 -4
- package/esm2022/form/lib/form.config.mjs +6 -6
- package/esm2022/form/lib/form.module.mjs +3 -11
- package/esm2022/form/lib/validation-summary.component.mjs +40 -30
- package/esm2022/form/lib/validation.class.mjs +1 -1
- package/esm2022/image/lib/image.component.mjs +1 -1
- package/esm2022/image/lib/image.module.mjs +2 -2
- package/esm2022/label/lib/label.component.mjs +4 -8
- package/esm2022/label/lib/label.module.mjs +2 -2
- package/esm2022/list/lib/list.component.mjs +77 -80
- package/esm2022/list/lib/list.module.mjs +3 -3
- package/esm2022/loading/index.mjs +2 -2
- package/esm2022/loading/lib/loading-spinner.component.mjs +13 -7
- package/esm2022/loading/lib/loading.component.mjs +8 -16
- package/esm2022/loading/lib/loading.config.mjs +2 -2
- package/esm2022/loading/lib/loading.directive.mjs +2 -2
- package/esm2022/menu/index.mjs +1 -2
- package/esm2022/menu/lib/class/root-menu.class.mjs +1 -1
- package/esm2022/menu/lib/menu-item/menu-item.component.mjs +60 -19
- package/esm2022/menu/lib/menu.component.mjs +37 -342
- package/esm2022/menu/lib/menu.module.mjs +3 -4
- package/esm2022/mixin/lib/base-components.class.mjs +2 -3
- package/esm2022/mixin/lib/base-menu-mixin.class.mjs +1 -1
- package/esm2022/mixin/lib/button-mixin.class.mjs +1 -1
- package/esm2022/mixin/lib/clickable-mixin.class.mjs +8 -8
- package/esm2022/mixin/lib/color-look-mixing.class.mjs +3 -3
- package/esm2022/mixin/lib/constratctor.mjs +1 -1
- package/esm2022/mixin/lib/datalist-component.class.mjs +3 -5
- package/esm2022/mixin/lib/datalist.class.mjs +5 -6
- package/esm2022/mixin/lib/dropdown-mixin.class.mjs +2 -4
- package/esm2022/mixin/lib/interactive-mixin.class.mjs +29 -28
- package/esm2022/mixin/lib/mixin.class.mjs +13 -13
- package/esm2022/mixin/lib/page-component.class.mjs +3 -3
- package/esm2022/mixin/lib/selection-component.class.mjs +1 -1
- package/esm2022/mixin/lib/textbox-mixin.class.mjs +29 -20
- package/esm2022/mixin/lib/value-mixin.class.mjs +1 -1
- package/esm2022/notification/index.mjs +2 -2
- package/esm2022/notification/lib/notification.class.mjs +1 -1
- package/esm2022/notification/lib/notification.component.mjs +2 -2
- package/esm2022/notification/lib/notification.config.mjs +1 -1
- package/esm2022/notification/lib/notification.module.mjs +21 -9
- package/esm2022/notification/lib/notification.service.mjs +11 -11
- package/esm2022/number-box/lib/number-box.component.mjs +6 -6
- package/esm2022/number-box/lib/number-box.module.mjs +6 -16
- package/esm2022/otp/lib/otp.component.mjs +6 -5
- package/esm2022/otp/lib/otp.module.mjs +5 -4
- package/esm2022/page/lib/base-page.class.mjs +6 -4
- package/esm2022/page/lib/page.component.mjs +3 -3
- package/esm2022/page/lib/page.module.mjs +1 -1
- package/esm2022/password-box/lib/password-box.component.mjs +6 -6
- package/esm2022/password-box/lib/password-box.module.mjs +7 -15
- package/esm2022/picker/lib/picker-column.directive.mjs +9 -16
- package/esm2022/picker/lib/picker.component.mjs +2 -2
- package/esm2022/picker/lib/picker.module.mjs +3 -3
- package/esm2022/popover/lib/popover.component.mjs +1 -1
- package/esm2022/popover/lib/popover.module.mjs +2 -2
- package/esm2022/popup/index.mjs +2 -2
- package/esm2022/popup/lib/popup.interface.mjs +1 -1
- package/esm2022/popup/lib/popup.module.mjs +2 -2
- package/esm2022/progress-bar/lib/progress-bar.component.mjs +5 -5
- package/esm2022/progress-bar/lib/progress-bar.module.mjs +2 -2
- package/esm2022/radio/lib/radio.component.mjs +8 -8
- package/esm2022/radio/lib/radio.module.mjs +2 -2
- package/esm2022/range-slider/lib/range-slider.component.mjs +9 -9
- package/esm2022/range-slider/lib/range-slider.module.mjs +4 -4
- package/esm2022/result/lib/result.component.mjs +4 -4
- package/esm2022/result/lib/result.module.mjs +2 -2
- package/esm2022/routing-progress/acorex-components-routing-progress.mjs +5 -0
- package/esm2022/routing-progress/index.mjs +3 -0
- package/esm2022/routing-progress/lib/routing-progress.component.mjs +58 -0
- package/esm2022/routing-progress/lib/routing-progress.module.mjs +21 -0
- package/esm2022/scheduler/lib/scheduler-month-view.component.mjs +4 -2
- package/esm2022/scheduler/lib/scheduler.component.mjs +1 -1
- package/esm2022/search-box/lib/search-box.component.mjs +45 -20
- package/esm2022/search-box/lib/search-box.module.mjs +8 -8
- package/esm2022/select-box/index.mjs +2 -2
- package/esm2022/select-box/lib/select-box.component.mjs +168 -308
- package/esm2022/select-box/lib/select-box.module.mjs +12 -13
- package/esm2022/selection-list/lib/selection-list.component.mjs +20 -10
- package/esm2022/selection-list/lib/selection-list.module.mjs +6 -6
- package/esm2022/side-menu/acorex-components-side-menu.mjs +5 -0
- package/esm2022/side-menu/index.mjs +4 -0
- package/esm2022/side-menu/lib/side-menu-item/side-menu-item.compoent.mjs +116 -0
- package/esm2022/side-menu/lib/side-menu.component.mjs +15 -0
- package/esm2022/side-menu/lib/side-menu.module.mjs +23 -0
- package/esm2022/skeleton/acorex-components-skeleton.mjs +5 -0
- package/esm2022/skeleton/index.mjs +3 -0
- package/esm2022/skeleton/lib/skeleton.component.mjs +24 -0
- package/esm2022/skeleton/lib/skeleton.module.mjs +18 -0
- package/esm2022/switch/lib/switch-content.component.mjs +1 -1
- package/esm2022/switch/lib/switch.component.mjs +11 -18
- package/esm2022/switch/lib/switch.module.mjs +4 -4
- package/esm2022/tabs/lib/tab-content.directive.mjs +1 -1
- package/esm2022/tabs/lib/tab-item.component.mjs +9 -2
- package/esm2022/tabs/lib/tabs.component.mjs +2 -2
- package/esm2022/tabs/lib/tabs.module.mjs +5 -5
- package/esm2022/tag/lib/tag.component.mjs +7 -13
- package/esm2022/tag/lib/tag.module.mjs +2 -2
- package/esm2022/text-area/lib/text-area.component.mjs +14 -16
- package/esm2022/text-area/lib/text-area.module.mjs +2 -2
- package/esm2022/text-box/lib/text-box.component.mjs +6 -6
- package/esm2022/text-box/lib/text-box.module.mjs +4 -18
- package/esm2022/toast/index.mjs +2 -2
- package/esm2022/toast/lib/toast.class.mjs +1 -1
- package/esm2022/toast/lib/toast.component.mjs +4 -4
- package/esm2022/toast/lib/toast.config.mjs +3 -3
- package/esm2022/toast/lib/toast.module.mjs +6 -10
- package/esm2022/toast/lib/toast.service.mjs +16 -14
- package/esm2022/tooltip/lib/tooltip.component.mjs +2 -2
- package/esm2022/tooltip/lib/tooltip.directive.mjs +4 -4
- package/esm2022/tooltip/lib/tooltip.module.mjs +3 -3
- package/esm2022/uploader/index.mjs +3 -1
- package/esm2022/uploader/lib/uploader-drop-zone.component.mjs +3 -3
- package/esm2022/uploader/lib/uploader-list.component.mjs +41 -7
- package/esm2022/uploader/lib/uploader-overlay.component.mjs +2 -2
- package/esm2022/uploader/lib/uploader-zone.directive.mjs +53 -0
- package/esm2022/uploader/lib/uploader.module.mjs +26 -7
- package/esm2022/uploader/lib/uploader.service.mjs +30 -0
- package/fesm2022/acorex-components-action-sheet.mjs +23 -15
- package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
- package/fesm2022/acorex-components-alert.mjs +3 -4
- package/fesm2022/acorex-components-alert.mjs.map +1 -1
- package/fesm2022/acorex-components-avatar.mjs +16 -16
- package/fesm2022/acorex-components-avatar.mjs.map +1 -1
- package/fesm2022/acorex-components-badge.mjs +5 -5
- package/fesm2022/acorex-components-badge.mjs.map +1 -1
- package/fesm2022/acorex-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/acorex-components-button-group.mjs +2 -2
- package/fesm2022/acorex-components-button-group.mjs.map +1 -1
- package/fesm2022/acorex-components-button.mjs +13 -4
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-calendar.mjs +52 -110
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-check-box.mjs +9 -9
- package/fesm2022/acorex-components-check-box.mjs.map +1 -1
- package/fesm2022/acorex-components-chips.mjs +5 -5
- package/fesm2022/acorex-components-chips.mjs.map +1 -1
- package/fesm2022/acorex-components-collapse.mjs +92 -34
- package/fesm2022/acorex-components-collapse.mjs.map +1 -1
- package/fesm2022/acorex-components-color-box.mjs +6 -6
- package/fesm2022/acorex-components-color-box.mjs.map +1 -1
- package/fesm2022/acorex-components-color-palette.mjs +53 -59
- package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
- package/fesm2022/acorex-components-common.mjs +277 -223
- package/fesm2022/acorex-components-common.mjs.map +1 -1
- package/fesm2022/acorex-components-data-pager.mjs +70 -19
- package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
- package/fesm2022/acorex-components-data-table.mjs +1 -1
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-box.mjs +10 -7
- package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-input.mjs +143 -136
- package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-picker.mjs +9 -9
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-decorators.mjs +8 -4
- package/fesm2022/acorex-components-decorators.mjs.map +1 -1
- package/fesm2022/acorex-components-dialog.mjs +20 -4
- package/fesm2022/acorex-components-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-drawer.mjs +1 -1
- package/fesm2022/acorex-components-drawer.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown.mjs +43 -19
- package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +76 -75
- package/fesm2022/acorex-components-form.mjs.map +1 -1
- package/fesm2022/acorex-components-image.mjs.map +1 -1
- package/fesm2022/acorex-components-label.mjs +2 -6
- package/fesm2022/acorex-components-label.mjs.map +1 -1
- package/fesm2022/acorex-components-list.mjs +77 -80
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading.mjs +19 -21
- package/fesm2022/acorex-components-loading.mjs.map +1 -1
- package/fesm2022/acorex-components-menu.mjs +78 -382
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-mixin.mjs +70 -66
- package/fesm2022/acorex-components-mixin.mjs.map +1 -1
- package/fesm2022/acorex-components-notification.mjs +45 -33
- package/fesm2022/acorex-components-notification.mjs.map +1 -1
- package/fesm2022/acorex-components-number-box.mjs +7 -17
- package/fesm2022/acorex-components-number-box.mjs.map +1 -1
- package/fesm2022/acorex-components-otp.mjs +8 -6
- package/fesm2022/acorex-components-otp.mjs.map +1 -1
- package/fesm2022/acorex-components-page.mjs +6 -4
- package/fesm2022/acorex-components-page.mjs.map +1 -1
- package/fesm2022/acorex-components-password-box.mjs +7 -15
- package/fesm2022/acorex-components-password-box.mjs.map +1 -1
- package/fesm2022/acorex-components-picker.mjs +10 -17
- package/fesm2022/acorex-components-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-popover.mjs.map +1 -1
- package/fesm2022/acorex-components-popup.mjs +1 -1
- package/fesm2022/acorex-components-popup.mjs.map +1 -1
- package/fesm2022/acorex-components-progress-bar.mjs +3 -3
- package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
- package/fesm2022/acorex-components-radio.mjs +6 -6
- package/fesm2022/acorex-components-radio.mjs.map +1 -1
- package/fesm2022/acorex-components-range-slider.mjs +7 -7
- package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
- package/fesm2022/acorex-components-result.mjs +2 -2
- package/fesm2022/acorex-components-result.mjs.map +1 -1
- package/fesm2022/acorex-components-routing-progress.mjs +83 -0
- package/fesm2022/acorex-components-routing-progress.mjs.map +1 -0
- package/fesm2022/acorex-components-scheduler.mjs +3 -1
- package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
- package/fesm2022/acorex-components-search-box.mjs +48 -25
- package/fesm2022/acorex-components-search-box.mjs.map +1 -1
- package/fesm2022/acorex-components-select-box.mjs +171 -401
- package/fesm2022/acorex-components-select-box.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list.mjs +22 -12
- package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
- package/fesm2022/acorex-components-side-menu.mjs +153 -0
- package/fesm2022/acorex-components-side-menu.mjs.map +1 -0
- package/fesm2022/acorex-components-skeleton.mjs +46 -0
- package/fesm2022/acorex-components-skeleton.mjs.map +1 -0
- package/fesm2022/acorex-components-switch.mjs +9 -16
- package/fesm2022/acorex-components-switch.mjs.map +1 -1
- package/fesm2022/acorex-components-tabs.mjs +11 -4
- package/fesm2022/acorex-components-tabs.mjs.map +1 -1
- package/fesm2022/acorex-components-tag.mjs +5 -11
- package/fesm2022/acorex-components-tag.mjs.map +1 -1
- package/fesm2022/acorex-components-text-area.mjs +13 -15
- package/fesm2022/acorex-components-text-area.mjs.map +1 -1
- package/fesm2022/acorex-components-text-box.mjs +8 -22
- package/fesm2022/acorex-components-text-box.mjs.map +1 -1
- package/fesm2022/acorex-components-toast.mjs +43 -45
- package/fesm2022/acorex-components-toast.mjs.map +1 -1
- package/fesm2022/acorex-components-tooltip.mjs +2 -2
- package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
- package/fesm2022/acorex-components-uploader.mjs +146 -18
- package/fesm2022/acorex-components-uploader.mjs.map +1 -1
- package/form/index.d.ts +1 -1
- package/form/lib/form.component.d.ts +2 -2
- package/form/lib/validation-summary.component.d.ts +3 -3
- package/list/lib/list.component.d.ts +26 -27
- package/loading/index.d.ts +1 -1
- package/loading/lib/loading.component.d.ts +1 -1
- package/menu/index.d.ts +0 -1
- package/menu/lib/class/root-menu.class.d.ts +2 -0
- package/menu/lib/menu-item/menu-item.component.d.ts +19 -6
- package/menu/lib/menu.component.d.ts +10 -40
- package/menu/lib/menu.module.d.ts +7 -8
- package/mixin/lib/base-components.class.d.ts +2 -2
- package/mixin/lib/base-menu-mixin.class.d.ts +5 -5
- package/mixin/lib/button-mixin.class.d.ts +2 -2
- package/mixin/lib/clickable-mixin.class.d.ts +9 -9
- package/mixin/lib/color-look-mixing.class.d.ts +2 -2
- package/mixin/lib/datalist-component.class.d.ts +10 -10
- package/mixin/lib/datalist.class.d.ts +1 -1
- package/mixin/lib/dropdown-mixin.class.d.ts +3 -3
- package/mixin/lib/interactive-mixin.class.d.ts +25 -22
- package/mixin/lib/mixin.class.d.ts +62 -62
- package/mixin/lib/page-component.class.d.ts +4 -4
- package/mixin/lib/selection-component.class.d.ts +3 -3
- package/mixin/lib/sizable-mixin.class.d.ts +2 -2
- package/mixin/lib/textbox-mixin.class.d.ts +20 -20
- package/mixin/lib/value-mixin.class.d.ts +9 -9
- package/notification/index.d.ts +1 -1
- package/notification/lib/notification.class.d.ts +3 -3
- package/notification/lib/notification.config.d.ts +1 -1
- package/number-box/lib/number-box.component.d.ts +3 -3
- package/otp/lib/otp.component.d.ts +3 -3
- package/otp/lib/otp.module.d.ts +2 -1
- package/package.json +19 -7
- package/page/lib/base-page.class.d.ts +1 -1
- package/page/lib/page.component.d.ts +1 -1
- package/password-box/lib/password-box.component.d.ts +4 -4
- package/popup/index.d.ts +1 -1
- package/popup/lib/popup.interface.d.ts +2 -2
- package/routing-progress/README.md +3 -0
- package/routing-progress/index.d.ts +2 -0
- package/routing-progress/lib/routing-progress.component.d.ts +14 -0
- package/routing-progress/lib/routing-progress.module.d.ts +8 -0
- package/search-box/lib/search-box.component.d.ts +11 -4
- package/select-box/index.d.ts +1 -1
- package/select-box/lib/select-box.component.d.ts +37 -59
- package/select-box/lib/select-box.module.d.ts +14 -15
- package/selection-list/lib/selection-list.component.d.ts +6 -3
- package/side-menu/README.md +3 -0
- package/side-menu/index.d.ts +3 -0
- package/side-menu/lib/side-menu-item/side-menu-item.compoent.d.ts +37 -0
- package/side-menu/lib/side-menu.component.d.ts +8 -0
- package/side-menu/lib/side-menu.module.d.ts +10 -0
- package/skeleton/README.md +3 -0
- package/skeleton/index.d.ts +2 -0
- package/skeleton/lib/skeleton.component.d.ts +8 -0
- package/skeleton/lib/skeleton.module.d.ts +8 -0
- package/tabs/lib/tab-item.component.d.ts +2 -1
- package/tag/lib/tag.component.d.ts +3 -4
- package/text-area/lib/text-area.component.d.ts +3 -3
- package/text-box/lib/text-box.component.d.ts +3 -3
- package/toast/index.d.ts +1 -1
- package/toast/lib/toast.class.d.ts +1 -1
- package/toast/lib/toast.component.d.ts +2 -1
- package/toast/lib/toast.config.d.ts +1 -1
- package/tooltip/lib/tooltip.directive.d.ts +1 -1
- package/uploader/index.d.ts +2 -0
- package/uploader/lib/uploader-list.component.d.ts +14 -1
- package/uploader/lib/uploader-zone.directive.d.ts +18 -0
- package/uploader/lib/uploader.module.d.ts +6 -4
- package/uploader/lib/uploader.service.d.ts +10 -0
- package/common/lib/components/appearance-component.class.d.ts +0 -12
- package/context-menu/README.md +0 -3
- package/context-menu/index.d.ts +0 -2
- package/context-menu/lib/context-menu.component.d.ts +0 -34
- package/context-menu/lib/context-menu.module.d.ts +0 -13
- package/esm2022/common/lib/components/appearance-component.class.mjs +0 -25
- package/esm2022/context-menu/acorex-components-context-menu.mjs +0 -5
- package/esm2022/context-menu/index.mjs +0 -3
- package/esm2022/context-menu/lib/context-menu.component.mjs +0 -262
- package/esm2022/context-menu/lib/context-menu.module.mjs +0 -36
- package/esm2022/menu/lib/menu2.component.mjs +0 -45
- package/esm2022/select-box/lib/select-box2.component.mjs +0 -97
- package/fesm2022/acorex-components-context-menu.mjs +0 -300
- package/fesm2022/acorex-components-context-menu.mjs.map +0 -1
- package/menu/lib/menu2.component.d.ts +0 -12
- package/select-box/lib/select-box2.component.d.ts +0 -25
@@ -1,7 +1,7 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
1
|
+
import { AXClearableComponent, AXComponent, AXFocusableComponent, AXValuableComponent, MXInputBaseValueComponent, } from '@acorex/components/common';
|
2
|
+
import { AXCalendarService, } from '@acorex/core/dateTime';
|
3
3
|
import { AXStringUtil } from '@acorex/core/utils';
|
4
|
-
import {
|
4
|
+
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation, forwardRef, inject, } from '@angular/core';
|
5
5
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
6
6
|
import * as i0 from "@angular/core";
|
7
7
|
import * as i1 from "@angular/forms";
|
@@ -11,65 +11,66 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
11
11
|
this.calendarService = inject(AXCalendarService);
|
12
12
|
this._editingParts = {
|
13
13
|
year: {
|
14
|
-
key:
|
15
|
-
placeholder:
|
16
|
-
placeholders: [
|
14
|
+
key: 'year',
|
15
|
+
placeholder: 'yyyy',
|
16
|
+
placeholders: ['YY', 'yy', 'YYYY', 'yyyy'],
|
17
17
|
enabled: false,
|
18
18
|
default: 2023,
|
19
19
|
typedValue: null,
|
20
|
-
realValue: () => this.editingDateObj.format(this._editingParts.year.placeholder)
|
20
|
+
realValue: () => this.editingDateObj.format(this._editingParts.year.placeholder),
|
21
21
|
},
|
22
22
|
month: {
|
23
|
-
key:
|
24
|
-
placeholder:
|
25
|
-
placeholders: [
|
23
|
+
key: 'month',
|
24
|
+
placeholder: 'MM',
|
25
|
+
placeholders: ['MMM', 'MMMM', 'MM', 'M'],
|
26
26
|
enabled: false,
|
27
27
|
default: 1,
|
28
28
|
typedValue: null,
|
29
|
-
realValue: () => this.editingDateObj.format(this._editingParts.month.placeholder)
|
29
|
+
realValue: () => this.editingDateObj.format(this._editingParts.month.placeholder),
|
30
30
|
},
|
31
31
|
day: {
|
32
|
-
key:
|
33
|
-
placeholder:
|
34
|
-
placeholders: [
|
32
|
+
key: 'day',
|
33
|
+
placeholder: 'dd',
|
34
|
+
placeholders: ['dd', 'd', 'DDDD', 'ddd'],
|
35
35
|
enabled: false,
|
36
36
|
default: 1,
|
37
37
|
typedValue: null,
|
38
|
-
realValue: () => this.editingDateObj.format(this._editingParts.day.placeholder)
|
38
|
+
realValue: () => this.editingDateObj.format(this._editingParts.day.placeholder),
|
39
39
|
},
|
40
40
|
hour: {
|
41
|
-
key:
|
42
|
-
placeholder:
|
43
|
-
placeholders: [
|
41
|
+
key: 'hour',
|
42
|
+
placeholder: 'HH',
|
43
|
+
placeholders: ['HH', 'H', 'hh', 'h'],
|
44
44
|
enabled: false,
|
45
45
|
default: 0,
|
46
46
|
typedValue: null,
|
47
|
-
realValue: () => this.editingDateObj.format(this._editingParts.hour.placeholder)
|
47
|
+
realValue: () => this.editingDateObj.format(this._editingParts.hour.placeholder),
|
48
48
|
},
|
49
49
|
minute: {
|
50
|
-
key:
|
51
|
-
placeholder:
|
52
|
-
placeholders: [
|
50
|
+
key: 'minute',
|
51
|
+
placeholder: 'mm',
|
52
|
+
placeholders: ['mm', 'm'],
|
53
53
|
enabled: false,
|
54
54
|
default: 0,
|
55
55
|
typedValue: null,
|
56
|
-
realValue: () => this.editingDateObj.format(this._editingParts.minute.placeholder)
|
56
|
+
realValue: () => this.editingDateObj.format(this._editingParts.minute.placeholder),
|
57
57
|
},
|
58
58
|
second: {
|
59
|
-
key:
|
60
|
-
placeholder:
|
61
|
-
placeholders: [
|
59
|
+
key: 'second',
|
60
|
+
placeholder: 'ss',
|
61
|
+
placeholders: ['ss', 's'],
|
62
62
|
enabled: false,
|
63
63
|
default: 0,
|
64
64
|
typedValue: null,
|
65
|
-
realValue: () => this.editingDateObj.format(this._editingParts.second.placeholder)
|
66
|
-
}
|
65
|
+
realValue: () => this.editingDateObj.format(this._editingParts.second.placeholder),
|
66
|
+
},
|
67
67
|
};
|
68
68
|
this._inputChars = [];
|
69
69
|
this._type = this.calendarService.calendar.name();
|
70
70
|
this._activePart = 'hour';
|
71
71
|
this._editingDateObj = this.calendarService.now(this.type);
|
72
72
|
this.formatChange = new EventEmitter();
|
73
|
+
this.onClick = new EventEmitter();
|
73
74
|
this._format = this.calendarService.calendar.formats.dateTimeInput;
|
74
75
|
}
|
75
76
|
get type() {
|
@@ -114,12 +115,12 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
114
115
|
name: 'format',
|
115
116
|
value: v,
|
116
117
|
afterCallback: (o, n) => {
|
117
|
-
Object.values(this._editingParts).forEach(e => {
|
118
|
+
Object.values(this._editingParts).forEach((e) => {
|
118
119
|
e.enabled = false;
|
119
120
|
});
|
120
121
|
const formatParts = n.split(/[^a-zA-Z]+/);
|
121
|
-
formatParts.forEach(f => {
|
122
|
-
const found = Object.values(this._editingParts).find(c => c.placeholders.some(d => d == f));
|
122
|
+
formatParts.forEach((f) => {
|
123
|
+
const found = Object.values(this._editingParts).find((c) => c.placeholders.some((d) => d == f));
|
123
124
|
if (found) {
|
124
125
|
found.enabled = true;
|
125
126
|
found.placeholder = f;
|
@@ -132,8 +133,8 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
132
133
|
// TODO: better spliter format
|
133
134
|
const formatParts = this.format.split(/[^a-zA-Z]+/);
|
134
135
|
const result = [];
|
135
|
-
formatParts.forEach(f => {
|
136
|
-
const found = Object.values(this._editingParts).find(c => c.placeholders.some(d => d == f));
|
136
|
+
formatParts.forEach((f) => {
|
137
|
+
const found = Object.values(this._editingParts).find((c) => c.placeholders.some((d) => d == f));
|
137
138
|
if (found && found.enabled)
|
138
139
|
result.push(found);
|
139
140
|
});
|
@@ -145,7 +146,7 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
145
146
|
_updateText() {
|
146
147
|
let text = this.format;
|
147
148
|
//
|
148
|
-
Object.values(this._editingParts).forEach(part => {
|
149
|
+
Object.values(this._editingParts).forEach((part) => {
|
149
150
|
if (this.activePart == part.key) {
|
150
151
|
if (part.typedValue)
|
151
152
|
text = text.replace(part.placeholder, part.typedValue);
|
@@ -165,7 +166,7 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
165
166
|
if (value) {
|
166
167
|
let editingDate = this.calendarService.create(value, this.type);
|
167
168
|
let applyChanges = false;
|
168
|
-
Object.values(this._editingParts).forEach(part => {
|
169
|
+
Object.values(this._editingParts).forEach((part) => {
|
169
170
|
if (!part.enabled) {
|
170
171
|
editingDate = editingDate.set(part.key, part.default);
|
171
172
|
applyChanges = true;
|
@@ -181,7 +182,7 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
181
182
|
if (value) {
|
182
183
|
this._editingDateObj = this.calendarService.create(value, this.type);
|
183
184
|
}
|
184
|
-
Object.values(this._editingParts).forEach(part => {
|
185
|
+
Object.values(this._editingParts).forEach((part) => {
|
185
186
|
if (value) {
|
186
187
|
if (part.typedValue != part.placeholder)
|
187
188
|
part.typedValue = part.realValue();
|
@@ -222,8 +223,8 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
222
223
|
ignore();
|
223
224
|
e.code === 'ArrowRight' ? goNext() : goPrev();
|
224
225
|
}
|
225
|
-
/*************** Handle Up and Down **************/
|
226
226
|
else if ((e.code === 'ArrowUp' || e.code === 'ArrowDown') && !e.ctrlKey) {
|
227
|
+
/*************** Handle Up and Down **************/
|
227
228
|
if (this.disabled || this.readonly) {
|
228
229
|
ignore();
|
229
230
|
return;
|
@@ -238,8 +239,8 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
238
239
|
this._detectValueChanges();
|
239
240
|
}
|
240
241
|
}
|
241
|
-
/*************** Handle Backspace **************/
|
242
242
|
else if (e.code == 'Backspace' || e.code == 'Delete') {
|
243
|
+
/*************** Handle Backspace **************/
|
243
244
|
if (this.disabled || this.readonly) {
|
244
245
|
return;
|
245
246
|
}
|
@@ -250,8 +251,8 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
250
251
|
goPrev();
|
251
252
|
}
|
252
253
|
}
|
253
|
-
/*************** Handle Backspace **************/
|
254
254
|
else if (e.code == 'Tab' || e.code == 'Space') {
|
255
|
+
/*************** Handle Backspace **************/
|
255
256
|
if (input.value) {
|
256
257
|
if (!e.shiftKey && nextPart) {
|
257
258
|
ignore();
|
@@ -272,115 +273,114 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
272
273
|
const editing = this._editingParts[part.key];
|
273
274
|
//
|
274
275
|
switch (part.key) {
|
275
|
-
case 'year':
|
276
|
-
{
|
277
|
-
|
278
|
-
|
276
|
+
case 'year': {
|
277
|
+
if (editing.placeholder.length == 2 && this._inputChars.length == 0) {
|
278
|
+
this._inputChars.push(...this.calendarService.now(this.type).format('yyyy').substring(0, 2).split(''));
|
279
|
+
}
|
280
|
+
if (this._inputChars.length < 4) {
|
281
|
+
editing.typedValue = `${this._inputChars.join('')}${e.key}`;
|
282
|
+
this._inputChars.push(e.key);
|
283
|
+
if (this._inputChars.length > 3) {
|
284
|
+
next = true;
|
285
|
+
}
|
286
|
+
}
|
287
|
+
else {
|
288
|
+
next = true;
|
289
|
+
}
|
290
|
+
editing.typedValue = ('0000' + editing.typedValue).slice(-4);
|
291
|
+
const nv = parseInt(editing.typedValue);
|
292
|
+
//if (nv > 0) {
|
293
|
+
const newVal = this.editingDateObj.set('year', nv);
|
294
|
+
this._editingDateObj = newVal;
|
295
|
+
this._detectValueChanges();
|
296
|
+
//}
|
297
|
+
break;
|
298
|
+
}
|
299
|
+
case 'month': {
|
300
|
+
if (this._inputChars.length == 0) {
|
301
|
+
this._inputChars.push(e.key);
|
302
|
+
editing.typedValue = `0${e.key}`;
|
303
|
+
if (parseInt(e.key) > 1) {
|
304
|
+
this._clearInputBuffer();
|
305
|
+
next = true;
|
279
306
|
}
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
}
|
307
|
+
}
|
308
|
+
else if (this._inputChars.length == 1) {
|
309
|
+
const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
|
310
|
+
if (newStr > 12) {
|
311
|
+
editing.typedValue = `0${e.key}`;
|
286
312
|
}
|
287
313
|
else {
|
288
|
-
|
314
|
+
editing.typedValue = newStr.toString();
|
289
315
|
}
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
316
|
+
this._clearInputBuffer();
|
317
|
+
next = true;
|
318
|
+
}
|
319
|
+
editing.typedValue =
|
320
|
+
editing.typedValue?.length === 1 ? '0' + editing.typedValue : editing.typedValue;
|
321
|
+
const nv = parseInt(editing.typedValue);
|
322
|
+
if (nv > 0) {
|
323
|
+
const newVal = this.editingDateObj.set(part.key, nv);
|
294
324
|
this._editingDateObj = newVal;
|
295
325
|
this._detectValueChanges();
|
296
|
-
//}
|
297
|
-
break;
|
298
326
|
}
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
next = true;
|
307
|
-
}
|
308
|
-
}
|
309
|
-
else if (this._inputChars.length == 1) {
|
310
|
-
const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
|
311
|
-
if (newStr > 12) {
|
312
|
-
editing.typedValue = `0${e.key}`;
|
313
|
-
}
|
314
|
-
else {
|
315
|
-
editing.typedValue = newStr.toString();
|
316
|
-
}
|
327
|
+
break;
|
328
|
+
}
|
329
|
+
case 'day': {
|
330
|
+
if (this._inputChars.length == 0) {
|
331
|
+
this._inputChars.push(e.key);
|
332
|
+
editing.typedValue = `0${e.key}`;
|
333
|
+
if (parseInt(e.key) > 3) {
|
317
334
|
this._clearInputBuffer();
|
318
335
|
next = true;
|
319
336
|
}
|
320
|
-
editing.typedValue = editing.typedValue?.length === 1 ? "0" + editing.typedValue : editing.typedValue;
|
321
|
-
const nv = parseInt(editing.typedValue);
|
322
|
-
if (nv > 0) {
|
323
|
-
const newVal = this.editingDateObj.set(part.key, nv);
|
324
|
-
this._editingDateObj = newVal;
|
325
|
-
this._detectValueChanges();
|
326
|
-
}
|
327
|
-
break;
|
328
337
|
}
|
329
|
-
|
330
|
-
|
331
|
-
if (this.
|
332
|
-
this._inputChars.push(e.key);
|
338
|
+
else if (this._inputChars.length == 1) {
|
339
|
+
const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
|
340
|
+
if (newStr > this._editingDateObj.month.totalDays) {
|
333
341
|
editing.typedValue = `0${e.key}`;
|
334
|
-
if (parseInt(e.key) > 3) {
|
335
|
-
this._clearInputBuffer();
|
336
|
-
next = true;
|
337
|
-
}
|
338
342
|
}
|
339
|
-
else
|
340
|
-
|
341
|
-
if (newStr > this._editingDateObj.month.totalDays) {
|
342
|
-
editing.typedValue = `0${e.key}`;
|
343
|
-
}
|
344
|
-
else {
|
345
|
-
editing.typedValue = newStr.toString();
|
346
|
-
}
|
347
|
-
this._clearInputBuffer();
|
348
|
-
next = true;
|
343
|
+
else {
|
344
|
+
editing.typedValue = newStr.toString();
|
349
345
|
}
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
346
|
+
this._clearInputBuffer();
|
347
|
+
next = true;
|
348
|
+
}
|
349
|
+
editing.typedValue =
|
350
|
+
editing.typedValue?.length === 1 ? '0' + editing.typedValue : editing.typedValue;
|
351
|
+
const nv = parseInt(editing.typedValue);
|
352
|
+
if (nv > 0) {
|
353
|
+
const newVal = this.editingDateObj.set(part.key, nv);
|
354
|
+
this._editingDateObj = newVal;
|
355
|
+
this._detectValueChanges();
|
356
|
+
}
|
357
|
+
break;
|
358
|
+
}
|
359
|
+
case 'hour': {
|
360
|
+
if (this._inputChars.length == 0) {
|
361
|
+
this._inputChars.push(e.key);
|
362
|
+
editing.typedValue = `0${e.key}`;
|
363
|
+
if (parseInt(e.key) > 2) {
|
364
|
+
next = true;
|
356
365
|
}
|
357
|
-
break;
|
358
366
|
}
|
359
|
-
|
360
|
-
|
361
|
-
if (
|
362
|
-
this._inputChars.push(e.key);
|
367
|
+
else if (this._inputChars.length == 1) {
|
368
|
+
const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
|
369
|
+
if (newStr > 23) {
|
363
370
|
editing.typedValue = `0${e.key}`;
|
364
|
-
if (parseInt(e.key) > 2) {
|
365
|
-
next = true;
|
366
|
-
}
|
367
371
|
}
|
368
|
-
else
|
369
|
-
|
370
|
-
if (newStr > 23) {
|
371
|
-
editing.typedValue = `0${e.key}`;
|
372
|
-
}
|
373
|
-
else {
|
374
|
-
editing.typedValue = newStr.toString();
|
375
|
-
}
|
376
|
-
next = true;
|
372
|
+
else {
|
373
|
+
editing.typedValue = newStr.toString();
|
377
374
|
}
|
378
|
-
|
379
|
-
const newVal = this.editingDateObj.set('hour', parseInt(editing.typedValue));
|
380
|
-
this._editingDateObj = newVal;
|
381
|
-
this._detectValueChanges();
|
382
|
-
break;
|
375
|
+
next = true;
|
383
376
|
}
|
377
|
+
editing.typedValue =
|
378
|
+
editing.typedValue?.length === 1 ? '0' + editing.typedValue : editing.typedValue;
|
379
|
+
const newVal = this.editingDateObj.set('hour', parseInt(editing.typedValue));
|
380
|
+
this._editingDateObj = newVal;
|
381
|
+
this._detectValueChanges();
|
382
|
+
break;
|
383
|
+
}
|
384
384
|
case 'minute':
|
385
385
|
case 'second':
|
386
386
|
if (this._inputChars.length == 0) {
|
@@ -402,7 +402,8 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
402
402
|
this._clearInputBuffer();
|
403
403
|
next = true;
|
404
404
|
}
|
405
|
-
editing.typedValue =
|
405
|
+
editing.typedValue =
|
406
|
+
editing.typedValue?.length === 1 ? '0' + editing.typedValue : editing.typedValue;
|
406
407
|
const newVal = this.editingDateObj.set(part.key, parseInt(editing.typedValue));
|
407
408
|
this._editingDateObj = newVal;
|
408
409
|
this._detectValueChanges();
|
@@ -433,7 +434,11 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
433
434
|
setTimeout(() => {
|
434
435
|
this._detectPartAtPosition();
|
435
436
|
}, 0);
|
436
|
-
|
437
|
+
this.onClick.emit({
|
438
|
+
component: this,
|
439
|
+
htmlElement: this.getHostElement(),
|
440
|
+
nativeEvent: e,
|
441
|
+
});
|
437
442
|
}
|
438
443
|
_detectPartAtPosition() {
|
439
444
|
const input = this.input.nativeElement;
|
@@ -443,16 +448,16 @@ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
443
448
|
const re = /[a-zA-Z0-9]+/gi;
|
444
449
|
const valueParts = Array.from(input.value.matchAll(re));
|
445
450
|
const orderedParts = this._getOrderedParts();
|
446
|
-
const index = valueParts.findIndex((c) => c.index <= sStart &&
|
451
|
+
const index = valueParts.findIndex((c) => c.index <= sStart && c.index + c[0].length >= sStart);
|
447
452
|
this.activePart = orderedParts[index].key;
|
448
453
|
this._highlightActivePart();
|
449
454
|
}
|
450
455
|
_highlightActivePart() {
|
451
|
-
const input = this.input
|
452
|
-
if (!input.value || !this.activePart)
|
456
|
+
const input = this.input?.nativeElement;
|
457
|
+
if (!input || !input.value || !this.activePart)
|
453
458
|
return;
|
454
459
|
const orderedParts = this._getOrderedParts();
|
455
|
-
const index = orderedParts.findIndex(c => c.key == this.activePart);
|
460
|
+
const index = orderedParts.findIndex((c) => c.key == this.activePart);
|
456
461
|
const re = /[a-zA-Z0-9]+/gi;
|
457
462
|
const valueParts = Array.from(input.value.matchAll(re));
|
458
463
|
const { start, end } = AXStringUtil.getWordBoundsAtPosition(input.value, valueParts[index]?.index);
|
@@ -510,13 +515,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.9", ngImpor
|
|
510
515
|
type: Input
|
511
516
|
}], formatChange: [{
|
512
517
|
type: Output
|
518
|
+
}], onClick: [{
|
519
|
+
type: Output
|
513
520
|
}], format: [{
|
514
521
|
type: Input
|
515
522
|
}], _handleOnKeydownEvent: [{
|
516
523
|
type: HostListener,
|
517
|
-
args: [
|
524
|
+
args: ['keydown', ['$event']]
|
518
525
|
}], _handleKeyUpEvent: [{
|
519
526
|
type: HostListener,
|
520
|
-
args: [
|
527
|
+
args: ['keyup', ['$event']]
|
521
528
|
}] } });
|
522
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lLWlucHV0L3NyYy9saWIvZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lLWlucHV0L3NyYy9saWIvZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVLLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwSixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUF5RCxNQUFNLHVCQUF1QixDQUFDO0FBQ2pILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFrQ25ELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSx5QkFBK0I7SUE3QjdFOztRQStCWSxvQkFBZSxHQUFzQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUUvRCxrQkFBYSxHQUFvQjtZQUNyQyxJQUFJLEVBQUU7Z0JBQ0YsR0FBRyxFQUFFLE1BQU07Z0JBQ1gsV0FBVyxFQUFFLE1BQU07Z0JBQ25CLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztnQkFDMUMsT0FBTyxFQUFFLEtBQUs7Z0JB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QkFDUixTQUFTO3dCQUNULFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7cUJBQ25CLGFBQ1U7d0JBQ1AsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsMEJBQTBCLEVBQUU7d0JBQy9ELEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsMEJBQTBCLEVBQUU7d0JBQ3hFLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsMEJBQTBCLEVBQUU7d0JBQ3ZFLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsMEJBQTBCLEVBQUU7d0JBQ3hFOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDOzRCQUN2RCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjs4QkFzRVUsSUFBSTtzQkFEZCxLQUFLO2dCQStCTixLQUFLO3NCQURKLFNBQVM7dUJBQUMsT0FBTztnQkFJbEIsTUFBTTtzQkFETCxTQUFTO3VCQUFDLFFBQVE7Z0JBS1IsUUFBUTtzQkFEbEIsS0FBSztnQkFVSyxRQUFRO3NCQURsQixLQUFLO2dCQVNOLFlBQVk7c0JBRFgsTUFBTTtnQkFLSSxNQUFNO3NCQURoQixLQUFLO2dCQStGTixxQkFBcUI7c0JBRHBCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXFPbkMsaUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBmb3J3YXJkUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYQ2xlYXJhYmxlQ29tcG9uZW50LCBBWENvbXBvbmVudCwgQVhGb2N1c2FibGVDb21wb25lbnQsIEFYVmFsdWFibGVDb21wb25lbnQsIE1YSW5wdXRCYXNlVmFsdWVDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IEFYU3RyaW5nVXRpbCB9IGZyb20gJ0BhY29yZXgvY29yZS91dGlscyc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSwgVGltZVVuaXQsIEFYRGF0ZVRpbWVQYXJ0LCBBWERhdGVUaW1lUGFydHMgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZVRpbWUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cblxuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXgtZGF0ZXRpbWUtaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRldGltZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBpbnB1dHM6IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAndGFiSW5kZXgnLCAncGxhY2Vob2xkZXInLCAndmFsdWUnLCAnc3RhdGUnLCAnbmFtZScsICdpZCddLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdheC1lZGl0b3ItaW5wdXQnIH0sXG4gICAgb3V0cHV0czogW1xuICAgICAgICAndmFsdWVDaGFuZ2UnLFxuICAgICAgICAnc3RhdGVDaGFuZ2UnLFxuICAgICAgICAnb25WYWx1ZUNoYW5nZWQnLFxuICAgICAgICAnb25CbHVyJyxcbiAgICAgICAgJ29uRm9jdXMnLFxuICAgICAgICAnb25DbGljaycsXG4gICAgICAgICdyZWFkb25seUNoYW5nZScsXG4gICAgICAgICdkaXNhYmxlZENoYW5nZScsXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYRGF0ZVRpbWVJbnB1dENvbXBvbmVudCB9LFxuICAgICAgICB7IHByb3ZpZGU6IEFYRm9jdXNhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZUlucHV0Q29tcG9uZW50IH0sXG4gICAgICAgIHsgcHJvdmlkZTogQVhWYWx1YWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYRGF0ZVRpbWVJbnB1dENvbXBvbmVudCB9LFxuICAgICAgICB7IHByb3ZpZGU6IEFYQ2xlYXJhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZUlucHV0Q29tcG9uZW50IH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQVhEYXRlVGltZUlucHV0Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYRGF0ZVRpbWVJbnB1dENvbXBvbmVudCBleHRlbmRzIE1YSW5wdXRCYXNlVmFsdWVDb21wb25lbnQ8RGF0ZT4ge1xuXG4gICAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2U6IEFYQ2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcblxuICAgIHByaXZhdGUgX2VkaXRpbmdQYXJ0czogQVhEYXRlVGltZVBhcnRzID0ge1xuICAgICAgICB5ZWFyOiB7XG4gICAgICAgICAgICBrZXk6IFwieWVhclwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwieXl5eVwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJzOiBbXCJZWVwiLCBcInl5XCIsIFwiWVlZWVwiLCBcInl5eXlcIl0sXG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IDIwMjMsXG4gICAgICAgICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLmVkaXRpbmdEYXRlT2JqLmZvcm1hdCh0aGlzLl9lZGl0aW5nUGFydHMueWVhci5wbGFjZWhvbGRlcilcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGg6IHtcbiAgICAgICAgICAgIGtleTogXCJtb250aFwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiTU1cIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyczogW1wiTU1NXCIsIFwiTU1NTVwiLCBcIk1NXCIsIFwiTVwiXSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgICAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICAgICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuZWRpdGluZ0RhdGVPYmouZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0cy5tb250aC5wbGFjZWhvbGRlcilcbiAgICAgICAgfSxcbiAgICAgICAgZGF5OiB7XG4gICAgICAgICAgICBrZXk6IFwiZGF5XCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJkZFwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJzOiBbXCJkZFwiLCBcImRcIiwgXCJEREREXCIsIFwiZGRkXCJdLFxuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgICAgICAgdHlwZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgICAgIHJlYWxWYWx1ZTogKCkgPT4gdGhpcy5lZGl0aW5nRGF0ZU9iai5mb3JtYXQodGhpcy5fZWRpdGluZ1BhcnRzLmRheS5wbGFjZWhvbGRlcilcbiAgICAgICAgfSxcbiAgICAgICAgaG91cjoge1xuICAgICAgICAgICAga2V5OiBcImhvdXJcIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkhIXCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcnM6IFtcIkhIXCIsIFwiSFwiLCBcImhoXCIsIFwiaFwiXSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgICAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICAgICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuZWRpdGluZ0RhdGVPYmouZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0cy5ob3VyLnBsYWNlaG9sZGVyKVxuICAgICAgICB9LFxuICAgICAgICBtaW51dGU6IHtcbiAgICAgICAgICAgIGtleTogXCJtaW51dGVcIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIm1tXCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcnM6IFtcIm1tXCIsIFwibVwiXSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgICAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICAgICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuZWRpdGluZ0RhdGVPYmouZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0cy5taW51dGUucGxhY2Vob2xkZXIpXG4gICAgICAgIH0sXG4gICAgICAgIHNlY29uZDoge1xuICAgICAgICAgICAga2V5OiBcInNlY29uZFwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwic3NcIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyczogW1wic3NcIiwgXCJzXCJdLFxuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgICAgICAgdHlwZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgICAgIHJlYWxWYWx1ZTogKCkgPT4gdGhpcy5lZGl0aW5nRGF0ZU9iai5mb3JtYXQodGhpcy5fZWRpdGluZ1BhcnRzLnNlY29uZC5wbGFjZWhvbGRlcilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZWRpdGluZ1RleHQ6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2lucHV0Q2hhcnM6IHN0cmluZ1tdID0gW107XG5cblxuICAgIHByaXZhdGUgX3R5cGU6IHN0cmluZyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyLm5hbWUoKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlIHx8IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyLm5hbWUoKTtcbiAgICB9XG4gICAgcHVibGljIHNldCB0eXBlKHY6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldE9wdGlvbih7XG4gICAgICAgICAgICBuYW1lOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgIGFmdGVyQ2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBfYWN0aXZlUGFydCA9ICdob3VyJztcbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZVBhcnQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhcnQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgYWN0aXZlUGFydCh2OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlUGFydCA9IHY7XG4gICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lZGl0aW5nRGF0ZU9iajogQVhEYXRlVGltZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLm5vdyh0aGlzLnR5cGUpO1xuICAgIHByaXZhdGUgZ2V0IGVkaXRpbmdEYXRlT2JqKCk6IEFYRGF0ZVRpbWUge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdGluZ0RhdGVPYmo7XG4gICAgfVxuXG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dCcpXG4gICAgaW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dDInKVxuICAgIGlucHV0MjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIHByaXZhdGUgX21pblZhbHVlOiBEYXRlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBtaW5WYWx1ZSgpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pblZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IG1pblZhbHVlKHY6IERhdGUpIHtcbiAgICAgICAgdGhpcy5fbWluVmFsdWUgPSB2O1xuICAgIH1cblxuICAgIHByaXZhdGUgX21heFZhbHVlOiBEYXRlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBtYXhWYWx1ZSgpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heFZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IG1heFZhbHVlKHY6IERhdGUpIHtcbiAgICAgICAgdGhpcy5fbWF4VmFsdWUgPSB2O1xuICAgIH1cblxuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1hdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSBfZm9ybWF0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY2FsZW5kYXIuZm9ybWF0cy5kYXRlVGltZUlucHV0O1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBmb3JtYXQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcbiAgICB9XG4gICAgcHVibGljIHNldCBmb3JtYXQodjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKHtcbiAgICAgICAgICAgIG5hbWU6ICdmb3JtYXQnLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICBhZnRlckNhbGxiYWNrOiAobywgbikgPT4ge1xuICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXRQYXJ0cyA9IG4uc3BsaXQoL1teYS16QS1aXSsvKTtcbiAgICAgICAgICAgICAgICBmb3JtYXRQYXJ0cy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5maW5kKGMgPT4gYy5wbGFjZWhvbGRlcnMuc29tZShkID0+IGQgPT0gZikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQucGxhY2Vob2xkZXIgPSBmO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgX2dldE9yZGVyZWRQYXJ0cygpOiBBWERhdGVUaW1lUGFydFtdIHtcbiAgICAgICAgLy8gVE9ETzogYmV0dGVyIHNwbGl0ZXIgZm9ybWF0XG4gICAgICAgIGNvbnN0IGZvcm1hdFBhcnRzID0gdGhpcy5mb3JtYXQuc3BsaXQoL1teYS16QS1aXSsvKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBBWERhdGVUaW1lUGFydFtdID0gW107XG4gICAgICAgIGZvcm1hdFBhcnRzLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5maW5kKGMgPT4gYy5wbGFjZWhvbGRlcnMuc29tZShkID0+IGQgPT0gZikpO1xuICAgICAgICAgICAgaWYgKGZvdW5kICYmIGZvdW5kLmVuYWJsZWQpXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZm91bmQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jbGVhcklucHV0QnVmZmVyKCkge1xuICAgICAgICB0aGlzLl9pbnB1dENoYXJzID0gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlVGV4dCgpIHtcbiAgICAgICAgbGV0IHRleHQgPSB0aGlzLmZvcm1hdDtcbiAgICAgICAgLy9cbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9lZGl0aW5nUGFydHMpLmZvckVhY2gocGFydCA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVQYXJ0ID09IHBhcnQua2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQudHlwZWRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShwYXJ0LnBsYWNlaG9sZGVyLCBwYXJ0LnR5cGVkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQudHlwZWRWYWx1ZSAhPSBwYXJ0LnBsYWNlaG9sZGVyICYmIHBhcnQudHlwZWRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocGFydC5wbGFjZWhvbGRlciwgcGFydC5yZWFsVmFsdWUoKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2VkaXRpbmdUZXh0ID0gdGV4dCA9PSB0aGlzLmZvcm1hdCA/ICcnIDogdGV4dDtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlUGFydCkge1xuICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbnRlcm5hbFNldFZhbHVlKHZhbHVlPzogRGF0ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBlZGl0aW5nRGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh2YWx1ZSwgdGhpcy50eXBlKTtcbiAgICAgICAgICAgIGxldCBhcHBseUNoYW5nZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcGFydC5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRpbmdEYXRlID0gZWRpdGluZ0RhdGUuc2V0KHBhcnQua2V5IGFzIFRpbWVVbml0LCBwYXJ0LmRlZmF1bHQpO1xuICAgICAgICAgICAgICAgICAgICBhcHBseUNoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFwcGx5Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBlZGl0aW5nRGF0ZS5kYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbnRlcm5hbFZhbHVlQ2hhbmdlZCh2YWx1ZT86IERhdGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh2YWx1ZSwgdGhpcy50eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuX2VkaXRpbmdQYXJ0cykuZm9yRWFjaChwYXJ0ID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0LnR5cGVkVmFsdWUgIT0gcGFydC5wbGFjZWhvbGRlcilcbiAgICAgICAgICAgICAgICAgICAgcGFydC50eXBlZFZhbHVlID0gcGFydC5yZWFsVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXJ0LnR5cGVkVmFsdWUgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duXCIsIFtcIiRldmVudFwiXSlcbiAgICBfaGFuZGxlT25LZXlkb3duRXZlbnQoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBpZ25vcmUgPSAoKSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgLy9cbiAgICAgICAgY29uc3Qgb3JkZXJlZFBhcnRzID0gdGhpcy5fZ2V0T3JkZXJlZFBhcnRzKCk7XG4gICAgICAgIGNvbnN0IHBhcnQgPSB0aGlzLmFjdGl2ZVBhcnQgPyB0aGlzLl9lZGl0aW5nUGFydHNbdGhpcy5hY3RpdmVQYXJ0XSA6IG9yZGVyZWRQYXJ0c1swXTtcbiAgICAgICAgY29uc3QgbmV4dFBhcnQgPSBwYXJ0ID8gb3JkZXJlZFBhcnRzW29yZGVyZWRQYXJ0cy5pbmRleE9mKHBhcnQpICsgMV0gOiBudWxsO1xuICAgICAgICBjb25zdCBwcmV2UGFydCA9IHBhcnQgPyBvcmRlcmVkUGFydHNbb3JkZXJlZFBhcnRzLmluZGV4T2YocGFydCkgLSAxXSA6IG51bGw7XG4gICAgICAgIC8vXG4gICAgICAgIGNvbnN0IGdvTmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgIGlmIChuZXh0UGFydCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUGFydCA9IG5leHRQYXJ0LmtleTtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRBY3RpdmVQYXJ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdvUHJldiA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgIGlmIChwcmV2UGFydCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUGFydCA9IHByZXZQYXJ0LmtleTtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRBY3RpdmVQYXJ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBMZWZ0IGFuZCBSaWdodCAgKioqKioqKioqKioqKiovXG4gICAgICAgIGlmIChlLmNvZGUgPT09ICdBcnJvd1JpZ2h0JyB8fCBlLmNvZGUgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgICBpZ25vcmUoKTtcbiAgICAgICAgICAgIGUuY29kZSA9PT0gJ0Fycm93UmlnaHQnID8gZ29OZXh0KCkgOiBnb1ByZXYoKTtcbiAgICAgICAgfVxuICAgICAgICAvKioqKioqKioqKioqKioqICBIYW5kbGUgVXAgYW5kIERvd24gICoqKioqKioqKioqKioqL1xuICAgICAgICBlbHNlIGlmICgoZS5jb2RlID09PSAnQXJyb3dVcCcgfHwgZS5jb2RlID09PSAnQXJyb3dEb3duJykgJiYgIWUuY3RybEtleSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ24gPSBlLmNvZGUgPT09ICdBcnJvd1VwJyA/ICsxIDogLTE7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQYXJ0ID0gcGFydC5rZXk7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1ZhbDogQVhEYXRlVGltZSA9IHRoaXMuZWRpdGluZ0RhdGVPYmouYWRkKHBhcnQua2V5LCBzaWduKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGl0aW5nUGFydHNbcGFydC5rZXldLnR5cGVkVmFsdWUgPSBuZXdWYWwuZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0c1twYXJ0LmtleV0ucGxhY2Vob2xkZXIpXG4gICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGV0ZWN0VmFsdWVDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqKioqKioqKioqKioqKiAgSGFuZGxlIEJhY2tzcGFjZSAgKioqKioqKioqKioqKiovXG4gICAgICAgIGVsc2UgaWYgKGUuY29kZSA9PSAnQmFja3NwYWNlJyB8fCBlLmNvZGUgPT0gJ0RlbGV0ZScpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZ25vcmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGl0aW5nUGFydHNbcGFydC5rZXldLnR5cGVkVmFsdWUgPSB0aGlzLl9lZGl0aW5nUGFydHNbcGFydC5rZXldLnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RldGVjdFZhbHVlQ2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIGdvUHJldigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBCYWNrc3BhY2UgICoqKioqKioqKioqKioqL1xuICAgICAgICBlbHNlIGlmIChlLmNvZGUgPT0gJ1RhYicgfHwgZS5jb2RlID09ICdTcGFjZScpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghZS5zaGlmdEtleSAmJiBuZXh0UGFydCkge1xuICAgICAgICAgICAgICAgICAgICBpZ25vcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZ29OZXh0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLnNoaWZ0S2V5ICYmIHByZXZQYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgICAgICAgICAgICBnb1ByZXYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZS5rZXk/LnRyaW0oKSAmJiAhaXNOYU4oTnVtYmVyKGUua2V5KSkpIHtcbiAgICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBuZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBlZGl0aW5nID0gdGhpcy5fZWRpdGluZ1BhcnRzW3BhcnQua2V5XTtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBzd2l0Y2ggKHBhcnQua2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0aW5nLnBsYWNlaG9sZGVyLmxlbmd0aCA9PSAyICYmIHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dENoYXJzLnB1c2goLi4udGhpcy5jYWxlbmRhclNlcnZpY2Uubm93KHRoaXMudHlwZSkuZm9ybWF0KCd5eXl5Jykuc3Vic3RyaW5nKDAsIDIpLnNwbGl0KCcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPCA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYCR7dGhpcy5faW5wdXRDaGFycy5qb2luKCcnKX0ke2Uua2V5fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSAoJzAwMDAnICsgZWRpdGluZy50eXBlZFZhbHVlKS5zbGljZSgtNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBudiA9IHBhcnNlSW50KGVkaXRpbmcudHlwZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChudiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuZWRpdGluZ0RhdGVPYmouc2V0KCd5ZWFyJywgbnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGAwJHtlLmtleX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0ciA9IHBhcnNlSW50KGAke3RoaXMuX2lucHV0Q2hhcnNbMF19JHtlLmtleX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3U3RyID4gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYDAke2Uua2V5fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBuZXdTdHIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJJbnB1dEJ1ZmZlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gZWRpdGluZy50eXBlZFZhbHVlPy5sZW5ndGggPT09IDEgPyBcIjBcIiArIGVkaXRpbmcudHlwZWRWYWx1ZSA6IGVkaXRpbmcudHlwZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG52ID0gcGFyc2VJbnQoZWRpdGluZy50eXBlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLmVkaXRpbmdEYXRlT2JqLnNldChwYXJ0LmtleSwgbnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRpbmdEYXRlT2JqID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RldGVjdFZhbHVlQ2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0Q2hhcnMucHVzaChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpID4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdTdHIgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0ciA+IHRoaXMuX2VkaXRpbmdEYXRlT2JqLm1vbnRoLnRvdGFsRGF5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IG5ld1N0ci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBlZGl0aW5nLnR5cGVkVmFsdWU/Lmxlbmd0aCA9PT0gMSA/IFwiMFwiICsgZWRpdGluZy50eXBlZFZhbHVlIDogZWRpdGluZy50eXBlZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnYgPSBwYXJzZUludChlZGl0aW5nLnR5cGVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG52ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuZWRpdGluZ0RhdGVPYmouc2V0KHBhcnQua2V5LCBudik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV0ZWN0VmFsdWVDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0Q2hhcnMucHVzaChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3U3RyID0gcGFyc2VJbnQoYCR7dGhpcy5faW5wdXRDaGFyc1swXX0ke2Uua2V5fWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdTdHIgPiAyMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IG5ld1N0ci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGVkaXRpbmcudHlwZWRWYWx1ZT8ubGVuZ3RoID09PSAxID8gXCIwXCIgKyBlZGl0aW5nLnR5cGVkVmFsdWUgOiBlZGl0aW5nLnR5cGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLmVkaXRpbmdEYXRlT2JqLnNldCgnaG91cicsIHBhcnNlSW50KGVkaXRpbmcudHlwZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYDAke2Uua2V5fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpID4gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdTdHIgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3U3RyID4gNTkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IG5ld1N0ci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJJbnB1dEJ1ZmZlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gZWRpdGluZy50eXBlZFZhbHVlPy5sZW5ndGggPT09IDEgPyBcIjBcIiArIGVkaXRpbmcudHlwZWRWYWx1ZSA6IGVkaXRpbmcudHlwZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsID0gdGhpcy5lZGl0aW5nRGF0ZU9iai5zZXQocGFydC5rZXksIHBhcnNlSW50KGVkaXRpbmcudHlwZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IG5ld1ZhbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV0ZWN0VmFsdWVDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgIGdvTmV4dCgpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKioqKioqKioqKioqKiogIEVtaXQgRXZlbnQgICoqKioqKioqKioqKioqL1xuICAgICAgICBzdXBlci5lbWl0T25LZXlkb3duRXZlbnQoZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcImtleXVwXCIsIFtcIiRldmVudFwiXSlcbiAgICBfaGFuZGxlS2V5VXBFdmVudChlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVBhcnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVGb2N1c0V2ZW50KGU6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgLy90aGlzLl9oaWdobGlnaHRBY3RpdmVQYXJ0KCk7XG4gICAgICAgIHN1cGVyLmVtaXRPbkZvY3VzRXZlbnQoZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVCbHVyRXZlbnQoZTogRm9jdXNFdmVudCkge1xuICAgICAgICBzdXBlci5lbWl0T25CbHVyRXZlbnQoZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVPbklucHV0Q2xpY2tFdmVudChlOiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZGV0ZWN0UGFydEF0UG9zaXRpb24oKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICAgIHN1cGVyLmVtaXRPbkNsaWNrRXZlbnQoZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGV0ZWN0UGFydEF0UG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoIWlucHV0LnZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzU3RhcnQgPSBpbnB1dC5zZWxlY3Rpb25FbmQgfHwgMDtcbiAgICAgICAgY29uc3QgcmUgPSAvW2EtekEtWjAtOV0rL2dpO1xuICAgICAgICBjb25zdCB2YWx1ZVBhcnRzID0gQXJyYXkuZnJvbShpbnB1dC52YWx1ZS5tYXRjaEFsbChyZSkpO1xuICAgICAgICBjb25zdCBvcmRlcmVkUGFydHMgPSB0aGlzLl9nZXRPcmRlcmVkUGFydHMoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB2YWx1ZVBhcnRzLmZpbmRJbmRleCgoYzogYW55KSA9PiBjLmluZGV4IDw9IHNTdGFydCAmJiAoYy5pbmRleCArIGNbMF0ubGVuZ3RoKSA+PSBzU3RhcnQpO1xuICAgICAgICB0aGlzLmFjdGl2ZVBhcnQgPSBvcmRlcmVkUGFydHNbaW5kZXhdLmtleTtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoIWlucHV0LnZhbHVlIHx8ICF0aGlzLmFjdGl2ZVBhcnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG9yZGVyZWRQYXJ0cyA9IHRoaXMuX2dldE9yZGVyZWRQYXJ0cygpO1xuICAgICAgICBjb25zdCBpbmRleCA9IG9yZGVyZWRQYXJ0cy5maW5kSW5kZXgoYyA9PiBjLmtleSA9PSB0aGlzLmFjdGl2ZVBhcnQpO1xuICAgICAgICBjb25zdCByZSA9IC9bYS16QS1aMC05XSsvZ2k7XG4gICAgICAgIGNvbnN0IHZhbHVlUGFydHMgPSBBcnJheS5mcm9tKGlucHV0LnZhbHVlLm1hdGNoQWxsKHJlKSk7XG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gQVhTdHJpbmdVdGlsLmdldFdvcmRCb3VuZHNBdFBvc2l0aW9uKFxuICAgICAgICAgICAgaW5wdXQudmFsdWUsIHZhbHVlUGFydHNbaW5kZXhdPy5pbmRleFxuICAgICAgICApO1xuICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kZXRlY3RWYWx1ZUNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuY29tbWl0VmFsdWUodGhpcy5fZWRpdGluZ0RhdGVPYmouZGF0ZSwgdHJ1ZSk7XG4gICAgfVxufVxuIiwiPGlucHV0ICNpbnB1dCBpZD1cImlucHV0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgYXV0b2NvcnJlY3Q9XCJvZmZcIiBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGNsYXNzPVwiYXgtaW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCIgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5heC1zdGF0ZS1yZWFkb25seV09XCJyZWFkb25seVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtyZWFkb25seV09XCJ0cnVlXCIgW25nTW9kZWxdPVwiX2VkaXRpbmdUZXh0XCJcbiAgICAobW91c2V1cCk9XCJfaGFuZGxlT25JbnB1dENsaWNrRXZlbnQoJGV2ZW50KVwiIChibHVyKT1cIl9oYW5kbGVCbHVyRXZlbnQoJGV2ZW50KVwiIChmb2N1cyk9XCJfaGFuZGxlRm9jdXNFdmVudCgkZXZlbnQpXCI+XG48bmctY29udGVudCBzZWxlY3Q9XCJheC12YWxpZGF0aW9uLXJ1bGVcIj5cbjwvbmctY29udGVudD4iXX0=
|
529
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lLWlucHV0L3NyYy9saWIvZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lLWlucHV0L3NyYy9saWIvZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUVwQixXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix5QkFBeUIsR0FDMUIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsaUJBQWlCLEdBS2xCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUErQm5ELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSx5QkFBK0I7SUE3QjdFOztRQThCVSxvQkFBZSxHQUFzQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUUvRCxrQkFBYSxHQUFvQjtZQUN2QyxJQUFJLEVBQUU7Z0JBQ0osR0FBRyxFQUFFLE1BQU07Z0JBQ1gsV0FBVyxFQUFFLE1BQU07Z0JBQ25CLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztnQkFDMUMsT0FBTyxFQUFFLEtB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QUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBWENsZWFyYWJsZUNvbXBvbmVudCxcbiAgQVhDbGlja0V2ZW50LFxuICBBWENvbXBvbmVudCxcbiAgQVhGb2N1c2FibGVDb21wb25lbnQsXG4gIEFYVmFsdWFibGVDb21wb25lbnQsXG4gIE1YSW5wdXRCYXNlVmFsdWVDb21wb25lbnQsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHtcbiAgQVhDYWxlbmRhclNlcnZpY2UsXG4gIEFYRGF0ZVRpbWUsXG4gIEFYRGF0ZVRpbWVQYXJ0LFxuICBBWERhdGVUaW1lUGFydHMsXG4gIFRpbWVVbml0LFxufSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZVRpbWUnO1xuaW1wb3J0IHsgQVhTdHJpbmdVdGlsIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWRhdGV0aW1lLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGV0aW1lLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGlucHV0czogWydkaXNhYmxlZCcsICdyZWFkb25seScsICd0YWJJbmRleCcsICdwbGFjZWhvbGRlcicsICd2YWx1ZScsICdzdGF0ZScsICduYW1lJywgJ2lkJ10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdheC1lZGl0b3ItaW5wdXQnIH0sXG4gIG91dHB1dHM6IFtcbiAgICAndmFsdWVDaGFuZ2UnLFxuICAgICdzdGF0ZUNoYW5nZScsXG4gICAgJ29uVmFsdWVDaGFuZ2VkJyxcbiAgICAnb25CbHVyJyxcbiAgICAnb25Gb2N1cycsXG4gICAgJ29uQ2xpY2snLFxuICAgICdyZWFkb25seUNoYW5nZScsXG4gICAgJ2Rpc2FibGVkQ2hhbmdlJyxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYRGF0ZVRpbWVJbnB1dENvbXBvbmVudCB9LFxuICAgIHsgcHJvdmlkZTogQVhGb2N1c2FibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWERhdGVUaW1lSW5wdXRDb21wb25lbnQgfSxcbiAgICB7IHByb3ZpZGU6IEFYVmFsdWFibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWERhdGVUaW1lSW5wdXRDb21wb25lbnQgfSxcbiAgICB7IHByb3ZpZGU6IEFYQ2xlYXJhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZUlucHV0Q29tcG9uZW50IH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBWERhdGVUaW1lSW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhEYXRlVGltZUlucHV0Q29tcG9uZW50IGV4dGVuZHMgTVhJbnB1dEJhc2VWYWx1ZUNvbXBvbmVudDxEYXRlPiB7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlOiBBWENhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG5cbiAgcHJpdmF0ZSBfZWRpdGluZ1BhcnRzOiBBWERhdGVUaW1lUGFydHMgPSB7XG4gICAgeWVhcjoge1xuICAgICAga2V5OiAneWVhcicsXG4gICAgICBwbGFjZWhvbGRlcjogJ3l5eXknLFxuICAgICAgcGxhY2Vob2xkZXJzOiBbJ1lZJywgJ3l5JywgJ1lZWVknLCAneXl5eSddLFxuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiAyMDIzLFxuICAgICAgdHlwZWRWYWx1ZTogbnVsbCxcbiAgICAgIHJlYWxWYWx1ZTogKCkgPT4gdGhpcy5lZGl0aW5nRGF0ZU9iai5mb3JtYXQodGhpcy5fZWRpdGluZ1BhcnRzLnllYXIucGxhY2Vob2xkZXIpLFxuICAgIH0sXG4gICAgbW9udGg6IHtcbiAgICAgIGtleTogJ21vbnRoJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnTU0nLFxuICAgICAgcGxhY2Vob2xkZXJzOiBbJ01NTScsICdNTU1NJywgJ01NJywgJ00nXSxcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogMSxcbiAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuZWRpdGluZ0RhdGVPYmouZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0cy5tb250aC5wbGFjZWhvbGRlciksXG4gICAgfSxcbiAgICBkYXk6IHtcbiAgICAgIGtleTogJ2RheScsXG4gICAgICBwbGFjZWhvbGRlcjogJ2RkJyxcbiAgICAgIHBsYWNlaG9sZGVyczogWydkZCcsICdkJywgJ0REREQnLCAnZGRkJ10sXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLmVkaXRpbmdEYXRlT2JqLmZvcm1hdCh0aGlzLl9lZGl0aW5nUGFydHMuZGF5LnBsYWNlaG9sZGVyKSxcbiAgICB9LFxuICAgIGhvdXI6IHtcbiAgICAgIGtleTogJ2hvdXInLFxuICAgICAgcGxhY2Vob2xkZXI6ICdISCcsXG4gICAgICBwbGFjZWhvbGRlcnM6IFsnSEgnLCAnSCcsICdoaCcsICdoJ10sXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLmVkaXRpbmdEYXRlT2JqLmZvcm1hdCh0aGlzLl9lZGl0aW5nUGFydHMuaG91ci5wbGFjZWhvbGRlciksXG4gICAgfSxcbiAgICBtaW51dGU6IHtcbiAgICAgIGtleTogJ21pbnV0ZScsXG4gICAgICBwbGFjZWhvbGRlcjogJ21tJyxcbiAgICAgIHBsYWNlaG9sZGVyczogWydtbScsICdtJ10sXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLmVkaXRpbmdEYXRlT2JqLmZvcm1hdCh0aGlzLl9lZGl0aW5nUGFydHMubWludXRlLnBsYWNlaG9sZGVyKSxcbiAgICB9LFxuICAgIHNlY29uZDoge1xuICAgICAga2V5OiAnc2Vjb25kJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnc3MnLFxuICAgICAgcGxhY2Vob2xkZXJzOiBbJ3NzJywgJ3MnXSxcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogMCxcbiAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuZWRpdGluZ0RhdGVPYmouZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0cy5zZWNvbmQucGxhY2Vob2xkZXIpLFxuICAgIH0sXG4gIH07XG5cbiAgcHJvdGVjdGVkIF9lZGl0aW5nVGV4dDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2lucHV0Q2hhcnM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJpdmF0ZSBfdHlwZTogc3RyaW5nID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY2FsZW5kYXIubmFtZSgpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eXBlIHx8IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyLm5hbWUoKTtcbiAgfVxuICBwdWJsaWMgc2V0IHR5cGUodjogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRPcHRpb24oe1xuICAgICAgbmFtZTogJ3R5cGUnLFxuICAgICAgdmFsdWU6IHYsXG4gICAgICBhZnRlckNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2FjdGl2ZVBhcnQgPSAnaG91cic7XG4gIHB1YmxpYyBnZXQgYWN0aXZlUGFydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYXJ0O1xuICB9XG4gIHB1YmxpYyBzZXQgYWN0aXZlUGFydCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hY3RpdmVQYXJ0ID0gdjtcbiAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gIH1cblxuICBwcml2YXRlIF9lZGl0aW5nRGF0ZU9iajogQVhEYXRlVGltZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLm5vdyh0aGlzLnR5cGUpO1xuICBwcml2YXRlIGdldCBlZGl0aW5nRGF0ZU9iaigpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdGluZ0RhdGVPYmo7XG4gIH1cblxuICBAVmlld0NoaWxkKCdpbnB1dCcpXG4gIGlucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0MicpXG4gIGlucHV0MjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBwcml2YXRlIF9taW5WYWx1ZTogRGF0ZTtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBtaW5WYWx1ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbWluVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBtaW5WYWx1ZSh2OiBEYXRlKSB7XG4gICAgdGhpcy5fbWluVmFsdWUgPSB2O1xuICB9XG5cbiAgcHJpdmF0ZSBfbWF4VmFsdWU6IERhdGU7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgbWF4VmFsdWUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX21heFZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VmFsdWUodjogRGF0ZSkge1xuICAgIHRoaXMuX21heFZhbHVlID0gdjtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBmb3JtYXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAT3V0cHV0KClcbiAgb25DbGljazogRXZlbnRFbWl0dGVyPEFYQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYQ2xpY2tFdmVudD4oKTtcblxuICBwcml2YXRlIF9mb3JtYXQgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jYWxlbmRhci5mb3JtYXRzLmRhdGVUaW1lSW5wdXQ7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcbiAgfVxuICBwdWJsaWMgc2V0IGZvcm1hdCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldE9wdGlvbih7XG4gICAgICBuYW1lOiAnZm9ybWF0JyxcbiAgICAgIHZhbHVlOiB2LFxuICAgICAgYWZ0ZXJDYWxsYmFjazogKG8sIG4pID0+IHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9lZGl0aW5nUGFydHMpLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICBlLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGZvcm1hdFBhcnRzID0gbi5zcGxpdCgvW15hLXpBLVpdKy8pO1xuICAgICAgICBmb3JtYXRQYXJ0cy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSBPYmplY3QudmFsdWVzKHRoaXMuX2VkaXRpbmdQYXJ0cykuZmluZCgoYykgPT4gYy5wbGFjZWhvbGRlcnMuc29tZSgoZCkgPT4gZCA9PSBmKSk7XG4gICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICBmb3VuZC5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvdW5kLnBsYWNlaG9sZGVyID0gZjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE9yZGVyZWRQYXJ0cygpOiBBWERhdGVUaW1lUGFydFtdIHtcbiAgICAvLyBUT0RPOiBiZXR0ZXIgc3BsaXRlciBmb3JtYXRcbiAgICBjb25zdCBmb3JtYXRQYXJ0cyA9IHRoaXMuZm9ybWF0LnNwbGl0KC9bXmEtekEtWl0rLyk7XG4gICAgY29uc3QgcmVzdWx0OiBBWERhdGVUaW1lUGFydFtdID0gW107XG4gICAgZm9ybWF0UGFydHMuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgY29uc3QgZm91bmQgPSBPYmplY3QudmFsdWVzKHRoaXMuX2VkaXRpbmdQYXJ0cykuZmluZCgoYykgPT4gYy5wbGFjZWhvbGRlcnMuc29tZSgoZCkgPT4gZCA9PSBmKSk7XG4gICAgICBpZiAoZm91bmQgJiYgZm91bmQuZW5hYmxlZCkgcmVzdWx0LnB1c2goZm91bmQpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIF9jbGVhcklucHV0QnVmZmVyKCkge1xuICAgIHRoaXMuX2lucHV0Q2hhcnMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVRleHQoKSB7XG4gICAgbGV0IHRleHQgPSB0aGlzLmZvcm1hdDtcbiAgICAvL1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgICBpZiAodGhpcy5hY3RpdmVQYXJ0ID09IHBhcnQua2V5KSB7XG4gICAgICAgIGlmIChwYXJ0LnR5cGVkVmFsdWUpIHRleHQgPSB0ZXh0LnJlcGxhY2UocGFydC5wbGFjZWhvbGRlciwgcGFydC50eXBlZFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwYXJ0LnR5cGVkVmFsdWUgIT0gcGFydC5wbGFjZWhvbGRlciAmJiBwYXJ0LnR5cGVkVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocGFydC5wbGFjZWhvbGRlciwgcGFydC5yZWFsVmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9lZGl0aW5nVGV4dCA9IHRleHQgPT0gdGhpcy5mb3JtYXQgPyAnJyA6IHRleHQ7XG4gICAgaWYgKHRoaXMuYWN0aXZlUGFydCkge1xuICAgICAgdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGludGVybmFsU2V0VmFsdWUodmFsdWU/OiBEYXRlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBsZXQgZWRpdGluZ0RhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodmFsdWUsIHRoaXMudHlwZSk7XG4gICAgICBsZXQgYXBwbHlDaGFuZ2VzID0gZmFsc2U7XG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMuX2VkaXRpbmdQYXJ0cykuZm9yRWFjaCgocGFydCkgPT4ge1xuICAgICAgICBpZiAoIXBhcnQuZW5hYmxlZCkge1xuICAgICAgICAgIGVkaXRpbmdEYXRlID0gZWRpdGluZ0RhdGUuc2V0KHBhcnQua2V5IGFzIFRpbWVVbml0LCBwYXJ0LmRlZmF1bHQpO1xuICAgICAgICAgIGFwcGx5Q2hhbmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGFwcGx5Q2hhbmdlcykge1xuICAgICAgICByZXR1cm4gZWRpdGluZ0RhdGUuZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgaW50ZXJuYWxWYWx1ZUNoYW5nZWQodmFsdWU/OiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh2YWx1ZSwgdGhpcy50eXBlKTtcbiAgICB9XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9lZGl0aW5nUGFydHMpLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAocGFydC50eXBlZFZhbHVlICE9IHBhcnQucGxhY2Vob2xkZXIpIHBhcnQudHlwZWRWYWx1ZSA9IHBhcnQucmVhbFZhbHVlKCk7XG4gICAgICB9IGVsc2UgcGFydC50eXBlZFZhbHVlID0gbnVsbDtcbiAgICB9KTtcbiAgICB0aGlzLl91cGRhdGVUZXh0KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgX2hhbmRsZU9uS2V5ZG93bkV2ZW50KGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBpZ25vcmUgPSAoKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG5cbiAgICBjb25zdCBpbnB1dCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgLy9cbiAgICBjb25zdCBvcmRlcmVkUGFydHMgPSB0aGlzLl9nZXRPcmRlcmVkUGFydHMoKTtcbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5hY3RpdmVQYXJ0ID8gdGhpcy5fZWRpdGluZ1BhcnRzW3RoaXMuYWN0aXZlUGFydF0gOiBvcmRlcmVkUGFydHNbMF07XG4gICAgY29uc3QgbmV4dFBhcnQgPSBwYXJ0ID8gb3JkZXJlZFBhcnRzW29yZGVyZWRQYXJ0cy5pbmRleE9mKHBhcnQpICsgMV0gOiBudWxsO1xuICAgIGNvbnN0IHByZXZQYXJ0ID0gcGFydCA/IG9yZGVyZWRQYXJ0c1tvcmRlcmVkUGFydHMuaW5kZXhPZihwYXJ0KSAtIDFdIDogbnVsbDtcbiAgICAvL1xuICAgIGNvbnN0IGdvTmV4dCA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgIGlmIChuZXh0UGFydCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVBhcnQgPSBuZXh0UGFydC5rZXk7XG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvUHJldiA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgIGlmIChwcmV2UGFydCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVBhcnQgPSBwcmV2UGFydC5rZXk7XG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBMZWZ0IGFuZCBSaWdodCAgKioqKioqKioqKioqKiovXG4gICAgaWYgKGUuY29kZSA9PT0gJ0Fycm93UmlnaHQnIHx8IGUuY29kZSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGlnbm9yZSgpO1xuICAgICAgZS5jb2RlID09PSAnQXJyb3dSaWdodCcgPyBnb05leHQoKSA6IGdvUHJldigpO1xuICAgIH0gZWxzZSBpZiAoKGUuY29kZSA9PT0gJ0Fycm93VXAnIHx8IGUuY29kZSA9PT0gJ0Fycm93RG93bicpICYmICFlLmN0cmxLZXkpIHtcbiAgICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBVcCBhbmQgRG93biAgKioqKioqKioqKioqKiovXG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgIGlnbm9yZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZ25vcmUoKTtcbiAgICAgICAgY29uc3Qgc2lnbiA9IGUuY29kZSA9PT0gJ0Fycm93VXAnID8gKzEgOiAtMTtcbiAgICAgICAgdGhpcy5hY3RpdmVQYXJ0ID0gcGFydC5rZXk7XG4gICAgICAgIGxldCBuZXdWYWw6IEFYRGF0ZVRpbWUgPSB0aGlzLmVkaXRpbmdEYXRlT2JqLmFkZChwYXJ0LmtleSwgc2lnbik7XG4gICAgICAgIHRoaXMuX2VkaXRpbmdQYXJ0c1twYXJ0LmtleV0udHlwZWRWYWx1ZSA9IG5ld1ZhbC5mb3JtYXQodGhpcy5fZWRpdGluZ1BhcnRzW3BhcnQua2V5XS5wbGFjZWhvbGRlcik7XG4gICAgICAgIHRoaXMuX2VkaXRpbmdEYXRlT2JqID0gbmV3VmFsO1xuICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUuY29kZSA9PSAnQmFja3NwYWNlJyB8fCBlLmNvZGUgPT0gJ0RlbGV0ZScpIHtcbiAgICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBCYWNrc3BhY2UgICoqKioqKioqKioqKioqL1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQudmFsdWUpIHtcbiAgICAgICAgaWdub3JlKCk7XG4gICAgICAgIHRoaXMuX2VkaXRpbmdQYXJ0c1twYXJ0LmtleV0udHlwZWRWYWx1ZSA9IHRoaXMuX2VkaXRpbmdQYXJ0c1twYXJ0LmtleV0ucGxhY2Vob2xkZXI7XG4gICAgICAgIHRoaXMuX2RldGVjdFZhbHVlQ2hhbmdlcygpO1xuICAgICAgICBnb1ByZXYoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUuY29kZSA9PSAnVGFiJyB8fCBlLmNvZGUgPT0gJ1NwYWNlJykge1xuICAgICAgLyoqKioqKioqKioqKioqKiAgSGFuZGxlIEJhY2tzcGFjZSAgKioqKioqKioqKioqKiovXG4gICAgICBpZiAoaW5wdXQudmFsdWUpIHtcbiAgICAgICAgaWYgKCFlLnNoaWZ0S2V5ICYmIG5leHRQYXJ0KSB7XG4gICAgICAgICAgaWdub3JlKCk7XG4gICAgICAgICAgZ29OZXh0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5zaGlmdEtleSAmJiBwcmV2UGFydCkge1xuICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgIGdvUHJldigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlLmtleT8udHJpbSgpICYmICFpc05hTihOdW1iZXIoZS5rZXkpKSkge1xuICAgICAgaWdub3JlKCk7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBuZXh0ID0gZmFsc2U7XG4gICAgICBjb25zdCBlZGl0aW5nID0gdGhpcy5fZWRpdGluZ1BhcnRzW3BhcnQua2V5XTtcbiAgICAgIC8vXG4gICAgICBzd2l0Y2ggKHBhcnQua2V5KSB7XG4gICAgICAgIGNhc2UgJ3llYXInOiB7XG4gICAgICAgICAgaWYgKGVkaXRpbmcucGxhY2Vob2xkZXIubGVuZ3RoID09IDIgJiYgdGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKFxuICAgICAgICAgICAgICAuLi50aGlzLmNhbGVuZGFyU2VydmljZS5ub3codGhpcy50eXBlKS5mb3JtYXQoJ3l5eXknKS5zdWJzdHJpbmcoMCwgMikuc3BsaXQoJycpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoIDwgNCkge1xuICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYCR7dGhpcy5faW5wdXRDaGFycy5qb2luKCcnKX0ke2Uua2V5fWA7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dENoYXJzLnB1c2goZS5rZXkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9ICgnMDAwMCcgKyBlZGl0aW5nLnR5cGVkVmFsdWUpLnNsaWNlKC00KTtcbiAgICAgICAgICBjb25zdCBudiA9IHBhcnNlSW50KGVkaXRpbmcudHlwZWRWYWx1ZSk7XG4gICAgICAgICAgLy9pZiAobnYgPiAwKSB7XG4gICAgICAgICAgY29uc3QgbmV3VmFsID0gdGhpcy5lZGl0aW5nRGF0ZU9iai5zZXQoJ3llYXInLCBudik7XG4gICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgdGhpcy5fZGV0ZWN0VmFsdWVDaGFuZ2VzKCk7XG4gICAgICAgICAgLy99XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbW9udGgnOiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0Q2hhcnMucHVzaChlLmtleSk7XG4gICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkgPiAxKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTdHIgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICBpZiAobmV3U3RyID4gMTIpIHtcbiAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYDAke2Uua2V5fWA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBuZXdTdHIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgIG5leHQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPVxuICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlPy5sZW5ndGggPT09IDEgPyAnMCcgKyBlZGl0aW5nLnR5cGVkVmFsdWUgOiBlZGl0aW5nLnR5cGVkVmFsdWU7XG4gICAgICAgICAgY29uc3QgbnYgPSBwYXJzZUludChlZGl0aW5nLnR5cGVkVmFsdWUpO1xuICAgICAgICAgIGlmIChudiA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuZWRpdGluZ0RhdGVPYmouc2V0KHBhcnQua2V5LCBudik7XG4gICAgICAgICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IG5ld1ZhbDtcbiAgICAgICAgICAgIHRoaXMuX2RldGVjdFZhbHVlQ2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdkYXknOiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0Q2hhcnMucHVzaChlLmtleSk7XG4gICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkgPiAzKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTdHIgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICBpZiAobmV3U3RyID4gdGhpcy5fZWRpdGluZ0RhdGVPYmoubW9udGgudG90YWxEYXlzKSB7XG4gICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGAwJHtlLmtleX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gbmV3U3RyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID1cbiAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZT8ubGVuZ3RoID09PSAxID8gJzAnICsgZWRpdGluZy50eXBlZFZhbHVlIDogZWRpdGluZy50eXBlZFZhbHVlO1xuICAgICAgICAgIGNvbnN0IG52ID0gcGFyc2VJbnQoZWRpdGluZy50eXBlZFZhbHVlKTtcbiAgICAgICAgICBpZiAobnYgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLmVkaXRpbmdEYXRlT2JqLnNldChwYXJ0LmtleSwgbnYpO1xuICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnaG91cic6IHtcbiAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKGUua2V5KTtcbiAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGAwJHtlLmtleX1gO1xuICAgICAgICAgICAgaWYgKHBhcnNlSW50KGUua2V5KSA+IDIpIHtcbiAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTdHIgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICBpZiAobmV3U3RyID4gMjMpIHtcbiAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYDAke2Uua2V5fWA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBuZXdTdHIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPVxuICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlPy5sZW5ndGggPT09IDEgPyAnMCcgKyBlZGl0aW5nLnR5cGVkVmFsdWUgOiBlZGl0aW5nLnR5cGVkVmFsdWU7XG4gICAgICAgICAgY29uc3QgbmV3VmFsID0gdGhpcy5lZGl0aW5nRGF0ZU9iai5zZXQoJ2hvdXInLCBwYXJzZUludChlZGl0aW5nLnR5cGVkVmFsdWUpKTtcbiAgICAgICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IG5ld1ZhbDtcbiAgICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dENoYXJzLnB1c2goZS5rZXkpO1xuICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYDAke2Uua2V5fWA7XG4gICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpID4gNSkge1xuICAgICAgICAgICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgICAgICAgICAgIG5leHQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgY29uc3QgbmV3U3RyID0gcGFyc2VJbnQoYCR7dGhpcy5faW5wdXRDaGFyc1swXX0ke2Uua2V5fWApO1xuICAgICAgICAgICAgaWYgKG5ld1N0ciA+IDU5KSB7XG4gICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGAwJHtlLmtleX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gbmV3U3RyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID1cbiAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZT8ubGVuZ3RoID09PSAxID8gJzAnICsgZWRpdGluZy50eXBlZFZhbHVlIDogZWRpdGluZy50eXBlZFZhbHVlO1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuZWRpdGluZ0RhdGVPYmouc2V0KHBhcnQua2V5LCBwYXJzZUludChlZGl0aW5nLnR5cGVkVmFsdWUpKTtcbiAgICAgICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IG5ld1ZhbDtcbiAgICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgIH1cbiAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgIGdvTmV4dCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIC8qKioqKioqKioqKioqKiogIEVtaXQgRXZlbnQgICoqKioqKioqKioqKioqL1xuICAgIHN1cGVyLmVtaXRPbktleWRvd25FdmVudChlKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSlcbiAgX2hhbmRsZUtleVVwRXZlbnQoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmFjdGl2ZVBhcnQpIHtcbiAgICAgIHRoaXMuX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX2hhbmRsZUZvY3VzRXZlbnQoZTogRm9jdXNFdmVudCkge1xuICAgIC8vdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpO1xuICAgIHN1cGVyLmVtaXRPbkZvY3VzRXZlbnQoZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2hhbmRsZUJsdXJFdmVudChlOiBGb2N1c0V2ZW50KSB7XG4gICAgc3VwZXIuZW1pdE9uQmx1ckV2ZW50KGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9oYW5kbGVPbklucHV0Q2xpY2tFdmVudChlOiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9kZXRlY3RQYXJ0QXRQb3NpdGlvbigpO1xuICAgIH0sIDApO1xuICAgIHRoaXMub25DbGljay5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGh0bWxFbGVtZW50OiB0aGlzLmdldEhvc3RFbGVtZW50KCksXG4gICAgICBuYXRpdmVFdmVudDogZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2RldGVjdFBhcnRBdFBvc2l0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghaW5wdXQudmFsdWUpIHJldHVybjtcbiAgICBjb25zdCBzU3RhcnQgPSBpbnB1dC5zZWxlY3Rpb25FbmQgfHwgMDtcbiAgICBjb25zdCByZSA9IC9bYS16QS1aMC05XSsvZ2k7XG4gICAgY29uc3QgdmFsdWVQYXJ0cyA9IEFycmF5LmZyb20oaW5wdXQudmFsdWUubWF0Y2hBbGwocmUpKTtcbiAgICBjb25zdCBvcmRlcmVkUGFydHMgPSB0aGlzLl9nZXRPcmRlcmVkUGFydHMoKTtcbiAgICBjb25zdCBpbmRleCA9IHZhbHVlUGFydHMuZmluZEluZGV4KChjOiBhbnkpID0+IGMuaW5kZXggPD0gc1N0YXJ0ICYmIGMuaW5kZXggKyBjWzBdLmxlbmd0aCA+PSBzU3RhcnQpO1xuICAgIHRoaXMuYWN0aXZlUGFydCA9IG9yZGVyZWRQYXJ0c1tpbmRleF0ua2V5O1xuICAgIHRoaXMuX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghaW5wdXQgfHwgIWlucHV0LnZhbHVlIHx8ICF0aGlzLmFjdGl2ZVBhcnQpIHJldHVybjtcbiAgICBjb25zdCBvcmRlcmVkUGFydHMgPSB0aGlzLl9nZXRPcmRlcmVkUGFydHMoKTtcbiAgICBjb25zdCBpbmRleCA9IG9yZGVyZWRQYXJ0cy5maW5kSW5kZXgoKGMpID0+IGMua2V5ID09IHRoaXMuYWN0aXZlUGFydCk7XG4gICAgY29uc3QgcmUgPSAvW2EtekEtWjAtOV0rL2dpO1xuICAgIGNvbnN0IHZhbHVlUGFydHMgPSBBcnJheS5mcm9tKGlucHV0LnZhbHVlLm1hdGNoQWxsKHJlKSk7XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBBWFN0cmluZ1V0aWwuZ2V0V29yZEJvdW5kc0F0UG9zaXRpb24oaW5wdXQudmFsdWUsIHZhbHVlUGFydHNbaW5kZXhdPy5pbmRleCk7XG4gICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICBwcml2YXRlIF9kZXRlY3RWYWx1ZUNoYW5nZXMoKSB7XG4gICAgdGhpcy5jb21taXRWYWx1ZSh0aGlzLl9lZGl0aW5nRGF0ZU9iai5kYXRlLCB0cnVlKTtcbiAgfVxufVxuIiwiPGlucHV0ICNpbnB1dCBpZD1cImlucHV0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgYXV0b2NvcnJlY3Q9XCJvZmZcIiBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGNsYXNzPVwiYXgtaW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCIgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5heC1zdGF0ZS1yZWFkb25seV09XCJyZWFkb25seVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtyZWFkb25seV09XCJ0cnVlXCIgW25nTW9kZWxdPVwiX2VkaXRpbmdUZXh0XCJcbiAgICAobW91c2V1cCk9XCJfaGFuZGxlT25JbnB1dENsaWNrRXZlbnQoJGV2ZW50KVwiIChibHVyKT1cIl9oYW5kbGVCbHVyRXZlbnQoJGV2ZW50KVwiIChmb2N1cyk9XCJfaGFuZGxlRm9jdXNFdmVudCgkZXZlbnQpXCI+XG48bmctY29udGVudCBzZWxlY3Q9XCJheC12YWxpZGF0aW9uLXJ1bGVcIj5cbjwvbmctY29udGVudD4iXX0=
|