@mediusinc/mng-commons 2.4.2 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/en.json +14 -0
- package/assets/i18n/sl.json +14 -0
- package/esm2020/index.mjs +2 -1
- package/esm2020/lib/api/utils/medius-rest.util.mjs +8 -1
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +1 -1
- package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +3 -2
- package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +3 -2
- package/esm2020/lib/components/form/editor/form-editor.component.mjs +4 -11
- package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +4 -3
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +7 -6
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +22 -8
- package/esm2020/lib/components/pages/error/error-page.component.mjs +21 -0
- package/esm2020/lib/components/pages/index.mjs +3 -0
- package/esm2020/lib/components/pages/not-found/not-found-page.component.mjs +21 -0
- package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +18 -10
- package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +8 -3
- package/esm2020/lib/components/tableview/table/table.component.mjs +14 -3
- package/esm2020/lib/components/tableview/tableview.component.mjs +36 -4
- package/esm2020/lib/descriptors/action/action-button.descriptor.mjs +2 -2
- package/esm2020/lib/descriptors/action/action.descriptor.mjs +55 -6
- package/esm2020/lib/descriptors/editor/editor.descriptor.mjs +3 -2
- package/esm2020/lib/descriptors/editor/field.descriptor.mjs +13 -1
- package/esm2020/lib/descriptors/filter/filter.descriptor.mjs +5 -4
- package/esm2020/lib/descriptors/table/column.descriptor.mjs +27 -3
- package/esm2020/lib/descriptors/tableview/tableview.descriptor.mjs +3 -2
- package/esm2020/lib/mng-commons.module.mjs +18 -5
- package/esm2020/lib/models/error-internal.model.mjs +27 -0
- package/esm2020/lib/models/index.mjs +2 -1
- package/esm2020/lib/router/route-builder.mjs +4 -3
- package/esm2020/lib/router/routes-builder.mjs +3 -2
- package/esm2020/lib/services/action-executor.service.mjs +4 -3
- package/esm2020/lib/services/configuration.service.mjs +9 -4
- package/esm2020/lib/styles/button-style.builder.mjs +10 -1
- package/esm2020/lib/utils/action-data-provider.util.mjs +7 -6
- package/esm2020/lib/utils/file.util.mjs +18 -0
- package/esm2020/lib/utils/index.mjs +2 -1
- package/esm2020/lib/utils/route.util.mjs +3 -2
- package/esm2020/lib/utils/tableview.util.mjs +3 -2
- package/esm2020/lib/utils/type.util.mjs +3 -2
- package/fesm2015/mediusinc-mng-commons.mjs +322 -75
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +313 -72
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/api/utils/medius-rest.util.d.ts +2 -0
- package/lib/components/form/editor/form-editor.component.d.ts +1 -3
- package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +4 -0
- package/lib/components/pages/error/error-page.component.d.ts +8 -0
- package/lib/components/pages/index.d.ts +2 -0
- package/lib/components/pages/not-found/not-found-page.component.d.ts +8 -0
- package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +1 -1
- package/lib/components/tableview/table/table.component.d.ts +3 -1
- package/lib/components/tableview/tableview.component.d.ts +4 -1
- package/lib/descriptors/action/action.descriptor.d.ts +2 -0
- package/lib/descriptors/editor/field.descriptor.d.ts +5 -0
- package/lib/descriptors/table/column.descriptor.d.ts +9 -1
- package/lib/mng-commons.module.d.ts +3 -1
- package/lib/models/error-internal.model.d.ts +29 -0
- package/lib/models/index.d.ts +1 -0
- package/lib/styles/button-style.builder.d.ts +1 -0
- package/lib/utils/file.util.d.ts +3 -0
- package/lib/utils/index.d.ts +1 -0
- package/package.json +1 -2
- package/scss/mng-overrides/_layout_styles.scss +4 -0
- package/scss/mng-overrides/_theme_dialog.scss +35 -0
|
@@ -2,6 +2,7 @@ import { of } from 'rxjs';
|
|
|
2
2
|
import { ModelDescriptor } from '../';
|
|
3
3
|
import { TableviewActionDefaultCategories } from '../../components/action/models';
|
|
4
4
|
import { DataProvider, EditorDataProvider } from '../../data-providers';
|
|
5
|
+
import { MngErrorInternal } from '../../models';
|
|
5
6
|
import { ButtonStyleBuilder } from '../../styles';
|
|
6
7
|
import { StyleLevelEnum, StyleSizeEnum } from '../../styles/models';
|
|
7
8
|
import { ActionDataProviderUtil, TypeUtil } from '../../utils';
|
|
@@ -27,7 +28,7 @@ export class ActionDescriptor {
|
|
|
27
28
|
this._model = model;
|
|
28
29
|
this._actionName = actionName;
|
|
29
30
|
if ((parentType && !parentProperty) || (!parentProperty && parentProperty)) {
|
|
30
|
-
throw new
|
|
31
|
+
throw new MngErrorInternal(`Provide both the parent type and parent property or none: ${parentType}, ${parentProperty}.`, 'ActionDescriptor error').consoleError();
|
|
31
32
|
}
|
|
32
33
|
this._parentType = parentType;
|
|
33
34
|
this._parentTypeName = parentType ? TypeUtil.findTypeName(parentType) : undefined;
|
|
@@ -76,7 +77,7 @@ export class ActionDescriptor {
|
|
|
76
77
|
}
|
|
77
78
|
get runFunction() {
|
|
78
79
|
if (!this._runFunction) {
|
|
79
|
-
throw new
|
|
80
|
+
throw new MngErrorInternal('Run function is not defined and cannot be invoked', 'ActionDescriptor error').consoleError();
|
|
80
81
|
}
|
|
81
82
|
return this._runFunction;
|
|
82
83
|
}
|
|
@@ -162,7 +163,7 @@ export class ActionDescriptor {
|
|
|
162
163
|
}
|
|
163
164
|
withServiceType(serviceType) {
|
|
164
165
|
if (!this._model) {
|
|
165
|
-
throw new
|
|
166
|
+
throw new MngErrorInternal(`Cannot set data provider if no model type is provided for action ${this._actionName}`, 'ActionDescriptor error').consoleError();
|
|
166
167
|
}
|
|
167
168
|
this._dataProvider = new DataProvider(this._model.type, serviceType);
|
|
168
169
|
return this;
|
|
@@ -272,6 +273,36 @@ export class ActionDescriptor {
|
|
|
272
273
|
this._subactions.push(...subactions);
|
|
273
274
|
return this;
|
|
274
275
|
}
|
|
276
|
+
copyTo(descriptor) {
|
|
277
|
+
descriptor._i18nModelActionBaseKey = this._i18nModelActionBaseKey;
|
|
278
|
+
descriptor._type = this._type;
|
|
279
|
+
descriptor._activationTrigger = this._activationTrigger;
|
|
280
|
+
descriptor._position = this._position;
|
|
281
|
+
descriptor._level = this._level;
|
|
282
|
+
descriptor._positionTableviewCategories = this._positionTableviewCategories;
|
|
283
|
+
descriptor._tableviewCategory = this._tableviewCategory;
|
|
284
|
+
descriptor._routeUrl = this._routeUrl;
|
|
285
|
+
descriptor._dataProvider = this._dataProvider;
|
|
286
|
+
descriptor._runFunction = this._runFunction;
|
|
287
|
+
descriptor._isVisibleFunction = this._isVisibleFunction;
|
|
288
|
+
descriptor._isEnabledFunction = this._isEnabledFunction;
|
|
289
|
+
descriptor._runConfirmationDialogDescriptor = this._runConfirmationDialogDescriptor;
|
|
290
|
+
descriptor._hasRunNotificationSuccess = this._hasRunNotificationSuccess;
|
|
291
|
+
descriptor._runNotificationSuccessTitle = this._runNotificationSuccessTitle;
|
|
292
|
+
descriptor._runNotificationSuccessMessage = this._runNotificationSuccessMessage;
|
|
293
|
+
descriptor._hasRunNotificationError = this._hasRunNotificationError;
|
|
294
|
+
descriptor._runNotificationErrorTitle = this._runNotificationErrorTitle;
|
|
295
|
+
descriptor._runNotificationErrorMessage = this._runNotificationErrorMessage;
|
|
296
|
+
descriptor._afterRunAction = this._afterRunAction;
|
|
297
|
+
descriptor._onRunErrorAction = this._onRunErrorAction;
|
|
298
|
+
descriptor._permissions = this._permissions;
|
|
299
|
+
descriptor._button = this._button.copy();
|
|
300
|
+
descriptor._hasItemsSelection = this._hasItemsSelection;
|
|
301
|
+
descriptor._component = this._component;
|
|
302
|
+
descriptor._subactionsAsMenu = this._subactionsAsMenu;
|
|
303
|
+
descriptor._subactions = this._subactions;
|
|
304
|
+
return descriptor;
|
|
305
|
+
}
|
|
275
306
|
}
|
|
276
307
|
export class ActionSimpleDescriptor extends ActionDescriptor {
|
|
277
308
|
constructor(actionName, modelType, idProperty, titleProperty, i18nBaseKey) {
|
|
@@ -320,7 +351,7 @@ export class ActionEditorDescriptor extends ActionDescriptor {
|
|
|
320
351
|
return this._dataProvider;
|
|
321
352
|
}
|
|
322
353
|
get runFunction() {
|
|
323
|
-
throw new
|
|
354
|
+
throw new MngErrorInternal('Run function cannot be used in editor action. Use submit function instead!', 'ActionDescriptor error').consoleError();
|
|
324
355
|
}
|
|
325
356
|
get fetchFunction() {
|
|
326
357
|
return this._fetchFunction;
|
|
@@ -345,7 +376,7 @@ export class ActionEditorDescriptor extends ActionDescriptor {
|
|
|
345
376
|
}
|
|
346
377
|
withServiceType(serviceType) {
|
|
347
378
|
if (!this._model) {
|
|
348
|
-
throw new
|
|
379
|
+
throw new MngErrorInternal(`Cannot set data provider if no model type is provided for action ${this._actionName}`, 'ActionDescriptor error').consoleError();
|
|
349
380
|
}
|
|
350
381
|
this._dataProvider = new EditorDataProvider(this._model.type, serviceType);
|
|
351
382
|
return this;
|
|
@@ -523,6 +554,24 @@ export class ActionLinkDescriptor extends ActionDescriptor {
|
|
|
523
554
|
this._target = '_self';
|
|
524
555
|
this._isStyleLink = false;
|
|
525
556
|
}
|
|
557
|
+
static fromActionDescriptor(actionDescriptor) {
|
|
558
|
+
const descriptor = new ActionLinkDescriptor(actionDescriptor.model, actionDescriptor.actionName);
|
|
559
|
+
actionDescriptor.copyTo(descriptor);
|
|
560
|
+
descriptor._dataProvider = undefined;
|
|
561
|
+
descriptor._runConfirmationDialogDescriptor = undefined;
|
|
562
|
+
descriptor._hasRunNotificationSuccess = false;
|
|
563
|
+
descriptor._runNotificationSuccessTitle = undefined;
|
|
564
|
+
descriptor._runNotificationSuccessMessage = undefined;
|
|
565
|
+
descriptor._hasRunNotificationError = false;
|
|
566
|
+
descriptor._runNotificationErrorTitle = undefined;
|
|
567
|
+
descriptor._runNotificationErrorMessage = undefined;
|
|
568
|
+
descriptor._afterRunAction = undefined;
|
|
569
|
+
descriptor._onRunErrorAction = undefined;
|
|
570
|
+
descriptor._hasItemsSelection = false;
|
|
571
|
+
descriptor._subactionsAsMenu = false;
|
|
572
|
+
descriptor._subactions = [];
|
|
573
|
+
return descriptor;
|
|
574
|
+
}
|
|
526
575
|
get url() {
|
|
527
576
|
return this._url;
|
|
528
577
|
}
|
|
@@ -570,4 +619,4 @@ export class ActionLinkDescriptor extends ActionDescriptor {
|
|
|
570
619
|
return this;
|
|
571
620
|
}
|
|
572
621
|
}
|
|
573
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2FjdGlvbi9hY3Rpb24uZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxLQUFLLENBQUM7QUFDcEMsT0FBTyxFQUEyRCxnQ0FBZ0MsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQXFDLE1BQU0sc0JBQXNCLENBQUM7QUFFMUcsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBQyxjQUFjLEVBQUUsYUFBYSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFbEUsT0FBTyxFQUFDLHNCQUFzQixFQUFFLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3RCxPQUFPLEVBQUMsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3JILE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRXBGLE1BQU0sT0FBTyxnQkFBZ0I7SUFxRHpCLFlBQVksS0FBZ0MsRUFBRSxVQUFrQixFQUFFLFVBQStCLEVBQUUsY0FBdUI7UUEzQ2hILFVBQUssR0FBbUIsY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUM5Qyx1QkFBa0IsR0FBZ0MsMkJBQTJCLENBQUMsT0FBTyxDQUFDO1FBQ3RGLGNBQVMsR0FBdUIsa0JBQWtCLENBQUMsWUFBWSxDQUFDO1FBQ2hFLFdBQU0sR0FBbUIsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUloRCxjQUFTLEdB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VUFBVSxHQUFHLEtBQUs7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxTQUE2QixPQUFPO1FBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxhQUFhLENBQUMsV0FBb0I7UUFDckMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UGFyYW1zLCBRdWVyeVBhcmFtc0hhbmRsaW5nfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtNb2RlbERlc2NyaXB0b3J9IGZyb20gJy4uLyc7XG5pbXBvcnQge0FjdGlvbkNvbnRleHQsIEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uLCBJQWN0aW9uQ29tcG9uZW50LCBUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllc30gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzJztcbmltcG9ydCB7RGF0YVByb3ZpZGVyLCBFZGl0b3JEYXRhUHJvdmlkZXIsIElEYXRhUHJvdmlkZXIsIElFZGl0b3JEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QVBlcm1pc3Npb25zfSBmcm9tICcuLi8uLi9zZWN1cml0eS9tb2RlbCc7XG5pbXBvcnQge0J1dHRvblN0eWxlQnVpbGRlcn0gZnJvbSAnLi4vLi4vc3R5bGVzJztcbmltcG9ydCB7U3R5bGVMZXZlbEVudW0sIFN0eWxlU2l6ZUVudW19IGZyb20gJy4uLy4uL3N0eWxlcy9tb2RlbHMnO1xuaW1wb3J0IHtDbGFzc1R5cGUsIElkVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLCBUeXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtFZGl0b3JEZXNjcmlwdG9yfSBmcm9tICcuLi9lZGl0b3InO1xuaW1wb3J0IHtBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0sIEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLCBBY3Rpb25Qb3NpdGlvbkVudW0sIEFjdGlvblR5cGVFbnVtfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0FjdGlvbkJ1dHRvbkRlc2NyaXB0b3J9IGZyb20gJy4vYWN0aW9uLWJ1dHRvbi5kZXNjcmlwdG9yJztcbmltcG9ydCB7QWN0aW9uQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvcn0gZnJvbSAnLi9hY3Rpb24tY29uZmlybWF0aW9uLmRlc2NyaXB0b3InO1xuXG5leHBvcnQgY2xhc3MgQWN0aW9uRGVzY3JpcHRvcjxUPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9tb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+IHwgbnVsbDtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2FjdGlvbk5hbWU6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2FjdGlvbk5hbWVMb25nOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9wYXJlbnRUeXBlPzogQ2xhc3NUeXBlPHVua25vd24+O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcGFyZW50VHlwZU5hbWU/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9wYXJlbnRQcm9wZXJ0eT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfaTE4bk1vZGVsQWN0aW9uQmFzZUtleT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfdHlwZTogQWN0aW9uVHlwZUVudW0gPSBBY3Rpb25UeXBlRW51bS5EaXJlY3Q7XG4gICAgcHJvdGVjdGVkIF9hY3RpdmF0aW9uVHJpZ2dlcjogQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtID0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uQ2xpY2s7XG4gICAgcHJvdGVjdGVkIF9wb3NpdGlvbjogQWN0aW9uUG9zaXRpb25FbnVtID0gQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodDtcbiAgICBwcm90ZWN0ZWQgX2xldmVsOiBTdHlsZUxldmVsRW51bSA9IFN0eWxlTGV2ZWxFbnVtLkRlZmF1bHQ7XG4gICAgcHJpdmF0ZSBfcG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzPzogc3RyaW5nW107XG4gICAgcHJvdGVjdGVkIF90YWJsZXZpZXdDYXRlZ29yeT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfcm91dGVVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJvdGVjdGVkIF9kYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIGFueT47XG4gICAgcHJvdGVjdGVkIF9ydW5GdW5jdGlvbj86IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgYW55PikgPT4gT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkIHwgbnVsbD47XG4gICAgcHJvdGVjdGVkIF9pc1Zpc2libGVGdW5jdGlvbj86IChjdHg6IEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPFQsIGFueT4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHJvdGVjdGVkIF9pc0VuYWJsZWRGdW5jdGlvbj86IChjdHg6IEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPFQsIGFueT4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICBwcm90ZWN0ZWQgX3J1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I/OiBBY3Rpb25Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yPFQ+O1xuXG4gICAgcHJvdGVjdGVkIF9oYXNSdW5Ob3RpZmljYXRpb25TdWNjZXNzID0gdHJ1ZTtcbiAgICBwcm90ZWN0ZWQgX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9oYXNSdW5Ob3RpZmljYXRpb25FcnJvciA9IHRydWU7XG4gICAgcHJvdGVjdGVkIF9ydW5Ob3RpZmljYXRpb25FcnJvclRpdGxlPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfcnVuTm90aWZpY2F0aW9uRXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9hZnRlclJ1bkFjdGlvbj86IEFjdGlvbkRlc2NyaXB0b3I8dW5rbm93bj47XG4gICAgcHJvdGVjdGVkIF9vblJ1bkVycm9yQWN0aW9uPzogQWN0aW9uRGVzY3JpcHRvcjxUPjtcblxuICAgIC8vIHNlY3VyaXR5XG4gICAgcHJvdGVjdGVkIF9wZXJtaXNzaW9ucz86IEFQZXJtaXNzaW9ucztcblxuICAgIC8vYnV0dG9uXG4gICAgcHJvdGVjdGVkIF9idXR0b24gPSBuZXcgQWN0aW9uQnV0dG9uRGVzY3JpcHRvcigpO1xuXG4gICAgLy8gbXVsdGlwbGUgcm93IHNlbGVjdGlvblxuICAgIHByb3RlY3RlZCBfaGFzSXRlbXNTZWxlY3Rpb24gPSBmYWxzZTtcblxuICAgIC8vIGN1c3RvbSBhY3Rpb24gY29tcG9uZW50XG4gICAgcHJvdGVjdGVkIF9jb21wb25lbnQ/OiBUeXBlPElBY3Rpb25Db21wb25lbnQ8VD4+O1xuXG4gICAgLy8gc3ViYWN0aW9uc1xuICAgIHByb3RlY3RlZCBfc3ViYWN0aW9uc0FzTWVudSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfc3ViYWN0aW9uczogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxUPj4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8VD4gfCBudWxsLCBhY3Rpb25OYW1lOiBzdHJpbmcsIHBhcmVudFR5cGU/OiBDbGFzc1R5cGU8dW5rbm93bj4sIHBhcmVudFByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuX2FjdGlvbk5hbWUgPSBhY3Rpb25OYW1lO1xuXG4gICAgICAgIGlmICgocGFyZW50VHlwZSAmJiAhcGFyZW50UHJvcGVydHkpIHx8ICghcGFyZW50UHJvcGVydHkgJiYgcGFyZW50UHJvcGVydHkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGUgYm90aCB0aGUgcGFyZW50IHR5cGUgYW5kIHBhcmVudCBwcm9wZXJ0eSBvciBub25lOiAke3BhcmVudFR5cGV9LCAke3BhcmVudFByb3BlcnR5fS5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wYXJlbnRUeXBlID0gcGFyZW50VHlwZTtcbiAgICAgICAgdGhpcy5fcGFyZW50VHlwZU5hbWUgPSBwYXJlbnRUeXBlID8gVHlwZVV0aWwuZmluZFR5cGVOYW1lKHBhcmVudFR5cGUpIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9wYXJlbnRQcm9wZXJ0eSA9IHBhcmVudFByb3BlcnR5O1xuXG4gICAgICAgIHRoaXMuc2V0STE4bk1vZGVsQWN0aW9uQmFzZUtleSgpO1xuXG4gICAgICAgIGxldCBkaXNwbGF5TmFtZSA9IGFjdGlvbk5hbWU7XG4gICAgICAgIGlmICh0aGlzLl9tb2RlbCkgZGlzcGxheU5hbWUgPSBgJHt0aGlzLl9tb2RlbC50eXBlTmFtZX0uJHtkaXNwbGF5TmFtZX1gO1xuICAgICAgICBpZiAodGhpcy5fcGFyZW50VHlwZU5hbWUpIHtcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lID0gYCR7dGhpcy5fcGFyZW50VHlwZU5hbWV9LiR7dGhpcy5fcGFyZW50UHJvcGVydHl9XyR7ZGlzcGxheU5hbWV9YDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hY3Rpb25OYW1lTG9uZyA9IGRpc3BsYXlOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudFR5cGVOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50VHlwZU5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnRQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudFByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaTE4bk1vZGVsQWN0aW9uQmFzZUtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2YXRpb25UcmlnZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZhdGlvblRyaWdnZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvdXRlVXJsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVVcmw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNSdW5GdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9ydW5GdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJ1bkZ1bmN0aW9uKCk6IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgYW55PikgPT4gT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkIHwgbnVsbD4ge1xuICAgICAgICBpZiAoIXRoaXMuX3J1bkZ1bmN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1J1biBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZCBhbmQgY2Fubm90IGJlIGludm9rZWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcnVuRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1Zpc2libGVGdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmlzaWJsZUZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNFbmFibGVkRnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0VuYWJsZWRGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGlvbk5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3Rpb25OYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aW9uTmFtZUxvbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3Rpb25OYW1lTG9uZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9uLnN0eWxlQ2xhc3MuY3VzdG9tQ2xhc3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1J1bkNvbmZpcm1hdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3IgIT09IG51bGwgJiYgdGhpcy5fcnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzUnVuTm90aWZpY2F0aW9uU3VjY2VzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzUnVuTm90aWZpY2F0aW9uRXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNSdW5Ob3RpZmljYXRpb25FcnJvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJ1bk5vdGlmaWNhdGlvbkVycm9yVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Ob3RpZmljYXRpb25FcnJvclRpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcnVuTm90aWZpY2F0aW9uRXJyb3JNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWZ0ZXJSdW5BY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZnRlclJ1bkFjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9uUnVuRXJyb3JBY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vblJ1bkVycm9yQWN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGVybWlzc2lvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wZXJtaXNzaW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxldmlld0NhdGVnb3J5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGV2aWV3Q2F0ZWdvcnk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNJdGVtc1NlbGVjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0l0ZW1zU2VsZWN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYnV0dG9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYnV0dG9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3ViYWN0aW9uc0FzTWVudSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1YmFjdGlvbnNBc01lbnU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdWJhY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ViYWN0aW9ucztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0STE4bk1vZGVsQWN0aW9uQmFzZUtleShiYXNlPzogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlTmFtZSB8fCB0aGlzLl9tb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5faTE4bk1vZGVsQWN0aW9uQmFzZUtleSA9IHRoaXMuX3BhcmVudFR5cGVOYW1lXG4gICAgICAgICAgICAgICAgPyBgJHt0aGlzLl9wYXJlbnRUeXBlTmFtZX0uYWN0aW9ucy4ke3RoaXMuX3BhcmVudFByb3BlcnR5fV8ke3RoaXMuX2FjdGlvbk5hbWV9YFxuICAgICAgICAgICAgICAgIDogYCR7YmFzZSA/PyB0aGlzLl9tb2RlbCEuaTE4bkJhc2VLZXl9LmFjdGlvbnMuJHt0aGlzLl9hY3Rpb25OYW1lfWA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXI6IElEYXRhUHJvdmlkZXI8VCwgYW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2VydmljZVR5cGU8Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tb2RlbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IGRhdGEgcHJvdmlkZXIgaWYgbm8gbW9kZWwgdHlwZSBpcyBwcm92aWRlZCBmb3IgYWN0aW9uICR7dGhpcy5fYWN0aW9uTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBuZXcgRGF0YVByb3ZpZGVyKHRoaXMuX21vZGVsLnR5cGUsIHNlcnZpY2VUeXBlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5GdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uQ29udGV4dDxULCBTPikgPT4gT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkIHwgbnVsbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcnVuRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJc1Zpc2libGVGdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uQ29udGV4dFZhbGlkYXRpb248VCwgUz4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNWaXNpYmxlRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJc0VuYWJsZWRGdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uQ29udGV4dFZhbGlkYXRpb248VCwgUz4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNFbmFibGVkRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3V0ZVRyaWdnZXIocm91dGVVcmw6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9hY3RpdmF0aW9uVHJpZ2dlciA9IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlO1xuICAgICAgICB0aGlzLl9yb3V0ZVVybCA9IHJvdXRlVXJsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBvc2l0aW9uKHBvc2l0aW9uOiBBY3Rpb25Qb3NpdGlvbkVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBjb25maXJtYXRpb24gYWN0aW9uIHdpdGggZGVmYXVsdCBzdHlsZSBiYXNlZCBvbiBhY3Rpb24gZGVzY3JpcHRvclxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoUnVuQ29uZmlybWF0aW9uKCk6IEFjdGlvbkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I8VD4ge1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yID0gbmV3IEFjdGlvbkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I8VD4oKTtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uc3R5bGVDbGFzcy53aXRoQWN0aW9uTGV2ZWwodGhpcy5fbGV2ZWwpO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yLnJlamVjdEJ1dHRvbj8uc3R5bGVDbGFzcy53aXRoQWN0aW9uTGV2ZWwodGhpcy5fbGV2ZWwpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIGNvbmZpZ3VyYXRpb24gZGlhbG9ndWUgdG8gYWN0aW9uIHVzaW5nIEFjdGlvbkNvbmZpZ3VyYXRpb25EZXNjcmlwdG9yXG4gICAgICogQHBhcmFtIHJ1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3IgZGVzY3JpcHRvciB3aXRoIGN1c3RvbWl6YWJsZSBpbmZvcm1hdGlvbiBmb3IgZGlhbG9nXG4gICAgICovXG4gICAgcHVibGljIHdpdGhSdW5Db25maXJtYXRpb25EZXNjcmlwdG9yKHJ1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I6IEFjdGlvbkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I8VD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvciA9IHJ1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUnVuTm90aWZpY2F0aW9uU3VjY2Vzcyh0aXRsZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZywgaGFzTm90aWZpY2F0aW9uID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNSdW5Ob3RpZmljYXRpb25TdWNjZXNzID0gaGFzTm90aWZpY2F0aW9uO1xuICAgICAgICB0aGlzLl9ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgdGhpcy5fcnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJ1bk5vdGlmaWNhdGlvbkVycm9yKHRpdGxlPzogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nLCBoYXNOb3RpZmljYXRpb24gPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc1J1bk5vdGlmaWNhdGlvbkVycm9yID0gaGFzTm90aWZpY2F0aW9uO1xuICAgICAgICB0aGlzLl9ydW5Ob3RpZmljYXRpb25FcnJvclRpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuX3J1bk5vdGlmaWNhdGlvbkVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWZ0ZXJSdW5BY3Rpb248UlQ+KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxSVD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJSdW5BY3Rpb24gPSBhY3Rpb24gYXMgQWN0aW9uRGVzY3JpcHRvcjx1bmtub3duPjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhPblJ1bkVycm9yQWN0aW9uKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9vblJ1bkVycm9yQWN0aW9uID0gYWN0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBlcm1pc3Npb25zKHBlcm1pc3Npb25zOiBBUGVybWlzc2lvbnMpOiB0aGlzIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhYmxldmlld0NhdGVnb3J5KSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFBlcm1pc3Npb25zIHNldCBvbiBhY3Rpb24gJHt0aGlzLl9hY3Rpb25OYW1lTG9uZ30gd2l0aCByb3V0ZSB0eXBlICcke3RoaXMuX3RhYmxldmlld0NhdGVnb3J5fScgd2lsbCBiZSBvbWl0dGVkIGluIHJvdXRlIGd1YXJkIHZhbGlkYXRpb24uYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUYWJsZXZpZXdDYXRlZ29yeShwZXJtaXNzaW9uc1JvdXRlVHlwZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxldmlld0NhdGVnb3J5ID0gcGVybWlzc2lvbnNSb3V0ZVR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQnV0dG9uRGVzY3JpcHRvcihidXR0b246IEFjdGlvbkJ1dHRvbkRlc2NyaXB0b3IpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYnV0dG9uID0gYnV0dG9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEJ1dHRvbihsYWJlbD86IHN0cmluZyB8IG51bGwsIGljb246IHN0cmluZyB8IG51bGwgPSBudWxsLCBzdHlsZUxldmVsID0gU3R5bGVMZXZlbEVudW0uRGVmYXVsdCwgc3R5bGVUZXh0ID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYnV0dG9uID0gbmV3IEFjdGlvbkJ1dHRvbkRlc2NyaXB0b3IoKS53aXRoTGFiZWwobGFiZWwpLndpdGhJY29uKGljb24pLndpdGhTdHlsZUNsYXNzKG5ldyBCdXR0b25TdHlsZUJ1aWxkZXIoc3R5bGVMZXZlbCkud2l0aFRleHRCdXR0b24oc3R5bGVUZXh0KSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXRlbXNTZWxlY3Rpb24oaGFzU2VsZWN0aW9uID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNJdGVtc1NlbGVjdGlvbiA9IGhhc1NlbGVjdGlvbjtcbiAgICAgICAgdGhpcy5faXNFbmFibGVkRnVuY3Rpb24gPSB0aGlzLl9pc0VuYWJsZWRGdW5jdGlvbiA/PyAoY3R4ID0+IG9mKChjdHgucGFyYW1ldGVycy5zZWxlY3RlZEl0ZW1zPy5sZW5ndGggPz8gMCkgPiAwKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ29tcG9uZW50KGNvbXBvbmVudDogVHlwZTxJQWN0aW9uQ29tcG9uZW50PFQ+Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzKHBvc2l0aW9uVGFibGV2aWV3Q2F0ZWdvcmllczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzID0gcG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEkxOG5CYXNlKGJhc2U6IENsYXNzVHlwZTx1bmtub3duPiB8IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBpZiAodHlwZW9mIGJhc2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBiYXNlID0gVHlwZVV0aWwuZmluZFR5cGVOYW1lKGJhc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0STE4bk1vZGVsQWN0aW9uQmFzZUtleShiYXNlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTdWJhY3Rpb25zQXNNZW51KCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zdWJhY3Rpb25zQXNNZW51ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTdWJhY3Rpb25zKC4uLnN1YmFjdGlvbnM6IEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8VD4+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3N1YmFjdGlvbnMucHVzaCguLi5zdWJhY3Rpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uU2ltcGxlRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgIGNvbnN0cnVjdG9yKGFjdGlvbk5hbWU6IHN0cmluZywgbW9kZWxUeXBlPzogQ2xhc3NUeXBlPFQ+LCBpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nLCBpMThuQmFzZUtleT86IHN0cmluZyB8IENsYXNzVHlwZTx1bmtub3duPikge1xuICAgICAgICBjb25zdCBtb2RlbCA9IG1vZGVsVHlwZSA/IG5ldyBNb2RlbERlc2NyaXB0b3I8VD4obW9kZWxUeXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBpMThuQmFzZUtleSkgOiBudWxsO1xuICAgICAgICBzdXBlcihtb2RlbCwgYWN0aW9uTmFtZSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRvckRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8VD47XG5cbiAgICBwcm90ZWN0ZWQgX2VkaXRvckFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHByb3RlY3RlZCBfZWRpdG9yVGl0bGU/OiBzdHJpbmcgfCBudWxsID0gdW5kZWZpbmVkO1xuICAgIHByb3RlY3RlZCBfZWRpdG9yVGl0bGVQYXJhbXM/OiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgICBwcm90ZWN0ZWQgX2hhc0ZldGNoTm90aWZpY2F0aW9uU3VjY2VzcyA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzVGl0bGU/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9mZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9kaWFsb2dTaXplID0gU3R5bGVTaXplRW51bS5Ob3JtYWw7XG4gICAgcHJvdGVjdGVkIF9kaWFsb2dDbGFzc05hbWU/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2RhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55PiA9IHVuZGVmaW5lZDtcbiAgICBwcm90ZWN0ZWQgX2ZldGNoRnVuY3Rpb24/OiAoY3R4OiBBY3Rpb25Db250ZXh0PFQsIGFueT4pID0+IE9ic2VydmFibGU8VD47XG4gICAgcHJvdGVjdGVkIF9zdWJtaXRGdW5jdGlvbj86IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgYW55PikgPT4gT2JzZXJ2YWJsZTxUPjtcblxuICAgIHByb3RlY3RlZCBfZWRpdG9yQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPiwgYWN0aW9uTmFtZTogc3RyaW5nLCBwYXJlbnRUeXBlPzogQ2xhc3NUeXBlPHVua25vd24+LCBwYXJlbnRQcm9wZXJ0eT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLm1vZGVsLCBhY3Rpb25OYW1lLCBwYXJlbnRUeXBlLCBwYXJlbnRQcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX3R5cGUgPSBBY3Rpb25UeXBlRW51bS5FZGl0b3I7XG4gICAgICAgIHRoaXMuX2VkaXRvckRlc2NyaXB0b3IgPSBlZGl0b3JEZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9lZGl0b3JBY3Rpb25zLnB1c2goQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvci5mb3JQcmltYXJ5KHRoaXMpLCBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yLmZvclNlY29uZGFyeSh0aGlzKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3JUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRvclRpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yVGl0bGVQYXJhbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JUaXRsZVBhcmFtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckRlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlhbG9nU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RpYWxvZ1NpemU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaWFsb2dDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaWFsb2dDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBkYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBydW5GdW5jdGlvbigpOiAoY3R4OiBBY3Rpb25Db250ZXh0PFQsIHVua25vd24+KSA9PiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW4gZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgaW4gZWRpdG9yIGFjdGlvbi4gVXNlIHN1Ym1pdCBmdW5jdGlvbiBpbnN0ZWFkIScpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmV0Y2hGdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdWJtaXRGdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yQWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRvckFjdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3JDb21wb25lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0b3JUaXRsZSh0aXRsZTogc3RyaW5nIHwgbnVsbCwgcGFyYW1zPzogYW55KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2VkaXRvclRpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuX2VkaXRvclRpdGxlUGFyYW1zID0gcGFyYW1zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXI6IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoU2VydmljZVR5cGU8Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tb2RlbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IGRhdGEgcHJvdmlkZXIgaWYgbm8gbW9kZWwgdHlwZSBpcyBwcm92aWRlZCBmb3IgYWN0aW9uICR7dGhpcy5fYWN0aW9uTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBuZXcgRWRpdG9yRGF0YVByb3ZpZGVyKHRoaXMuX21vZGVsLnR5cGUsIHNlcnZpY2VUeXBlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEaWFsb2dTaXplKHNpemUgPSBTdHlsZVNpemVFbnVtLk5vcm1hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kaWFsb2dTaXplID0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEaWFsb2dDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlhbG9nQ2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFJ1bkZ1bmN0aW9uPFM+KGZuOiAoY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTdWJtaXRGdW5jdGlvbihmbiBhcyAoY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KSA9PiBPYnNlcnZhYmxlPFQ+KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZldGNoRnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgUz4pID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmV0Y2hGdW5jdGlvbiA9IGZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFN1Ym1pdEZ1bmN0aW9uPFM+KGZuOiAoY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3N1Ym1pdEZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmV0Y2hOb3RpZmljYXRpb25FcnJvcih0aXRsZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZywgaGFzTm90aWZpY2F0aW9uID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MgPSBoYXNOb3RpZmljYXRpb247XG4gICAgICAgIHRoaXMuX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEVkaXRvckFjdGlvbihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZWRpdG9yQWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRWRpdG9yQWN0aW9ucyhhY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9yPFQ+W10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZWRpdG9yQWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRWRpdG9yQ29tcG9uZW50KGVkaXRvckNvbXBvbmVudDogVHlwZTxhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2VkaXRvckNvbXBvbmVudCA9IGVkaXRvckNvbXBvbmVudDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRvckFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zdWJtaXRUeXBlOiBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bTtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvckFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiwgc3VibWl0VHlwZSA9IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCkge1xuICAgICAgICBzdXBlcihlZGl0b3JBY3Rpb24ubW9kZWwsIHN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCA/IGAke2VkaXRvckFjdGlvbi5hY3Rpb25OYW1lfS5zdWJtaXRgIDogYCR7ZWRpdG9yQWN0aW9uLmFjdGlvbk5hbWV9LmNhbmNlbGApO1xuICAgICAgICB0aGlzLl9lZGl0b3JBY3Rpb24gPSBlZGl0b3JBY3Rpb247XG4gICAgICAgIHRoaXMuX3N1Ym1pdFR5cGUgPSBzdWJtaXRUeXBlO1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJSaWdodDtcblxuICAgICAgICB0aGlzLmJ1dHRvbi5zdHlsZUNsYXNzLndpdGhBY3Rpb25MZXZlbChlZGl0b3JBY3Rpb24ubGV2ZWwpLndpdGhUZXh0QnV0dG9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBwcmltYXJ5IGFjdGlvbiB3aXRoIHByaW1hcnkgYnV0dG9uIHN0eWxlXG4gICAgICogQHBhcmFtIGVkaXRvckFjdGlvblxuICAgICAqIEBwYXJhbSBzdWJtaXRUeXBlXG4gICAgICovXG4gICAgc3RhdGljIGZvclByaW1hcnk8VD4oZWRpdG9yQWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LCBzdWJtaXRUeXBlID0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0KTogQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcihlZGl0b3JBY3Rpb24sIHN1Ym1pdFR5cGUpLndpdGhCdXR0b25EZXNjcmlwdG9yKG5ldyBBY3Rpb25CdXR0b25EZXNjcmlwdG9yKCkud2l0aFN0eWxlQ2xhc3MobmV3IEJ1dHRvblN0eWxlQnVpbGRlcigpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBzZWNvbmRhcnkgYnV0dG9uIHdpdGggdGV4dCBidXR0b24gc3R5bGVcbiAgICAgKiBAcGFyYW0gZWRpdG9yQWN0aW9uXG4gICAgICogQHBhcmFtIHN1Ym1pdFR5cGVcbiAgICAgKi9cbiAgICBzdGF0aWMgZm9yU2Vjb25kYXJ5PFQ+KGVkaXRvckFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiwgc3VibWl0VHlwZSA9IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLkNhbmNlbCk6IEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3I8VD4ge1xuICAgICAgICByZXR1cm4gbmV3IEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IoZWRpdG9yQWN0aW9uLCBzdWJtaXRUeXBlKS53aXRoQnV0dG9uRGVzY3JpcHRvcihcbiAgICAgICAgICAgIG5ldyBBY3Rpb25CdXR0b25EZXNjcmlwdG9yKCkud2l0aFN0eWxlQ2xhc3MobmV3IEJ1dHRvblN0eWxlQnVpbGRlcigpLndpdGhUZXh0QnV0dG9uKCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdWJtaXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3VibWl0VHlwZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25FZGl0b3JEZXRhaWxzRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4ge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUNUSU9OX05BTUUgPSAnZGV0YWlscyc7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JEZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvckRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckRldGFpbHNEZXNjcmlwdG9yLkFDVElPTl9OQU1FKTtcbiAgICAgICAgdGhpcy53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlJvd0NsaWNrKTtcbiAgICAgICAgdGhpcy53aXRoUm91dGVUcmlnZ2VyKCc6aXRlbUlkJyk7XG4gICAgICAgIHRoaXMud2l0aEZldGNoRnVuY3Rpb24oQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5GZXRjaE9yRmFpbCk7XG5cbiAgICAgICAgdGhpcy53aXRoRWRpdG9yQWN0aW9ucyhbbmV3IEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IodGhpcywgQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uQ2FuY2VsKV0pO1xuICAgICAgICB0aGlzLndpdGhUYWJsZXZpZXdDYXRlZ29yeShUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERVRBSUxTKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFNlcnZpY2VUeXBlPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTZXJ2aWNlRmV0Y2hGdW5jdGlvbihzZXJ2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXJ2aWNlRmV0Y2hGdW5jdGlvbjxTPihzZXJ2aWNlVHlwZTogVHlwZTxTPiwgZmV0Y2hGbj86IChpZDogSWRUeXBlLCBzZXJ2aWNlPzogUykgPT4gT2JzZXJ2YWJsZTxUPik6IHRoaXMge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgRWRpdG9yRGF0YVByb3ZpZGVyKHRoaXMuX21vZGVsIS50eXBlLCBzZXJ2aWNlVHlwZSk7XG4gICAgICAgIGlmIChmZXRjaEZuKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aEZldGNoKGZldGNoRm4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4ge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUNUSU9OX05BTUUgPSAnYWRkJztcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvckRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvci5BQ1RJT05fTkFNRSk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCk7XG4gICAgICAgIHRoaXMud2l0aFJvdXRlVHJpZ2dlcignYWRkJyk7XG4gICAgICAgIHRoaXMud2l0aFN1Ym1pdEZ1bmN0aW9uKEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuQ3JlYXRlT3JGYWlsKTtcblxuICAgICAgICB0aGlzLmJ1dHRvbi53aXRoSWNvbigncGkgcGktcGx1cycpO1xuICAgICAgICB0aGlzLndpdGhUYWJsZXZpZXdDYXRlZ29yeShUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5BREQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoU2VydmljZVR5cGU8Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNlcnZpY2VTdWJtaXRGdW5jdGlvbihzZXJ2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXJ2aWNlU3VibWl0RnVuY3Rpb248Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4sIGNyZWF0ZUZuPzogKGl0ZW0/OiBULCBzZXJ2aWNlPzogUykgPT4gT2JzZXJ2YWJsZTxUPiwgZmV0Y2hGbj86IChpZDogSWRUeXBlLCBzZXJ2aWNlPzogUykgPT4gT2JzZXJ2YWJsZTxUPik6IHRoaXMge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgRWRpdG9yRGF0YVByb3ZpZGVyKHRoaXMuX21vZGVsIS50eXBlLCBzZXJ2aWNlVHlwZSk7XG4gICAgICAgIGlmIChjcmVhdGVGbikge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhDcmVhdGUoY3JlYXRlRm4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmZXRjaEZuKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aEZldGNoKGZldGNoRm4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFDVElPTl9OQU1FID0gJ2VkaXQnO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JFZGl0RGVzY3JpcHRvci5BQ1RJT05fTkFNRSk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Sb3dJbmxpbmUpO1xuICAgICAgICB0aGlzLmJ1dHRvbi5zdHlsZUNsYXNzLndpdGhTaXplKFN0eWxlU2l6ZUVudW0uU21hbGwpO1xuICAgICAgICB0aGlzLndpdGhSb3V0ZVRyaWdnZXIoJzppdGVtSWQvZWRpdCcpO1xuICAgICAgICB0aGlzLndpdGhGZXRjaEZ1bmN0aW9uKEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuRmV0Y2hPckZhaWwpO1xuICAgICAgICB0aGlzLndpdGhTdWJtaXRGdW5jdGlvbihBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1blVwZGF0ZU9yRmFpbCk7XG4gICAgICAgIHRoaXMud2l0aFRhYmxldmlld0NhdGVnb3J5KFRhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkVESVQpO1xuICAgICAgICB0aGlzLmJ1dHRvbi53aXRoTGFiZWwobnVsbCkud2l0aEljb24oJ3BpIHBpLXBlbmNpbCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoU2VydmljZVR5cGU8Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNlcnZpY2VTdWJtaXRGdW5jdGlvbihzZXJ2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXJ2aWNlU3VibWl0RnVuY3Rpb248Uz4oXG4gICAgICAgIHNlcnZpY2VUeXBlOiBUeXBlPFM+LFxuICAgICAgICB1cGRhdGVGbj86IChpZDogSWRUeXBlLCBpdGVtPzogVCwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8VD4sXG4gICAgICAgIGZldGNoRm4/OiAoaWQ6IElkVHlwZSwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8VD5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IEVkaXRvckRhdGFQcm92aWRlcih0aGlzLl9tb2RlbCEudHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICBpZiAodXBkYXRlRm4pIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoVXBkYXRlKHVwZGF0ZUZuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmV0Y2hGbikge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhGZXRjaChmZXRjaEZuKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkRlbGV0ZURlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFDVElPTl9OQU1FID0gJ2RlbGV0ZSc7XG5cbiAgICBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKG1vZGVsLCBBY3Rpb25EZWxldGVEZXNjcmlwdG9yLkFDVElPTl9OQU1FKTtcbiAgICAgICAgdGhpcy53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlJvd0lubGluZSk7XG4gICAgICAgIHRoaXMuYnV0dG9uLnN0eWxlQ2xhc3Mud2l0aFNpemUoU3R5bGVTaXplRW51bS5TbWFsbCk7XG4gICAgICAgIHRoaXMud2l0aFJ1bkZ1bmN0aW9uKEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuRGVsZXRlT3JGYWlsKTtcbiAgICAgICAgdGhpcy5idXR0b24uc3R5bGVDbGFzcy53aXRoQWN0aW9uTGV2ZWwoU3R5bGVMZXZlbEVudW0uRGFuZ2VyKTtcbiAgICAgICAgdGhpcy53aXRoUnVuQ29uZmlybWF0aW9uKCk7XG4gICAgICAgIHRoaXMud2l0aFRhYmxldmlld0NhdGVnb3J5KFRhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkRFTEVURSk7XG4gICAgICAgIHRoaXMuYnV0dG9uLndpdGhMYWJlbChudWxsKS53aXRoSWNvbigncGkgcGktdHJhc2gnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFNlcnZpY2VUeXBlPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTZXJ2aWNlRGVsZXRlRnVuY3Rpb24oc2VydmljZVR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2VydmljZURlbGV0ZUZ1bmN0aW9uPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+LCBkZWxldGVGbj86IChpZDogSWRUeXBlLCBpdGVtPzogVCwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IEVkaXRvckRhdGFQcm92aWRlcih0aGlzLl9tb2RlbCEudHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICBpZiAoZGVsZXRlRm4pIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoRGVsZXRlKGRlbGV0ZUZuKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkxpbmtEZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRGVzY3JpcHRvcjxUPiB7XG4gICAgcHJpdmF0ZSBfdXJsID0gJyc7XG4gICAgcHJpdmF0ZSBfcGF0aFNlZ21lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX3F1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIHByaXZhdGUgX3F1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nO1xuICAgIHByaXZhdGUgX3JlcGxhY2VVcmwgPSBmYWxzZTtcbiAgICBwcml2YXRlIF90YXJnZXQgPSAnX3NlbGYnO1xuICAgIHByaXZhdGUgX2lzU3R5bGVMaW5rID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+IHwgbnVsbCA9IG51bGwsIGFjdGlvbk5hbWUgPSAnbGluaycpIHtcbiAgICAgICAgc3VwZXIobW9kZWwsIGFjdGlvbk5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl91cmw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXRoU2VnbWVudHMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGF0aFNlZ21lbnRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcXVlcnlQYXJhbXMoKTogUGFyYW1zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcXVlcnlQYXJhbXNIYW5kbGluZygpOiBRdWVyeVBhcmFtc0hhbmRsaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1zSGFuZGxpbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXBsYWNlVXJsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVwbGFjZVVybDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhcmdldCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTdHlsZUxpbmsoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1N0eWxlTGluaztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEhyZWYodXJsOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdXJsID0gdXJsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvdXRlckxpbmsoLi4ucGF0aFNlZ21lbnRzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wYXRoU2VnbWVudHMgPSBwYXRoU2VnbWVudHM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IFBhcmFtcywgcXVlcnlQYXJhbXNIYW5kbGluZz86IFF1ZXJ5UGFyYW1zSGFuZGxpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcXVlcnlQYXJhbXMgPSBxdWVyeVBhcmFtcztcbiAgICAgICAgdGhpcy5fcXVlcnlQYXJhbXNIYW5kbGluZyA9IHF1ZXJ5UGFyYW1zSGFuZGxpbmc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmVwbGFjZVVybChyZXBsYWNlVXJsID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcmVwbGFjZVVybCA9IHJlcGxhY2VVcmw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGFyZ2V0KHRhcmdldDogJ19zZWxmJyB8ICdfYmxhbmsnID0gJ19zZWxmJyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU3R5bGVMaW5rKGlzU3R5bGVMaW5rOiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzU3R5bGVMaW5rID0gaXNTdHlsZUxpbms7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiJdfQ==
|
|
622
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2FjdGlvbi9hY3Rpb24uZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxLQUFLLENBQUM7QUFDcEMsT0FBTyxFQUEyRCxnQ0FBZ0MsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQXFDLE1BQU0sc0JBQXNCLENBQUM7QUFDMUcsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRTlDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEVBQUMsY0FBYyxFQUFFLGFBQWEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRWxFLE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0QsT0FBTyxFQUFDLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNySCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRixNQUFNLE9BQU8sZ0JBQWdCO0lBcUR6QixZQUFZLEtBQWdDLEVBQUUsVUFBa0IsRUFBRSxVQUErQixFQUFFLGNBQXVCO1FBM0NoSCxVQUFLLEdBQW1CLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDOUMsdUJBQWtCLEdBQWdDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQztRQUN0RixjQUFTLEdBQXVCLGtCQUFrQixDQUFDLFlBQVksQ0FBQztRQUNoRSxX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SUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFTSxRQUFRLENBQUMsR0FBVztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNoQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sY0FBYyxDQUFDLEdBQUcsWUFBc0I7UUFDM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxXQUFtQixFQUFFLG1CQUF5QztRQUNqRixJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztRQUNoQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxVQUFVLEdBQUcsS0FBSztRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sVUFBVSxDQUFDLFNBQTZCLE9BQU87UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGFBQWEsQ0FBQyxXQUFvQjtRQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQYXJhbXMsIFF1ZXJ5UGFyYW1zSGFuZGxpbmd9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge01vZGVsRGVzY3JpcHRvcn0gZnJvbSAnLi4vJztcbmltcG9ydCB7QWN0aW9uQ29udGV4dCwgQWN0aW9uQ29udGV4dFZhbGlkYXRpb24sIElBY3Rpb25Db21wb25lbnQsIFRhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtEYXRhUHJvdmlkZXIsIEVkaXRvckRhdGFQcm92aWRlciwgSURhdGFQcm92aWRlciwgSUVkaXRvckRhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtNbmdFcnJvckludGVybmFsfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtBUGVybWlzc2lvbnN9IGZyb20gJy4uLy4uL3NlY3VyaXR5L21vZGVsJztcbmltcG9ydCB7QnV0dG9uU3R5bGVCdWlsZGVyfSBmcm9tICcuLi8uLi9zdHlsZXMnO1xuaW1wb3J0IHtTdHlsZUxldmVsRW51bSwgU3R5bGVTaXplRW51bX0gZnJvbSAnLi4vLi4vc3R5bGVzL21vZGVscyc7XG5pbXBvcnQge0NsYXNzVHlwZSwgSWRUeXBlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge0FjdGlvbkRhdGFQcm92aWRlclV0aWwsIFR5cGVVdGlsfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge0VkaXRvckRlc2NyaXB0b3J9IGZyb20gJy4uL2VkaXRvcic7XG5pbXBvcnQge0FjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSwgQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0sIEFjdGlvblBvc2l0aW9uRW51bSwgQWN0aW9uVHlwZUVudW19IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7QWN0aW9uQnV0dG9uRGVzY3JpcHRvcn0gZnJvbSAnLi9hY3Rpb24tYnV0dG9uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtBY3Rpb25Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yfSBmcm9tICcuL2FjdGlvbi1jb25maXJtYXRpb24uZGVzY3JpcHRvcic7XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX21vZGVsOiBNb2RlbERlc2NyaXB0b3I8VD4gfCBudWxsO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfYWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfYWN0aW9uTmFtZUxvbmc6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3BhcmVudFR5cGU/OiBDbGFzc1R5cGU8dW5rbm93bj47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9wYXJlbnRUeXBlTmFtZT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3BhcmVudFByb3BlcnR5Pzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9pMThuTW9kZWxBY3Rpb25CYXNlS2V5Pzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF90eXBlOiBBY3Rpb25UeXBlRW51bSA9IEFjdGlvblR5cGVFbnVtLkRpcmVjdDtcbiAgICBwcm90ZWN0ZWQgX2FjdGl2YXRpb25UcmlnZ2VyOiBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0gPSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25DbGljaztcbiAgICBwcm90ZWN0ZWQgX3Bvc2l0aW9uOiBBY3Rpb25Qb3NpdGlvbkVudW0gPSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0O1xuICAgIHByb3RlY3RlZCBfbGV2ZWw6IFN0eWxlTGV2ZWxFbnVtID0gU3R5bGVMZXZlbEVudW0uRGVmYXVsdDtcbiAgICBwcml2YXRlIF9wb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXM/OiBzdHJpbmdbXTtcbiAgICBwcm90ZWN0ZWQgX3RhYmxldmlld0NhdGVnb3J5Pzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9yb3V0ZVVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcm90ZWN0ZWQgX2RhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgYW55PjtcbiAgICBwcm90ZWN0ZWQgX3J1bkZ1bmN0aW9uPzogKGN0eDogQWN0aW9uQ29udGV4dDxULCBhbnk+KSA9PiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQgfCBudWxsPjtcbiAgICBwcm90ZWN0ZWQgX2lzVmlzaWJsZUZ1bmN0aW9uPzogKGN0eDogQWN0aW9uQ29udGV4dFZhbGlkYXRpb248VCwgYW55PikgPT4gT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2lzRW5hYmxlZEZ1bmN0aW9uPzogKGN0eDogQWN0aW9uQ29udGV4dFZhbGlkYXRpb248VCwgYW55PikgPT4gT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIHByb3RlY3RlZCBfcnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvcj86IEFjdGlvbkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I8VD47XG5cbiAgICBwcm90ZWN0ZWQgX2hhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MgPSB0cnVlO1xuICAgIHByb3RlY3RlZCBfcnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfcnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX2hhc1J1bk5vdGlmaWNhdGlvbkVycm9yID0gdHJ1ZTtcbiAgICBwcm90ZWN0ZWQgX3J1bk5vdGlmaWNhdGlvbkVycm9yVGl0bGU/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9ydW5Ob3RpZmljYXRpb25FcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX2FmdGVyUnVuQWN0aW9uPzogQWN0aW9uRGVzY3JpcHRvcjx1bmtub3duPjtcbiAgICBwcm90ZWN0ZWQgX29uUnVuRXJyb3JBY3Rpb24/OiBBY3Rpb25EZXNjcmlwdG9yPFQ+O1xuXG4gICAgLy8gc2VjdXJpdHlcbiAgICBwcm90ZWN0ZWQgX3Blcm1pc3Npb25zPzogQVBlcm1pc3Npb25zO1xuXG4gICAgLy9idXR0b25cbiAgICBwcm90ZWN0ZWQgX2J1dHRvbiA9IG5ldyBBY3Rpb25CdXR0b25EZXNjcmlwdG9yKCk7XG5cbiAgICAvLyBtdWx0aXBsZSByb3cgc2VsZWN0aW9uXG4gICAgcHJvdGVjdGVkIF9oYXNJdGVtc1NlbGVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLy8gY3VzdG9tIGFjdGlvbiBjb21wb25lbnRcbiAgICBwcm90ZWN0ZWQgX2NvbXBvbmVudD86IFR5cGU8SUFjdGlvbkNvbXBvbmVudDxUPj47XG5cbiAgICAvLyBzdWJhY3Rpb25zXG4gICAgcHJvdGVjdGVkIF9zdWJhY3Rpb25zQXNNZW51ID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9zdWJhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PiA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPiB8IG51bGwsIGFjdGlvbk5hbWU6IHN0cmluZywgcGFyZW50VHlwZT86IENsYXNzVHlwZTx1bmtub3duPiwgcGFyZW50UHJvcGVydHk/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5fYWN0aW9uTmFtZSA9IGFjdGlvbk5hbWU7XG5cbiAgICAgICAgaWYgKChwYXJlbnRUeXBlICYmICFwYXJlbnRQcm9wZXJ0eSkgfHwgKCFwYXJlbnRQcm9wZXJ0eSAmJiBwYXJlbnRQcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdFcnJvckludGVybmFsKGBQcm92aWRlIGJvdGggdGhlIHBhcmVudCB0eXBlIGFuZCBwYXJlbnQgcHJvcGVydHkgb3Igbm9uZTogJHtwYXJlbnRUeXBlfSwgJHtwYXJlbnRQcm9wZXJ0eX0uYCwgJ0FjdGlvbkRlc2NyaXB0b3IgZXJyb3InKS5jb25zb2xlRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wYXJlbnRUeXBlID0gcGFyZW50VHlwZTtcbiAgICAgICAgdGhpcy5fcGFyZW50VHlwZU5hbWUgPSBwYXJlbnRUeXBlID8gVHlwZVV0aWwuZmluZFR5cGVOYW1lKHBhcmVudFR5cGUpIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9wYXJlbnRQcm9wZXJ0eSA9IHBhcmVudFByb3BlcnR5O1xuXG4gICAgICAgIHRoaXMuc2V0STE4bk1vZGVsQWN0aW9uQmFzZUtleSgpO1xuXG4gICAgICAgIGxldCBkaXNwbGF5TmFtZSA9IGFjdGlvbk5hbWU7XG4gICAgICAgIGlmICh0aGlzLl9tb2RlbCkgZGlzcGxheU5hbWUgPSBgJHt0aGlzLl9tb2RlbC50eXBlTmFtZX0uJHtkaXNwbGF5TmFtZX1gO1xuICAgICAgICBpZiAodGhpcy5fcGFyZW50VHlwZU5hbWUpIHtcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lID0gYCR7dGhpcy5fcGFyZW50VHlwZU5hbWV9LiR7dGhpcy5fcGFyZW50UHJvcGVydHl9XyR7ZGlzcGxheU5hbWV9YDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hY3Rpb25OYW1lTG9uZyA9IGRpc3BsYXlOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudFR5cGVOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50VHlwZU5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnRQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudFByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaTE4bk1vZGVsQWN0aW9uQmFzZUtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2YXRpb25UcmlnZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZhdGlvblRyaWdnZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvdXRlVXJsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVVcmw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNSdW5GdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9ydW5GdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJ1bkZ1bmN0aW9uKCk6IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgYW55PikgPT4gT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkIHwgbnVsbD4ge1xuICAgICAgICBpZiAoIXRoaXMuX3J1bkZ1bmN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW5nRXJyb3JJbnRlcm5hbCgnUnVuIGZ1bmN0aW9uIGlzIG5vdCBkZWZpbmVkIGFuZCBjYW5ub3QgYmUgaW52b2tlZCcsICdBY3Rpb25EZXNjcmlwdG9yIGVycm9yJykuY29uc29sZUVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNWaXNpYmxlRnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Zpc2libGVGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzRW5hYmxlZEZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNFbmFibGVkRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3Rpb25OYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9uTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGlvbk5hbWVMb25nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9uTmFtZUxvbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1dHRvbi5zdHlsZUNsYXNzLmN1c3RvbUNsYXNzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNSdW5Db25maXJtYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yICE9PSBudWxsICYmIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3IgIT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNSdW5Ob3RpZmljYXRpb25TdWNjZXNzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzUnVuTm90aWZpY2F0aW9uRXJyb3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBydW5Ob3RpZmljYXRpb25FcnJvclRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JUaXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJ1bk5vdGlmaWNhdGlvbkVycm9yTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bk5vdGlmaWNhdGlvbkVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFmdGVyUnVuQWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWZ0ZXJSdW5BY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBvblJ1bkVycm9yQWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb25SdW5FcnJvckFjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBlcm1pc3Npb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGVybWlzc2lvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZXZpZXdDYXRlZ29yeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0NhdGVnb3J5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzSXRlbXNTZWxlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNJdGVtc1NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJ1dHRvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBvc2l0aW9uVGFibGV2aWV3Q2F0ZWdvcmllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uVGFibGV2aWV3Q2F0ZWdvcmllcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN1YmFjdGlvbnNBc01lbnUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWJhY3Rpb25zQXNNZW51O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3ViYWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1YmFjdGlvbnM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldEkxOG5Nb2RlbEFjdGlvbkJhc2VLZXkoYmFzZT86IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fcGFyZW50VHlwZU5hbWUgfHwgdGhpcy5fbW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXkgPSB0aGlzLl9wYXJlbnRUeXBlTmFtZVxuICAgICAgICAgICAgICAgID8gYCR7dGhpcy5fcGFyZW50VHlwZU5hbWV9LmFjdGlvbnMuJHt0aGlzLl9wYXJlbnRQcm9wZXJ0eX1fJHt0aGlzLl9hY3Rpb25OYW1lfWBcbiAgICAgICAgICAgICAgICA6IGAke2Jhc2UgPz8gdGhpcy5fbW9kZWwhLmkxOG5CYXNlS2V5fS5hY3Rpb25zLiR7dGhpcy5fYWN0aW9uTmFtZX1gO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEYXRhUHJvdmlkZXIoZGF0YVByb3ZpZGVyOiBJRGF0YVByb3ZpZGVyPFQsIGFueT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNlcnZpY2VUeXBlPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5fbW9kZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdFcnJvckludGVybmFsKGBDYW5ub3Qgc2V0IGRhdGEgcHJvdmlkZXIgaWYgbm8gbW9kZWwgdHlwZSBpcyBwcm92aWRlZCBmb3IgYWN0aW9uICR7dGhpcy5fYWN0aW9uTmFtZX1gLCAnQWN0aW9uRGVzY3JpcHRvciBlcnJvcicpLmNvbnNvbGVFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IG5ldyBEYXRhUHJvdmlkZXIodGhpcy5fbW9kZWwudHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJ1bkZ1bmN0aW9uPFM+KGZuOiAoY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KSA9PiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQgfCBudWxsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9ydW5GdW5jdGlvbiA9IGZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aElzVmlzaWJsZUZ1bmN0aW9uPFM+KGZuOiAoY3R4OiBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPikgPT4gT2JzZXJ2YWJsZTxib29sZWFuPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc1Zpc2libGVGdW5jdGlvbiA9IGZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aElzRW5hYmxlZEZ1bmN0aW9uPFM+KGZuOiAoY3R4OiBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPikgPT4gT2JzZXJ2YWJsZTxib29sZWFuPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc0VuYWJsZWRGdW5jdGlvbiA9IGZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvdXRlVHJpZ2dlcihyb3V0ZVVybDogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRpb25UcmlnZ2VyID0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGU7XG4gICAgICAgIHRoaXMuX3JvdXRlVXJsID0gcm91dGVVcmw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUG9zaXRpb24ocG9zaXRpb246IEFjdGlvblBvc2l0aW9uRW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGNvbmZpcm1hdGlvbiBhY3Rpb24gd2l0aCBkZWZhdWx0IHN0eWxlIGJhc2VkIG9uIGFjdGlvbiBkZXNjcmlwdG9yXG4gICAgICovXG4gICAgcHVibGljIHdpdGhSdW5Db25maXJtYXRpb24oKTogQWN0aW9uQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3IgPSBuZXcgQWN0aW9uQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvcjxUPigpO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5zdHlsZUNsYXNzLndpdGhBY3Rpb25MZXZlbCh0aGlzLl9sZXZlbCk7XG4gICAgICAgIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5zdHlsZUNsYXNzLndpdGhBY3Rpb25MZXZlbCh0aGlzLl9sZXZlbCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGEgY29uZmlndXJhdGlvbiBkaWFsb2d1ZSB0byBhY3Rpb24gdXNpbmcgQWN0aW9uQ29uZmlndXJhdGlvbkRlc2NyaXB0b3JcbiAgICAgKiBAcGFyYW0gcnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvciBkZXNjcmlwdG9yIHdpdGggY3VzdG9taXphYmxlIGluZm9ybWF0aW9uIGZvciBkaWFsb2dcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFJ1bkNvbmZpcm1hdGlvbkRlc2NyaXB0b3IocnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvcjogQWN0aW9uQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvcjxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yID0gcnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5Ob3RpZmljYXRpb25TdWNjZXNzKHRpdGxlPzogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nLCBoYXNOb3RpZmljYXRpb24gPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MgPSBoYXNOb3RpZmljYXRpb247XG4gICAgICAgIHRoaXMuX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUnVuTm90aWZpY2F0aW9uRXJyb3IodGl0bGU/OiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcsIGhhc05vdGlmaWNhdGlvbiA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzUnVuTm90aWZpY2F0aW9uRXJyb3IgPSBoYXNOb3RpZmljYXRpb247XG4gICAgICAgIHRoaXMuX3J1bk5vdGlmaWNhdGlvbkVycm9yVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBZnRlclJ1bkFjdGlvbjxSVD4oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFJUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9hZnRlclJ1bkFjdGlvbiA9IGFjdGlvbiBhcyBBY3Rpb25EZXNjcmlwdG9yPHVua25vd24+O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE9uUnVuRXJyb3JBY3Rpb24oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX29uUnVuRXJyb3JBY3Rpb24gPSBhY3Rpb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGVybWlzc2lvbnMocGVybWlzc2lvbnM6IEFQZXJtaXNzaW9ucyk6IHRoaXMge1xuICAgICAgICBpZiAodGhpcy5fdGFibGV2aWV3Q2F0ZWdvcnkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgUGVybWlzc2lvbnMgc2V0IG9uIGFjdGlvbiAke3RoaXMuX2FjdGlvbk5hbWVMb25nfSB3aXRoIHJvdXRlIHR5cGUgJyR7dGhpcy5fdGFibGV2aWV3Q2F0ZWdvcnl9JyB3aWxsIGJlIG9taXR0ZWQgaW4gcm91dGUgZ3VhcmQgdmFsaWRhdGlvbi5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRhYmxldmlld0NhdGVnb3J5KHBlcm1pc3Npb25zUm91dGVUeXBlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGV2aWV3Q2F0ZWdvcnkgPSBwZXJtaXNzaW9uc1JvdXRlVHlwZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhCdXR0b25EZXNjcmlwdG9yKGJ1dHRvbjogQWN0aW9uQnV0dG9uRGVzY3JpcHRvcik6IHRoaXMge1xuICAgICAgICB0aGlzLl9idXR0b24gPSBidXR0b247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQnV0dG9uKGxhYmVsPzogc3RyaW5nIHwgbnVsbCwgaWNvbjogc3RyaW5nIHwgbnVsbCA9IG51bGwsIHN0eWxlTGV2ZWwgPSBTdHlsZUxldmVsRW51bS5EZWZhdWx0LCBzdHlsZVRleHQgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9idXR0b24gPSBuZXcgQWN0aW9uQnV0dG9uRGVzY3JpcHRvcigpLndpdGhMYWJlbChsYWJlbCkud2l0aEljb24oaWNvbikud2l0aFN0eWxlQ2xhc3MobmV3IEJ1dHRvblN0eWxlQnVpbGRlcihzdHlsZUxldmVsKS53aXRoVGV4dEJ1dHRvbihzdHlsZVRleHQpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJdGVtc1NlbGVjdGlvbihoYXNTZWxlY3Rpb24gPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0l0ZW1zU2VsZWN0aW9uID0gaGFzU2VsZWN0aW9uO1xuICAgICAgICB0aGlzLl9pc0VuYWJsZWRGdW5jdGlvbiA9IHRoaXMuX2lzRW5hYmxlZEZ1bmN0aW9uID8/IChjdHggPT4gb2YoKGN0eC5wYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXM/Lmxlbmd0aCA/PyAwKSA+IDApKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb21wb25lbnQoY29tcG9uZW50OiBUeXBlPElBY3Rpb25Db21wb25lbnQ8VD4+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXMocG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXMgPSBwb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSTE4bkJhc2UoYmFzZTogQ2xhc3NUeXBlPHVua25vd24+IHwgc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGlmICh0eXBlb2YgYmFzZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGJhc2UgPSBUeXBlVXRpbC5maW5kVHlwZU5hbWUoYmFzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRJMThuTW9kZWxBY3Rpb25CYXNlS2V5KGJhc2UpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFN1YmFjdGlvbnNBc01lbnUoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3N1YmFjdGlvbnNBc01lbnUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFN1YmFjdGlvbnMoLi4uc3ViYWN0aW9uczogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxUPj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc3ViYWN0aW9ucy5wdXNoKC4uLnN1YmFjdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weVRvKGRlc2NyaXB0b3I6IEFjdGlvbkRlc2NyaXB0b3I8VD4pOiBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgZGVzY3JpcHRvci5faTE4bk1vZGVsQWN0aW9uQmFzZUtleSA9IHRoaXMuX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXk7XG4gICAgICAgIGRlc2NyaXB0b3IuX3R5cGUgPSB0aGlzLl90eXBlO1xuICAgICAgICBkZXNjcmlwdG9yLl9hY3RpdmF0aW9uVHJpZ2dlciA9IHRoaXMuX2FjdGl2YXRpb25UcmlnZ2VyO1xuICAgICAgICBkZXNjcmlwdG9yLl9wb3NpdGlvbiA9IHRoaXMuX3Bvc2l0aW9uO1xuICAgICAgICBkZXNjcmlwdG9yLl9sZXZlbCA9IHRoaXMuX2xldmVsO1xuICAgICAgICBkZXNjcmlwdG9yLl9wb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXMgPSB0aGlzLl9wb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXM7XG5cbiAgICAgICAgZGVzY3JpcHRvci5fdGFibGV2aWV3Q2F0ZWdvcnkgPSB0aGlzLl90YWJsZXZpZXdDYXRlZ29yeTtcbiAgICAgICAgZGVzY3JpcHRvci5fcm91dGVVcmwgPSB0aGlzLl9yb3V0ZVVybDtcbiAgICAgICAgZGVzY3JpcHRvci5fZGF0YVByb3ZpZGVyID0gdGhpcy5fZGF0YVByb3ZpZGVyO1xuXG4gICAgICAgIGRlc2NyaXB0b3IuX3J1bkZ1bmN0aW9uID0gdGhpcy5fcnVuRnVuY3Rpb247XG4gICAgICAgIGRlc2NyaXB0b3IuX2lzVmlzaWJsZUZ1bmN0aW9uID0gdGhpcy5faXNWaXNpYmxlRnVuY3Rpb247XG4gICAgICAgIGRlc2NyaXB0b3IuX2lzRW5hYmxlZEZ1bmN0aW9uID0gdGhpcy5faXNFbmFibGVkRnVuY3Rpb247XG5cbiAgICAgICAgZGVzY3JpcHRvci5fcnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvciA9IHRoaXMuX3J1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I7XG5cbiAgICAgICAgZGVzY3JpcHRvci5faGFzUnVuTm90aWZpY2F0aW9uU3VjY2VzcyA9IHRoaXMuX2hhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3M7XG4gICAgICAgIGRlc2NyaXB0b3IuX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSA9IHRoaXMuX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZTtcbiAgICAgICAgZGVzY3JpcHRvci5fcnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UgPSB0aGlzLl9ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZTtcblxuICAgICAgICBkZXNjcmlwdG9yLl9oYXNSdW5Ob3RpZmljYXRpb25FcnJvciA9IHRoaXMuX2hhc1J1bk5vdGlmaWNhdGlvbkVycm9yO1xuICAgICAgICBkZXNjcmlwdG9yLl9ydW5Ob3RpZmljYXRpb25FcnJvclRpdGxlID0gdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JUaXRsZTtcbiAgICAgICAgZGVzY3JpcHRvci5fcnVuTm90aWZpY2F0aW9uRXJyb3JNZXNzYWdlID0gdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JNZXNzYWdlO1xuXG4gICAgICAgIGRlc2NyaXB0b3IuX2FmdGVyUnVuQWN0aW9uID0gdGhpcy5fYWZ0ZXJSdW5BY3Rpb247XG4gICAgICAgIGRlc2NyaXB0b3IuX29uUnVuRXJyb3JBY3Rpb24gPSB0aGlzLl9vblJ1bkVycm9yQWN0aW9uO1xuXG4gICAgICAgIGRlc2NyaXB0b3IuX3Blcm1pc3Npb25zID0gdGhpcy5fcGVybWlzc2lvbnM7XG5cbiAgICAgICAgZGVzY3JpcHRvci5fYnV0dG9uID0gdGhpcy5fYnV0dG9uLmNvcHkoKTtcblxuICAgICAgICBkZXNjcmlwdG9yLl9oYXNJdGVtc1NlbGVjdGlvbiA9IHRoaXMuX2hhc0l0ZW1zU2VsZWN0aW9uO1xuICAgICAgICBkZXNjcmlwdG9yLl9jb21wb25lbnQgPSB0aGlzLl9jb21wb25lbnQ7XG4gICAgICAgIGRlc2NyaXB0b3IuX3N1YmFjdGlvbnNBc01lbnUgPSB0aGlzLl9zdWJhY3Rpb25zQXNNZW51O1xuICAgICAgICBkZXNjcmlwdG9yLl9zdWJhY3Rpb25zID0gdGhpcy5fc3ViYWN0aW9ucztcblxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25TaW1wbGVEZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRGVzY3JpcHRvcjxUPiB7XG4gICAgY29uc3RydWN0b3IoYWN0aW9uTmFtZTogc3RyaW5nLCBtb2RlbFR5cGU/OiBDbGFzc1R5cGU8VD4sIGlkUHJvcGVydHk/OiBzdHJpbmcsIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcsIGkxOG5CYXNlS2V5Pzogc3RyaW5nIHwgQ2xhc3NUeXBlPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gbW9kZWxUeXBlID8gbmV3IE1vZGVsRGVzY3JpcHRvcjxUPihtb2RlbFR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIGkxOG5CYXNlS2V5KSA6IG51bGw7XG4gICAgICAgIHN1cGVyKG1vZGVsLCBhY3Rpb25OYW1lKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRGVzY3JpcHRvcjxUPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPjtcblxuICAgIHByb3RlY3RlZCBfZWRpdG9yQWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHJvdGVjdGVkIF9lZGl0b3JUaXRsZT86IHN0cmluZyB8IG51bGwgPSB1bmRlZmluZWQ7XG4gICAgcHJvdGVjdGVkIF9lZGl0b3JUaXRsZVBhcmFtcz86IGFueSA9IHVuZGVmaW5lZDtcblxuICAgIHByb3RlY3RlZCBfaGFzRmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9mZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX2RpYWxvZ1NpemUgPSBTdHlsZVNpemVFbnVtLk5vcm1hbDtcbiAgICBwcm90ZWN0ZWQgX2RpYWxvZ0NsYXNzTmFtZT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+ID0gdW5kZWZpbmVkO1xuICAgIHByb3RlY3RlZCBfZmV0Y2hGdW5jdGlvbj86IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgYW55PikgPT4gT2JzZXJ2YWJsZTxUPjtcbiAgICBwcm90ZWN0ZWQgX3N1Ym1pdEZ1bmN0aW9uPzogKGN0eDogQWN0aW9uQ29udGV4dDxULCBhbnk+KSA9PiBPYnNlcnZhYmxlPFQ+O1xuXG4gICAgcHJvdGVjdGVkIF9lZGl0b3JDb21wb25lbnQ/OiBUeXBlPGFueT47XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JEZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPFQ+LCBhY3Rpb25OYW1lOiBzdHJpbmcsIHBhcmVudFR5cGU/OiBDbGFzc1R5cGU8dW5rbm93bj4sIHBhcmVudFByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvckRlc2NyaXB0b3IubW9kZWwsIGFjdGlvbk5hbWUsIHBhcmVudFR5cGUsIHBhcmVudFByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fdHlwZSA9IEFjdGlvblR5cGVFbnVtLkVkaXRvcjtcbiAgICAgICAgdGhpcy5fZWRpdG9yRGVzY3JpcHRvciA9IGVkaXRvckRlc2NyaXB0b3I7XG4gICAgICAgIHRoaXMuX2VkaXRvckFjdGlvbnMucHVzaChBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yLmZvclByaW1hcnkodGhpcyksIEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IuZm9yU2Vjb25kYXJ5KHRoaXMpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvclRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdG9yVGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3JUaXRsZVBhcmFtcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRvclRpdGxlUGFyYW1zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yRGVzY3JpcHRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRvckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaWFsb2dTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlhbG9nU2l6ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpYWxvZ0NsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RpYWxvZ0NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0ZldGNoTm90aWZpY2F0aW9uU3VjY2VzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0ZldGNoTm90aWZpY2F0aW9uU3VjY2VzcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzVGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGRhdGFQcm92aWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHJ1bkZ1bmN0aW9uKCk6IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgdW5rbm93bj4pID0+IE9ic2VydmFibGU8VD4ge1xuICAgICAgICB0aHJvdyBuZXcgTW5nRXJyb3JJbnRlcm5hbCgnUnVuIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIGluIGVkaXRvciBhY3Rpb24uIFVzZSBzdWJtaXQgZnVuY3Rpb24gaW5zdGVhZCEnLCAnQWN0aW9uRGVzY3JpcHRvciBlcnJvcicpLmNvbnNvbGVFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmV0Y2hGdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdWJtaXRGdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yQWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRvckFjdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3JDb21wb25lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0b3JUaXRsZSh0aXRsZTogc3RyaW5nIHwgbnVsbCwgcGFyYW1zPzogYW55KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2VkaXRvclRpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuX2VkaXRvclRpdGxlUGFyYW1zID0gcGFyYW1zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXI6IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoU2VydmljZVR5cGU8Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tb2RlbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0Vycm9ySW50ZXJuYWwoYENhbm5vdCBzZXQgZGF0YSBwcm92aWRlciBpZiBubyBtb2RlbCB0eXBlIGlzIHByb3ZpZGVkIGZvciBhY3Rpb24gJHt0aGlzLl9hY3Rpb25OYW1lfWAsICdBY3Rpb25EZXNjcmlwdG9yIGVycm9yJykuY29uc29sZUVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gbmV3IEVkaXRvckRhdGFQcm92aWRlcih0aGlzLl9tb2RlbC50eXBlLCBzZXJ2aWNlVHlwZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGlhbG9nU2l6ZShzaXplID0gU3R5bGVTaXplRW51bS5Ob3JtYWwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlhbG9nU2l6ZSA9IHNpemU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGlhbG9nQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RpYWxvZ0NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhSdW5GdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uQ29udGV4dDxULCBTPikgPT4gT2JzZXJ2YWJsZTxUPik6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoU3VibWl0RnVuY3Rpb24oZm4gYXMgKGN0eDogQWN0aW9uQ29udGV4dDxULCBTPikgPT4gT2JzZXJ2YWJsZTxUPik7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGZXRjaEZ1bmN0aW9uPFM+KGZuOiAoY3R4OiBBY3Rpb25Db250ZXh0PFQsIFM+KSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZldGNoRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTdWJtaXRGdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uQ29udGV4dDxULCBTPikgPT4gT2JzZXJ2YWJsZTxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9zdWJtaXRGdW5jdGlvbiA9IGZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZldGNoTm90aWZpY2F0aW9uRXJyb3IodGl0bGU/OiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcsIGhhc05vdGlmaWNhdGlvbiA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzRmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzID0gaGFzTm90aWZpY2F0aW9uO1xuICAgICAgICB0aGlzLl9mZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9mZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0b3JBY3Rpb24oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2VkaXRvckFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEVkaXRvckFjdGlvbnMoYWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2VkaXRvckFjdGlvbnMgPSBhY3Rpb25zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEVkaXRvckNvbXBvbmVudChlZGl0b3JDb21wb25lbnQ6IFR5cGU8YW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9lZGl0b3JDb21wb25lbnQgPSBlZGl0b3JDb21wb25lbnQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0b3JBY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3VibWl0VHlwZTogQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW07XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JBY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4sIHN1Ym1pdFR5cGUgPSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yQWN0aW9uLm1vZGVsLCBzdWJtaXRUeXBlID09PSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQgPyBgJHtlZGl0b3JBY3Rpb24uYWN0aW9uTmFtZX0uc3VibWl0YCA6IGAke2VkaXRvckFjdGlvbi5hY3Rpb25OYW1lfS5jYW5jZWxgKTtcbiAgICAgICAgdGhpcy5fZWRpdG9yQWN0aW9uID0gZWRpdG9yQWN0aW9uO1xuICAgICAgICB0aGlzLl9zdWJtaXRUeXBlID0gc3VibWl0VHlwZTtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyUmlnaHQ7XG5cbiAgICAgICAgdGhpcy5idXR0b24uc3R5bGVDbGFzcy53aXRoQWN0aW9uTGV2ZWwoZWRpdG9yQWN0aW9uLmxldmVsKS53aXRoVGV4dEJ1dHRvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgcHJpbWFyeSBhY3Rpb24gd2l0aCBwcmltYXJ5IGJ1dHRvbiBzdHlsZVxuICAgICAqIEBwYXJhbSBlZGl0b3JBY3Rpb25cbiAgICAgKiBAcGFyYW0gc3VibWl0VHlwZVxuICAgICAqL1xuICAgIHN0YXRpYyBmb3JQcmltYXJ5PFQ+KGVkaXRvckFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiwgc3VibWl0VHlwZSA9IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCk6IEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3I8VD4ge1xuICAgICAgICByZXR1cm4gbmV3IEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IoZWRpdG9yQWN0aW9uLCBzdWJtaXRUeXBlKS53aXRoQnV0dG9uRGVzY3JpcHRvcihuZXcgQWN0aW9uQnV0dG9uRGVzY3JpcHRvcigpLndpdGhTdHlsZUNsYXNzKG5ldyBCdXR0b25TdHlsZUJ1aWxkZXIoKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgc2Vjb25kYXJ5IGJ1dHRvbiB3aXRoIHRleHQgYnV0dG9uIHN0eWxlXG4gICAgICogQHBhcmFtIGVkaXRvckFjdGlvblxuICAgICAqIEBwYXJhbSBzdWJtaXRUeXBlXG4gICAgICovXG4gICAgc3RhdGljIGZvclNlY29uZGFyeTxUPihlZGl0b3JBY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4sIHN1Ym1pdFR5cGUgPSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5DYW5jZWwpOiBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yKGVkaXRvckFjdGlvbiwgc3VibWl0VHlwZSkud2l0aEJ1dHRvbkRlc2NyaXB0b3IoXG4gICAgICAgICAgICBuZXcgQWN0aW9uQnV0dG9uRGVzY3JpcHRvcigpLndpdGhTdHlsZUNsYXNzKG5ldyBCdXR0b25TdHlsZUJ1aWxkZXIoKS53aXRoVGV4dEJ1dHRvbigpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3VibWl0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdFR5cGU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yRGV0YWlsc0Rlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFDVElPTl9OQU1FID0gJ2RldGFpbHMnO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JEZXRhaWxzRGVzY3JpcHRvci5BQ1RJT05fTkFNRSk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Sb3dDbGljayk7XG4gICAgICAgIHRoaXMud2l0aFJvdXRlVHJpZ2dlcignOml0ZW1JZCcpO1xuICAgICAgICB0aGlzLndpdGhGZXRjaEZ1bmN0aW9uKEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuRmV0Y2hPckZhaWwpO1xuXG4gICAgICAgIHRoaXMud2l0aEVkaXRvckFjdGlvbnMoW25ldyBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yKHRoaXMsIEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLkNhbmNlbCldKTtcbiAgICAgICAgdGhpcy53aXRoVGFibGV2aWV3Q2F0ZWdvcnkoVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuREVUQUlMUyk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhTZXJ2aWNlVHlwZTxTPihzZXJ2aWNlVHlwZTogVHlwZTxTPik6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoU2VydmljZUZldGNoRnVuY3Rpb24oc2VydmljZVR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2VydmljZUZldGNoRnVuY3Rpb248Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4sIGZldGNoRm4/OiAoaWQ6IElkVHlwZSwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IEVkaXRvckRhdGFQcm92aWRlcih0aGlzLl9tb2RlbCEudHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICBpZiAoZmV0Y2hGbikge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhGZXRjaChmZXRjaEZuKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvckFkZERlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFDVElPTl9OQU1FID0gJ2FkZCc7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JEZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvckRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckFkZERlc2NyaXB0b3IuQUNUSU9OX05BTUUpO1xuICAgICAgICB0aGlzLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQpO1xuICAgICAgICB0aGlzLndpdGhSb3V0ZVRyaWdnZXIoJ2FkZCcpO1xuICAgICAgICB0aGlzLndpdGhTdWJtaXRGdW5jdGlvbihBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkNyZWF0ZU9yRmFpbCk7XG5cbiAgICAgICAgdGhpcy5idXR0b24ud2l0aEljb24oJ3BpIHBpLXBsdXMnKTtcbiAgICAgICAgdGhpcy53aXRoVGFibGV2aWV3Q2F0ZWdvcnkoVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuQUREKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFNlcnZpY2VUeXBlPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTZXJ2aWNlU3VibWl0RnVuY3Rpb24oc2VydmljZVR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2VydmljZVN1Ym1pdEZ1bmN0aW9uPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+LCBjcmVhdGVGbj86IChpdGVtPzogVCwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8VD4sIGZldGNoRm4/OiAoaWQ6IElkVHlwZSwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IEVkaXRvckRhdGFQcm92aWRlcih0aGlzLl9tb2RlbCEudHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICBpZiAoY3JlYXRlRm4pIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoQ3JlYXRlKGNyZWF0ZUZuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmV0Y2hGbikge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhGZXRjaChmZXRjaEZuKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBBQ1RJT05fTkFNRSA9ICdlZGl0JztcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvckRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3IuQUNUSU9OX05BTUUpO1xuICAgICAgICB0aGlzLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uUm93SW5saW5lKTtcbiAgICAgICAgdGhpcy5idXR0b24uc3R5bGVDbGFzcy53aXRoU2l6ZShTdHlsZVNpemVFbnVtLlNtYWxsKTtcbiAgICAgICAgdGhpcy53aXRoUm91dGVUcmlnZ2VyKCc6aXRlbUlkL2VkaXQnKTtcbiAgICAgICAgdGhpcy53aXRoRmV0Y2hGdW5jdGlvbihBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkZldGNoT3JGYWlsKTtcbiAgICAgICAgdGhpcy53aXRoU3VibWl0RnVuY3Rpb24oQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5VcGRhdGVPckZhaWwpO1xuICAgICAgICB0aGlzLndpdGhUYWJsZXZpZXdDYXRlZ29yeShUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5FRElUKTtcbiAgICAgICAgdGhpcy5idXR0b24ud2l0aExhYmVsKG51bGwpLndpdGhJY29uKCdwaSBwaS1wZW5jaWwnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFNlcnZpY2VUeXBlPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTZXJ2aWNlU3VibWl0RnVuY3Rpb24oc2VydmljZVR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2VydmljZVN1Ym1pdEZ1bmN0aW9uPFM+KFxuICAgICAgICBzZXJ2aWNlVHlwZTogVHlwZTxTPixcbiAgICAgICAgdXBkYXRlRm4/OiAoaWQ6IElkVHlwZSwgaXRlbT86IFQsIHNlcnZpY2U/OiBTKSA9PiBPYnNlcnZhYmxlPFQ+LFxuICAgICAgICBmZXRjaEZuPzogKGlkOiBJZFR5cGUsIHNlcnZpY2U/OiBTKSA9PiBPYnNlcnZhYmxlPFQ+XG4gICAgKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBFZGl0b3JEYXRhUHJvdmlkZXIodGhpcy5fbW9kZWwhLnR5cGUsIHNlcnZpY2VUeXBlKTtcbiAgICAgICAgaWYgKHVwZGF0ZUZuKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aFVwZGF0ZSh1cGRhdGVGbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZldGNoRm4pIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoRmV0Y2goZmV0Y2hGbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25EZWxldGVEZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRGVzY3JpcHRvcjxUPiB7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBBQ1RJT05fTkFNRSA9ICdkZWxldGUnO1xuXG4gICAgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihtb2RlbCwgQWN0aW9uRGVsZXRlRGVzY3JpcHRvci5BQ1RJT05fTkFNRSk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Sb3dJbmxpbmUpO1xuICAgICAgICB0aGlzLmJ1dHRvbi5zdHlsZUNsYXNzLndpdGhTaXplKFN0eWxlU2l6ZUVudW0uU21hbGwpO1xuICAgICAgICB0aGlzLndpdGhSdW5GdW5jdGlvbihBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkRlbGV0ZU9yRmFpbCk7XG4gICAgICAgIHRoaXMuYnV0dG9uLnN0eWxlQ2xhc3Mud2l0aEFjdGlvbkxldmVsKFN0eWxlTGV2ZWxFbnVtLkRhbmdlcik7XG4gICAgICAgIHRoaXMud2l0aFJ1bkNvbmZpcm1hdGlvbigpO1xuICAgICAgICB0aGlzLndpdGhUYWJsZXZpZXdDYXRlZ29yeShUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERUxFVEUpO1xuICAgICAgICB0aGlzLmJ1dHRvbi53aXRoTGFiZWwobnVsbCkud2l0aEljb24oJ3BpIHBpLXRyYXNoJyk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhTZXJ2aWNlVHlwZTxTPihzZXJ2aWNlVHlwZTogVHlwZTxTPik6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoU2VydmljZURlbGV0ZUZ1bmN0aW9uKHNlcnZpY2VUeXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNlcnZpY2VEZWxldGVGdW5jdGlvbjxTPihzZXJ2aWNlVHlwZTogVHlwZTxTPiwgZGVsZXRlRm4/OiAoaWQ6IElkVHlwZSwgaXRlbT86IFQsIHNlcnZpY2U/OiBTKSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBFZGl0b3JEYXRhUHJvdmlkZXIodGhpcy5fbW9kZWwhLnR5cGUsIHNlcnZpY2VUeXBlKTtcbiAgICAgICAgaWYgKGRlbGV0ZUZuKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aERlbGV0ZShkZWxldGVGbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25MaW5rRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgIHByaXZhdGUgX3VybCA9ICcnO1xuICAgIHByaXZhdGUgX3BhdGhTZWdtZW50czogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9xdWVyeVBhcmFtcz86IFBhcmFtcztcbiAgICBwcml2YXRlIF9xdWVyeVBhcmFtc0hhbmRsaW5nPzogUXVlcnlQYXJhbXNIYW5kbGluZztcbiAgICBwcml2YXRlIF9yZXBsYWNlVXJsID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfdGFyZ2V0ID0gJ19zZWxmJztcbiAgICBwcml2YXRlIF9pc1N0eWxlTGluayA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPiB8IG51bGwgPSBudWxsLCBhY3Rpb25OYW1lID0gJ2xpbmsnKSB7XG4gICAgICAgIHN1cGVyKG1vZGVsLCBhY3Rpb25OYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21BY3Rpb25EZXNjcmlwdG9yPFQ+KGFjdGlvbkRlc2NyaXB0b3I6IEFjdGlvbkRlc2NyaXB0b3I8VD4pOiBBY3Rpb25MaW5rRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgQWN0aW9uTGlua0Rlc2NyaXB0b3I8VD4oYWN0aW9uRGVzY3JpcHRvci5tb2RlbCwgYWN0aW9uRGVzY3JpcHRvci5hY3Rpb25OYW1lKTtcblxuICAgICAgICBhY3Rpb25EZXNjcmlwdG9yLmNvcHlUbyhkZXNjcmlwdG9yKTtcblxuICAgICAgICBkZXNjcmlwdG9yLl9kYXRhUHJvdmlkZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIGRlc2NyaXB0b3IuX3J1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3IgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgZGVzY3JpcHRvci5faGFzUnVuTm90aWZpY2F0aW9uU3VjY2VzcyA9IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLl9ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGRlc2NyaXB0b3IuX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGRlc2NyaXB0b3IuX2hhc1J1bk5vdGlmaWNhdGlvbkVycm9yID0gZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuX3J1bk5vdGlmaWNhdGlvbkVycm9yVGl0bGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGRlc2NyaXB0b3IuX3J1bk5vdGlmaWNhdGlvbkVycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBkZXNjcmlwdG9yLl9hZnRlclJ1bkFjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgZGVzY3JpcHRvci5fb25SdW5FcnJvckFjdGlvbiA9IHVuZGVmaW5lZDtcblxuICAgICAgICBkZXNjcmlwdG9yLl9oYXNJdGVtc1NlbGVjdGlvbiA9IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLl9zdWJhY3Rpb25zQXNNZW51ID0gZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuX3N1YmFjdGlvbnMgPSBbXTtcblxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXJsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGF0aFNlZ21lbnRzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhdGhTZWdtZW50cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHF1ZXJ5UGFyYW1zKCk6IFBhcmFtcyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeVBhcmFtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHF1ZXJ5UGFyYW1zSGFuZGxpbmcoKTogUXVlcnlQYXJhbXNIYW5kbGluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeVBhcmFtc0hhbmRsaW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVwbGFjZVVybCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcGxhY2VVcmw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YXJnZXQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU3R5bGVMaW5rKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNTdHlsZUxpbms7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIcmVmKHVybDogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3VybCA9IHVybDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3V0ZXJMaW5rKC4uLnBhdGhTZWdtZW50czogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcGF0aFNlZ21lbnRzID0gcGF0aFNlZ21lbnRzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBQYXJhbXMsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3F1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXM7XG4gICAgICAgIHRoaXMuX3F1ZXJ5UGFyYW1zSGFuZGxpbmcgPSBxdWVyeVBhcmFtc0hhbmRsaW5nO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJlcGxhY2VVcmwocmVwbGFjZVVybCA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3JlcGxhY2VVcmwgPSByZXBsYWNlVXJsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRhcmdldCh0YXJnZXQ6ICdfc2VsZicgfCAnX2JsYW5rJyA9ICdfc2VsZicpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFN0eWxlTGluayhpc1N0eWxlTGluazogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc1N0eWxlTGluayA9IGlzU3R5bGVMaW5rO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Subject } from 'rxjs';
|
|
2
2
|
import { ObjectSerializer } from '../../api/utils';
|
|
3
3
|
import { MngFormEvent } from '../../components/form/models';
|
|
4
|
+
import { MngErrorInternal } from '../../models';
|
|
4
5
|
import { I18nUtils } from '../../utils';
|
|
5
6
|
import { TableviewUtil } from '../../utils/tableview.util';
|
|
6
7
|
import { ModelDescriptor } from '../model.descriptor';
|
|
@@ -113,7 +114,7 @@ export class EditorDescriptor {
|
|
|
113
114
|
removeField(property) {
|
|
114
115
|
const fieldIdx = this._fields.findIndex(f => f.property === property);
|
|
115
116
|
if (fieldIdx < 0) {
|
|
116
|
-
throw new
|
|
117
|
+
throw new MngErrorInternal(`Field ${property} does not exist.`, 'EditorDescriptor error').consoleError();
|
|
117
118
|
}
|
|
118
119
|
for (const group of this._groups) {
|
|
119
120
|
const groupFieldIdx = group.fields.findIndex(f => f instanceof AFieldDescriptor && f.property === property);
|
|
@@ -300,4 +301,4 @@ export class EditorDescriptor {
|
|
|
300
301
|
}
|
|
301
302
|
}
|
|
302
303
|
EditorDescriptor.defaultGroupName = '_default';
|
|
303
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2VkaXRvci9lZGl0b3IuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR3pDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBb0IsWUFBWSxFQUF1QixNQUFNLDhCQUE4QixDQUFDO0FBSW5HLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUdwRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDckUsT0FBTyxFQUNILGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QiwrQkFBK0IsRUFDL0IsdUJBQXVCLEVBQzFCLE1BQU0sb0JBQW9CLENBQUM7QUFFNUIsTUFBTSxPQUFPLGdCQUFnQjtJQXNCekIsWUFDSSxTQUF1QixFQUN2QixVQUFtQixFQUNuQixhQUFzQixFQUN0QixtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLEVBQ2xELFdBQXlDO1FBckIxQixVQUFLLEdBQXNDLEVBQUUsQ0FBQztRQUM5QyxZQUFPLEdBQW1DLEVBQUUsQ0FBQztRQUN0RCxZQUFPLEdBQW9DLEVBQUUsQ0FBQztRQUk5QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBTVosbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBbUIs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UUFDbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFFbEMsSUFBSSxxQkFBcUIsRUFBRTtZQUN2QixJQUFJLENBQUMsc0JBQXNCLEdBQUcscUJBQXFCLENBQUM7U0FDdkQ7YUFBTTtZQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFNBQVMsQ0FBQyxJQUEwQixFQUFFLE9BQWtCLEVBQUUsV0FBZ0IsRUFBRSxJQUEyQjtRQUMxRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFTSxjQUFjO1FBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxDQUFDOztBQWhZc0IsaUNBQWdCLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtNZWRpdXNRdWVyeVBhcmFtfSBmcm9tICcuLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7T2JqZWN0U2VyaWFsaXplcn0gZnJvbSAnLi4vLi4vYXBpL3V0aWxzJztcbmltcG9ydCB7TW5nRmllbGRFdmVudERhdGEsIE1uZ0Zvcm1FdmVudCwgTW5nRm9ybUV2ZW50VHlwZUVudW19IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZm9ybS9tb2RlbHMnO1xuaW1wb3J0IHtJTG9va3VwRGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge1RhYmxldmlld0F0dHJpYnV0ZURlZn0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxldmlldy1hdHRyLm1vZGVsJztcbmltcG9ydCB7Q2xhc3NUeXBlLCBFbnVtQ29uc3RhbnRUeXBlLCBFbnVtVHlwZSwgTW5nRmllbGRWYWxpZGF0aW9uTWVzc2FnZSwgTW5nRmllbGRWYWxpZGF0b3J9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7STE4blV0aWxzfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge1RhYmxldmlld1V0aWx9IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxldmlldy51dGlsJztcbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuLi9tb2RlbC5kZXNjcmlwdG9yJztcbmltcG9ydCB7VGFibGVEZXNjcmlwdG9yfSBmcm9tICcuLi90YWJsZSc7XG5pbXBvcnQge1RhYmxldmlld0Rlc2NyaXB0b3J9IGZyb20gJy4uL3RhYmxldmlldyc7XG5pbXBvcnQge0ZpZWxkSW5wdXRUeXBlRW51bSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW19IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gICAgQUZpZWxkRGVzY3JpcHRvcixcbiAgICBGaWVsZEFjdGlvbkRlc2NyaXB0b3IsXG4gICAgRmllbGRHcm91cERlc2NyaXB0b3IsXG4gICAgRmllbGRJbnB1dERlc2NyaXB0b3IsXG4gICAgRmllbGRMb29rdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3IsXG4gICAgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yXG59IGZyb20gJy4vZmllbGQuZGVzY3JpcHRvcic7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRHcm91cE5hbWUgPSAnX2RlZmF1bHQnO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9tb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfbW9kZWxUeXBlOiBDbGFzc1R5cGU8VD47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF90YWJsZXZpZXdFZGl0b3JUeXBlOiBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3RhYnM6IEFycmF5PEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPFQ+PiA9IFtdO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZ3JvdXBzOiBBcnJheTxGaWVsZEdyb3VwRGVzY3JpcHRvcjxUPj4gPSBbXTtcbiAgICBwcm90ZWN0ZWQgX2ZpZWxkczogQXJyYXk8QUZpZWxkRGVzY3JpcHRvcjxhbnksIFQ+PiA9IFtdO1xuICAgIHByb3RlY3RlZCBfY3VycmVudFRhYkdyb3VwPzogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8VD47XG4gICAgcHJvdGVjdGVkIF9jdXJyZW50R3JvdXA/OiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxUPjtcblxuICAgIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBfaXNMb2NhbGl6ZWQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9sb2NhbGl6YXRpb25Nb2RlbFR5cGU/OiBDbGFzc1R5cGU8YW55PjtcbiAgICBwcm90ZWN0ZWQgX2xvY2FsZUxvb2t1cD86IChxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbSwgc2VydmljZT86IGFueSwgc2VhcmNoPzogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPEFycmF5PHN0cmluZz4+O1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9ldmVudHNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8TW5nRm9ybUV2ZW50PFQ+PigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LFxuICAgICAgICBpZFByb3BlcnR5Pzogc3RyaW5nLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzogc3RyaW5nLFxuICAgICAgICB0YWJsZXZpZXdFZGl0b3JUeXBlID0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uTm9uZSxcbiAgICAgICAgaTE4bkJhc2VLZXk/OiBzdHJpbmcgfCBDbGFzc1R5cGU8dW5rbm93bj5cbiAgICApIHtcbiAgICAgICAgdGhpcy5fbW9kZWxUeXBlID0gbW9kZWxUeXBlO1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG5ldyBNb2RlbERlc2NyaXB0b3I8VD4obW9kZWxUeXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBpMThuQmFzZUtleSk7XG4gICAgICAgIHRoaXMuX3RhYmxldmlld0VkaXRvclR5cGUgPSB0YWJsZXZpZXdFZGl0b3JUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGF1dG8gZ2VuZXJhdGVkIGVkaXRvciBkZXNjcmlwdG9yIGJhc2VkIG9uIG9wZW5hcGkgZGVmaW5pdGlvblxuICAgICAqIGdlbmVyYXRlcyBhbGwgZmllbGRzIGZyb20gZGVmaW5pdGlvblxuICAgICAqIEBwYXJhbSBtb2RlbFR5cGUgY2xhc3MgdHlwZVxuICAgICAqIEBwYXJhbSBpZFByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdGFibGVFZGl0b3JUeXBlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tPFQ+KG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LCBpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nLCB0YWJsZUVkaXRvclR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lKTogRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHJldHVybiBFZGl0b3JEZXNjcmlwdG9yLmZyb21Nb2RlbFdpdGhBdHRyaWJ1dGVzKG1vZGVsVHlwZSwgVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAobW9kZWxUeXBlKSwgdGl0bGVQcm9wZXJ0eSwgaWRQcm9wZXJ0eSwgdGFibGVFZGl0b3JUeXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhdXRvIGdlbmVyYXRlZCBlZGl0b3IgZGVzY3JpcHRvciBiYXNlZCBvbiBvcGVuYXBpIGRlZmluaXRpb25cbiAgICAgKiBnZW5lcmF0ZXMgb25seSBzZWxlY3RlZCBmaWVsZHNcbiAgICAgKiBAcGFyYW0gbW9kZWxUeXBlIGNsYXNzIHR5cGVcbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlcyBsaXN0IG9mIHNlbGVjdGVkIHByb3BlcnRpZXMgdG8gZ2VuZXJhdGUgZmllbGRzIGJhc2VkIG9uXG4gICAgICogQHBhcmFtIGlkUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdGl0bGVQcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0YWJsZUVkaXRvclR5cGVcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Nb2RlbFdpdGhBdHRyaWJ1dGVzPFQ+KFxuICAgICAgICBtb2RlbFR5cGU6IENsYXNzVHlwZTxUPixcbiAgICAgICAgYXR0cmlidXRlczogVGFibGV2aWV3QXR0cmlidXRlRGVmW10sXG4gICAgICAgIGlkUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIHRhYmxlRWRpdG9yVHlwZSA9IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLk5vbmVcbiAgICApOiBFZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBFZGl0b3JEZXNjcmlwdG9yKG1vZGVsVHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgdGFibGVFZGl0b3JUeXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAuZmlsdGVyKGF0dHIgPT4gIWF0dHIudHlwZS5pbmNsdWRlcygnU2V0JykgJiYgIWF0dHIudHlwZS5pbmNsdWRlcygnQXJyYXknKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGF0dHIgPT5cbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnVwc2VydEZpZWxkRnJvbUF0dHJpYnV0ZURlZihcbiAgICAgICAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5maWVsZHMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBhdHRyLm5hbWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFicygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZXZpZXdFZGl0b3JUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGV2aWV3RWRpdG9yVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0xvY2FsaXplZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9jYWxpemVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkxvY2FsaXphdGlvblByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25CZWFuVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbk1vZGVsVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsZUxvb2t1cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZUxvb2t1cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlVGFiR3JvdXAobmFtZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgdGFiR3JvdXAgPSBuZXcgRmllbGRUYWJHcm91cERlc2NyaXB0b3I8VD4odGhpcywgbmFtZSk7XG4gICAgICAgIGlmICghdGl0bGUpIHtcbiAgICAgICAgICAgIHRpdGxlID0gSTE4blV0aWxzLlR5cGUuZ2V0VGFiS2V5KHRoaXMubW9kZWwuaTE4bkJhc2VLZXksIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRhYkdyb3VwLndpdGhUaXRsZSh0aXRsZSk7XG4gICAgICAgIHRoaXMuY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRhYkdyb3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVGaWVsZEdyb3VwKG5hbWU6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcgfCBudWxsKTogRmllbGRHcm91cERlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBmaWVsZEdyb3VwID0gbmV3IEZpZWxkR3JvdXBEZXNjcmlwdG9yPFQ+KHRoaXMsIG5hbWUpO1xuICAgICAgICBpZiAodGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghdGl0bGUpIHtcbiAgICAgICAgICAgICAgICB0aXRsZSA9IEkxOG5VdGlscy5UeXBlLmdldEdyb3VwS2V5KHRoaXMubW9kZWwuaTE4bkJhc2VLZXksIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRHcm91cC53aXRoVGl0bGUodGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cERlc2NyaXB0b3IoZmllbGRHcm91cCk7XG4gICAgICAgIHJldHVybiBmaWVsZEdyb3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZERlc2NyaXB0b3I8RlQsIEZWVCA9IEZUPihmaWVsZDogQUZpZWxkRGVzY3JpcHRvcjxGVCwgVCwgRlZUPik6IHRoaXMge1xuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRHcm91cCgpO1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cD8uYWRkRmllbGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGQocHJvcGVydHk6IHN0cmluZyk6IEZpZWxkSW5wdXREZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRJbnB1dERlc2NyaXB0b3I8VD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVzIGZpbGVkIGlmIGV4aXN0cyBpbiBkZXNjcmlwdG9yXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGZpZWxkIG5hbWVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlRmllbGQocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWVsZElkeCA9IHRoaXMuX2ZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmllbGQgJHtwcm9wZXJ0eX0gZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLl9ncm91cHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGRJZHggPSBncm91cC5maWVsZHMuZmluZEluZGV4KGYgPT4gZiBpbnN0YW5jZW9mIEFGaWVsZERlc2NyaXB0b3IgJiYgZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGdyb3VwRmllbGRJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmZpZWxkcy5zcGxpY2UoZ3JvdXBGaWVsZElkeCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmllbGRzLnNwbGljZShmaWVsZElkeCwgMSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpZWxkKHByb3BlcnR5OiBzdHJpbmcpOiBBRmllbGREZXNjcmlwdG9yPGFueSwgVD4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcy5maW5kKGYgPT4gZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkQWN0aW9uKGFjdGlvbk5hbWU6IHN0cmluZyk6IEZpZWxkQWN0aW9uRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkQWN0aW9uRGVzY3JpcHRvcjxUPih0aGlzLCBhY3Rpb25OYW1lKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwPEZUPihwcm9wZXJ0eTogc3RyaW5nLCBtb2RlbFR5cGU6IENsYXNzVHlwZTxGVD4pOiBGaWVsZExvb2t1cERlc2NyaXB0b3I8RlQsIFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRMb29rdXBEZXNjcmlwdG9yPEZULCBUPih0aGlzLCBwcm9wZXJ0eSwgbW9kZWxUeXBlKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwRW51bShcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgZW51bVR5cGU6IEVudW1UeXBlLFxuICAgICAgICBvcHRpb25zPzogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4sXG4gICAgICAgIG5hbWVBc1ZhbHVlID0gZmFsc2UsXG4gICAgICAgIG9wdGlvbnNUaXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsXG4gICAgKTogRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3IodGhpcywgcHJvcGVydHksIGVudW1UeXBlLCBvcHRpb25zLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlFZGl0b3I8RlQ+KHByb3BlcnR5OiBzdHJpbmcsIHRhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3I8RlQ+KTogRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcjxGVCwgVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yKHRoaXMsIHByb3BlcnR5LCB0YWJsZXZpZXdEZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTWFueVRvTWFueUVkaXRvcjxGVD4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvcjxGVD4sXG4gICAgICAgIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPEZUPlxuICAgICk6IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8RlQsIFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcih0aGlzLCBwcm9wZXJ0eSwgbWFpblRhYmxlRGVzY3JpcHRvciwgbG9va3VwVGFibGVEZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEaXNhYmxlZChkaXNhYmxlZCA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFZhbGlkYXRpb24obmFtZTogc3RyaW5nLCB2YWxpZGF0b3I/OiBNbmdGaWVsZFZhbGlkYXRvciwgbWVzc2FnZT86IE1uZ0ZpZWxkVmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwLndpdGhWYWxpZGF0aW9uKG5hbWUsIHZhbGlkYXRvciwgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBFZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gbmV3IEVkaXRvckRlc2NyaXB0b3I8VD4odGhpcy5tb2RlbC50eXBlLCB0aGlzLm1vZGVsLmlkUHJvcGVydHlOYW1lLCB0aGlzLm1vZGVsLnRpdGxlUHJvcGVydHlOYW1lLCB0aGlzLnRhYmxldmlld0VkaXRvclR5cGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHRhYkdyb3VwIG9mIHRoaXMuX3RhYnMpIHtcbiAgICAgICAgICAgIGVkaXRvci5jcmVhdGVUYWJHcm91cERlc2NyaXB0b3IodGFiR3JvdXAuY29weSgpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHRhYkdyb3VwIG9mIGVkaXRvci5fdGFicykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZEdyb3VwIG9mIHRhYkdyb3VwLmZpZWxkcykge1xuICAgICAgICAgICAgICAgIGVkaXRvci5fZmllbGRzLnB1c2goLi4uZmllbGRHcm91cC5maWVsZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWRpdG9yLl9ncm91cHMucHVzaCguLi50YWJHcm91cC5maWVsZHMpO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5fY3VycmVudFRhYkdyb3VwID0gZWRpdG9yLl90YWJzW2VkaXRvci5fdGFicy5sZW5ndGggLSAxXTtcbiAgICAgICAgZWRpdG9yLl9jdXJyZW50R3JvdXAgPSBlZGl0b3IuX2N1cnJlbnRUYWJHcm91cC5maWVsZHNbZWRpdG9yLl9jdXJyZW50VGFiR3JvdXAuZmllbGRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBlZGl0b3IuX2Rpc2FibGVkID0gdGhpcy5fZGlzYWJsZWQ7XG4gICAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZpZWxkR3JvdXBEZXNjcmlwdG9yKGZpZWxkR3JvdXA6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdFRhYkdyb3VwKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cCA9IGZpZWxkR3JvdXA7XG4gICAgICAgIHRoaXMuX2dyb3Vwcy5wdXNoKGZpZWxkR3JvdXApO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGFiR3JvdXA/LmFkZEZpZWxkKGZpZWxkR3JvdXApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGFiR3JvdXAgPSB0YWJHcm91cDtcbiAgICAgICAgdGhpcy5fdGFicy5wdXNoKHRhYkdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0R3JvdXAoKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdFRhYkdyb3VwKCk7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50VGFiR3JvdXA/LmZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cChFZGl0b3JEZXNjcmlwdG9yLmRlZmF1bHRHcm91cE5hbWUsIG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0VGFiR3JvdXAoKSB7XG4gICAgICAgIGlmICh0aGlzLl90YWJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVUYWJHcm91cChFZGl0b3JEZXNjcmlwdG9yLmRlZmF1bHRHcm91cE5hbWUsICdnZW5lcmFsLmdlbmVyYWwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG1vZGlmaWVzIHNlbGVjdGVkIGZpZWxkXG4gICAgICogZG8gbm90IHVzZSBpdCBmb3IgZW51bXMhICh1c2Ugd2l0aEZpZWxkTW9kaWZpZWRFbnVtIGluc3RlYWQpXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGZpZWxkIG5hbWVcbiAgICAgKiBAcGFyYW0gZmllbGRUeXBlIG5ldyBmaWVsZCB0eXBlIGZvciBzZWxlY3RlZCBmaWVsZFxuICAgICAqIEBwYXJhbSBhcmdzIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmb3IgZmllbGRcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpZWxkTW9kaWZpZWRUeXBlKHByb3BlcnR5OiBzdHJpbmcsIGZpZWxkVHlwZTogRmllbGRJbnB1dFR5cGVFbnVtLCAuLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBUYWJsZXZpZXdVdGlsLmdldEF0dHJpYnV0ZURlZk1hcCh0aGlzLl9tb2RlbFR5cGUpLmZpbmQoYXR0cmlidXRlID0+IGF0dHJpYnV0ZS5uYW1lID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZS5maWVsZFR5cGUgPSBmaWVsZFR5cGU7XG4gICAgICAgICAgICB0aGlzLnVwc2VydEZpZWxkRnJvbUF0dHJpYnV0ZURlZihcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGUsXG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZHMuZmluZChmaSA9PiBmaS5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpLFxuICAgICAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbW9kaWZpZXMgc2VsZWN0ZWQgZmllbGQgd2l0aCBlbnVtIHR5cGVcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgZmllbGQgcHJvcGVydHkgbmFtZVxuICAgICAqIEBwYXJhbSBlbnVtVHlwZSB0eXBlIG9mIGVudW0gZm9yIG5ldyBmaWVsZFxuICAgICAqIEBwYXJhbSBvcHRpb25zVGl0bGVQYXRoXG4gICAgICogQHBhcmFtIHZhbHVlc1xuICAgICAqIEBwYXJhbSBuYW1lQXNWYWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmllbGRNb2RpZmllZEVudW0ocHJvcGVydHk6IHN0cmluZywgZW51bVR5cGU/OiBFbnVtVHlwZSwgb3B0aW9uc1RpdGxlUGF0aD86IHN0cmluZyB8IG51bGwsIHZhbHVlcz86IEFycmF5PEVudW1Db25zdGFudFR5cGU+LCBuYW1lQXNWYWx1ZSA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IFRhYmxldmlld1V0aWwuZ2V0QXR0cmlidXRlRGVmTWFwKHRoaXMuX21vZGVsVHlwZSkuZmluZChhID0+IGEubmFtZSA9PT0gcHJvcGVydHkpO1xuICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGUuZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLlJhZGlvO1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGYgPT4gZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkIGluc3RhbmNlb2YgRmllbGRJbnB1dERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5hc1JhZGlvRnJvbUVudW0oZW51bVR5cGUgPz8gKE9iamVjdFNlcmlhbGl6ZXIuZ2V0KCkuZmluZEVudW0oYXR0cmlidXRlLnR5cGUpIGFzIEVudW1UeXBlKSwgb3B0aW9uc1RpdGxlUGF0aCwgdmFsdWVzLCBuYW1lQXNWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhZGRzIGxvb2t1cCB0byBnaXZlbiBmaWVsZFxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBmaWVsZCBwcm9wZXJ0eSBuYW1lXG4gICAgICogQHBhcmFtIG1vZGVsVHlwZSBtb2RlbCB0eXBlIG9mIGZpZWxkXG4gICAgICogQHBhcmFtIGxvb2t1cFByb3ZpZGVyIHByb3ZpZGVyIHRvIGJlIGFkZGVkIHRvIGZpZWxkXG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpZWxkTW9kaWZpZWRMb29rdXA8TVQ+KHByb3BlcnR5OiBzdHJpbmcsIG1vZGVsVHlwZTogQ2xhc3NUeXBlPE1UPiwgbG9va3VwUHJvdmlkZXI6IElMb29rdXBEYXRhUHJvdmlkZXI8YW55LCBhbnk+LCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMucmVtb3ZlRmllbGQocHJvcGVydHkpO1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuYWRkRmllbGRMb29rdXAocHJvcGVydHksIG1vZGVsVHlwZSkuYXNBdXRvY29tcGxldGUoKS53aXRoTG9va3VwRGF0YVByb3ZpZGVyKGxvb2t1cFByb3ZpZGVyKTtcblxuICAgICAgICBpZiAodGl0bGVQcm9wZXJ0eSkge1xuICAgICAgICAgICAgKGZpZWxkIGFzIEZpZWxkTG9va3VwRGVzY3JpcHRvcjxhbnksIGFueT4pLndpdGhJdGVtc0xhYmVsUHJvcGVydHkodGl0bGVQcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZXMgZmllbGQgYmFzZWQgb24gYXR0cmlidXRlIGRlZmluaXRpb24sIHVzZWQgZm9yIGF1dG8gbW9kZWxcbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlIGRlZmluaXRpb25cbiAgICAgKiBAcGFyYW0gZmllbGQgb3B0aW9uYWwsIGlmIGRlZmluZWQgd2lsbCBiZSByZXBsYWNlZCwgb3RoZXJ3aXNlIG5ldyB3aWxsIGJlIGdlbmVyYXRlZFxuICAgICAqIEBwYXJhbSBhcmdzIGFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cHNlcnRGaWVsZEZyb21BdHRyaWJ1dGVEZWYoYXR0cmlidXRlOiBUYWJsZXZpZXdBdHRyaWJ1dGVEZWYsIGZpZWxkPzogQUZpZWxkRGVzY3JpcHRvcjxhbnksIFQ+LCAuLi5hcmdzOiBhbnlbXSk6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBUPiB7XG4gICAgICAgIGlmIChmaWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBmaWVsZCA9IHRoaXMuYWRkRmllbGQoYXR0cmlidXRlLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkIGluc3RhbmNlb2YgRmllbGRJbnB1dERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUuZW51bVR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQuYXNSYWRpb0Zyb21FbnVtKGF0dHJpYnV0ZS5lbnVtVHlwZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5hc1R5cGUoYXR0cmlidXRlLmZpZWxkVHlwZSA/PyBUYWJsZXZpZXdVdGlsLnRvRmllbGRJbnB1dFR5cGVGcm9tQ29sdW1uVHlwZShhdHRyaWJ1dGUuY29sdW1uVHlwZSwgYXR0cmlidXRlLmNvbHVtbkRpc3BsYXlUeXBlKSwgLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgdGFrZXMgY2FyZSBvZiBkaXNwbGF5aW5nIGNvcnJlY3QvbG9jYWxpemVkIGRhdGEgaW4gdGhlIGVkaXRvclxuICAgICAqIEBwYXJhbSBsb2NhbGl6YXRpb25zUHJvcGVydHkgcHJvcGVydHkgdGhhdCB0ZWxscyB1cyB3aGVyZSBvbiB0aGUgbW9kZWwgYXJlIGxvY2FsaXphdGlvbnMgYWNjZXNzaWJsZVxuICAgICAqIEBwYXJhbSBsb2NhbGVQcm9wZXJ0eSBwcm9wZXJ0eSBieSB3aGljaCB3ZSBmaW5kIHRoZSBsb2NhbGVcbiAgICAgKiBAcGFyYW0gbG9jYWxpemF0aW9uTW9kZWxUeXBlIG1vZGVsIHR5cGUgZm9yIGxvY2FsaXphdGlvbnMgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIHdob2xlIG1vZGVsXG4gICAgICogQHBhcmFtIGxvY2FsZUxvb2t1cCBsb29rdXAgcHJvdmlkZXIgZm9yIGxvY2FsZXMgc3VwcG9ydGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9jYWxpemVkPFM+KFxuICAgICAgICBsb2NhbGl6YXRpb25zUHJvcGVydHkgPSAnbG9jYWxpemF0aW9ucycsXG4gICAgICAgIGxvY2FsZVByb3BlcnR5ID0gJ2xvY2FsZScsXG4gICAgICAgIGxvY2FsaXphdGlvbk1vZGVsVHlwZT86IENsYXNzVHlwZTxhbnk+LFxuICAgICAgICBsb2NhbGVMb29rdXA/OiAocXVlcnlQYXJhbT86IE1lZGl1c1F1ZXJ5UGFyYW0sIHNlcnZpY2U/OiBTLCBzZWFyY2g/OiBzdHJpbmcpID0+IE9ic2VydmFibGU8QXJyYXk8c3RyaW5nPj5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHkgPSBsb2NhbGl6YXRpb25zUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5ID0gbG9jYWxlUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbG9jYWxlTG9va3VwID0gbG9jYWxlTG9va3VwO1xuXG4gICAgICAgIGlmIChsb2NhbGl6YXRpb25Nb2RlbFR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbk1vZGVsVHlwZSA9IGxvY2FsaXphdGlvbk1vZGVsVHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbk1vZGVsVHlwZSA9IHRoaXMuX21vZGVsVHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV4dEV2ZW50KHR5cGU6IE1uZ0Zvcm1FdmVudFR5cGVFbnVtLCBjbXBUeXBlOiBUeXBlPGFueT4sIGNtcEluc3RhbmNlOiBhbnksIGRhdGE/OiBNbmdGaWVsZEV2ZW50RGF0YTxUPikge1xuICAgICAgICB0aGlzLl9ldmVudHNTdWJqZWN0Lm5leHQobmV3IE1uZ0Zvcm1FdmVudCh0eXBlLCBjbXBUeXBlLCBjbXBJbnN0YW5jZSwgZGF0YSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wbGV0ZUV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5fZXZlbnRzU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXZlbnRzJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxufVxuIl19
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2VkaXRvci9lZGl0b3IuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR3pDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBb0IsWUFBWSxFQUF1QixNQUFNLDhCQUE4QixDQUFDO0FBRW5HLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUc5QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFHcEQsT0FBTyxFQUFDLGtCQUFrQixFQUFFLHVCQUF1QixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3JFLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLHVCQUF1QixFQUMxQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE1BQU0sT0FBTyxnQkFBZ0I7SUFzQnpCLFlBQ0ksU0FBdUIsRUFDdkIsVUFBbUIsRUFDbkIsYUFBc0IsRUFDdEIsbUJBQW1CLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxFQUNsRCxXQUF5QztRQXJCMUIsVUFBSyxHQUFzQyxFQUFFLENBQUM7UUFDOUMsWUFBTyxHQUFtQyxFQUFFLENBQUM7UUFDdEQsWUFBTyxHQUFvQyxFQUFFLENBQUM7UUFJOUMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixpQkFBWSxHQUFH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SUFBSSxDQUFDLGlDQUFpQyxHQUFHLHFCQUFxQixDQUFDO1FBQy9ELElBQUksQ0FBQywyQkFBMkIsR0FBRyxjQUFjLENBQUM7UUFDbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFFbEMsSUFBSSxxQkFBcUIsRUFBRTtZQUN2QixJQUFJLENBQUMsc0JBQXNCLEdBQUcscUJBQXFCLENBQUM7U0FDdkQ7YUFBTTtZQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFNBQVMsQ0FBQyxJQUEwQixFQUFFLE9BQWtCLEVBQUUsV0FBZ0IsRUFBRSxJQUEyQjtRQUMxRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFTSxjQUFjO1FBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxDQUFDOztBQWhZc0IsaUNBQWdCLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtNZWRpdXNRdWVyeVBhcmFtfSBmcm9tICcuLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7T2JqZWN0U2VyaWFsaXplcn0gZnJvbSAnLi4vLi4vYXBpL3V0aWxzJztcbmltcG9ydCB7TW5nRmllbGRFdmVudERhdGEsIE1uZ0Zvcm1FdmVudCwgTW5nRm9ybUV2ZW50VHlwZUVudW19IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZm9ybS9tb2RlbHMnO1xuaW1wb3J0IHtJTG9va3VwRGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge01uZ0Vycm9ySW50ZXJuYWx9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1RhYmxldmlld0F0dHJpYnV0ZURlZn0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxldmlldy1hdHRyLm1vZGVsJztcbmltcG9ydCB7Q2xhc3NUeXBlLCBFbnVtQ29uc3RhbnRUeXBlLCBFbnVtVHlwZSwgTW5nRmllbGRWYWxpZGF0aW9uTWVzc2FnZSwgTW5nRmllbGRWYWxpZGF0b3J9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7STE4blV0aWxzfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge1RhYmxldmlld1V0aWx9IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxldmlldy51dGlsJztcbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuLi9tb2RlbC5kZXNjcmlwdG9yJztcbmltcG9ydCB7VGFibGVEZXNjcmlwdG9yfSBmcm9tICcuLi90YWJsZSc7XG5pbXBvcnQge1RhYmxldmlld0Rlc2NyaXB0b3J9IGZyb20gJy4uL3RhYmxldmlldyc7XG5pbXBvcnQge0ZpZWxkSW5wdXRUeXBlRW51bSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW19IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gICAgQUZpZWxkRGVzY3JpcHRvcixcbiAgICBGaWVsZEFjdGlvbkRlc2NyaXB0b3IsXG4gICAgRmllbGRHcm91cERlc2NyaXB0b3IsXG4gICAgRmllbGRJbnB1dERlc2NyaXB0b3IsXG4gICAgRmllbGRMb29rdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3IsXG4gICAgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yXG59IGZyb20gJy4vZmllbGQuZGVzY3JpcHRvcic7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRHcm91cE5hbWUgPSAnX2RlZmF1bHQnO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9tb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfbW9kZWxUeXBlOiBDbGFzc1R5cGU8VD47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF90YWJsZXZpZXdFZGl0b3JUeXBlOiBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3RhYnM6IEFycmF5PEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPFQ+PiA9IFtdO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZ3JvdXBzOiBBcnJheTxGaWVsZEdyb3VwRGVzY3JpcHRvcjxUPj4gPSBbXTtcbiAgICBwcm90ZWN0ZWQgX2ZpZWxkczogQXJyYXk8QUZpZWxkRGVzY3JpcHRvcjxhbnksIFQ+PiA9IFtdO1xuICAgIHByb3RlY3RlZCBfY3VycmVudFRhYkdyb3VwPzogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8VD47XG4gICAgcHJvdGVjdGVkIF9jdXJyZW50R3JvdXA/OiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxUPjtcblxuICAgIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBfaXNMb2NhbGl6ZWQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9sb2NhbGl6YXRpb25Nb2RlbFR5cGU/OiBDbGFzc1R5cGU8YW55PjtcbiAgICBwcm90ZWN0ZWQgX2xvY2FsZUxvb2t1cD86IChxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbSwgc2VydmljZT86IGFueSwgc2VhcmNoPzogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPEFycmF5PHN0cmluZz4+O1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9ldmVudHNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8TW5nRm9ybUV2ZW50PFQ+PigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LFxuICAgICAgICBpZFByb3BlcnR5Pzogc3RyaW5nLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzogc3RyaW5nLFxuICAgICAgICB0YWJsZXZpZXdFZGl0b3JUeXBlID0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uTm9uZSxcbiAgICAgICAgaTE4bkJhc2VLZXk/OiBzdHJpbmcgfCBDbGFzc1R5cGU8dW5rbm93bj5cbiAgICApIHtcbiAgICAgICAgdGhpcy5fbW9kZWxUeXBlID0gbW9kZWxUeXBlO1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG5ldyBNb2RlbERlc2NyaXB0b3I8VD4obW9kZWxUeXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBpMThuQmFzZUtleSk7XG4gICAgICAgIHRoaXMuX3RhYmxldmlld0VkaXRvclR5cGUgPSB0YWJsZXZpZXdFZGl0b3JUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGF1dG8gZ2VuZXJhdGVkIGVkaXRvciBkZXNjcmlwdG9yIGJhc2VkIG9uIG9wZW5hcGkgZGVmaW5pdGlvblxuICAgICAqIGdlbmVyYXRlcyBhbGwgZmllbGRzIGZyb20gZGVmaW5pdGlvblxuICAgICAqIEBwYXJhbSBtb2RlbFR5cGUgY2xhc3MgdHlwZVxuICAgICAqIEBwYXJhbSBpZFByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdGFibGVFZGl0b3JUeXBlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tPFQ+KG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LCBpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nLCB0YWJsZUVkaXRvclR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lKTogRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHJldHVybiBFZGl0b3JEZXNjcmlwdG9yLmZyb21Nb2RlbFdpdGhBdHRyaWJ1dGVzKG1vZGVsVHlwZSwgVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAobW9kZWxUeXBlKSwgdGl0bGVQcm9wZXJ0eSwgaWRQcm9wZXJ0eSwgdGFibGVFZGl0b3JUeXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhdXRvIGdlbmVyYXRlZCBlZGl0b3IgZGVzY3JpcHRvciBiYXNlZCBvbiBvcGVuYXBpIGRlZmluaXRpb25cbiAgICAgKiBnZW5lcmF0ZXMgb25seSBzZWxlY3RlZCBmaWVsZHNcbiAgICAgKiBAcGFyYW0gbW9kZWxUeXBlIGNsYXNzIHR5cGVcbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlcyBsaXN0IG9mIHNlbGVjdGVkIHByb3BlcnRpZXMgdG8gZ2VuZXJhdGUgZmllbGRzIGJhc2VkIG9uXG4gICAgICogQHBhcmFtIGlkUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdGl0bGVQcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0YWJsZUVkaXRvclR5cGVcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Nb2RlbFdpdGhBdHRyaWJ1dGVzPFQ+KFxuICAgICAgICBtb2RlbFR5cGU6IENsYXNzVHlwZTxUPixcbiAgICAgICAgYXR0cmlidXRlczogVGFibGV2aWV3QXR0cmlidXRlRGVmW10sXG4gICAgICAgIGlkUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIHRhYmxlRWRpdG9yVHlwZSA9IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLk5vbmVcbiAgICApOiBFZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBFZGl0b3JEZXNjcmlwdG9yKG1vZGVsVHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgdGFibGVFZGl0b3JUeXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAuZmlsdGVyKGF0dHIgPT4gIWF0dHIudHlwZS5pbmNsdWRlcygnU2V0JykgJiYgIWF0dHIudHlwZS5pbmNsdWRlcygnQXJyYXknKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGF0dHIgPT5cbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnVwc2VydEZpZWxkRnJvbUF0dHJpYnV0ZURlZihcbiAgICAgICAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5maWVsZHMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBhdHRyLm5hbWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFicygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZXZpZXdFZGl0b3JUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGV2aWV3RWRpdG9yVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0xvY2FsaXplZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9jYWxpemVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkxvY2FsaXphdGlvblByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25CZWFuVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbk1vZGVsVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsZUxvb2t1cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZUxvb2t1cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlVGFiR3JvdXAobmFtZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgdGFiR3JvdXAgPSBuZXcgRmllbGRUYWJHcm91cERlc2NyaXB0b3I8VD4odGhpcywgbmFtZSk7XG4gICAgICAgIGlmICghdGl0bGUpIHtcbiAgICAgICAgICAgIHRpdGxlID0gSTE4blV0aWxzLlR5cGUuZ2V0VGFiS2V5KHRoaXMubW9kZWwuaTE4bkJhc2VLZXksIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRhYkdyb3VwLndpdGhUaXRsZSh0aXRsZSk7XG4gICAgICAgIHRoaXMuY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRhYkdyb3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVGaWVsZEdyb3VwKG5hbWU6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcgfCBudWxsKTogRmllbGRHcm91cERlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBmaWVsZEdyb3VwID0gbmV3IEZpZWxkR3JvdXBEZXNjcmlwdG9yPFQ+KHRoaXMsIG5hbWUpO1xuICAgICAgICBpZiAodGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghdGl0bGUpIHtcbiAgICAgICAgICAgICAgICB0aXRsZSA9IEkxOG5VdGlscy5UeXBlLmdldEdyb3VwS2V5KHRoaXMubW9kZWwuaTE4bkJhc2VLZXksIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRHcm91cC53aXRoVGl0bGUodGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cERlc2NyaXB0b3IoZmllbGRHcm91cCk7XG4gICAgICAgIHJldHVybiBmaWVsZEdyb3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZERlc2NyaXB0b3I8RlQsIEZWVCA9IEZUPihmaWVsZDogQUZpZWxkRGVzY3JpcHRvcjxGVCwgVCwgRlZUPik6IHRoaXMge1xuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRHcm91cCgpO1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cD8uYWRkRmllbGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGQocHJvcGVydHk6IHN0cmluZyk6IEZpZWxkSW5wdXREZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRJbnB1dERlc2NyaXB0b3I8VD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVzIGZpbGVkIGlmIGV4aXN0cyBpbiBkZXNjcmlwdG9yXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGZpZWxkIG5hbWVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlRmllbGQocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWVsZElkeCA9IHRoaXMuX2ZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdFcnJvckludGVybmFsKGBGaWVsZCAke3Byb3BlcnR5fSBkb2VzIG5vdCBleGlzdC5gLCAnRWRpdG9yRGVzY3JpcHRvciBlcnJvcicpLmNvbnNvbGVFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5fZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cEZpZWxkSWR4ID0gZ3JvdXAuZmllbGRzLmZpbmRJbmRleChmID0+IGYgaW5zdGFuY2VvZiBBRmllbGREZXNjcmlwdG9yICYmIGYucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChncm91cEZpZWxkSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICBncm91cC5maWVsZHMuc3BsaWNlKGdyb3VwRmllbGRJZHgsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpZWxkcy5zcGxpY2UoZmllbGRJZHgsIDEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWVsZChwcm9wZXJ0eTogc3RyaW5nKTogQUZpZWxkRGVzY3JpcHRvcjxhbnksIFQ+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHMuZmluZChmID0+IGYucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZEFjdGlvbihhY3Rpb25OYW1lOiBzdHJpbmcpOiBGaWVsZEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZEFjdGlvbkRlc2NyaXB0b3I8VD4odGhpcywgYWN0aW9uTmFtZSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cDxGVD4ocHJvcGVydHk6IHN0cmluZywgbW9kZWxUeXBlOiBDbGFzc1R5cGU8RlQ+KTogRmllbGRMb29rdXBEZXNjcmlwdG9yPEZULCBUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxGVCwgVD4odGhpcywgcHJvcGVydHksIG1vZGVsVHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cEVudW0oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIGVudW1UeXBlOiBFbnVtVHlwZSxcbiAgICAgICAgb3B0aW9ucz86IEFycmF5PEVudW1Db25zdGFudFR5cGU+LFxuICAgICAgICBuYW1lQXNWYWx1ZSA9IGZhbHNlLFxuICAgICAgICBvcHRpb25zVGl0bGVQYXRoPzogc3RyaW5nIHwgbnVsbFxuICAgICk6IEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yKHRoaXMsIHByb3BlcnR5LCBlbnVtVHlwZSwgb3B0aW9ucywgbmFtZUFzVmFsdWUsIG9wdGlvbnNUaXRsZVBhdGgpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55RWRpdG9yPEZUPihwcm9wZXJ0eTogc3RyaW5nLCB0YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPEZUPik6IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3I8RlQsIFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcih0aGlzLCBwcm9wZXJ0eSwgdGFibGV2aWV3RGVzY3JpcHRvcik7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlUb01hbnlFZGl0b3I8RlQ+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8RlQ+LFxuICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvcjxGVD5cbiAgICApOiBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yPEZULCBUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IodGhpcywgcHJvcGVydHksIG1haW5UYWJsZURlc2NyaXB0b3IsIGxvb2t1cFRhYmxlRGVzY3JpcHRvcik7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGlzYWJsZWQoZGlzYWJsZWQgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRWYWxpZGF0aW9uKG5hbWU6IHN0cmluZywgdmFsaWRhdG9yPzogTW5nRmllbGRWYWxpZGF0b3IsIG1lc3NhZ2U/OiBNbmdGaWVsZFZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50R3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cC53aXRoVmFsaWRhdGlvbihuYW1lLCB2YWxpZGF0b3IsIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IG5ldyBFZGl0b3JEZXNjcmlwdG9yPFQ+KHRoaXMubW9kZWwudHlwZSwgdGhpcy5tb2RlbC5pZFByb3BlcnR5TmFtZSwgdGhpcy5tb2RlbC50aXRsZVByb3BlcnR5TmFtZSwgdGhpcy50YWJsZXZpZXdFZGl0b3JUeXBlKTtcbiAgICAgICAgZm9yIChjb25zdCB0YWJHcm91cCBvZiB0aGlzLl90YWJzKSB7XG4gICAgICAgICAgICBlZGl0b3IuY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwLmNvcHkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0YWJHcm91cCBvZiBlZGl0b3IuX3RhYnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRHcm91cCBvZiB0YWJHcm91cC5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IuX2ZpZWxkcy5wdXNoKC4uLmZpZWxkR3JvdXAuZmllbGRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvci5fZ3JvdXBzLnB1c2goLi4udGFiR3JvdXAuZmllbGRzKTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuX2N1cnJlbnRUYWJHcm91cCA9IGVkaXRvci5fdGFic1tlZGl0b3IuX3RhYnMubGVuZ3RoIC0gMV07XG4gICAgICAgIGVkaXRvci5fY3VycmVudEdyb3VwID0gZWRpdG9yLl9jdXJyZW50VGFiR3JvdXAuZmllbGRzW2VkaXRvci5fY3VycmVudFRhYkdyb3VwLmZpZWxkcy5sZW5ndGggLSAxXTtcbiAgICAgICAgZWRpdG9yLl9kaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkO1xuICAgICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVGaWVsZEdyb3VwRGVzY3JpcHRvcihmaWVsZEdyb3VwOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRUYWJHcm91cCgpO1xuICAgICAgICB0aGlzLl9jdXJyZW50R3JvdXAgPSBmaWVsZEdyb3VwO1xuICAgICAgICB0aGlzLl9ncm91cHMucHVzaChmaWVsZEdyb3VwKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRhYkdyb3VwPy5hZGRGaWVsZChmaWVsZEdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVRhYkdyb3VwRGVzY3JpcHRvcih0YWJHcm91cDogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8VD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRhYkdyb3VwID0gdGFiR3JvdXA7XG4gICAgICAgIHRoaXMuX3RhYnMucHVzaCh0YWJHcm91cCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRGVmYXVsdEdyb3VwKCkge1xuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRUYWJHcm91cCgpO1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFRhYkdyb3VwPy5maWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZpZWxkR3JvdXAoRWRpdG9yRGVzY3JpcHRvci5kZWZhdWx0R3JvdXBOYW1lLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRGVmYXVsdFRhYkdyb3VwKCkge1xuICAgICAgICBpZiAodGhpcy5fdGFicy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVGFiR3JvdXAoRWRpdG9yRGVzY3JpcHRvci5kZWZhdWx0R3JvdXBOYW1lLCAnZ2VuZXJhbC5nZW5lcmFsJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBtb2RpZmllcyBzZWxlY3RlZCBmaWVsZFxuICAgICAqIGRvIG5vdCB1c2UgaXQgZm9yIGVudW1zISAodXNlIHdpdGhGaWVsZE1vZGlmaWVkRW51bSBpbnN0ZWFkKVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBmaWVsZCBuYW1lXG4gICAgICogQHBhcmFtIGZpZWxkVHlwZSBuZXcgZmllbGQgdHlwZSBmb3Igc2VsZWN0ZWQgZmllbGRcbiAgICAgKiBAcGFyYW0gYXJncyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGZpZWxkXG4gICAgICovXG4gICAgcHVibGljIHdpdGhGaWVsZE1vZGlmaWVkVHlwZShwcm9wZXJ0eTogc3RyaW5nLCBmaWVsZFR5cGU6IEZpZWxkSW5wdXRUeXBlRW51bSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAodGhpcy5fbW9kZWxUeXBlKS5maW5kKGF0dHJpYnV0ZSA9PiBhdHRyaWJ1dGUubmFtZSA9PT0gcHJvcGVydHkpO1xuICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGUuZmllbGRUeXBlID0gZmllbGRUeXBlO1xuICAgICAgICAgICAgdGhpcy51cHNlcnRGaWVsZEZyb21BdHRyaWJ1dGVEZWYoXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlLFxuICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzLmZpbmQoZmkgPT4gZmkucHJvcGVydHkgPT09IHByb3BlcnR5KSxcbiAgICAgICAgICAgICAgICAuLi5hcmdzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG1vZGlmaWVzIHNlbGVjdGVkIGZpZWxkIHdpdGggZW51bSB0eXBlXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGZpZWxkIHByb3BlcnR5IG5hbWVcbiAgICAgKiBAcGFyYW0gZW51bVR5cGUgdHlwZSBvZiBlbnVtIGZvciBuZXcgZmllbGRcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1RpdGxlUGF0aFxuICAgICAqIEBwYXJhbSB2YWx1ZXNcbiAgICAgKiBAcGFyYW0gbmFtZUFzVmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpZWxkTW9kaWZpZWRFbnVtKHByb3BlcnR5OiBzdHJpbmcsIGVudW1UeXBlPzogRW51bVR5cGUsIG9wdGlvbnNUaXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsLCB2YWx1ZXM/OiBBcnJheTxFbnVtQ29uc3RhbnRUeXBlPiwgbmFtZUFzVmFsdWUgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBUYWJsZXZpZXdVdGlsLmdldEF0dHJpYnV0ZURlZk1hcCh0aGlzLl9tb2RlbFR5cGUpLmZpbmQoYSA9PiBhLm5hbWUgPT09IHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgYXR0cmlidXRlLmZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5SYWRpbztcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZChmID0+IGYucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChmaWVsZCAmJiBmaWVsZCBpbnN0YW5jZW9mIEZpZWxkSW5wdXREZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuYXNSYWRpb0Zyb21FbnVtKGVudW1UeXBlID8/IChPYmplY3RTZXJpYWxpemVyLmdldCgpLmZpbmRFbnVtKGF0dHJpYnV0ZS50eXBlKSBhcyBFbnVtVHlwZSksIG9wdGlvbnNUaXRsZVBhdGgsIHZhbHVlcywgbmFtZUFzVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkcyBsb29rdXAgdG8gZ2l2ZW4gZmllbGRcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgZmllbGQgcHJvcGVydHkgbmFtZVxuICAgICAqIEBwYXJhbSBtb2RlbFR5cGUgbW9kZWwgdHlwZSBvZiBmaWVsZFxuICAgICAqIEBwYXJhbSBsb29rdXBQcm92aWRlciBwcm92aWRlciB0byBiZSBhZGRlZCB0byBmaWVsZFxuICAgICAqIEBwYXJhbSB0aXRsZVByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHdpdGhGaWVsZE1vZGlmaWVkTG9va3VwPE1UPihwcm9wZXJ0eTogc3RyaW5nLCBtb2RlbFR5cGU6IENsYXNzVHlwZTxNVD4sIGxvb2t1cFByb3ZpZGVyOiBJTG9va3VwRGF0YVByb3ZpZGVyPGFueSwgYW55PiwgdGl0bGVQcm9wZXJ0eT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLnJlbW92ZUZpZWxkKHByb3BlcnR5KTtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmFkZEZpZWxkTG9va3VwKHByb3BlcnR5LCBtb2RlbFR5cGUpLmFzQXV0b2NvbXBsZXRlKCkud2l0aExvb2t1cERhdGFQcm92aWRlcihsb29rdXBQcm92aWRlcik7XG5cbiAgICAgICAgaWYgKHRpdGxlUHJvcGVydHkpIHtcbiAgICAgICAgICAgIChmaWVsZCBhcyBGaWVsZExvb2t1cERlc2NyaXB0b3I8YW55LCBhbnk+KS53aXRoSXRlbXNMYWJlbFByb3BlcnR5KHRpdGxlUHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGZpZWxkIGJhc2VkIG9uIGF0dHJpYnV0ZSBkZWZpbml0aW9uLCB1c2VkIGZvciBhdXRvIG1vZGVsXG4gICAgICogQHBhcmFtIGF0dHJpYnV0ZSBkZWZpbml0aW9uXG4gICAgICogQHBhcmFtIGZpZWxkIG9wdGlvbmFsLCBpZiBkZWZpbmVkIHdpbGwgYmUgcmVwbGFjZWQsIG90aGVyd2lzZSBuZXcgd2lsbCBiZSBnZW5lcmF0ZWRcbiAgICAgKiBAcGFyYW0gYXJncyBhZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgICAqL1xuICAgIHByaXZhdGUgdXBzZXJ0RmllbGRGcm9tQXR0cmlidXRlRGVmKGF0dHJpYnV0ZTogVGFibGV2aWV3QXR0cmlidXRlRGVmLCBmaWVsZD86IEFGaWVsZERlc2NyaXB0b3I8YW55LCBUPiwgLi4uYXJnczogYW55W10pOiBBRmllbGREZXNjcmlwdG9yPGFueSwgVD4ge1xuICAgICAgICBpZiAoZmllbGQgPT0gbnVsbCkge1xuICAgICAgICAgICAgZmllbGQgPSB0aGlzLmFkZEZpZWxkKGF0dHJpYnV0ZS5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZCBpbnN0YW5jZW9mIEZpZWxkSW5wdXREZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlLmVudW1UeXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmFzUmFkaW9Gcm9tRW51bShhdHRyaWJ1dGUuZW51bVR5cGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQuYXNUeXBlKGF0dHJpYnV0ZS5maWVsZFR5cGUgPz8gVGFibGV2aWV3VXRpbC50b0ZpZWxkSW5wdXRUeXBlRnJvbUNvbHVtblR5cGUoYXR0cmlidXRlLmNvbHVtblR5cGUsIGF0dHJpYnV0ZS5jb2x1bW5EaXNwbGF5VHlwZSksIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHRha2VzIGNhcmUgb2YgZGlzcGxheWluZyBjb3JyZWN0L2xvY2FsaXplZCBkYXRhIGluIHRoZSBlZGl0b3JcbiAgICAgKiBAcGFyYW0gbG9jYWxpemF0aW9uc1Byb3BlcnR5IHByb3BlcnR5IHRoYXQgdGVsbHMgdXMgd2hlcmUgb24gdGhlIG1vZGVsIGFyZSBsb2NhbGl6YXRpb25zIGFjY2Vzc2libGVcbiAgICAgKiBAcGFyYW0gbG9jYWxlUHJvcGVydHkgcHJvcGVydHkgYnkgd2hpY2ggd2UgZmluZCB0aGUgbG9jYWxlXG4gICAgICogQHBhcmFtIGxvY2FsaXphdGlvbk1vZGVsVHlwZSBtb2RlbCB0eXBlIGZvciBsb2NhbGl6YXRpb25zIGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSB3aG9sZSBtb2RlbFxuICAgICAqIEBwYXJhbSBsb2NhbGVMb29rdXAgbG9va3VwIHByb3ZpZGVyIGZvciBsb2NhbGVzIHN1cHBvcnRlZCBieSB0aGUgYXBwbGljYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIGxvY2FsaXplZDxTPihcbiAgICAgICAgbG9jYWxpemF0aW9uc1Byb3BlcnR5ID0gJ2xvY2FsaXphdGlvbnMnLFxuICAgICAgICBsb2NhbGVQcm9wZXJ0eSA9ICdsb2NhbGUnLFxuICAgICAgICBsb2NhbGl6YXRpb25Nb2RlbFR5cGU/OiBDbGFzc1R5cGU8YW55PixcbiAgICAgICAgbG9jYWxlTG9va3VwPzogKHF1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtLCBzZXJ2aWNlPzogUywgc2VhcmNoPzogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPEFycmF5PHN0cmluZz4+XG4gICAgKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsaXphdGlvblByb3BlcnR5ID0gbG9jYWxpemF0aW9uc1Byb3BlcnR5O1xuICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSA9IGxvY2FsZVByb3BlcnR5O1xuICAgICAgICB0aGlzLl9pc0xvY2FsaXplZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2xvY2FsZUxvb2t1cCA9IGxvY2FsZUxvb2t1cDtcblxuICAgICAgICBpZiAobG9jYWxpemF0aW9uTW9kZWxUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Nb2RlbFR5cGUgPSBsb2NhbGl6YXRpb25Nb2RlbFR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Nb2RlbFR5cGUgPSB0aGlzLl9tb2RlbFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG5leHRFdmVudCh0eXBlOiBNbmdGb3JtRXZlbnRUeXBlRW51bSwgY21wVHlwZTogVHlwZTxhbnk+LCBjbXBJbnN0YW5jZTogYW55LCBkYXRhPzogTW5nRmllbGRFdmVudERhdGE8VD4pIHtcbiAgICAgICAgdGhpcy5fZXZlbnRzU3ViamVjdC5uZXh0KG5ldyBNbmdGb3JtRXZlbnQodHlwZSwgY21wVHlwZSwgY21wSW5zdGFuY2UsIGRhdGEpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29tcGxldGVFdmVudHMoKSB7XG4gICAgICAgIHRoaXMuX2V2ZW50c1N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV2ZW50cyQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbn1cbiJdfQ==
|