@oneteme/jquery-organizer 0.0.6 → 0.0.7
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/esm2022/lib/group-by-manager/group-by-manager.mjs +3 -1
- package/esm2022/lib/models/organizer-chart-adapter.mjs +1 -17
- package/esm2022/lib/organizer-button/organizer-button.component.mjs +18 -25
- package/esm2022/lib/organizer-facade/organizer-facade.mjs +31 -21
- package/esm2022/lib/organizer-facade/organizer-facade.types.mjs +1 -1
- package/esm2022/lib/slice-panel/slice-panel.component.mjs +67 -51
- package/esm2022/lib/slice-panel/slice-panel.model.mjs +1 -1
- package/esm2022/public-api.mjs +1 -2
- package/fesm2022/oneteme-jquery-organizer.mjs +117 -202
- package/fesm2022/oneteme-jquery-organizer.mjs.map +1 -1
- package/lib/organizer-button/organizer-button.component.d.ts +4 -3
- package/lib/organizer-facade/organizer-facade.d.ts +8 -3
- package/lib/organizer-facade/organizer-facade.types.d.ts +2 -2
- package/lib/slice-panel/slice-panel.component.d.ts +7 -2
- package/lib/slice-panel/slice-panel.model.d.ts +4 -4
- package/package.json +2 -2
- package/public-api.d.ts +0 -1
- package/esm2022/lib/lazy-field-manager/lazy-field-manager.mjs +0 -91
- package/lib/lazy-field-manager/lazy-field-manager.d.ts +0 -25
|
@@ -47,6 +47,8 @@ export class GroupByManager {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
groupPageForward(groupKey, totalCount) {
|
|
50
|
+
if (this.groupPageSize <= 0)
|
|
51
|
+
return;
|
|
50
52
|
const maxPage = Math.ceil(totalCount / this.groupPageSize) - 1;
|
|
51
53
|
const current = this._groupPages.get(groupKey) ?? 0;
|
|
52
54
|
if (current < maxPage) {
|
|
@@ -70,4 +72,4 @@ export class GroupByManager {
|
|
|
70
72
|
scrollTo(openGroup);
|
|
71
73
|
}
|
|
72
74
|
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtYnktbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZXRlbWUvanF1ZXJ5LW9yZ2FuaXplci9zcmMvbGliL2dyb3VwLWJ5LW1hbmFnZXIvZ3JvdXAtYnktbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sY0FBYztJQVN6QixZQUNtQixnQkFBNEIsRUFDNUIsWUFBd0I7UUFEeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFZO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFZO1FBVjFCLHFCQUFnQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDckMsZ0JBQVcsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUV6RCxrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixtQkFBYyxHQUFtQixLQUFLLENBQUM7UUFFL0IsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO0lBS3BDLENBQUM7SUFFSixtQkFBbUIsQ0FBQyxTQUFrQjtRQUNwQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0lBQzFDLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLHNCQUFzQjtZQUNoQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBZ0IsRUFBRSxRQUErQjtRQUNuRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4QzthQUFNO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLENBQUM7WUFDcEUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUM7SUFFRCxPQUFPLENBQUMsUUFBZ0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUFnQjtRQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFnQixFQUFFLFVBQWtCO1FBQ25ELElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDO1lBQUUsT0FBTztRQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLE9BQU8sR0FBRyxPQUFPLEVBQUU7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxJQUFZO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFtQixFQUFFLFFBQStCO1FBQ3BFLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxHQUFHO1lBQUUsT0FBTztRQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QyxJQUFJLFNBQVM7WUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEdyb3VwQnlNYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29sbGFwc2VkR3JvdXBzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2dyb3VwUGFnZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gIGdyb3VwUGFnZVNpemUgPSA1O1xuICBncm91cFNvcnRPcmRlcjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJztcblxuICBwcml2YXRlIF9kZWZhdWx0R3JvdXBDb2xsYXBzZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9uTmVlZFByb2plY3Rpb246ICgpID0+IHZvaWQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvbk5lZWRSZW5kZXI6ICgpID0+IHZvaWQsXG4gICkge31cblxuICBzZXREZWZhdWx0Q29sbGFwc2VkKGNvbGxhcHNlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2RlZmF1bHRHcm91cENvbGxhcHNlZCA9IGNvbGxhcHNlZDtcbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbGxhcHNlZEdyb3Vwcy5jbGVhcigpO1xuICAgIHRoaXMuX2dyb3VwUGFnZXMuY2xlYXIoKTtcbiAgfVxuXG4gIGlzR3JvdXBDb2xsYXBzZWQoZ3JvdXBLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0R3JvdXBDb2xsYXBzZWRcbiAgICAgID8gIXRoaXMuX2NvbGxhcHNlZEdyb3Vwcy5oYXMoZ3JvdXBLZXkpXG4gICAgICA6IHRoaXMuX2NvbGxhcHNlZEdyb3Vwcy5oYXMoZ3JvdXBLZXkpO1xuICB9XG5cbiAgdG9nZ2xlR3JvdXBDb2xsYXBzZShncm91cEtleTogc3RyaW5nLCBzY3JvbGxUbzogKGtleTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NvbGxhcHNlZEdyb3Vwcy5oYXMoZ3JvdXBLZXkpKSB7XG4gICAgICB0aGlzLl9jb2xsYXBzZWRHcm91cHMuZGVsZXRlKGdyb3VwS2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY29sbGFwc2VkR3JvdXBzLmNsZWFyKCk7XG4gICAgICB0aGlzLl9jb2xsYXBzZWRHcm91cHMuYWRkKGdyb3VwS2V5KTtcbiAgICAgIHNjcm9sbFRvKGdyb3VwS2V5KTtcbiAgICB9XG4gICAgdGhpcy5vbk5lZWRQcm9qZWN0aW9uKCk7XG4gIH1cblxuICBnZXRTaW5nbGVPcGVuR3JvdXAoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRHcm91cENvbGxhcHNlZCAmJiB0aGlzLl9jb2xsYXBzZWRHcm91cHMuc2l6ZSA9PT0gMVxuICAgICAgPyBbLi4udGhpcy5fY29sbGFwc2VkR3JvdXBzXVswXVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgZ2V0UGFnZShncm91cEtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JvdXBQYWdlcy5nZXQoZ3JvdXBLZXkpID8/IDA7XG4gIH1cblxuICBncm91cFBhZ2VCYWNrKGdyb3VwS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5fZ3JvdXBQYWdlcy5nZXQoZ3JvdXBLZXkpID8/IDA7XG4gICAgaWYgKGN1cnJlbnQgPiAwKSB7XG4gICAgICB0aGlzLl9ncm91cFBhZ2VzLnNldChncm91cEtleSwgY3VycmVudCAtIDEpO1xuICAgICAgdGhpcy5vbk5lZWRQcm9qZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgZ3JvdXBQYWdlRm9yd2FyZChncm91cEtleTogc3RyaW5nLCB0b3RhbENvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ncm91cFBhZ2VTaXplIDw9IDApIHJldHVybjtcbiAgICBjb25zdCBtYXhQYWdlID0gTWF0aC5jZWlsKHRvdGFsQ291bnQgLyB0aGlzLmdyb3VwUGFnZVNpemUpIC0gMTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5fZ3JvdXBQYWdlcy5nZXQoZ3JvdXBLZXkpID8/IDA7XG4gICAgaWYgKGN1cnJlbnQgPCBtYXhQYWdlKSB7XG4gICAgICB0aGlzLl9ncm91cFBhZ2VzLnNldChncm91cEtleSwgY3VycmVudCArIDEpO1xuICAgICAgdGhpcy5vbk5lZWRQcm9qZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgb25Hcm91cFBhZ2VTaXplQ2hhbmdlKHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBQYWdlU2l6ZSA9IHNpemU7XG4gICAgdGhpcy5fZ3JvdXBQYWdlcy5jbGVhcigpO1xuICAgIHRoaXMub25OZWVkUmVuZGVyKCk7XG4gIH1cblxuICBvbkdyb3VwU29ydFRvZ2dsZShkaXI6ICdhc2MnIHwgJ2Rlc2MnLCBzY3JvbGxUbzogKGtleTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZ3JvdXBTb3J0T3JkZXIgPT09IGRpcikgcmV0dXJuO1xuICAgIHRoaXMuZ3JvdXBTb3J0T3JkZXIgPSBkaXI7XG4gICAgdGhpcy5fZ3JvdXBQYWdlcy5jbGVhcigpO1xuICAgIHRoaXMub25OZWVkUmVuZGVyKCk7XG4gICAgY29uc3Qgb3Blbkdyb3VwID0gdGhpcy5nZXRTaW5nbGVPcGVuR3JvdXAoKTtcbiAgICBpZiAob3Blbkdyb3VwKSBzY3JvbGxUbyhvcGVuR3JvdXApO1xuICB9XG59XG4iXX0=
|
|
@@ -3,14 +3,8 @@ import { getGroupItems, getIndicatorItems, getFilterItems, getStackItems } from
|
|
|
3
3
|
export { getGroupItems, getIndicatorItems, getFilterItems, getStackItems } from './organizer-chart-config';
|
|
4
4
|
export function chartConfigToOrganizer(chartConfig, options = {}) {
|
|
5
5
|
if (!chartConfig) {
|
|
6
|
-
console.debug('[OrganizerChartAdapter] Empty chart config, returning empty organizer config');
|
|
7
6
|
return {};
|
|
8
7
|
}
|
|
9
|
-
console.debug('[OrganizerChartAdapter] Converting chart config to organizer', {
|
|
10
|
-
hasGroups: !!chartConfig.groups,
|
|
11
|
-
indicatorCount: chartConfig.indicators?.items?.length ?? 0,
|
|
12
|
-
filterCount: chartConfig.filters?.items?.length ?? 0
|
|
13
|
-
});
|
|
14
8
|
const { onFetchSliceData, onExportVisual, onExportData, switchView } = options;
|
|
15
9
|
const indicators = getIndicatorItems(chartConfig);
|
|
16
10
|
const activeIndicator = indicators.find(i => i.selected);
|
|
@@ -44,7 +38,6 @@ export function chartConfigToOrganizer(chartConfig, options = {}) {
|
|
|
44
38
|
}
|
|
45
39
|
export function chartConfigToState(chartConfig) {
|
|
46
40
|
if (!chartConfig) {
|
|
47
|
-
console.debug('[OrganizerChartAdapter] Empty chart config for state conversion');
|
|
48
41
|
return {};
|
|
49
42
|
}
|
|
50
43
|
const indicators = getIndicatorItems(chartConfig);
|
|
@@ -53,12 +46,6 @@ export function chartConfigToState(chartConfig) {
|
|
|
53
46
|
const activeGroup = getGroupItems(chartConfig).find(g => g.selected);
|
|
54
47
|
const activeSlices = getFilterItems(chartConfig).filter(f => f.selected);
|
|
55
48
|
const indicatorGroup = activeIndicator?.group;
|
|
56
|
-
console.debug('[OrganizerChartAdapter] Current chart state', {
|
|
57
|
-
activeGroup: activeGroup?.key,
|
|
58
|
-
activeIndicator: activeIndicator?.key,
|
|
59
|
-
activeStack: activeStack?.key,
|
|
60
|
-
sliceCount: activeSlices.length
|
|
61
|
-
});
|
|
62
49
|
const state = {
|
|
63
50
|
selectedX: activeGroup?.key,
|
|
64
51
|
selectedY: indicatorGroup ?? activeIndicator?.key,
|
|
@@ -88,10 +75,8 @@ export function chartConfigToUnifiedState(chartConfig, viewMode = 'chart') {
|
|
|
88
75
|
}
|
|
89
76
|
export function applyOrganizerEventToChart(event, chartConfig) {
|
|
90
77
|
if (!chartConfig) {
|
|
91
|
-
console.debug('[OrganizerChartAdapter] Cannot apply event to empty chart config');
|
|
92
78
|
return;
|
|
93
79
|
}
|
|
94
|
-
console.debug('[OrganizerChartAdapter] Applying organizer event', { eventType: event.type, state: event.state });
|
|
95
80
|
const state = event.state;
|
|
96
81
|
_cleanSynthetics(chartConfig);
|
|
97
82
|
if (state.selectedX !== undefined)
|
|
@@ -105,7 +90,6 @@ export function applyOrganizerEventToChart(event, chartConfig) {
|
|
|
105
90
|
event.resolvedYUnit = resolveYUnit(chartConfig, event.state.selectedY, event.state.selectedYAggregate);
|
|
106
91
|
}
|
|
107
92
|
export function handleOrganizerChartEvent(event, chartConfig, currentBinding, options = {}) {
|
|
108
|
-
console.debug('[OrganizerChartAdapter] Handling organizer event', { eventType: event.type });
|
|
109
93
|
if (event.type === 'viewSwitched') {
|
|
110
94
|
return {
|
|
111
95
|
binding: {
|
|
@@ -225,4 +209,4 @@ function _applyGroupBySelection(effectiveGroupBy, chartConfig) {
|
|
|
225
209
|
function _applySliceSelection(selectedSlices, chartConfig) {
|
|
226
210
|
getFilterItems(chartConfig).forEach(f => { f.selected = selectedSlices.includes(f.key); });
|
|
227
211
|
}
|
|
228
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV2RixPQUFPLEVBQXdCLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakksT0FBTyxFQUF3QixhQUFhLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBMENqSSxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLFdBQW9ELEVBQ3BELFVBQXVDLEVBQUU7SUFFekMsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNoQixPQUFPLENBQUMsS0FBSyxDQUFDLDhFQUE4RSxDQUFDLENBQUM7UUFDOUYsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsOERBQThELEVBQUU7UUFDNUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTTtRQUMvQixjQUFjLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7UUFDMUQsV0FBVyxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0tBQ3JELENBQUMsQ0FBQztJQUVILE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMvRSxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNs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QUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNsRDtBQUNILENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLGNBQXdCLEVBQUUsV0FBaUM7SUFDdkYsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3JnYW5pemVyQnV0dG9uRXZlbnQsIE9yZ2FuaXplckNvbmZpZywgT3JnYW5pemVyU3RhdGUsIE9yZ2FuaXplclVuaWZpZWRTdGF0ZSwgT3JnYW5pemVyVmlld1NsaWNlLCBPcmdhbml6ZXJYRmllbGQgfSBmcm9tICcuL29yZ2FuaXplci1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IGJ1aWxkWUZpZWxkcywgbm9ybWFsaXplT3JnYW5pemVyU3RhdGUsIHJlc29sdmVZS2V5IH0gZnJvbSAnLi9vcmdhbml6ZXItdXRpbHMnO1xuaW1wb3J0IHsgVW5pdENvbmZpZyB9IGZyb20gJ0BvbmV0ZW1lL2pxdWVyeS1jb3JlJztcbmltcG9ydCB7IE9yZ2FuaXplckNoYXJ0Q29uZmlnLCBnZXRHcm91cEl0ZW1zLCBnZXRJbmRpY2F0b3JJdGVtcywgZ2V0RmlsdGVySXRlbXMsIGdldFN0YWNrSXRlbXMgfSBmcm9tICcuL29yZ2FuaXplci1jaGFydC1jb25maWcnO1xuXG5leHBvcnQgeyBPcmdhbml6ZXJDaGFydENvbmZpZywgZ2V0R3JvdXBJdGVtcywgZ2V0SW5kaWNhdG9ySXRlbXMsIGdldEZpbHRlckl0ZW1zLCBnZXRTdGFja0l0ZW1zIH0gZnJvbSAnLi9vcmdhbml6ZXItY2hhcnQtY29uZmlnJztcblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJDaGFydEl0ZW0ge1xuICBrZXk6IHN0cmluZztcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gIG1lbnU6IHsgbGFiZWw6IHN0cmluZyB9O1xuICB1bml0Pzogc3RyaW5nIHwgVW5pdENvbmZpZztcbiAganF1ZXJ5Pzoge1xuICAgIHZhbHVlOiAocz86IHN0cmluZykgPT4gc3RyaW5nO1xuICAgIGJ1aWxkQWxpYXM6IChzPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgYnVpbGROYW1lPzogKGl0ZW06IGFueSwgdmFsdWU/OiBzdHJpbmcpID0+IHN0cmluZztcbiAgICBidWlsZENvbG9yPzogKHZhbHVlPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIH07XG4gIGdyb3VwPzogc3RyaW5nO1xuICBleHRyYT86IHtcbiAgICBzdGFja3M/OiB7IG9wdGlvbmFsOiBib29sZWFuOyBpdGVtczogT3JnYW5pemVyQ2hhcnRJdGVtW10gfTtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRTZWN0aW9uIHtcbiAgb3B0aW9uYWw6IGJvb2xlYW47XG4gIGl0ZW1zOiBPcmdhbml6ZXJDaGFydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJDaGFydEJyaWRnZU9wdGlvbnMge1xuICBvbkZldGNoU2xpY2VEYXRhPzogT3JnYW5pemVyQ29uZmlnWydvbkZldGNoU2xpY2VEYXRhJ107XG4gIG9uRXhwb3J0VmlzdWFsPzogKCkgPT4gdm9pZDtcbiAgb25FeHBvcnREYXRhPzogKCkgPT4gdm9pZDtcbiAgc3dpdGNoVmlldz86IE9yZ2FuaXplckNvbmZpZ1snc3dpdGNoVmlldyddO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0QmluZGluZyB7XG4gIGNvbmZpZzogT3JnYW5pemVyQ29uZmlnO1xuICBzdGF0ZTogT3JnYW5pemVyU3RhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRFdmVudFJlc3VsdCB7XG4gIGJpbmRpbmc6IE9yZ2FuaXplckNoYXJ0QmluZGluZztcbiAgc2hvdWxkUmVmZXRjaDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0Q29uZmlnVG9Pcmdhbml6ZXIoXG4gIGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IE9yZ2FuaXplckNoYXJ0QnJpZGdlT3B0aW9ucyA9IHt9XG4pOiBPcmdhbml6ZXJDb25maWcge1xuICBpZiAoIWNoYXJ0Q29uZmlnKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnW09yZ2FuaXplckNoYXJ0QWRhcHRlcl0gRW1wdHkgY2hhcnQgY29uZmlnLCByZXR1cm5pbmcgZW1wdHkgb3JnYW5pemVyIGNvbmZpZycpO1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnNvbGUuZGVidWcoJ1tPcmdhbml6ZXJDaGFydEFkYXB0ZXJdIENvbnZlcnRpbmcgY2hhcnQgY29uZmlnIHRvIG9yZ2FuaXplcicsIHtcbiAgICBoYXNHcm91cHM6ICEhY2hhcnRDb25maWcuZ3JvdXBzLFxuICAgIGluZGljYXRvckNvdW50OiBjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcz8ubGVuZ3RoID8/IDAsXG4gICAgZmlsdGVyQ291bnQ6IGNoYXJ0Q29uZmlnLmZpbHRlcnM/Lml0ZW1zPy5sZW5ndGggPz8gMFxuICB9KTtcblxuICBjb25zdCB7IG9uRmV0Y2hTbGljZURhdGEsIG9uRXhwb3J0VmlzdWFsLCBvbkV4cG9ydERhdGEsIHN3aXRjaFZpZXcgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGluZGljYXRvcnMgPSBnZXRJbmRpY2F0b3JJdGVtcyhjaGFydENvbmZpZyk7XG4gIGNvbnN0IGFjdGl2ZUluZGljYXRvciA9IGluZGljYXRvcnMuZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuXG4gIGNvbnN0IGJhc2VYRmllbGRzOiBPcmdhbml6ZXJYRmllbGRbXSA9IGdldEdyb3VwSXRlbXMoY2hhcnRDb25maWcpXG4gICAgLmZpbHRlcihnID0+ICFfaXNTeW50aGV0aWMoZykpXG4gICAgLm1hcChnID0+ICh7IGlkOiBnLmtleSwgbGFiZWw6IGcubWVudS5sYWJlbCB8fCBnLmtleSB9KSk7XG5cbiAgY29uc3QgeUZpZWxkcyA9IGJ1aWxkWUZpZWxkcyhcbiAgICBpbmRpY2F0b3JzLm1hcChpID0+ICh7IGlkOiBpLmtleSwgbGFiZWw6IGkubWVudS5sYWJlbCB8fCBpLmtleSwgZ3JvdXA6IGkuZ3JvdXAgfSkpXG4gICk7XG5cbiAgY29uc3Qgc3RhY2tGaWVsZHMgPSBnZXRTdGFja0l0ZW1zKGFjdGl2ZUluZGljYXRvcilcbiAgICAuZmlsdGVyKChzOiBPcmdhbml6ZXJDaGFydEl0ZW0pID0+ICFfaXNTeW50aGV0aWMocykpXG4gICAgLm1hcCgoczogT3JnYW5pemVyQ2hhcnRJdGVtKSA9PiAoeyBpZDogcy5rZXksIGxhYmVsOiBzLm1lbnUubGFiZWwgfHwgcy5rZXkgfSkpO1xuXG4gIGNvbnN0IHNlZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IG1lcmdlZEdyb3VwRmllbGRzID0gWy4uLmJhc2VYRmllbGRzLCAuLi5zdGFja0ZpZWxkc10uZmlsdGVyKGYgPT4ge1xuICAgIGlmIChzZWVuS2V5cy5oYXMoZi5pZCkpIHJldHVybiBmYWxzZTtcbiAgICBzZWVuS2V5cy5hZGQoZi5pZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgeEZpZWxkczogbWVyZ2VkR3JvdXBGaWVsZHMsXG4gICAgeUZpZWxkcyxcbiAgICBncm91cHM6IG1lcmdlZEdyb3VwRmllbGRzLFxuICAgIHNsaWNlczogZ2V0RmlsdGVySXRlbXMoY2hhcnRDb25maWcpLm1hcChmID0+ICh7IGlkOiBmLmtleSwgbGFiZWw6IGYubWVudS5sYWJlbCB8fCBmLmtleSB9KSBhcyBPcmdhbml6ZXJWaWV3U2xpY2UpLFxuICAgIHRlbXBsYXRlczogY2hhcnRDb25maWcudGVtcGxhdGVzLFxuICAgIHNob3dSZXNldDogZmFsc2UsXG4gICAgb25GZXRjaFNsaWNlRGF0YSxcbiAgICBzaG93RXhwb3J0OiAhIShvbkV4cG9ydFZpc3VhbCB8fCBvbkV4cG9ydERhdGEpLFxuICAgIG9uRXhwb3J0VmlzdWFsLFxuICAgIG9uRXhwb3J0RGF0YSxcbiAgICBzd2l0Y2hWaWV3LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnRDb25maWdUb1N0YXRlKGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQpOiBPcmdhbml6ZXJTdGF0ZSB7XG4gIGlmICghY2hhcnRDb25maWcpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbT3JnYW5pemVyQ2hhcnRBZGFwdGVyXSBFbXB0eSBjaGFydCBjb25maWcgZm9yIHN0YXRlIGNvbnZlcnNpb24nKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBpbmRpY2F0b3JzID0gZ2V0SW5kaWNhdG9ySXRlbXMoY2hhcnRDb25maWcpO1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBpbmRpY2F0b3JzLmZpbmQoaSA9PiBpLnNlbGVjdGVkKTtcbiAgY29uc3QgYWN0aXZlU3RhY2sgPSBnZXRTdGFja0l0ZW1zKGFjdGl2ZUluZGljYXRvcikuZmluZCgoczogT3JnYW5pemVyQ2hhcnRJdGVtKSA9PiBzLnNlbGVjdGVkKTtcbiAgY29uc3QgYWN0aXZlR3JvdXAgPSBnZXRHcm91cEl0ZW1zKGNoYXJ0Q29uZmlnKS5maW5kKGcgPT4gZy5zZWxlY3RlZCk7XG4gIGNvbnN0IGFjdGl2ZVNsaWNlcyA9IGdldEZpbHRlckl0ZW1zKGNoYXJ0Q29uZmlnKS5maWx0ZXIoZiA9PiBmLnNlbGVjdGVkKTtcbiAgY29uc3QgaW5kaWNhdG9yR3JvdXAgPSBhY3RpdmVJbmRpY2F0b3I/Lmdyb3VwO1xuXG4gIGNvbnNvbGUuZGVidWcoJ1tPcmdhbml6ZXJDaGFydEFkYXB0ZXJdIEN1cnJlbnQgY2hhcnQgc3RhdGUnLCB7XG4gICAgYWN0aXZlR3JvdXA6IGFjdGl2ZUdyb3VwPy5rZXksXG4gICAgYWN0aXZlSW5kaWNhdG9yOiBhY3RpdmVJbmRpY2F0b3I/LmtleSxcbiAgICBhY3RpdmVTdGFjazogYWN0aXZlU3RhY2s/LmtleSxcbiAgICBzbGljZUNvdW50OiBhY3RpdmVTbGljZXMubGVuZ3RoXG4gIH0pO1xuXG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIHNlbGVjdGVkWDogYWN0aXZlR3JvdXA/LmtleSxcbiAgICBzZWxlY3RlZFk6IGluZGljYXRvckdyb3VwID8/IGFjdGl2ZUluZGljYXRvcj8ua2V5LFxuICAgIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogaW5kaWNhdG9yR3JvdXAgPyBhY3RpdmVJbmRpY2F0b3I/LmtleSA6IHVuZGVmaW5lZCxcbiAgICBzZWxlY3RlZEdyb3VwQnk6IGFjdGl2ZVN0YWNrPy5rZXksXG4gICAgc2VsZWN0ZWRTbGljZXM6IGFjdGl2ZVNsaWNlcy5tYXAoZiA9PiBmLmtleSksXG4gIH07XG4gIGNvbnN0IG9yZ2FuaXplckNvbmZpZyA9IGNoYXJ0Q29uZmlnVG9Pcmdhbml6ZXIoY2hhcnRDb25maWcpO1xuICByZXR1cm4gbm9ybWFsaXplT3JnYW5pemVyU3RhdGUoc3RhdGUsIG9yZ2FuaXplckNvbmZpZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE9yZ2FuaXplckNoYXJ0QmluZGluZyhcbiAgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zID0ge31cbik6IE9yZ2FuaXplckNoYXJ0QmluZGluZyB7XG4gIHJldHVybiB7XG4gICAgY29uZmlnOiBjaGFydENvbmZpZ1RvT3JnYW5pemVyKGNoYXJ0Q29uZmlnLCBvcHRpb25zKSxcbiAgICBzdGF0ZTogY2hhcnRDb25maWdUb1N0YXRlKGNoYXJ0Q29uZmlnKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnRDb25maWdUb1VuaWZpZWRTdGF0ZShcbiAgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgdmlld01vZGU6ICdjaGFydCcgfCAndGFibGUnID0gJ2NoYXJ0J1xuKTogT3JnYW5pemVyVW5pZmllZFN0YXRlIHtcbiAgY29uc3Qgc3RhdGUgPSBjaGFydENvbmZpZ1RvU3RhdGUoY2hhcnRDb25maWcpO1xuICByZXR1cm4ge1xuICAgIHZpZXdNb2RlLFxuICAgIGRpbWVuc2lvbjogc3RhdGUuc2VsZWN0ZWRYLFxuICAgIG1ldHJpYzogcmVzb2x2ZVlLZXkoc3RhdGUuc2VsZWN0ZWRZLCBzdGF0ZS5zZWxlY3RlZFlBZ2dyZWdhdGUpLFxuICAgIG1ldHJpY0FnZ3JlZ2F0ZTogc3RhdGUuc2VsZWN0ZWRZQWdncmVnYXRlLFxuICAgIGJyZWFrZG93bjogc3RhdGUuc2VsZWN0ZWRHcm91cEJ5LFxuICAgIGZpbHRlcnM6IHN0YXRlLnNlbGVjdGVkU2xpY2VzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlPcmdhbml6ZXJFdmVudFRvQ2hhcnQoXG4gIGV2ZW50OiBPcmdhbml6ZXJCdXR0b25FdmVudCxcbiAgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogdm9pZCB7XG4gIGlmICghY2hhcnRDb25maWcpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbT3JnYW5pemVyQ2hhcnRBZGFwdGVyXSBDYW5ub3QgYXBwbHkgZXZlbnQgdG8gZW1wdHkgY2hhcnQgY29uZmlnJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc29sZS5kZWJ1ZygnW09yZ2FuaXplckNoYXJ0QWRhcHRlcl0gQXBwbHlpbmcgb3JnYW5pemVyIGV2ZW50JywgeyBldmVudFR5cGU6IGV2ZW50LnR5cGUsIHN0YXRlOiBldmVudC5zdGF0ZSB9KTtcblxuICBjb25zdCBzdGF0ZSA9IGV2ZW50LnN0YXRlO1xuICBfY2xlYW5TeW50aGV0aWNzKGNoYXJ0Q29uZmlnKTtcbiAgaWYgKHN0YXRlLnNlbGVjdGVkWCAhPT0gdW5kZWZpbmVkKSBfYXBwbHlYU2VsZWN0aW9uKHN0YXRlLnNlbGVjdGVkWCwgY2hhcnRDb25maWcpO1xuICBpZiAoc3RhdGUuc2VsZWN0ZWRZICE9PSB1bmRlZmluZWQpIF9hcHBseVlTZWxlY3Rpb24oc3RhdGUuc2VsZWN0ZWRZLCBzdGF0ZS5zZWxlY3RlZFlBZ2dyZWdhdGUsIGNoYXJ0Q29uZmlnKTtcbiAgY29uc3QgZWZmZWN0aXZlR3JvdXBCeSA9IHN0YXRlLnNlbGVjdGVkR3JvdXBCeSAhPT0gc3RhdGUuc2VsZWN0ZWRYID8gc3RhdGUuc2VsZWN0ZWRHcm91cEJ5IDogdW5kZWZpbmVkO1xuICBfYXBwbHlHcm91cEJ5U2VsZWN0aW9uKGVmZmVjdGl2ZUdyb3VwQnksIGNoYXJ0Q29uZmlnKTtcbiAgaWYgKHN0YXRlLnNlbGVjdGVkU2xpY2VzICE9PSB1bmRlZmluZWQpIF9hcHBseVNsaWNlU2VsZWN0aW9uKHN0YXRlLnNlbGVjdGVkU2xpY2VzLCBjaGFydENvbmZpZyk7XG4gIGV2ZW50LnJlc29sdmVkWVVuaXQgPSByZXNvbHZlWVVuaXQoY2hhcnRDb25maWcsIGV2ZW50LnN0YXRlLnNlbGVjdGVkWSwgZXZlbnQuc3RhdGUuc2VsZWN0ZWRZQWdncmVnYXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZU9yZ2FuaXplckNoYXJ0RXZlbnQoXG4gIGV2ZW50OiBPcmdhbml6ZXJCdXR0b25FdmVudCxcbiAgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY3VycmVudEJpbmRpbmc6IE9yZ2FuaXplckNoYXJ0QmluZGluZyB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zID0ge31cbik6IE9yZ2FuaXplckNoYXJ0RXZlbnRSZXN1bHQge1xuICBjb25zb2xlLmRlYnVnKCdbT3JnYW5pemVyQ2hhcnRBZGFwdGVyXSBIYW5kbGluZyBvcmdhbml6ZXIgZXZlbnQnLCB7IGV2ZW50VHlwZTogZXZlbnQudHlwZSB9KTtcblxuICBpZiAoZXZlbnQudHlwZSA9PT0gJ3ZpZXdTd2l0Y2hlZCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmluZGluZzoge1xuICAgICAgICBjb25maWc6IGNoYXJ0Q29uZmlnVG9Pcmdhbml6ZXIoY2hhcnRDb25maWcsIG9wdGlvbnMpLFxuICAgICAgICBzdGF0ZTogeyAuLi5ldmVudC5zdGF0ZSB9XG4gICAgICB9LFxuICAgICAgc2hvdWxkUmVmZXRjaDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXBwbHlPcmdhbml6ZXJFdmVudFRvQ2hhcnQoZXZlbnQsIGNoYXJ0Q29uZmlnKTtcblxuICBpZiAoZXZlbnQudHlwZSA9PT0gJ3lTZWxlY3RlZCcgfHwgZXZlbnQudHlwZSA9PT0gJ3RlbXBsYXRlU2VsZWN0ZWQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJpbmRpbmc6IGJ1aWxkT3JnYW5pemVyQ2hhcnRCaW5kaW5nKGNoYXJ0Q29uZmlnLCBvcHRpb25zKSxcbiAgICAgIHNob3VsZFJlZmV0Y2g6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBiaW5kaW5nOiB7XG4gICAgICBjb25maWc6IGN1cnJlbnRCaW5kaW5nPy5jb25maWcgPz8gY2hhcnRDb25maWdUb09yZ2FuaXplcihjaGFydENvbmZpZywgb3B0aW9ucyksXG4gICAgICBzdGF0ZTogZXZlbnQuc3RhdGVcbiAgICB9LFxuICAgIHNob3VsZFJlZmV0Y2g6IGV2ZW50LnR5cGUgIT09ICdzbGljZVNlbGVjdGVkJ1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVlVbml0KFxuICBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBzZWxlY3RlZFk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgc2VsZWN0ZWRZQWdncmVnYXRlOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHN0cmluZyB8IFVuaXRDb25maWcgfCB1bmRlZmluZWQge1xuICBpZiAoIWNoYXJ0Q29uZmlnIHx8ICFzZWxlY3RlZFkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGFjdHVhbEtleSA9IHJlc29sdmVZS2V5KHNlbGVjdGVkWSwgc2VsZWN0ZWRZQWdncmVnYXRlKTtcbiAgcmV0dXJuIGdldEluZGljYXRvckl0ZW1zKGNoYXJ0Q29uZmlnKS5maW5kKGkgPT4gaS5rZXkgPT09IGFjdHVhbEtleSk/LnVuaXQ7XG59XG5cbmNvbnN0IF9zeW50aGV0aWNJdGVtcyA9IG5ldyBXZWFrU2V0PE9yZ2FuaXplckNoYXJ0SXRlbT4oKTtcblxuZnVuY3Rpb24gX21ha2VTeW50aGV0aWMoaXRlbTogT3JnYW5pemVyQ2hhcnRJdGVtKTogT3JnYW5pemVyQ2hhcnRJdGVtIHtcbiAgX3N5bnRoZXRpY0l0ZW1zLmFkZChpdGVtKTtcbiAgcmV0dXJuIGl0ZW07XG59XG5cbmZ1bmN0aW9uIF9pc1N5bnRoZXRpYyhpdGVtOiBPcmdhbml6ZXJDaGFydEl0ZW0pOiBib29sZWFuIHtcbiAgcmV0dXJuIF9zeW50aGV0aWNJdGVtcy5oYXMoaXRlbSk7XG59XG5cbmZ1bmN0aW9uIF9jbGVhblN5bnRoZXRpY3MoY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGlmIChjaGFydENvbmZpZy5ncm91cHM/Lml0ZW1zKSB7XG4gICAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zID0gY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZpbHRlcihnID0+ICFfaXNTeW50aGV0aWMoZykpO1xuICB9XG4gIGlmIChjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcykge1xuICAgIGNoYXJ0Q29uZmlnLmluZGljYXRvcnMuaXRlbXMuZm9yRWFjaChpbmQgPT4ge1xuICAgICAgaWYgKGluZC5leHRyYT8uc3RhY2tzPy5pdGVtcykge1xuICAgICAgICBpbmQuZXh0cmEuc3RhY2tzLml0ZW1zID0gaW5kLmV4dHJhLnN0YWNrcy5pdGVtcy5maWx0ZXIoKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4gIV9pc1N5bnRoZXRpYyhzKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FwcGx5WFNlbGVjdGlvbihzZWxlY3RlZFg6IHN0cmluZywgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGdyb3VwSXRlbXMgPSBnZXRHcm91cEl0ZW1zKGNoYXJ0Q29uZmlnKTtcbiAgY29uc3QgaXNHcm91cEl0ZW0gPSBncm91cEl0ZW1zLnNvbWUoZyA9PiBnLmtleSA9PT0gc2VsZWN0ZWRYKTtcbiAgaWYgKGlzR3JvdXBJdGVtKSB7XG4gICAgZ3JvdXBJdGVtcy5mb3JFYWNoKGcgPT4geyBnLnNlbGVjdGVkID0gZy5rZXkgPT09IHNlbGVjdGVkWDsgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGluZGljYXRvcnMgPSBnZXRJbmRpY2F0b3JJdGVtcyhjaGFydENvbmZpZyk7XG4gIGNvbnN0IGFsbFN0YWNrczogT3JnYW5pemVyQ2hhcnRJdGVtW10gPSBpbmRpY2F0b3JzLmZsYXRNYXAoaSA9PiBnZXRTdGFja0l0ZW1zKGkpKTtcbiAgY29uc3Qgc3RhY2tJdGVtID0gYWxsU3RhY2tzLmZpbmQocyA9PiBzLmtleSA9PT0gc2VsZWN0ZWRYKTtcbiAgaWYgKHN0YWNrSXRlbSkge1xuICAgIGdyb3VwSXRlbXMuZm9yRWFjaChnID0+IHsgZy5zZWxlY3RlZCA9IGZhbHNlOyB9KTtcbiAgICBncm91cEl0ZW1zLnB1c2goX21ha2VTeW50aGV0aWMoe1xuICAgICAga2V5OiBzdGFja0l0ZW0ua2V5LFxuICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICBtZW51OiBzdGFja0l0ZW0ubWVudSxcbiAgICAgIGpxdWVyeTogc3RhY2tJdGVtLmpxdWVyeVxuICAgICAgICA/IHsgdmFsdWU6ICgpID0+IHN0YWNrSXRlbS5qcXVlcnkhLnZhbHVlKCksIGJ1aWxkQWxpYXM6ICgpID0+IHN0YWNrSXRlbS5qcXVlcnkhLmJ1aWxkQWxpYXMoKSB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXBwbHlZU2VsZWN0aW9uKHNlbGVjdGVkWTogc3RyaW5nLCBzZWxlY3RlZFlBZ2dyZWdhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGFjdHVhbEtleSA9IHJlc29sdmVZS2V5KHNlbGVjdGVkWSwgc2VsZWN0ZWRZQWdncmVnYXRlKTtcbiAgY29uc3QgaW5kaWNhdG9ycyA9IGdldEluZGljYXRvckl0ZW1zKGNoYXJ0Q29uZmlnKTtcbiAgaW5kaWNhdG9ycy5mb3JFYWNoKGkgPT4geyBpLnNlbGVjdGVkID0gaS5rZXkgPT09IGFjdHVhbEtleTsgfSk7XG4gIGluZGljYXRvcnMuZm9yRWFjaChpID0+IHtcbiAgICBnZXRTdGFja0l0ZW1zKGkpLmZvckVhY2goKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX2FwcGx5R3JvdXBCeVNlbGVjdGlvbihlZmZlY3RpdmVHcm91cEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQsIGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBnZXRJbmRpY2F0b3JJdGVtcyhjaGFydENvbmZpZykuZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuICBjb25zdCBzdGFja0l0ZW1zOiBPcmdhbml6ZXJDaGFydEl0ZW1bXSA9IGdldFN0YWNrSXRlbXMoYWN0aXZlSW5kaWNhdG9yKTtcbiAgaWYgKGVmZmVjdGl2ZUdyb3VwQnkgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YWNrSXRlbXMuZm9yRWFjaChzID0+IHsgcy5zZWxlY3RlZCA9IGZhbHNlOyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaXNTdGFja0l0ZW0gPSBzdGFja0l0ZW1zLnNvbWUocyA9PiBzLmtleSA9PT0gZWZmZWN0aXZlR3JvdXBCeSk7XG4gIGlmIChpc1N0YWNrSXRlbSkge1xuICAgIHN0YWNrSXRlbXMuZm9yRWFjaChzID0+IHsgcy5zZWxlY3RlZCA9IHMua2V5ID09PSBlZmZlY3RpdmVHcm91cEJ5OyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZ3JvdXBJdGVtID0gZ2V0R3JvdXBJdGVtcyhjaGFydENvbmZpZykuZmluZChnID0+IGcua2V5ID09PSBlZmZlY3RpdmVHcm91cEJ5KTtcbiAgaWYgKGdyb3VwSXRlbSAmJiBhY3RpdmVJbmRpY2F0b3IpIHtcbiAgICBzdGFja0l0ZW1zLmZvckVhY2gocyA9PiB7IHMuc2VsZWN0ZWQgPSBmYWxzZTsgfSk7XG4gICAgaWYgKCFhY3RpdmVJbmRpY2F0b3IuZXh0cmEpIHtcbiAgICAgIGFjdGl2ZUluZGljYXRvci5leHRyYSA9IHsgc3RhY2tzOiB7IG9wdGlvbmFsOiB0cnVlLCBpdGVtczogW10gfSB9O1xuICAgIH0gZWxzZSBpZiAoIWFjdGl2ZUluZGljYXRvci5leHRyYS5zdGFja3MpIHtcbiAgICAgIGFjdGl2ZUluZGljYXRvci5leHRyYS5zdGFja3MgPSB7IG9wdGlvbmFsOiB0cnVlLCBpdGVtczogW10gfTtcbiAgICB9XG4gICAgYWN0aXZlSW5kaWNhdG9yLmV4dHJhLnN0YWNrcy5pdGVtcy5wdXNoKF9tYWtlU3ludGhldGljKHtcbiAgICAgIGtleTogZ3JvdXBJdGVtLmtleSxcbiAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgbWVudTogZ3JvdXBJdGVtLm1lbnUsXG4gICAgICBqcXVlcnk6IGdyb3VwSXRlbS5qcXVlcnkgPyB7XG4gICAgICAgIHZhbHVlOiAoKSA9PiBncm91cEl0ZW0uanF1ZXJ5IS52YWx1ZSgpLFxuICAgICAgICBidWlsZEFsaWFzOiAoKSA9PiBncm91cEl0ZW0uanF1ZXJ5IS5idWlsZEFsaWFzKCksXG4gICAgICAgIGJ1aWxkTmFtZTogKF9pdGVtOiBhbnksIHZhbHVlOiBzdHJpbmcpID0+IFN0cmluZyh2YWx1ZSksXG4gICAgICB9IDogdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfSBlbHNlIHtcbiAgICBzdGFja0l0ZW1zLmZvckVhY2gocyA9PiB7IHMuc2VsZWN0ZWQgPSBmYWxzZTsgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FwcGx5U2xpY2VTZWxlY3Rpb24oc2VsZWN0ZWRTbGljZXM6IHN0cmluZ1tdLCBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgZ2V0RmlsdGVySXRlbXMoY2hhcnRDb25maWcpLmZvckVhY2goZiA9PiB7IGYuc2VsZWN0ZWQgPSBzZWxlY3RlZFNsaWNlcy5pbmNsdWRlcyhmLmtleSk7IH0pO1xufVxuXG4iXX0=
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV2RixPQUFPLEVBQXdCLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakksT0FBTyxFQUF3QixhQUFhLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBMENqSSxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLFdBQW9ELEVBQ3BELFVBQXVDLEVBQUU7SUFFekMsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNoQixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBRUQsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQy9FLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFekQsTUFBTSxXQUFXLEdBQXNCLGFBQWEsQ0FBQyxXQUFXLENBQUM7U0FDOUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FB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QUMsU0FBUyxDQUFDLE1BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hELFNBQVMsRUFBRSxDQUFDLEtBQVUsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDeEQsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNkLENBQUMsQ0FBQyxDQUFDO0tBQ0w7U0FBTTtRQUNMLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2xEO0FBQ0gsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsY0FBd0IsRUFBRSxXQUFpQztJQUN2RixjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcmdhbml6ZXJCdXR0b25FdmVudCwgT3JnYW5pemVyQ29uZmlnLCBPcmdhbml6ZXJTdGF0ZSwgT3JnYW5pemVyVW5pZmllZFN0YXRlLCBPcmdhbml6ZXJWaWV3U2xpY2UsIE9yZ2FuaXplclhGaWVsZCB9IGZyb20gJy4vb3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgYnVpbGRZRmllbGRzLCBub3JtYWxpemVPcmdhbml6ZXJTdGF0ZSwgcmVzb2x2ZVlLZXkgfSBmcm9tICcuL29yZ2FuaXplci11dGlscyc7XG5pbXBvcnQgeyBVbml0Q29uZmlnIH0gZnJvbSAnQG9uZXRlbWUvanF1ZXJ5LWNvcmUnO1xuaW1wb3J0IHsgT3JnYW5pemVyQ2hhcnRDb25maWcsIGdldEdyb3VwSXRlbXMsIGdldEluZGljYXRvckl0ZW1zLCBnZXRGaWx0ZXJJdGVtcywgZ2V0U3RhY2tJdGVtcyB9IGZyb20gJy4vb3JnYW5pemVyLWNoYXJ0LWNvbmZpZyc7XG5cbmV4cG9ydCB7IE9yZ2FuaXplckNoYXJ0Q29uZmlnLCBnZXRHcm91cEl0ZW1zLCBnZXRJbmRpY2F0b3JJdGVtcywgZ2V0RmlsdGVySXRlbXMsIGdldFN0YWNrSXRlbXMgfSBmcm9tICcuL29yZ2FuaXplci1jaGFydC1jb25maWcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0SXRlbSB7XG4gIGtleTogc3RyaW5nO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgbWVudTogeyBsYWJlbDogc3RyaW5nIH07XG4gIHVuaXQ/OiBzdHJpbmcgfCBVbml0Q29uZmlnO1xuICBqcXVlcnk/OiB7XG4gICAgdmFsdWU6IChzPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgYnVpbGRBbGlhczogKHM/OiBzdHJpbmcpID0+IHN0cmluZztcbiAgICBidWlsZE5hbWU/OiAoaXRlbTogYW55LCB2YWx1ZT86IHN0cmluZykgPT4gc3RyaW5nO1xuICAgIGJ1aWxkQ29sb3I/OiAodmFsdWU/OiBzdHJpbmcpID0+IHN0cmluZztcbiAgfTtcbiAgZ3JvdXA/OiBzdHJpbmc7XG4gIGV4dHJhPzoge1xuICAgIHN0YWNrcz86IHsgb3B0aW9uYWw6IGJvb2xlYW47IGl0ZW1zOiBPcmdhbml6ZXJDaGFydEl0ZW1bXSB9O1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJDaGFydFNlY3Rpb24ge1xuICBvcHRpb25hbDogYm9vbGVhbjtcbiAgaXRlbXM6IE9yZ2FuaXplckNoYXJ0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0QnJpZGdlT3B0aW9ucyB7XG4gIG9uRmV0Y2hTbGljZURhdGE/OiBPcmdhbml6ZXJDb25maWdbJ29uRmV0Y2hTbGljZURhdGEnXTtcbiAgb25FeHBvcnRWaXN1YWw/OiAoKSA9PiB2b2lkO1xuICBvbkV4cG9ydERhdGE/OiAoKSA9PiB2b2lkO1xuICBzd2l0Y2hWaWV3PzogT3JnYW5pemVyQ29uZmlnWydzd2l0Y2hWaWV3J107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRCaW5kaW5nIHtcbiAgY29uZmlnOiBPcmdhbml6ZXJDb25maWc7XG4gIHN0YXRlOiBPcmdhbml6ZXJTdGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJDaGFydEV2ZW50UmVzdWx0IHtcbiAgYmluZGluZzogT3JnYW5pemVyQ2hhcnRCaW5kaW5nO1xuICBzaG91bGRSZWZldGNoOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnRDb25maWdUb09yZ2FuaXplcihcbiAgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zID0ge31cbik6IE9yZ2FuaXplckNvbmZpZyB7XG4gIGlmICghY2hhcnRDb25maWcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCB7IG9uRmV0Y2hTbGljZURhdGEsIG9uRXhwb3J0VmlzdWFsLCBvbkV4cG9ydERhdGEsIHN3aXRjaFZpZXcgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGluZGljYXRvcnMgPSBnZXRJbmRpY2F0b3JJdGVtcyhjaGFydENvbmZpZyk7XG4gIGNvbnN0IGFjdGl2ZUluZGljYXRvciA9IGluZGljYXRvcnMuZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuXG4gIGNvbnN0IGJhc2VYRmllbGRzOiBPcmdhbml6ZXJYRmllbGRbXSA9IGdldEdyb3VwSXRlbXMoY2hhcnRDb25maWcpXG4gICAgLmZpbHRlcihnID0+ICFfaXNTeW50aGV0aWMoZykpXG4gICAgLm1hcChnID0+ICh7IGlkOiBnLmtleSwgbGFiZWw6IGcubWVudS5sYWJlbCB8fCBnLmtleSB9KSk7XG5cbiAgY29uc3QgeUZpZWxkcyA9IGJ1aWxkWUZpZWxkcyhcbiAgICBpbmRpY2F0b3JzLm1hcChpID0+ICh7IGlkOiBpLmtleSwgbGFiZWw6IGkubWVudS5sYWJlbCB8fCBpLmtleSwgZ3JvdXA6IGkuZ3JvdXAgfSkpXG4gICk7XG5cbiAgY29uc3Qgc3RhY2tGaWVsZHMgPSBnZXRTdGFja0l0ZW1zKGFjdGl2ZUluZGljYXRvcilcbiAgICAuZmlsdGVyKChzOiBPcmdhbml6ZXJDaGFydEl0ZW0pID0+ICFfaXNTeW50aGV0aWMocykpXG4gICAgLm1hcCgoczogT3JnYW5pemVyQ2hhcnRJdGVtKSA9PiAoeyBpZDogcy5rZXksIGxhYmVsOiBzLm1lbnUubGFiZWwgfHwgcy5rZXkgfSkpO1xuXG4gIGNvbnN0IHNlZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IG1lcmdlZEdyb3VwRmllbGRzID0gWy4uLmJhc2VYRmllbGRzLCAuLi5zdGFja0ZpZWxkc10uZmlsdGVyKGYgPT4ge1xuICAgIGlmIChzZWVuS2V5cy5oYXMoZi5pZCkpIHJldHVybiBmYWxzZTtcbiAgICBzZWVuS2V5cy5hZGQoZi5pZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgeEZpZWxkczogbWVyZ2VkR3JvdXBGaWVsZHMsXG4gICAgeUZpZWxkcyxcbiAgICBncm91cHM6IG1lcmdlZEdyb3VwRmllbGRzLFxuICAgIHNsaWNlczogZ2V0RmlsdGVySXRlbXMoY2hhcnRDb25maWcpLm1hcChmID0+ICh7IGlkOiBmLmtleSwgbGFiZWw6IGYubWVudS5sYWJlbCB8fCBmLmtleSB9KSBhcyBPcmdhbml6ZXJWaWV3U2xpY2UpLFxuICAgIHRlbXBsYXRlczogY2hhcnRDb25maWcudGVtcGxhdGVzLFxuICAgIHNob3dSZXNldDogZmFsc2UsXG4gICAgb25GZXRjaFNsaWNlRGF0YSxcbiAgICBzaG93RXhwb3J0OiAhIShvbkV4cG9ydFZpc3VhbCB8fCBvbkV4cG9ydERhdGEpLFxuICAgIG9uRXhwb3J0VmlzdWFsLFxuICAgIG9uRXhwb3J0RGF0YSxcbiAgICBzd2l0Y2hWaWV3LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnRDb25maWdUb1N0YXRlKGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQpOiBPcmdhbml6ZXJTdGF0ZSB7XG4gIGlmICghY2hhcnRDb25maWcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBpbmRpY2F0b3JzID0gZ2V0SW5kaWNhdG9ySXRlbXMoY2hhcnRDb25maWcpO1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBpbmRpY2F0b3JzLmZpbmQoaSA9PiBpLnNlbGVjdGVkKTtcbiAgY29uc3QgYWN0aXZlU3RhY2sgPSBnZXRTdGFja0l0ZW1zKGFjdGl2ZUluZGljYXRvcikuZmluZCgoczogT3JnYW5pemVyQ2hhcnRJdGVtKSA9PiBzLnNlbGVjdGVkKTtcbiAgY29uc3QgYWN0aXZlR3JvdXAgPSBnZXRHcm91cEl0ZW1zKGNoYXJ0Q29uZmlnKS5maW5kKGcgPT4gZy5zZWxlY3RlZCk7XG4gIGNvbnN0IGFjdGl2ZVNsaWNlcyA9IGdldEZpbHRlckl0ZW1zKGNoYXJ0Q29uZmlnKS5maWx0ZXIoZiA9PiBmLnNlbGVjdGVkKTtcbiAgY29uc3QgaW5kaWNhdG9yR3JvdXAgPSBhY3RpdmVJbmRpY2F0b3I/Lmdyb3VwO1xuXG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIHNlbGVjdGVkWDogYWN0aXZlR3JvdXA/LmtleSxcbiAgICBzZWxlY3RlZFk6IGluZGljYXRvckdyb3VwID8/IGFjdGl2ZUluZGljYXRvcj8ua2V5LFxuICAgIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogaW5kaWNhdG9yR3JvdXAgPyBhY3RpdmVJbmRpY2F0b3I/LmtleSA6IHVuZGVmaW5lZCxcbiAgICBzZWxlY3RlZEdyb3VwQnk6IGFjdGl2ZVN0YWNrPy5rZXksXG4gICAgc2VsZWN0ZWRTbGljZXM6IGFjdGl2ZVNsaWNlcy5tYXAoZiA9PiBmLmtleSksXG4gIH07XG4gIGNvbnN0IG9yZ2FuaXplckNvbmZpZyA9IGNoYXJ0Q29uZmlnVG9Pcmdhbml6ZXIoY2hhcnRDb25maWcpO1xuICByZXR1cm4gbm9ybWFsaXplT3JnYW5pemVyU3RhdGUoc3RhdGUsIG9yZ2FuaXplckNvbmZpZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE9yZ2FuaXplckNoYXJ0QmluZGluZyhcbiAgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zID0ge31cbik6IE9yZ2FuaXplckNoYXJ0QmluZGluZyB7XG4gIHJldHVybiB7XG4gICAgY29uZmlnOiBjaGFydENvbmZpZ1RvT3JnYW5pemVyKGNoYXJ0Q29uZmlnLCBvcHRpb25zKSxcbiAgICBzdGF0ZTogY2hhcnRDb25maWdUb1N0YXRlKGNoYXJ0Q29uZmlnKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnRDb25maWdUb1VuaWZpZWRTdGF0ZShcbiAgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgdmlld01vZGU6ICdjaGFydCcgfCAndGFibGUnID0gJ2NoYXJ0J1xuKTogT3JnYW5pemVyVW5pZmllZFN0YXRlIHtcbiAgY29uc3Qgc3RhdGUgPSBjaGFydENvbmZpZ1RvU3RhdGUoY2hhcnRDb25maWcpO1xuICByZXR1cm4ge1xuICAgIHZpZXdNb2RlLFxuICAgIGRpbWVuc2lvbjogc3RhdGUuc2VsZWN0ZWRYLFxuICAgIG1ldHJpYzogcmVzb2x2ZVlLZXkoc3RhdGUuc2VsZWN0ZWRZLCBzdGF0ZS5zZWxlY3RlZFlBZ2dyZWdhdGUpLFxuICAgIG1ldHJpY0FnZ3JlZ2F0ZTogc3RhdGUuc2VsZWN0ZWRZQWdncmVnYXRlLFxuICAgIGJyZWFrZG93bjogc3RhdGUuc2VsZWN0ZWRHcm91cEJ5LFxuICAgIGZpbHRlcnM6IHN0YXRlLnNlbGVjdGVkU2xpY2VzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlPcmdhbml6ZXJFdmVudFRvQ2hhcnQoXG4gIGV2ZW50OiBPcmdhbml6ZXJCdXR0b25FdmVudCxcbiAgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogdm9pZCB7XG4gIGlmICghY2hhcnRDb25maWcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzdGF0ZSA9IGV2ZW50LnN0YXRlO1xuICBfY2xlYW5TeW50aGV0aWNzKGNoYXJ0Q29uZmlnKTtcbiAgaWYgKHN0YXRlLnNlbGVjdGVkWCAhPT0gdW5kZWZpbmVkKSBfYXBwbHlYU2VsZWN0aW9uKHN0YXRlLnNlbGVjdGVkWCwgY2hhcnRDb25maWcpO1xuICBpZiAoc3RhdGUuc2VsZWN0ZWRZICE9PSB1bmRlZmluZWQpIF9hcHBseVlTZWxlY3Rpb24oc3RhdGUuc2VsZWN0ZWRZLCBzdGF0ZS5zZWxlY3RlZFlBZ2dyZWdhdGUsIGNoYXJ0Q29uZmlnKTtcbiAgY29uc3QgZWZmZWN0aXZlR3JvdXBCeSA9IHN0YXRlLnNlbGVjdGVkR3JvdXBCeSAhPT0gc3RhdGUuc2VsZWN0ZWRYID8gc3RhdGUuc2VsZWN0ZWRHcm91cEJ5IDogdW5kZWZpbmVkO1xuICBfYXBwbHlHcm91cEJ5U2VsZWN0aW9uKGVmZmVjdGl2ZUdyb3VwQnksIGNoYXJ0Q29uZmlnKTtcbiAgaWYgKHN0YXRlLnNlbGVjdGVkU2xpY2VzICE9PSB1bmRlZmluZWQpIF9hcHBseVNsaWNlU2VsZWN0aW9uKHN0YXRlLnNlbGVjdGVkU2xpY2VzLCBjaGFydENvbmZpZyk7XG4gIGV2ZW50LnJlc29sdmVkWVVuaXQgPSByZXNvbHZlWVVuaXQoY2hhcnRDb25maWcsIGV2ZW50LnN0YXRlLnNlbGVjdGVkWSwgZXZlbnQuc3RhdGUuc2VsZWN0ZWRZQWdncmVnYXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZU9yZ2FuaXplckNoYXJ0RXZlbnQoXG4gIGV2ZW50OiBPcmdhbml6ZXJCdXR0b25FdmVudCxcbiAgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY3VycmVudEJpbmRpbmc6IE9yZ2FuaXplckNoYXJ0QmluZGluZyB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zID0ge31cbik6IE9yZ2FuaXplckNoYXJ0RXZlbnRSZXN1bHQge1xuICBpZiAoZXZlbnQudHlwZSA9PT0gJ3ZpZXdTd2l0Y2hlZCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmluZGluZzoge1xuICAgICAgICBjb25maWc6IGNoYXJ0Q29uZmlnVG9Pcmdhbml6ZXIoY2hhcnRDb25maWcsIG9wdGlvbnMpLFxuICAgICAgICBzdGF0ZTogeyAuLi5ldmVudC5zdGF0ZSB9XG4gICAgICB9LFxuICAgICAgc2hvdWxkUmVmZXRjaDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXBwbHlPcmdhbml6ZXJFdmVudFRvQ2hhcnQoZXZlbnQsIGNoYXJ0Q29uZmlnKTtcblxuICBpZiAoZXZlbnQudHlwZSA9PT0gJ3lTZWxlY3RlZCcgfHwgZXZlbnQudHlwZSA9PT0gJ3RlbXBsYXRlU2VsZWN0ZWQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJpbmRpbmc6IGJ1aWxkT3JnYW5pemVyQ2hhcnRCaW5kaW5nKGNoYXJ0Q29uZmlnLCBvcHRpb25zKSxcbiAgICAgIHNob3VsZFJlZmV0Y2g6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBiaW5kaW5nOiB7XG4gICAgICBjb25maWc6IGN1cnJlbnRCaW5kaW5nPy5jb25maWcgPz8gY2hhcnRDb25maWdUb09yZ2FuaXplcihjaGFydENvbmZpZywgb3B0aW9ucyksXG4gICAgICBzdGF0ZTogZXZlbnQuc3RhdGVcbiAgICB9LFxuICAgIHNob3VsZFJlZmV0Y2g6IGV2ZW50LnR5cGUgIT09ICdzbGljZVNlbGVjdGVkJ1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVlVbml0KFxuICBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBzZWxlY3RlZFk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgc2VsZWN0ZWRZQWdncmVnYXRlOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHN0cmluZyB8IFVuaXRDb25maWcgfCB1bmRlZmluZWQge1xuICBpZiAoIWNoYXJ0Q29uZmlnIHx8ICFzZWxlY3RlZFkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGFjdHVhbEtleSA9IHJlc29sdmVZS2V5KHNlbGVjdGVkWSwgc2VsZWN0ZWRZQWdncmVnYXRlKTtcbiAgcmV0dXJuIGdldEluZGljYXRvckl0ZW1zKGNoYXJ0Q29uZmlnKS5maW5kKGkgPT4gaS5rZXkgPT09IGFjdHVhbEtleSk/LnVuaXQ7XG59XG5cbmNvbnN0IF9zeW50aGV0aWNJdGVtcyA9IG5ldyBXZWFrU2V0PE9yZ2FuaXplckNoYXJ0SXRlbT4oKTtcblxuZnVuY3Rpb24gX21ha2VTeW50aGV0aWMoaXRlbTogT3JnYW5pemVyQ2hhcnRJdGVtKTogT3JnYW5pemVyQ2hhcnRJdGVtIHtcbiAgX3N5bnRoZXRpY0l0ZW1zLmFkZChpdGVtKTtcbiAgcmV0dXJuIGl0ZW07XG59XG5cbmZ1bmN0aW9uIF9pc1N5bnRoZXRpYyhpdGVtOiBPcmdhbml6ZXJDaGFydEl0ZW0pOiBib29sZWFuIHtcbiAgcmV0dXJuIF9zeW50aGV0aWNJdGVtcy5oYXMoaXRlbSk7XG59XG5cbmZ1bmN0aW9uIF9jbGVhblN5bnRoZXRpY3MoY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGlmIChjaGFydENvbmZpZy5ncm91cHM/Lml0ZW1zKSB7XG4gICAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zID0gY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZpbHRlcihnID0+ICFfaXNTeW50aGV0aWMoZykpO1xuICB9XG4gIGlmIChjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcykge1xuICAgIGNoYXJ0Q29uZmlnLmluZGljYXRvcnMuaXRlbXMuZm9yRWFjaChpbmQgPT4ge1xuICAgICAgaWYgKGluZC5leHRyYT8uc3RhY2tzPy5pdGVtcykge1xuICAgICAgICBpbmQuZXh0cmEuc3RhY2tzLml0ZW1zID0gaW5kLmV4dHJhLnN0YWNrcy5pdGVtcy5maWx0ZXIoKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4gIV9pc1N5bnRoZXRpYyhzKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FwcGx5WFNlbGVjdGlvbihzZWxlY3RlZFg6IHN0cmluZywgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGdyb3VwSXRlbXMgPSBnZXRHcm91cEl0ZW1zKGNoYXJ0Q29uZmlnKTtcbiAgY29uc3QgaXNHcm91cEl0ZW0gPSBncm91cEl0ZW1zLnNvbWUoZyA9PiBnLmtleSA9PT0gc2VsZWN0ZWRYKTtcbiAgaWYgKGlzR3JvdXBJdGVtKSB7XG4gICAgZ3JvdXBJdGVtcy5mb3JFYWNoKGcgPT4geyBnLnNlbGVjdGVkID0gZy5rZXkgPT09IHNlbGVjdGVkWDsgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGluZGljYXRvcnMgPSBnZXRJbmRpY2F0b3JJdGVtcyhjaGFydENvbmZpZyk7XG4gIGNvbnN0IGFsbFN0YWNrczogT3JnYW5pemVyQ2hhcnRJdGVtW10gPSBpbmRpY2F0b3JzLmZsYXRNYXAoaSA9PiBnZXRTdGFja0l0ZW1zKGkpKTtcbiAgY29uc3Qgc3RhY2tJdGVtID0gYWxsU3RhY2tzLmZpbmQocyA9PiBzLmtleSA9PT0gc2VsZWN0ZWRYKTtcbiAgaWYgKHN0YWNrSXRlbSkge1xuICAgIGdyb3VwSXRlbXMuZm9yRWFjaChnID0+IHsgZy5zZWxlY3RlZCA9IGZhbHNlOyB9KTtcbiAgICBncm91cEl0ZW1zLnB1c2goX21ha2VTeW50aGV0aWMoe1xuICAgICAga2V5OiBzdGFja0l0ZW0ua2V5LFxuICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICBtZW51OiBzdGFja0l0ZW0ubWVudSxcbiAgICAgIGpxdWVyeTogc3RhY2tJdGVtLmpxdWVyeVxuICAgICAgICA/IHsgdmFsdWU6ICgpID0+IHN0YWNrSXRlbS5qcXVlcnkhLnZhbHVlKCksIGJ1aWxkQWxpYXM6ICgpID0+IHN0YWNrSXRlbS5qcXVlcnkhLmJ1aWxkQWxpYXMoKSB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXBwbHlZU2VsZWN0aW9uKHNlbGVjdGVkWTogc3RyaW5nLCBzZWxlY3RlZFlBZ2dyZWdhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGFjdHVhbEtleSA9IHJlc29sdmVZS2V5KHNlbGVjdGVkWSwgc2VsZWN0ZWRZQWdncmVnYXRlKTtcbiAgY29uc3QgaW5kaWNhdG9ycyA9IGdldEluZGljYXRvckl0ZW1zKGNoYXJ0Q29uZmlnKTtcbiAgaW5kaWNhdG9ycy5mb3JFYWNoKGkgPT4geyBpLnNlbGVjdGVkID0gaS5rZXkgPT09IGFjdHVhbEtleTsgfSk7XG4gIGluZGljYXRvcnMuZm9yRWFjaChpID0+IHtcbiAgICBnZXRTdGFja0l0ZW1zKGkpLmZvckVhY2goKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX2FwcGx5R3JvdXBCeVNlbGVjdGlvbihlZmZlY3RpdmVHcm91cEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQsIGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBnZXRJbmRpY2F0b3JJdGVtcyhjaGFydENvbmZpZykuZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuICBjb25zdCBzdGFja0l0ZW1zOiBPcmdhbml6ZXJDaGFydEl0ZW1bXSA9IGdldFN0YWNrSXRlbXMoYWN0aXZlSW5kaWNhdG9yKTtcbiAgaWYgKGVmZmVjdGl2ZUdyb3VwQnkgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YWNrSXRlbXMuZm9yRWFjaChzID0+IHsgcy5zZWxlY3RlZCA9IGZhbHNlOyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaXNTdGFja0l0ZW0gPSBzdGFja0l0ZW1zLnNvbWUocyA9PiBzLmtleSA9PT0gZWZmZWN0aXZlR3JvdXBCeSk7XG4gIGlmIChpc1N0YWNrSXRlbSkge1xuICAgIHN0YWNrSXRlbXMuZm9yRWFjaChzID0+IHsgcy5zZWxlY3RlZCA9IHMua2V5ID09PSBlZmZlY3RpdmVHcm91cEJ5OyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZ3JvdXBJdGVtID0gZ2V0R3JvdXBJdGVtcyhjaGFydENvbmZpZykuZmluZChnID0+IGcua2V5ID09PSBlZmZlY3RpdmVHcm91cEJ5KTtcbiAgaWYgKGdyb3VwSXRlbSAmJiBhY3RpdmVJbmRpY2F0b3IpIHtcbiAgICBzdGFja0l0ZW1zLmZvckVhY2gocyA9PiB7IHMuc2VsZWN0ZWQgPSBmYWxzZTsgfSk7XG4gICAgaWYgKCFhY3RpdmVJbmRpY2F0b3IuZXh0cmEpIHtcbiAgICAgIGFjdGl2ZUluZGljYXRvci5leHRyYSA9IHsgc3RhY2tzOiB7IG9wdGlvbmFsOiB0cnVlLCBpdGVtczogW10gfSB9O1xuICAgIH0gZWxzZSBpZiAoIWFjdGl2ZUluZGljYXRvci5leHRyYS5zdGFja3MpIHtcbiAgICAgIGFjdGl2ZUluZGljYXRvci5leHRyYS5zdGFja3MgPSB7IG9wdGlvbmFsOiB0cnVlLCBpdGVtczogW10gfTtcbiAgICB9XG4gICAgYWN0aXZlSW5kaWNhdG9yLmV4dHJhLnN0YWNrcy5pdGVtcy5wdXNoKF9tYWtlU3ludGhldGljKHtcbiAgICAgIGtleTogZ3JvdXBJdGVtLmtleSxcbiAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgbWVudTogZ3JvdXBJdGVtLm1lbnUsXG4gICAgICBqcXVlcnk6IGdyb3VwSXRlbS5qcXVlcnkgPyB7XG4gICAgICAgIHZhbHVlOiAoKSA9PiBncm91cEl0ZW0uanF1ZXJ5IS52YWx1ZSgpLFxuICAgICAgICBidWlsZEFsaWFzOiAoKSA9PiBncm91cEl0ZW0uanF1ZXJ5IS5idWlsZEFsaWFzKCksXG4gICAgICAgIGJ1aWxkTmFtZTogKF9pdGVtOiBhbnksIHZhbHVlOiBzdHJpbmcpID0+IFN0cmluZyh2YWx1ZSksXG4gICAgICB9IDogdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfSBlbHNlIHtcbiAgICBzdGFja0l0ZW1zLmZvckVhY2gocyA9PiB7IHMuc2VsZWN0ZWQgPSBmYWxzZTsgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FwcGx5U2xpY2VTZWxlY3Rpb24oc2VsZWN0ZWRTbGljZXM6IHN0cmluZ1tdLCBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgZ2V0RmlsdGVySXRlbXMoY2hhcnRDb25maWcpLmZvckVhY2goZiA9PiB7IGYuc2VsZWN0ZWQgPSBzZWxlY3RlZFNsaWNlcy5pbmNsdWRlcyhmLmtleSk7IH0pO1xufVxuXG4iXX0=
|