@bizdoc/core 2.1.2 → 2.1.3
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/admin/architecture/designer.component.mjs +1 -1
- package/esm2022/lib/admin/architecture/icon-picker.component.mjs +2 -3
- package/esm2022/lib/admin/core/color-picker.input.mjs +2 -3
- package/esm2022/lib/admin/diff/configuration-diff.component.mjs +42 -38
- package/esm2022/lib/admin/document-trace/document-trace.component.mjs +30 -28
- package/esm2022/lib/admin/document-trace/trace-element.component.mjs +13 -11
- package/esm2022/lib/admin/form/designer/properties.component.mjs +5 -7
- package/esm2022/lib/admin/form/designer/section.component.mjs +5 -7
- package/esm2022/lib/admin/form/designer/settings.component.mjs +5 -7
- package/esm2022/lib/admin/form/form.resolve.service.mjs +3 -2
- package/esm2022/lib/admin/form/workflow/workflow.component.mjs +4 -4
- package/esm2022/lib/admin/indices/manage-cube-index.component.mjs +3 -4
- package/esm2022/lib/admin/patterns/patterns.component.mjs +7 -5
- package/esm2022/lib/admin/permissions/permissions.component.mjs +7 -5
- package/esm2022/lib/admin/positions/positions.component.mjs +57 -54
- package/esm2022/lib/browse/browse-items.component.mjs +57 -43
- package/esm2022/lib/browse/browse.pane.component.mjs +3 -3
- package/esm2022/lib/browse/expanded-item/expanded-item.component.mjs +25 -24
- package/esm2022/lib/chat/chat-info.mjs +2 -2
- package/esm2022/lib/chat/contacts.component.mjs +7 -5
- package/esm2022/lib/chat/conversation.component.mjs +27 -22
- package/esm2022/lib/compose/action/action-picker.component.mjs +9 -7
- package/esm2022/lib/compose/action/action.base.mjs +4 -3
- package/esm2022/lib/compose/action/moveto-action.component.mjs +1 -1
- package/esm2022/lib/compose/can-deactivate-changes.service.mjs +2 -2
- package/esm2022/lib/compose/comments/comment.component.mjs +9 -8
- package/esm2022/lib/compose/comments/comments.component.mjs +15 -13
- package/esm2022/lib/compose/comments/quick-comment.component.exp.mjs +10 -8
- package/esm2022/lib/compose/compose-resolve.service.mjs +10 -5
- package/esm2022/lib/compose/compose.pane.component.mjs +3 -3
- package/esm2022/lib/compose/copy/copy.dialog.mjs +2 -3
- package/esm2022/lib/compose/document.mobile.component.mjs +3 -2
- package/esm2022/lib/compose/document.pane.component.mjs +3 -2
- package/esm2022/lib/compose/form-selector/form-selector.sheet.mjs +10 -6
- package/esm2022/lib/compose/tag/tags.component.mjs +3 -5
- package/esm2022/lib/compose/trace/trace.component.mjs +4 -3
- package/esm2022/lib/core/avatar/avatar.component.mjs +2 -2
- package/esm2022/lib/core/component-factory-resolver.mjs +6 -4
- package/esm2022/lib/core/guide/guide.component.mjs +17 -18
- package/esm2022/lib/core/http.interceptor.mjs +9 -6
- package/esm2022/lib/core/identity/identity.component.mjs +2 -2
- package/esm2022/lib/core/info/location-info.component.mjs +2 -3
- package/esm2022/lib/core/inputs/combination-picker-body.mjs +9 -8
- package/esm2022/lib/core/inputs/combination-picker.mjs +1 -1
- package/esm2022/lib/core/inputs/combination-pool.mjs +6 -6
- package/esm2022/lib/core/inputs/file.input.mjs +28 -28
- package/esm2022/lib/core/mailbox.service.mjs +69 -63
- package/esm2022/lib/core/slots/router.service.mjs +4 -2
- package/esm2022/lib/core/slots/slots.component.mjs +13 -13
- package/esm2022/lib/core/tagging/edit-input.component.mjs +9 -12
- package/esm2022/lib/core/tagging/tagging.directive.mjs +5 -6
- package/esm2022/lib/core/tagging/tagging.pipe.mjs +2 -2
- package/esm2022/lib/core/translate.service.mjs +3 -3
- package/esm2022/lib/cube/accum/accum.component.mjs +10 -8
- package/esm2022/lib/cube/chart/chart.component.mjs +10 -8
- package/esm2022/lib/cube/cube.service.mjs +81 -73
- package/esm2022/lib/cube/explore/explore-items.component.mjs +38 -34
- package/esm2022/lib/cube/explore/item-resolver.service.mjs +13 -15
- package/esm2022/lib/cube/grid/grid.component.mjs +24 -23
- package/esm2022/lib/cube/grid/spreadsheet.component.mjs +25 -20
- package/esm2022/lib/cube/matrix/matrix.base.mjs +6 -6
- package/esm2022/lib/cube/matrix/popup.component.mjs +7 -4
- package/esm2022/lib/cube/matrix/table.component.mjs +24 -20
- package/esm2022/lib/cube/parallel/parallel.component.mjs +12 -10
- package/esm2022/lib/cube/pivot/pivot.component.mjs +1 -1
- package/esm2022/lib/cube/sum/sum.component.mjs +15 -16
- package/esm2022/lib/dashboard/cube/compare.widget.mjs +5 -4
- package/esm2022/lib/dashboard/cube/documents.widget.mjs +10 -8
- package/esm2022/lib/dashboard/recents/recents.widget.mjs +9 -7
- package/esm2022/lib/dashboard/score/compare-groups.widget.mjs +3 -2
- package/esm2022/lib/desktop.module.mjs +4 -4
- package/esm2022/lib/home/home.desktop.component.mjs +16 -14
- package/esm2022/lib/home/home.mobile.component.mjs +2 -2
- package/esm2022/lib/home/notifications/notifications.component.mjs +2 -2
- package/esm2022/lib/home/tools.component.mjs +2 -2
- package/esm2022/lib/impersonate/impersonate.component.mjs +10 -9
- package/esm2022/lib/mobile.module.mjs +4 -4
- package/esm2022/lib/notifications/notifications-table.component.mjs +2 -2
- package/esm2022/lib/notifications/notifications.component-base.mjs +2 -2
- package/esm2022/lib/notifications/types/cube-anomaly.notification.mjs +2 -2
- package/esm2022/lib/notifications/types/liked.notification.mjs +3 -2
- package/esm2022/lib/notifications/types/notification-base.mjs +2 -2
- package/esm2022/lib/options/options.component.mjs +5 -8
- package/esm2022/lib/options/options.service.mjs +7 -5
- package/esm2022/lib/reports/cube/usage.component.mjs +3 -2
- package/esm2022/lib/routes.desktop.mjs +3 -3
- package/esm2022/lib/routes.mobile.mjs +17 -9
- package/esm2022/lib/scheduler/schedule.component.mjs +18 -17
- package/esm2022/lib/search/search.service.mjs +2 -2
- package/esm2022/lib/views/cube/cube-base.mjs +3 -3
- package/esm2022/lib/views/cube/explore.component.mjs +13 -11
- package/esm2022/lib/views/timeline/timeline.component.exp.mjs +20 -8
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/bizdoc-core.mjs +906 -784
- package/fesm2022/bizdoc-core.mjs.map +1 -1
- package/lib/admin/indices/manage-cube-index.component.d.ts +1 -1
- package/lib/admin/positions/positions.component.d.ts +1 -3
- package/lib/browse/browse-items.component.d.ts +1 -1
- package/lib/compose/can-deactivate-changes.service.d.ts +3 -3
- package/lib/compose/compose-resolve.service.d.ts +3 -3
- package/lib/compose/document.mobile.component.d.ts +1 -1
- package/lib/compose/document.pane.component.d.ts +1 -1
- package/lib/core/component-factory-resolver.d.ts +3 -1
- package/lib/core/mailbox.service.d.ts +2 -2
- package/lib/core/tagging/tagging.directive.d.ts +1 -1
- package/lib/cube/explore/item-resolver.service.d.ts +8 -9
- package/lib/cube/pivot/pivot.component.d.ts +1 -2
- package/lib/dashboard/cube/compare.widget.d.ts +1 -1
- package/lib/dashboard/score/compare-groups.widget.d.ts +1 -1
- package/lib/notifications/types/liked.notification.d.ts +1 -1
- package/lib/reports/cube/usage.component.d.ts +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +1 -1
@@ -1,7 +1,7 @@
|
|
1
1
|
import { Component, HostBinding, HostListener, Inject, Input, Optional, Self, ViewChild } from '@angular/core';
|
2
2
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
3
|
-
import { forkJoin, of, Subject } from 'rxjs';
|
4
|
-
import { catchError, tap,
|
3
|
+
import { firstValueFrom, forkJoin, of, Subject } from 'rxjs';
|
4
|
+
import { catchError, tap, switchMap } from 'rxjs/operators';
|
5
5
|
import { isArray } from '../functions';
|
6
6
|
import { AttachmentInfo } from '../info/attachment-info.service';
|
7
7
|
import { DOCUMENT_MODEL, reportProgress } from '../mailbox.service';
|
@@ -86,19 +86,20 @@ class FileInput {
|
|
86
86
|
'.' + AttachmentInfo.fileExt(item.fileName) + ',' + item.contentType;
|
87
87
|
this._prompt({ multiple: false, accept }).then(files => {
|
88
88
|
this._mailbox.checkIn(this._model.id, this._model.version, item.id, files[0]).
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
89
|
+
subscribe({
|
90
|
+
next: a => {
|
91
|
+
delete item.checkedOut;
|
92
|
+
Object.assign(item, a);
|
93
|
+
if (this.multiple) {
|
94
|
+
const index = this.value.indexOf(item.id);
|
95
|
+
// replace value with new id
|
96
|
+
this.value.splice(index, 1, a.id);
|
97
|
+
}
|
98
|
+
else
|
99
|
+
this.value = a.id;
|
100
|
+
this._sb.toast(this._translate.get('CheckedIn', item.fileName));
|
101
|
+
}, error: e => this._handleError(e)
|
102
|
+
});
|
102
103
|
});
|
103
104
|
}
|
104
105
|
checkOut(item) {
|
@@ -109,13 +110,15 @@ class FileInput {
|
|
109
110
|
});
|
110
111
|
}
|
111
112
|
discard(item) {
|
112
|
-
const task = () => this._mailbox.removeattachment(this._model.id, item.id).subscribe(
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
113
|
+
const task = () => this._mailbox.removeattachment(this._model.id, item.id).subscribe({
|
114
|
+
next: () => {
|
115
|
+
this.items.remove(item);
|
116
|
+
this._value = this.multiple ? this.items.length ? this.items.map(i => i.id) : null : null;
|
117
|
+
this._onChange && this._onChange(this.value);
|
118
|
+
const aitem = this._model.attachments.find(a => a.id === item.id);
|
119
|
+
aitem.deleted = true;
|
120
|
+
}, error: e => this._handleError(e)
|
121
|
+
});
|
119
122
|
if (this._model.draft)
|
120
123
|
task();
|
121
124
|
else
|
@@ -247,10 +250,7 @@ class FileInput {
|
|
247
250
|
this._input.nativeElement.multiple = options.multiple;
|
248
251
|
}
|
249
252
|
this._input.nativeElement.click();
|
250
|
-
return
|
251
|
-
this._pending.pipe(first()).
|
252
|
-
subscribe(resolve, reject);
|
253
|
-
});
|
253
|
+
return firstValueFrom(this._pending);
|
254
254
|
}
|
255
255
|
/**
|
256
256
|
*
|
@@ -258,7 +258,7 @@ class FileInput {
|
|
258
258
|
*/
|
259
259
|
_change(evt) {
|
260
260
|
this._onTouched && this._onTouched();
|
261
|
-
const { files } = evt.
|
261
|
+
const { files } = evt.target;
|
262
262
|
const arr = [];
|
263
263
|
for (var i = 0; i < files.length; i++) {
|
264
264
|
let file = files.item(i);
|
@@ -418,4 +418,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImpor
|
|
418
418
|
type: HostBinding,
|
419
419
|
args: ['attr.aria-describedby']
|
420
420
|
}] } });
|
421
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9pbnB1dHMvZmlsZS5pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9pbnB1dHMvZmlsZS5pbnB1dC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk5SSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBbUIsY0FBYyxFQUFrQixjQUFjLEVBQWUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTWxILE1BQU0sZUFBZSxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBRWhHLE1BT1EsU0FBUzthQUNBLFdBQU0sR0FBRyxDQUFDLEFBQUosQ0FBSztJQUkxQixJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUNXLFFB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LEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTXpDLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBZWhDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTXJDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTXJDLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBZ0N2QixLQUFLO3NCQUFqQixLQUFLO2dCQU9PLFdBQVc7c0JBQXZCLEtBQUs7Z0JBV0YsUUFBUTtzQkFEWCxLQUFLO2dCQVNGLFFBQVE7c0JBRFgsS0FBSztnQkFRZ0MsV0FBVztzQkFBaEQsV0FBVzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgU2VsZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nQ29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFwLCBmaXJzdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgQXR0YWNobWVudEluZm8gfSBmcm9tICcuLi9pbmZvL2F0dGFjaG1lbnQtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXR0YWNobWVudEV4dHJhLCBET0NVTUVOVF9NT0RFTCwgTWFpbGJveFNlcnZpY2UsIHJlcG9ydFByb2dyZXNzLCBVcGxvYWRFdmVudCB9IGZyb20gJy4uL21haWxib3guc2VydmljZSc7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnQsIFJlY2lwaWVudE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uL3Byb21wdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5cclxuY29uc3QgRVhURU5USU9OX0lDT05TID0geyAneGxzeCc6ICdleGNlbCcsICdkb2N4JzogJ3dvcmQnLCAncHB0eCc6ICdwb3dlcnBvaW50JywgJ3BkZic6ICdwZGYnIH07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJ2ZpbGUuaW5wdXQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2ZpbGUuaW5wdXQuc2NzcyddLFxyXG4gIGhvc3Q6IHsgY2xhc3M6ICdmaWxlLWRyb3BhYmxlJyB9LFxyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWZpbGUtdXBsb2FkJ1xyXG59KVxyXG5leHBvcnRcclxuICBjbGFzcyBGaWxlSW5wdXQgaW1wbGVtZW50cyBNYXRGb3JtRmllbGRDb250cm9sPG51bWJlciB8IG51bWJlcltdPiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN0YXRpYyBuZXh0SWQgPSAwO1xyXG4gIEBIb3N0QmluZGluZygpIHJlYWRvbmx5IGlkID0gYHR5cGUtZmlsZS11cGxvYWQtJHtGaWxlSW5wdXQubmV4dElkKyt9YDtcclxuICByZWFkb25seSBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgX211bHRpcGxlID0gZmFsc2U7XHJcbiAgcHVibGljIGdldCBtdWx0aXBsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IG11bHRpcGxlKHZhbHVlKSB7XHJcbiAgICB0aGlzLl9tdWx0aXBsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGFjY2VwdCA9IG51bGw7XHJcbiAgQElucHV0KCkgaWNvbiA9ICdwdWJsaXNoJztcclxuICBAVmlld0NoaWxkKCdpbnB1dCcpIF9pbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICBpdGVtcyA9IFtdIGFzIEF0dGFjaG1lbnRFeHRyYVtdO1xyXG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGFueTtcclxuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIF9vbkNoYW5nZTogYW55O1xyXG4gIHByaXZhdGUgX29uVG91Y2hlZDogYW55O1xyXG4gIHByaXZhdGUgX3ZhbHVlOiBudW1iZXIgfCBudW1iZXJbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kcmFnRHJvcCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVuZGluZyA9IG5ldyBTdWJqZWN0PEZpbGVbXT4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2Ryb3BhYmxlRWxlbWVudDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgX21haWxib3g6IE1haWxib3hTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIF9hdHRhY2htZW50SW5mbzogQXR0YWNobWVudEluZm8sXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NiOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UX01PREVMKSBwcml2YXRlIF9tb2RlbDogUmVjaXBpZW50TW9kZWw8YW55PixcclxuICApIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgfVxyXG4gIH1cclxuICBoYXNWZXJzaW9ucyhpdGVtOiBBdHRhY2htZW50KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWwuYXR0YWNobWVudHMuZmluZChhID0+IGEuZmlsZU5hbWUgPT09IGl0ZW0uZmlsZU5hbWUgJiYgYS5pZCAhPT0gaXRlbS5pZCkgIT09IG51bGw7XHJcbiAgfVxyXG4gIGdldFZlcnNpb25zKGl0ZW06IEF0dGFjaG1lbnQpOiBBdHRhY2htZW50W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLmZpbHRlcihhID0+IGEuZmlsZU5hbWUgPT09IGl0ZW0uZmlsZU5hbWUgJiYgYS5pZCAhPT0gaXRlbS5pZCk7XHJcbiAgfVxyXG4gIGRvd25sb2FkKGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgbG9jYXRpb24uaHJlZiA9IHRoaXMuX21haWxib3guZm9ybWF0RG93bmxvYWRVcmwodGhpcy5fbW9kZWwuZG9jdW1lbnRJZCwgaXRlbS5pZCk7XHJcbiAgICAoaXRlbSBhcyBBdHRhY2htZW50RXh0cmEpLnZpZXdlZCA9IG5ldyBEYXRlKCk7XHJcbiAgfVxyXG4gIHByZXZpZXdPckRvd25sb2FkKGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgaWYgKEF0dGFjaG1lbnRJbmZvLmV4aXN0cyhpdGVtLmNvbnRlbnRUeXBlKSlcclxuICAgICAgdGhpcy5hcHJldmlldyhpdGVtKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5kb3dubG9hZChpdGVtKTtcclxuICB9XHJcbiAgY2FuRWRpdChpdGVtOiBBdHRhY2htZW50RXh0cmEpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5fbW9kZWwuY29tcGxldGVkICYmIGl0ZW0udXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkICYmICFpdGVtLmRlbGV0ZWQ7XHJcbiAgfVxyXG4gIGFwcmV2aWV3KGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgdGhpcy5fYXR0YWNobWVudEluZm8ucHJldmlldyh0aGlzLl9tb2RlbCwgaXRlbS5pZCk7XHJcbiAgfVxyXG4gIGNhbmNlbChpdGVtOiBBdHRhY2htZW50RXh0cmEpIHtcclxuICAgIHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLnJlbW92ZShpdGVtKTtcclxuICB9XHJcbiAgY2hlY2tJbihpdGVtOiBBdHRhY2htZW50RXh0cmEpIHtcclxuICAgIGNvbnN0IGFjY2VwdCA9IGl0ZW0uaXNJbWFnZSA/ICdpbWFnZS8qJyA6XHJcbiAgICAgICcuJyArIEF0dGFjaG1lbnRJbmZvLmZpbGVFeHQoaXRlbS5maWxlTmFtZSkgKyAnLCcgKyBpdGVtLmNvbnRlbnRUeXBlO1xyXG4gICAgdGhpcy5fcHJvbXB0KHsgbXVsdGlwbGU6IGZhbHNlLCBhY2NlcHQgfSkudGhlbihmaWxlcyA9PiB7XHJcbiAgICAgIHRoaXMuX21haWxib3guY2hlY2tJbih0aGlzLl9tb2RlbC5pZCwgdGhpcy5fbW9kZWwudmVyc2lvbiwgaXRlbS5pZCwgZmlsZXNbMF0pLlxyXG4gICAgICAgIHBpcGUoKS5cclxuICAgICAgICBzdWJzY3JpYmUoYSA9PiB7XHJcbiAgICAgICAgICBkZWxldGUgaXRlbS5jaGVja2VkT3V0O1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihpdGVtLCBhKTtcclxuICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKHRoaXMudmFsdWUgYXMgbnVtYmVyW10pLmluZGV4T2YoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIC8vIHJlcGxhY2UgdmFsdWUgd2l0aCBuZXcgaWRcclxuICAgICAgICAgICAgKHRoaXMudmFsdWUgYXMgbnVtYmVyW10pLnNwbGljZShpbmRleCwgMSwgYS5pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBhLmlkO1xyXG4gICAgICAgICAgdGhpcy5fc2IudG9hc3QodGhpcy5fdHJhbnNsYXRlLmdldCgnQ2hlY2tlZEluJywgaXRlbS5maWxlTmFtZSkpO1xyXG4gICAgICAgIH0sIGUgPT4gdGhpcy5faGFuZGxlRXJyb3IoZSkpO1xyXG4gICAgfVxyXG4gICAgKVxyXG4gIH1cclxuICBjaGVja091dChpdGVtOiBBdHRhY2htZW50RXh0cmEpIHtcclxuICAgIHRoaXMuX21haWxib3guY2hlY2tPdXQodGhpcy5fbW9kZWwuaWQsIHRoaXMuX21vZGVsLnZlcnNpb24sIGl0ZW0uaWQpLlxyXG4gICAgICBzdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZE91dCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZChpdGVtKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIGRpc2NhcmQoaXRlbTogQXR0YWNobWVudEV4dHJhKSB7XHJcbiAgICBjb25zdCB0YXNrID0gKCkgPT5cclxuICAgICAgdGhpcy5fbWFpbGJveC5yZW1vdmVhdHRhY2htZW50KHRoaXMuX21vZGVsLmlkLCBpdGVtLmlkKS5zdWJzY3JpYmUoXyA9PiB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5yZW1vdmUoaXRlbSk7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm11bHRpcGxlID8gdGhpcy5pdGVtcy5sZW5ndGggPyB0aGlzLml0ZW1zLm1hcChpID0+IGkuaWQpIDogbnVsbCA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgJiYgdGhpcy5fb25DaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgY29uc3QgYWl0ZW0gPSB0aGlzLl9tb2RlbC5hdHRhY2htZW50cy5maW5kKGEgPT4gYS5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgYWl0ZW0uZGVsZXRlZCA9IHRydWU7XHJcbiAgICAgIH0sIGUgPT5cclxuICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihlKSk7XHJcbiAgICBpZiAodGhpcy5fbW9kZWwuZHJhZnQpXHJcbiAgICAgIHRhc2soKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fc2IuYXNrKCdEZWxldGVGaWxlQXNrJywgJ0RlbGV0ZUZpbGUnLCB7IGNvbG9yOiAnd2FybicgfSkuc3Vic2NyaWJlKG9rID0+XHJcbiAgICAgICAgb2sgJiYgdGFzaygpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaGFuZGxlRXJyb3IocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xyXG4gICAgICBjYXNlIDQwMTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA0MDk6IC8vIHZlcnNpb24gY2hhbmdlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGhpcy5fc2IuZXJyb3IoJ1ZlcnNpb25FcnInLCB0aGlzLl9tb2RlbC5udW1iZXIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICBjYXNlIDQwNjogLy8gdmFsaWRhdGlvbiBleGNlcHRpb25cclxuICAgICAgICB0aGlzLl9zYi5lcnJvclN0cmluZyhyZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5fc2IuZXJyb3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fZHJvcGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLl9kcmFnRHJvcC5zdWJzY3JpYmUob2sgPT4ge1xyXG4gICAgICBpZiAob2spIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdkcmFnJyk7XHJcbiAgICAgIGVsc2UgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWcnKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKCF0aGlzLl9wbGFjZWhvbGRlcikgdGhpcy5fcGxhY2Vob2xkZXIgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdEcmFnRmlsZScpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpkcm9wJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVEb2N1bWVudERyb3AoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5fZHJhZ0Ryb3AubmV4dChmYWxzZSk7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQgJiYgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICAvLyB0byBhcnJheVxyXG4gICAgY29uc3QgeyBpdGVtcyB9ID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xyXG4gICAgY29uc3QgZmlsZXMgPSBbXSBhcyBGaWxlW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBpdGVtc1tpXS5nZXRBc0ZpbGUoKTtcclxuICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3VwbG9hZChmaWxlcyk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdlbnRlcicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlRW50ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICF0aGlzLmRpc2FibGVkICYmIHRoaXMuX2RyYWdEcm9wLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlTGVhdmUoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICF0aGlzLmRpc2FibGVkICYmIHRoaXMuX2RyYWdEcm9wLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5fZHJhZ0Ryb3AubmV4dCh0cnVlKTtcclxuICB9XHJcbiAgd3JpdGVWYWx1ZSh2YWw6IG51bWJlciB8IG51bWJlcltdKTogdm9pZCB7XHJcbiAgICBpZiAoIXZhbCkge1xyXG4gICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNBcnJheSh2YWwpKVxyXG4gICAgICB0aGlzLml0ZW1zID1cclxuICAgICAgICB2YWwubWFwKGkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLmZpbmQoYSA9PiBhLmlkID09PSBpKTtcclxuICAgICAgICAgIHJldHVybiBhdHRhY2htZW50ID8gdGhpcy5fY3JlYXRlSXRlbShhdHRhY2htZW50KSA6IG51bGw7XHJcbiAgICAgICAgfSkuZmlsdGVyKGEgPT4gYSk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGF0dGFjaG1lbnQgPSB0aGlzLl9tb2RlbC5hdHRhY2htZW50cy5maW5kKGEgPT4gYS5pZCA9PT0gdmFsKTtcclxuICAgICAgdGhpcy5pdGVtcyA9IGF0dGFjaG1lbnQgPyBbdGhpcy5fY3JlYXRlSXRlbShhdHRhY2htZW50KV0gOiBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsO1xyXG4gIH1cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcbiAgQElucHV0KCkgZ2V0IHZhbHVlKCk6IG51bWJlciB8IG51bWJlcltdIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcbiAgc2V0IHZhbHVlKHZhbDogbnVtYmVyIHwgbnVtYmVyW10pIHtcclxuICAgIHRoaXMud3JpdGVWYWx1ZSh2YWwpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBASW5wdXQoKSBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcclxuICB9XHJcbiAgc2V0IHBsYWNlaG9sZGVyKHBsaDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsaDtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcbiAgZm9jdXNlZDogYm9vbGVhbjtcclxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7IHJldHVybiAhdGhpcy5fdmFsdWU7IH1cclxuICBzaG91bGRMYWJlbEZsb2F0OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xyXG4gIH1cclxuICBzZXQgcmVxdWlyZWQocmVxOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShyZXEpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2Rpc2FibGVkOyB9XHJcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIGVycm9yU3RhdGUgPSBmYWxzZTtcclxuICBjb250cm9sVHlwZT86IHN0cmluZyA9ICdiaXpkb2MtZmlsZS11cGxvYWQnO1xyXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgZGVzY3JpYmVkQnkgPSAnJztcclxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLmRlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcclxuICB9XHJcbiAgb25Db250YWluZXJDbGljaygpOiB2b2lkIHtcclxuICB9XHJcbiAgb3BlbigpIHtcclxuICAgIHRoaXMuX3Byb21wdCgpLnRoZW4oXHJcbiAgICAgIHRoaXMuX3VwbG9hZC5iaW5kKHRoaXMpKVxyXG4gIH1cclxuICBwcml2YXRlIF9wcm9tcHQob3B0aW9ucz86IHsgbXVsdGlwbGU6IGJvb2xlYW4sIGFjY2VwdD86IHN0cmluZyB9KTogUHJvbWlzZTxGaWxlW10+IHtcclxuICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLmFjY2VwdClcclxuICAgICAgICB0aGlzLl9pbnB1dC5uYXRpdmVFbGVtZW50LmFjY2VwdCA9IG9wdGlvbnMuYWNjZXB0O1xyXG4gICAgICBpZiAob3B0aW9ucy5tdWx0aXBsZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHRoaXMuX2lucHV0Lm5hdGl2ZUVsZW1lbnQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5fcGVuZGluZy5waXBlKGZpcnN0KCkpLlxyXG4gICAgICAgIHN1YnNjcmliZShyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGV2dFxyXG4gICAqL1xyXG4gIF9jaGFuZ2UoZXZ0OiBJbnB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQgJiYgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICBjb25zdCB7IGZpbGVzIH0gPSBldnQuc3JjRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgY29uc3QgYXJyID0gW10gYXMgRmlsZVtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZmlsZSA9IGZpbGVzLml0ZW0oaSk7XHJcbiAgICAgIGFyci5wdXNoKGZpbGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcGVuZGluZy5uZXh0KGFycik7XHJcbiAgICB0aGlzLl9pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGF0dGFjaG1lbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9jcmVhdGVJdGVtKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcclxuICAgIGNvbnN0IGZpbGVFeHQgPSBBdHRhY2htZW50SW5mby5maWxlRXh0KGF0dGFjaG1lbnQuZmlsZU5hbWUpLFxyXG4gICAgICBoYXNQcmV2aWV3ID0gQXR0YWNobWVudEluZm8uZXhpc3RzKGF0dGFjaG1lbnQuY29udGVudFR5cGUpLFxyXG4gICAgICBpc0ltYWdlID0gaGFzUHJldmlldyAmJiBBdHRhY2htZW50SW5mby5pc0ltYWdlKGF0dGFjaG1lbnQuY29udGVudFR5cGUpLFxyXG4gICAgICB1cmwgPSBpc0ltYWdlID8gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoXHJcbiAgICAgICAgdGhpcy5fbWFpbGJveC5mb3JtYXREb3dubG9hZFVybCh0aGlzLl9tb2RlbC5kb2N1bWVudElkLCBhdHRhY2htZW50LmlkKSkgOiBudWxsO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uYXR0YWNobWVudCxcclxuICAgICAgaGFzUHJldmlldyxcclxuICAgICAgaXNJbWFnZSxcclxuICAgICAgZmlsZUV4dCxcclxuICAgICAgdXJsLFxyXG4gICAgICBpY29uOiBFWFRFTlRJT05fSUNPTlNbZmlsZUV4dF0sXHJcbiAgICAgIGNoZWNrZWRPdXQ6XHJcbiAgICAgICAgYXR0YWNobWVudC5jaGVja2VkT3V0ICYmXHJcbiAgICAgICAgYXR0YWNobWVudC5ob2xkaW5nSWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS51c2VySWRcclxuICAgIH0gYXMgQXR0YWNobWVudEV4dHJhO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gZmlsZXNcclxuICAgKi9cclxuICBwcml2YXRlIF91cGxvYWQoZmlsZXM6IEZpbGVbXSkge1xyXG4gICAgY29uc3Qgb2JzZXJ2YWJsZXMgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGZpbGUgPSBmaWxlc1tpXSxcclxuICAgICAgICBpdGVtID0gdGhpcy5pdGVtcy5maW5kKGkgPT4gZmlsZS5uYW1lID09PSBpLmZpbGVOYW1lKTtcclxuICAgICAgLy8gZXhpc3RzXHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgLy8gaXMgY2hlY2tlZCBvdXRcclxuICAgICAgICBpZiAoaXRlbS5jaGVja2VkT3V0KSB7XHJcbiAgICAgICAgICAvLyBjaGVjayBpblxyXG4gICAgICAgICAgbGV0IG9ic2VydmFibGUgPSB0aGlzLl9tYWlsYm94LmNoZWNrSW4odGhpcy5fbW9kZWwuaWQsIHRoaXMuX21vZGVsLnZlcnNpb24sIGl0ZW0uaWQsIGZpbGUpLlxyXG4gICAgICAgICAgICBwaXBlKFxyXG4gICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzKGl0ZW0pLCBjYXRjaEVycm9yKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH0pLCB0YXAoKGE6IEF0dGFjaG1lbnQgfCBmYWxzZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW0uY2hlY2tlZE91dDtcclxuICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBpZFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMubXVsdGlwbGUgPyB0aGlzLml0ZW1zLm1hcChpID0+IGkuaWQpIDogYS5pZDtcclxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpdGVtLCBhKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UgJiYgdGhpcy5fb25DaGFuZ2UodGhpcy5fdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIG9ic2VydmFibGVzLnB1c2gob2JzZXJ2YWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY2FuRWRpdChpdGVtKSkge1xyXG4gICAgICAgICAgLy8gZXhpc3RpbmcgaXRlbSwgb3ZlcnJpZGVcclxuICAgICAgICAgIGxldCBvYnNlcnZhYmxlID0gdGhpcy5fbWFpbGJveC51cGxvYWQodGhpcy5fbW9kZWwuaWQsIHRoaXMuX21vZGVsLmZvcm1JZCwgdGhpcy5fbW9kZWwudmVyc2lvbixcclxuICAgICAgICAgICAgZmlsZSwgeyBpc1ByaXZhdGU6IHRydWUgfSkuXHJcbiAgICAgICAgICAgIHBpcGUocmVwb3J0UHJvZ3Jlc3MoaXRlbSksIGNhdGNoRXJyb3IoZSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAgICAgfSksIHRhcCgoYTogQXR0YWNobWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMubXVsdGlwbGUgPyB0aGlzLml0ZW1zLm1hcChpID0+IGkuaWQpIDogYS5pZDtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaXRlbSwgYSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkNoYW5nZSAmJiB0aGlzLl9vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAvKiBubyB0b2FzdCAqL1xyXG4gICAgICAgICAgICAgIHN3aXRjaE1hcChfID0+IG9mKGZhbHNlKSkpO1xyXG4gICAgICAgICAgb2JzZXJ2YWJsZXMucHVzaChvYnNlcnZhYmxlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVE9ETyBhZGQgcGVuZGluZ1xyXG4gICAgICAgIC8vdGhpcy5pdGVtcy5wdXNoKHRoaXMuX2NyZWF0ZUl0ZW0oYSkpO1xyXG4gICAgICAgIC8vIHVwbG9hZCBuZXdcclxuICAgICAgICBsZXQgb2JzZXJ2YWJsZSA9IHRoaXMuX21haWxib3gudXBsb2FkKHRoaXMuX21vZGVsLmlkLCB0aGlzLl9tb2RlbC5mb3JtSWQsIHRoaXMuX21vZGVsLnZlcnNpb24sXHJcbiAgICAgICAgICBmaWxlLCB7IGlzUHJpdmF0ZTogdHJ1ZSB9KS5cclxuICAgICAgICAgIHBpcGUoLypUT0RPIHJlcG9ydFByb2dyZXNzKGl0ZW0pLCAqL2NhdGNoRXJyb3IoZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgICAgfSksIHRhcCgoYTogQXR0YWNobWVudCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLnB1c2goYSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHRoaXMuX2NyZWF0ZUl0ZW0oYSkpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5tdWx0aXBsZSA/IHRoaXMuaXRlbXMubWFwKGkgPT4gaS5pZCkgOiBhLmlkO1xyXG4gICAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlICYmIHRoaXMuX29uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIC8qIG5vIHRvYXN0ICovXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChfID0+IG9mKGZhbHNlKSkpO1xyXG4gICAgICAgIG9ic2VydmFibGVzLnB1c2gob2JzZXJ2YWJsZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvcmtKb2luKG9ic2VydmFibGVzKS5zdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgIC8vIGZpbHRlciBub24gZmFsc2VcclxuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBlLmZpbHRlcihlID0+IGUpIGFzIEF0dGFjaG1lbnRbXTtcclxuICAgICAgLy8gYW55XHJcbiAgICAgIGF0dGFjaG1lbnRzLmxlbmd0aCAmJlxyXG4gICAgICAgIHRoaXMuX3NiLnRvYXN0KFxyXG4gICAgICAgICAgYXR0YWNobWVudHMubGVuZ3RoID4gMSA/XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0NoZWNrZWRJbk4nLCBhdHRhY2htZW50cy5sZW5ndGgpIDpcclxuICAgICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmdldCgnQ2hlY2tlZEluJywgYXR0YWNobWVudHNbMF0uZmlsZU5hbWUpXHJcbiAgICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RyYWdEcm9wLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLl9wZW5kaW5nLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCIhaXRlbXMubGVuZ3RoOyBlbHNlIHByZXZpZXdcIiAoY2xpY2spPVwib3BlbigpXCI+XHJcbiAgPG1hdC1pY29uIGNsYXNzPVwiZmlsbGVkXCI+e3tpY29ufX08L21hdC1pY29uPlxyXG4gIDxzcGFuIGNsYXNzPVwibWF0LWgzXCI+e3twbGFjZWhvbGRlcn19PC9zcGFuPlxyXG48L2J1dHRvbj5cclxuPGlucHV0IHR5cGU9XCJmaWxlXCIgI2lucHV0XHJcbiAgICAgICBbYWNjZXB0XT1hY2NlcHQgW211bHRpcGxlXT1tdWx0aXBsZSAoY2hhbmdlKT0nX2NoYW5nZSgkZXZlbnQpJyBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiAvPlxyXG48bmctdGVtcGxhdGUgI3ByZXZpZXc+XHJcbiAgPGRpdiAqbmdGb3I9J2xldCBhIG9mIGl0ZW1zJyBjbGFzcz1cImF0dGFjaG1lbnQtaXRlbVwiXHJcbiAgICAgICBbY2xhc3MuZGVsZXRlZF09XCJhLmRlbGV0ZWRcIiBbY2xhc3MuZmFpbGVkXT1cImEuZmFpbGVkXCJcclxuICAgICAgIFtwcm9ncmVzc0luZGljYXRvcl09XCJhLnByb2dyZXNzXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZS1wcmV2aWV3XCI+XHJcbiAgICAgIDxpbWcgKm5nSWY9XCJhLmlzSW1hZ2VcIiBbc3JjXT1cImEudXJsXCIgKGNsaWNrKT1cImFwcmV2aWV3KGEpXCIgaGVpZ2h0PVwiODBcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCJhLmhhc1ByZXZpZXcgJiYgIWEuaXNJbWFnZVwiIFtiaXpkb2NUb29sdGlwXT1cIidQcmV2aWV3J3x0cmFuc2xhdGVcIiAoY2xpY2spPVwiYXByZXZpZXcoYSlcIiBbbmdTd2l0Y2hdPVwiYS5pY29uICE9PSB1bmRlZmluZWRcIj5cclxuICAgICAgICA8bWF0LWljb24gKm5nU3dpdGNoQ2FzZT1cInRydWVcIiBbc3ZnSWNvbl09XCJhLmljb25cIiBbaW5saW5lXT1cImZhbHNlXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICA8bWF0LWljb24gKm5nU3dpdGNoRGVmYXVsdCBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5maW5kX2luX3BhZ2U8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIWEuaGFzUHJldmlldyAmJiBhLmljb25cIiBbc3ZnSWNvbl09XCJhLmljb25cIiBbaW5saW5lXT1cImZhbHNlXCI+PC9tYXQtaWNvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbGUtb3ZlcmxheSByb3dcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlbmFtZVwiPnt7YS5maWxlTmFtZX19PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwib3B0aW9uc1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgW2JpemRvY1Rvb2x0aXBdPVwiJ09wdGlvbnMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bWF0LW1lbnUgI21lbnU+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYS5mYWlsZWRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuRWRpdChhKSAmJiAhYS5mYWlsZWRcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYS5jaGVja2VkT3V0XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2hlY2tPdXQoYSlcIj57e1wiQ2hlY2tPdXRcIiB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdJZj1cIm11bHRpcGxlXCIgKGNsaWNrKT1cIm9wZW4oKVwiPnt7XCJBZGRcIiB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2hlY2tJbihhKVwiICpuZ0lmPVwiYS5jaGVja2VkT3V0XCI+e3tcIkNoZWNrSW5cIiB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJkb3dubG9hZChhKVwiPnt7XCJEb3dubG9hZFwiIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nSWY9XCJhLmhhc1ByZXZpZXdcIiAoY2xpY2spPVwiYXByZXZpZXcoYSlcIj48bWF0LWljb24+bGFuZHNjYXBlPC9tYXQtaWNvbj4ge3tcIlByZXZpZXdcIiB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1ZlcnNpb25zKGEpXCI+XHJcbiAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgdiBvZiBnZXRWZXJzaW9ucyhhKVwiIChjbGljayk9XCJwcmV2aWV3T3JEb3dubG9hZCh2KVwiPnt7di50aW1lIHwgIGFtQ2FsZW5kYXJ9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5FZGl0KGEpXCI+XHJcbiAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZGlzY2FyZChhKVwiPnt7XCJEaXNjYXJkXCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjYW5jZWwoYSlcIiAqbmdJZj1cImEuZmFpbGVkXCI+e3tcIkNhbmNlbFwiIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgIDwvbWF0LW1lbnU+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
421
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9pbnB1dHMvZmlsZS5pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9pbnB1dHMvZmlsZS5pbnB1dC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk5SSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFTLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBbUIsY0FBYyxFQUFrQixjQUFjLEVBQWUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTWxILE1BQU0sZUFBZSxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBRWhHLE1BT1EsU0FBUzthQUNBLFdBQU0sR0FBRyxDQUFDLEFBQUosQ0FBSztJQUkxQixJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUNXLFFB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QkFlaEMsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNckMsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNckMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFnQ3ZCLEtBQUs7c0JBQWpCLEtBQUs7Z0JBT08sV0FBVztzQkFBdkIsS0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUs7Z0JBU0YsUUFBUTtzQkFEWCxLQUFLO2dCQVFnQyxXQUFXO3NCQUFoRCxXQUFXO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBTZWxmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFwLCBmaXJzdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgQXR0YWNobWVudEluZm8gfSBmcm9tICcuLi9pbmZvL2F0dGFjaG1lbnQtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXR0YWNobWVudEV4dHJhLCBET0NVTUVOVF9NT0RFTCwgTWFpbGJveFNlcnZpY2UsIHJlcG9ydFByb2dyZXNzLCBVcGxvYWRFdmVudCB9IGZyb20gJy4uL21haWxib3guc2VydmljZSc7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnQsIFJlY2lwaWVudE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uL3Byb21wdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5cclxuY29uc3QgRVhURU5USU9OX0lDT05TID0geyAneGxzeCc6ICdleGNlbCcsICdkb2N4JzogJ3dvcmQnLCAncHB0eCc6ICdwb3dlcnBvaW50JywgJ3BkZic6ICdwZGYnIH07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJ2ZpbGUuaW5wdXQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2ZpbGUuaW5wdXQuc2NzcyddLFxyXG4gIGhvc3Q6IHsgY2xhc3M6ICdmaWxlLWRyb3BhYmxlJyB9LFxyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWZpbGUtdXBsb2FkJ1xyXG59KVxyXG5leHBvcnRcclxuICBjbGFzcyBGaWxlSW5wdXQgaW1wbGVtZW50cyBNYXRGb3JtRmllbGRDb250cm9sPG51bWJlciB8IG51bWJlcltdPiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN0YXRpYyBuZXh0SWQgPSAwO1xyXG4gIEBIb3N0QmluZGluZygpIHJlYWRvbmx5IGlkID0gYHR5cGUtZmlsZS11cGxvYWQtJHtGaWxlSW5wdXQubmV4dElkKyt9YDtcclxuICByZWFkb25seSBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgX211bHRpcGxlID0gZmFsc2U7XHJcbiAgcHVibGljIGdldCBtdWx0aXBsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IG11bHRpcGxlKHZhbHVlKSB7XHJcbiAgICB0aGlzLl9tdWx0aXBsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGFjY2VwdCA9IG51bGw7XHJcbiAgQElucHV0KCkgaWNvbiA9ICdwdWJsaXNoJztcclxuICBAVmlld0NoaWxkKCdpbnB1dCcpIF9pbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICBpdGVtcyA9IFtdIGFzIEF0dGFjaG1lbnRFeHRyYVtdO1xyXG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGFueTtcclxuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIF9vbkNoYW5nZTogYW55O1xyXG4gIHByaXZhdGUgX29uVG91Y2hlZDogYW55O1xyXG4gIHByaXZhdGUgX3ZhbHVlOiBudW1iZXIgfCBudW1iZXJbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kcmFnRHJvcCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVuZGluZyA9IG5ldyBTdWJqZWN0PEZpbGVbXT4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2Ryb3BhYmxlRWxlbWVudDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgX21haWxib3g6IE1haWxib3hTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIF9hdHRhY2htZW50SW5mbzogQXR0YWNobWVudEluZm8sXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NiOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UX01PREVMKSBwcml2YXRlIF9tb2RlbDogUmVjaXBpZW50TW9kZWw8YW55PixcclxuICApIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgfVxyXG4gIH1cclxuICBoYXNWZXJzaW9ucyhpdGVtOiBBdHRhY2htZW50KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWwuYXR0YWNobWVudHMuZmluZChhID0+IGEuZmlsZU5hbWUgPT09IGl0ZW0uZmlsZU5hbWUgJiYgYS5pZCAhPT0gaXRlbS5pZCkgIT09IG51bGw7XHJcbiAgfVxyXG4gIGdldFZlcnNpb25zKGl0ZW06IEF0dGFjaG1lbnQpOiBBdHRhY2htZW50W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLmZpbHRlcihhID0+IGEuZmlsZU5hbWUgPT09IGl0ZW0uZmlsZU5hbWUgJiYgYS5pZCAhPT0gaXRlbS5pZCk7XHJcbiAgfVxyXG4gIGRvd25sb2FkKGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgbG9jYXRpb24uaHJlZiA9IHRoaXMuX21haWxib3guZm9ybWF0RG93bmxvYWRVcmwodGhpcy5fbW9kZWwuZG9jdW1lbnRJZCwgaXRlbS5pZCk7XHJcbiAgICAoaXRlbSBhcyBBdHRhY2htZW50RXh0cmEpLnZpZXdlZCA9IG5ldyBEYXRlKCk7XHJcbiAgfVxyXG4gIHByZXZpZXdPckRvd25sb2FkKGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgaWYgKEF0dGFjaG1lbnRJbmZvLmV4aXN0cyhpdGVtLmNvbnRlbnRUeXBlKSlcclxuICAgICAgdGhpcy5hcHJldmlldyhpdGVtKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5kb3dubG9hZChpdGVtKTtcclxuICB9XHJcbiAgY2FuRWRpdChpdGVtOiBBdHRhY2htZW50RXh0cmEpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5fbW9kZWwuY29tcGxldGVkICYmIGl0ZW0udXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkICYmICFpdGVtLmRlbGV0ZWQ7XHJcbiAgfVxyXG4gIGFwcmV2aWV3KGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgdGhpcy5fYXR0YWNobWVudEluZm8ucHJldmlldyh0aGlzLl9tb2RlbCwgaXRlbS5pZCk7XHJcbiAgfVxyXG4gIGNhbmNlbChpdGVtOiBBdHRhY2htZW50RXh0cmEpIHtcclxuICAgIHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLnJlbW92ZShpdGVtKTtcclxuICB9XHJcbiAgY2hlY2tJbihpdGVtOiBBdHRhY2htZW50RXh0cmEpIHtcclxuICAgIGNvbnN0IGFjY2VwdCA9IGl0ZW0uaXNJbWFnZSA/ICdpbWFnZS8qJyA6XHJcbiAgICAgICcuJyArIEF0dGFjaG1lbnRJbmZvLmZpbGVFeHQoaXRlbS5maWxlTmFtZSkgKyAnLCcgKyBpdGVtLmNvbnRlbnRUeXBlO1xyXG4gICAgdGhpcy5fcHJvbXB0KHsgbXVsdGlwbGU6IGZhbHNlLCBhY2NlcHQgfSkudGhlbihmaWxlcyA9PiB7XHJcbiAgICAgIHRoaXMuX21haWxib3guY2hlY2tJbih0aGlzLl9tb2RlbC5pZCwgdGhpcy5fbW9kZWwudmVyc2lvbiwgaXRlbS5pZCwgZmlsZXNbMF0pLlxyXG4gICAgICAgIHN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlIGl0ZW0uY2hlY2tlZE91dDtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpdGVtLCBhKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9ICh0aGlzLnZhbHVlIGFzIG51bWJlcltdKS5pbmRleE9mKGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICAgIC8vIHJlcGxhY2UgdmFsdWUgd2l0aCBuZXcgaWRcclxuICAgICAgICAgICAgICAodGhpcy52YWx1ZSBhcyBudW1iZXJbXSkuc3BsaWNlKGluZGV4LCAxLCBhLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGEuaWQ7XHJcbiAgICAgICAgICAgIHRoaXMuX3NiLnRvYXN0KHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0NoZWNrZWRJbicsIGl0ZW0uZmlsZU5hbWUpKTtcclxuICAgICAgICAgIH0sIGVycm9yOiBlID0+IHRoaXMuX2hhbmRsZUVycm9yKGUpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICApXHJcbiAgfVxyXG4gIGNoZWNrT3V0KGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgdGhpcy5fbWFpbGJveC5jaGVja091dCh0aGlzLl9tb2RlbC5pZCwgdGhpcy5fbW9kZWwudmVyc2lvbiwgaXRlbS5pZCkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkT3V0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRvd25sb2FkKGl0ZW0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgZGlzY2FyZChpdGVtOiBBdHRhY2htZW50RXh0cmEpIHtcclxuICAgIGNvbnN0IHRhc2sgPSAoKSA9PlxyXG4gICAgICB0aGlzLl9tYWlsYm94LnJlbW92ZWF0dGFjaG1lbnQodGhpcy5fbW9kZWwuaWQsIGl0ZW0uaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcy5yZW1vdmUoaXRlbSk7XHJcbiAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMubXVsdGlwbGUgPyB0aGlzLml0ZW1zLmxlbmd0aCA/IHRoaXMuaXRlbXMubWFwKGkgPT4gaS5pZCkgOiBudWxsIDogbnVsbDtcclxuICAgICAgICAgIHRoaXMuX29uQ2hhbmdlICYmIHRoaXMuX29uQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgY29uc3QgYWl0ZW0gPSB0aGlzLl9tb2RlbC5hdHRhY2htZW50cy5maW5kKGEgPT4gYS5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICBhaXRlbS5kZWxldGVkID0gdHJ1ZTtcclxuICAgICAgICB9LCBlcnJvcjogZSA9PlxyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZSlcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5fbW9kZWwuZHJhZnQpXHJcbiAgICAgIHRhc2soKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fc2IuYXNrKCdEZWxldGVGaWxlQXNrJywgJ0RlbGV0ZUZpbGUnLCB7IGNvbG9yOiAnd2FybicgfSkuc3Vic2NyaWJlKG9rID0+XHJcbiAgICAgICAgb2sgJiYgdGFzaygpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaGFuZGxlRXJyb3IocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xyXG4gICAgICBjYXNlIDQwMTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA0MDk6IC8vIHZlcnNpb24gY2hhbmdlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGhpcy5fc2IuZXJyb3IoJ1ZlcnNpb25FcnInLCB0aGlzLl9tb2RlbC5udW1iZXIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICBjYXNlIDQwNjogLy8gdmFsaWRhdGlvbiBleGNlcHRpb25cclxuICAgICAgICB0aGlzLl9zYi5lcnJvclN0cmluZyhyZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5fc2IuZXJyb3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fZHJvcGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLl9kcmFnRHJvcC5zdWJzY3JpYmUob2sgPT4ge1xyXG4gICAgICBpZiAob2spIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdkcmFnJyk7XHJcbiAgICAgIGVsc2UgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWcnKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKCF0aGlzLl9wbGFjZWhvbGRlcikgdGhpcy5fcGxhY2Vob2xkZXIgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdEcmFnRmlsZScpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpkcm9wJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVEb2N1bWVudERyb3AoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5fZHJhZ0Ryb3AubmV4dChmYWxzZSk7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQgJiYgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICAvLyB0byBhcnJheVxyXG4gICAgY29uc3QgeyBpdGVtcyB9ID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xyXG4gICAgY29uc3QgZmlsZXMgPSBbXSBhcyBGaWxlW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBpdGVtc1tpXS5nZXRBc0ZpbGUoKTtcclxuICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3VwbG9hZChmaWxlcyk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdlbnRlcicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlRW50ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICF0aGlzLmRpc2FibGVkICYmIHRoaXMuX2RyYWdEcm9wLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlTGVhdmUoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICF0aGlzLmRpc2FibGVkICYmIHRoaXMuX2RyYWdEcm9wLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5fZHJhZ0Ryb3AubmV4dCh0cnVlKTtcclxuICB9XHJcbiAgd3JpdGVWYWx1ZSh2YWw6IG51bWJlciB8IG51bWJlcltdKTogdm9pZCB7XHJcbiAgICBpZiAoIXZhbCkge1xyXG4gICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNBcnJheSh2YWwpKVxyXG4gICAgICB0aGlzLml0ZW1zID1cclxuICAgICAgICB2YWwubWFwKGkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLmZpbmQoYSA9PiBhLmlkID09PSBpKTtcclxuICAgICAgICAgIHJldHVybiBhdHRhY2htZW50ID8gdGhpcy5fY3JlYXRlSXRlbShhdHRhY2htZW50KSA6IG51bGw7XHJcbiAgICAgICAgfSkuZmlsdGVyKGEgPT4gYSk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGF0dGFjaG1lbnQgPSB0aGlzLl9tb2RlbC5hdHRhY2htZW50cy5maW5kKGEgPT4gYS5pZCA9PT0gdmFsKTtcclxuICAgICAgdGhpcy5pdGVtcyA9IGF0dGFjaG1lbnQgPyBbdGhpcy5fY3JlYXRlSXRlbShhdHRhY2htZW50KV0gOiBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsO1xyXG4gIH1cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcbiAgQElucHV0KCkgZ2V0IHZhbHVlKCk6IG51bWJlciB8IG51bWJlcltdIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcbiAgc2V0IHZhbHVlKHZhbDogbnVtYmVyIHwgbnVtYmVyW10pIHtcclxuICAgIHRoaXMud3JpdGVWYWx1ZSh2YWwpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBASW5wdXQoKSBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcclxuICB9XHJcbiAgc2V0IHBsYWNlaG9sZGVyKHBsaDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsaDtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcbiAgZm9jdXNlZDogYm9vbGVhbjtcclxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7IHJldHVybiAhdGhpcy5fdmFsdWU7IH1cclxuICBzaG91bGRMYWJlbEZsb2F0OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xyXG4gIH1cclxuICBzZXQgcmVxdWlyZWQocmVxOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShyZXEpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2Rpc2FibGVkOyB9XHJcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIGVycm9yU3RhdGUgPSBmYWxzZTtcclxuICBjb250cm9sVHlwZT86IHN0cmluZyA9ICdiaXpkb2MtZmlsZS11cGxvYWQnO1xyXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgZGVzY3JpYmVkQnkgPSAnJztcclxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLmRlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcclxuICB9XHJcbiAgb25Db250YWluZXJDbGljaygpOiB2b2lkIHtcclxuICB9XHJcbiAgb3BlbigpIHtcclxuICAgIHRoaXMuX3Byb21wdCgpLnRoZW4oXHJcbiAgICAgIHRoaXMuX3VwbG9hZC5iaW5kKHRoaXMpKVxyXG4gIH1cclxuICBwcml2YXRlIF9wcm9tcHQob3B0aW9ucz86IHsgbXVsdGlwbGU6IGJvb2xlYW4sIGFjY2VwdD86IHN0cmluZyB9KTogUHJvbWlzZTxGaWxlW10+IHtcclxuICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLmFjY2VwdClcclxuICAgICAgICB0aGlzLl9pbnB1dC5uYXRpdmVFbGVtZW50LmFjY2VwdCA9IG9wdGlvbnMuYWNjZXB0O1xyXG4gICAgICBpZiAob3B0aW9ucy5tdWx0aXBsZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHRoaXMuX2lucHV0Lm5hdGl2ZUVsZW1lbnQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuX3BlbmRpbmcpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gZXZ0XHJcbiAgICovXHJcbiAgX2NoYW5nZShldnQ6IElucHV0RXZlbnQpIHtcclxuICAgIHRoaXMuX29uVG91Y2hlZCAmJiB0aGlzLl9vblRvdWNoZWQoKTtcclxuICAgIGNvbnN0IHsgZmlsZXMgfSA9IGV2dC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGNvbnN0IGFyciA9IFtdIGFzIEZpbGVbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGZpbGUgPSBmaWxlcy5pdGVtKGkpO1xyXG4gICAgICBhcnIucHVzaChmaWxlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3BlbmRpbmcubmV4dChhcnIpO1xyXG4gICAgdGhpcy5faW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBhdHRhY2htZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY3JlYXRlSXRlbShhdHRhY2htZW50OiBBdHRhY2htZW50KSB7XHJcbiAgICBjb25zdCBmaWxlRXh0ID0gQXR0YWNobWVudEluZm8uZmlsZUV4dChhdHRhY2htZW50LmZpbGVOYW1lKSxcclxuICAgICAgaGFzUHJldmlldyA9IEF0dGFjaG1lbnRJbmZvLmV4aXN0cyhhdHRhY2htZW50LmNvbnRlbnRUeXBlKSxcclxuICAgICAgaXNJbWFnZSA9IGhhc1ByZXZpZXcgJiYgQXR0YWNobWVudEluZm8uaXNJbWFnZShhdHRhY2htZW50LmNvbnRlbnRUeXBlKSxcclxuICAgICAgdXJsID0gaXNJbWFnZSA/IHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxyXG4gICAgICAgIHRoaXMuX21haWxib3guZm9ybWF0RG93bmxvYWRVcmwodGhpcy5fbW9kZWwuZG9jdW1lbnRJZCwgYXR0YWNobWVudC5pZCkpIDogbnVsbDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLmF0dGFjaG1lbnQsXHJcbiAgICAgIGhhc1ByZXZpZXcsXHJcbiAgICAgIGlzSW1hZ2UsXHJcbiAgICAgIGZpbGVFeHQsXHJcbiAgICAgIHVybCxcclxuICAgICAgaWNvbjogRVhURU5USU9OX0lDT05TW2ZpbGVFeHRdLFxyXG4gICAgICBjaGVja2VkT3V0OlxyXG4gICAgICAgIGF0dGFjaG1lbnQuY2hlY2tlZE91dCAmJlxyXG4gICAgICAgIGF0dGFjaG1lbnQuaG9sZGluZ0lkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkXHJcbiAgICB9IGFzIEF0dGFjaG1lbnRFeHRyYTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGZpbGVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdXBsb2FkKGZpbGVzOiBGaWxlW10pIHtcclxuICAgIGNvbnN0IG9ic2VydmFibGVzID0gW10gYXMgT2JzZXJ2YWJsZTxhbnk+W107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBmaWxlID0gZmlsZXNbaV0sXHJcbiAgICAgICAgaXRlbSA9IHRoaXMuaXRlbXMuZmluZChpID0+IGZpbGUubmFtZSA9PT0gaS5maWxlTmFtZSk7XHJcbiAgICAgIC8vIGV4aXN0c1xyXG4gICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgIC8vIGlzIGNoZWNrZWQgb3V0XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hlY2tlZE91dCkge1xyXG4gICAgICAgICAgLy8gY2hlY2sgaW5cclxuICAgICAgICAgIGxldCBvYnNlcnZhYmxlID0gdGhpcy5fbWFpbGJveC5jaGVja0luKHRoaXMuX21vZGVsLmlkLCB0aGlzLl9tb2RlbC52ZXJzaW9uLCBpdGVtLmlkLCBmaWxlKS5cclxuICAgICAgICAgICAgcGlwZShcclxuICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzcyhpdGVtKSwgY2F0Y2hFcnJvcihlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAgICAgICB9KSwgdGFwKChhOiBBdHRhY2htZW50IHwgZmFsc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtLmNoZWNrZWRPdXQ7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgaWRcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm11bHRpcGxlID8gdGhpcy5pdGVtcy5tYXAoaSA9PiBpLmlkKSA6IGEuaWQ7XHJcbiAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaXRlbSwgYSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlICYmIHRoaXMuX29uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICBvYnNlcnZhYmxlcy5wdXNoKG9ic2VydmFibGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmNhbkVkaXQoaXRlbSkpIHtcclxuICAgICAgICAgIC8vIGV4aXN0aW5nIGl0ZW0sIG92ZXJyaWRlXHJcbiAgICAgICAgICBsZXQgb2JzZXJ2YWJsZSA9IHRoaXMuX21haWxib3gudXBsb2FkKHRoaXMuX21vZGVsLmlkLCB0aGlzLl9tb2RlbC5mb3JtSWQsIHRoaXMuX21vZGVsLnZlcnNpb24sXHJcbiAgICAgICAgICAgIGZpbGUsIHsgaXNQcml2YXRlOiB0cnVlIH0pLlxyXG4gICAgICAgICAgICBwaXBlKHJlcG9ydFByb2dyZXNzKGl0ZW0pLCBjYXRjaEVycm9yKGUgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pLCB0YXAoKGE6IEF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm11bHRpcGxlID8gdGhpcy5pdGVtcy5tYXAoaSA9PiBpLmlkKSA6IGEuaWQ7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGl0ZW0sIGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UgJiYgdGhpcy5fb25DaGFuZ2UodGhpcy5fdmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgLyogbm8gdG9hc3QgKi9cclxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoXyA9PiBvZihmYWxzZSkpKTtcclxuICAgICAgICAgIG9ic2VydmFibGVzLnB1c2gob2JzZXJ2YWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFRPRE8gYWRkIHBlbmRpbmdcclxuICAgICAgICAvL3RoaXMuaXRlbXMucHVzaCh0aGlzLl9jcmVhdGVJdGVtKGEpKTtcclxuICAgICAgICAvLyB1cGxvYWQgbmV3XHJcbiAgICAgICAgbGV0IG9ic2VydmFibGUgPSB0aGlzLl9tYWlsYm94LnVwbG9hZCh0aGlzLl9tb2RlbC5pZCwgdGhpcy5fbW9kZWwuZm9ybUlkLCB0aGlzLl9tb2RlbC52ZXJzaW9uLFxyXG4gICAgICAgICAgZmlsZSwgeyBpc1ByaXZhdGU6IHRydWUgfSkuXHJcbiAgICAgICAgICBwaXBlKC8qVE9ETyByZXBvcnRQcm9ncmVzcyhpdGVtKSwgKi9jYXRjaEVycm9yKGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihlKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAgIH0pLCB0YXAoKGE6IEF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9tb2RlbC5hdHRhY2htZW50cy5wdXNoKGEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCh0aGlzLl9jcmVhdGVJdGVtKGEpKTtcclxuICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMubXVsdGlwbGUgPyB0aGlzLml0ZW1zLm1hcChpID0+IGkuaWQpIDogYS5pZDtcclxuICAgICAgICAgICAgICB0aGlzLl9vbkNoYW5nZSAmJiB0aGlzLl9vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAvKiBubyB0b2FzdCAqL1xyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoXyA9PiBvZihmYWxzZSkpKTtcclxuICAgICAgICBvYnNlcnZhYmxlcy5wdXNoKG9ic2VydmFibGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3JrSm9pbihvYnNlcnZhYmxlcykuc3Vic2NyaWJlKGUgPT4ge1xyXG4gICAgICAvLyBmaWx0ZXIgbm9uIGZhbHNlXHJcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gZS5maWx0ZXIoZSA9PiBlKSBhcyBBdHRhY2htZW50W107XHJcbiAgICAgIC8vIGFueVxyXG4gICAgICBhdHRhY2htZW50cy5sZW5ndGggJiZcclxuICAgICAgICB0aGlzLl9zYi50b2FzdChcclxuICAgICAgICAgIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDEgP1xyXG4gICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdDaGVja2VkSW5OJywgYXR0YWNobWVudHMubGVuZ3RoKSA6XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0NoZWNrZWRJbicsIGF0dGFjaG1lbnRzWzBdLmZpbGVOYW1lKVxyXG4gICAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kcmFnRHJvcC5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5fcGVuZGluZy5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGJ1dHRvbiBtYXQtYnV0dG9uICpuZ0lmPVwiIWl0ZW1zLmxlbmd0aDsgZWxzZSBwcmV2aWV3XCIgKGNsaWNrKT1cIm9wZW4oKVwiPlxyXG4gIDxtYXQtaWNvbiBjbGFzcz1cImZpbGxlZFwiPnt7aWNvbn19PC9tYXQtaWNvbj5cclxuICA8c3BhbiBjbGFzcz1cIm1hdC1oM1wiPnt7cGxhY2Vob2xkZXJ9fTwvc3Bhbj5cclxuPC9idXR0b24+XHJcbjxpbnB1dCB0eXBlPVwiZmlsZVwiICNpbnB1dFxyXG4gICAgICAgW2FjY2VwdF09YWNjZXB0IFttdWx0aXBsZV09bXVsdGlwbGUgKGNoYW5nZSk9J19jaGFuZ2UoJGV2ZW50KScgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgLz5cclxuPG5nLXRlbXBsYXRlICNwcmV2aWV3PlxyXG4gIDxkaXYgKm5nRm9yPSdsZXQgYSBvZiBpdGVtcycgY2xhc3M9XCJhdHRhY2htZW50LWl0ZW1cIlxyXG4gICAgICAgW2NsYXNzLmRlbGV0ZWRdPVwiYS5kZWxldGVkXCIgW2NsYXNzLmZhaWxlZF09XCJhLmZhaWxlZFwiXHJcbiAgICAgICBbcHJvZ3Jlc3NJbmRpY2F0b3JdPVwiYS5wcm9ncmVzc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbGUtcHJldmlld1wiPlxyXG4gICAgICA8aW1nICpuZ0lmPVwiYS5pc0ltYWdlXCIgW3NyY109XCJhLnVybFwiIChjbGljayk9XCJhcHJldmlldyhhKVwiIGhlaWdodD1cIjgwXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiYS5oYXNQcmV2aWV3ICYmICFhLmlzSW1hZ2VcIiBbYml6ZG9jVG9vbHRpcF09XCInUHJldmlldyd8dHJhbnNsYXRlXCIgKGNsaWNrKT1cImFwcmV2aWV3KGEpXCIgW25nU3dpdGNoXT1cImEuaWNvbiAhPT0gdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgPG1hdC1pY29uICpuZ1N3aXRjaENhc2U9XCJ0cnVlXCIgW3N2Z0ljb25dPVwiYS5pY29uXCIgW2lubGluZV09XCJmYWxzZVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgPG1hdC1pY29uICpuZ1N3aXRjaERlZmF1bHQgY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+ZmluZF9pbl9wYWdlPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFhLmhhc1ByZXZpZXcgJiYgYS5pY29uXCIgW3N2Z0ljb25dPVwiYS5pY29uXCIgW2lubGluZV09XCJmYWxzZVwiPjwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWxlLW92ZXJsYXkgcm93XCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZW5hbWVcIj57e2EuZmlsZU5hbWV9fTwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cIm9wdGlvbnNcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIFtiaXpkb2NUb29sdGlwXT1cIidPcHRpb25zJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG1hdC1tZW51ICNtZW51PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWEuZmFpbGVkXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbkVkaXQoYSkgJiYgIWEuZmFpbGVkXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWEuY2hlY2tlZE91dFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoZWNrT3V0KGEpXCI+e3tcIkNoZWNrT3V0XCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nSWY9XCJtdWx0aXBsZVwiIChjbGljayk9XCJvcGVuKClcIj57e1wiQWRkXCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoZWNrSW4oYSlcIiAqbmdJZj1cImEuY2hlY2tlZE91dFwiPnt7XCJDaGVja0luXCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZG93bmxvYWQoYSlcIj57e1wiRG93bmxvYWRcIiB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0lmPVwiYS5oYXNQcmV2aWV3XCIgKGNsaWNrKT1cImFwcmV2aWV3KGEpXCI+PG1hdC1pY29uPmxhbmRzY2FwZTwvbWF0LWljb24+IHt7XCJQcmV2aWV3XCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNWZXJzaW9ucyhhKVwiPlxyXG4gICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IHYgb2YgZ2V0VmVyc2lvbnMoYSlcIiAoY2xpY2spPVwicHJldmlld09yRG93bmxvYWQodilcIj57e3YudGltZSB8ICBhbUNhbGVuZGFyfX08L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuRWRpdChhKVwiPlxyXG4gICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImRpc2NhcmQoYSlcIj57e1wiRGlzY2FyZFwiIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2FuY2VsKGEpXCIgKm5nSWY9XCJhLmZhaWxlZFwiPnt7XCJDYW5jZWxcIiB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|