ontimize-web-ngx 15.0.0-rc.0 → 15.0.1
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/esm2020/lib/components/app-header/o-app-header.component.mjs +4 -4
- package/esm2020/lib/components/app-header/o-app-header.module.mjs +5 -5
- package/esm2020/lib/components/app-sidenav/image/o-app-sidenav-image.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/o-app-sidenav.module.mjs +5 -5
- package/esm2020/lib/components/bar-menu/locale-menu-item/o-locale-bar-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-group/o-bar-menu-group.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-item/o-bar-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-nested/o-bar-menu-nested.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-separator/o-bar-menu-separator.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/o-bar-menu-base.class.mjs +4 -4
- package/esm2020/lib/components/bar-menu/o-bar-menu.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/o-bar-menu.module.mjs +5 -5
- package/esm2020/lib/components/bar-menu/o-base-menu-item.class.mjs +4 -4
- package/esm2020/lib/components/breadcrumb/o-breadcrumb.component.mjs +4 -4
- package/esm2020/lib/components/breadcrumb/o-breadcrumb.module.mjs +5 -5
- package/esm2020/lib/components/button/o-button.component.mjs +4 -4
- package/esm2020/lib/components/button/o-button.module.mjs +5 -5
- package/esm2020/lib/components/button-toggle/o-button-toggle-group/o-button-toggle-group.component.mjs +4 -4
- package/esm2020/lib/components/button-toggle/o-button-toggle.component.mjs +4 -4
- package/esm2020/lib/components/button-toggle/o-button-toggle.module.mjs +5 -5
- package/esm2020/lib/components/card-menu-item/o-card-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/card-menu-item/o-card-menu-item.module.mjs +5 -5
- package/esm2020/lib/components/container/column/o-column.component.mjs +4 -4
- package/esm2020/lib/components/container/column/o-column.module.mjs +5 -5
- package/esm2020/lib/components/container/column-collapsible/o-column-collapsible.component.mjs +4 -4
- package/esm2020/lib/components/container/column-collapsible/o-column-collapsible.module.mjs +5 -5
- package/esm2020/lib/components/container/o-container-collapsible-component.class.mjs +4 -4
- package/esm2020/lib/components/container/o-container-component.class.mjs +4 -4
- package/esm2020/lib/components/container/row/o-row.component.mjs +4 -4
- package/esm2020/lib/components/container/row/o-row.module.mjs +5 -5
- package/esm2020/lib/components/container/row-collapsible/o-row-collapsible.component.mjs +4 -4
- package/esm2020/lib/components/container/row-collapsible/o-row-collapsible.module.mjs +5 -5
- package/esm2020/lib/components/contextmenu/context-menu/o-context-menu-content.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu/o-wrapper-content-menu/o-wrapper-content-menu.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu-group/o-context-menu-group.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu-item/o-context-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu-separator/o-context-menu-separator.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-content-menu-base-item.class.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu-overlay.service.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu.directive.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu.module.mjs +5 -5
- package/esm2020/lib/components/contextmenu/o-context-menu.service.mjs +4 -4
- package/esm2020/lib/components/dual-list-selector/dual-list-selector-item/date/o-dual-list-selector-date-item.component.mjs +4 -4
- package/esm2020/lib/components/dual-list-selector/o-dual-list-selector.component.mjs +4 -4
- package/esm2020/lib/components/dual-list-selector/o-dual-list-selector.module.mjs +5 -5
- package/esm2020/lib/components/expandable-container/o-expandable-container.component.mjs +4 -4
- package/esm2020/lib/components/expandable-container/o-expandable-container.module.mjs +5 -5
- package/esm2020/lib/components/filter-builder/filter-builder-menu/filter-builder-menu.component.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder-clear.directive.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder-query.directive.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder.component.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder.module.mjs +5 -5
- package/esm2020/lib/components/form/guards/o-form-can-deactivate.guard.mjs +4 -4
- package/esm2020/lib/components/form/navigation/o-form-confirm-exit.service.mjs +4 -4
- package/esm2020/lib/components/form/navigation/o-form-navigation.component.mjs +13 -22
- package/esm2020/lib/components/form/o-form.component.mjs +4 -4
- package/esm2020/lib/components/form/o-form.module.mjs +5 -5
- package/esm2020/lib/components/form/services/o-form-message.service.mjs +4 -4
- package/esm2020/lib/components/form/toolbar/o-form-toolbar.component.mjs +4 -4
- package/esm2020/lib/components/form/toolbar/o-form-toolbar.module.mjs +5 -5
- package/esm2020/lib/components/form-container/o-form-container.component.mjs +4 -4
- package/esm2020/lib/components/form-container/o-form-container.module.mjs +5 -5
- package/esm2020/lib/components/grid/grid-item/o-grid-item.component.mjs +4 -4
- package/esm2020/lib/components/grid/grid-item/o-grid-item.directive.mjs +4 -4
- package/esm2020/lib/components/grid/index.mjs +6 -0
- package/esm2020/lib/components/grid/o-grid.component.mjs +11 -11
- package/esm2020/lib/components/grid/o-grid.module.mjs +9 -7
- package/esm2020/lib/components/grid/skeketon/o-grid-skeleton.component.mjs +26 -0
- package/esm2020/lib/components/image/fullscreen/fullscreen-dialog.component.mjs +4 -4
- package/esm2020/lib/components/image/o-image.component.mjs +4 -4
- package/esm2020/lib/components/image/o-image.module.mjs +5 -5
- package/esm2020/lib/components/index.mjs +3 -5
- package/esm2020/lib/components/input/checkbox/o-checkbox.component.mjs +4 -4
- package/esm2020/lib/components/input/checkbox/o-checkbox.module.mjs +5 -5
- package/esm2020/lib/components/input/combo/combo-renderer/boolean/o-combo-renderer-boolean.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/currency/o-combo-renderer-currency.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/date/o-combo-renderer-date.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/icon/o-combo-renderer-icon.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/integer/o-combo-renderer-integer.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/o-combo-renderer.class.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/percentage/o-combo-renderer-percentage.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/real/o-combo-renderer-real.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-search/o-combo-search.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/o-combo.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/o-combo.module.mjs +5 -5
- package/esm2020/lib/components/input/currency-input/o-currency-input.component.mjs +4 -4
- package/esm2020/lib/components/input/currency-input/o-currency-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-input/o-date-input.component.mjs +4 -4
- package/esm2020/lib/components/input/date-input/o-date-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-range/o-daterange-input.component.mjs +4 -4
- package/esm2020/lib/components/input/date-range/o-daterange-input.directive.mjs +4 -4
- package/esm2020/lib/components/input/date-range/o-daterange-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-range/o-daterange-picker.component.mjs +4 -4
- package/esm2020/lib/components/input/email-input/o-email-input.component.mjs +4 -4
- package/esm2020/lib/components/input/email-input/o-email-input.module.mjs +5 -5
- package/esm2020/lib/components/input/file-input/o-file-input.component.mjs +7 -7
- package/esm2020/lib/components/input/file-input/o-file-input.module.mjs +5 -5
- package/esm2020/lib/components/input/hour-input/o-hour-input.component.mjs +4 -4
- package/esm2020/lib/components/input/hour-input/o-hour-input.module.mjs +5 -5
- package/esm2020/lib/components/input/html-input/o-html-input.component.mjs +4 -4
- package/esm2020/lib/components/input/html-input/o-html-input.module.mjs +5 -5
- package/esm2020/lib/components/input/integer-input/o-integer-input.component.mjs +4 -4
- package/esm2020/lib/components/input/integer-input/o-integer-input.module.mjs +5 -5
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/currency/o-list-picker-renderer-currency.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/date/o-list-picker-renderer-date.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/integer/o-list-picker-renderer-integer.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/o-list-picker-renderer.class.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/percentage/o-list-picker-renderer-percentage.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/real/o-list-picker-renderer-real.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/o-list-picker-dialog.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/o-list-picker.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/o-list-picker.module.mjs +5 -5
- package/esm2020/lib/components/input/nif-input/o-nif-input.component.mjs +4 -4
- package/esm2020/lib/components/input/nif-input/o-nif-input.module.mjs +5 -5
- package/esm2020/lib/components/input/o-boolean-form-data-component.class.mjs +4 -4
- package/esm2020/lib/components/input/o-form-service-component.class.mjs +4 -4
- package/esm2020/lib/components/input/password-input/o-password-input.component.mjs +4 -4
- package/esm2020/lib/components/input/password-input/o-password-input.module.mjs +5 -5
- package/esm2020/lib/components/input/percent-input/o-percent-input.component.mjs +4 -4
- package/esm2020/lib/components/input/percent-input/o-percent-input.module.mjs +5 -5
- package/esm2020/lib/components/input/phone-input/data/country-code.mjs +4 -4
- package/esm2020/lib/components/input/phone-input/o-phone-input.component.mjs +4 -4
- package/esm2020/lib/components/input/phone-input/o-phone-input.module.mjs +5 -5
- package/esm2020/lib/components/input/radio/o-radio.component.mjs +4 -4
- package/esm2020/lib/components/input/radio/o-radio.module.mjs +5 -5
- package/esm2020/lib/components/input/real-input/o-real-input.component.mjs +4 -4
- package/esm2020/lib/components/input/real-input/o-real-input.module.mjs +5 -5
- package/esm2020/lib/components/input/search-input/o-search-input.component.mjs +4 -4
- package/esm2020/lib/components/input/search-input/o-search-input.module.mjs +5 -5
- package/esm2020/lib/components/input/slide-toggle/o-slide-toggle.component.mjs +4 -4
- package/esm2020/lib/components/input/slide-toggle/o-slide-toggle.module.mjs +5 -5
- package/esm2020/lib/components/input/slider/o-slider.component.mjs +4 -4
- package/esm2020/lib/components/input/slider/o-slider.module.mjs +5 -5
- package/esm2020/lib/components/input/text-input/o-text-input.component.mjs +4 -4
- package/esm2020/lib/components/input/text-input/o-text-input.module.mjs +5 -5
- package/esm2020/lib/components/input/textarea-input/o-textarea-input.component.mjs +4 -4
- package/esm2020/lib/components/input/textarea-input/o-textarea-input.module.mjs +5 -5
- package/esm2020/lib/components/input/time-input/o-time-input.component.mjs +4 -4
- package/esm2020/lib/components/input/time-input/o-time-input.module.mjs +5 -5
- package/esm2020/lib/components/language-selector/o-language-selector.component.mjs +4 -4
- package/esm2020/lib/components/language-selector/o-language-selector.module.mjs +5 -5
- package/esm2020/lib/components/list/index.mjs +2 -1
- package/esm2020/lib/components/list/list-item/o-list-item.component.mjs +4 -4
- package/esm2020/lib/components/list/list-item/o-list-item.directive.mjs +4 -4
- package/esm2020/lib/components/list/o-list.component.mjs +14 -15
- package/esm2020/lib/components/list/o-list.module.mjs +12 -8
- package/esm2020/lib/components/list/renderers/avatar/o-list-item-avatar.component.mjs +4 -4
- package/esm2020/lib/components/list/renderers/card/o-list-item-card.component.mjs +4 -4
- package/esm2020/lib/components/list/renderers/card-image/o-list-item-card-image.component.mjs +4 -4
- package/esm2020/lib/components/list/renderers/o-list-item-card-renderer.class.mjs +4 -4
- package/esm2020/lib/components/list/renderers/o-list-item-text-renderer.class.mjs +4 -4
- package/esm2020/lib/components/list/renderers/text/o-list-item-text.component.mjs +4 -4
- package/esm2020/lib/components/list/skeleton/o-list-skeleton.component.mjs +26 -0
- package/esm2020/lib/components/material/ckeditor/ck-editor.component.mjs +4 -4
- package/esm2020/lib/components/material/ckeditor/ck-editor.module.mjs +5 -5
- package/esm2020/lib/components/o-data-toolbar/o-data-toolbar.component.mjs +4 -4
- package/esm2020/lib/components/o-data-toolbar/o-data-toolbar.module.mjs +5 -5
- package/esm2020/lib/components/o-form-data-component.class.mjs +4 -4
- package/esm2020/lib/components/o-service-base-component.class.mjs +10 -10
- package/esm2020/lib/components/o-service-component.class.mjs +17 -11
- package/esm2020/lib/components/o-skeleton.component.mjs +21 -0
- package/esm2020/lib/components/table/column/calculated/o-table-column-calculated.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/boolean/o-table-cell-editor-boolean.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/date/o-table-cell-editor-date.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/email/o-table-cell-editor-email.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/integer/o-table-cell-editor-integer.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/o-base-table-cell-editor.class.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/real/o-table-cell-editor-real.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/text/o-table-cell-editor-text.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/time/o-table-cell-editor-time.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/action/o-table-cell-renderer-action.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/boolean/o-table-cell-renderer-boolean.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/currency/o-table-cell-renderer-currency.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/date/o-table-cell-renderer-date.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/image/o-table-cell-renderer-image.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/integer/o-table-cell-renderer-integer.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/percentage/o-table-cell-renderer-percentage.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/real/o-table-cell-renderer-real.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/time/o-table-cell-renderer-time.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/translate/o-table-cell-renderer-translate.component.mjs +4 -4
- package/esm2020/lib/components/table/column/o-table-column.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/contextmenu/o-table-context-menu.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/default-o-table.datasource.mjs +7 -2
- package/esm2020/lib/components/table/extensions/dialog/apply-configuration/o-table-apply-configuration-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/export/o-table-export-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/group-by-columns/o-table-group-by-columns-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/o-table-base-dialog.class.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/store-configuration/o-table-store-configuration-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/visible-columns/o-table-visible-columns-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/export-button/o-table-export-button.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/export-button/o-table-export-button.service.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/aggregate/o-table-column-aggregate.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/expanded/o-table-expanded-footer.directive.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/paginator/o-table-mat-paginator-intl.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/paginator/o-table-paginator.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-button/o-table-button.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-buttons/o-table-buttons.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-column-resizer/o-table-column-resizer.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-column-select-all/o-table-column-select-all.directive.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-grouping/columns/o-table-columns-grouping-column.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-grouping/o-table-columns-grouping.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-header/o-table-header.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-header-column-filter-icon/o-table-header-column-filter-icon.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-header-select-all/o-table-header-select-all.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-insertable-row/o-table-insertable-row.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-option/o-table-option.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-quickfilter/o-table-quickfilter.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/index.mjs +2 -1
- package/esm2020/lib/components/table/extensions/o-table-datasource.service.mjs +4 -4
- package/esm2020/lib/components/table/extensions/o-table-strategy.service.mjs +4 -4
- package/esm2020/lib/components/table/extensions/pipes/o-table-row-class.pipe.mjs +4 -4
- package/esm2020/lib/components/table/extensions/row/o-table-row.directive.mjs +4 -4
- package/esm2020/lib/components/table/extensions/row/table-row-expandable/o-table-row-expandable.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +26 -0
- package/esm2020/lib/components/table/extensions/sort/o-mat-sort-header.mjs +4 -4
- package/esm2020/lib/components/table/extensions/sort/o-mat-sort-module.mjs +5 -5
- package/esm2020/lib/components/table/extensions/sort/o-mat-sort.mjs +4 -4
- package/esm2020/lib/components/table/o-table.component.mjs +50 -50
- package/esm2020/lib/components/table/o-table.module.mjs +18 -9
- package/esm2020/lib/components/tree/header/tree-menu/o-tree-menu.component.mjs +4 -4
- package/esm2020/lib/components/tree/o-tree-dao.service.mjs +4 -4
- package/esm2020/lib/components/tree/o-tree.component.mjs +4 -4
- package/esm2020/lib/components/tree/o-tree.module.mjs +5 -5
- package/esm2020/lib/components/tree/tree-node/tree-node.component.mjs +4 -4
- package/esm2020/lib/components/user-info/o-user-info.component.mjs +4 -4
- package/esm2020/lib/components/user-info/o-user-info.module.mjs +5 -5
- package/esm2020/lib/components/user-info/user-info-configuration/o-user-info-configuration.directive.mjs +4 -4
- package/esm2020/lib/components/user-info/user-info-configuration-item/o-user-info-configuration-item.directive.mjs +4 -4
- package/esm2020/lib/config/o-modules.mjs +5 -5
- package/esm2020/lib/directives/keyboard-listener.directive.mjs +4 -4
- package/esm2020/lib/directives/locker.directive.mjs +4 -4
- package/esm2020/lib/directives/o-file-drag-and-drop.directive.mjs +4 -4
- package/esm2020/lib/directives/o-hidden.directive.mjs +4 -4
- package/esm2020/lib/directives/o-mat-error.directive.mjs +4 -4
- package/esm2020/lib/directives/o-mat-prefix.directive.mjs +4 -4
- package/esm2020/lib/directives/o-mat-suffix.directive.mjs +4 -4
- package/esm2020/lib/directives/o-tab-group.directive.mjs +4 -4
- package/esm2020/lib/layouts/app-layout/app-layout-header/o-app-layout-header.component.mjs +4 -4
- package/esm2020/lib/layouts/app-layout/app-layout-sidenav/o-app-layout-sidenav.component.mjs +4 -4
- package/esm2020/lib/layouts/app-layout/o-app-layout.component.mjs +4 -4
- package/esm2020/lib/layouts/app-layout/o-app-layout.module.mjs +5 -5
- package/esm2020/lib/layouts/card-menu-layout/o-card-menu-layout.component.mjs +4 -4
- package/esm2020/lib/layouts/card-menu-layout/o-card-menu-layout.module.mjs +5 -5
- package/esm2020/lib/layouts/form-layout/dialog/o-form-layout-dialog.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/dialog/options/o-form-layout-dialog-options.directive.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/directives/o-form-layout-manager-content.directive.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/guards/o-form-layout-can-activate-child.guard.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager.module.mjs +5 -5
- package/esm2020/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.mjs +6 -8
- package/esm2020/lib/layouts/form-layout/split-pane/options/o-form-layout-split-pane-options.directive.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.mjs +5 -5
- package/esm2020/lib/layouts/form-layout/tabgroup/options/o-form-layout-tabgroup-options.directive.mjs +4 -4
- package/esm2020/lib/ontimize-web-ngx.module.mjs +5 -5
- package/esm2020/lib/pipes/columns-filter.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-currency.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-icon.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-integer.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-moment.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-percentage.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-real.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-safe.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-translate.pipe.mjs +8 -8
- package/esm2020/lib/pipes/order-by.pipe.mjs +4 -4
- package/esm2020/lib/services/app-menu.service.mjs +4 -4
- package/esm2020/lib/services/appearance.service.mjs +4 -4
- package/esm2020/lib/services/auth-guard.service.mjs +4 -4
- package/esm2020/lib/services/auth.service.mjs +4 -4
- package/esm2020/lib/services/currency.service.mjs +4 -4
- package/esm2020/lib/services/dialog.service.mjs +4 -4
- package/esm2020/lib/services/icon.service.mjs +4 -4
- package/esm2020/lib/services/local-storage.service.mjs +4 -4
- package/esm2020/lib/services/login-storage.service.mjs +4 -4
- package/esm2020/lib/services/moment.service.mjs +4 -4
- package/esm2020/lib/services/navigation.service.mjs +4 -4
- package/esm2020/lib/services/number.service.mjs +4 -4
- package/esm2020/lib/services/o-auth.service.mjs +4 -4
- package/esm2020/lib/services/o-breadcrumb.service.mjs +4 -4
- package/esm2020/lib/services/o-error-dialog-manager.service.mjs +4 -4
- package/esm2020/lib/services/o-form-layout-manager.service.mjs +4 -4
- package/esm2020/lib/services/o-modules-info.service.mjs +4 -4
- package/esm2020/lib/services/o-user-info.service.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize-base-service.class.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize-ee.service.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize-export-3xx.service.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize-export.service.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize-file.service.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize-service-response.adapter.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-export-data-base-provider.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-export-data-provider-3x.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-export-data-provider.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-icon-registry.service.mjs +4 -4
- package/esm2020/lib/services/parser/o-service-response.parser.mjs +4 -4
- package/esm2020/lib/services/permissions/o-permissions.module.mjs +5 -5
- package/esm2020/lib/services/permissions/ontimize-ee-permissions.service.mjs +4 -4
- package/esm2020/lib/services/permissions/ontimize-permissions.service.mjs +4 -4
- package/esm2020/lib/services/permissions/permissions-can-activate.guard.mjs +4 -4
- package/esm2020/lib/services/permissions/permissions.service.mjs +4 -4
- package/esm2020/lib/services/remote-config.service.mjs +5 -5
- package/esm2020/lib/services/share-can-activate-child.service.mjs +4 -4
- package/esm2020/lib/services/snackbar.service.mjs +4 -4
- package/esm2020/lib/services/state/o-component-state.service.mjs +10 -10
- package/esm2020/lib/services/state/o-filter-builder-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-form-layout-manager-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-grid-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-list-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-table-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-tree-component-state.service.mjs +4 -4
- package/esm2020/lib/services/translate/o-translate.parser.mjs +4 -4
- package/esm2020/lib/services/translate/o-translate.service.mjs +4 -4
- package/esm2020/lib/shared/components/dialog/o-dialog-internal.component.mjs +4 -4
- package/esm2020/lib/shared/components/dialog/o-dialog.component.mjs +4 -4
- package/esm2020/lib/shared/components/error403/o-error-403.component.mjs +4 -4
- package/esm2020/lib/shared/components/filter/load-filter/o-load-filter-dialog.component.mjs +4 -4
- package/esm2020/lib/shared/components/filter/store-filter/o-store-filter-dialog.component.mjs +4 -4
- package/esm2020/lib/shared/components/snackbar/o-snackbar-base.class.mjs +4 -4
- package/esm2020/lib/shared/components/snackbar/o-snackbar.component.mjs +4 -4
- package/esm2020/lib/shared/components/validation/o-error.component.mjs +4 -4
- package/esm2020/lib/shared/components/validation/o-validator.component.mjs +4 -4
- package/esm2020/lib/shared/material/custom.material.module.mjs +5 -5
- package/esm2020/lib/shared/material/date/ontimize-moment-date-adapter.mjs +4 -4
- package/esm2020/lib/shared/shared.module.mjs +5 -5
- package/esm2020/lib/util/util.mjs +11 -8
- package/fesm2015/ontimize-web-ngx.mjs +1273 -1179
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +1271 -1179
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/grid/index.d.ts +5 -0
- package/lib/components/grid/o-grid.module.d.ts +8 -6
- package/lib/components/grid/skeketon/o-grid-skeleton.component.d.ts +11 -0
- package/lib/components/index.d.ts +2 -4
- package/lib/components/input/file-input/o-file-input.component.d.ts +1 -1
- package/lib/components/list/index.d.ts +1 -0
- package/lib/components/list/o-list.module.d.ts +8 -6
- package/lib/components/list/skeleton/o-list-skeleton.component.d.ts +11 -0
- package/lib/components/o-service-component.class.d.ts +2 -1
- package/lib/components/o-skeleton.component.d.ts +14 -0
- package/lib/components/table/extensions/header/o-table-header-components.d.ts +2 -2
- package/lib/components/table/extensions/index.d.ts +1 -0
- package/lib/components/table/extensions/skeleton/o-table-skeleton.component.d.ts +11 -0
- package/lib/components/table/o-table.component.d.ts +14 -11
- package/lib/components/table/o-table.module.d.ts +14 -12
- package/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.d.ts +2 -3
- package/lib/util/util.d.ts +1 -1
- package/package.json +3 -2
- package/theme.scss +89 -73
- package/theming/ontimize-style.scss +18 -0
|
@@ -223,6 +223,8 @@ export class DefaultOTableDataSource extends DataSource {
|
|
|
223
223
|
return searchStr.indexOf(filter) !== -1;
|
|
224
224
|
}
|
|
225
225
|
getSortedData(data) {
|
|
226
|
+
if (!this._sort)
|
|
227
|
+
return data;
|
|
226
228
|
const rendererData = this.getDataToSort(data);
|
|
227
229
|
const sortedData = this._sort.getSortedData(rendererData);
|
|
228
230
|
const tableKeys = this.table.getKeys();
|
|
@@ -240,6 +242,7 @@ export class DefaultOTableDataSource extends DataSource {
|
|
|
240
242
|
i++;
|
|
241
243
|
}
|
|
242
244
|
});
|
|
245
|
+
this.table.updateSortingSubject(false);
|
|
243
246
|
return originalDataSorted;
|
|
244
247
|
}
|
|
245
248
|
getTableData() {
|
|
@@ -275,6 +278,8 @@ export class DefaultOTableDataSource extends DataSource {
|
|
|
275
278
|
});
|
|
276
279
|
}
|
|
277
280
|
getDataToSort(data) {
|
|
281
|
+
if (!this._sort)
|
|
282
|
+
return data;
|
|
278
283
|
const sortColumns = this._tableOptions.columns.filter(oCol => oCol.visible && this._sort.activeArray.map(x => x.id).indexOf(oCol.attr) > -1);
|
|
279
284
|
const existColumnToTrasformToSort = sortColumns.filter((oCol) => (oCol.type === 'translate' || oCol.type === 'service')).length > 0;
|
|
280
285
|
if (!existColumnToTrasformToSort) {
|
|
@@ -416,7 +421,7 @@ export class DefaultOTableDataSource extends DataSource {
|
|
|
416
421
|
if (normalizedValue.includes('*')) {
|
|
417
422
|
regExp = new RegExp('^' + normalizedValue.split('*').join('.*') + '$');
|
|
418
423
|
}
|
|
419
|
-
return colValues.some(colValue => regExp ? regExp.test(colValue) : colValue.includes(normalizedValue));
|
|
424
|
+
return colValues.some(colValue => regExp ? regExp.test(colValue) : colValue.toString().includes(normalizedValue));
|
|
420
425
|
});
|
|
421
426
|
break;
|
|
422
427
|
case ColumnValueFilterOperator.BETWEEN:
|
|
@@ -706,4 +711,4 @@ export class DefaultOTableDataSource extends DataSource {
|
|
|
706
711
|
return expansionState;
|
|
707
712
|
}
|
|
708
713
|
}
|
|
709
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1vLXRhYmxlLmRhdGFzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9leHRlbnNpb25zL2RlZmF1bHQtby10YWJsZS5kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTNELE9BQU8sRUFBRSx5QkFBeUIsRUFBc0IsTUFBTSxpREFBaUQsQ0FBQztBQUNoSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2pFLE1BQU0sT0FBTywwQkFBMEI7SUFHckMsWUFBWSxJQUFlO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxVQUFlO0lBRzFELElBQUksSUFBSSxLQUFZLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFxQnpELElBQUksV0FBVyxLQUFhLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLElBQUksV0FBVyxDQUFDLE1BQWM7UUFD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LENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDO0lBQ3hHLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxHQUFxQjtRQUM3QyxJQUFJLGNBQWMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUM7UUFDbkUsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsRUFBRTtZQUN6RCxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztTQUM5SDthQUFNO1lBQ0wsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLEdBQUcsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNoSixjQUFjLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7U0FDaEU7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhU291cmNlLCBMaXN0UmFuZ2UgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBPVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWRhdGFzb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9UYWJsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvciwgT0NvbHVtblZhbHVlRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tdmFsdWUtZmlsdGVyLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBPQ29sdW1uIH0gZnJvbSAnLi4vY29sdW1uL28tY29sdW1uLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL28tdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZURhbyB9IGZyb20gJy4vby10YWJsZS5kYW8nO1xuaW1wb3J0IHsgT1RhYmxlR3JvdXBlZFJvdyB9IGZyb20gJy4vcm93L28tdGFibGUtcm93LWdyb3VwLmNsYXNzJztcbmltcG9ydCB7IE9NYXRTb3J0IH0gZnJvbSAnLi9zb3J0L28tbWF0LXNvcnQnO1xuXG5leHBvcnQgY2xhc3MgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwge1xuICBwdWJsaWMgcmFuZ2U6IExpc3RSYW5nZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBMaXN0UmFuZ2UpIHtcbiAgICB0aGlzLnJhbmdlID0gZGF0YTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVmYXVsdE9UYWJsZURhdGFTb3VyY2UgZXh0ZW5kcyBEYXRhU291cmNlPGFueT4gaW1wbGVtZW50cyBPVGFibGVEYXRhU291cmNlIHtcbiAgZGF0YVRvdGFsc0NoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcblxuICBnZXQgZGF0YSgpOiBhbnlbXSB7IHJldHVybiB0aGlzLmRhdGFUb3RhbHNDaGFuZ2UudmFsdWU7IH1cblxuICBwcm90ZWN0ZWQgX2RhdGFiYXNlOiBPVGFibGVEYW87XG4gIHByb3RlY3RlZCBfcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG4gIHByb3RlY3RlZCBfdGFibGVPcHRpb25zOiBPVGFibGVPcHRpb25zO1xuICBwcm90ZWN0ZWQgX3NvcnQ6IE9NYXRTb3J0O1xuXG4gIHByb3RlY3RlZCBfdmlydHVhbFBhZ2VDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9uUmFuZ2VDaGFuZ2VWaXJ0dWFsU2Nyb2xsPihuZXcgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwoeyBzdGFydDogMCwgZW5kOiAwIH0pKTtcbiAgcHJvdGVjdGVkIF9xdWlja0ZpbHRlckNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICBwcm90ZWN0ZWQgX2NvbHVtblZhbHVlRmlsdGVyQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgcHJvdGVjdGVkIGdyb3VwQnlDb2x1bW5DaGFuZ2U6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPjtcblxuICBwcm90ZWN0ZWQgZmlsdGVyZWREYXRhOiBhbnlbXSA9IFtdO1xuICBwcm90ZWN0ZWQgYWdncmVnYXRlRGF0YTogYW55ID0ge307XG5cbiAgb25SZW5kZXJlZERhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cblxuICBwcm90ZWN0ZWQgX3JlbmRlcmVkRGF0YTogYW55W10gPSBbXTtcbiAgcmVzdWx0c0xlbmd0aDogbnVtYmVyID0gMDtcblxuICBnZXQgcXVpY2tGaWx0ZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX3F1aWNrRmlsdGVyQ2hhbmdlLnZhbHVlIHx8ICcnOyB9XG4gIHNldCBxdWlja0ZpbHRlcihmaWx0ZXI6IHN0cmluZykge1xuICAgIHRoaXMuX3F1aWNrRmlsdGVyQ2hhbmdlLm5leHQoZmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgY29sdW1uVmFsdWVGaWx0ZXJzOiBBcnJheTxPQ29sdW1uVmFsdWVGaWx0ZXI+ID0gW107XG4gIHByaXZhdGUgZ3JvdXBlZFJvd1N0YXRlOiBPVGFibGVHcm91cGVkUm93W10gPSBbXTtcbiAgcHJpdmF0ZSBhY3RpdmVBZ2dyZWdhdGVzID0ge307XG4gIHByaXZhdGUgZ3JvdXBlZFJvd3NTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgbGV2ZWxzRXhwYW5zaW9uU3RhdGUgPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgdGFibGU6IE9UYWJsZUNvbXBvbmVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZGF0YWJhc2UgPSB0YWJsZS5kYW9UYWJsZTtcbiAgICBpZiAodGhpcy5fZGF0YWJhc2UpIHtcbiAgICAgIHRoaXMucmVzdWx0c0xlbmd0aCA9IHRoaXMuX2RhdGFiYXNlLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAodGFibGUucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLl9wYWdpbmF0b3IgPSB0YWJsZS5tYXRwYWdpbmF0b3I7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGUudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnRhYmxlLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKHZhbHVlOiBMaXN0UmFuZ2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxQYWdlQ2hhbmdlLm5leHQobmV3IE9uUmFuZ2VDaGFuZ2VWaXJ0dWFsU2Nyb2xsKHZhbHVlKSk7XG4gICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGFibGVPcHRpb25zID0gdGFibGUub1RhYmxlT3B0aW9ucztcbiAgICB0aGlzLl9zb3J0ID0gdGFibGUuc29ydDtcblxuICB9XG5cbiAgc29ydEZ1bmN0aW9uKGE6IGFueSwgYjogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydC5zb3J0RnVuY3Rpb24oYSwgYik7XG4gIH1cblxuICBnZXQgcmVuZGVyZWREYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyZWREYXRhO1xuICB9XG5cbiAgc2V0IHJlbmRlcmVkRGF0YShhcmc6IGFueVtdKSB7XG4gICAgdGhpcy5fcmVuZGVyZWREYXRhID0gYXJnO1xuICAgIHRoaXMub25SZW5kZXJlZERhdGFDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbm5lY3QgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSB0YWJsZSB0byByZXRyaWV2ZSBvbmUgc3RyZWFtIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gcmVuZGVyLlxuICAgKi9cbiAgY29ubmVjdCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgY29uc3QgZGlzcGxheURhdGFDaGFuZ2VzOiBhbnlbXSA9IFtcbiAgICAgIHRoaXMuX2RhdGFiYXNlLmRhdGFDaGFuZ2VcbiAgICBdO1xuXG4gICAgaWYgKCF0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG5cblxuICAgICAgaWYgKHRoaXMuX3NvcnQpIHtcbiAgICAgICAgZGlzcGxheURhdGFDaGFuZ2VzLnB1c2godGhpcy5fc29ydC5vU29ydENoYW5nZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl90YWJsZU9wdGlvbnMuZmlsdGVyKSB7XG4gICAgICAgIGRpc3BsYXlEYXRhQ2hhbmdlcy5wdXNoKHRoaXMuX3F1aWNrRmlsdGVyQ2hhbmdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3BhZ2luYXRvcikge1xuICAgICAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0aGlzLl9wYWdpbmF0b3IucGFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGUudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0aGlzLl92aXJ0dWFsUGFnZUNoYW5nZSk7XG4gICAgfVxuXG4gICAgZGlzcGxheURhdGFDaGFuZ2VzLnB1c2godGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UpO1xuXG4gICAgaWYgKHRoaXMudGFibGUuZ3JvdXBhYmxlKSB7XG4gICAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZSguLi5kaXNwbGF5RGF0YUNoYW5nZXMpLnBpcGUoXG4gICAgICBtYXAoKHg6IGFueSkgPT4ge1xuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuX2RhdGFiYXNlLmRhdGEpO1xuXG4gICAgICAgIGlmICh4IGluc3RhbmNlb2YgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAvLyByZW5kZXIgc3Vic2V0IChyYW5nZSkgb2YgcmVuZGVyZWREYXRhIHdoZW4gbmV3IE9uUmFuZ2VDaGFuZ2VWaXJ0dWFsU2Nyb2xsIGV2ZW50IGlzIGVtaXR0ZWRcbiAgICAgICAgICBkYXRhID0gdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsRGF0YSh0aGlzLnJlbmRlcmVkRGF0YSwgeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLypcbiAgICAgICAgICAgIGl0IGlzIG5lY2Vzc2FyeSB0byBmaXJzdCBjYWxjdWxhdGUgdGhlIGNhbGN1bGF0ZWQgY29sdW1ucyBhbmRcbiAgICAgICAgICAgIHRoZW4gZmlsdGVyIGFuZCBzb3J0IHRoZSBkYXRhXG4gICAgICAgICAgKi9cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4aXN0c0FueUNhbGN1bGF0ZWRDb2x1bW4oKSkge1xuICAgICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRDb2x1bW5DYWxjdWxhdGVkRGF0YShkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG4gICAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldENvbHVtblZhbHVlRmlsdGVyRGF0YShkYXRhKTtcbiAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXJEYXRhKGRhdGEpO1xuICAgICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTb3J0ZWREYXRhKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IE9iamVjdC5hc3NpZ24oW10sIGRhdGEpO1xuXG4gICAgICAgICAgaWYgKHRoaXMudGFibGUucGFnZWFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsUmVjb3Jkc051bWJlciA9IHRoaXMudGFibGUuZ2V0VG90YWxSZWNvcmRzTnVtYmVyKCk7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNMZW5ndGggPSB0b3RhbFJlY29yZHNOdW1iZXIgIT09IHVuZGVmaW5lZCA/IHRvdGFsUmVjb3Jkc051bWJlciA6IGRhdGEubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNMZW5ndGggPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFBhZ2luYXRpb25EYXRhKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy50YWJsZS5ncm91cGFibGUgJiYgIVV0aWwuaXNBcnJheUVtcHR5KHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheSkgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRHcm91cGVkRGF0YShkYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnJlbmRlcmVkRGF0YSA9IGRhdGE7XG5cbiAgICAgICAgICAvKlxuICAgICAgICAgICAgd2hlbiB0aGUgZGF0YSBpcyB2ZXJ5IGxhcmdlLCB0aGUgYXBwbGljYXRpb24gY3Jhc2hlcyBzbyBpdCBnZXRzIGEgbGltaXRlZCByYW5nZSBvZiBkYXRhIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgICBiZWNhdXNlIGF0IG5leHQgdGhlIEN1c3RvbVZpcnR1YWxTY3JvbGxTdHJhdGVneSB3aWxsIGVtaXQgZXZlbnQgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGxcbiAgICAgICAgICAqL1xuICAgICAgICAgIGlmICh0aGlzLnRhYmxlLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCAmJiAhdGhpcy5fcGFnaW5hdG9yKSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsRGF0YShkYXRhLCBuZXcgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwoeyBzdGFydDogMCwgZW5kOiBDb2Rlcy5MSU1JVF9TQ1JPTExWSVJUVUFMIH0pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZURhdGEgPSB0aGlzLmdldEFnZ3JlZ2F0ZXNEYXRhKHRoaXMucmVuZGVyZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfSkpO1xuICB9XG5cbiAgZ2V0R3JvdXBlZERhdGEoZGF0YTogYW55W10pIHtcbiAgICBkYXRhID0gdGhpcy5nZXRTdWJHcm91cHNPZkdyb3VwZWRSb3coZGF0YSk7XG4gICAgLyoqIGRhdGEgY29udGFpbnMgcm93IGdyb3VwIGhlYWRlcnMgKE9UYWJsZUdyb3VwZWRSb3cpIGFuZCB0aGUgZGF0YSBiZWxvbmdpbmcgdG8gZXhwYW5kZWQgZ3JvdXBlZCByb3dzICovXG4gICAgZGF0YSA9IHRoaXMuZmlsdGVyQ29sbGFwc2VkUm93R3JvdXAoZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdWJncm91cHMgb2YgZ3JvdXBlZCByb3dcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHJldHVybnMgc3ViZ3JvdXBzIG9mIGdyb3VwZWQgcm93XG4gICAqL1xuICBnZXRTdWJHcm91cHNPZkdyb3VwZWRSb3coZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEgPSB0aGlzLmdldFN1YmxldmVsKGRhdGEsIDApO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlc0RhdGEoZGF0YTogYW55W10pOiBhbnkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl90YWJsZU9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogT0NvbHVtbikgPT4ge1xuICAgICAgbGV0IHRvdGFsVmFsdWUgPSAnJztcbiAgICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi52aXNpYmxlKSB7XG4gICAgICAgIHRvdGFsVmFsdWUgPSB0aGlzLmNhbGN1bGF0ZUFnZ3JlZ2F0ZShkYXRhLCBjb2x1bW4uYXR0ciwgY29sdW1uLmFnZ3JlZ2F0ZS5vcGVyYXRvcik7XG4gICAgICB9XG4gICAgICBjb25zdCBrZXkgPSBjb2x1bW4uYXR0cjtcbiAgICAgIG9ialtrZXldID0gdG90YWxWYWx1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRoYXQgZ2V0IHZhbHVlIHRoZSBjb2x1bW5zIGNhbGN1bGF0ZWRcbiAgICogQHBhcmFtIGRhdGEgZGF0YSBvZiB0aGUgZGF0YWJhc2VcbiAgICovXG4gIGdldENvbHVtbkNhbGN1bGF0ZWREYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRDb2xzID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKChvQ29sOiBPQ29sdW1uKSA9PiBvQ29sLnZpc2libGUgJiYgb0NvbC5jYWxjdWxhdGUgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIGRhdGEubWFwKChyb3c6IGFueSkgPT4ge1xuICAgICAgY2FsY3VsYXRlZENvbHMuZm9yRWFjaCgob0NvbHVtbjogT0NvbHVtbikgPT4ge1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2Ygb0NvbHVtbi5jYWxjdWxhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdmFsdWUgPSBzZWxmLnRyYW5zZm9ybUZvcm11bGEob0NvbHVtbi5jYWxjdWxhdGUsIHJvdyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9Db2x1bW4uY2FsY3VsYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFsdWUgPSBvQ29sdW1uLmNhbGN1bGF0ZShyb3cpO1xuICAgICAgICB9XG4gICAgICAgIHJvd1tvQ29sdW1uLmF0dHJdID0gaXNOYU4odmFsdWUpID8gMCA6IHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcm93O1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYW5zZm9ybUZvcm11bGEoZm9ybXVsYUFyZywgcm93KTogc3RyaW5nIHtcbiAgICBsZXQgZm9ybXVsYSA9IGZvcm11bGFBcmc7XG4gICAgLy8gMS4gcmVwbGFjZSBjb2x1bW5zIGJ5IHZhbHVlcyBvZiByb3dcbiAgICBjb25zdCBjb2x1bW5zQXR0ciA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLm1hcCgob0NvbDogT0NvbHVtbikgPT4gb0NvbC5hdHRyKTtcbiAgICBjb2x1bW5zQXR0ci5mb3JFYWNoKChjb2x1bW46IHN0cmluZykgPT4ge1xuICAgICAgZm9ybXVsYSA9IGZvcm11bGEucmVwbGFjZShjb2x1bW4sIHJvd1tjb2x1bW5dKTtcbiAgICB9KTtcblxuICAgIGxldCByZXN1bHRGb3JtdWxhID0gJyc7XG4gICAgLy8gMi4gVHJhbnNmb3JtIGZvcm11bGFcbiAgICB0cnkge1xuICAgICAgcmVzdWx0Rm9ybXVsYSA9IChuZXcgRnVuY3Rpb24oJ3JldHVybiAnICsgZm9ybXVsYSkpKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignT3BlcmF0aW9uIGRlZmluZWQgaW4gdGhlIGNhbGN1bGF0ZWQgY29sdW1uIGlzIGluY29ycmVjdCAnKTtcbiAgICB9XG4gICAgLy8gMy4gUmV0dXJuIHJlc3VsdFxuICAgIHJldHVybiByZXN1bHRGb3JtdWxhO1xuICB9XG5cbiAgZ2V0UXVpY2tGaWx0ZXJEYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyKSAmJiB0aGlzLnF1aWNrRmlsdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSAhdGhpcy5fdGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUgPyB0aGlzLnF1aWNrRmlsdGVyLnRvTG93ZXJDYXNlKCkgOiB0aGlzLnF1aWNrRmlsdGVyO1xuICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgLy8gR2V0dGluZyBjdXN0b20gY29sdW1ucyBmaWx0ZXIgY29sdW1ucyByZXN1bHRcbiAgICAgICAgY29uc3QgcGFzc0N1c3RvbUZpbHRlciA9IHRoaXMuZnVsZmlsbHNDdXN0b21GaWx0ZXJGdW5jdGlvbnMoZmlsdGVyRGF0YSwgaXRlbSk7XG4gICAgICAgIC8vIEdldHRpbmcgb3RoZXIgc2VhcmNoYWJsZSBjb2x1bW5zIHN0YW5kYXJkIHJlc3VsdFxuICAgICAgICBjb25zdCBwYXNzU2VhcmNoU3RyaW5nID0gdGhpcy5mdWxmaWxsc1F1aWNrZmlsdGVyKGZpbHRlckRhdGEsIGl0ZW0pO1xuICAgICAgICByZXR1cm4gcGFzc0N1c3RvbUZpbHRlciB8fCBwYXNzU2VhcmNoU3RyaW5nO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIGdldFBhZ2luYXRpb25EYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghdGhpcy5fcGFnaW5hdG9yIHx8IGlzTmFOKHRoaXMuX3BhZ2luYXRvci5wYWdlU2l6ZSkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBsZXQgc3RhcnRJbmRleCA9IGlzTmFOKHRoaXMuX3BhZ2luYXRvci5wYWdlU2l6ZSkgPyAwIDogdGhpcy5fcGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMuX3BhZ2luYXRvci5wYWdlU2l6ZTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwICYmIGRhdGEubGVuZ3RoIDwgc3RhcnRJbmRleCkge1xuICAgICAgc3RhcnRJbmRleCA9IDA7XG4gICAgICB0aGlzLl9wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuc3BsaWNlKHN0YXJ0SW5kZXgsIHRoaXMuX3BhZ2luYXRvci5wYWdlU2l6ZSk7XG4gIH1cblxuICBnZXRWaXJ0dWFsU2Nyb2xsRGF0YShkYXRhOiBhbnlbXSwgeDogT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEuc2xpY2UoeC5yYW5nZS5zdGFydCwgeC5yYW5nZS5lbmQpXG4gIH1cblxuICBkaXNjb25uZWN0KCkge1xuICAgIHRoaXMuZGF0YVRvdGFsc0NoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3F1aWNrRmlsdGVyQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLl92aXJ0dWFsUGFnZUNoYW5nZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZ1bGZpbGxzQ3VzdG9tRmlsdGVyRnVuY3Rpb25zKGZpbHRlcjogc3RyaW5nLCBpdGVtOiBhbnkpIHtcbiAgICBjb25zdCBjdXN0b21GaWx0ZXJDb2xzID0gdGhpcy50YWJsZS5vVGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKG9Db2wgPT4gb0NvbC51c2VDdXN0b21GaWx0ZXJGdW5jdGlvbigpKTtcbiAgICByZXR1cm4gY3VzdG9tRmlsdGVyQ29scy5zb21lKG9Db2wgPT4gb0NvbC5yZW5kZXJlci5maWx0ZXJGdW5jdGlvbihpdGVtW29Db2wuYXR0cl0sIGl0ZW0sIGZpbHRlcikpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZ1bGZpbGxzUXVpY2tmaWx0ZXIoZmlsdGVyOiBzdHJpbmcsIGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIoKG9Db2w6IE9Db2x1bW4pID0+IG9Db2wudXNlUXVpY2tmaWx0ZXJGdW5jdGlvbigpKTtcbiAgICBsZXQgc2VhcmNoU3RyID0gY29sdW1ucy5tYXAoKG9Db2w6IE9Db2x1bW4pID0+IG9Db2wuZ2V0RmlsdGVyVmFsdWUoaXRlbVtvQ29sLmF0dHJdLCBpdGVtKS5qb2luKCcgJykpLmpvaW4oJyAnKTtcbiAgICBpZiAoIXRoaXMuX3RhYmxlT3B0aW9ucy5maWx0ZXJDYXNlU2Vuc2l0aXZlKSB7XG4gICAgICBzZWFyY2hTdHIgPSBzZWFyY2hTdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlYXJjaFN0ci5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYSBzb3J0ZWQgY29weSBvZiB0aGUgZGF0YWJhc2UgZGF0YS4gKi9cbiAgcHJvdGVjdGVkIGdldFNvcnRlZERhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgcmVuZGVyZXJEYXRhID0gdGhpcy5nZXREYXRhVG9Tb3J0KGRhdGEpO1xuICAgIGNvbnN0IHNvcnRlZERhdGEgPSB0aGlzLl9zb3J0LmdldFNvcnRlZERhdGEocmVuZGVyZXJEYXRhKTtcblxuICAgIGNvbnN0IHRhYmxlS2V5cyA9IHRoaXMudGFibGUuZ2V0S2V5cygpO1xuICAgIGNvbnN0IG9yaWdpbmFsRGF0YVNvcnRlZCA9IFtdO1xuXG4gICAgc29ydGVkRGF0YS5mb3JFYWNoKHNvcnRlZEVsZW1lbnQgPT4ge1xuICAgICAgY29uc3Qga2V5c1ZhbHVlc0luU29ydERhdGEgPSB0YWJsZUtleXMubWFwKGVsZW1lbnQgPT4gc29ydGVkRWxlbWVudFtlbGVtZW50XSk7XG5cbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKGkgPCBkYXRhLmxlbmd0aCAmJiAhZm91bmQpIHtcbiAgICAgICAgY29uc3Qga2V5c1ZhbHVlc0luRGF0YSA9IHRhYmxlS2V5cy5tYXAoZWxlbWVudCA9PiBkYXRhW2ldW2VsZW1lbnRdKTtcbiAgICAgICAgaWYgKFV0aWwuaXNBcnJheUVxdWFsKGtleXNWYWx1ZXNJblNvcnREYXRhLCBrZXlzVmFsdWVzSW5EYXRhKSkge1xuICAgICAgICAgIG9yaWdpbmFsRGF0YVNvcnRlZC5wdXNoKGRhdGFbaV0pO1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9yaWdpbmFsRGF0YVNvcnRlZDtcblxuICB9XG5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZGF0YSB0aGUgdGFibGUgc3RvcmVzLiBObyBmaWx0ZXJzIGFyZSBhcHBsaWVkLlxuICAgKi9cbiAgZ2V0VGFibGVEYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YWJhc2UuZGF0YTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gZGF0YSBvZiB0aGUgdmlzaWJsZSBjb2x1bW5zIG9mIHRoZSB0YWJsZSB3aXRob3V0IHJlbmRlcmluZyAqL1xuICBnZXRDdXJyZW50RGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YSgpO1xuICB9XG5cbiAgZ2V0Q3VycmVudEFsbERhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbERhdGEoZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gZGF0YSBvZiB0aGUgdmlzaWJsZSBjb2x1bW5zIG9mIHRoZSB0YWJsZSAgcmVuZGVyaW5nICovXG4gIGdldEN1cnJlbnRSZW5kZXJlckRhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmdldFJlbmRlcmVkRGF0YSh0aGlzLnJlbmRlcmVkRGF0YSk7XG4gIH1cblxuICAvKiogUmV0dXJuIGFsbCBkYXRhIG9mIHRoZSB0YWJsZSByZW5kZXJpbmcgKi9cbiAgZ2V0QWxsUmVuZGVyZXJEYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxEYXRhKHRydWUsIHRydWUpO1xuICB9XG5cbiAgLyoqIFJldHVybiBzcWwgdHlwZXMgb2YgdGhlIGN1cnJlbnQgZGF0YSAqL1xuICBnZXQgc3FsVHlwZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YWJhc2Uuc3FsVHlwZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZERhdGE7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVuZGVyZWREYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKG9Db2wgPT4gb0NvbC52aXNpYmxlKTtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICB2aXNpYmxlQ29sdW1ucy5mb3JFYWNoKChvQ29sOiBPQ29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZVJlbmRlcmVyID0gb0NvbC5yZW5kZXJlciAmJiBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhO1xuICAgICAgICBvYmpbb0NvbC5hdHRyXSA9IHVzZVJlbmRlcmVyID8gb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YShyb3dbb0NvbC5hdHRyXSwgcm93KSA6IHJvd1tvQ29sLmF0dHJdO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXREYXRhVG9Tb3J0KGRhdGE6IGFueVtdKTogYW55W10ge1xuXG4gICAgY29uc3Qgc29ydENvbHVtbnMgPSB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIob0NvbCA9PiBvQ29sLnZpc2libGUgJiYgdGhpcy5fc29ydC5hY3RpdmVBcnJheS5tYXAoeCA9PiB4LmlkKS5pbmRleE9mKG9Db2wuYXR0cikgPiAtMSk7XG4gICAgY29uc3QgZXhpc3RDb2x1bW5Ub1RyYXNmb3JtVG9Tb3J0ID0gc29ydENvbHVtbnMuZmlsdGVyKChvQ29sOiBPQ29sdW1uKSA9PiAob0NvbC50eXBlID09PSAndHJhbnNsYXRlJyB8fCBvQ29sLnR5cGUgPT09ICdzZXJ2aWNlJykpLmxlbmd0aCA+IDA7XG4gICAgaWYgKCFleGlzdENvbHVtblRvVHJhc2Zvcm1Ub1NvcnQpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICB0aGlzLnRhYmxlLmdldEtleXMoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBzb3J0Q29sdW1ucy5wdXNoKHRoaXMudGFibGUuZ2V0T0NvbHVtbihrZXkpKTtcbiAgICB9KVxuXG4gICAgcmV0dXJuIGRhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgc29ydENvbHVtbnMuZm9yRWFjaCgob0NvbDogT0NvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCB1c2VSZW5kZXJlciA9IG9Db2wucmVuZGVyZXIgJiYgKG9Db2wudHlwZSA9PT0gJ3RyYW5zbGF0ZScgfHwgb0NvbC50eXBlID09PSAnc2VydmljZScpICYmIG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGE7XG4gICAgICAgIG9ialtvQ29sLmF0dHJdID0gdXNlUmVuZGVyZXIgPyBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhKHJvd1tvQ29sLmF0dHJdLCByb3cpIDogcm93W29Db2wuYXR0cl07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QWxsRGF0YSh1c2luZ1JlbmRlcmVyZXJzPzogYm9vbGVhbiwgb25seVZpc2libGVDb2x1bW5zPzogYm9vbGVhbikge1xuICAgIGxldCB0YWJsZUNvbHVtbnMgPSB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucztcbiAgICBpZiAob25seVZpc2libGVDb2x1bW5zKSB7XG4gICAgICB0YWJsZUNvbHVtbnMgPSB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIob0NvbCA9PiBvQ29sLnZpc2libGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZERhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgdGFibGVDb2x1bW5zLmZvckVhY2goKG9Db2w6IE9Db2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgdXNlUmVuZGVyZXIgPSB1c2luZ1JlbmRlcmVyZXJzICYmIG9Db2wucmVuZGVyZXIgJiYgb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YTtcbiAgICAgICAgb2JqW29Db2wuYXR0cl0gPSB1c2VSZW5kZXJlciA/IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdykgOiByb3dbb0NvbC5hdHRyXTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVuZGVyZXJzRGF0YShkYXRhOiBhbnlbXSwgdGFibGVDb2x1bW5zOiBPQ29sdW1uW10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIC8vIHJlbmRlciBlYWNoIGNvbHVtblxuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgcm93KTtcbiAgICAgIHRhYmxlQ29sdW1ucy5mb3JFYWNoKChvQ29sOiBPQ29sdW1uKSA9PiB7XG4gICAgICAgIG9ialtvQ29sLmF0dHJdID0gb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YShyb3dbb0NvbC5hdHRyXSwgcm93KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5EYXRhKG9jb2x1bW46IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJlbmRlcmVkRGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgLy8gcmVuZGVyIGVhY2ggY29sdW1uXG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIGlmIChvY29sdW1uKSB7XG4gICAgICAgIG9ialtvY29sdW1uXSA9IHJvd1tvY29sdW1uXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG4gIH1cblxuICBpbml0aWFsaXplQ29sdW1uc0ZpbHRlcnMoZmlsdGVyczogT0NvbHVtblZhbHVlRmlsdGVyW10pIHtcbiAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycyA9IFtdO1xuICAgIGZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH0pO1xuICAgIGlmICghdGhpcy50YWJsZS5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UubmV4dChudWxsKTtcbiAgICB9XG4gIH1cblxuICBpc0NvbHVtblZhbHVlRmlsdGVyQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5sZW5ndGggIT09IDA7XG4gIH1cblxuICBnZXRDb2x1bW5WYWx1ZUZpbHRlcnMoKTogT0NvbHVtblZhbHVlRmlsdGVyW10ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblZhbHVlRmlsdGVycztcbiAgfVxuXG4gIGdldENvbHVtblZhbHVlRmlsdGVyQnlBdHRyKGF0dHI6IHN0cmluZyk6IE9Db2x1bW5WYWx1ZUZpbHRlciB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmZpbmQoaXRlbSA9PiBpdGVtLmF0dHIgPT09IGF0dHIpO1xuICB9XG5cbiAgY2xlYXJDb2x1bW5GaWx0ZXJzKHRyaWdnZXI6IGJvb2xlYW4gPSB0cnVlLCBjb2x1bW5zQXR0cj86IHN0cmluZ1tdKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbnNBdHRyKSkge1xuICAgICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMgPSB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5maWx0ZXIoeCA9PiAhY29sdW1uc0F0dHIuaW5jbHVkZXMoeC5hdHRyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzID0gW107XG4gICAgfVxuICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICB0aGlzLl9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZS5uZXh0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQ29sdW1uRmlsdGVyKGF0dHI6IHN0cmluZywgdHJpZ2dlcjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycyA9IHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmZpbHRlcih4ID0+IHguYXR0ciAhPT0gYXR0cik7XG4gICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgIHRoaXMuX2NvbHVtblZhbHVlRmlsdGVyQ2hhbmdlLm5leHQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgYWRkQ29sdW1uRmlsdGVyKGZpbHRlcjogT0NvbHVtblZhbHVlRmlsdGVyKSB7XG4gICAgY29uc3QgZXhpc3RpbmdGaWx0ZXJJbmRleCA9IHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uYXR0ciA9PT0gZmlsdGVyLmF0dHIpO1xuICAgIGlmIChleGlzdGluZ0ZpbHRlckluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLnNwbGljZShleGlzdGluZ0ZpbHRlckluZGV4LCAxLCBmaWx0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdmFsaWRGaWx0ZXIgPSBVdGlsLmlzRGVmaW5lZChmaWx0ZXIudmFsdWVzKTtcbiAgICAgIGlmICh2YWxpZEZpbHRlcikge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci5vcGVyYXRvcikge1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5JTjpcbiAgICAgICAgICAgIHZhbGlkRmlsdGVyID0gZmlsdGVyLnZhbHVlcy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkJFVFdFRU46XG4gICAgICAgICAgICB2YWxpZEZpbHRlciA9IGZpbHRlci52YWx1ZXMubGVuZ3RoID09PSAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkVRVUFMOlxuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5MRVNTX0VRVUFMOlxuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5NT1JFX0VRVUFMOlxuICAgICAgICAgICAgdmFsaWRGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhbGlkRmlsdGVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkRmlsdGVyKSB7XG4gICAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSB0YWJsZSBpcyBwYWdpbmF0ZWQsIGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgb24gcmVtb3RlIHF1ZXJ5XG4gICAgaWYgKCF0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLl9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZS5uZXh0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbHVtblZhbHVlRmlsdGVyRGF0YShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJDb2x1bW4gPSB0aGlzLnRhYmxlLm9UYWJsZU9wdGlvbnMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuYXR0ciA9PT0gZmlsdGVyLmF0dHIpO1xuICAgICAgaWYgKGZpbHRlckNvbHVtbikge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci5vcGVyYXRvcikge1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5JTjpcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclZhbHVlcyA9IChmaWx0ZXIudmFsdWVzIHx8IFtdKS5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PlxuICAgICAgICAgICAgICBwcmV2aW91cy5jb25jYXQoZmlsdGVyQ29sdW1uLmdldEZpbHRlclZhbHVlKGN1cnJlbnQpLm1hcChmID0+IFV0aWwubm9ybWFsaXplU3RyaW5nKGYpKSksIFtdKTtcblxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZpbHRlckNvbHVtbi5yZW5kZXJlciAmJiBmaWx0ZXJDb2x1bW4ucmVuZGVyZXIuZmlsdGVyRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyQ29sdW1uLnJlbmRlcmVyLmZpbHRlckZ1bmN0aW9uKGl0ZW1bZmlsdGVyLmF0dHJdLCBpdGVtKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWx1ZXMgPSBmaWx0ZXJDb2x1bW4uZ2V0RmlsdGVyVmFsdWUoaXRlbVtmaWx0ZXIuYXR0cl0sIGl0ZW0pLm1hcChmID0+IFV0aWwubm9ybWFsaXplU3RyaW5nKGYpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyVmFsdWVzLnNvbWUodmFsdWUgPT4gY29sVmFsdWVzLmluZGV4T2YodmFsdWUpICE9PSAtMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkVRVUFMOlxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gVXRpbC5ub3JtYWxpemVTdHJpbmcoZmlsdGVyLnZhbHVlcyk7XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbFZhbHVlcyA9IGZpbHRlckNvbHVtbi5nZXRGaWx0ZXJWYWx1ZShpdGVtW2ZpbHRlci5hdHRyXSwgaXRlbSkubWFwKGYgPT4gVXRpbC5ub3JtYWxpemVTdHJpbmcoZikpO1xuICAgICAgICAgICAgICBsZXQgcmVnRXhwO1xuICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFZhbHVlLmluY2x1ZGVzKCcqJykpIHtcbiAgICAgICAgICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKCdeJyArIG5vcm1hbGl6ZWRWYWx1ZS5zcGxpdCgnKicpLmpvaW4oJy4qJykgKyAnJCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBjb2xWYWx1ZXMuc29tZShjb2xWYWx1ZSA9PiByZWdFeHAgPyByZWdFeHAudGVzdChjb2xWYWx1ZSkgOiBjb2xWYWx1ZS5pbmNsdWRlcyhub3JtYWxpemVkVmFsdWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkJFVFdFRU46XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtW2ZpbHRlci5hdHRyXSA+PSBmaWx0ZXIudmFsdWVzWzBdICYmIGl0ZW1bZmlsdGVyLmF0dHJdIDw9IGZpbHRlci52YWx1ZXNbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLk1PUkVfRVFVQUw6XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtW2ZpbHRlci5hdHRyXSA+PSBmaWx0ZXIudmFsdWVzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5MRVNTX0VRVUFMOlxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbVtmaWx0ZXIuYXR0cl0gPD0gZmlsdGVyLnZhbHVlcyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlRGF0YShjb2x1bW46IE9Db2x1bW4pIHtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBsZXQgdG90YWxWYWx1ZSA9ICcnO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl90YWJsZU9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IEFycmF5KG9iaik7XG4gICAgfVxuICAgIHRvdGFsVmFsdWUgPSB0aGlzLmFnZ3JlZ2F0ZURhdGFbY29sdW1uLmF0dHJdO1xuICAgIHJldHVybiB0b3RhbFZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZUFnZ3JlZ2F0ZShkYXRhOiBhbnlbXSwgY29sdW1uQXR0cjogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nIHwgRnVuY3Rpb24pOiBhbnkge1xuICAgIGxldCByZXN1bHRBZ2dyZWdhdGU7XG4gICAgaWYgKHR5cGVvZiBvcGVyYXRvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHN3aXRjaCAob3BlcmF0b3IudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdjb3VudCc6XG4gICAgICAgICAgcmVzdWx0QWdncmVnYXRlID0gdGhpcy5jb3VudChjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWluJzpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLm1pbihjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWF4JzpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLm1heChjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXZnJzpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLmF2Zyhjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLnN1bShjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29sdW1uRGF0YTogYW55W10gPSB0aGlzLmdldENvbHVtbkRhdGEoY29sdW1uQXR0cik7XG4gICAgICBpZiAodHlwZW9mIG9wZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc3VsdEFnZ3JlZ2F0ZSA9IG9wZXJhdG9yKGNvbHVtbkRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0QWdncmVnYXRlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1bShjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIC8vSWYgdGhlIGRhdGEgaXMgZ3JvdXBlZCwgdGhlIHZhbHVlcyDigIvigItvZiB0aGUgc3ViZ3JvdXBzIGluIGxldmVsIDEgYXJlIHN1bW1lZFxuICAgICAgaWYgKGRhdGFbMF0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgICAgIHRoaXMuZ2V0RGF0YUZyb21GaXJzdExldmVsVGFibGVHcm91cFJvdyhkYXRhKS5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgIHZhbHVlID0geC5nZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbikucmVkdWNlKChhY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY3VtdWxhdG9yICsgKGlzTmFOKGN1cnJlbnRWYWx1ZVtjb2x1bW5dKSA/IDAgOiBjdXJyZW50VmFsdWVbY29sdW1uXSk7XG4gICAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZGF0YS5yZWR1Y2UoKGFjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhY3VtdWxhdG9yICsgKGlzTmFOKGN1cnJlbnRWYWx1ZVtjb2x1bW5dKSA/IDAgOiBjdXJyZW50VmFsdWVbY29sdW1uXSk7XG4gICAgICAgIH0sIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICsodmFsdWUpLnRvRml4ZWQoMik7XG4gIH1cblxuICBwcm90ZWN0ZWQgY291bnQoY29sdW1uLCBkYXRhKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsdWUgPSAwO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICAvL0lmIHRoZSBkYXRhIGlzIGdyb3VwZWQsIHRoZSBjb3VudCBpcyBjYWxjdWxhdGVkIGJ5IGFkZGluZyB0aGUgY291bnRzIGZvciBlYWNoIHN1Ymdyb3VwIGluIGxldmVsIDFcbiAgICAgIGlmIChkYXRhWzBdIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykge1xuICAgICAgICB0aGlzLmdldERhdGFGcm9tRmlyc3RMZXZlbFRhYmxlR3JvdXBSb3coZGF0YSkuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICB2YWx1ZSA9IHguZ2V0Q29sdW1uQWdncmVnYXRlRGF0YShjb2x1bW4pLnJlZHVjZSgoYWN1bXVsYXRvcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFjdW11bGF0b3IgKyAxO1xuICAgICAgICAgIH0sIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRhdGEucmVkdWNlKChhY3VtdWxhdG9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjdW11bGF0b3IgKyAxO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF2Zyhjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsU3VtID0gdGhpcy5zdW0oY29sdW1uLCBkYXRhKTtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5jb3VudChjb2x1bW4sIGRhdGEpO1xuICAgIHJldHVybiArKCh0b3RhbFN1bSA9PT0gMCB8fCB0b3RhbENvdW50ID09PSAwKSA/IDAgOiAodG90YWxTdW0gLyB0b3RhbENvdW50KSkudG9GaXhlZCgyKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIG1pbihjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGxldCB0ZW1wTWluID0gW107XG4gICAgLy9JZiB0aGUgZGF0YSBpcyBncm91cGVkLCB0aGUgbWluaW11bSBpcyBjYWxjdWxhdGVkIHdpdGggdGhlIG1pbmltdW0gb2YgZWFjaCBzdWJncm91cCBpbiBsZXZlbCAxXG4gICAgaWYgKGRhdGFbMF0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgICB0ZW1wTWluID0gdGhpcy5nZXREYXRhRnJvbUZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KGRhdGEpLm1hcCh4ID0+IHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKC4uLnguZ2V0Q29sdW1uQWdncmVnYXRlRGF0YShjb2x1bW4pLm1hcCh4ID0+IHhbY29sdW1uXSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlbXBNaW4gPSBkYXRhLm1hcCh4ID0+IHhbY29sdW1uXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBNaW4ubGVuZ3RoID4gMCA/IE1hdGgubWluKC4uLnRlbXBNaW4pIDogMDtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXgoY29sdW1uLCBkYXRhKTogbnVtYmVyIHtcbiAgICBsZXQgdGVtcE1heCA9IFtdO1xuICAgIGlmIChkYXRhWzBdIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykge1xuICAgICAgLy9JZiB0aGUgZGF0YSBhcmUgZ3JvdXBlZCwgdGhlIG1heGltdW0gaXMgY2FsY3VsYXRlZCB3aXRoIHRoZSBtYXhpbXVtIG9mIGVhY2ggc3ViZ3JvdXAgaW4gbGV2ZWwgMVxuICAgICAgdGVtcE1heCA9IHRoaXMuZ2V0RGF0YUZyb21GaXJzdExldmVsVGFibGVHcm91cFJvdyhkYXRhKS5tYXAoeCA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCguLi54LmdldENvbHVtbkFnZ3JlZ2F0ZURhdGEoY29sdW1uKS5tYXAoeCA9PiB4W2NvbHVtbl0pKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wTWF4ID0gZGF0YS5tYXAoeCA9PiB4W2NvbHVtbl0pO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcE1heC5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4udGVtcE1heCkgOiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KHRhYmxlUm93R3JvdXBEYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGFibGVSb3dHcm91cERhdGEgaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93ICYmIHRhYmxlUm93R3JvdXBEYXRhLmxldmVsID09PSAxO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXRhRnJvbUZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KGRhdGE6IGFueSkge1xuICAgIHJldHVybiBkYXRhLmZpbHRlcih4ID0+IHRoaXMuaXNGaXJzdExldmVsVGFibGVHcm91cFJvdyh4KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXhpc3RzQW55Q2FsY3VsYXRlZENvbHVtbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZmluZCgob0NvbDogT0NvbHVtbikgPT4gb0NvbC5jYWxjdWxhdGUgIT09IHVuZGVmaW5lZCkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHVwZGF0ZVJlbmRlcmVkUm93RGF0YShyb3dEYXRhOiBhbnkpIHtcbiAgICBjb25zdCB0YWJsZUtleXMgPSB0aGlzLnRhYmxlLmdldEtleXMoKTtcbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLnJlbmRlcmVkRGF0YS5maW5kKChkYXRhOiBhbnkpID0+IHtcbiAgICAgIGxldCBmb3VuZCA9IHRydWU7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGFibGVLZXlzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRhYmxlS2V5c1tpXTtcbiAgICAgICAgaWYgKGRhdGFba2V5XSAhPT0gcm93RGF0YVtrZXldKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH0pO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChyZWNvcmQpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgcm93RGF0YSk7XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIGdldERhdGFJbmZvcm1hdGlvbkJ5R3JvdXAoZGF0YTogYW55W10sIGxldmVsOiBudW1iZXIpIHtcbiAgICBjb25zdCByZWNvcmRIYXNoID0ge307XG4gICAgZGF0YS5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICAgIGNvbnN0IGtleXMgPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGxldmVsOyBpKyspIHtcbiAgICAgICAga2V5c1t0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXlbaV1dID0gdGhpcy50YWJsZS5nZXRDb2x1bW5EYXRhQnlBdHRyKHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtpXSwgcm93KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY29yZEtleSA9IEpTT04uc3RyaW5naWZ5KGtleXMpO1xuICAgICAgaWYgKHJlY29yZEhhc2guaGFzT3duUHJvcGVydHkocmVjb3JkS2V5KSkge1xuICAgICAgICByZWNvcmRIYXNoW3JlY29yZEtleV0ucHVzaChpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZEhhc2hbcmVjb3JkS2V5XSA9IFtpXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVjb3JkSGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVDb2x1bW5BZ2dyZWdhdGUoY29sdW1uQXR0cjogc3RyaW5nLCByb3c6IE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICBjb25zdCBhZ2dyZWdhdGVDb25mID0gcm93LmdldEFjdGl2ZUNvbHVtbkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24oY29sdW1uQXR0cik7XG4gICAgY29uc3QgZGF0YSA9IHJvdy5nZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbkF0dHIpO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYWxjdWxhdGVBZ2dyZWdhdGUoZGF0YSwgYWdncmVnYXRlQ29uZi5hdHRyLCBhZ2dyZWdhdGVDb25mLmFnZ3JlZ2F0ZUZ1bmN0aW9uIHx8IGFnZ3JlZ2F0ZUNvbmYuYWdncmVnYXRlKTtcbiAgICByb3cuc2V0Q29sdW1uQWdncmVnYXRlVmFsdWUoY29sdW1uQXR0ciwgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdWJsZXZlbChkYXRhOiBhbnlbXSwgbGV2ZWw6IG51bWJlciwgcGFyZW50PzogT1RhYmxlR3JvdXBlZFJvdyk6IGFueVtdIHtcbiAgICBpZiAobGV2ZWwgPj0gdGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IHJlY29yZEhhc2ggPSB0aGlzLmdldERhdGFJbmZvcm1hdGlvbkJ5R3JvdXAoZGF0YSwgbGV2ZWwpO1xuXG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIE9iamVjdC5rZXlzKHJlY29yZEhhc2gpLmZvckVhY2gocmVjb3JkS2V5ID0+IHtcblxuICAgICAgY29uc3Qgcm93ID0gbmV3IE9UYWJsZUdyb3VwZWRSb3coe1xuICAgICAgICBjb2x1bW46IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtsZXZlbF0sXG4gICAgICAgIGtleXNBc1N0cmluZzogcmVjb3JkS2V5LFxuICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICBwYXJlbnQ6IHBhcmVudFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZ3JvdXBlZFJvd3NTdWJzY3JpcHRpb24uYWRkKHJvdy5hZ2dyZWdhdGVGdW5jdGlvbkNoYW5nZS5zdWJzY3JpYmUoYXJnID0+IHtcbiAgICAgICAgaWYgKGFyZy5jaGFuZ2VBbGxHcm91cGVkUm93cykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlQWdncmVnYXRlc1thcmcuY29sdW1uQXR0cl0gPSBhcmcuYWN0aXZlQWdncmVnYXRlO1xuICAgICAgICAgIHRoaXMucmVuZGVyZWREYXRhLmZpbHRlcihyb3cgPT4gcm93IGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgcm93LnNldENvbHVtbkFjdGl2ZUFnZ3JlZ2F0ZUZ1bmN0aW9uKGFyZy5jb2x1bW5BdHRyLCBhcmcuYWN0aXZlQWdncmVnYXRlLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQ29sdW1uQWdncmVnYXRlKGFyZy5jb2x1bW5BdHRyLCByb3cpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVDb2x1bW5BZ2dyZWdhdGUoYXJnLmNvbHVtbkF0dHIsIGFyZy5yb3cpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICBjb25zdCBhZmZlY3RlZEluZGV4ZXMgPSByZWNvcmRIYXNoW3Jvdy5rZXlzQXNTdHJpbmddO1xuICAgICAgY29uc3QgZ3JvdXBEYXRhID0gZGF0YS5maWx0ZXIoKHJvdywgaW5kZXgpID0+IGFmZmVjdGVkSW5kZXhlcy5pbmNsdWRlcyhpbmRleCkpO1xuICAgICAgdGhpcy50YWJsZS52aXNpYmxlQ29sQXJyYXkuZm9yRWFjaCgoY29sdW1uQXR0ciwgaSkgPT4ge1xuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIHJvdy50aXRsZSA9IHRoaXMuZ2V0VGV4dEdyb3VwUm93KHJvdywgYWZmZWN0ZWRJbmRleGVzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNlQ29sdW1uQWdncmVnYXRlID0gdGhpcy50YWJsZS51c2VDb2x1bW5Hcm91cGluZ0FnZ3JlZ2F0ZShjb2x1bW5BdHRyKTtcbiAgICAgICAgaWYgKHVzZUNvbHVtbkFnZ3JlZ2F0ZSkge1xuICAgICAgICAgIHJvdy5pbml0aWFsaXplQ29sdW1uQWdncmVnYXRlKGNvbHVtbkF0dHIsIHRoaXMudGFibGUuZ2V0Q29sdW1uR3JvdXBpbmdDb21wb25lbnQoY29sdW1uQXR0cikpO1xuXG4gICAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuYWN0aXZlQWdncmVnYXRlc1tjb2x1bW5BdHRyXSkpIHtcbiAgICAgICAgICAgIHJvdy5zZXRDb2x1bW5BY3RpdmVBZ2dyZWdhdGVGdW5jdGlvbihjb2x1bW5BdHRyLCB0aGlzLmFjdGl2ZUFnZ3JlZ2F0ZXNbY29sdW1uQXR0cl0sIGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocm93Lmhhc0FjdGl2ZUFnZ3JlZ2F0ZShjb2x1bW5BdHRyKSkge1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRlRGF0YSA9IGdyb3VwRGF0YS5tYXAoeCA9PiB7IGNvbnN0IG9iaiA9IHt9OyBvYmpbY29sdW1uQXR0cl0gPSB4W2NvbHVtbkF0dHJdOyByZXR1cm4gb2JqOyB9KTtcbiAgICAgICAgICAgIHJvdy5zZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbkF0dHIsIGFnZ3JlZ2F0ZURhdGEpO1xuXG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVDb25mID0gcm93LmdldEFjdGl2ZUNvbHVtbkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24oY29sdW1uQXR0cik7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY2FsY3VsYXRlQWdncmVnYXRlKGFnZ3JlZ2F0ZURhdGEsIGFnZ3JlZ2F0ZUNvbmYuYXR0ciwgYWdncmVnYXRlQ29uZi5hZ2dyZWdhdGVGdW5jdGlvbiB8fCBhZ2dyZWdhdGVDb25mLmFnZ3JlZ2F0ZSk7XG4gICAgICAgICAgICByb3cuc2V0Q29sdW1uQWdncmVnYXRlVmFsdWUoY29sdW1uQXR0ciwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByb3cuZXhwYW5kZWQgPSB0aGlzLmdldEV4cGFuc2lvblN0YXRlKHJvdyk7XG4gICAgICBjb25zdCBzdWJHcm91cCA9IHRoaXMuZ2V0U3VibGV2ZWwoZ3JvdXBEYXRhLCBsZXZlbCArIDEsIHJvdyk7XG4gICAgICBzdWJHcm91cC51bnNoaWZ0KHJvdyk7XG4gICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHN1Ykdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgY29sbGFwc2VkIHJvdyBncm91cFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcmV0dXJucyBjb2xsYXBzZWQgcm93IGdyb3VwXG4gICAqL1xuICBmaWx0ZXJDb2xsYXBzZWRSb3dHcm91cChkYXRhOiBhbnkpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4gKHJvdyBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpID8gcm93LnZpc2libGUgOiB0aGlzLmJlbG9uZ3NUb0V4cGFuZGVkR3JvdXBlZFJvdyhkYXRhLCByb3cpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWxvbmdzIHRvIGFuIGV4cGFuZGVkIGdyb3VwZWQgcm93XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0byBleHBhbmRlZCBncm91cGVkIHJvd1xuICAgKi9cbiAgYmVsb25nc1RvRXhwYW5kZWRHcm91cGVkUm93KGRhdGE6IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgcGFyZW50OiBPVGFibGVHcm91cGVkUm93O1xuICAgIGxldCBtYXRjaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0aCAmJiAhbWF0Y2g7IGluZGV4KyspIHtcbiAgICAgIGlmIChkYXRhW2luZGV4XSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICAgICAgcGFyZW50ID0gZGF0YVtpbmRleF07XG4gICAgICB9IGVsc2UgaWYgKFV0aWwuaXNFcXVpdmFsZW50KGRhdGFbaW5kZXhdLCByb3cpKSB7XG4gICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHBhcmVudCkgPyAocGFyZW50LnZpc2libGUgJiYgcGFyZW50LmV4cGFuZGVkKSA6IHRydWU7XG4gIH1cblxuICB1cGRhdGVHcm91cGVkQ29sdW1ucygpIHtcbiAgICB0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgZ3JvdXAgYnkgY29sdW1uXG4gICAqIEBwYXJhbSByb3dHcm91cFxuICAgKi9cbiAgdG9nZ2xlR3JvdXBCeUNvbHVtbihyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdykge1xuICAgIGlmIChyb3dHcm91cC5leHBhbmRTYW1lTGV2ZWwodGhpcy50YWJsZS5leHBhbmRHcm91cHNTYW1lTGV2ZWwpKSB7XG4gICAgICB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvd0dyb3VwLmxldmVsXSA9ICFyb3dHcm91cC5leHBhbmRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZVJvd0dyb3VwZWQocm93R3JvdXApO1xuICAgIH1cbiAgICB0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UubmV4dCgpO1xuICB9XG5cbiAgc2V0Um93R3JvdXBMZXZlbEV4cGFuc2lvbihyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdywgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvd0dyb3VwLmxldmVsXSA9IHZhbHVlO1xuICAgIHRoaXMuZ3JvdXBCeUNvbHVtbkNoYW5nZS5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlUm93R3JvdXBlZChyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdykge1xuICAgIGNvbnN0IHN0YXRlUm93R3JvdXBlZCA9IHRoaXMuZ3JvdXBlZFJvd1N0YXRlLmZpbmQocm93ID0+IHJvd0dyb3VwLmtleXNBc1N0cmluZyA9PT0gcm93LmtleXNBc1N0cmluZyAmJiBKU09OLnN0cmluZ2lmeShyb3dHcm91cC5wYXJlbnQpID09PSBKU09OLnN0cmluZ2lmeShyb3cucGFyZW50KSk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHN0YXRlUm93R3JvdXBlZCkpIHtcbiAgICAgIHN0YXRlUm93R3JvdXBlZC5leHBhbmRlZCA9ICFzdGF0ZVJvd0dyb3VwZWQuZXhwYW5kZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd0dyb3VwLmV4cGFuZGVkID0gIXJvd0dyb3VwLmV4cGFuZGVkO1xuICAgICAgdGhpcy5ncm91cGVkUm93U3RhdGUucHVzaChyb3dHcm91cCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZXh0R3JvdXBSb3coZ3JvdXA6IE9UYWJsZUdyb3VwZWRSb3csIHRvdGFsQ291bnRzOiBudW1iZXIpIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtncm91cC5sZXZlbCAtIDFdO1xuICAgIGxldCB2YWx1ZSA9IEpTT04ucGFyc2UoZ3JvdXAua2V5c0FzU3RyaW5nKVt0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXlbZ3JvdXAubGV2ZWwgLSAxXV07XG5cbiAgICBjb25zdCBvQ29sID0gdGhpcy50YWJsZS5nZXRPQ29sdW1uKGZpZWxkKTtcblxuICAgIGlmICghdmFsdWUgJiYgVXRpbC5pc0RlZmluZWQob0NvbC5yZW5kZXJlcikgJiYgKHRoaXMudGFibGUgYXMgYW55KS5pc0luc3RhbmNlT2ZPVGFibGVDZWxsUmVuZGVyZXJTZXJ2aWNlQ29tcG9uZW50KG9Db2wucmVuZGVyZXIpKSB7XG4gICAgICB2YWx1ZSA9ICcgLSAnO1xuICAgICAgaWYgKCF0aGlzLnRhYmxlLm9uRGF0YUxvYWRlZENlbGxSZW5kZXJlclN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnRhYmxlLm9uRGF0YUxvYWRlZENlbGxSZW5kZXJlclN1YnNjcmlwdGlvbiA9IChvQ29sLnJlbmRlcmVyIGFzIGFueSkub25EYXRhTG9hZGVkLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUdyb3VwZWRDb2x1bW5zKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKHRoaXMudGFibGUgYXMgYW55KS50cmFuc2xhdGVTZXJ2aWNlLmdldChvQ29sLnRpdGxlKSArICc6ICcgKyB2YWx1ZSArICcgKCcgKyB0b3RhbENvdW50cyArICcpJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhwYW5zaW9uU3RhdGUocm93OiBPVGFibGVHcm91cGVkUm93KTogYm9vbGVhbiB7XG4gICAgbGV0IGV4cGFuc2lvblN0YXRlID0gIXBhcmVudCB8fCAhdGhpcy50YWJsZS5jb2xsYXBzZUdyb3VwZWRDb2x1bW5zO1xuICAgIGlmIChyb3cuZXhwYW5kU2FtZUxldmVsKHRoaXMudGFibGUuZXhwYW5kR3JvdXBzU2FtZUxldmVsKSkge1xuICAgICAgZXhwYW5zaW9uU3RhdGUgPSB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlLmhhc093blByb3BlcnR5KHJvdy5sZXZlbCkgPyB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvdy5sZXZlbF0gOiBleHBhbnNpb25TdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93R3JvdXAgPSB0aGlzLmdyb3VwZWRSb3dTdGF0ZS5maW5kKHggPT4geC5rZXlzQXNTdHJpbmcgPT09IHJvdy5rZXlzQXNTdHJpbmcgJiYgSlNPTi5zdHJpbmdpZnkoeC5wYXJlbnQpID09PSBKU09OLnN0cmluZ2lmeShyb3cucGFyZW50KSk7XG4gICAgICBleHBhbnNpb25TdGF0ZSA9IHJvd0dyb3VwID8gcm93R3JvdXAuZXhwYW5kZWQgOiBleHBhbnNpb25TdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGFuc2lvblN0YXRlO1xuICB9XG59XG5cblxuXG4iXX0=
|
|
714
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1vLXRhYmxlLmRhdGFzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9leHRlbnNpb25zL2RlZmF1bHQtby10YWJsZS5kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTNELE9BQU8sRUFBRSx5QkFBeUIsRUFBc0IsTUFBTSxpREFBaUQsQ0FBQztBQUNoSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2pFLE1BQU0sT0FBTywwQkFBMEI7SUFHckMsWUFBWSxJQUFlO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxVQUFlO0lBRzFELElBQUksSUFBSSxLQUFZLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFxQnpELElBQUksV0FBVyxLQUFhLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLElBQUksV0FBVyxDQUFDLE1BQWM7UUFD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LE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UsIExpc3RSYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE9UYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT1RhYmxlT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLCBPQ29sdW1uVmFsdWVGaWx0ZXIgfSBmcm9tICcuLi8uLi8uLi90eXBlcy90YWJsZS9vLWNvbHVtbi12YWx1ZS1maWx0ZXIudHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgdHlwZSB7IE9Db2x1bW4gfSBmcm9tICcuLi9jb2x1bW4vby1jb2x1bW4uY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vby10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlRGFvIH0gZnJvbSAnLi9vLXRhYmxlLmRhbyc7XG5pbXBvcnQgeyBPVGFibGVHcm91cGVkUm93IH0gZnJvbSAnLi9yb3cvby10YWJsZS1yb3ctZ3JvdXAuY2xhc3MnO1xuaW1wb3J0IHsgT01hdFNvcnQgfSBmcm9tICcuL3NvcnQvby1tYXQtc29ydCc7XG5cbmV4cG9ydCBjbGFzcyBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbCB7XG4gIHB1YmxpYyByYW5nZTogTGlzdFJhbmdlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IExpc3RSYW5nZSkge1xuICAgIHRoaXMucmFuZ2UgPSBkYXRhO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0T1RhYmxlRGF0YVNvdXJjZSBleHRlbmRzIERhdGFTb3VyY2U8YW55PiBpbXBsZW1lbnRzIE9UYWJsZURhdGFTb3VyY2Uge1xuICBkYXRhVG90YWxzQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuXG4gIGdldCBkYXRhKCk6IGFueVtdIHsgcmV0dXJuIHRoaXMuZGF0YVRvdGFsc0NoYW5nZS52YWx1ZTsgfVxuXG4gIHByb3RlY3RlZCBfZGF0YWJhc2U6IE9UYWJsZURhbztcbiAgcHJvdGVjdGVkIF9wYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgcHJvdGVjdGVkIF90YWJsZU9wdGlvbnM6IE9UYWJsZU9wdGlvbnM7XG4gIHByb3RlY3RlZCBfc29ydDogT01hdFNvcnQ7XG5cbiAgcHJvdGVjdGVkIF92aXJ0dWFsUGFnZUNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8T25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGw+KG5ldyBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbCh7IHN0YXJ0OiAwLCBlbmQ6IDAgfSkpO1xuICBwcm90ZWN0ZWQgX3F1aWNrRmlsdGVyQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gIHByb3RlY3RlZCBfY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICBwcm90ZWN0ZWQgZ3JvdXBCeUNvbHVtbkNoYW5nZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+O1xuXG4gIHByb3RlY3RlZCBmaWx0ZXJlZERhdGE6IGFueVtdID0gW107XG4gIHByb3RlY3RlZCBhZ2dyZWdhdGVEYXRhOiBhbnkgPSB7fTtcblxuICBvblJlbmRlcmVkRGF0YUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuXG4gIHByb3RlY3RlZCBfcmVuZGVyZWREYXRhOiBhbnlbXSA9IFtdO1xuICByZXN1bHRzTGVuZ3RoOiBudW1iZXIgPSAwO1xuXG4gIGdldCBxdWlja0ZpbHRlcigpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fcXVpY2tGaWx0ZXJDaGFuZ2UudmFsdWUgfHwgJyc7IH1cbiAgc2V0IHF1aWNrRmlsdGVyKGZpbHRlcjogc3RyaW5nKSB7XG4gICAgdGhpcy5fcXVpY2tGaWx0ZXJDaGFuZ2UubmV4dChmaWx0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2x1bW5WYWx1ZUZpbHRlcnM6IEFycmF5PE9Db2x1bW5WYWx1ZUZpbHRlcj4gPSBbXTtcbiAgcHJpdmF0ZSBncm91cGVkUm93U3RhdGU6IE9UYWJsZUdyb3VwZWRSb3dbXSA9IFtdO1xuICBwcml2YXRlIGFjdGl2ZUFnZ3JlZ2F0ZXMgPSB7fTtcbiAgcHJpdmF0ZSBncm91cGVkUm93c1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBsZXZlbHNFeHBhbnNpb25TdGF0ZSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB0YWJsZTogT1RhYmxlQ29tcG9uZW50KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9kYXRhYmFzZSA9IHRhYmxlLmRhb1RhYmxlO1xuICAgIGlmICh0aGlzLl9kYXRhYmFzZSkge1xuICAgICAgdGhpcy5yZXN1bHRzTGVuZ3RoID0gdGhpcy5fZGF0YWJhc2UuZGF0YS5sZW5ndGg7XG4gICAgfVxuICAgIGlmICh0YWJsZS5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMuX3BhZ2luYXRvciA9IHRhYmxlLm1hdHBhZ2luYXRvcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWJsZS52aXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgIHRoaXMudGFibGUudmlydHVhbFNjcm9sbFZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VTdHJlYW1cbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAodmFsdWU6IExpc3RSYW5nZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdmlydHVhbFBhZ2VDaGFuZ2UubmV4dChuZXcgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwodmFsdWUpKTtcbiAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl90YWJsZU9wdGlvbnMgPSB0YWJsZS5vVGFibGVPcHRpb25zO1xuICAgIHRoaXMuX3NvcnQgPSB0YWJsZS5zb3J0O1xuXG4gIH1cblxuICBzb3J0RnVuY3Rpb24oYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zb3J0LnNvcnRGdW5jdGlvbihhLCBiKTtcbiAgfVxuXG4gIGdldCByZW5kZXJlZERhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXJlZERhdGE7XG4gIH1cblxuICBzZXQgcmVuZGVyZWREYXRhKGFyZzogYW55W10pIHtcbiAgICB0aGlzLl9yZW5kZXJlZERhdGEgPSBhcmc7XG4gICAgdGhpcy5vblJlbmRlcmVkRGF0YUNoYW5nZS5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdCBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIHRhYmxlIHRvIHJldHJpZXZlIG9uZSBzdHJlYW0gY29udGFpbmluZyB0aGUgZGF0YSB0byByZW5kZXIuXG4gICAqL1xuICBjb25uZWN0KCk6IE9ic2VydmFibGU8YW55W10+IHtcbiAgICBjb25zdCBkaXNwbGF5RGF0YUNoYW5nZXM6IGFueVtdID0gW1xuICAgICAgdGhpcy5fZGF0YWJhc2UuZGF0YUNoYW5nZVxuICAgIF07XG5cbiAgICBpZiAoIXRoaXMudGFibGUucGFnZWFibGUpIHtcblxuXG4gICAgICBpZiAodGhpcy5fc29ydCkge1xuICAgICAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0aGlzLl9zb3J0Lm9Tb3J0Q2hhbmdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3RhYmxlT3B0aW9ucy5maWx0ZXIpIHtcbiAgICAgICAgZGlzcGxheURhdGFDaGFuZ2VzLnB1c2godGhpcy5fcXVpY2tGaWx0ZXJDaGFuZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fcGFnaW5hdG9yKSB7XG4gICAgICAgIGRpc3BsYXlEYXRhQ2hhbmdlcy5wdXNoKHRoaXMuX3BhZ2luYXRvci5wYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWJsZS52aXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgIGRpc3BsYXlEYXRhQ2hhbmdlcy5wdXNoKHRoaXMuX3ZpcnR1YWxQYWdlQ2hhbmdlKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0aGlzLl9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZSk7XG5cbiAgICBpZiAodGhpcy50YWJsZS5ncm91cGFibGUpIHtcbiAgICAgIGRpc3BsYXlEYXRhQ2hhbmdlcy5wdXNoKHRoaXMuZ3JvdXBCeUNvbHVtbkNoYW5nZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlKC4uLmRpc3BsYXlEYXRhQ2hhbmdlcykucGlwZShcbiAgICAgIG1hcCgoeDogYW55KSA9PiB7XG4gICAgICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5fZGF0YWJhc2UuZGF0YSk7XG5cbiAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgIC8vIHJlbmRlciBzdWJzZXQgKHJhbmdlKSBvZiByZW5kZXJlZERhdGEgd2hlbiBuZXcgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwgZXZlbnQgaXMgZW1pdHRlZFxuICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFZpcnR1YWxTY3JvbGxEYXRhKHRoaXMucmVuZGVyZWREYXRhLCB4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvKlxuICAgICAgICAgICAgaXQgaXMgbmVjZXNzYXJ5IHRvIGZpcnN0IGNhbGN1bGF0ZSB0aGUgY2FsY3VsYXRlZCBjb2x1bW5zIGFuZFxuICAgICAgICAgICAgdGhlbiBmaWx0ZXIgYW5kIHNvcnQgdGhlIGRhdGFcbiAgICAgICAgICAqL1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhpc3RzQW55Q2FsY3VsYXRlZENvbHVtbigpKSB7XG4gICAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldENvbHVtbkNhbGN1bGF0ZWREYXRhKGRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMudGFibGUucGFnZWFibGUpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0Q29sdW1uVmFsdWVGaWx0ZXJEYXRhKGRhdGEpO1xuICAgICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRRdWlja0ZpbHRlckRhdGEoZGF0YSk7XG4gICAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFNvcnRlZERhdGEoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gT2JqZWN0LmFzc2lnbihbXSwgZGF0YSk7XG5cbiAgICAgICAgICBpZiAodGhpcy50YWJsZS5wYWdlYWJsZSkge1xuICAgICAgICAgICAgY29uc3QgdG90YWxSZWNvcmRzTnVtYmVyID0gdGhpcy50YWJsZS5nZXRUb3RhbFJlY29yZHNOdW1iZXIoKTtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0c0xlbmd0aCA9IHRvdGFsUmVjb3Jkc051bWJlciAhPT0gdW5kZWZpbmVkID8gdG90YWxSZWNvcmRzTnVtYmVyIDogZGF0YS5sZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0c0xlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0UGFnaW5hdGlvbkRhdGEoZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnRhYmxlLmdyb3VwYWJsZSAmJiAhVXRpbC5pc0FycmF5RW1wdHkodGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5KSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldEdyb3VwZWREYXRhKGRhdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMucmVuZGVyZWREYXRhID0gZGF0YTtcblxuICAgICAgICAgIC8qXG4gICAgICAgICAgICB3aGVuIHRoZSBkYXRhIGlzIHZlcnkgbGFyZ2UsIHRoZSBhcHBsaWNhdGlvbiBjcmFzaGVzIHNvIGl0IGdldHMgYSBsaW1pdGVkIHJhbmdlIG9mIGRhdGEgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgICAgIGJlY2F1c2UgYXQgbmV4dCB0aGUgQ3VzdG9tVmlydHVhbFNjcm9sbFN0cmF0ZWd5IHdpbGwgZW1pdCBldmVudCBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbFxuICAgICAgICAgICovXG4gICAgICAgICAgaWYgKHRoaXMudGFibGUudmlydHVhbFNjcm9sbFZpZXdwb3J0ICYmICF0aGlzLl9wYWdpbmF0b3IpIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFZpcnR1YWxTY3JvbGxEYXRhKGRhdGEsIG5ldyBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbCh7IHN0YXJ0OiAwLCBlbmQ6IENvZGVzLkxJTUlUX1NDUk9MTFZJUlRVQUwgfSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYWdncmVnYXRlRGF0YSA9IHRoaXMuZ2V0QWdncmVnYXRlc0RhdGEodGhpcy5yZW5kZXJlZERhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9KSk7XG4gIH1cblxuICBnZXRHcm91cGVkRGF0YShkYXRhOiBhbnlbXSkge1xuICAgIGRhdGEgPSB0aGlzLmdldFN1Ykdyb3Vwc09mR3JvdXBlZFJvdyhkYXRhKTtcbiAgICAvKiogZGF0YSBjb250YWlucyByb3cgZ3JvdXAgaGVhZGVycyAoT1RhYmxlR3JvdXBlZFJvdykgYW5kIHRoZSBkYXRhIGJlbG9uZ2luZyB0byBleHBhbmRlZCBncm91cGVkIHJvd3MgKi9cbiAgICBkYXRhID0gdGhpcy5maWx0ZXJDb2xsYXBzZWRSb3dHcm91cChkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHN1Ymdyb3VwcyBvZiBncm91cGVkIHJvd1xuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcmV0dXJucyBzdWJncm91cHMgb2YgZ3JvdXBlZCByb3dcbiAgICovXG4gIGdldFN1Ykdyb3Vwc09mR3JvdXBlZFJvdyhkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YSA9IHRoaXMuZ2V0U3VibGV2ZWwoZGF0YSwgMCk7XG4gIH1cblxuICBnZXRBZ2dyZWdhdGVzRGF0YShkYXRhOiBhbnlbXSk6IGFueSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuX3RhYmxlT3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBPQ29sdW1uKSA9PiB7XG4gICAgICBsZXQgdG90YWxWYWx1ZSA9ICcnO1xuICAgICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLnZpc2libGUpIHtcbiAgICAgICAgdG90YWxWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlQWdncmVnYXRlKGRhdGEsIGNvbHVtbi5hdHRyLCBjb2x1bW4uYWdncmVnYXRlLm9wZXJhdG9yKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGNvbHVtbi5hdHRyO1xuICAgICAgb2JqW2tleV0gPSB0b3RhbFZhbHVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdGhhdCBnZXQgdmFsdWUgdGhlIGNvbHVtbnMgY2FsY3VsYXRlZFxuICAgKiBAcGFyYW0gZGF0YSBkYXRhIG9mIHRoZSBkYXRhYmFzZVxuICAgKi9cbiAgZ2V0Q29sdW1uQ2FsY3VsYXRlZERhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY2FsY3VsYXRlZENvbHMgPSB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIoKG9Db2w6IE9Db2x1bW4pID0+IG9Db2wudmlzaWJsZSAmJiBvQ29sLmNhbGN1bGF0ZSAhPT0gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdzogYW55KSA9PiB7XG4gICAgICBjYWxjdWxhdGVkQ29scy5mb3JFYWNoKChvQ29sdW1uOiBPQ29sdW1uKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBvQ29sdW1uLmNhbGN1bGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWx1ZSA9IHNlbGYudHJhbnNmb3JtRm9ybXVsYShvQ29sdW1uLmNhbGN1bGF0ZSwgcm93KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb0NvbHVtbi5jYWxjdWxhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YWx1ZSA9IG9Db2x1bW4uY2FsY3VsYXRlKHJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgcm93W29Db2x1bW4uYXR0cl0gPSBpc05hTih2YWx1ZSkgPyAwIDogdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByb3c7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhbnNmb3JtRm9ybXVsYShmb3JtdWxhQXJnLCByb3cpOiBzdHJpbmcge1xuICAgIGxldCBmb3JtdWxhID0gZm9ybXVsYUFyZztcbiAgICAvLyAxLiByZXBsYWNlIGNvbHVtbnMgYnkgdmFsdWVzIG9mIHJvd1xuICAgIGNvbnN0IGNvbHVtbnNBdHRyID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMubWFwKChvQ29sOiBPQ29sdW1uKSA9PiBvQ29sLmF0dHIpO1xuICAgIGNvbHVtbnNBdHRyLmZvckVhY2goKGNvbHVtbjogc3RyaW5nKSA9PiB7XG4gICAgICBmb3JtdWxhID0gZm9ybXVsYS5yZXBsYWNlKGNvbHVtbiwgcm93W2NvbHVtbl0pO1xuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdEZvcm11bGEgPSAnJztcbiAgICAvLyAyLiBUcmFuc2Zvcm0gZm9ybXVsYVxuICAgIHRyeSB7XG4gICAgICByZXN1bHRGb3JtdWxhID0gKG5ldyBGdW5jdGlvbigncmV0dXJuICcgKyBmb3JtdWxhKSkoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdPcGVyYXRpb24gZGVmaW5lZCBpbiB0aGUgY2FsY3VsYXRlZCBjb2x1bW4gaXMgaW5jb3JyZWN0ICcpO1xuICAgIH1cbiAgICAvLyAzLiBSZXR1cm4gcmVzdWx0XG4gICAgcmV0dXJuIHJlc3VsdEZvcm11bGE7XG4gIH1cblxuICBnZXRRdWlja0ZpbHRlckRhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucXVpY2tGaWx0ZXIpICYmIHRoaXMucXVpY2tGaWx0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlsdGVyRGF0YSA9ICF0aGlzLl90YWJsZU9wdGlvbnMuZmlsdGVyQ2FzZVNlbnNpdGl2ZSA/IHRoaXMucXVpY2tGaWx0ZXIudG9Mb3dlckNhc2UoKSA6IHRoaXMucXVpY2tGaWx0ZXI7XG4gICAgICByZXR1cm4gZGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAvLyBHZXR0aW5nIGN1c3RvbSBjb2x1bW5zIGZpbHRlciBjb2x1bW5zIHJlc3VsdFxuICAgICAgICBjb25zdCBwYXNzQ3VzdG9tRmlsdGVyID0gdGhpcy5mdWxmaWxsc0N1c3RvbUZpbHRlckZ1bmN0aW9ucyhmaWx0ZXJEYXRhLCBpdGVtKTtcbiAgICAgICAgLy8gR2V0dGluZyBvdGhlciBzZWFyY2hhYmxlIGNvbHVtbnMgc3RhbmRhcmQgcmVzdWx0XG4gICAgICAgIGNvbnN0IHBhc3NTZWFyY2hTdHJpbmcgPSB0aGlzLmZ1bGZpbGxzUXVpY2tmaWx0ZXIoZmlsdGVyRGF0YSwgaXRlbSk7XG4gICAgICAgIHJldHVybiBwYXNzQ3VzdG9tRmlsdGVyIHx8IHBhc3NTZWFyY2hTdHJpbmc7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGFnaW5hdGlvbkRhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCF0aGlzLl9wYWdpbmF0b3IgfHwgaXNOYU4odGhpcy5fcGFnaW5hdG9yLnBhZ2VTaXplKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGxldCBzdGFydEluZGV4ID0gaXNOYU4odGhpcy5fcGFnaW5hdG9yLnBhZ2VTaXplKSA/IDAgOiB0aGlzLl9wYWdpbmF0b3IucGFnZUluZGV4ICogdGhpcy5fcGFnaW5hdG9yLnBhZ2VTaXplO1xuICAgIGlmIChkYXRhLmxlbmd0aCA+IDAgJiYgZGF0YS5sZW5ndGggPCBzdGFydEluZGV4KSB7XG4gICAgICBzdGFydEluZGV4ID0gMDtcbiAgICAgIHRoaXMuX3BhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YS5zcGxpY2Uoc3RhcnRJbmRleCwgdGhpcy5fcGFnaW5hdG9yLnBhZ2VTaXplKTtcbiAgfVxuXG4gIGdldFZpcnR1YWxTY3JvbGxEYXRhKGRhdGE6IGFueVtdLCB4OiBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbCk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YS5zbGljZSh4LnJhbmdlLnN0YXJ0LCB4LnJhbmdlLmVuZClcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoKSB7XG4gICAgdGhpcy5kYXRhVG90YWxzQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcXVpY2tGaWx0ZXJDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLl9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZ3JvdXBCeUNvbHVtbkNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3ZpcnR1YWxQYWdlQ2hhbmdlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZnVsZmlsbHNDdXN0b21GaWx0ZXJGdW5jdGlvbnMoZmlsdGVyOiBzdHJpbmcsIGl0ZW06IGFueSkge1xuICAgIGNvbnN0IGN1c3RvbUZpbHRlckNvbHMgPSB0aGlzLnRhYmxlLm9UYWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIob0NvbCA9PiBvQ29sLnVzZUN1c3RvbUZpbHRlckZ1bmN0aW9uKCkpO1xuICAgIHJldHVybiBjdXN0b21GaWx0ZXJDb2xzLnNvbWUob0NvbCA9PiBvQ29sLnJlbmRlcmVyLmZpbHRlckZ1bmN0aW9uKGl0ZW1bb0NvbC5hdHRyXSwgaXRlbSwgZmlsdGVyKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZnVsZmlsbHNRdWlja2ZpbHRlcihmaWx0ZXI6IHN0cmluZywgaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcigob0NvbDogT0NvbHVtbikgPT4gb0NvbC51c2VRdWlja2ZpbHRlckZ1bmN0aW9uKCkpO1xuICAgIGxldCBzZWFyY2hTdHIgPSBjb2x1bW5zLm1hcCgob0NvbDogT0NvbHVtbikgPT4gb0NvbC5nZXRGaWx0ZXJWYWx1ZShpdGVtW29Db2wuYXR0cl0sIGl0ZW0pLmpvaW4oJyAnKSkuam9pbignICcpO1xuICAgIGlmICghdGhpcy5fdGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUpIHtcbiAgICAgIHNlYXJjaFN0ciA9IHNlYXJjaFN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc2VhcmNoU3RyLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIHNvcnRlZCBjb3B5IG9mIHRoZSBkYXRhYmFzZSBkYXRhLiAqL1xuICBwcm90ZWN0ZWQgZ2V0U29ydGVkRGF0YShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIXRoaXMuX3NvcnQpIHJldHVybiBkYXRhO1xuICAgIGNvbnN0IHJlbmRlcmVyRGF0YSA9IHRoaXMuZ2V0RGF0YVRvU29ydChkYXRhKTtcbiAgICBjb25zdCBzb3J0ZWREYXRhID0gdGhpcy5fc29ydC5nZXRTb3J0ZWREYXRhKHJlbmRlcmVyRGF0YSk7XG5cbiAgICBjb25zdCB0YWJsZUtleXMgPSB0aGlzLnRhYmxlLmdldEtleXMoKTtcbiAgICBjb25zdCBvcmlnaW5hbERhdGFTb3J0ZWQgPSBbXTtcblxuICAgIHNvcnRlZERhdGEuZm9yRWFjaChzb3J0ZWRFbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGtleXNWYWx1ZXNJblNvcnREYXRhID0gdGFibGVLZXlzLm1hcChlbGVtZW50ID0+IHNvcnRlZEVsZW1lbnRbZWxlbWVudF0pO1xuXG4gICAgICBsZXQgaSA9IDA7XG4gICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgIHdoaWxlIChpIDwgZGF0YS5sZW5ndGggJiYgIWZvdW5kKSB7XG4gICAgICAgIGNvbnN0IGtleXNWYWx1ZXNJbkRhdGEgPSB0YWJsZUtleXMubWFwKGVsZW1lbnQgPT4gZGF0YVtpXVtlbGVtZW50XSk7XG4gICAgICAgIGlmIChVdGlsLmlzQXJyYXlFcXVhbChrZXlzVmFsdWVzSW5Tb3J0RGF0YSwga2V5c1ZhbHVlc0luRGF0YSkpIHtcbiAgICAgICAgICBvcmlnaW5hbERhdGFTb3J0ZWQucHVzaChkYXRhW2ldKTtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudGFibGUudXBkYXRlU29ydGluZ1N1YmplY3QoZmFsc2UpO1xuICAgIHJldHVybiBvcmlnaW5hbERhdGFTb3J0ZWQ7XG5cbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRhdGEgdGhlIHRhYmxlIHN0b3Jlcy4gTm8gZmlsdGVycyBhcmUgYXBwbGllZC5cbiAgICovXG4gIGdldFRhYmxlRGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlLmRhdGE7XG4gIH1cblxuICAvKiogUmV0dXJuIGRhdGEgb2YgdGhlIHZpc2libGUgY29sdW1ucyBvZiB0aGUgdGFibGUgd2l0aG91dCByZW5kZXJpbmcgKi9cbiAgZ2V0Q3VycmVudERhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmdldERhdGEoKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRBbGxEYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxEYXRhKGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICAvKiogUmV0dXJuIGRhdGEgb2YgdGhlIHZpc2libGUgY29sdW1ucyBvZiB0aGUgdGFibGUgIHJlbmRlcmluZyAqL1xuICBnZXRDdXJyZW50UmVuZGVyZXJEYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJlZERhdGEodGhpcy5yZW5kZXJlZERhdGEpO1xuICB9XG5cbiAgLyoqIFJldHVybiBhbGwgZGF0YSBvZiB0aGUgdGFibGUgcmVuZGVyaW5nICovXG4gIGdldEFsbFJlbmRlcmVyRGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsRGF0YSh0cnVlLCB0cnVlKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gc3FsIHR5cGVzIG9mIHRoZSBjdXJyZW50IGRhdGEgKi9cbiAgZ2V0IHNxbFR5cGVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlLnNxbFR5cGVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWREYXRhO1xuICB9XG5cbiAgcHVibGljIGdldFJlbmRlcmVkRGF0YShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcihvQ29sID0+IG9Db2wudmlzaWJsZSk7XG4gICAgcmV0dXJuIGRhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgdmlzaWJsZUNvbHVtbnMuZm9yRWFjaCgob0NvbDogT0NvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCB1c2VSZW5kZXJlciA9IG9Db2wucmVuZGVyZXIgJiYgb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YTtcbiAgICAgICAgb2JqW29Db2wuYXR0cl0gPSB1c2VSZW5kZXJlciA/IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdykgOiByb3dbb0NvbC5hdHRyXTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0RGF0YVRvU29ydChkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIXRoaXMuX3NvcnQpIHJldHVybiBkYXRhO1xuICAgIGNvbnN0IHNvcnRDb2x1bW5zID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKG9Db2wgPT4gb0NvbC52aXNpYmxlICYmIHRoaXMuX3NvcnQuYWN0aXZlQXJyYXkubWFwKHggPT4geC5pZCkuaW5kZXhPZihvQ29sLmF0dHIpID4gLTEpO1xuICAgIGNvbnN0IGV4aXN0Q29sdW1uVG9UcmFzZm9ybVRvU29ydCA9IHNvcnRDb2x1bW5zLmZpbHRlcigob0NvbDogT0NvbHVtbikgPT4gKG9Db2wudHlwZSA9PT0gJ3RyYW5zbGF0ZScgfHwgb0NvbC50eXBlID09PSAnc2VydmljZScpKS5sZW5ndGggPiAwO1xuICAgIGlmICghZXhpc3RDb2x1bW5Ub1RyYXNmb3JtVG9Tb3J0KSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgdGhpcy50YWJsZS5nZXRLZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgc29ydENvbHVtbnMucHVzaCh0aGlzLnRhYmxlLmdldE9Db2x1bW4oa2V5KSk7XG4gICAgfSlcblxuICAgIHJldHVybiBkYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIHNvcnRDb2x1bW5zLmZvckVhY2goKG9Db2w6IE9Db2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgdXNlUmVuZGVyZXIgPSBvQ29sLnJlbmRlcmVyICYmIChvQ29sLnR5cGUgPT09ICd0cmFuc2xhdGUnIHx8IG9Db2wudHlwZSA9PT0gJ3NlcnZpY2UnKSAmJiBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhO1xuICAgICAgICBvYmpbb0NvbC5hdHRyXSA9IHVzZVJlbmRlcmVyID8gb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YShyb3dbb0NvbC5hdHRyXSwgcm93KSA6IHJvd1tvQ29sLmF0dHJdO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEFsbERhdGEodXNpbmdSZW5kZXJlcmVycz86IGJvb2xlYW4sIG9ubHlWaXNpYmxlQ29sdW1ucz86IGJvb2xlYW4pIHtcbiAgICBsZXQgdGFibGVDb2x1bW5zID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnM7XG4gICAgaWYgKG9ubHlWaXNpYmxlQ29sdW1ucykge1xuICAgICAgdGFibGVDb2x1bW5zID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKG9Db2wgPT4gb0NvbC52aXNpYmxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIHRhYmxlQ29sdW1ucy5mb3JFYWNoKChvQ29sOiBPQ29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZVJlbmRlcmVyID0gdXNpbmdSZW5kZXJlcmVycyAmJiBvQ29sLnJlbmRlcmVyICYmIG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGE7XG4gICAgICAgIG9ialtvQ29sLmF0dHJdID0gdXNlUmVuZGVyZXIgPyBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhKHJvd1tvQ29sLmF0dHJdLCByb3cpIDogcm93W29Db2wuYXR0cl07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJlbmRlcmVyc0RhdGEoZGF0YTogYW55W10sIHRhYmxlQ29sdW1uczogT0NvbHVtbltdKTogYW55W10ge1xuICAgIHJldHVybiBkYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICAvLyByZW5kZXIgZWFjaCBjb2x1bW5cbiAgICAgIGNvbnN0IG9iaiA9IE9iamVjdC5hc3NpZ24oe30sIHJvdyk7XG4gICAgICB0YWJsZUNvbHVtbnMuZm9yRWFjaCgob0NvbDogT0NvbHVtbikgPT4ge1xuICAgICAgICBvYmpbb0NvbC5hdHRyXSA9IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29sdW1uRGF0YShvY29sdW1uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZERhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIC8vIHJlbmRlciBlYWNoIGNvbHVtblxuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBpZiAob2NvbHVtbikge1xuICAgICAgICBvYmpbb2NvbHVtbl0gPSByb3dbb2NvbHVtbl07XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGl6ZUNvbHVtbnNGaWx0ZXJzKGZpbHRlcnM6IE9Db2x1bW5WYWx1ZUZpbHRlcltdKSB7XG4gICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMgPSBbXTtcbiAgICBmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9KTtcbiAgICBpZiAoIXRoaXMudGFibGUucGFnZWFibGUpIHtcbiAgICAgIHRoaXMuX2NvbHVtblZhbHVlRmlsdGVyQ2hhbmdlLm5leHQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgaXNDb2x1bW5WYWx1ZUZpbHRlckFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMubGVuZ3RoICE9PSAwO1xuICB9XG5cbiAgZ2V0Q29sdW1uVmFsdWVGaWx0ZXJzKCk6IE9Db2x1bW5WYWx1ZUZpbHRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnM7XG4gIH1cblxuICBnZXRDb2x1bW5WYWx1ZUZpbHRlckJ5QXR0cihhdHRyOiBzdHJpbmcpOiBPQ29sdW1uVmFsdWVGaWx0ZXIge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5maW5kKGl0ZW0gPT4gaXRlbS5hdHRyID09PSBhdHRyKTtcbiAgfVxuXG4gIGNsZWFyQ29sdW1uRmlsdGVycyh0cmlnZ2VyOiBib29sZWFuID0gdHJ1ZSwgY29sdW1uc0F0dHI/OiBzdHJpbmdbXSkge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW5zQXR0cikpIHtcbiAgICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzID0gdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMuZmlsdGVyKHggPT4gIWNvbHVtbnNBdHRyLmluY2x1ZGVzKHguYXR0cikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycyA9IFtdO1xuICAgIH1cbiAgICBpZiAodHJpZ2dlcikge1xuICAgICAgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UubmV4dChudWxsKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbHVtbkZpbHRlcihhdHRyOiBzdHJpbmcsIHRyaWdnZXI6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMgPSB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5maWx0ZXIoeCA9PiB4LmF0dHIgIT09IGF0dHIpO1xuICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICB0aGlzLl9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZS5uZXh0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGFkZENvbHVtbkZpbHRlcihmaWx0ZXI6IE9Db2x1bW5WYWx1ZUZpbHRlcikge1xuICAgIGNvbnN0IGV4aXN0aW5nRmlsdGVySW5kZXggPSB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmF0dHIgPT09IGZpbHRlci5hdHRyKTtcbiAgICBpZiAoZXhpc3RpbmdGaWx0ZXJJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5zcGxpY2UoZXhpc3RpbmdGaWx0ZXJJbmRleCwgMSwgZmlsdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHZhbGlkRmlsdGVyID0gVXRpbC5pc0RlZmluZWQoZmlsdGVyLnZhbHVlcyk7XG4gICAgICBpZiAodmFsaWRGaWx0ZXIpIHtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXIub3BlcmF0b3IpIHtcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuSU46XG4gICAgICAgICAgICB2YWxpZEZpbHRlciA9IGZpbHRlci52YWx1ZXMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5CRVRXRUVOOlxuICAgICAgICAgICAgdmFsaWRGaWx0ZXIgPSBmaWx0ZXIudmFsdWVzLmxlbmd0aCA9PT0gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5FUVVBTDpcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTEVTU19FUVVBTDpcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTU9SRV9FUVVBTDpcbiAgICAgICAgICAgIHZhbGlkRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YWxpZEZpbHRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWxpZEZpbHRlcikge1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgdGFibGUgaXMgcGFnaW5hdGVkLCBmaWx0ZXIgd2lsbCBiZSBhcHBsaWVkIG9uIHJlbW90ZSBxdWVyeVxuICAgIGlmICghdGhpcy50YWJsZS5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UubmV4dChudWxsKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb2x1bW5WYWx1ZUZpbHRlckRhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyQ29sdW1uID0gdGhpcy50YWJsZS5vVGFibGVPcHRpb25zLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmF0dHIgPT09IGZpbHRlci5hdHRyKTtcbiAgICAgIGlmIChmaWx0ZXJDb2x1bW4pIHtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXIub3BlcmF0b3IpIHtcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuSU46XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZXMgPSAoZmlsdGVyLnZhbHVlcyB8fCBbXSkucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT5cbiAgICAgICAgICAgICAgcHJldmlvdXMuY29uY2F0KGZpbHRlckNvbHVtbi5nZXRGaWx0ZXJWYWx1ZShjdXJyZW50KS5tYXAoZiA9PiBVdGlsLm5vcm1hbGl6ZVN0cmluZyhmKSkpLCBbXSk7XG5cbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJDb2x1bW4ucmVuZGVyZXIgJiYgZmlsdGVyQ29sdW1uLnJlbmRlcmVyLmZpbHRlckZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlckNvbHVtbi5yZW5kZXJlci5maWx0ZXJGdW5jdGlvbihpdGVtW2ZpbHRlci5hdHRyXSwgaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sVmFsdWVzID0gZmlsdGVyQ29sdW1uLmdldEZpbHRlclZhbHVlKGl0ZW1bZmlsdGVyLmF0dHJdLCBpdGVtKS5tYXAoZiA9PiBVdGlsLm5vcm1hbGl6ZVN0cmluZyhmKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlclZhbHVlcy5zb21lKHZhbHVlID0+IGNvbFZhbHVlcy5pbmRleE9mKHZhbHVlKSAhPT0gLTEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5FUVVBTDpcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IFV0aWwubm9ybWFsaXplU3RyaW5nKGZpbHRlci52YWx1ZXMpO1xuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2xWYWx1ZXMgPSBmaWx0ZXJDb2x1bW4uZ2V0RmlsdGVyVmFsdWUoaXRlbVtmaWx0ZXIuYXR0cl0sIGl0ZW0pLm1hcChmID0+IFV0aWwubm9ybWFsaXplU3RyaW5nKGYpKTtcbiAgICAgICAgICAgICAgbGV0IHJlZ0V4cDtcbiAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZS5pbmNsdWRlcygnKicpKSB7XG4gICAgICAgICAgICAgICAgcmVnRXhwID0gbmV3IFJlZ0V4cCgnXicgKyBub3JtYWxpemVkVmFsdWUuc3BsaXQoJyonKS5qb2luKCcuKicpICsgJyQnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gY29sVmFsdWVzLnNvbWUoY29sVmFsdWUgPT4gcmVnRXhwID8gcmVnRXhwLnRlc3QoY29sVmFsdWUpIDogY29sVmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcyhub3JtYWxpemVkVmFsdWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkJFVFdFRU46XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtW2ZpbHRlci5hdHRyXSA+PSBmaWx0ZXIudmFsdWVzWzBdICYmIGl0ZW1bZmlsdGVyLmF0dHJdIDw9IGZpbHRlci52YWx1ZXNbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLk1PUkVfRVFVQUw6XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtW2ZpbHRlci5hdHRyXSA+PSBmaWx0ZXIudmFsdWVzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5MRVNTX0VRVUFMOlxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbVtmaWx0ZXIuYXR0cl0gPD0gZmlsdGVyLnZhbHVlcyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlRGF0YShjb2x1bW46IE9Db2x1bW4pIHtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBsZXQgdG90YWxWYWx1ZSA9ICcnO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl90YWJsZU9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IEFycmF5KG9iaik7XG4gICAgfVxuICAgIHRvdGFsVmFsdWUgPSB0aGlzLmFnZ3JlZ2F0ZURhdGFbY29sdW1uLmF0dHJdO1xuICAgIHJldHVybiB0b3RhbFZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZUFnZ3JlZ2F0ZShkYXRhOiBhbnlbXSwgY29sdW1uQXR0cjogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nIHwgRnVuY3Rpb24pOiBhbnkge1xuICAgIGxldCByZXN1bHRBZ2dyZWdhdGU7XG4gICAgaWYgKHR5cGVvZiBvcGVyYXRvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHN3aXRjaCAob3BlcmF0b3IudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdjb3VudCc6XG4gICAgICAgICAgcmVzdWx0QWdncmVnYXRlID0gdGhpcy5jb3VudChjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWluJzpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLm1pbihjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWF4JzpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLm1heChjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXZnJzpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLmF2Zyhjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLnN1bShjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29sdW1uRGF0YTogYW55W10gPSB0aGlzLmdldENvbHVtbkRhdGEoY29sdW1uQXR0cik7XG4gICAgICBpZiAodHlwZW9mIG9wZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc3VsdEFnZ3JlZ2F0ZSA9IG9wZXJhdG9yKGNvbHVtbkRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0QWdncmVnYXRlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1bShjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIC8vSWYgdGhlIGRhdGEgaXMgZ3JvdXBlZCwgdGhlIHZhbHVlcyDigIvigItvZiB0aGUgc3ViZ3JvdXBzIGluIGxldmVsIDEgYXJlIHN1bW1lZFxuICAgICAgaWYgKGRhdGFbMF0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgICAgIHRoaXMuZ2V0RGF0YUZyb21GaXJzdExldmVsVGFibGVHcm91cFJvdyhkYXRhKS5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgIHZhbHVlID0geC5nZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbikucmVkdWNlKChhY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY3VtdWxhdG9yICsgKGlzTmFOKGN1cnJlbnRWYWx1ZVtjb2x1bW5dKSA/IDAgOiBjdXJyZW50VmFsdWVbY29sdW1uXSk7XG4gICAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZGF0YS5yZWR1Y2UoKGFjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhY3VtdWxhdG9yICsgKGlzTmFOKGN1cnJlbnRWYWx1ZVtjb2x1bW5dKSA/IDAgOiBjdXJyZW50VmFsdWVbY29sdW1uXSk7XG4gICAgICAgIH0sIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICsodmFsdWUpLnRvRml4ZWQoMik7XG4gIH1cblxuICBwcm90ZWN0ZWQgY291bnQoY29sdW1uLCBkYXRhKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsdWUgPSAwO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICAvL0lmIHRoZSBkYXRhIGlzIGdyb3VwZWQsIHRoZSBjb3VudCBpcyBjYWxjdWxhdGVkIGJ5IGFkZGluZyB0aGUgY291bnRzIGZvciBlYWNoIHN1Ymdyb3VwIGluIGxldmVsIDFcbiAgICAgIGlmIChkYXRhWzBdIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykge1xuICAgICAgICB0aGlzLmdldERhdGFGcm9tRmlyc3RMZXZlbFRhYmxlR3JvdXBSb3coZGF0YSkuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICB2YWx1ZSA9IHguZ2V0Q29sdW1uQWdncmVnYXRlRGF0YShjb2x1bW4pLnJlZHVjZSgoYWN1bXVsYXRvcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFjdW11bGF0b3IgKyAxO1xuICAgICAgICAgIH0sIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRhdGEucmVkdWNlKChhY3VtdWxhdG9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjdW11bGF0b3IgKyAxO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF2Zyhjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsU3VtID0gdGhpcy5zdW0oY29sdW1uLCBkYXRhKTtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5jb3VudChjb2x1bW4sIGRhdGEpO1xuICAgIHJldHVybiArKCh0b3RhbFN1bSA9PT0gMCB8fCB0b3RhbENvdW50ID09PSAwKSA/IDAgOiAodG90YWxTdW0gLyB0b3RhbENvdW50KSkudG9GaXhlZCgyKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIG1pbihjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGxldCB0ZW1wTWluID0gW107XG4gICAgLy9JZiB0aGUgZGF0YSBpcyBncm91cGVkLCB0aGUgbWluaW11bSBpcyBjYWxjdWxhdGVkIHdpdGggdGhlIG1pbmltdW0gb2YgZWFjaCBzdWJncm91cCBpbiBsZXZlbCAxXG4gICAgaWYgKGRhdGFbMF0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgICB0ZW1wTWluID0gdGhpcy5nZXREYXRhRnJvbUZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KGRhdGEpLm1hcCh4ID0+IHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKC4uLnguZ2V0Q29sdW1uQWdncmVnYXRlRGF0YShjb2x1bW4pLm1hcCh4ID0+IHhbY29sdW1uXSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlbXBNaW4gPSBkYXRhLm1hcCh4ID0+IHhbY29sdW1uXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBNaW4ubGVuZ3RoID4gMCA/IE1hdGgubWluKC4uLnRlbXBNaW4pIDogMDtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXgoY29sdW1uLCBkYXRhKTogbnVtYmVyIHtcbiAgICBsZXQgdGVtcE1heCA9IFtdO1xuICAgIGlmIChkYXRhWzBdIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykge1xuICAgICAgLy9JZiB0aGUgZGF0YSBhcmUgZ3JvdXBlZCwgdGhlIG1heGltdW0gaXMgY2FsY3VsYXRlZCB3aXRoIHRoZSBtYXhpbXVtIG9mIGVhY2ggc3ViZ3JvdXAgaW4gbGV2ZWwgMVxuICAgICAgdGVtcE1heCA9IHRoaXMuZ2V0RGF0YUZyb21GaXJzdExldmVsVGFibGVHcm91cFJvdyhkYXRhKS5tYXAoeCA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCguLi54LmdldENvbHVtbkFnZ3JlZ2F0ZURhdGEoY29sdW1uKS5tYXAoeCA9PiB4W2NvbHVtbl0pKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wTWF4ID0gZGF0YS5tYXAoeCA9PiB4W2NvbHVtbl0pO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcE1heC5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4udGVtcE1heCkgOiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KHRhYmxlUm93R3JvdXBEYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGFibGVSb3dHcm91cERhdGEgaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93ICYmIHRhYmxlUm93R3JvdXBEYXRhLmxldmVsID09PSAxO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXRhRnJvbUZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KGRhdGE6IGFueSkge1xuICAgIHJldHVybiBkYXRhLmZpbHRlcih4ID0+IHRoaXMuaXNGaXJzdExldmVsVGFibGVHcm91cFJvdyh4KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXhpc3RzQW55Q2FsY3VsYXRlZENvbHVtbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZmluZCgob0NvbDogT0NvbHVtbikgPT4gb0NvbC5jYWxjdWxhdGUgIT09IHVuZGVmaW5lZCkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHVwZGF0ZVJlbmRlcmVkUm93RGF0YShyb3dEYXRhOiBhbnkpIHtcbiAgICBjb25zdCB0YWJsZUtleXMgPSB0aGlzLnRhYmxlLmdldEtleXMoKTtcbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLnJlbmRlcmVkRGF0YS5maW5kKChkYXRhOiBhbnkpID0+IHtcbiAgICAgIGxldCBmb3VuZCA9IHRydWU7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGFibGVLZXlzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRhYmxlS2V5c1tpXTtcbiAgICAgICAgaWYgKGRhdGFba2V5XSAhPT0gcm93RGF0YVtrZXldKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH0pO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChyZWNvcmQpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgcm93RGF0YSk7XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIGdldERhdGFJbmZvcm1hdGlvbkJ5R3JvdXAoZGF0YTogYW55W10sIGxldmVsOiBudW1iZXIpIHtcbiAgICBjb25zdCByZWNvcmRIYXNoID0ge307XG4gICAgZGF0YS5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICAgIGNvbnN0IGtleXMgPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGxldmVsOyBpKyspIHtcbiAgICAgICAga2V5c1t0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXlbaV1dID0gdGhpcy50YWJsZS5nZXRDb2x1bW5EYXRhQnlBdHRyKHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtpXSwgcm93KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY29yZEtleSA9IEpTT04uc3RyaW5naWZ5KGtleXMpO1xuICAgICAgaWYgKHJlY29yZEhhc2guaGFzT3duUHJvcGVydHkocmVjb3JkS2V5KSkge1xuICAgICAgICByZWNvcmRIYXNoW3JlY29yZEtleV0ucHVzaChpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZEhhc2hbcmVjb3JkS2V5XSA9IFtpXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVjb3JkSGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVDb2x1bW5BZ2dyZWdhdGUoY29sdW1uQXR0cjogc3RyaW5nLCByb3c6IE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICBjb25zdCBhZ2dyZWdhdGVDb25mID0gcm93LmdldEFjdGl2ZUNvbHVtbkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24oY29sdW1uQXR0cik7XG4gICAgY29uc3QgZGF0YSA9IHJvdy5nZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbkF0dHIpO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYWxjdWxhdGVBZ2dyZWdhdGUoZGF0YSwgYWdncmVnYXRlQ29uZi5hdHRyLCBhZ2dyZWdhdGVDb25mLmFnZ3JlZ2F0ZUZ1bmN0aW9uIHx8IGFnZ3JlZ2F0ZUNvbmYuYWdncmVnYXRlKTtcbiAgICByb3cuc2V0Q29sdW1uQWdncmVnYXRlVmFsdWUoY29sdW1uQXR0ciwgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdWJsZXZlbChkYXRhOiBhbnlbXSwgbGV2ZWw6IG51bWJlciwgcGFyZW50PzogT1RhYmxlR3JvdXBlZFJvdyk6IGFueVtdIHtcbiAgICBpZiAobGV2ZWwgPj0gdGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IHJlY29yZEhhc2ggPSB0aGlzLmdldERhdGFJbmZvcm1hdGlvbkJ5R3JvdXAoZGF0YSwgbGV2ZWwpO1xuXG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIE9iamVjdC5rZXlzKHJlY29yZEhhc2gpLmZvckVhY2gocmVjb3JkS2V5ID0+IHtcblxuICAgICAgY29uc3Qgcm93ID0gbmV3IE9UYWJsZUdyb3VwZWRSb3coe1xuICAgICAgICBjb2x1bW46IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtsZXZlbF0sXG4gICAgICAgIGtleXNBc1N0cmluZzogcmVjb3JkS2V5LFxuICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICBwYXJlbnQ6IHBhcmVudFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZ3JvdXBlZFJvd3NTdWJzY3JpcHRpb24uYWRkKHJvdy5hZ2dyZWdhdGVGdW5jdGlvbkNoYW5nZS5zdWJzY3JpYmUoYXJnID0+IHtcbiAgICAgICAgaWYgKGFyZy5jaGFuZ2VBbGxHcm91cGVkUm93cykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlQWdncmVnYXRlc1thcmcuY29sdW1uQXR0cl0gPSBhcmcuYWN0aXZlQWdncmVnYXRlO1xuICAgICAgICAgIHRoaXMucmVuZGVyZWREYXRhLmZpbHRlcihyb3cgPT4gcm93IGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgcm93LnNldENvbHVtbkFjdGl2ZUFnZ3JlZ2F0ZUZ1bmN0aW9uKGFyZy5jb2x1bW5BdHRyLCBhcmcuYWN0aXZlQWdncmVnYXRlLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQ29sdW1uQWdncmVnYXRlKGFyZy5jb2x1bW5BdHRyLCByb3cpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVDb2x1bW5BZ2dyZWdhdGUoYXJnLmNvbHVtbkF0dHIsIGFyZy5yb3cpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICBjb25zdCBhZmZlY3RlZEluZGV4ZXMgPSByZWNvcmRIYXNoW3Jvdy5rZXlzQXNTdHJpbmddO1xuICAgICAgY29uc3QgZ3JvdXBEYXRhID0gZGF0YS5maWx0ZXIoKHJvdywgaW5kZXgpID0+IGFmZmVjdGVkSW5kZXhlcy5pbmNsdWRlcyhpbmRleCkpO1xuICAgICAgdGhpcy50YWJsZS52aXNpYmxlQ29sQXJyYXkuZm9yRWFjaCgoY29sdW1uQXR0ciwgaSkgPT4ge1xuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIHJvdy50aXRsZSA9IHRoaXMuZ2V0VGV4dEdyb3VwUm93KHJvdywgYWZmZWN0ZWRJbmRleGVzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNlQ29sdW1uQWdncmVnYXRlID0gdGhpcy50YWJsZS51c2VDb2x1bW5Hcm91cGluZ0FnZ3JlZ2F0ZShjb2x1bW5BdHRyKTtcbiAgICAgICAgaWYgKHVzZUNvbHVtbkFnZ3JlZ2F0ZSkge1xuICAgICAgICAgIHJvdy5pbml0aWFsaXplQ29sdW1uQWdncmVnYXRlKGNvbHVtbkF0dHIsIHRoaXMudGFibGUuZ2V0Q29sdW1uR3JvdXBpbmdDb21wb25lbnQoY29sdW1uQXR0cikpO1xuXG4gICAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuYWN0aXZlQWdncmVnYXRlc1tjb2x1bW5BdHRyXSkpIHtcbiAgICAgICAgICAgIHJvdy5zZXRDb2x1bW5BY3RpdmVBZ2dyZWdhdGVGdW5jdGlvbihjb2x1bW5BdHRyLCB0aGlzLmFjdGl2ZUFnZ3JlZ2F0ZXNbY29sdW1uQXR0cl0sIGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocm93Lmhhc0FjdGl2ZUFnZ3JlZ2F0ZShjb2x1bW5BdHRyKSkge1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRlRGF0YSA9IGdyb3VwRGF0YS5tYXAoeCA9PiB7IGNvbnN0IG9iaiA9IHt9OyBvYmpbY29sdW1uQXR0cl0gPSB4W2NvbHVtbkF0dHJdOyByZXR1cm4gb2JqOyB9KTtcbiAgICAgICAgICAgIHJvdy5zZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbkF0dHIsIGFnZ3JlZ2F0ZURhdGEpO1xuXG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVDb25mID0gcm93LmdldEFjdGl2ZUNvbHVtbkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24oY29sdW1uQXR0cik7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY2FsY3VsYXRlQWdncmVnYXRlKGFnZ3JlZ2F0ZURhdGEsIGFnZ3JlZ2F0ZUNvbmYuYXR0ciwgYWdncmVnYXRlQ29uZi5hZ2dyZWdhdGVGdW5jdGlvbiB8fCBhZ2dyZWdhdGVDb25mLmFnZ3JlZ2F0ZSk7XG4gICAgICAgICAgICByb3cuc2V0Q29sdW1uQWdncmVnYXRlVmFsdWUoY29sdW1uQXR0ciwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByb3cuZXhwYW5kZWQgPSB0aGlzLmdldEV4cGFuc2lvblN0YXRlKHJvdyk7XG4gICAgICBjb25zdCBzdWJHcm91cCA9IHRoaXMuZ2V0U3VibGV2ZWwoZ3JvdXBEYXRhLCBsZXZlbCArIDEsIHJvdyk7XG4gICAgICBzdWJHcm91cC51bnNoaWZ0KHJvdyk7XG4gICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHN1Ykdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgY29sbGFwc2VkIHJvdyBncm91cFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcmV0dXJucyBjb2xsYXBzZWQgcm93IGdyb3VwXG4gICAqL1xuICBmaWx0ZXJDb2xsYXBzZWRSb3dHcm91cChkYXRhOiBhbnkpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4gKHJvdyBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpID8gcm93LnZpc2libGUgOiB0aGlzLmJlbG9uZ3NUb0V4cGFuZGVkR3JvdXBlZFJvdyhkYXRhLCByb3cpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWxvbmdzIHRvIGFuIGV4cGFuZGVkIGdyb3VwZWQgcm93XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0byBleHBhbmRlZCBncm91cGVkIHJvd1xuICAgKi9cbiAgYmVsb25nc1RvRXhwYW5kZWRHcm91cGVkUm93KGRhdGE6IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgcGFyZW50OiBPVGFibGVHcm91cGVkUm93O1xuICAgIGxldCBtYXRjaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0aCAmJiAhbWF0Y2g7IGluZGV4KyspIHtcbiAgICAgIGlmIChkYXRhW2luZGV4XSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICAgICAgcGFyZW50ID0gZGF0YVtpbmRleF07XG4gICAgICB9IGVsc2UgaWYgKFV0aWwuaXNFcXVpdmFsZW50KGRhdGFbaW5kZXhdLCByb3cpKSB7XG4gICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHBhcmVudCkgPyAocGFyZW50LnZpc2libGUgJiYgcGFyZW50LmV4cGFuZGVkKSA6IHRydWU7XG4gIH1cblxuICB1cGRhdGVHcm91cGVkQ29sdW1ucygpIHtcbiAgICB0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgZ3JvdXAgYnkgY29sdW1uXG4gICAqIEBwYXJhbSByb3dHcm91cFxuICAgKi9cbiAgdG9nZ2xlR3JvdXBCeUNvbHVtbihyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdykge1xuICAgIGlmIChyb3dHcm91cC5leHBhbmRTYW1lTGV2ZWwodGhpcy50YWJsZS5leHBhbmRHcm91cHNTYW1lTGV2ZWwpKSB7XG4gICAgICB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvd0dyb3VwLmxldmVsXSA9ICFyb3dHcm91cC5leHBhbmRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZVJvd0dyb3VwZWQocm93R3JvdXApO1xuICAgIH1cbiAgICB0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UubmV4dCgpO1xuICB9XG5cbiAgc2V0Um93R3JvdXBMZXZlbEV4cGFuc2lvbihyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdywgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvd0dyb3VwLmxldmVsXSA9IHZhbHVlO1xuICAgIHRoaXMuZ3JvdXBCeUNvbHVtbkNoYW5nZS5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlUm93R3JvdXBlZChyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdykge1xuICAgIGNvbnN0IHN0YXRlUm93R3JvdXBlZCA9IHRoaXMuZ3JvdXBlZFJvd1N0YXRlLmZpbmQocm93ID0+IHJvd0dyb3VwLmtleXNBc1N0cmluZyA9PT0gcm93LmtleXNBc1N0cmluZyAmJiBKU09OLnN0cmluZ2lmeShyb3dHcm91cC5wYXJlbnQpID09PSBKU09OLnN0cmluZ2lmeShyb3cucGFyZW50KSk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHN0YXRlUm93R3JvdXBlZCkpIHtcbiAgICAgIHN0YXRlUm93R3JvdXBlZC5leHBhbmRlZCA9ICFzdGF0ZVJvd0dyb3VwZWQuZXhwYW5kZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd0dyb3VwLmV4cGFuZGVkID0gIXJvd0dyb3VwLmV4cGFuZGVkO1xuICAgICAgdGhpcy5ncm91cGVkUm93U3RhdGUucHVzaChyb3dHcm91cCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZXh0R3JvdXBSb3coZ3JvdXA6IE9UYWJsZUdyb3VwZWRSb3csIHRvdGFsQ291bnRzOiBudW1iZXIpIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtncm91cC5sZXZlbCAtIDFdO1xuICAgIGxldCB2YWx1ZSA9IEpTT04ucGFyc2UoZ3JvdXAua2V5c0FzU3RyaW5nKVt0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXlbZ3JvdXAubGV2ZWwgLSAxXV07XG5cbiAgICBjb25zdCBvQ29sID0gdGhpcy50YWJsZS5nZXRPQ29sdW1uKGZpZWxkKTtcblxuICAgIGlmICghdmFsdWUgJiYgVXRpbC5pc0RlZmluZWQob0NvbC5yZW5kZXJlcikgJiYgKHRoaXMudGFibGUgYXMgYW55KS5pc0luc3RhbmNlT2ZPVGFibGVDZWxsUmVuZGVyZXJTZXJ2aWNlQ29tcG9uZW50KG9Db2wucmVuZGVyZXIpKSB7XG4gICAgICB2YWx1ZSA9ICcgLSAnO1xuICAgICAgaWYgKCF0aGlzLnRhYmxlLm9uRGF0YUxvYWRlZENlbGxSZW5kZXJlclN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnRhYmxlLm9uRGF0YUxvYWRlZENlbGxSZW5kZXJlclN1YnNjcmlwdGlvbiA9IChvQ29sLnJlbmRlcmVyIGFzIGFueSkub25EYXRhTG9hZGVkLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUdyb3VwZWRDb2x1bW5zKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKHRoaXMudGFibGUgYXMgYW55KS50cmFuc2xhdGVTZXJ2aWNlLmdldChvQ29sLnRpdGxlKSArICc6ICcgKyB2YWx1ZSArICcgKCcgKyB0b3RhbENvdW50cyArICcpJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhwYW5zaW9uU3RhdGUocm93OiBPVGFibGVHcm91cGVkUm93KTogYm9vbGVhbiB7XG4gICAgbGV0IGV4cGFuc2lvblN0YXRlID0gIXBhcmVudCB8fCAhdGhpcy50YWJsZS5jb2xsYXBzZUdyb3VwZWRDb2x1bW5zO1xuICAgIGlmIChyb3cuZXhwYW5kU2FtZUxldmVsKHRoaXMudGFibGUuZXhwYW5kR3JvdXBzU2FtZUxldmVsKSkge1xuICAgICAgZXhwYW5zaW9uU3RhdGUgPSB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlLmhhc093blByb3BlcnR5KHJvdy5sZXZlbCkgPyB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvdy5sZXZlbF0gOiBleHBhbnNpb25TdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93R3JvdXAgPSB0aGlzLmdyb3VwZWRSb3dTdGF0ZS5maW5kKHggPT4geC5rZXlzQXNTdHJpbmcgPT09IHJvdy5rZXlzQXNTdHJpbmcgJiYgSlNPTi5zdHJpbmdpZnkoeC5wYXJlbnQpID09PSBKU09OLnN0cmluZ2lmeShyb3cucGFyZW50KSk7XG4gICAgICBleHBhbnNpb25TdGF0ZSA9IHJvd0dyb3VwID8gcm93R3JvdXAuZXhwYW5kZWQgOiBleHBhbnNpb25TdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGFuc2lvblN0YXRlO1xuICB9XG59XG5cblxuXG4iXX0=
|
|
@@ -43,9 +43,9 @@ export class OTableApplyConfigurationDialogComponent {
|
|
|
43
43
|
return selected.length ? selected[0].value : void 0;
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
-
OTableApplyConfigurationDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
47
|
-
OTableApplyConfigurationDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
48
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
46
|
+
OTableApplyConfigurationDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableApplyConfigurationDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
47
|
+
OTableApplyConfigurationDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableApplyConfigurationDialogComponent, selector: "o-table-apply-configuration-dialog", viewQueries: [{ propertyName: "configurationList", first: true, predicate: MatSelectionList, descendants: true, static: true }], ngImport: i0, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.APPLY_CONFIGURATION' | oTranslate }}</span>\n\n<mat-dialog-content fxLayout=\"column\">\n <div mat-subheader>{{ 'TABLE.DIALOG.APPLY_CONFIGURATION' | oTranslate }}</div>\n <mat-selection-list #configurationList class=\"o-table-apply-configuration-dialog-list\">\n <mat-list-option checkboxPosition=\"before\" [value]=\"default_configuration\">\n <span matListItemTitle class=\"o-table-apply-configuration-dialog-list-title\">\n {{ 'TABLE.DIALOG.APPLY_CONFIGURATION_DEFAULT' | oTranslate }}\n </span>\n <span matListItemLine>{{ 'TABLE.DIALOG.APPLY_CONFIGURATION_DEFAULT_DESCRIPTION' | oTranslate }}</span>\n </mat-list-option>\n <mat-list-option checkboxPosition=\"before\" *ngFor=\"let configuration of configurations; let i = index\" [value]=\"configuration.name\">\n <span matListItemTitle>{{ configuration.name }}</span>\n <span matListItemLine>{{ configuration.description }}</span>\n </mat-list-option>\n </mat-selection-list>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button type=\"button\" mat-stroked-button [disabled]=\"configurationList.selectedOptions.selected.length!==1 || isDefaultConfigurationSelected()\"\n (click)=\"removeConfiguration(configurationList.selectedOptions.selected[0].value)\" class=\"o-button-danger\">\n {{ 'DELETE' | oTranslate }}\n </button>\n <span fxFlex></span>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"false\" class=\"o-button-default cancel\">{{ 'CANCEL' | oTranslate }}</button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"true\" [disabled]=\"configurationList.selectedOptions.selected.length!==1\"\n class=\"o-button-primary\">{{ 'OK' | oTranslate }}</button>\n</mat-dialog-actions>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i5.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i5.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: i5.MatListSubheaderCssMatStyler, selector: "[mat-subheader], [matSubheader]" }, { kind: "directive", type: i5.MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: i5.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "pipe", type: i6.OTranslatePipe, name: "oTranslate" }] });
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableApplyConfigurationDialogComponent, decorators: [{
|
|
49
49
|
type: Component,
|
|
50
50
|
args: [{ selector: 'o-table-apply-configuration-dialog', template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.APPLY_CONFIGURATION' | oTranslate }}</span>\n\n<mat-dialog-content fxLayout=\"column\">\n <div mat-subheader>{{ 'TABLE.DIALOG.APPLY_CONFIGURATION' | oTranslate }}</div>\n <mat-selection-list #configurationList class=\"o-table-apply-configuration-dialog-list\">\n <mat-list-option checkboxPosition=\"before\" [value]=\"default_configuration\">\n <span matListItemTitle class=\"o-table-apply-configuration-dialog-list-title\">\n {{ 'TABLE.DIALOG.APPLY_CONFIGURATION_DEFAULT' | oTranslate }}\n </span>\n <span matListItemLine>{{ 'TABLE.DIALOG.APPLY_CONFIGURATION_DEFAULT_DESCRIPTION' | oTranslate }}</span>\n </mat-list-option>\n <mat-list-option checkboxPosition=\"before\" *ngFor=\"let configuration of configurations; let i = index\" [value]=\"configuration.name\">\n <span matListItemTitle>{{ configuration.name }}</span>\n <span matListItemLine>{{ configuration.description }}</span>\n </mat-list-option>\n </mat-selection-list>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button type=\"button\" mat-stroked-button [disabled]=\"configurationList.selectedOptions.selected.length!==1 || isDefaultConfigurationSelected()\"\n (click)=\"removeConfiguration(configurationList.selectedOptions.selected[0].value)\" class=\"o-button-danger\">\n {{ 'DELETE' | oTranslate }}\n </button>\n <span fxFlex></span>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"false\" class=\"o-button-default cancel\">{{ 'CANCEL' | oTranslate }}</button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"true\" [disabled]=\"configurationList.selectedOptions.selected.length!==1\"\n class=\"o-button-primary\">{{ 'OK' | oTranslate }}</button>\n</mat-dialog-actions>\n" }]
|
|
51
51
|
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
@@ -55,4 +55,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
55
55
|
type: ViewChild,
|
|
56
56
|
args: [MatSelectionList, { static: true }]
|
|
57
57
|
}] } });
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1hcHBseS1jb25maWd1cmF0aW9uLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9leHRlbnNpb25zL2RpYWxvZy9hcHBseS1jb25maWd1cmF0aW9uL28tdGFibGUtYXBwbHktY29uZmlndXJhdGlvbi1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvZXh0ZW5zaW9ucy9kaWFsb2cvYXBwbHktY29uZmlndXJhdGlvbi9vLXRhYmxlLWFwcGx5LWNvbmZpZ3VyYXRpb24tZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBaUIsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7O0FBT3ZFLE1BQU0sT0FBTyx1Q0FBdUM7SUFZbEQsWUFDUyxTQUFnRSxFQUM5QyxJQUEyQixFQUMxQyxRQUFrQjtRQUZyQixjQUFTLEdBQVQsU0FBUyxDQUF1RDtRQUU3RCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBYnZCLDBCQUFxQixHQUFHLGlEQUFpRCxDQUFDO1FBQzFFLG1CQUFjLEdBQTBCLEVBQUUsQ0FBQztRQUUzQyxhQUFRLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFZekQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxHQUFHLElBQUksY0FBYyxDQUFnQixLQUFLLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU0sa0JBQWtCLENBQUMsY0FBcUM7UUFDN0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDdkMsQ0FBQztJQUVNLG1CQUFtQixDQUFDLGlCQUF5QjtRQUNsRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsMkNBQTJDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0YsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUN2QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLDhCQUE4QjtRQUNuQyxNQUFNLFFBQVEsR0FBb0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDbEYsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsT0FBTyxhQUFhLEtBQUssSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3RELENBQUM7SUFFTSw0QkFBNEI7UUFDakMsTUFBTSxRQUFRLEdBQW9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO1FBQ2xGLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7cUlBOUNVLHVDQUF1Qyw4Q0FjeEMsZUFBZTt5SEFkZCx1Q0FBdUMsNkhBT3ZDLGdCQUFnQiw4RENuQjdCLHN3REE0QkE7NEZEaEJhLHVDQUF1QztrQkFKbkQsU0FBUzsrQkFDRSxvQ0FBb0M7OzBCQWlCM0MsTUFBTTsyQkFBQyxlQUFlO21FQU5mLGlCQUFpQjtzQkFEMUIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RvciwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdExpc3RPcHRpb24sIE1hdFNlbGVjdGlvbkxpc3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9saXN0JztcblxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9UYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLWNvbmZpZ3VyYXRpb24udHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tdGFibGUtYXBwbHktY29uZmlndXJhdGlvbi1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vby10YWJsZS1hcHBseS1jb25maWd1cmF0aW9uLWRpYWxvZy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgT1RhYmxlQXBwbHlDb25maWd1cmF0aW9uRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgZGVmYXVsdF9jb25maWd1cmF0aW9uID0gJ09UYWJsZUFwcGx5Q29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudC1kZWZhdWx0JztcbiAgcHVibGljIGNvbmZpZ3VyYXRpb25zOiBPVGFibGVDb25maWd1cmF0aW9uW10gPSBbXTtcblxuICBwdWJsaWMgb25EZWxldGU6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoTWF0U2VsZWN0aW9uTGlzdCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJvdGVjdGVkIGNvbmZpZ3VyYXRpb25MaXN0OiBNYXRTZWxlY3Rpb25MaXN0O1xuXG4gIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxPVGFibGVBcHBseUNvbmZpZ3VyYXRpb25EaWFsb2dDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBkYXRhOiBPVGFibGVDb25maWd1cmF0aW9uW10sXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvclxuICApIHtcbiAgICB0aGlzLmxvYWRDb25maWd1cmF0aW9ucyhkYXRhKTtcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChEaWFsb2dTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25MaXN0LnNlbGVjdGVkT3B0aW9ucyA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxNYXRMaXN0T3B0aW9uPihmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgbG9hZENvbmZpZ3VyYXRpb25zKGNvbmZpZ3VyYXRpb25zOiBPVGFibGVDb25maWd1cmF0aW9uW10pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gY29uZmlndXJhdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oJ0NPTkZJUk0nLCAnVEFCTEUuRElBTE9HLkNPTkZJUk1fUkVNT1ZFX0NPTkZJR1VSQVRJT04nKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMub25EZWxldGUuZW1pdChjb25maWd1cmF0aW9uTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaXNEZWZhdWx0Q29uZmlndXJhdGlvblNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkOiBNYXRMaXN0T3B0aW9uW10gPSB0aGlzLmNvbmZpZ3VyYXRpb25MaXN0LnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZDtcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gc2VsZWN0ZWQubGVuZ3RoID8gc2VsZWN0ZWRbMF0udmFsdWUgOiB2b2lkIDA7XG4gICAgcmV0dXJuIHNlbGVjdGVkVmFsdWUgPT09IHRoaXMuZGVmYXVsdF9jb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkQ29uZmlndXJhdGlvbk5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWxlY3RlZDogTWF0TGlzdE9wdGlvbltdID0gdGhpcy5jb25maWd1cmF0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQ7XG4gICAgcmV0dXJuIHNlbGVjdGVkLmxlbmd0aCA/IHNlbGVjdGVkWzBdLnZhbHVlIDogdm9pZCAwO1xuICB9XG5cbn1cbiIsIjxzcGFuIG1hdC1kaWFsb2ctdGl0bGU+e3sgJ1RBQkxFLkJVVFRPTlMuQVBQTFlfQ09ORklHVVJBVElPTicgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuXG48bWF0LWRpYWxvZy1jb250ZW50IGZ4TGF5b3V0PVwiY29sdW1uXCI+XG4gIDxkaXYgbWF0LXN1YmhlYWRlcj57eyAnVEFCTEUuRElBTE9HLkFQUExZX0NPTkZJR1VSQVRJT04nIHwgb1RyYW5zbGF0ZSB9fTwvZGl2PlxuICA8bWF0LXNlbGVjdGlvbi1saXN0ICNjb25maWd1cmF0aW9uTGlzdCBjbGFzcz1cIm8tdGFibGUtYXBwbHktY29uZmlndXJhdGlvbi1kaWFsb2ctbGlzdFwiPlxuICAgIDxtYXQtbGlzdC1vcHRpb24gY2hlY2tib3hQb3NpdGlvbj1cImJlZm9yZVwiIFt2YWx1ZV09XCJkZWZhdWx0X2NvbmZpZ3VyYXRpb25cIj5cbiAgICAgIDxzcGFuIG1hdExpc3RJdGVtVGl0bGUgY2xhc3M9XCJvLXRhYmxlLWFwcGx5LWNvbmZpZ3VyYXRpb24tZGlhbG9nLWxpc3QtdGl0bGVcIj5cbiAgICAgICAge3sgJ1RBQkxFLkRJQUxPRy5BUFBMWV9DT05GSUdVUkFUSU9OX0RFRkFVTFQnIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gbWF0TGlzdEl0ZW1MaW5lPnt7ICdUQUJMRS5ESUFMT0cuQVBQTFlfQ09ORklHVVJBVElPTl9ERUZBVUxUX0RFU0NSSVBUSU9OJyB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgPG1hdC1saXN0LW9wdGlvbiBjaGVja2JveFBvc2l0aW9uPVwiYmVmb3JlXCIgKm5nRm9yPVwibGV0IGNvbmZpZ3VyYXRpb24gb2YgY29uZmlndXJhdGlvbnM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiY29uZmlndXJhdGlvbi5uYW1lXCI+XG4gICAgICA8c3BhbiBtYXRMaXN0SXRlbVRpdGxlPnt7IGNvbmZpZ3VyYXRpb24ubmFtZSB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuIG1hdExpc3RJdGVtTGluZT57eyBjb25maWd1cmF0aW9uLmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgIDwvbWF0LWxpc3Qtb3B0aW9uPlxuICA8L21hdC1zZWxlY3Rpb24tbGlzdD5cbjwvbWF0LWRpYWxvZy1jb250ZW50PlxuXG48bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiY29uZmlndXJhdGlvbkxpc3Quc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLmxlbmd0aCE9PTEgfHwgaXNEZWZhdWx0Q29uZmlndXJhdGlvblNlbGVjdGVkKClcIlxuICAgIChjbGljayk9XCJyZW1vdmVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb25MaXN0LnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZFswXS52YWx1ZSlcIiBjbGFzcz1cIm8tYnV0dG9uLWRhbmdlclwiPlxuICAgIHt7ICdERUxFVEUnIHwgb1RyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cImZhbHNlXCIgY2xhc3M9XCJvLWJ1dHRvbi1kZWZhdWx0IGNhbmNlbFwiPnt7ICdDQU5DRUwnIHwgb1RyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJjb25maWd1cmF0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQubGVuZ3RoIT09MVwiXG4gICAgY2xhc3M9XCJvLWJ1dHRvbi1wcmltYXJ5XCI+e3sgJ09LJyB8IG9UcmFuc2xhdGUgfX08L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIl19
|