@arsedizioni/ars-utils 18.5.62 → 19.0.2
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/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +10 -10
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +41 -41
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.mjs +99 -99
- package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +10 -10
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-help.mjs +13 -13
- package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +10 -10
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +7 -7
- package/fesm2022/arsedizioni-ars-utils-tinymce.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +58 -58
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +34 -34
- package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +7 -7
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
- package/package.json +5 -29
- package/esm2022/arsedizioni-ars-utils.mjs +0 -5
- package/esm2022/clipper.common/arsedizioni-ars-utils-clipper.common.mjs +0 -5
- package/esm2022/clipper.common/common/common.module.mjs +0 -16
- package/esm2022/clipper.common/common/definitions.mjs +0 -2041
- package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +0 -100
- package/esm2022/clipper.common/common/messages.mjs +0 -36
- package/esm2022/clipper.common/common/services/clipper.service.mjs +0 -1011
- package/esm2022/clipper.common/public_api.mjs +0 -5
- package/esm2022/clipper.ui/arsedizioni-ars-utils-clipper.ui.mjs +0 -5
- package/esm2022/clipper.ui/documents.mjs +0 -50
- package/esm2022/clipper.ui/public_api.mjs +0 -18
- package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +0 -766
- package/esm2022/clipper.ui/ui/document/document.component.mjs +0 -688
- package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +0 -118
- package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +0 -441
- package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +0 -217
- package/esm2022/clipper.ui/ui/references/references.component.mjs +0 -380
- package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +0 -116
- package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +0 -339
- package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +0 -251
- package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +0 -17
- package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +0 -106
- package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +0 -120
- package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +0 -531
- package/esm2022/core/arsedizioni-ars-utils-core.mjs +0 -5
- package/esm2022/core/core.module.mjs +0 -151
- package/esm2022/core/dateFnsAdapter.mjs +0 -203
- package/esm2022/core/definitions.mjs +0 -47
- package/esm2022/core/directives/autoFocusDirective.mjs +0 -22
- package/esm2022/core/directives/changeDateIntervalDirective.mjs +0 -48
- package/esm2022/core/directives/copyClipboardDirective.mjs +0 -46
- package/esm2022/core/directives/validators.mjs +0 -502
- package/esm2022/core/pipes/format.pipe.mjs +0 -53
- package/esm2022/core/pipes/replace.pipe.mjs +0 -29
- package/esm2022/core/pipes/safe-html.pipe.mjs +0 -24
- package/esm2022/core/pipes/safe-url.pipe.mjs +0 -24
- package/esm2022/core/pipes/search-callback.pipe.mjs +0 -21
- package/esm2022/core/pipes/search-filter.pipe.mjs +0 -50
- package/esm2022/core/public_api.mjs +0 -22
- package/esm2022/core/selectable.mjs +0 -131
- package/esm2022/core/services/broadcast.service.mjs +0 -35
- package/esm2022/core/services/broadcastChannelManager.mjs +0 -80
- package/esm2022/core/services/environment.service.mjs +0 -29
- package/esm2022/core/services/screen.service.mjs +0 -23
- package/esm2022/core/services/theme.service.mjs +0 -140
- package/esm2022/core/system.mjs +0 -664
- package/esm2022/evolution.common/arsedizioni-ars-utils-evolution.common.mjs +0 -5
- package/esm2022/evolution.common/common/common.module.mjs +0 -16
- package/esm2022/evolution.common/common/definitions.mjs +0 -454
- package/esm2022/evolution.common/common/interceptors/auth.interceptor.mjs +0 -100
- package/esm2022/evolution.common/common/messages.mjs +0 -8
- package/esm2022/evolution.common/common/services/evolution.service.mjs +0 -490
- package/esm2022/evolution.common/public_api.mjs +0 -5
- package/esm2022/help/arsedizioni-ars-utils-help.mjs +0 -5
- package/esm2022/help/components/help-viewer/help-viewer.component.mjs +0 -442
- package/esm2022/help/definitions.mjs +0 -2
- package/esm2022/help/help.module.mjs +0 -12
- package/esm2022/help/public_api.mjs +0 -7
- package/esm2022/help/services/help.service.mjs +0 -77
- package/esm2022/public_api.mjs +0 -15
- package/esm2022/support.common/arsedizioni-ars-utils-support.common.mjs +0 -5
- package/esm2022/support.common/common/common.module.mjs +0 -16
- package/esm2022/support.common/common/definitions.mjs +0 -29
- package/esm2022/support.common/common/interceptors/auth.interceptor.mjs +0 -100
- package/esm2022/support.common/common/messages.mjs +0 -13
- package/esm2022/support.common/common/services/support.service.mjs +0 -289
- package/esm2022/support.common/public_api.mjs +0 -8
- package/esm2022/support.ui/arsedizioni-ars-utils-support.ui.mjs +0 -5
- package/esm2022/support.ui/public_api.mjs +0 -5
- package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +0 -80
- package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +0 -233
- package/esm2022/tinymce/arsedizioni-ars-utils-tinymce.mjs +0 -5
- package/esm2022/tinymce/full-screen-editor/full-screen-editor.component.mjs +0 -48
- package/esm2022/tinymce/public_api.mjs +0 -7
- package/esm2022/tinymce/tinymce.module.mjs +0 -19
- package/esm2022/tinymce/utils.mjs +0 -150
- package/esm2022/ui/arsedizioni-ars-utils-ui.mjs +0 -5
- package/esm2022/ui/public_api.mjs +0 -12
- package/esm2022/ui/ui/components/button-selector/button-selector.component.mjs +0 -150
- package/esm2022/ui/ui/components/button-toggle/button-toggle.component.mjs +0 -51
- package/esm2022/ui/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
- package/esm2022/ui/ui/components/chips-selector/chips-selector.component.mjs +0 -272
- package/esm2022/ui/ui/components/file-input/file-input.component.mjs +0 -264
- package/esm2022/ui/ui/components/file-preview/file-preview.component.mjs +0 -73
- package/esm2022/ui/ui/components/filter-bar/filter-bar.component.mjs +0 -356
- package/esm2022/ui/ui/definitions.mjs +0 -2
- package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +0 -47
- package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +0 -101
- package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +0 -86
- package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +0 -51
- package/esm2022/ui/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
- package/esm2022/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
- package/esm2022/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
- package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +0 -49
- package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +0 -89
- package/esm2022/ui/ui/dialogs/select/select-dialog.component.mjs +0 -374
- package/esm2022/ui/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
- package/esm2022/ui/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
- package/esm2022/ui/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
- package/esm2022/ui/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
- package/esm2022/ui/ui/dialogs/toast/toast.component.mjs +0 -32
- package/esm2022/ui/ui/directives/resize-table-column.directive.mjs +0 -63
- package/esm2022/ui/ui/filters.mjs +0 -43
- package/esm2022/ui/ui/paginatorIntl.mjs +0 -34
- package/esm2022/ui/ui/services/dialog.service.mjs +0 -417
- package/esm2022/ui/ui/services/ui.service.mjs +0 -21
- package/esm2022/ui/ui/ui.module.mjs +0 -21
- package/esm2022/ui.application/arsedizioni-ars-utils-ui.application.mjs +0 -5
- package/esm2022/ui.application/public_api.mjs +0 -21
- package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +0 -150
- package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +0 -51
- package/esm2022/ui.application/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
- package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +0 -272
- package/esm2022/ui.application/ui/components/file-input/file-input.component.mjs +0 -264
- package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +0 -73
- package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +0 -356
- package/esm2022/ui.application/ui/definitions.mjs +0 -31
- package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
- package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
- package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
- package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +0 -374
- package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
- package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
- package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
- package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
- package/esm2022/ui.application/ui/directives/resize-table-column.directive.mjs +0 -63
- package/esm2022/ui.application/ui/filters.mjs +0 -43
- package/esm2022/ui.application/ui/services/applicationDialog.service.mjs +0 -304
- package/esm2022/ui.application/ui/ui.module.mjs +0 -30
- package/esm2022/ui.oauth/arsedizioni-ars-utils-ui.oauth.mjs +0 -5
- package/esm2022/ui.oauth/public_api.mjs +0 -6
- package/esm2022/ui.oauth/ui/components/login/login-oauth.component.mjs +0 -199
- package/esm2022/ui.oauth/ui/definitions.mjs +0 -7
- package/esm2022/ui.oauth/ui/ui.module.mjs +0 -13
- package/ui/ui/components/button-selector/button-selector.component.d.ts +0 -52
- package/ui/ui/components/button-toggle/button-toggle.component.d.ts +0 -28
- package/ui/ui/components/calendar-empty-header/calendar-empy-header.component.d.ts +0 -11
- package/ui/ui/components/chips-selector/chips-selector.component.d.ts +0 -82
- package/ui/ui/components/file-input/file-input.component.d.ts +0 -88
- package/ui/ui/components/file-preview/file-preview.component.d.ts +0 -26
- package/ui/ui/components/filter-bar/filter-bar.component.d.ts +0 -83
- package/ui/ui/dialogs/prompt/prompt-dialog.component.d.ts +0 -18
- package/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.d.ts +0 -18
- package/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.d.ts +0 -18
- package/ui/ui/dialogs/select/select-dialog.component.d.ts +0 -122
- package/ui/ui/dialogs/select-file/select-file-dialog.component.d.ts +0 -36
- package/ui/ui/dialogs/select-picture/select-picture-dialog.component.d.ts +0 -26
- package/ui/ui/dialogs/select-tree/select-tree-dialog.component.d.ts +0 -98
- package/ui/ui/dialogs/send-to/send-to-dialog.component.d.ts +0 -28
- package/ui/ui/directives/resize-table-column.directive.d.ts +0 -19
- package/ui/ui/filters.d.ts +0 -57
|
@@ -1,531 +0,0 @@
|
|
|
1
|
-
import { BreakpointObserver } from '@angular/cdk/layout';
|
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewChild, inject, signal } from '@angular/core';
|
|
3
|
-
import { ClipperMessages, ClipperModel, ClipperSearchParams, ClipperSearchResult, ClipperSort, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';
|
|
4
|
-
import { DateFormat, ScreenService, SystemUtils, ThemeService } from '@arsedizioni/ars-utils/core';
|
|
5
|
-
import { startOfDay, startOfToday, subDays } from 'date-fns';
|
|
6
|
-
import { Subject } from 'rxjs';
|
|
7
|
-
import { ClipperDocumentsUtils } from '../../documents';
|
|
8
|
-
import { ClipperDocumentManager } from '../document-manager/document-manager';
|
|
9
|
-
import { ClipperSearchCalendarComponent } from '../search-calendar/search-calendar.component';
|
|
10
|
-
import { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
export class ClipperSearchResultManager extends ClipperDocumentManager {
|
|
13
|
-
constructor() {
|
|
14
|
-
super(...arguments);
|
|
15
|
-
this.unsubscribe = new Subject();
|
|
16
|
-
this.changeDetector = inject(ChangeDetectorRef);
|
|
17
|
-
this.breakpointObserver = inject(BreakpointObserver);
|
|
18
|
-
this.themeService = inject(ThemeService);
|
|
19
|
-
this.screenService = inject(ScreenService);
|
|
20
|
-
this.selection = null;
|
|
21
|
-
this.snapshot = new ClipperSearchResult();
|
|
22
|
-
this.filterBusy = signal(false);
|
|
23
|
-
this.filterParams = new ClipperSearchParams();
|
|
24
|
-
this.filterPaneHasBackdrop = false;
|
|
25
|
-
this.filterPaneClosed = false;
|
|
26
|
-
this.filterPane2HasBackdrop = false;
|
|
27
|
-
this.filterPane2Closed = false;
|
|
28
|
-
this.sortOptions = [];
|
|
29
|
-
this.sortMode = null;
|
|
30
|
-
this.scrollerId = 'scroller_' + SystemUtils.generateUUID();
|
|
31
|
-
this.restorableId = null;
|
|
32
|
-
this.hasFacets = signal(false);
|
|
33
|
-
this.hasRegions = () => {
|
|
34
|
-
return (this.filterParams.sectors?.filter(n => n.value === 'LR').length ?? 0) > 0;
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
ngOnDestroy() {
|
|
38
|
-
this.unsubscribe.next();
|
|
39
|
-
this.unsubscribe.complete();
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Update menu buttons visibility when the menu is closed
|
|
43
|
-
*/
|
|
44
|
-
updateMenuButtonsVisibility() {
|
|
45
|
-
if (this.snapshot) {
|
|
46
|
-
this.snapshot.items?.forEach(n => {
|
|
47
|
-
n.isMenuOpen = false;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Scroll on top o list area
|
|
53
|
-
* @param top: the top position
|
|
54
|
-
*/
|
|
55
|
-
scroll(top = 0) {
|
|
56
|
-
const elem = document.getElementById(this.scrollerId);
|
|
57
|
-
if (elem) {
|
|
58
|
-
elem.scrollTo({ top: top, left: 0, behavior: 'auto' });
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Check if every element are selected
|
|
63
|
-
*/
|
|
64
|
-
allSelected() {
|
|
65
|
-
return this.selection?.current?.selected?.length === this.snapshot?.items?.length;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Master selection toggle
|
|
69
|
-
* @param select: true to select all elements false to deselect all elements
|
|
70
|
-
*/
|
|
71
|
-
selectAll(select = true) {
|
|
72
|
-
if (select) {
|
|
73
|
-
this.snapshot?.items?.forEach(n => this.selection?.select(n, n.documentId));
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
this.snapshot?.items?.forEach(n => this.selection?.deselect(n, n.documentId));
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Check if selections exists
|
|
81
|
-
* @returns true if at least one element is selected
|
|
82
|
-
*/
|
|
83
|
-
hasAnySelection() {
|
|
84
|
-
return (this.selection?.all?.length ?? 0) > 0;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Check if only one element is selected
|
|
88
|
-
* @returns true if only one element is selected
|
|
89
|
-
*/
|
|
90
|
-
hasSingleSelection() {
|
|
91
|
-
return (this.selection?.all?.length ?? 0) === 1;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Get the first selected item
|
|
95
|
-
* @returns the selected item or null
|
|
96
|
-
*/
|
|
97
|
-
getSingleSelection() {
|
|
98
|
-
return this.hasAnySelection() ? this.selection?.all[0] : null;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Clear selection
|
|
102
|
-
*/
|
|
103
|
-
clearSelection() {
|
|
104
|
-
return this.selection?.clear();
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Return the number of selected items or null
|
|
108
|
-
* @returns Return the number of selected items
|
|
109
|
-
*/
|
|
110
|
-
countSelections() {
|
|
111
|
-
return (this.selection && this.selection?.all?.length > 0) ? this.selection?.all?.length : null;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Get the selected id
|
|
115
|
-
*/
|
|
116
|
-
getSeletectId() {
|
|
117
|
-
if (this.hasAnySelection()) {
|
|
118
|
-
return this.selection?.all[0].documentId;
|
|
119
|
-
}
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Get all selected ids
|
|
124
|
-
*/
|
|
125
|
-
getSeletectIds() {
|
|
126
|
-
if ((this.selection?.all?.length ?? 0) > 100) {
|
|
127
|
-
this.dialogService.error('La selezione non può contenere più di 100 elementi.');
|
|
128
|
-
return null;
|
|
129
|
-
}
|
|
130
|
-
let ids = [];
|
|
131
|
-
if (this.hasAnySelection()) {
|
|
132
|
-
this.selection?.all?.forEach(n => {
|
|
133
|
-
ids.push(n.documentId);
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
return ids;
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Get all selected ids
|
|
140
|
-
* @returns a tuple list with id and data
|
|
141
|
-
*/
|
|
142
|
-
getSeletectIdsAndData() {
|
|
143
|
-
if ((this.selection?.all?.length ?? 0) > 100) {
|
|
144
|
-
this.dialogService.error('La selezione non può contenere più di 100 elementi.');
|
|
145
|
-
return null;
|
|
146
|
-
}
|
|
147
|
-
let data = [];
|
|
148
|
-
if (this.hasAnySelection()) {
|
|
149
|
-
this.selection?.all?.forEach(n => {
|
|
150
|
-
data.push([n.documentId, n]);
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
return data;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Prepare result items
|
|
157
|
-
* @param items : the items to process
|
|
158
|
-
* @param params : the current search params
|
|
159
|
-
*/
|
|
160
|
-
prepareResultItems(items, params) {
|
|
161
|
-
const today = startOfToday();
|
|
162
|
-
const groupByYear = !params.sortMode ||
|
|
163
|
-
params.sortMode === ClipperSort.DateAsc ||
|
|
164
|
-
params.sortMode === ClipperSort.DateDesc ||
|
|
165
|
-
params.sortMode === ClipperSort.SourceDateAsc ||
|
|
166
|
-
params.sortMode === ClipperSort.SourceDateDesc;
|
|
167
|
-
const groupByRelevance = params.sortMode === ClipperSort.Relevance;
|
|
168
|
-
const groupByPopularity = params.sortMode === ClipperSort.Popularity;
|
|
169
|
-
let group = '';
|
|
170
|
-
items?.forEach(n => {
|
|
171
|
-
n.documentId = n.documentId ?? n.id;
|
|
172
|
-
this.selection?.updateCurrent(n, n.documentId);
|
|
173
|
-
if (n.model === ClipperModel.Quesiti) {
|
|
174
|
-
n.info = "Quesito n° " + n.number + " del " + SystemUtils.formatDate(n.date, "d MMM yyyy");
|
|
175
|
-
}
|
|
176
|
-
else if (n.model === ClipperModel.Scadenze ||
|
|
177
|
-
n.model === ClipperModel.Segnalazioni) {
|
|
178
|
-
switch (n.model) {
|
|
179
|
-
case ClipperModel.Scadenze:
|
|
180
|
-
n.originDescription = 'Scadenza';
|
|
181
|
-
break;
|
|
182
|
-
case ClipperModel.Segnalazioni:
|
|
183
|
-
n.originDescription = 'Segnalazione';
|
|
184
|
-
break;
|
|
185
|
-
}
|
|
186
|
-
if (n.expiringInfo) {
|
|
187
|
-
let parts = n.expiringInfo.split('|');
|
|
188
|
-
if (parts.length === 3) {
|
|
189
|
-
n.expiringDescription = parts[2];
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
if (n.expiringDate) {
|
|
193
|
-
n.date = startOfDay(new Date(n.expiringDate));
|
|
194
|
-
const d = startOfDay(subDays(n.date, 15));
|
|
195
|
-
n.isExpiring = today <= n.date && today >= d;
|
|
196
|
-
n.isExpired = n.date < today;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
if ((n.model === ClipperModel.Articoli ||
|
|
201
|
-
n.model === ClipperModel.News) &&
|
|
202
|
-
n.tags) {
|
|
203
|
-
n.info = n.tags.toUpperCase().substring(1).replaceAll("#", ", ");
|
|
204
|
-
}
|
|
205
|
-
if (n.model !== ClipperModel.AggiornamentoNormativo &&
|
|
206
|
-
n.model !== ClipperModel.NormativaVigente &&
|
|
207
|
-
n.model !== ClipperModel.GiurisprudenzaRecente &&
|
|
208
|
-
n.model !== ClipperModel.Juris &&
|
|
209
|
-
n.date) {
|
|
210
|
-
n.date = startOfDay(new Date(n.date ?? n.publishingDate));
|
|
211
|
-
const d = startOfDay(subDays(startOfToday(), 7));
|
|
212
|
-
n.isNew = n.date > d;
|
|
213
|
-
}
|
|
214
|
-
if (n.anchors) {
|
|
215
|
-
let anchorType = null;
|
|
216
|
-
let anchors = [];
|
|
217
|
-
n.anchors.forEach(a => {
|
|
218
|
-
if (a.type === 20)
|
|
219
|
-
return;
|
|
220
|
-
if (a.type !== anchorType) {
|
|
221
|
-
if (a.type >= 3)
|
|
222
|
-
anchors.push({ text: a.typeDescription });
|
|
223
|
-
anchorType = a.type;
|
|
224
|
-
}
|
|
225
|
-
let score = a.score;
|
|
226
|
-
if (score > 7)
|
|
227
|
-
score -= 7;
|
|
228
|
-
else if (score > 5)
|
|
229
|
-
score -= 5;
|
|
230
|
-
else if (score > 3)
|
|
231
|
-
score -= 3;
|
|
232
|
-
anchors.push({
|
|
233
|
-
text: a.text,
|
|
234
|
-
title: a.title,
|
|
235
|
-
documentId: a.documentId,
|
|
236
|
-
uri: a.uri,
|
|
237
|
-
veryRelevant: score > 0.6
|
|
238
|
-
});
|
|
239
|
-
});
|
|
240
|
-
n.anchors = anchors;
|
|
241
|
-
}
|
|
242
|
-
if (n.validityState > 0) {
|
|
243
|
-
n.validityDescription = 'Il documento non è più vigente';
|
|
244
|
-
n.isExpired = true;
|
|
245
|
-
if (n.validUntilDate) {
|
|
246
|
-
const expiringDate = startOfDay(new Date(n.validUntilDate));
|
|
247
|
-
if (expiringDate < today) {
|
|
248
|
-
n.validityDescription =
|
|
249
|
-
'Il documento non è più vigente dal ' +
|
|
250
|
-
SystemUtils.formatDate(expiringDate) +
|
|
251
|
-
'.';
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
n.validityDescription =
|
|
255
|
-
'Il documento non sarà più vigente dal ' +
|
|
256
|
-
SystemUtils.formatDate(expiringDate) +
|
|
257
|
-
'.';
|
|
258
|
-
n.isExpired = false;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
if (n.expiringDate) {
|
|
263
|
-
n.date = startOfDay(new Date(n.expiringDate));
|
|
264
|
-
const d = startOfDay(subDays(n.date, 15));
|
|
265
|
-
n.isExpiring = today <= n.date && today >= d;
|
|
266
|
-
n.isExpired = n.date < today;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
if (groupByYear) {
|
|
270
|
-
const year = SystemUtils.formatDate(n.date, DateFormat.LongMonthAndYear).toLowerCase();
|
|
271
|
-
if (group !== year) {
|
|
272
|
-
n.group = year;
|
|
273
|
-
group = year;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
else if (groupByRelevance) {
|
|
277
|
-
if (group !== 'none') {
|
|
278
|
-
n.group =
|
|
279
|
-
'Elementi più rilevanti per la ricerca: ' + params.text;
|
|
280
|
-
group = 'none';
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
else if (groupByPopularity) {
|
|
284
|
-
if (group !== 'none') {
|
|
285
|
-
n.group = 'Elementi più popolari in ordine decrescente';
|
|
286
|
-
group = 'none';
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Prepare results
|
|
293
|
-
* @param data : the result list to prepare
|
|
294
|
-
*/
|
|
295
|
-
prepareResults(data) {
|
|
296
|
-
this.selection?.current.clear();
|
|
297
|
-
this.snapshot = data;
|
|
298
|
-
if (this.snapshot.items) {
|
|
299
|
-
this.prepareResultItems(this.snapshot.items, this.filterParams);
|
|
300
|
-
}
|
|
301
|
-
this.changeDetector.markForCheck();
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* Save current document list or just the selected documents as a csv
|
|
305
|
-
* @param format: the export format: 1) list, 2) deadlines
|
|
306
|
-
*/
|
|
307
|
-
exportResults(format = 1) {
|
|
308
|
-
if (this.snapshot?.total > 0 || this.hasAnySelection()) {
|
|
309
|
-
this.exportItems(this.getSeletectIds(), this.filterParams, format);
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Return item state css class
|
|
314
|
-
* @param item : the item to evaluate
|
|
315
|
-
*/
|
|
316
|
-
getItemStateCssClass(item) {
|
|
317
|
-
if (item.isRead !== true && ClipperUtils.isClipperModelReadable(item.model))
|
|
318
|
-
return 'unread-bg';
|
|
319
|
-
else if (item.isExpired)
|
|
320
|
-
return 'expired-bg';
|
|
321
|
-
else if (item.popularity === 3)
|
|
322
|
-
return 'popular-bg';
|
|
323
|
-
else if (item.popularity > 3)
|
|
324
|
-
return 'very-popular-bg';
|
|
325
|
-
return null;
|
|
326
|
-
}
|
|
327
|
-
/**
|
|
328
|
-
* Return the item state tooltip text
|
|
329
|
-
* @param item : the item to evaluate
|
|
330
|
-
*/
|
|
331
|
-
getItemStateTooltip(item) {
|
|
332
|
-
if (item.isRead !== true && ClipperUtils.isClipperModelReadable(item.model))
|
|
333
|
-
return 'Non letto';
|
|
334
|
-
else if (item.isExpired)
|
|
335
|
-
return 'Non più vigente';
|
|
336
|
-
else if (item.popularity === 3)
|
|
337
|
-
return 'Documento con numero di citazioni alto';
|
|
338
|
-
else if (item.popularity > 3)
|
|
339
|
-
return 'Documento con numero di citazioni molto alto';
|
|
340
|
-
return '';
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* Return the item icon
|
|
344
|
-
* @param item : the item to evaluate
|
|
345
|
-
*/
|
|
346
|
-
getItemIcon(item) {
|
|
347
|
-
switch (item.model) {
|
|
348
|
-
case ClipperModel.NormativaVigente: return 'gavel';
|
|
349
|
-
case ClipperModel.Articoli:
|
|
350
|
-
case ClipperModel.Quesiti:
|
|
351
|
-
case ClipperModel.MetodiDiAnalisi: return 'extension';
|
|
352
|
-
default: return 'updated';
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
/**
|
|
356
|
-
* Toggle the read flag
|
|
357
|
-
* @param item : the item to update
|
|
358
|
-
* @paran e: the optional click event
|
|
359
|
-
*/
|
|
360
|
-
toggleRead(item, e = null) {
|
|
361
|
-
e?.preventDefault();
|
|
362
|
-
e?.stopPropagation();
|
|
363
|
-
this.setRead(!item?.isRead, item);
|
|
364
|
-
}
|
|
365
|
-
/**
|
|
366
|
-
* Toggle the selection flag
|
|
367
|
-
* @param item : the item to update
|
|
368
|
-
* @paran e: the optional click event
|
|
369
|
-
*/
|
|
370
|
-
toggleSelection(item, e = null) {
|
|
371
|
-
e?.preventDefault();
|
|
372
|
-
e?.stopPropagation();
|
|
373
|
-
this.selection?.toggle(item, item.documentId);
|
|
374
|
-
}
|
|
375
|
-
/**
|
|
376
|
-
* Set read flag
|
|
377
|
-
* @param value: the flag value
|
|
378
|
-
* @param item: the item to set or null to use current selection
|
|
379
|
-
*/
|
|
380
|
-
setRead(value, item = null) {
|
|
381
|
-
let documentIds = [];
|
|
382
|
-
if (item) {
|
|
383
|
-
documentIds = [item.documentId];
|
|
384
|
-
}
|
|
385
|
-
else if (this.hasAnySelection()) {
|
|
386
|
-
documentIds = this.selection?.all?.map(n => n.documentId);
|
|
387
|
-
}
|
|
388
|
-
return this.clipperService.updateState({ documentIds: documentIds, isRead: value })
|
|
389
|
-
.subscribe(r => {
|
|
390
|
-
if (r.success) {
|
|
391
|
-
let changed = 0;
|
|
392
|
-
if (item) {
|
|
393
|
-
if (item.isRead !== value) {
|
|
394
|
-
item.isRead = value;
|
|
395
|
-
this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_READ, { document: item, value: value });
|
|
396
|
-
changed++;
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
else if (this.hasAnySelection()) {
|
|
400
|
-
this.selection?.all?.forEach(n => {
|
|
401
|
-
if (n.isRead !== value) {
|
|
402
|
-
n.isRead = value;
|
|
403
|
-
this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_READ, { document: n, value: value });
|
|
404
|
-
changed++;
|
|
405
|
-
}
|
|
406
|
-
});
|
|
407
|
-
}
|
|
408
|
-
// Update dashboard
|
|
409
|
-
if (changed > 0) {
|
|
410
|
-
this.clipperService.updateUnreadItems(ClipperUtils.getClipperModuleFromModel(item), item.model, value ? -1 : 1);
|
|
411
|
-
this.changeDetector.markForCheck();
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
/**
|
|
417
|
-
* Open an item
|
|
418
|
-
* @param documentId : the document id
|
|
419
|
-
* @param query: the current query or null
|
|
420
|
-
* @param newWindow: true if the document must be open into a new window
|
|
421
|
-
*/
|
|
422
|
-
open(documentId, query = null, newWindow = false) {
|
|
423
|
-
if (!newWindow)
|
|
424
|
-
this.openDocument(documentId, query);
|
|
425
|
-
else
|
|
426
|
-
window.open('/documento/' + documentId, '_blank');
|
|
427
|
-
}
|
|
428
|
-
/**
|
|
429
|
-
* Open a document
|
|
430
|
-
* @param documentId : the document id
|
|
431
|
-
* @param query: the current query or null
|
|
432
|
-
*/
|
|
433
|
-
openDocument(documentId, query = null) {
|
|
434
|
-
if (!documentId)
|
|
435
|
-
return;
|
|
436
|
-
ClipperDocumentsUtils.openDocument(this.dialogService.baseService, this.clipperService, documentId, query ?? this.filterParams.expandTextQueryUsingAI
|
|
437
|
-
? (this.filterParams.augmentedText ?? this.filterParams.text)
|
|
438
|
-
: this.filterParams.text, null, this.themeService.getTheme());
|
|
439
|
-
}
|
|
440
|
-
///
|
|
441
|
-
// Restorable
|
|
442
|
-
///
|
|
443
|
-
/**
|
|
444
|
-
* Save restorable data
|
|
445
|
-
* @param id : the restorable id
|
|
446
|
-
* @param scroll : the current scroll position
|
|
447
|
-
* @param storage : the storage to use. Default si session storage.
|
|
448
|
-
*/
|
|
449
|
-
save(id, scroll = 0, storage = sessionStorage) {
|
|
450
|
-
storage.setItem(id, JSON.stringify({
|
|
451
|
-
paginator: {
|
|
452
|
-
page: this.paginator?.pageIndex ?? 0,
|
|
453
|
-
total: this.snapshot?.total ?? 0,
|
|
454
|
-
size: this.paginator?.pageSize ?? 15
|
|
455
|
-
},
|
|
456
|
-
facets: this.facets?.save(),
|
|
457
|
-
filterParams: this.filterParams,
|
|
458
|
-
scroll: scroll,
|
|
459
|
-
sort: { mode: this.sortMode, options: this.sortOptions },
|
|
460
|
-
data: this.snapshot
|
|
461
|
-
? { items: this.snapshot.items, total: this.snapshot.total }
|
|
462
|
-
: null
|
|
463
|
-
}));
|
|
464
|
-
}
|
|
465
|
-
/**
|
|
466
|
-
* Restore data
|
|
467
|
-
* @param id : the restorable id
|
|
468
|
-
* @param storage : the storage to use. Default si session storage.
|
|
469
|
-
*/
|
|
470
|
-
restore(id, storage = sessionStorage) {
|
|
471
|
-
const value = storage.getItem(id);
|
|
472
|
-
if (value) {
|
|
473
|
-
const data = JSON.parse(value);
|
|
474
|
-
if (data) {
|
|
475
|
-
this.filterParams = data.filterParams;
|
|
476
|
-
const modules = SystemUtils.clone(this.filterParams.modules);
|
|
477
|
-
const sectors = SystemUtils.clone(this.filterParams.sectors);
|
|
478
|
-
const authors = SystemUtils.clone(this.filterParams.authors);
|
|
479
|
-
const tags = SystemUtils.clone(this.filterParams.tags);
|
|
480
|
-
const topics = SystemUtils.clone(this.filterParams.topics);
|
|
481
|
-
this.filterParams.modules = modules;
|
|
482
|
-
this.filterParams.sectors = null;
|
|
483
|
-
this.filterParams.authors = null;
|
|
484
|
-
this.filterParams.tags = null;
|
|
485
|
-
this.filterParams.topics = null;
|
|
486
|
-
this.snapshot = data.data;
|
|
487
|
-
this.sortMode = data.sort.mode;
|
|
488
|
-
this.sortOptions = data.sort.options;
|
|
489
|
-
setTimeout(() => {
|
|
490
|
-
this.filterParams.sectors = sectors;
|
|
491
|
-
this.filterParams.authors = authors;
|
|
492
|
-
this.filterParams.tags = tags;
|
|
493
|
-
this.filterParams.topics = topics;
|
|
494
|
-
if (this.facets && data.facets) {
|
|
495
|
-
this.facets.restore(data.facets);
|
|
496
|
-
this.hasFacets.set(data.facets.hasFacets === true ? true : false);
|
|
497
|
-
}
|
|
498
|
-
if (this.paginator && data.paginator) {
|
|
499
|
-
this.paginator.pageIndex = data.paginator.page;
|
|
500
|
-
this.paginator.pageSize = data.paginator.size;
|
|
501
|
-
this.paginator.length = data.paginator.total;
|
|
502
|
-
}
|
|
503
|
-
this.scroll(data.scroll ?? 0);
|
|
504
|
-
this.broadcastService.sendMessage(ClipperMessages.COMMAND_SEARCH_RESTORED, data.filterParams);
|
|
505
|
-
this.changeDetector.detectChanges();
|
|
506
|
-
}, 750);
|
|
507
|
-
}
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ClipperSearchResultManager, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
511
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: ClipperSearchResultManager, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "paginator", first: true, predicate: ["paginator"], descendants: true }, { propertyName: "facets", first: true, predicate: ["facets"], descendants: true }, { propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true }], usesInheritance: true, ngImport: i0, template: '<div></div>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
512
|
-
}
|
|
513
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ClipperSearchResultManager, decorators: [{
|
|
514
|
-
type: Component,
|
|
515
|
-
args: [{
|
|
516
|
-
template: '<div></div>',
|
|
517
|
-
standalone: true,
|
|
518
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
519
|
-
imports: [ClipperDocumentManager, ClipperSearchFacetsComponent, ClipperSearchCalendarComponent],
|
|
520
|
-
}]
|
|
521
|
-
}], propDecorators: { paginator: [{
|
|
522
|
-
type: ViewChild,
|
|
523
|
-
args: ['paginator']
|
|
524
|
-
}], facets: [{
|
|
525
|
-
type: ViewChild,
|
|
526
|
-
args: ['facets']
|
|
527
|
-
}], calendar: [{
|
|
528
|
-
type: ViewChild,
|
|
529
|
-
args: ['calendar']
|
|
530
|
-
}] } });
|
|
531
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXJlc3VsdC1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyL3NlYXJjaC1yZXN1bHQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQWEsU0FBUyxFQUFFLE1BQU0sRUFDdkMsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBdUIsZUFBZSxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEwsT0FBTyxFQUNILFVBQVUsRUFDSyxhQUFhLEVBQW1CLFdBQVcsRUFDMUQsWUFBWSxFQUNmLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDOUYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMENBQTBDLENBQUM7O0FBVXhGLE1BQU0sT0FBTywwQkFDVCxTQUFRLHNCQUFzQjtJQVBsQzs7UUFhYyxnQkFBVyxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2pELG1CQUFjLEdBQUcsTUFBTSxDQUFD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Uzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgaW5qZWN0LFxyXG4gICAgc2lnbmFsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudEluZm8sIENsaXBwZXJNZXNzYWdlcywgQ2xpcHBlck1vZGVsLCBDbGlwcGVyU2VhcmNoUGFyYW1zLCBDbGlwcGVyU2VhcmNoUmVzdWx0LCBDbGlwcGVyU29ydCwgQ2xpcHBlclV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgICBEYXRlRm9ybWF0LFxyXG4gICAgTmFtZVZhbHVlSXRlbSwgU2NyZWVuU2VydmljZSwgU2VsZWN0YWJsZU1vZGVsLCBTeXN0ZW1VdGlscyxcclxuICAgIFRoZW1lU2VydmljZVxyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IHN0YXJ0T2ZEYXksIHN0YXJ0T2ZUb2RheSwgc3ViRGF5cyB9IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRzVXRpbHMgfSBmcm9tICcuLi8uLi9kb2N1bWVudHMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRNYW5hZ2VyIH0gZnJvbSAnLi4vZG9jdW1lbnQtbWFuYWdlci9kb2N1bWVudC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWNhbGVuZGFyL3NlYXJjaC1jYWxlbmRhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRmFjZXRzQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWZhY2V0cy9zZWFyY2gtZmFjZXRzLmNvbXBvbmVudCc7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6ICc8ZGl2PjwvZGl2PicsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBpbXBvcnRzOiBbQ2xpcHBlckRvY3VtZW50TWFuYWdlciwgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCwgQ2xpcHBlclNlYXJjaENhbGVuZGFyQ29tcG9uZW50XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJTZWFyY2hSZXN1bHRNYW5hZ2VyXHJcbiAgICBleHRlbmRzIENsaXBwZXJEb2N1bWVudE1hbmFnZXJcclxuICAgIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3BhZ2luYXRvcicpIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcclxuICAgIEBWaWV3Q2hpbGQoJ2ZhY2V0cycpIGZhY2V0cyE6IENsaXBwZXJTZWFyY2hGYWNldHNDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdjYWxlbmRhcicpIGNhbGVuZGFyITogQ2xpcHBlclNlYXJjaENhbGVuZGFyQ29tcG9uZW50O1xyXG5cclxuICAgIHByb3RlY3RlZCB1bnN1YnNjcmliZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgcHJvdGVjdGVkIGJyZWFrcG9pbnRPYnNlcnZlciA9IGluamVjdChCcmVha3BvaW50T2JzZXJ2ZXIpO1xyXG4gICAgcHJpdmF0ZSB0aGVtZVNlcnZpY2UgPSBpbmplY3QoVGhlbWVTZXJ2aWNlKTtcclxuICAgIHB1YmxpYyBzY3JlZW5TZXJ2aWNlID0gaW5qZWN0KFNjcmVlblNlcnZpY2UpO1xyXG4gICAgcHVibGljIHNlbGVjdGlvbjogU2VsZWN0YWJsZU1vZGVsPENsaXBwZXJEb2N1bWVudEluZm8sIHN0cmluZz4gfCBudWxsID0gbnVsbDtcclxuICAgIHByb3RlY3RlZCBzbmFwc2hvdDogQ2xpcHBlclNlYXJjaFJlc3VsdCB8IG51bGwgPSBuZXcgQ2xpcHBlclNlYXJjaFJlc3VsdCgpO1xyXG4gICAgcHJvdGVjdGVkIGZpbHRlckJ1c3kgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJvdGVjdGVkIGZpbHRlclBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcyA9IG5ldyBDbGlwcGVyU2VhcmNoUGFyYW1zKCk7XHJcbiAgICBwcm90ZWN0ZWQgZmlsdGVyUGFuZUhhc0JhY2tkcm9wOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgZmlsdGVyUGFuZUNsb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIGZpbHRlclBhbmUySGFzQmFja2Ryb3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBmaWx0ZXJQYW5lMkNsb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIHNvcnRPcHRpb25zOiBOYW1lVmFsdWVJdGVtPENsaXBwZXJTb3J0PltdID0gW107XHJcbiAgICBwcm90ZWN0ZWQgc29ydE1vZGU6IE5hbWVWYWx1ZUl0ZW08Q2xpcHBlclNvcnQ+IHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcm90ZWN0ZWQgc2Nyb2xsZXJJZDogc3RyaW5nID0gJ3Njcm9sbGVyXycgKyBTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKTtcclxuICAgIHByb3RlY3RlZCByZXN0b3JhYmxlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJvdGVjdGVkIGhhc0ZhY2V0cyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcm90ZWN0ZWQgaGFzUmVnaW9ucyA9ICgpOiBib29sZWFuID0+IHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvcnM/LmZpbHRlcihuID0+IG4udmFsdWUgPT09ICdMUicpLmxlbmd0aCA/PyAwKSA+IDA7XHJcbiAgICB9O1xyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBtZW51IGJ1dHRvbnMgdmlzaWJpbGl0eSB3aGVuIHRoZSBtZW51IGlzIGNsb3NlZFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVNZW51QnV0dG9uc1Zpc2liaWxpdHkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc25hcHNob3QpIHtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5pdGVtcz8uZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICAgIG4uaXNNZW51T3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY3JvbGwgb24gdG9wIG8gbGlzdCBhcmVhXHJcbiAgICAgKiBAcGFyYW0gdG9wOiB0aGUgdG9wIHBvc2l0aW9uXHJcbiAgICAgKi9cclxuICAgIHNjcm9sbCh0b3A6IG51bWJlciA9IDApIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zY3JvbGxlcklkKTtcclxuICAgICAgICBpZiAoZWxlbSkge1xyXG4gICAgICAgICAgICBlbGVtLnNjcm9sbFRvKHsgdG9wOiB0b3AsIGxlZnQ6IDAsIGJlaGF2aW9yOiAnYXV0bycgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgaWYgZXZlcnkgZWxlbWVudCBhcmUgc2VsZWN0ZWRcclxuICAgICAqL1xyXG4gICAgYWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50Py5zZWxlY3RlZD8ubGVuZ3RoID09PSB0aGlzLnNuYXBzaG90Py5pdGVtcz8ubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFzdGVyIHNlbGVjdGlvbiB0b2dnbGVcclxuICAgICAqIEBwYXJhbSBzZWxlY3Q6IHRydWUgdG8gc2VsZWN0IGFsbCBlbGVtZW50cyBmYWxzZSB0byBkZXNlbGVjdCBhbGwgZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgc2VsZWN0QWxsKHNlbGVjdDogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAoc2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3Q/Lml0ZW1zPy5mb3JFYWNoKG4gPT4gdGhpcy5zZWxlY3Rpb24/LnNlbGVjdChuLCBuLmRvY3VtZW50SWQpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90Py5pdGVtcz8uZm9yRWFjaChuID0+IHRoaXMuc2VsZWN0aW9uPy5kZXNlbGVjdChuLCBuLmRvY3VtZW50SWQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENoZWNrIGlmIHNlbGVjdGlvbnMgZXhpc3RzXHJcbiAgICAqIEByZXR1cm5zIHRydWUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaXMgc2VsZWN0ZWRcclxuICAgICovXHJcbiAgICBoYXNBbnlTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGlvbj8uYWxsPy5sZW5ndGggPz8gMCkgPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDaGVjayBpZiBvbmx5IG9uZSBlbGVtZW50IGlzIHNlbGVjdGVkXHJcbiAgICAqIEByZXR1cm5zIHRydWUgaWYgb25seSBvbmUgZWxlbWVudCBpcyBzZWxlY3RlZFxyXG4gICAgKi9cclxuICAgIGhhc1NpbmdsZVNlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0aW9uPy5hbGw/Lmxlbmd0aCA/PyAwKSA9PT0gMTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBpdGVtIFxyXG4gICAgKiBAcmV0dXJucyB0aGUgc2VsZWN0ZWQgaXRlbSBvciBudWxsICAgIFxyXG4gICAgKi9cclxuICAgIGdldFNpbmdsZVNlbGVjdGlvbigpOiBDbGlwcGVyRG9jdW1lbnRJbmZvIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzQW55U2VsZWN0aW9uKCkgPyB0aGlzLnNlbGVjdGlvbj8uYWxsWzBdIDogbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDbGVhciBzZWxlY3Rpb25cclxuICAgICovXHJcbiAgICBjbGVhclNlbGVjdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24/LmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgb3IgbnVsbFxyXG4gICAqIEByZXR1cm5zIFJldHVybiB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zXHJcbiAgICovXHJcbiAgICBjb3VudFNlbGVjdGlvbnMoKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGlvbiAmJiB0aGlzLnNlbGVjdGlvbj8uYWxsPy5sZW5ndGggPiAwKSA/IHRoaXMuc2VsZWN0aW9uPy5hbGw/Lmxlbmd0aCA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgKiBHZXQgdGhlIHNlbGVjdGVkIGlkXHJcbiAgKi9cclxuICAgIGdldFNlbGV0ZWN0SWQoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQW55U2VsZWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uPy5hbGxbMF0uZG9jdW1lbnRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAqIEdldCBhbGwgc2VsZWN0ZWQgaWRzXHJcbiAqL1xyXG4gICAgZ2V0U2VsZXRlY3RJZHMoKTogc3RyaW5nW10gfCBudWxsIHtcclxuICAgICAgICBpZiAoKHRoaXMuc2VsZWN0aW9uPy5hbGw/Lmxlbmd0aCA/PyAwKSA+IDEwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3IoJ0xhIHNlbGV6aW9uZSBub24gcHXDsiBjb250ZW5lcmUgcGnDuSBkaSAxMDAgZWxlbWVudGkuJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0FueVNlbGVjdGlvbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uPy5hbGw/LmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZHMucHVzaChuLmRvY3VtZW50SWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlkcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgc2VsZWN0ZWQgaWRzXHJcbiAgICAgKiBAcmV0dXJucyBhIHR1cGxlIGxpc3Qgd2l0aCBpZCBhbmQgZGF0YVxyXG4gICAgICovXHJcbiAgICBnZXRTZWxldGVjdElkc0FuZERhdGEoKTogW3N0cmluZywgQ2xpcHBlckRvY3VtZW50SW5mb11bXSB8IG51bGwge1xyXG4gICAgICAgIGlmICgodGhpcy5zZWxlY3Rpb24/LmFsbD8ubGVuZ3RoID8/IDApID4gMTAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcignTGEgc2VsZXppb25lIG5vbiBwdcOyIGNvbnRlbmVyZSBwacO5IGRpIDEwMCBlbGVtZW50aS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBkYXRhOiBbc3RyaW5nLCBDbGlwcGVyRG9jdW1lbnRJbmZvXVtdID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQW55U2VsZWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24/LmFsbD8uZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICAgIGRhdGEucHVzaChbbi5kb2N1bWVudElkLCBuXSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwYXJlIHJlc3VsdCBpdGVtc1xyXG4gICAgICogQHBhcmFtIGl0ZW1zIDogdGhlIGl0ZW1zIHRvIHByb2Nlc3NcclxuICAgICAqIEBwYXJhbSBwYXJhbXMgOiB0aGUgY3VycmVudCBzZWFyY2ggcGFyYW1zXHJcbiAgICAgKi9cclxuICAgIHByZXBhcmVSZXN1bHRJdGVtcyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdLCBwYXJhbXM6IENsaXBwZXJTZWFyY2hQYXJhbXMpIHtcclxuICAgICAgICBjb25zdCB0b2RheSA9IHN0YXJ0T2ZUb2RheSgpO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQnlZZWFyID1cclxuICAgICAgICAgICAgIXBhcmFtcy5zb3J0TW9kZSB8fFxyXG4gICAgICAgICAgICBwYXJhbXMuc29ydE1vZGUgPT09IENsaXBwZXJTb3J0LkRhdGVBc2MgfHxcclxuICAgICAgICAgICAgcGFyYW1zLnNvcnRNb2RlID09PSBDbGlwcGVyU29ydC5EYXRlRGVzYyB8fFxyXG4gICAgICAgICAgICBwYXJhbXMuc29ydE1vZGUgPT09IENsaXBwZXJTb3J0LlNvdXJjZURhdGVBc2MgfHxcclxuICAgICAgICAgICAgcGFyYW1zLnNvcnRNb2RlID09PSBDbGlwcGVyU29ydC5Tb3VyY2VEYXRlRGVzYztcclxuICAgICAgICBjb25zdCBncm91cEJ5UmVsZXZhbmNlID0gcGFyYW1zLnNvcnRNb2RlID09PSBDbGlwcGVyU29ydC5SZWxldmFuY2U7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBCeVBvcHVsYXJpdHkgPSBwYXJhbXMuc29ydE1vZGUgPT09IENsaXBwZXJTb3J0LlBvcHVsYXJpdHk7XHJcbiAgICAgICAgbGV0IGdyb3VwID0gJyc7XHJcbiAgICAgICAgaXRlbXM/LmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgIG4uZG9jdW1lbnRJZCA9IG4uZG9jdW1lbnRJZCA/PyBuLmlkO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbj8udXBkYXRlQ3VycmVudChuLCBuLmRvY3VtZW50SWQpO1xyXG4gICAgICAgICAgICBpZiAobi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLlF1ZXNpdGkpIHtcclxuICAgICAgICAgICAgICAgIG4uaW5mbyA9IFwiUXVlc2l0byBuwrAgXCIgKyBuLm51bWJlciArIFwiIGRlbCBcIiArIFN5c3RlbVV0aWxzLmZvcm1hdERhdGUobi5kYXRlLCBcImQgTU1NIHl5eXlcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLlNjYWRlbnplIHx8XHJcbiAgICAgICAgICAgICAgICBuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuU2VnbmFsYXppb25pKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG4ubW9kZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIENsaXBwZXJNb2RlbC5TY2FkZW56ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbi5vcmlnaW5EZXNjcmlwdGlvbiA9ICdTY2FkZW56YSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQ2xpcHBlck1vZGVsLlNlZ25hbGF6aW9uaTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbi5vcmlnaW5EZXNjcmlwdGlvbiA9ICdTZWduYWxhemlvbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChuLmV4cGlyaW5nSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0cyA9IG4uZXhwaXJpbmdJbmZvLnNwbGl0KCd8Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuLmV4cGlyaW5nRGVzY3JpcHRpb24gPSBwYXJ0c1syXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobi5leHBpcmluZ0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBuLmRhdGUgPSBzdGFydE9mRGF5KG5ldyBEYXRlKG4uZXhwaXJpbmdEYXRlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IHN0YXJ0T2ZEYXkoc3ViRGF5cyhuLmRhdGUsIDE1KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyaW5nID0gdG9kYXkgPD0gbi5kYXRlICYmIHRvZGF5ID49IGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyZWQgPSBuLmRhdGUgPCB0b2RheTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5BcnRpY29saSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5OZXdzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIG4udGFncykge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uaW5mbyA9IG4udGFncy50b1VwcGVyQ2FzZSgpLnN1YnN0cmluZygxKS5yZXBsYWNlQWxsKFwiI1wiLCBcIiwgXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG4ubW9kZWwgIT09IENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvICYmXHJcbiAgICAgICAgICAgICAgICAgICAgbi5tb2RlbCAhPT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgJiZcclxuICAgICAgICAgICAgICAgICAgICBuLm1vZGVsICE9PSBDbGlwcGVyTW9kZWwuR2l1cmlzcHJ1ZGVuemFSZWNlbnRlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgbi5tb2RlbCAhPT0gQ2xpcHBlck1vZGVsLkp1cmlzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgbi5kYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5kYXRlID0gc3RhcnRPZkRheShuZXcgRGF0ZShuLmRhdGUgPz8gbi5wdWJsaXNoaW5nRGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBzdGFydE9mRGF5KHN1YkRheXMoc3RhcnRPZlRvZGF5KCksIDcpKVxyXG4gICAgICAgICAgICAgICAgICAgIG4uaXNOZXcgPSBuLmRhdGUgPiBkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG4uYW5jaG9ycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhbmNob3JUeXBlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYW5jaG9yczogYW55ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbi5hbmNob3JzLmZvckVhY2goYSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLnR5cGUgPT09IDIwKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLnR5cGUgIT09IGFuY2hvclR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLnR5cGUgPj0gMylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JzLnB1c2goeyB0ZXh0OiBhLnR5cGVEZXNjcmlwdGlvbiB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvclR5cGUgPSBhLnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNjb3JlID0gYS5zY29yZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3JlID4gNykgc2NvcmUgLT0gNztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NvcmUgPiA1KSBzY29yZSAtPSA1O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY29yZSA+IDMpIHNjb3JlIC09IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBhLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYS50aXRsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50SWQ6IGEuZG9jdW1lbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaTogYS51cmksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ5UmVsZXZhbnQ6IHNjb3JlID4gMC42XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG4uYW5jaG9ycyA9IGFuY2hvcnM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobi52YWxpZGl0eVN0YXRlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG4udmFsaWRpdHlEZXNjcmlwdGlvbiA9ICdJbCBkb2N1bWVudG8gbm9uIMOoIHBpw7kgdmlnZW50ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuLnZhbGlkVW50aWxEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGlyaW5nRGF0ZSA9IHN0YXJ0T2ZEYXkobmV3IERhdGUobi52YWxpZFVudGlsRGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwaXJpbmdEYXRlIDwgdG9kYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4udmFsaWRpdHlEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lsIGRvY3VtZW50byBub24gw6ggcGnDuSB2aWdlbnRlIGRhbCAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGV4cGlyaW5nRGF0ZSkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4udmFsaWRpdHlEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lsIGRvY3VtZW50byBub24gc2Fyw6AgcGnDuSB2aWdlbnRlIGRhbCAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGV4cGlyaW5nRGF0ZSkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4uaXNFeHBpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobi5leHBpcmluZ0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBuLmRhdGUgPSBzdGFydE9mRGF5KG5ldyBEYXRlKG4uZXhwaXJpbmdEYXRlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IHN0YXJ0T2ZEYXkoc3ViRGF5cyhuLmRhdGUsIDE1KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyaW5nID0gdG9kYXkgPD0gbi5kYXRlICYmIHRvZGF5ID49IGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyZWQgPSBuLmRhdGUgPCB0b2RheTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZ3JvdXBCeVllYXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKG4uZGF0ZSwgRGF0ZUZvcm1hdC5Mb25nTW9udGhBbmRZZWFyKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwICE9PSB5ZWFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5ncm91cCA9IHllYXI7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSB5ZWFyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdyb3VwQnlSZWxldmFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmIChncm91cCAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5ncm91cCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdFbGVtZW50aSBwacO5IHJpbGV2YW50aSBwZXIgbGEgcmljZXJjYTogJyArIHBhcmFtcy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdyb3VwQnlQb3B1bGFyaXR5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgIT09ICdub25lJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uZ3JvdXAgPSAnRWxlbWVudGkgcGnDuSBwb3BvbGFyaSBpbiBvcmRpbmUgZGVjcmVzY2VudGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlcGFyZSByZXN1bHRzXHJcbiAgICAgKiBAcGFyYW0gZGF0YSA6IHRoZSByZXN1bHQgbGlzdCB0byBwcmVwYXJlXHJcbiAgICAgKi9cclxuICAgIHByZXBhcmVSZXN1bHRzKGRhdGE6IENsaXBwZXJTZWFyY2hSZXN1bHQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbj8uY3VycmVudC5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuc25hcHNob3QgPSBkYXRhO1xyXG4gICAgICAgIGlmICh0aGlzLnNuYXBzaG90Lml0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVJlc3VsdEl0ZW1zKHRoaXMuc25hcHNob3QuaXRlbXMsIHRoaXMuZmlsdGVyUGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFNhdmUgY3VycmVudCBkb2N1bWVudCBsaXN0IG9yIGp1c3QgdGhlIHNlbGVjdGVkIGRvY3VtZW50cyBhcyBhIGNzdlxyXG4gICAgKiBAcGFyYW0gZm9ybWF0OiB0aGUgZXhwb3J0IGZvcm1hdDogMSkgbGlzdCwgMikgZGVhZGxpbmVzXHJcbiAgICAqL1xyXG4gICAgZXhwb3J0UmVzdWx0cyhmb3JtYXQ6IG51bWJlciA9IDEpIHtcclxuICAgICAgICBpZiAodGhpcy5zbmFwc2hvdD8udG90YWwgPiAwIHx8IHRoaXMuaGFzQW55U2VsZWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5leHBvcnRJdGVtcyh0aGlzLmdldFNlbGV0ZWN0SWRzKCksIHRoaXMuZmlsdGVyUGFyYW1zLCBmb3JtYXQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJldHVybiBpdGVtIHN0YXRlIGNzcyBjbGFzc1xyXG4gICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGV2YWx1YXRlXHJcbiAgICAqL1xyXG4gICAgZ2V0SXRlbVN0YXRlQ3NzQ2xhc3MoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGlmIChpdGVtLmlzUmVhZCAhPT0gdHJ1ZSAmJiBDbGlwcGVyVXRpbHMuaXNDbGlwcGVyTW9kZWxSZWFkYWJsZShpdGVtLm1vZGVsKSkgcmV0dXJuICd1bnJlYWQtYmcnO1xyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0uaXNFeHBpcmVkKSByZXR1cm4gJ2V4cGlyZWQtYmcnO1xyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0ucG9wdWxhcml0eSA9PT0gMykgcmV0dXJuICdwb3B1bGFyLWJnJztcclxuICAgICAgICBlbHNlIGlmIChpdGVtLnBvcHVsYXJpdHkgPiAzKSByZXR1cm4gJ3ZlcnktcG9wdWxhci1iZyc7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdGhlIGl0ZW0gc3RhdGUgdG9vbHRpcCB0ZXh0XHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGV2YWx1YXRlXHJcbiAgICAgKi9cclxuICAgIGdldEl0ZW1TdGF0ZVRvb2x0aXAoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXNSZWFkICE9PSB0cnVlICYmIENsaXBwZXJVdGlscy5pc0NsaXBwZXJNb2RlbFJlYWRhYmxlKGl0ZW0ubW9kZWwpKSByZXR1cm4gJ05vbiBsZXR0byc7XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5pc0V4cGlyZWQpIHJldHVybiAnTm9uIHBpw7kgdmlnZW50ZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5wb3B1bGFyaXR5ID09PSAzKSByZXR1cm4gJ0RvY3VtZW50byBjb24gbnVtZXJvIGRpIGNpdGF6aW9uaSBhbHRvJztcclxuICAgICAgICBlbHNlIGlmIChpdGVtLnBvcHVsYXJpdHkgPiAzKVxyXG4gICAgICAgICAgICByZXR1cm4gJ0RvY3VtZW50byBjb24gbnVtZXJvIGRpIGNpdGF6aW9uaSBtb2x0byBhbHRvJztcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJldHVybiB0aGUgaXRlbSBpY29uXHJcbiAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gZXZhbHVhdGVcclxuICAgICovXHJcbiAgICBnZXRJdGVtSWNvbihpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKGl0ZW0ubW9kZWwpIHtcclxuICAgICAgICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZTogcmV0dXJuICdnYXZlbCc7XHJcbiAgICAgICAgICAgIGNhc2UgQ2xpcHBlck1vZGVsLkFydGljb2xpOlxyXG4gICAgICAgICAgICBjYXNlIENsaXBwZXJNb2RlbC5RdWVzaXRpOlxyXG4gICAgICAgICAgICBjYXNlIENsaXBwZXJNb2RlbC5NZXRvZGlEaUFuYWxpc2k6IHJldHVybiAnZXh0ZW5zaW9uJztcclxuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuICd1cGRhdGVkJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUb2dnbGUgdGhlIHJlYWQgZmxhZ1xyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byB1cGRhdGVcclxuICAgICAqIEBwYXJhbiBlOiB0aGUgb3B0aW9uYWwgY2xpY2sgZXZlbnRcclxuICAgICAqL1xyXG4gICAgdG9nZ2xlUmVhZChpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvLCBlOiBFdmVudCB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgZT8ucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlPy5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLnNldFJlYWQoIWl0ZW0/LmlzUmVhZCwgaXRlbSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBUb2dnbGUgdGhlIHNlbGVjdGlvbiBmbGFnXHJcbiAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gdXBkYXRlXHJcbiAgICAqIEBwYXJhbiBlOiB0aGUgb3B0aW9uYWwgY2xpY2sgZXZlbnRcclxuICAgICovXHJcbiAgICB0b2dnbGVTZWxlY3Rpb24oaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbywgZTogRXZlbnQgfCBudWxsID0gbnVsbCkge1xyXG4gICAgICAgIGU/LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZT8uc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24/LnRvZ2dsZShpdGVtLCBpdGVtLmRvY3VtZW50SWQpXHJcblxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFNldCByZWFkIGZsYWdcclxuICAgICogQHBhcmFtIHZhbHVlOiB0aGUgZmxhZyB2YWx1ZVxyXG4gICAgKiBAcGFyYW0gaXRlbTogdGhlIGl0ZW0gdG8gc2V0IG9yIG51bGwgdG8gdXNlIGN1cnJlbnQgc2VsZWN0aW9uXHJcbiAgICAqL1xyXG4gICAgc2V0UmVhZCh2YWx1ZTogYm9vbGVhbiwgaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGRvY3VtZW50SWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50SWRzID0gW2l0ZW0uZG9jdW1lbnRJZF07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0FueVNlbGVjdGlvbigpKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50SWRzID0gdGhpcy5zZWxlY3Rpb24/LmFsbD8ubWFwKG4gPT4gbi5kb2N1bWVudElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpcHBlclNlcnZpY2UudXBkYXRlU3RhdGUoeyBkb2N1bWVudElkczogZG9jdW1lbnRJZHMsIGlzUmVhZDogdmFsdWUgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2hhbmdlZCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaXNSZWFkICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pc1JlYWQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuRE9DVU1FTlRfUkVBRCwgeyBkb2N1bWVudDogaXRlbSwgdmFsdWU6IHZhbHVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0FueVNlbGVjdGlvbigpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uPy5hbGw/LmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobi5pc1JlYWQgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi5pc1JlYWQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkRPQ1VNRU5UX1JFQUQsIHsgZG9jdW1lbnQ6IG4sIHZhbHVlOiB2YWx1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZGFzaGJvYXJkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UudXBkYXRlVW5yZWFkSXRlbXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGlwcGVyVXRpbHMuZ2V0Q2xpcHBlck1vZHVsZUZyb21Nb2RlbChpdGVtKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubW9kZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IC0xIDogMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICogT3BlbiBhbiBpdGVtXHJcbiAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAqIEBwYXJhbSBxdWVyeTogdGhlIGN1cnJlbnQgcXVlcnkgb3IgbnVsbFxyXG4gKiBAcGFyYW0gbmV3V2luZG93OiB0cnVlIGlmIHRoZSBkb2N1bWVudCBtdXN0IGJlIG9wZW4gaW50byBhIG5ldyB3aW5kb3dcclxuICovXHJcbiAgICBvdmVycmlkZSBvcGVuKGRvY3VtZW50SWQ6IHN0cmluZywgcXVlcnk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLCBuZXdXaW5kb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICghbmV3V2luZG93KSB0aGlzLm9wZW5Eb2N1bWVudChkb2N1bWVudElkLCBxdWVyeSk7XHJcbiAgICAgICAgZWxzZSB3aW5kb3cub3BlbignL2RvY3VtZW50by8nICsgZG9jdW1lbnRJZCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBhIGRvY3VtZW50XHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgICogQHBhcmFtIHF1ZXJ5OiB0aGUgY3VycmVudCBxdWVyeSBvciBudWxsXHJcbiAgICAgKi9cclxuICAgIG9wZW5Eb2N1bWVudChkb2N1bWVudElkOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnRJZCkgcmV0dXJuO1xyXG4gICAgICAgIENsaXBwZXJEb2N1bWVudHNVdGlscy5vcGVuRG9jdW1lbnQoXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5iYXNlU2VydmljZSxcclxuICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZSxcclxuICAgICAgICAgICAgZG9jdW1lbnRJZCxcclxuICAgICAgICAgICAgcXVlcnkgPz8gdGhpcy5maWx0ZXJQYXJhbXMuZXhwYW5kVGV4dFF1ZXJ5VXNpbmdBSVxyXG4gICAgICAgICAgICAgICAgPyAodGhpcy5maWx0ZXJQYXJhbXMuYXVnbWVudGVkVGV4dCA/PyB0aGlzLmZpbHRlclBhcmFtcy50ZXh0KVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy50ZXh0LFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICB0aGlzLnRoZW1lU2VydmljZS5nZXRUaGVtZSgpKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8vXHJcbiAgICAvLyBSZXN0b3JhYmxlXHJcbiAgICAvLy9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNhdmUgcmVzdG9yYWJsZSBkYXRhXHJcbiAgICAgKiBAcGFyYW0gaWQgOiB0aGUgcmVzdG9yYWJsZSBpZFxyXG4gICAgICogQHBhcmFtIHNjcm9sbCA6IHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvblxyXG4gICAgICogQHBhcmFtIHN0b3JhZ2UgOiB0aGUgc3RvcmFnZSB0byB1c2UuIERlZmF1bHQgc2kgc2Vzc2lvbiBzdG9yYWdlLlxyXG4gICAgICovXHJcbiAgICBzYXZlKGlkOiBzdHJpbmcsIHNjcm9sbDogbnVtYmVyID0gMCwgc3RvcmFnZTogU3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlKSB7XHJcbiAgICAgICAgc3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgcGFnaW5hdG9yOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiB0aGlzLnNuYXBzaG90Py50b3RhbCA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IHRoaXMucGFnaW5hdG9yPy5wYWdlU2l6ZSA/PyAxNVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZhY2V0czogdGhpcy5mYWNldHM/LnNhdmUoKSxcclxuICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtczogdGhpcy5maWx0ZXJQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBzY3JvbGw6IHNjcm9sbCxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHsgbW9kZTogdGhpcy5zb3J0TW9kZSwgb3B0aW9uczogdGhpcy5zb3J0T3B0aW9ucyB9LFxyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zbmFwc2hvdFxyXG4gICAgICAgICAgICAgICAgICAgID8geyBpdGVtczogdGhpcy5zbmFwc2hvdC5pdGVtcywgdG90YWw6IHRoaXMuc25hcHNob3QudG90YWwgfVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN0b3JlIGRhdGFcclxuICAgICAqIEBwYXJhbSBpZCA6IHRoZSByZXN0b3JhYmxlIGlkXHJcbiAgICAgKiBAcGFyYW0gc3RvcmFnZSA6IHRoZSBzdG9yYWdlIHRvIHVzZS4gRGVmYXVsdCBzaSBzZXNzaW9uIHN0b3JhZ2UuXHJcbiAgICAgKi9cclxuICAgIHJlc3RvcmUoaWQ6IHN0cmluZywgc3RvcmFnZTogU3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzdG9yYWdlLmdldEl0ZW0oaWQpO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcyA9IGRhdGEuZmlsdGVyUGFyYW1zO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlcyA9IFN5c3RlbVV0aWxzLmNsb25lKHRoaXMuZmlsdGVyUGFyYW1zLm1vZHVsZXMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VjdG9ycyA9IFN5c3RlbVV0aWxzLmNsb25lKHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvcnMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9ycyA9IFN5c3RlbVV0aWxzLmNsb25lKHRoaXMuZmlsdGVyUGFyYW1zLmF1dGhvcnMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGFncyA9IFN5c3RlbVV0aWxzLmNsb25lKHRoaXMuZmlsdGVyUGFyYW1zLnRhZ3MpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG9waWNzID0gU3lzdGVtVXRpbHMuY2xvbmUodGhpcy5maWx0ZXJQYXJhbXMudG9waWNzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZHVsZXMgPSBtb2R1bGVzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9ycyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5hdXRob3JzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRhZ3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudG9waWNzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc25hcHNob3QgPSBkYXRhLmRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRNb2RlID0gZGF0YS5zb3J0Lm1vZGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRPcHRpb25zID0gZGF0YS5zb3J0Lm9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3JzID0gc2VjdG9ycztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5hdXRob3JzID0gYXV0aG9ycztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50YWdzID0gdGFncztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50b3BpY3MgPSB0b3BpY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmFjZXRzICYmIGRhdGEuZmFjZXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmFjZXRzLnJlc3RvcmUoZGF0YS5mYWNldHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0ZhY2V0cy5zZXQoZGF0YS5mYWNldHMuaGFzRmFjZXRzID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmIGRhdGEucGFnaW5hdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IGRhdGEucGFnaW5hdG9yLnBhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gZGF0YS5wYWdpbmF0b3Iuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3IubGVuZ3RoID0gZGF0YS5wYWdpbmF0b3IudG90YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsKGRhdGEuc2Nyb2xsID8/IDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9TRUFSQ0hfUkVTVE9SRUQsIGRhdGEuZmlsdGVyUGFyYW1zKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgfSwgNzUwKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public_api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJzZWRpemlvbmktYXJzLXV0aWxzLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY29yZS9hcnNlZGl6aW9uaS1hcnMtdXRpbHMtY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19
|