mmhglobal-dynamicform 2.35.0 → 2.36.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,6 +6,7 @@ import { BehaviorSubject, of, forkJoin } from 'rxjs';
6
6
  import { tap, switchMap, map } from 'rxjs/operators';
7
7
  /********** Component & Service **********/
8
8
  import { AssetsAllowedExtension, AssetsFolder, AssetsRoutes, FormType, MESSAGETYPE, ZComponentHelper, ZGroup } from "mmhglobal-zcore";
9
+ import { FormBuilderDirectAccessQueryParamKey, FormBuilderDirectAccessQueryParamValue } from "mmhglobal-zcore";
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "@angular/router";
11
12
  import * as i2 from "mmhglobal-zcore";
@@ -74,6 +75,7 @@ export class ZComponentDebugService {
74
75
  treeNodesExpandAll: this.treeNodesExpandAll,
75
76
  treeNodesCollapseAll: this.treeNodesCollapseAll,
76
77
  refreshTreeModel: this.refreshTreeModel,
78
+ editInFormBuilder: this.editInFormBuilder.bind(this),
77
79
  addNode: this.addNode,
78
80
  refreshActivityLogData: this.loadGridData.bind(this),
79
81
  GoToFieldElement: this.gotoFieldElement.bind(this),
@@ -83,11 +85,19 @@ export class ZComponentDebugService {
83
85
  fieldElementonEditorCodeChange: this.fieldElementonEditorCodeChange.bind(this),
84
86
  gridActivityLogColumnFields: this.fieldService.getFormFieldCode('debugActivityLog', FormType.formField, this.group, "debugActivityLogField"),
85
87
  gridActivityLogOnItemClick: this.gridActivityLogOnItemClick.bind(this),
86
- updateModel: this.updateModel.bind(this)
88
+ updateModel: this.updateModel.bind(this),
89
+ isAllowUpdateFieldElement: true,
90
+ isFieldElementReadOnly: false
87
91
  });
88
92
  if (!d.zData) {
89
93
  d.zData = { collectedActivities: [], activityCount: 0 };
90
94
  }
95
+ if (!!this.environment.loadViaAsset) {
96
+ if (!this.zcoreService.isAppRunningInLocalhost()) {
97
+ d['isAllowUpdateFieldElement'] = false;
98
+ d['isFieldElementReadOnly'] = true;
99
+ }
100
+ }
91
101
  me.subscription = d.subject.subscribe((event) => this.subjectEvent(event, d, this));
92
102
  this.patchFieldsProperty(fieldElements);
93
103
  return this.loadDebugZModel(me);
@@ -119,6 +129,31 @@ export class ZComponentDebugService {
119
129
  }
120
130
  return isFormField ? this.getFormFieldzModel(fieldElementFormName) : this.getListFieldzModel(fieldElementFormName);
121
131
  }
132
+ editInFormBuilder(buttonEvent, group) {
133
+ const zModel = group && group.zModel ? group.zModel : this.debug.zModel;
134
+ if (zModel) {
135
+ const isAllowToAccessFormBuilderObs = this.environment.loadViaAsset ? this.webApiService.isAssetHttpNodeActive() : of(true);
136
+ isAllowToAccessFormBuilderObs.pipe(tap(isActive => {
137
+ if (!isActive) {
138
+ this.toastService.show(`Please start your node server and try again.`, 'top', false, 2000, 'danger', `Local Node Server (Port: ${this.environment.nodeServerPort}) is unreachable`);
139
+ return;
140
+ }
141
+ const data = {
142
+ nodeServerPort: this.environment.nodeServerPort,
143
+ isLoadViaAsset: this.environment.loadViaAsset,
144
+ fieldElementName: zModel.Name,
145
+ formType: zModel.Type ?? FormType.formField
146
+ };
147
+ const dataStr = window.btoa(JSON.stringify(data));
148
+ let oauthAdminPortalURL = 'https://e1sit.musimmas.com/OAuthAdminWeb';
149
+ if (this.environment && this.environment.customResource && this.environment.customResource.length > 0 && this.environment.customResource[0]['oauthAdminPortalUrl']) {
150
+ oauthAdminPortalURL = this.environment.customResource[0]['oauthAdminPortalUrl'];
151
+ }
152
+ console.log(`Route to: ${oauthAdminPortalURL}/oauthadmin/direct-access?${FormBuilderDirectAccessQueryParamKey.Module}=${FormBuilderDirectAccessQueryParamValue.FormBuilder}&${FormBuilderDirectAccessQueryParamKey.Data}=${dataStr}`);
153
+ window.open(`${oauthAdminPortalURL}/oauthadmin/direct-access?${FormBuilderDirectAccessQueryParamKey.Module}=${FormBuilderDirectAccessQueryParamValue.FormBuilder}&${FormBuilderDirectAccessQueryParamKey.Data}=${dataStr}`, "_blank");
154
+ })).subscribe();
155
+ }
156
+ }
122
157
  getFormFieldzModel(fieldElementFormName) {
123
158
  const debuggerGroup = this.debug;
124
159
  const fieldUrl = this.resourceApiService.getURL('field');
@@ -160,66 +195,39 @@ export class ZComponentDebugService {
160
195
  getAssetFormFieldzModel(fieldElementFormName) {
161
196
  const debuggerGroup = this.debug;
162
197
  const param = {
163
- assetsRoute: AssetsRoutes.fields,
164
198
  assetsFolder: AssetsFolder.fieldelement,
165
- extension: AssetsAllowedExtension.json,
166
- params: new HttpParams()
167
- .set('name', fieldElementFormName)
168
- .set('type', FormType.formField)
199
+ name: fieldElementFormName,
200
+ extension: AssetsAllowedExtension.json
169
201
  };
170
- return this.webApiService.assetsHttpNodeGet(param).pipe(tap((respData) => {
171
- Object.assign(debuggerGroup.zModel, respData);
172
- debuggerGroup.form.patchValue(debuggerGroup.zModel);
173
- debuggerGroup.form.markAsPristine();
174
- if (!ZComponentHelper.isJson(debuggerGroup.zModel.Code)) {
175
- Object.assign(debuggerGroup, {
176
- treeModel: ZComponentHelper.convertTreeModel(JSON.parse(debuggerGroup.zModel.Code))
177
- });
202
+ return this.webApiService.assetsHttpLocalGet(param).pipe(tap((respData) => {
203
+ try {
204
+ Object.assign(debuggerGroup.zModel, respData);
205
+ debuggerGroup.form.patchValue(debuggerGroup.zModel);
206
+ debuggerGroup.form.markAsPristine();
207
+ if (!ZComponentHelper.isJson(debuggerGroup.zModel.Code)) {
208
+ Object.assign(debuggerGroup, {
209
+ treeModel: ZComponentHelper.convertTreeModel(JSON.parse(debuggerGroup.zModel.Code))
210
+ });
211
+ }
212
+ else {
213
+ Object.assign(debuggerGroup, {
214
+ treeModel: ZComponentHelper.convertTreeModel(debuggerGroup.zModel.Code)
215
+ });
216
+ }
178
217
  }
179
- else {
180
- Object.assign(debuggerGroup, {
181
- treeModel: ZComponentHelper.convertTreeModel(debuggerGroup.zModel.Code)
182
- });
218
+ catch (error) {
219
+ console.error('Error parsing JSON:', error);
183
220
  }
184
221
  }));
185
222
  }
186
223
  getAssetListFieldzModel(fieldElementFormName) {
187
- const debuggerGroup = this.debug;
188
224
  const listParam = {
189
- assetsRoute: AssetsRoutes.fieldElementMappings,
190
225
  assetsFolder: AssetsFolder.listfieldmapping,
191
- extension: AssetsAllowedExtension.json,
192
- params: new HttpParams().set('name', fieldElementFormName)
226
+ name: fieldElementFormName,
227
+ extension: AssetsAllowedExtension.json
193
228
  };
194
- return this.webApiService.assetsHttpNodeGet(listParam).pipe(switchMap((fieldMapping) => {
195
- const formParam = {
196
- assetsRoute: AssetsRoutes.fields,
197
- assetsFolder: AssetsFolder.fieldelement,
198
- extension: AssetsAllowedExtension.json,
199
- params: new HttpParams()
200
- .set('name', fieldMapping.FieldElementMasterName)
201
- .set('type', FormType.listField)
202
- };
203
- // Fetch field data based on FieldElementMasterId
204
- return this.webApiService.assetsHttpNodeGet(formParam);
205
- }), tap((respData) => {
206
- // Update debuggerGroup with field data
207
- Object.assign(debuggerGroup.zModel, respData);
208
- debuggerGroup.form.patchValue(debuggerGroup.zModel);
209
- debuggerGroup.form.markAsPristine();
210
- // Parse and convert Code to treeModel
211
- try {
212
- let fields = debuggerGroup.zModel.Code;
213
- if (typeof debuggerGroup.zModel.Code === 'string') {
214
- fields = JSON.parse(typeof debuggerGroup.zModel.Code);
215
- }
216
- Object.assign(debuggerGroup, {
217
- treeModel: ZComponentHelper.convertTreeModel(fields)
218
- });
219
- }
220
- catch (error) {
221
- console.error('Error parsing JSON:', error);
222
- }
229
+ return this.webApiService.assetsHttpLocalGet(listParam).pipe(switchMap((fieldMapping) => {
230
+ return this.getAssetFormFieldzModel(fieldMapping.FieldElementMasterName);
223
231
  }));
224
232
  }
225
233
  subjectEvent(event, group, me) {
@@ -727,4 +735,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
727
735
  providedIn: 'root'
728
736
  }]
729
737
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.AlertService }, { type: i2.AuthService }, { type: i2.FieldService }, { type: i2.ResourceApiService }, { type: i2.ComponentErrorHandlerService }, { type: i2.ToastService }, { type: i3.ModalService }, { type: i2.WebApiService }, { type: i2.SignalrService }, { type: i2.ZCoreService }]; } });
730
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUtsRCw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFvQixNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNzQixzQkFBc0IsRUFBRSxZQUFZLEVBQW1CLFlBQVksRUFBMkQsUUFBUSxFQUFFLFdBQVcsRUFFN0csZ0JBQWdCLEVBQzNELE1BQU0sRUFDN0IsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFNekIsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUNVLE1BQWMsRUFDZCxZQUEwQixFQUMxQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsNEJBQTBELEVBQzFELFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFlBQTBCO1FBVjFCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBOEI7UUFDMUQsaUJBQVks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RUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFDOUUsR0FBRyxVQUFVLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQzNDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ25GO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDcEM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBUTtRQUNsQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCw2RkFBNkY7SUFDdEYsVUFBVSxDQUFDLGVBQWdDO1FBQ2hELElBQUksZUFBZSxDQUFDLFdBQVcsRUFBRTtZQUMvQixnREFBZ0Q7WUFDaEQsZUFBZSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNqRCxDQUFDOzttSEE5ekJVLHNCQUFzQjt1SEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcbmltcG9ydCB7IElvbmljU2VsZWN0YWJsZUNvbXBvbmVudCB9IGZyb20gJ2lvbmljLXNlbGVjdGFibGUnO1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgb2YsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBmcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCwgc3dpdGNoTWFwLCBtYXAsIG1lcmdlQWxsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0QnV0dG9uLCBBbGVydFNlcnZpY2UsIEFzc2V0c0FsbG93ZWRFeHRlbnNpb24sIEFzc2V0c0ZvbGRlciwgQXNzZXRzTm9kZVBhcmFtLCBBc3NldHNSb3V0ZXMsIEF1dGhTZXJ2aWNlLCBDb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLCBGaWVsZFNlcnZpY2UsIEZvcm1UeXBlLCBNRVNTQUdFVFlQRSxcclxuICBNb2RhbFBhZ2VQYXJhbXMsXHJcbiAgUmVzb3VyY2VBcGlTZXJ2aWNlLCBTaWduYWxyU2VydmljZSwgVG9hc3RTZXJ2aWNlLCBXZWJBcGlTZXJ2aWNlLCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsXHJcbiAgWkNvcmVTZXJ2aWNlLCBaRmllbGQsIFpHcm91cCwgWlRyZWVUZW1wbGF0ZVBhcmFtc1xyXG59IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuaW1wb3J0IHsgTW9kYWxSZXNwb25zZSwgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbW1oZ2xvYmFsLXptb2RhbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBaQ29tcG9uZW50RGVidWdTZXJ2aWNlIHtcclxuICBwdWJsaWMgcmVhZG9ubHkgZ3JvdXBzVG9TZW5kID0gWydvYXV0aCddO1xyXG4gIHB1YmxpYyByZWFkb25seSBldmVudE5hbWUgPSAnRmllbGRFbGVtZW50JztcclxuICBwcml2YXRlIGVudmlyb25tZW50ID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWVsZFNlcnZpY2U6IEZpZWxkU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzb3VyY2VBcGlTZXJ2aWNlOiBSZXNvdXJjZUFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2U6IENvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgc2lnbmFsclNlcnZpY2U6IFNpZ25hbHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6Y29yZVNlcnZpY2U6IFpDb3JlU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuemNvcmVTZXJ2aWNlLmdldEVudmlyb25tZW50KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjb3BlOiBhbnk7XHJcblxyXG4gIGdldCBkZWJ1ZygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NvcGUuZ3JvdXAuX2RlYnVnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdyb3VwKCk6IFpHcm91cCB7XHJcbiAgICByZXR1cm4gdGhpcy5zY29wZS5ncm91cDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkluaXREZWJ1Z2dlcihncm91cDogWkdyb3VwKSB7XHJcbiAgICBncm91cC5fZGVidWcgPSBuZXcgWkdyb3VwKHRydWUpO1xyXG4gICAgZ3JvdXAuX2lzRGVidWdnaW5nID0gdHJ1ZTtcclxuICAgIGdyb3VwLl9kZWJ1Zy56RGF0YSA9IHtcclxuICAgICAgY29sbGVjdGVkQWN0aXZpdGllczogW10sXHJcbiAgICAgIGFjdGl2aXR5Q291bnQ6IDAsXHJcbiAgICAgIGNvbGxlY3RlZFdvcmtmbG93QnV0dG9uczogW10sXHJcbiAgICAgIHdvcmtmbG93QnV0dG9uQ291bnQ6IDBcclxuICAgIH07XHJcbiAgICBncm91cC5fZGVidWcuekNvbXBvbmVudHMgPSB7fTtcclxuICAgIGdyb3VwLmlzTGlzdEZvcm0gPSBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgb25TdGFydERlYnVnZ2VyKGZpZWxkRWxlbWVudHM6IEFycmF5PFpGaWVsZD4sIG1lOiBhbnkpIHtcclxuICAgIHRoaXMuc2NvcGUgPSBtZTtcclxuICAgIGlmICghbWUuZ3JvdXAuX2RlYnVnKSB7XHJcbiAgICAgIG1lLmdyb3VwLl9kZWJ1ZyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGQ6IFpHcm91cCA9IG1lLmdyb3VwLl9kZWJ1ZztcclxuICAgIG1lLmZvcm0gPSBtZS50b0Zvcm1Hcm91cChmaWVsZEVsZW1lbnRzKTtcclxuICAgIGQuZm9ybSA9IG1lLmZvcm07XHJcbiAgICBpZiAobWUuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIG1lLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oZCwge1xyXG4gICAgICAvLyB6RGF0YTogeyBjb2xsZWN0ZWRBY3Rpdml0aWVzOiBbXSwgYWN0aXZpdHlDb3VudDogMCB9LFxyXG4gICAgICB6TW9kZWw6IHt9LFxyXG4gICAgICBzdWJqZWN0OiBuZXcgQmVoYXZpb3JTdWJqZWN0PFpDb21wb25lbnRPdXRwdXRFdmVudD4obnVsbCksXHJcbiAgICAgIGlzRWRpdDogdHJ1ZSxcclxuICAgICAgaXNOZXc6IGZhbHNlLFxyXG4gICAgICBfZGVidWc6IG1lLmdyb3VwLl9kZWJ1ZyxcclxuICAgICAgX2dyb3VwOiBtZS5ncm91cCxcclxuICAgICAgcmVzb3VyY2VVUkw6IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCgnZmllbGQnKSxcclxuICAgICAgdHJlZUl0ZW1UZW1wbGF0ZTogdGhpcy50cmVlSXRlbVRlbXBsYXRlLFxyXG4gICAgICBvbkl0ZW1DbGljazogdGhpcy5vbkl0ZW1DbGljayxcclxuICAgICAgb25UcmVlTm9kZUNoYW5nZTogdGhpcy5vblRyZWVOb2RlQ2hhbmdlLFxyXG4gICAgICBvbkFkZE5vZGU6IHRoaXMub25BZGROb2RlLFxyXG4gICAgICBvblJlbW92ZU5vZGU6IHRoaXMub25SZW1vdmVOb2RlLFxyXG4gICAgICB0cmVlTm9kZXNFeHBhbmRBbGw6IHRoaXMudHJlZU5vZGVzRXhwYW5kQWxsLFxyXG4gICAgICB0cmVlTm9kZXNDb2xsYXBzZUFsbDogdGhpcy50cmVlTm9kZXNDb2xsYXBzZUFsbCxcclxuICAgICAgcmVmcmVzaFRyZWVNb2RlbDogdGhpcy5yZWZyZXNoVHJlZU1vZGVsLFxyXG4gICAgICBhZGROb2RlOiB0aGlzLmFkZE5vZGUsXHJcbiAgICAgIHJlZnJlc2hBY3Rpdml0eUxvZ0RhdGE6IHRoaXMubG9hZEdyaWREYXRhLmJpbmQodGhpcyksXHJcbiAgICAgIEdvVG9GaWVsZEVsZW1lbnQ6IHRoaXMuZ290b0ZpZWxkRWxlbWVudC5iaW5kKHRoaXMpLFxyXG4gICAgICBMaXN0V2F0Y2hOYW1lOiB0aGlzLmxpc3RXYXRjaE5hbWUuYmluZCh0aGlzKSxcclxuICAgICAgb25DaGFuZ2VXYXRjaE5hbWU6IHRoaXMub25DaGFuZ2VXYXRjaE5hbWUuYmluZCh0aGlzKSxcclxuICAgICAgZ2V0V2F0Y2hOYW1lOiB0aGlzLmdldFdhdGNoTmFtZS5iaW5kKHRoaXMpLFxyXG4gICAgICBmaWVsZEVsZW1lbnRvbkVkaXRvckNvZGVDaGFuZ2U6IHRoaXMuZmllbGRFbGVtZW50b25FZGl0b3JDb2RlQ2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICAgIGdyaWRBY3Rpdml0eUxvZ0NvbHVtbkZpZWxkczogdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICAnZGVidWdBY3Rpdml0eUxvZycsXHJcbiAgICAgICAgRm9ybVR5cGUuZm9ybUZpZWxkLFxyXG4gICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgXCJkZWJ1Z0FjdGl2aXR5TG9nRmllbGRcIlxyXG4gICAgICApLFxyXG4gICAgICBncmlkQWN0aXZpdHlMb2dPbkl0ZW1DbGljazogdGhpcy5ncmlkQWN0aXZpdHlMb2dPbkl0ZW1DbGljay5iaW5kKHRoaXMpLFxyXG4gICAgICB1cGRhdGVNb2RlbDogdGhpcy51cGRhdGVNb2RlbC5iaW5kKHRoaXMpXHJcbiAgICB9KTtcclxuICAgIGlmICghZC56RGF0YSkge1xyXG4gICAgICBkLnpEYXRhID0geyBjb2xsZWN0ZWRBY3Rpdml0aWVzOiBbXSwgYWN0aXZpdHlDb3VudDogMCB9O1xyXG4gICAgfVxyXG5cclxuICAgIG1lLnN1YnNjcmlwdGlvbiA9IGQuc3ViamVjdC5zdWJzY3JpYmUoKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQpID0+XHJcbiAgICAgIHRoaXMuc3ViamVjdEV2ZW50KGV2ZW50LCBkLCB0aGlzKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnBhdGNoRmllbGRzUHJvcGVydHkoZmllbGRFbGVtZW50cyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubG9hZERlYnVnWk1vZGVsKG1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGF0Y2hGaWVsZHNQcm9wZXJ0eShmaWVsZEVsZW1lbnRzOiBBcnJheTxaRmllbGQ+KSB7XHJcbiAgICBmaWVsZEVsZW1lbnRzLmZvckVhY2goZmllbGRFbGVtZW50ID0+IHtcclxuICAgICAgdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkRWxlbWVudCk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkRWxlbWVudC5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnBhdGNoRmllbGRzUHJvcGVydHkoZmllbGRFbGVtZW50LlZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWREZWJ1Z1pNb2RlbChtZTogYW55KSB7XHJcbiAgICBjb25zdCBwcm9qZWN0SWQkID0gdGhpcy5nZXRQcm9qZWN0SWQoKTsgXHJcbiAgICBjb25zdCBmb3JtVHlwZSA9IG1lLmdyb3VwLmlzTGlzdEZvcm0gPyBGb3JtVHlwZS5saXN0RmllbGQgOiBGb3JtVHlwZS5mb3JtRmllbGQ7XHJcbiAgICBjb25zdCBmaWVsZEVsZW1lbnRGb3JtTmFtZSA9IG1lLmdyb3VwLmZpZWxkTmFtZTtcclxuICAgIGNvbnN0IGZpZWxkek1vZGVsJCA9IHRoaXMuZ2V0RmllbGR6TW9kZWwoZm9ybVR5cGUsIGZpZWxkRWxlbWVudEZvcm1OYW1lKTsgXHJcbiAgXHJcbiAgICByZXR1cm4gZm9ya0pvaW4oW3Byb2plY3RJZCQsIGZpZWxkek1vZGVsJF0pOyAgLy8gRW1pdHMgd2hlbiBhbGwgb2JzZXJ2YWJsZXMgY29tcGxldGVcclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBnZXRQcm9qZWN0SWQoKSB7XHJcbiAgICBjb25zdCBkZWJ1Z2dlckdyb3VwOiBaR3JvdXAgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdwcm9qZWN0c1VSTCcpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuZ2V0QXBpKHVybCwge30sIGRlYnVnZ2VyR3JvdXAuekRhdGEsICdQcm9qZWN0T3B0aW9ucycsIG51bGwsIGRlYnVnZ2VyR3JvdXAsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmllbGR6TW9kZWwodHlwZTogc3RyaW5nLCBmaWVsZEVsZW1lbnRGb3JtTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBpc0Zvcm1GaWVsZCA9IHR5cGUgPT09ICdGb3JtRmllbGQnO1xyXG4gIFxyXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQubG9hZFZpYUFzc2V0KSB7XHJcbiAgICAgIHJldHVybiBpc0Zvcm1GaWVsZCA/IHRoaXMuZ2V0QXNzZXRGb3JtRmllbGR6TW9kZWwoZmllbGRFbGVtZW50Rm9ybU5hbWUpIDogdGhpcy5nZXRBc3NldExpc3RGaWVsZHpNb2RlbChmaWVsZEVsZW1lbnRGb3JtTmFtZSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICByZXR1cm4gaXNGb3JtRmllbGQgPyB0aGlzLmdldEZvcm1GaWVsZHpNb2RlbChmaWVsZEVsZW1lbnRGb3JtTmFtZSkgOiB0aGlzLmdldExpc3RGaWVsZHpNb2RlbChmaWVsZEVsZW1lbnRGb3JtTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZvcm1GaWVsZHpNb2RlbChmaWVsZEVsZW1lbnRGb3JtTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkZWJ1Z2dlckdyb3VwOiBaR3JvdXAgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgZmllbGRVcmwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoJ2ZpZWxkJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwR2V0JChmaWVsZFVybCwgeyBuYW1lOiBmaWVsZEVsZW1lbnRGb3JtTmFtZSwgdHlwZTogRm9ybVR5cGUuZm9ybUZpZWxkIH0pLnBpcGUoXHJcbiAgICAgIHRhcCgocmVzcERhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdyZXNwRGF0YTogJywgcmVzcERhdGEpO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWdnZXJHcm91cC56TW9kZWwsIHJlc3BEYXRhKTtcclxuICAgICAgICBkZWJ1Z2dlckdyb3VwLmZvcm0ucGF0Y2hWYWx1ZShkZWJ1Z2dlckdyb3VwLnpNb2RlbCk7XHJcbiAgICAgICAgZGVidWdnZXJHcm91cC5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgY29uc3QgZmllbGRzID0gSlNPTi5wYXJzZShkZWJ1Z2dlckdyb3VwLnpNb2RlbC5Db2RlKTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnZ2VyR3JvdXAsIHtcclxuICAgICAgICAgIHRyZWVNb2RlbDogWkNvbXBvbmVudEhlbHBlci5jb252ZXJ0VHJlZU1vZGVsKGZpZWxkcylcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExpc3RGaWVsZHpNb2RlbChmaWVsZEVsZW1lbnRGb3JtTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkZWJ1Z2dlckdyb3VwID0gdGhpcy5kZWJ1ZztcclxuICAgIGNvbnN0IGZpZWxkc01hcHBpbmdVcmwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoJ2ZpZWxkc01hcHBpbmcnKTtcclxuICAgIGNvbnN0IGZpZWxkVXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZCcpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQoZmllbGRzTWFwcGluZ1VybCwgeyBuYW1lOiBmaWVsZEVsZW1lbnRGb3JtTmFtZSB9KS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKGZpZWxkTWFwcGluZzogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gRmV0Y2ggZmllbGQgZGF0YSBiYXNlZCBvbiBGaWVsZEVsZW1lbnRNYXN0ZXJJZFxyXG4gICAgICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQoZmllbGRVcmwsIHsgaWQ6IGZpZWxkTWFwcGluZy5GaWVsZEVsZW1lbnRNYXN0ZXJJZCB9KTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgocmVzcERhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIFVwZGF0ZSBkZWJ1Z2dlckdyb3VwIHdpdGggZmllbGQgZGF0YVxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWdnZXJHcm91cC56TW9kZWwsIHJlc3BEYXRhKTtcclxuXHJcbiAgICAgICAgZGVidWdnZXJHcm91cC5mb3JtLnBhdGNoVmFsdWUoZGVidWdnZXJHcm91cC56TW9kZWwpO1xyXG4gICAgICAgIGRlYnVnZ2VyR3JvdXAuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG5cclxuICAgICAgICAvLyBQYXJzZSBhbmQgY29udmVydCBDb2RlIHRvIHRyZWVNb2RlbFxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZHMgPSBKU09OLnBhcnNlKGRlYnVnZ2VyR3JvdXAuek1vZGVsLkNvZGUpO1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihkZWJ1Z2dlckdyb3VwLCB7XHJcbiAgICAgICAgICAgIHRyZWVNb2RlbDogWkNvbXBvbmVudEhlbHBlci5jb252ZXJ0VHJlZU1vZGVsKGZpZWxkcylcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIEpTT046JywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QXNzZXRGb3JtRmllbGR6TW9kZWwoZmllbGRFbGVtZW50Rm9ybU5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGVidWdnZXJHcm91cDogWkdyb3VwID0gdGhpcy5kZWJ1ZztcclxuICAgIGNvbnN0IHBhcmFtOiBBc3NldHNOb2RlUGFyYW0gPSB7XHJcbiAgICAgIGFzc2V0c1JvdXRlOiBBc3NldHNSb3V0ZXMuZmllbGRzLFxyXG4gICAgICBhc3NldHNGb2xkZXI6IEFzc2V0c0ZvbGRlci5maWVsZGVsZW1lbnQsXHJcbiAgICAgIGV4dGVuc2lvbjogQXNzZXRzQWxsb3dlZEV4dGVuc2lvbi5qc29uLFxyXG4gICAgICBwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKClcclxuICAgICAgICAgICAgLnNldCgnbmFtZScsIGZpZWxkRWxlbWVudEZvcm1OYW1lKVxyXG4gICAgICAgICAgICAuc2V0KCd0eXBlJywgRm9ybVR5cGUuZm9ybUZpZWxkKVxyXG4gICAgfSBcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmFzc2V0c0h0dHBOb2RlR2V0KHBhcmFtKS5waXBlKFxyXG4gICAgICB0YXAoKHJlc3BEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnZ2VyR3JvdXAuek1vZGVsLCByZXNwRGF0YSk7XHJcbiAgICAgICAgZGVidWdnZXJHcm91cC5mb3JtLnBhdGNoVmFsdWUoZGVidWdnZXJHcm91cC56TW9kZWwpO1xyXG4gICAgICAgIGRlYnVnZ2VyR3JvdXAuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG5cclxuICAgICAgICBpZighWkNvbXBvbmVudEhlbHBlci5pc0pzb24oZGVidWdnZXJHcm91cC56TW9kZWwuQ29kZSkpeyAgICAgICAgICBcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWdnZXJHcm91cCwge1xyXG4gICAgICAgICAgICB0cmVlTW9kZWw6IFpDb21wb25lbnRIZWxwZXIuY29udmVydFRyZWVNb2RlbChKU09OLnBhcnNlKGRlYnVnZ2VyR3JvdXAuek1vZGVsLkNvZGUpKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7IFxyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihkZWJ1Z2dlckdyb3VwLCB7XHJcbiAgICAgICAgICAgIHRyZWVNb2RlbDogWkNvbXBvbmVudEhlbHBlci5jb252ZXJ0VHJlZU1vZGVsKGRlYnVnZ2VyR3JvdXAuek1vZGVsLkNvZGUpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBc3NldExpc3RGaWVsZHpNb2RlbChmaWVsZEVsZW1lbnRGb3JtTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkZWJ1Z2dlckdyb3VwID0gdGhpcy5kZWJ1ZztcclxuICAgIGNvbnN0IGxpc3RQYXJhbTogQXNzZXRzTm9kZVBhcmFtID0ge1xyXG4gICAgICBhc3NldHNSb3V0ZTogQXNzZXRzUm91dGVzLmZpZWxkRWxlbWVudE1hcHBpbmdzLFxyXG4gICAgICBhc3NldHNGb2xkZXI6IEFzc2V0c0ZvbGRlci5saXN0ZmllbGRtYXBwaW5nLFxyXG4gICAgICBleHRlbnNpb246IEFzc2V0c0FsbG93ZWRFeHRlbnNpb24uanNvbixcclxuICAgICAgcGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLnNldCgnbmFtZScsIGZpZWxkRWxlbWVudEZvcm1OYW1lKVxyXG4gICAgfSBcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmFzc2V0c0h0dHBOb2RlR2V0KGxpc3RQYXJhbSkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKChmaWVsZE1hcHBpbmc6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZvcm1QYXJhbTogQXNzZXRzTm9kZVBhcmFtID0ge1xyXG4gICAgICAgICAgYXNzZXRzUm91dGU6IEFzc2V0c1JvdXRlcy5maWVsZHMsXHJcbiAgICAgICAgICBhc3NldHNGb2xkZXI6IEFzc2V0c0ZvbGRlci5maWVsZGVsZW1lbnQsXHJcbiAgICAgICAgICBleHRlbnNpb246IEFzc2V0c0FsbG93ZWRFeHRlbnNpb24uanNvbixcclxuICAgICAgICAgIHBhcmFtczogbmV3IEh0dHBQYXJhbXMoKVxyXG4gICAgICAgICAgICAuc2V0KCduYW1lJywgZmllbGRNYXBwaW5nLkZpZWxkRWxlbWVudE1hc3Rlck5hbWUpXHJcbiAgICAgICAgICAgIC5zZXQoJ3R5cGUnLCBGb3JtVHlwZS5saXN0RmllbGQpXHJcbiAgICAgICAgfSBcclxuICAgICAgICAvLyBGZXRjaCBmaWVsZCBkYXRhIGJhc2VkIG9uIEZpZWxkRWxlbWVudE1hc3RlcklkXHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5hc3NldHNIdHRwTm9kZUdldChmb3JtUGFyYW0pO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKChyZXNwRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gVXBkYXRlIGRlYnVnZ2VyR3JvdXAgd2l0aCBmaWVsZCBkYXRhXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkZWJ1Z2dlckdyb3VwLnpNb2RlbCwgcmVzcERhdGEpO1xyXG5cclxuICAgICAgICBkZWJ1Z2dlckdyb3VwLmZvcm0ucGF0Y2hWYWx1ZShkZWJ1Z2dlckdyb3VwLnpNb2RlbCk7XHJcbiAgICAgICAgZGVidWdnZXJHcm91cC5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcblxyXG4gICAgICAgIC8vIFBhcnNlIGFuZCBjb252ZXJ0IENvZGUgdG8gdHJlZU1vZGVsXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGxldCBmaWVsZHMgPSBkZWJ1Z2dlckdyb3VwLnpNb2RlbC5Db2RlO1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBkZWJ1Z2dlckdyb3VwLnpNb2RlbC5Db2RlID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgZmllbGRzID0gSlNPTi5wYXJzZSh0eXBlb2YgZGVidWdnZXJHcm91cC56TW9kZWwuQ29kZSk7XHJcbiAgICAgICAgICB9IFxyXG5cclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWdnZXJHcm91cCwge1xyXG4gICAgICAgICAgICB0cmVlTW9kZWw6IFpDb21wb25lbnRIZWxwZXIuY29udmVydFRyZWVNb2RlbChmaWVsZHMpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBKU09OOicsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YmplY3RFdmVudChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBpZiAoIWV2ZW50IHx8ICFldmVudC50YXJnZXQgfHwgZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoXCJtb2RhbEdyb3VwLlwiKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcIioqIERlYnVnIC0gU3ViamVjdEV2ZW50XCIsIGV2ZW50KTtcclxuICAgIGxldCBjYWxsRnVuYztcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICBtZSxcclxuICAgICAgICBldmVudC50YXJnZXRcclxuICAgICAgKTtcclxuICAgICAgLy8gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGV2ZW50LlRhcmdldCwgZ3JvdXApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS53YXJuKGBFcnJvciBpbiBnZXRHcm91cFZhbHVlLiBFdmVudCB0YXJnZXQ6ICR7ZXZlbnQudGFyZ2V0fS4gRXJyb3I6ICR7ZXJyb3J9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKG1lKTtcclxuICAgICAgbmV3RnVuYyhldmVudCwgZ3JvdXAsIG1lKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAoZXZlbnQudHlwZS5lbmRzV2l0aChcIm9uTmF2aWdhdGVUb1wiKSkge1xyXG4gICAgICAgIGNvbnN0IG5VcmwgPSBldmVudC50YXJnZXQucmVwbGFjZShcIi86aWRcIiwgXCIvXCIgKyBldmVudC5kYXRhKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbblVybF0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiemdyaWQtY2VsbENsaWNrXCIpIHtcclxuICAgICAgICBjb25zdCBjTmFtZSA9IGNhbGxGdW5jLnNsaWNlKDQpO1xyXG4gICAgICAgIHRoaXMuc2hvd3pNb2RhbChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGRFbGVtZW50TmFtZTogY05hbWUsXHJcbiAgICAgICAgICAgIGZpZWxkRWxlbWVudE9ic2VydmFibGUkOiBldmVudC5jb2x1bW5GaWVsZHMkLFxyXG4gICAgICAgICAgICBwYXJlbnRHcm91cDogZ3JvdXAsXHJcbiAgICAgICAgICAgIHpNb2RlbDoge30sXHJcbiAgICAgICAgICAgIGZvcm1IZWFkZXI6ICcnLFxyXG4gICAgICAgICAgICByZWZlcklkOiBldmVudC5kYXRhLklkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGlmIChldmVudC50eXBlID09PSBcInpncmlkLWNlbGxDbGlja1wiKSB7XHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLm5hdmlnYXRlVXJsKSB7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSBjYWxsRnVuYy5uYXZpZ2F0ZVVybC5yZXBsYWNlKFwiOmlkXCIsIGV2ZW50LmRhdGEuSWQpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLmZvcm1IZWFkZXIpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd3pNb2RhbChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpZWxkRWxlbWVudE5hbWU6IGNhbGxGdW5jLmN0cmxOYW1lLFxyXG4gICAgICAgICAgICAgIGZpZWxkRWxlbWVudE9ic2VydmFibGUkOiBldmVudC5jb2x1bW5GaWVsZHMkLFxyXG4gICAgICAgICAgICAgIHBhcmVudEdyb3VwOiBncm91cCxcclxuICAgICAgICAgICAgICB6TW9kZWw6IHt9LFxyXG4gICAgICAgICAgICAgIGZvcm1IZWFkZXI6IGNhbGxGdW5jLmZvcm1IZWFkZXIsXHJcbiAgICAgICAgICAgICAgcmVmZXJJZDogZXZlbnQuZGF0YS5JZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBjYWxsRnVuYyB0eXBlOiAke2NhbGxGdW5jfS4gRXZlbnQgdGFyZ2V0OiAke2V2ZW50LnRhcmdldH1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgRnVuY3Rpb24gbm90IGRlZmluZWQgaW4gZ3JvdXAuIFRhcmdldDogJHtldmVudC50YXJnZXR9LiBFdmVudCBkZXRhaWxzOiBgLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdyaWRBY3Rpdml0eUxvZ09uSXRlbUNsaWNrKGV2ZW50OiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdncmlkQWN0aXZpdHlMb2dPbkl0ZW1DbGljazogJywgZXZlbnQpO1xyXG4gICAgY29uc3QgcmVjID0gZXZlbnQuZGF0YUl0ZW07XHJcbiAgICBzd2l0Y2ggKHJlYy50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ0xpc3RGaWVsZCc6XHJcbiAgICAgIGNhc2UgJ0Zvcm1GaWVsZCc6XHJcbiAgICAgICAgdGhpcy5nZXRGaWVsZHpNb2RlbChyZWMudHlwZSwgcmVjLmFjdGl2aXR5TmFtZSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0VGFiKDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdSZXNvdXJjZVNlcnZlckFQSSc6XHJcbiAgICAgICAgY29uc3Qgd2F0Y2hOYW1lVmFsdWUgPSAnX2RlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXNbJyArIChyZWMuaW5kZXggLSAxKSArICddLnJlZmVyZW5jZSc7XHJcbiAgICAgICAgdGhpcy5zZXRXYXRjaE5hbWVWYWx1ZSh3YXRjaE5hbWVWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUYWIoMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0h0dHBHZXQkJzpcclxuICAgICAgY2FzZSAnSHR0cFBvc3QkJzpcclxuICAgICAgY2FzZSAnSHR0cFB1dCQnOlxyXG4gICAgICBjYXNlICdIdHRwRGVsZXRlJCc6XHJcbiAgICAgICAgdGhpcy5zZXRXYXRjaE5hbWVWYWx1ZSgnX2RlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXNbJyArIChyZWMuaW5kZXggLSAxKSArICddJyk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUYWIoMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdFRhYihpbmRleDogbnVtYmVyKSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIC8vIHRoaXMuZGVidWcuekNvbXBvbmVudHNbXCJ6dGFiX2RlYnVnZ2VyVGFic1wiXS5zdGF0ZS5sYXN0U2VsZWN0ZWRUYWJJbmRleCA9IGluZGV4O1xyXG4gICAgLy8gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnQodGhpcy5kZWJ1ZywgJ3p0YWJfZGVidWdnZXJUYWJzJykuc3RhdGUubGFzdFNlbGVjdGVkVGFiSW5kZXggPSBpbmRleDtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6dGFiX2RlYnVnZ2VyVGFicycpLnNlbGVjdFRhYihpbmRleCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFdhdGNoTmFtZVZhbHVlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGVidWcuek1vZGVsWydEZWJ1Z1dhdGNoTmFtZSddID0gbmV3VmFsdWU7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoJ1dhdGNoTmFtZScsIG5ld1ZhbHVlLCB0aGlzLmRlYnVnLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkR3JpZERhdGEoKSB7XHJcbiAgICBjb25zdCBhY3Rpdml0eUxvZ0dyaWQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmRlYnVnLCAnemdyaWRfQWN0aXZpdHlMb2dHcmlkJyk7XHJcbiAgICBpZiAoYWN0aXZpdHlMb2dHcmlkKSB7XHJcbiAgICAgIGFjdGl2aXR5TG9nR3JpZC5zZXREYXRhKHRoaXMuZGVidWcuekRhdGEuY29sbGVjdGVkQWN0aXZpdGllcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RXYXRjaE5hbWUoY29tcG9uZW50OiBJb25pY1NlbGVjdGFibGVDb21wb25lbnQsIHNlYXJjaFRleHQ6IHN0cmluZywgcGFnZU5vOiBudW1iZXIsXHJcbiAgICBtZTogYW55LCBkYXRhSXRlbTogYW55LCByZWNvcmRJZD86IHN0cmluZykge1xyXG5cclxuICAgIGNvbnN0IHdhdGNoTGlzdCA9IFtcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuek1vZGVsJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC56RGF0YScgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuZmllbGRzJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5mb3JtLnZhbHVlJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5iYWNrTmF2aWdhdGlvblBhZ2UnIH0sXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLnBhcmVudFJlZmVyZW5jZUZpZWxkJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5wYXJlbnRSZWZlcmVuY2VJZCcgfSxcclxuICAgICAgeyBOYW1lOiAnT2JqZWN0LmtleXMoZ3JvdXAuekNvbXBvbmVudHMpJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5ncmlkT3B0aW9ucy56Z3JpZC5ncmlkLmRhdGEnIH1cclxuICAgICAgLy8geyBOYW1lOiAnT2JqZWN0LmtleXMoX2RlYnVnLnpDb21wb25lbnRzKScgfSxcclxuICAgICAgLy8geyBOYW1lOiAnX2RlYnVnLnpNb2RlbCcgfSxcclxuICAgICAgLy8geyBOYW1lOiAnX2RlYnVnLnpEYXRhJyB9LFxyXG4gICAgICAvLyB7IE5hbWU6ICdfZGVidWcuekRhdGEuY29sbGVjdGVkQWN0aXZpdGllcycgfSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3QgYWRkaXRpb25hbFdhdGNoTGlzdCA9IHRoaXMuc2NvcGU/Lmdyb3VwPy5hZGRpdGlvbmFsV2F0Y2hMaXN0O1xyXG4gICAgaWYgKGFkZGl0aW9uYWxXYXRjaExpc3QpIHtcclxuICAgICAgYWRkaXRpb25hbFdhdGNoTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIHdhdGNoTGlzdC5wdXNoKHsgTmFtZTogaXRlbSB9KTtcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVzdWx0cztcclxuICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgIHJlc3VsdHMgPSB3YXRjaExpc3QuZmlsdGVyKChzKSA9PiBzLk5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkgIT09IC0xKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFnZU5vID09PSAwICYmIHNlYXJjaFRleHQpIHtcclxuICAgICAgcmV0dXJuIG9mKHsgZGF0YVNldDogcmVzdWx0cyB9KTtcclxuICAgIH0gZWxzZSBpZiAocGFnZU5vID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBvZih7IGRhdGFTZXQ6IHdhdGNoTGlzdCB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZih7IGRhdGFTZXQ6IFtdIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXYXRjaE5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWJ1Zy56TW9kZWwuRGVidWdXYXRjaE5hbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhbmdlV2F0Y2hOYW1lKGV2ZW50OiBhbnksIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdvbkNoYW5nZVdhdGNoTmFtZTogJywgZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGV2ZW50LmRhdGEudmFsdWU7XHJcbiAgICBpZiAobmV3VmFsdWUpIHtcclxuICAgICAgdGhpcy5kZWJ1Zy56TW9kZWxbJ0RlYnVnV2F0Y2hOYW1lJ10gPSBuZXdWYWx1ZS5yZXBsYWNlKCdncm91cCcsICdfZ3JvdXAnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmllbGRFbGVtZW50b25FZGl0b3JDb2RlQ2hhbmdlKGVsOiBaQ29tcG9uZW50T3V0cHV0RXZlbnQpIHtcclxuICAgIHRoaXMucmVmcmVzaFRyZWVNb2RlbCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgdHJlZU5vZGVzRXhwYW5kQWxsKCkge1xyXG4gICAgdGhpcy5kZWJ1Zy56Q29tcG9uZW50c1snenRyZWVfZGVidWdaVHJlZSddLmV4cGFuZEFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmVlTm9kZXNDb2xsYXBzZUFsbCgpIHtcclxuICAgIHRoaXMuZGVidWcuekNvbXBvbmVudHNbJ3p0cmVlX2RlYnVnWlRyZWUnXS5jb2xsYXBzZUFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoVHJlZU1vZGVsKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZCA9IEpTT04ucGFyc2UodGhpcy5kZWJ1Zy56TW9kZWwuQ29kZSk7XHJcbiAgICAgIC8vIHRoaXMuX2FkZE5vZGVzVG9UcmVlKGQpO1xyXG4gICAgICAvLyBncm91cFsndHJlZU1vZGVsJ10gPSB0aGlzLmNvbnZlcnRUcmVlTW9kZWwoZCk7XHJcbiAgICAgIHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddID0gWkNvbXBvbmVudEhlbHBlci5jb252ZXJ0VHJlZU1vZGVsKGQpO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmVlSXRlbVRlbXBsYXRlKGVsOiBaVHJlZVRlbXBsYXRlUGFyYW1zKSB7XHJcbiAgICBjb25zdCBnZXRGaWVsZFZhbHVlID0gKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGl0ZW0uX0RhdGFWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiBpdGVtLl9EYXRhVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFwiLi4uXCI7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZWwuZGF0YUl0ZW0uTmFtZSArXHJcbiAgICAgIFwiIC0gW1wiICtcclxuICAgICAgZWwuZGF0YUl0ZW0uVHlwZSArXHJcbiAgICAgIFwiXSA9IFwiICtcclxuICAgICAgZ2V0RmllbGRWYWx1ZShlbC5kYXRhSXRlbSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkl0ZW1DbGljayhldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIGNvbnNvbGUubG9nKFwib25JdGVtQ2xpY2sgZGF0YSByZWNlaXZlZDogXCIsIGV2ZW50KTtcclxuICAgIGNvbnN0IGRhdGFJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgZXZlbnQuZGF0YSk7XHJcbiAgICBkYXRhSXRlbS5WYWx1ZSA9IGRhdGFJdGVtLl9EYXRhVmFsdWU7XHJcbiAgICBkZWxldGUgZGF0YUl0ZW0uX0RhdGFWYWx1ZTtcclxuICAgIGNvbnN0IHptb2RlbCA9IHtcclxuICAgICAgbm9kZU1vZGVsOiBKU09OLnN0cmluZ2lmeShkYXRhSXRlbSwgbnVsbCwgMilcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zaG93ek1vZGFsKFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGRFbGVtZW50TmFtZTogJ2lvbm12RWRpdEZpZWxkTm9kZUZvcm0nLFxyXG4gICAgICAgIHBhcmVudEdyb3VwOiB0aGlzLmRlYnVnLl9ncm91cCxcclxuICAgICAgICB6TW9kZWw6IHptb2RlbCxcclxuICAgICAgICBmb3JtSGVhZGVyOiAnRmllbGQgRWxlbWVudCBJbmZvJ1xyXG4gICAgICB9XHJcbiAgICApLnN1YnNjcmliZSgobW9kYWxEYXRhOiBNb2RhbFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChtb2RhbERhdGEucmVzcG9uc2VUeXBlID09PSBcImNhbmNlbFwiKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBKU09OLnBhcnNlKG1vZGFsRGF0YS5kYXRhLm5vZGVNb2RlbCk7XHJcbiAgICAgIGlmIChuZXdEYXRhLlZhbHVlKSB7XHJcbiAgICAgICAgbmV3RGF0YS5fRGF0YVZhbHVlID0gbmV3RGF0YS5WYWx1ZTtcclxuICAgICAgICBuZXdEYXRhLlZhbHVlID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVwZGF0ZVRyZWVOb2RlKG5ld0RhdGEsIHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddLCBldmVudC5ldmVudCk7XHJcbiAgICAgIGNvbnN0IG5ld1RyZWVNb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10pKTtcclxuICAgICAgY29uc3QgcmV2ZXJ0ZWRNb2RlbCA9IFpDb21wb25lbnRIZWxwZXIucmV2ZXJ0VHJlZU1vZGVsKG5ld1RyZWVNb2RlbCk7XHJcbiAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBuZXdDb2RlLCB0aGlzLmRlYnVnKTtcclxuICAgICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gICAgICAvLyB0aGlzLm1haW5TZXJ2aWNlLnVwZGF0ZU1vZGVsKG51bGwsIHRoaXMuZGVidWcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyZWVOb2RlKG5ld05vZGU6IGFueSwgdHJlZU1vZGVsOiBhbnksIGluZGV4OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHRyZWVJbmRleCA9IGluZGV4LnNwbGl0KFwiX1wiKTtcclxuICAgIGlmICh0cmVlSW5kZXgubGVuZ3RoID4gMSkge1xyXG4gICAgICBjb25zdCBuZXdJbmRleCA9IHRyZWVJbmRleC5zbGljZSgxKS5qb2luKFwiX1wiKTtcclxuICAgICAgdGhpcy51cGRhdGVUcmVlTm9kZShuZXdOb2RlLCB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWUsIG5ld0luZGV4KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlKSB7XHJcbiAgICAgICAgbmV3Tm9kZS5WYWx1ZSA9IHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0gPSBuZXdOb2RlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRUcmVlTm9kZShuZXdOb2RlOiBhbnksIHRyZWVNb2RlbDogYW55LCBpbmRleDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB0cmVlSW5kZXggPSBpbmRleC5zcGxpdChcIl9cIik7XHJcbiAgICBpZiAodHJlZUluZGV4Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc3QgbmV3SW5kZXggPSB0cmVlSW5kZXguc2xpY2UoMSkuam9pbihcIl9cIik7XHJcbiAgICAgIHRoaXMuaW5zZXJ0VHJlZU5vZGUobmV3Tm9kZSwgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlLCBuZXdJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodHJlZUluZGV4WzBdKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSkpIHtcclxuICAgICAgICAgIHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWUucHVzaChuZXdOb2RlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0cmVlTW9kZWwucHVzaChuZXdOb2RlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVUcmVlTm9kZSh0cmVlTW9kZWw6IGFueSwgaW5kZXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgdHJlZUluZGV4ID0gaW5kZXguc3BsaXQoXCJfXCIpO1xyXG4gICAgaWYgKHRyZWVJbmRleC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gdHJlZUluZGV4LnNsaWNlKDEpLmpvaW4oXCJfXCIpO1xyXG4gICAgICB0aGlzLnJlbW92ZVRyZWVOb2RlKHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSwgbmV3SW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJlZU1vZGVsLnNwbGljZSgrdHJlZUluZGV4WzBdLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UcmVlTm9kZUNoYW5nZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uVHJlZU5vZGVDaGFuZ2U6IFwiLCBlbCk7XHJcbiAgICBjb25zdCBjb2RlRGF0YSA9IEpTT04uc3RyaW5naWZ5KGVsLmRhdGEpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBjb2RlRGF0YSwgdGhpcy5kZWJ1Zyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZE5vZGUoKSB7XHJcbiAgICBjb25zdCBlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50ID0ge1xyXG4gICAgICBkYXRhOiB7fSxcclxuICAgICAgcm93RGF0YToge30sXHJcbiAgICAgIGV2ZW50OiBcIlwiLFxyXG4gICAgICB0YXJnZXQ6IFwiXCIsXHJcbiAgICAgIHR5cGU6IFwiXCIsXHJcbiAgICAgIGNvbHVtbkZpZWxkcyQ6IG51bGxcclxuICAgIH07XHJcbiAgICB0aGlzLm9uQWRkTm9kZShlbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9uQWRkTm9kZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZygnb25BZGROb2RlIGlzIGNhbGxlZCcsIGVsKTtcclxuICAgIC8vIGNvbnN0IGRhdGFJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgZWwuZGF0YSk7XHJcbiAgICAvLyBkYXRhSXRlbS5WYWx1ZSA9IGRhdGFJdGVtLl9EYXRhVmFsdWU7XHJcbiAgICAvLyBkZWxldGUgZGF0YUl0ZW0uX0RhdGFWYWx1ZTtcclxuICAgIGNvbnN0IGluaXRpYWxNb2RlbCA9IHtcclxuICAgICAgTmFtZTogJ05hbWUnLCBEaXNwbGF5TmFtZTogJ05hbWUnLCBWYWx1ZTogJ05hbWUnLCBUeXBlOiAndGV4dCcsXHJcbiAgICAgIGdyaWRDb2xWaXNpYmxlOiB0cnVlLFxyXG4gICAgICB3aWR0aDogMTUwLFxyXG4gICAgICBtaW5XaWR0aDogMTAwLFxyXG4gICAgICBlbmFibGVGaWx0ZXJpbmc6IHRydWUsXHJcbiAgICAgIGVuYWJsZVNvcnRpbmc6IHRydWUsXHJcbiAgICAgIHBpbm5lZExlZnQ6IGZhbHNlLFxyXG4gICAgICBQbGFjZUhvbGRlcjogXCJOYW1lXCIsXHJcbiAgICAgIElzUmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBNaW5MZW5ndGg6IDIsXHJcbiAgICAgIE1heExlbmd0aDogNTAsXHJcbiAgICAgIExhYmVsOiBcIk5hbWU6XCIsXHJcbiAgICAgIERpdkNsYXNzOiBcImNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtNiBjb2wtbGctM1wiLFxyXG4gICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgIFNob3dMYWJlbDogdHJ1ZSxcclxuICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgLy9FbmFibGVIaWRpbmc6IHRydWUsXHJcbiAgICAgIC8vY2VsbEZpbHRlcjogXCJcIixcclxuICAgICAgLy9maWx0ZXJDZWxsRmlsdGVyZWQ6IGZhbHNlLFxyXG4gICAgICAvL2VuYWJsZVBpbm5pbmc6IHRydWUsXHJcbiAgICAgIC8vcGlubmVkUmlnaHQ6IGZhbHNlLFxyXG4gICAgICAvL1VwZGF0ZU9uQmx1cjogdHJ1ZSxcclxuICAgICAgLy9BcHBlbmREaXZDbGVhckZpeDogZmFsc2UsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgem1vZGVsID0ge1xyXG4gICAgICBub2RlTW9kZWw6IEpTT04uc3RyaW5naWZ5KGluaXRpYWxNb2RlbCwgbnVsbCwgMilcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zaG93ek1vZGFsKFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGRFbGVtZW50TmFtZTogJ2lvbm12RWRpdEZpZWxkTm9kZUZvcm0nLFxyXG4gICAgICAgIHBhcmVudEdyb3VwOiB0aGlzLmRlYnVnLl9ncm91cCxcclxuICAgICAgICB6TW9kZWw6IHptb2RlbCxcclxuICAgICAgICBmb3JtSGVhZGVyOiAnQWRkIEZpZWxkIEVsZW1lbnQgSXRlbSdcclxuICAgICAgfVxyXG4gICAgKS5zdWJzY3JpYmUoKG1vZGFsRGF0YTogTW9kYWxSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAobW9kYWxEYXRhLnJlc3BvbnNlVHlwZSA9PT0gXCJjYW5jZWxcIikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdEYXRhID0gSlNPTi5wYXJzZShtb2RhbERhdGEuZGF0YS5ub2RlTW9kZWwpO1xyXG4gICAgICBpZiAobmV3RGF0YS5WYWx1ZSkge1xyXG4gICAgICAgIG5ld0RhdGEuX0RhdGFWYWx1ZSA9IG5ld0RhdGEuVmFsdWU7XHJcbiAgICAgICAgbmV3RGF0YS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnNlcnRUcmVlTm9kZShuZXdEYXRhLCB0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgIGNvbnN0IG5ld1RyZWVNb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10pKTtcclxuICAgICAgY29uc3QgcmV2ZXJ0ZWRNb2RlbCA9IFpDb21wb25lbnRIZWxwZXIucmV2ZXJ0VHJlZU1vZGVsKG5ld1RyZWVNb2RlbCk7XHJcbiAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBuZXdDb2RlLCB0aGlzLmRlYnVnKTtcclxuICAgICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gICAgICAvLyB0aGlzLm1haW5TZXJ2aWNlLnVwZGF0ZU1vZGVsKG51bGwsIHRoaXMuZGVidWcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUmVtb3ZlTm9kZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93KCdSZW1vdmUgTm9kZScsICdBcmUgeW91IHN1cmU/JyxcclxuICAgICAgW1xyXG4gICAgICAgIHsgdGV4dDogXCJOb1wiLCBjc3NDbGFzczogXCJzZWNvbmRhcnlcIiB9IGFzIEFsZXJ0QnV0dG9uLFxyXG4gICAgICAgIHsgdGV4dDogXCJZZXNcIiwgY3NzQ2xhc3M6IFwicHJpbWFyeVwiIH0gYXMgQWxlcnRCdXR0b25cclxuICAgICAgXSlcclxuICAgICAgLnN1YnNjcmliZShyZXBseSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGx5ID09PSAnWWVzJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92ZSBOb2RlJywgZWwpO1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVUcmVlTm9kZSh0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgICAgICBjb25zdCBuZXdUcmVlTW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddKSk7XHJcbiAgICAgICAgICBjb25zdCByZXZlcnRlZE1vZGVsID0gWkNvbXBvbmVudEhlbHBlci5yZXZlcnRUcmVlTW9kZWwobmV3VHJlZU1vZGVsKTtcclxuICAgICAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShcIkNvZGVcIiwgbmV3Q29kZSwgdGhpcy5kZWJ1Zyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ290b0ZpZWxkRWxlbWVudCgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYWRtaW4vZmllbGQnXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU1vZGVsKCkge1xyXG4gICAgY29uc3QgZGVidWcgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgZmcgPSB0aGlzLmRlYnVnLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJUaGUgZGVidWcgZm9ybSBpcyBub3QgZGlydHksIHNvIHRoZSByZWNvcmQgaXMgbm90IHNhdmVkLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZmcudmFsaWQpIHtcclxuICAgICAgdGhpcy5jb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLnNob3dGb3JtR3JvdXBFcnJvck1lc3NhZ2UodGhpcy5ncm91cCwgZmcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb2YoZGVidWcuek1vZGVsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICAvLyBzd2l0Y2hNYXAoem1vZGVsID0+IHtcclxuICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwiQmVmb3JlIHVwZGF0ZSwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgIC8vICAgcmV0dXJuIHRoaXMuYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXApO1xyXG4gICAgICAgIC8vIH0pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5sb2FkVmlhQXNzZXQpIHtcclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHR5cGVvZiBkZWJ1Zy56TW9kZWwgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkZWJ1Zy56TW9kZWwpIDogZGVidWcuek1vZGVsO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbTogQXNzZXRzTm9kZVBhcmFtID0ge1xyXG4gICAgICAgICAgICAgIGlkOiBkZWJ1Zy56TW9kZWwuSWQsXHJcbiAgICAgICAgICAgICAgYXNzZXRzUm91dGU6IEFzc2V0c1JvdXRlcy5maWVsZHMsXHJcbiAgICAgICAgICAgICAgYXNzZXRzRm9sZGVyOiBBc3NldHNGb2xkZXIuZmllbGRlbGVtZW50LFxyXG4gICAgICAgICAgICAgIHBhcmFtczogcGF5bG9hZFxyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmFzc2V0c0h0dHBOb2RlUHV0KHBhcmFtKS5waXBlKFxyXG4gICAgICAgICAgICAgIG1hcChyZXMgPT4gdGhpcy5oYW5kbGVTdWNjZXNzKHJlcywgXCJSZWNvcmQgaXMgdXBkYXRlZCBzdWNjZXNzZnVsbHkuXCIpKSxcclxuICAgICAgICAgICAgICBtYXAocmVzID0+IHRoaXMuc2lnbmFsclNlcnZpY2Uuc2VuZFRvQ2xpZW50R3JvdXAodGhpcy5ncm91cHNUb1NlbmQsIHRoaXMuZXZlbnROYW1lLCBkZWJ1Zy56TW9kZWwpKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFB1dCQoYCR7ZGVidWcucmVzb3VyY2VVUkx9LyR7ZGVidWcuek1vZGVsLklkfWAsIGRlYnVnLnpNb2RlbCkucGlwZShcclxuICAgICAgICAgICAgbWFwKHJlcyA9PiB0aGlzLmhhbmRsZVN1Y2Nlc3MocmVzLCBcIlJlY29yZCBpcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS5cIikpLFxyXG4gICAgICAgICAgICBtYXAocmVzID0+IHRoaXMuc2lnbmFsclNlcnZpY2Uuc2VuZFRvQ2xpZW50R3JvdXAodGhpcy5ncm91cHNUb1NlbmQsIHRoaXMuZXZlbnROYW1lLCBkZWJ1Zy56TW9kZWwpKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKHptb2RlbDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkFmdGVyIHVwZGF0aW5nIERlYnVnIEZvcm0sIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIGlmICh6bW9kZWwgJiYgem1vZGVsLkRhdGEpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihkZWJ1Zy56TW9kZWwsIHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgICAgZmcucGF0Y2hWYWx1ZSh6bW9kZWwuRGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmZy5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgLy8gICB0aGlzLmFmdGVyVXBkYXRlTW9kZWwoZ3JvdXApO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICB9KSlcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqIFdvcmtmbG93IEJ1dHRvbiAqKioqKioqKioqKioqKioqKioqKlxyXG4gIC8vIG5vdCBpbiB1c2UsIHBsYW4gdG8gZW5oYW5jZSBmb3IgdGhlIHVzYWdlIGZvciBmdXR1cmUuXHJcbiAgcHVibGljIGxvYWRXb3JrZmxvd0RhdGEoKSB7XHJcbiAgICBjb25zdCB6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmRlYnVnLCAnemdyaWRfV29ya2Zsb3dCdXR0b25HcmlkJyk7XHJcbiAgICBpZiAoemdyaWRfV29ya2Zsb3dCdXR0b25HcmlkKSB7XHJcbiAgICAgIHpncmlkX1dvcmtmbG93QnV0dG9uR3JpZC5zZXREYXRhKHRoaXMuZGVidWcuekRhdGEuY29sbGVjdGVkV29ya2Zsb3dCdXR0b25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ3JpZFdvcmtmbG93QnV0dG9uT25JdGVtQ2xpY2soZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZGF0YUl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCBldmVudC5kYXRhSXRlbSk7XHJcbiAgICBjb25zdCBmaWVsZCA9IGRhdGFJdGVtLnJlZkZpZWxkO1xyXG4gICAgY29uc3QgYXR0cmlidXRlID0gZGF0YUl0ZW0ucmVmQXR0cmlidXRlO1xyXG5cclxuICAgIC8vIEdldCBNYXBwZWQgSW5mb1xyXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxyXG4gICAgICAuc2V0KFwiQnV0dG9uSWRcIiwgZmllbGQuSWQpO1xyXG4gICAgdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JCh0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoXCJlMXdmc193ZmNfZ2V0bWFwcGVkQnV0dG9uSW5mb1VSTFwiKSwgcGFyYW1zKS5waXBlKFxyXG4gICAgICBtYXAoYXN5bmMgcmVzID0+IHtcclxuICAgICAgICBsZXQgcm9sZUluZm8gPSBbXTtcclxuICAgICAgICBsZXQgc3RhdHVzSW5mbyA9IFtdO1xyXG4gICAgICAgIGxldCBwYXJlbnRTdGF0dXNJbmZvID0gW107XHJcblxyXG4gICAgICAgIGlmIChyZXMuTWFwcGVkUm9sZUxpc3QpIHtcclxuICAgICAgICAgIHJvbGVJbmZvID0gcmVzLk1hcHBlZFJvbGVMaXN0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlcy5NYXBwZWRTdGF0dXNMaXN0KSB7XHJcbiAgICAgICAgICByZXMuTWFwcGVkU3RhdHVzTGlzdC5mb3JFYWNoKChfc3RhdHVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgc3RhdHVzSW5mby5wdXNoKF9zdGF0dXMuTmFtZSArICcgKCcgKyBfc3RhdHVzLkNvZGUgKyAnKScpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzLk1hcHBlZFBhcmVudFN0YXR1c0xpc3QpIHtcclxuICAgICAgICAgIHJlcy5NYXBwZWRQYXJlbnRTdGF0dXNMaXN0LmZvckVhY2goKF9wYXJlbnRTdGF0dXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBwYXJlbnRTdGF0dXNJbmZvLnB1c2goX3BhcmVudFN0YXR1cy5OYW1lICsgJyAoJyArIF9wYXJlbnRTdGF0dXMuQ29kZSArICcpJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IF9tYXBwZWRJbmZvID0ge1xyXG4gICAgICAgICAgJ21hcHBlZFJvbGVJbmZvJzogcm9sZUluZm8ubGVuZ3RoID4gMCA/IHJvbGVJbmZvIDogJ04uQS4nLFxyXG4gICAgICAgICAgJ21hcHBlZFN0YXR1c0luZm8nOiBzdGF0dXNJbmZvLmxlbmd0aCA+IDAgPyBzdGF0dXNJbmZvIDogJ04uQS4nLFxyXG4gICAgICAgICAgJ21hcHBlZFBhcmVudFN0YXR1c0luZm8nOiBwYXJlbnRTdGF0dXNJbmZvLmxlbmd0aCA+IDAgPyBwYXJlbnRTdGF0dXNJbmZvIDogJ04uQS4nXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gcmV0cmVpdmUgYWxsIGltcG9ydGFudCBpbmZvXHJcbiAgICAgICAgY29uc3QgX2J1dHRvbkluZm8gPSB7XHJcbiAgICAgICAgICAnV29ya2Zsb3dJZCc6IGZpZWxkLldvcmtmbG93SWQsXHJcbiAgICAgICAgICAnQnV0dG9uSWQnOiBmaWVsZC5JZCxcclxuICAgICAgICAgICdCdXR0b25OYW1lJzogZmllbGQuTmFtZSxcclxuICAgICAgICAgICdCdXR0b25Db2RlJzogZmllbGQuQ29kZSxcclxuICAgICAgICAgICdCdXR0b25UeXBlSWQnOiBmaWVsZC5UeXBlLklkLFxyXG4gICAgICAgICAgJ0J1dHRvblR5cGVOYW1lJzogZmllbGQuVHlwZS5OYW1lLFxyXG4gICAgICAgICAgJ0J1dHRvblR5cGVDb2RlJzogZmllbGQuVHlwZS5Db2RlLFxyXG4gICAgICAgICAgJ0J1dHRvblZpc2libGUnOiBhdHRyaWJ1dGUuVmlzaWJsZSxcclxuICAgICAgICAgICdCdXR0b25DbGlja0V2ZW50JzogYXR0cmlidXRlLkNsaWNrRXZlbnQsXHJcbiAgICAgICAgICAnQnV0dG9uVVJMJzogYXR0cmlidXRlLlVSTCxcclxuICAgICAgICAgICdCdXR0b25JY29uJzogYXR0cmlidXRlLkljb25cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgX2dvdG9TdGF0dXNJbmZvID0ge1xyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNJZCc6ICdOLkEuJyxcclxuICAgICAgICAgICdHb3RvU3RhdHVzTmFtZSc6ICdOLkEuJyxcclxuICAgICAgICAgICdHb3RvU3RhdHVzQ29kZSc6ICdOLkEuJ1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChmaWVsZC5TdGF0dXMpIHtcclxuICAgICAgICAgIGNvbnN0IF9nb3RvU3RhdHVzID0gZmllbGQuU3RhdHVzXHJcbiAgICAgICAgICBfZ290b1N0YXR1c0luZm8gPSB7XHJcbiAgICAgICAgICAgICdHb3RvU3RhdHVzSWQnOiBfZ290b1N0YXR1cy5JZCxcclxuICAgICAgICAgICAgJ0dvdG9TdGF0dXNOYW1lJzogX2dvdG9TdGF0dXMuTmFtZSxcclxuICAgICAgICAgICAgJ0dvdG9TdGF0dXNDb2RlJzogX2dvdG9TdGF0dXMuQ29kZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJvcGVydGllc01vZGVsID0gT2JqZWN0LmFzc2lnbihfYnV0dG9uSW5mbywgX2dvdG9TdGF0dXNJbmZvLCBfbWFwcGVkSW5mbyk7XHJcbiAgICAgICAgdGhpcy5zaG93ek1vZGFsKFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZEVsZW1lbnROYW1lOiAnbXZXb3JrZmxvd0J1dHRvbkRlYnVnRm9ybScsXHJcbiAgICAgICAgICAgIHBhcmVudEdyb3VwOiB0aGlzLmRlYnVnLl9ncm91cCxcclxuICAgICAgICAgICAgek1vZGVsOiBwcm9wZXJ0aWVzTW9kZWwsXHJcbiAgICAgICAgICAgIGZvcm1IZWFkZXI6ICdXb3JrZmxvdyBCdXR0b24gSW5mbydcclxuICAgICAgICAgIH1cclxuICAgICAgICApLnN1YnNjcmliZSgobW9kYWxEYXRhOiBNb2RhbFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAobW9kYWxEYXRhLnJlc3BvbnNlVHlwZSA9PT0gXCJjYW5jZWxcIikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU3VjY2VzcyhyZXM6IFJlc3BvbnNlIHwgYW55LCBzdWNjZXNzTXNnOiBzdHJpbmcpOiBSZXNwb25zZSB7XHJcbiAgICBpZiAocmVzID09IG51bGwpIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyhzdWNjZXNzTXNnKTtcclxuICAgIH0gZWxzZSBpZiAocmVzLkRhdGEgIT09IHVuZGVmaW5lZCAmJiByZXMuUHJvY2Vzc2luZ1N0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChyZXMuUHJvY2Vzc2luZ1N0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcy5EYXRhKSkge1xyXG4gICAgICAgICAgcmVzLkRhdGEubWFwKHMgPT4gdGhpcy53ZWJBcGlTZXJ2aWNlLnNob3dIdHRwUmVzcG9uc2VNZXNzYWdlKE1FU1NBR0VUWVBFLlN1Y2Nlc3MsXHJcbiAgICAgICAgICAgIGAke3N1Y2Nlc3NNc2d9IDogJHtzLkNvc3RDb2RlfWAsIG51bGwpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy53ZWJBcGlTZXJ2aWNlLnNob3dIdHRwUmVzcG9uc2VNZXNzYWdlKE1FU1NBR0VUWVBFLlN1Y2Nlc3MsIHN1Y2Nlc3NNc2csIG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyhzdWNjZXNzTXNnKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvcihyZXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmhhbmRsZUVycm9yKHJlcyk7XHJcbiAgfVxyXG5cclxuICAvLyBDbG9uZSB0aGUgbWV0aG9kIGZyb20gbWFpbnNlcnZpY2U6IFRvIHByZXZlbnQgY2lyY3VsYXIgZGVwZW5kZW5jeSB3aGVuIGluamVjdCBtYWluIHNlcnZpY2VcclxuICBwdWJsaWMgc2hvd3pNb2RhbChtb2RhbFBhZ2VQYXJhbXM6IE1vZGFsUGFnZVBhcmFtcyk6IE9ic2VydmFibGU8TW9kYWxSZXNwb25zZT4ge1xyXG4gICAgaWYgKG1vZGFsUGFnZVBhcmFtcy5wYXJlbnRHcm91cCkge1xyXG4gICAgICAvLyBkaXNhYmxlIGlzVHJpZ2dlcmVkIGJlZm9yZSBkaXNwbGF5IHRoZSBwb3B1cC5cclxuICAgICAgbW9kYWxQYWdlUGFyYW1zLnBhcmVudEdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhtb2RhbFBhZ2VQYXJhbXMpO1xyXG4gIH1cclxufVxyXG4iXX0=
738
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUtsRCw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELDJDQUEyQztBQUMzQyxPQUFPLEVBQ3NCLHNCQUFzQixFQUFFLFlBQVksRUFBbUIsWUFBWSxFQUEyRCxRQUFRLEVBQUUsV0FBVyxFQUU3RyxnQkFBZ0IsRUFDM0QsTUFBTSxFQUM3QixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxzQ0FBc0MsRUFBNkIsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFLMUksTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUNVLE1BQWMsRUFDZCxZQUEwQixFQUMxQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsNEJBQTBELEVBQzFELFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFlBQTBCO1FBVjFCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix1QkFBa0IsR0FBbEIs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QkFDM0M7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDbkY7YUFDRjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELDZGQUE2RjtJQUN0RixVQUFVLENBQUMsZUFBZ0M7UUFDaEQsSUFBSSxlQUFlLENBQUMsV0FBVyxFQUFFO1lBQy9CLGdEQUFnRDtZQUNoRCxlQUFlLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDakQ7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7O21IQTMwQlUsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50IH0gZnJvbSAnaW9uaWMtc2VsZWN0YWJsZSc7XHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBvZiwgZm9ya0pvaW4sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwLCBzd2l0Y2hNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBBbGVydEJ1dHRvbiwgQWxlcnRTZXJ2aWNlLCBBc3NldHNBbGxvd2VkRXh0ZW5zaW9uLCBBc3NldHNGb2xkZXIsIEFzc2V0c05vZGVQYXJhbSwgQXNzZXRzUm91dGVzLCBBdXRoU2VydmljZSwgQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSwgRmllbGRTZXJ2aWNlLCBGb3JtVHlwZSwgTUVTU0FHRVRZUEUsXHJcbiAgTW9kYWxQYWdlUGFyYW1zLFxyXG4gIFJlc291cmNlQXBpU2VydmljZSwgU2lnbmFsclNlcnZpY2UsIFRvYXN0U2VydmljZSwgV2ViQXBpU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gIFpDb3JlU2VydmljZSwgWkZpZWxkLCBaR3JvdXAsIFpUcmVlVGVtcGxhdGVQYXJhbXNcclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IE1vZGFsUmVzcG9uc2UsIE1vZGFsU2VydmljZSB9IGZyb20gJ21taGdsb2JhbC16bW9kYWwnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlckRpcmVjdEFjY2Vzc1F1ZXJ5UGFyYW1LZXksIEZvcm1CdWlsZGVyRGlyZWN0QWNjZXNzUXVlcnlQYXJhbVZhbHVlLCBGb3JtQnVpbGRlclF1ZXJ5UGFyYW1EYXRhIH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgWkNvbXBvbmVudERlYnVnU2VydmljZSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGdyb3Vwc1RvU2VuZCA9IFsnb2F1dGgnXTtcclxuICBwdWJsaWMgcmVhZG9ubHkgZXZlbnROYW1lID0gJ0ZpZWxkRWxlbWVudCc7XHJcbiAgcHJpdmF0ZSBlbnZpcm9ubWVudCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlOiBDb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNpZ25hbHJTZXJ2aWNlOiBTaWduYWxyU2VydmljZSxcclxuICAgIHByaXZhdGUgemNvcmVTZXJ2aWNlOiBaQ29yZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLnpjb3JlU2VydmljZS5nZXRFbnZpcm9ubWVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzY29wZTogYW55O1xyXG5cclxuICBnZXQgZGVidWcoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnNjb3BlLmdyb3VwLl9kZWJ1ZztcclxuICB9XHJcblxyXG4gIGdldCBncm91cCgpOiBaR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NvcGUuZ3JvdXA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Jbml0RGVidWdnZXIoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgZ3JvdXAuX2RlYnVnID0gbmV3IFpHcm91cCh0cnVlKTtcclxuICAgIGdyb3VwLl9pc0RlYnVnZ2luZyA9IHRydWU7XHJcbiAgICBncm91cC5fZGVidWcuekRhdGEgPSB7XHJcbiAgICAgIGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLFxyXG4gICAgICBhY3Rpdml0eUNvdW50OiAwLFxyXG4gICAgICBjb2xsZWN0ZWRXb3JrZmxvd0J1dHRvbnM6IFtdLFxyXG4gICAgICB3b3JrZmxvd0J1dHRvbkNvdW50OiAwXHJcbiAgICB9O1xyXG4gICAgZ3JvdXAuX2RlYnVnLnpDb21wb25lbnRzID0ge307XHJcbiAgICBncm91cC5pc0xpc3RGb3JtID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIG9uU3RhcnREZWJ1Z2dlcihmaWVsZEVsZW1lbnRzOiBBcnJheTxaRmllbGQ+LCBtZTogYW55KSB7XHJcbiAgICB0aGlzLnNjb3BlID0gbWU7XHJcbiAgICBpZiAoIW1lLmdyb3VwLl9kZWJ1Zykge1xyXG4gICAgICBtZS5ncm91cC5fZGVidWcgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkOiBaR3JvdXAgPSBtZS5ncm91cC5fZGVidWc7XHJcbiAgICBtZS5mb3JtID0gbWUudG9Gb3JtR3JvdXAoZmllbGRFbGVtZW50cyk7XHJcbiAgICBkLmZvcm0gPSBtZS5mb3JtO1xyXG4gICAgaWYgKG1lLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICBtZS5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGQsIHtcclxuICAgICAgLy8gekRhdGE6IHsgY29sbGVjdGVkQWN0aXZpdGllczogW10sIGFjdGl2aXR5Q291bnQ6IDAgfSxcclxuICAgICAgek1vZGVsOiB7fSxcclxuICAgICAgc3ViamVjdDogbmV3IEJlaGF2aW9yU3ViamVjdDxaQ29tcG9uZW50T3V0cHV0RXZlbnQ+KG51bGwpLFxyXG4gICAgICBpc0VkaXQ6IHRydWUsXHJcbiAgICAgIGlzTmV3OiBmYWxzZSxcclxuICAgICAgX2RlYnVnOiBtZS5ncm91cC5fZGVidWcsXHJcbiAgICAgIF9ncm91cDogbWUuZ3JvdXAsXHJcbiAgICAgIHJlc291cmNlVVJMOiB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoJ2ZpZWxkJyksXHJcbiAgICAgIHRyZWVJdGVtVGVtcGxhdGU6IHRoaXMudHJlZUl0ZW1UZW1wbGF0ZSxcclxuICAgICAgb25JdGVtQ2xpY2s6IHRoaXMub25JdGVtQ2xpY2ssXHJcbiAgICAgIG9uVHJlZU5vZGVDaGFuZ2U6IHRoaXMub25UcmVlTm9kZUNoYW5nZSxcclxuICAgICAgb25BZGROb2RlOiB0aGlzLm9uQWRkTm9kZSxcclxuICAgICAgb25SZW1vdmVOb2RlOiB0aGlzLm9uUmVtb3ZlTm9kZSxcclxuICAgICAgdHJlZU5vZGVzRXhwYW5kQWxsOiB0aGlzLnRyZWVOb2Rlc0V4cGFuZEFsbCxcclxuICAgICAgdHJlZU5vZGVzQ29sbGFwc2VBbGw6IHRoaXMudHJlZU5vZGVzQ29sbGFwc2VBbGwsXHJcbiAgICAgIHJlZnJlc2hUcmVlTW9kZWw6IHRoaXMucmVmcmVzaFRyZWVNb2RlbCxcclxuICAgICAgZWRpdEluRm9ybUJ1aWxkZXI6IHRoaXMuZWRpdEluRm9ybUJ1aWxkZXIuYmluZCh0aGlzKSxcclxuICAgICAgYWRkTm9kZTogdGhpcy5hZGROb2RlLFxyXG4gICAgICByZWZyZXNoQWN0aXZpdHlMb2dEYXRhOiB0aGlzLmxvYWRHcmlkRGF0YS5iaW5kKHRoaXMpLFxyXG4gICAgICBHb1RvRmllbGRFbGVtZW50OiB0aGlzLmdvdG9GaWVsZEVsZW1lbnQuYmluZCh0aGlzKSxcclxuICAgICAgTGlzdFdhdGNoTmFtZTogdGhpcy5saXN0V2F0Y2hOYW1lLmJpbmQodGhpcyksXHJcbiAgICAgIG9uQ2hhbmdlV2F0Y2hOYW1lOiB0aGlzLm9uQ2hhbmdlV2F0Y2hOYW1lLmJpbmQodGhpcyksXHJcbiAgICAgIGdldFdhdGNoTmFtZTogdGhpcy5nZXRXYXRjaE5hbWUuYmluZCh0aGlzKSxcclxuICAgICAgZmllbGRFbGVtZW50b25FZGl0b3JDb2RlQ2hhbmdlOiB0aGlzLmZpZWxkRWxlbWVudG9uRWRpdG9yQ29kZUNoYW5nZS5iaW5kKHRoaXMpLFxyXG4gICAgICBncmlkQWN0aXZpdHlMb2dDb2x1bW5GaWVsZHM6IHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoXHJcbiAgICAgICAgJ2RlYnVnQWN0aXZpdHlMb2cnLFxyXG4gICAgICAgIEZvcm1UeXBlLmZvcm1GaWVsZCxcclxuICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgIFwiZGVidWdBY3Rpdml0eUxvZ0ZpZWxkXCJcclxuICAgICAgKSxcclxuICAgICAgZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2s6IHRoaXMuZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2suYmluZCh0aGlzKSxcclxuICAgICAgdXBkYXRlTW9kZWw6IHRoaXMudXBkYXRlTW9kZWwuYmluZCh0aGlzKSxcclxuICAgICAgaXNBbGxvd1VwZGF0ZUZpZWxkRWxlbWVudDogdHJ1ZSxcclxuICAgICAgaXNGaWVsZEVsZW1lbnRSZWFkT25seTogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgaWYgKCFkLnpEYXRhKSB7XHJcbiAgICAgIGQuekRhdGEgPSB7IGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLCBhY3Rpdml0eUNvdW50OiAwIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEhdGhpcy5lbnZpcm9ubWVudC5sb2FkVmlhQXNzZXQpIHtcclxuICAgICAgaWYgKCF0aGlzLnpjb3JlU2VydmljZS5pc0FwcFJ1bm5pbmdJbkxvY2FsaG9zdCgpKSB7XHJcbiAgICAgICAgZFsnaXNBbGxvd1VwZGF0ZUZpZWxkRWxlbWVudCddID0gZmFsc2U7XHJcbiAgICAgICAgZFsnaXNGaWVsZEVsZW1lbnRSZWFkT25seSddID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG1lLnN1YnNjcmlwdGlvbiA9IGQuc3ViamVjdC5zdWJzY3JpYmUoKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQpID0+XHJcbiAgICAgIHRoaXMuc3ViamVjdEV2ZW50KGV2ZW50LCBkLCB0aGlzKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnBhdGNoRmllbGRzUHJvcGVydHkoZmllbGRFbGVtZW50cyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubG9hZERlYnVnWk1vZGVsKG1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGF0Y2hGaWVsZHNQcm9wZXJ0eShmaWVsZEVsZW1lbnRzOiBBcnJheTxaRmllbGQ+KSB7XHJcbiAgICBmaWVsZEVsZW1lbnRzLmZvckVhY2goZmllbGRFbGVtZW50ID0+IHtcclxuICAgICAgdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkRWxlbWVudCk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkRWxlbWVudC5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnBhdGNoRmllbGRzUHJvcGVydHkoZmllbGRFbGVtZW50LlZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWREZWJ1Z1pNb2RlbChtZTogYW55KSB7XHJcbiAgICBjb25zdCBwcm9qZWN0SWQkID0gdGhpcy5nZXRQcm9qZWN0SWQoKTtcclxuICAgIGNvbnN0IGZvcm1UeXBlID0gbWUuZ3JvdXAuaXNMaXN0Rm9ybSA/IEZvcm1UeXBlLmxpc3RGaWVsZCA6IEZvcm1UeXBlLmZvcm1GaWVsZDtcclxuICAgIGNvbnN0IGZpZWxkRWxlbWVudEZvcm1OYW1lID0gbWUuZ3JvdXAuZmllbGROYW1lO1xyXG4gICAgY29uc3QgZmllbGR6TW9kZWwkID0gdGhpcy5nZXRGaWVsZHpNb2RlbChmb3JtVHlwZSwgZmllbGRFbGVtZW50Rm9ybU5hbWUpO1xyXG5cclxuICAgIHJldHVybiBmb3JrSm9pbihbcHJvamVjdElkJCwgZmllbGR6TW9kZWwkXSk7ICAvLyBFbWl0cyB3aGVuIGFsbCBvYnNlcnZhYmxlcyBjb21wbGV0ZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQcm9qZWN0SWQoKSB7XHJcbiAgICBjb25zdCBkZWJ1Z2dlckdyb3VwOiBaR3JvdXAgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdwcm9qZWN0c1VSTCcpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuZ2V0QXBpKHVybCwge30sIGRlYnVnZ2VyR3JvdXAuekRhdGEsICdQcm9qZWN0T3B0aW9ucycsIG51bGwsIGRlYnVnZ2VyR3JvdXAsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmllbGR6TW9kZWwodHlwZTogc3RyaW5nLCBmaWVsZEVsZW1lbnRGb3JtTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBpc0Zvcm1GaWVsZCA9IHR5cGUgPT09ICdGb3JtRmllbGQnO1xyXG5cclxuICAgIGlmICh0aGlzLmVudmlyb25tZW50LmxvYWRWaWFBc3NldCkge1xyXG4gICAgICByZXR1cm4gaXNGb3JtRmllbGQgPyB0aGlzLmdldEFzc2V0Rm9ybUZpZWxkek1vZGVsKGZpZWxkRWxlbWVudEZvcm1OYW1lKSA6IHRoaXMuZ2V0QXNzZXRMaXN0RmllbGR6TW9kZWwoZmllbGRFbGVtZW50Rm9ybU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc0Zvcm1GaWVsZCA/IHRoaXMuZ2V0Rm9ybUZpZWxkek1vZGVsKGZpZWxkRWxlbWVudEZvcm1OYW1lKSA6IHRoaXMuZ2V0TGlzdEZpZWxkek1vZGVsKGZpZWxkRWxlbWVudEZvcm1OYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZWRpdEluRm9ybUJ1aWxkZXIoYnV0dG9uRXZlbnQ6IGFueSwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgY29uc3Qgek1vZGVsID0gZ3JvdXAgJiYgZ3JvdXAuek1vZGVsID8gZ3JvdXAuek1vZGVsIDogdGhpcy5kZWJ1Zy56TW9kZWw7XHJcbiAgICBpZiAoek1vZGVsKSB7XHJcbiAgICAgIGNvbnN0IGlzQWxsb3dUb0FjY2Vzc0Zvcm1CdWlsZGVyT2JzID0gdGhpcy5lbnZpcm9ubWVudC5sb2FkVmlhQXNzZXQgPyB0aGlzLndlYkFwaVNlcnZpY2UuaXNBc3NldEh0dHBOb2RlQWN0aXZlKCkgOiBvZih0cnVlKTtcclxuICAgICAgaXNBbGxvd1RvQWNjZXNzRm9ybUJ1aWxkZXJPYnMucGlwZShcclxuICAgICAgICB0YXAoaXNBY3RpdmUgPT4ge1xyXG4gICAgICAgICAgaWYgKCFpc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KGBQbGVhc2Ugc3RhcnQgeW91ciBub2RlIHNlcnZlciBhbmQgdHJ5IGFnYWluLmAsICd0b3AnLCBmYWxzZSwgMjAwMCwgJ2RhbmdlcicsIGBMb2NhbCBOb2RlIFNlcnZlciAoUG9ydDogJHt0aGlzLmVudmlyb25tZW50Lm5vZGVTZXJ2ZXJQb3J0fSkgaXMgdW5yZWFjaGFibGVgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIG5vZGVTZXJ2ZXJQb3J0OiB0aGlzLmVudmlyb25tZW50Lm5vZGVTZXJ2ZXJQb3J0LFxyXG4gICAgICAgICAgICBpc0xvYWRWaWFBc3NldDogdGhpcy5lbnZpcm9ubWVudC5sb2FkVmlhQXNzZXQsXHJcbiAgICAgICAgICAgIGZpZWxkRWxlbWVudE5hbWU6IHpNb2RlbC5OYW1lLFxyXG4gICAgICAgICAgICBmb3JtVHlwZTogek1vZGVsLlR5cGUgPz8gRm9ybVR5cGUuZm9ybUZpZWxkXHJcbiAgICAgICAgICB9IGFzIEZvcm1CdWlsZGVyUXVlcnlQYXJhbURhdGE7XHJcblxyXG4gICAgICAgICAgY29uc3QgZGF0YVN0ciA9IHdpbmRvdy5idG9hKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuXHJcbiAgICAgICAgICBsZXQgb2F1dGhBZG1pblBvcnRhbFVSTCA9ICdodHRwczovL2Uxc2l0Lm11c2ltbWFzLmNvbS9PQXV0aEFkbWluV2ViJztcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudCAmJiB0aGlzLmVudmlyb25tZW50LmN1c3RvbVJlc291cmNlICYmIHRoaXMuZW52aXJvbm1lbnQuY3VzdG9tUmVzb3VyY2UubGVuZ3RoID4gMCAmJiB0aGlzLmVudmlyb25tZW50LmN1c3RvbVJlc291cmNlWzBdWydvYXV0aEFkbWluUG9ydGFsVXJsJ10pIHtcclxuICAgICAgICAgICAgb2F1dGhBZG1pblBvcnRhbFVSTCA9IHRoaXMuZW52aXJvbm1lbnQuY3VzdG9tUmVzb3VyY2VbMF1bJ29hdXRoQWRtaW5Qb3J0YWxVcmwnXTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhgUm91dGUgdG86ICAke29hdXRoQWRtaW5Qb3J0YWxVUkx9L29hdXRoYWRtaW4vZGlyZWN0LWFjY2Vzcz8ke0Zvcm1CdWlsZGVyRGlyZWN0QWNjZXNzUXVlcnlQYXJhbUtleS5Nb2R1bGV9PSR7Rm9ybUJ1aWxkZXJEaXJlY3RBY2Nlc3NRdWVyeVBhcmFtVmFsdWUuRm9ybUJ1aWxkZXJ9JiR7Rm9ybUJ1aWxkZXJEaXJlY3RBY2Nlc3NRdWVyeVBhcmFtS2V5LkRhdGF9PSR7ZGF0YVN0cn1gKTtcclxuICAgICAgICAgIHdpbmRvdy5vcGVuKGAke29hdXRoQWRtaW5Qb3J0YWxVUkx9L29hdXRoYWRtaW4vZGlyZWN0LWFjY2Vzcz8ke0Zvcm1CdWlsZGVyRGlyZWN0QWNjZXNzUXVlcnlQYXJhbUtleS5Nb2R1bGV9PSR7Rm9ybUJ1aWxkZXJEaXJlY3RBY2Nlc3NRdWVyeVBhcmFtVmFsdWUuRm9ybUJ1aWxkZXJ9JiR7Rm9ybUJ1aWxkZXJEaXJlY3RBY2Nlc3NRdWVyeVBhcmFtS2V5LkRhdGF9PSR7ZGF0YVN0cn1gLCBcIl9ibGFua1wiKTtcclxuICAgICAgICB9KVxyXG4gICAgICApLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGb3JtRmllbGR6TW9kZWwoZmllbGRFbGVtZW50Rm9ybU5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGVidWdnZXJHcm91cDogWkdyb3VwID0gdGhpcy5kZWJ1ZztcclxuICAgIGNvbnN0IGZpZWxkVXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZCcpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQoZmllbGRVcmwsIHsgbmFtZTogZmllbGRFbGVtZW50Rm9ybU5hbWUsIHR5cGU6IEZvcm1UeXBlLmZvcm1GaWVsZCB9KS5waXBlKFxyXG4gICAgICB0YXAoKHJlc3BEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygncmVzcERhdGE6ICcsIHJlc3BEYXRhKTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnZ2VyR3JvdXAuek1vZGVsLCByZXNwRGF0YSk7XHJcbiAgICAgICAgZGVidWdnZXJHcm91cC5mb3JtLnBhdGNoVmFsdWUoZGVidWdnZXJHcm91cC56TW9kZWwpO1xyXG4gICAgICAgIGRlYnVnZ2VyR3JvdXAuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IEpTT04ucGFyc2UoZGVidWdnZXJHcm91cC56TW9kZWwuQ29kZSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkZWJ1Z2dlckdyb3VwLCB7XHJcbiAgICAgICAgICB0cmVlTW9kZWw6IFpDb21wb25lbnRIZWxwZXIuY29udmVydFRyZWVNb2RlbChmaWVsZHMpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRMaXN0RmllbGR6TW9kZWwoZmllbGRFbGVtZW50Rm9ybU5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGVidWdnZXJHcm91cCA9IHRoaXMuZGVidWc7XHJcbiAgICBjb25zdCBmaWVsZHNNYXBwaW5nVXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZHNNYXBwaW5nJyk7XHJcbiAgICBjb25zdCBmaWVsZFVybCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCgnZmllbGQnKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBHZXQkKGZpZWxkc01hcHBpbmdVcmwsIHsgbmFtZTogZmllbGRFbGVtZW50Rm9ybU5hbWUgfSkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKChmaWVsZE1hcHBpbmc6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIEZldGNoIGZpZWxkIGRhdGEgYmFzZWQgb24gRmllbGRFbGVtZW50TWFzdGVySWRcclxuICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBHZXQkKGZpZWxkVXJsLCB7IGlkOiBmaWVsZE1hcHBpbmcuRmllbGRFbGVtZW50TWFzdGVySWQgfSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKHJlc3BEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBVcGRhdGUgZGVidWdnZXJHcm91cCB3aXRoIGZpZWxkIGRhdGFcclxuICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnZ2VyR3JvdXAuek1vZGVsLCByZXNwRGF0YSk7XHJcblxyXG4gICAgICAgIGRlYnVnZ2VyR3JvdXAuZm9ybS5wYXRjaFZhbHVlKGRlYnVnZ2VyR3JvdXAuek1vZGVsKTtcclxuICAgICAgICBkZWJ1Z2dlckdyb3VwLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuXHJcbiAgICAgICAgLy8gUGFyc2UgYW5kIGNvbnZlcnQgQ29kZSB0byB0cmVlTW9kZWxcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgZmllbGRzID0gSlNPTi5wYXJzZShkZWJ1Z2dlckdyb3VwLnpNb2RlbC5Db2RlKTtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWdnZXJHcm91cCwge1xyXG4gICAgICAgICAgICB0cmVlTW9kZWw6IFpDb21wb25lbnRIZWxwZXIuY29udmVydFRyZWVNb2RlbChmaWVsZHMpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBKU09OOicsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFzc2V0Rm9ybUZpZWxkek1vZGVsKGZpZWxkRWxlbWVudEZvcm1OYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRlYnVnZ2VyR3JvdXA6IFpHcm91cCA9IHRoaXMuZGVidWc7XHJcbiAgICBjb25zdCBwYXJhbTogQXNzZXRzTm9kZVBhcmFtID0ge1xyXG4gICAgICBhc3NldHNGb2xkZXI6IEFzc2V0c0ZvbGRlci5maWVsZGVsZW1lbnQsXHJcbiAgICAgIG5hbWU6IGZpZWxkRWxlbWVudEZvcm1OYW1lLFxyXG4gICAgICBleHRlbnNpb246IEFzc2V0c0FsbG93ZWRFeHRlbnNpb24uanNvblxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmFzc2V0c0h0dHBMb2NhbEdldChwYXJhbSkucGlwZShcclxuICAgICAgdGFwKChyZXNwRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWdnZXJHcm91cC56TW9kZWwsIHJlc3BEYXRhKTtcclxuICAgICAgICAgIGRlYnVnZ2VyR3JvdXAuZm9ybS5wYXRjaFZhbHVlKGRlYnVnZ2VyR3JvdXAuek1vZGVsKTtcclxuICAgICAgICAgIGRlYnVnZ2VyR3JvdXAuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG5cclxuICAgICAgICAgIGlmICghWkNvbXBvbmVudEhlbHBlci5pc0pzb24oZGVidWdnZXJHcm91cC56TW9kZWwuQ29kZSkpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihkZWJ1Z2dlckdyb3VwLCB7XHJcbiAgICAgICAgICAgICAgdHJlZU1vZGVsOiBaQ29tcG9uZW50SGVscGVyLmNvbnZlcnRUcmVlTW9kZWwoSlNPTi5wYXJzZShkZWJ1Z2dlckdyb3VwLnpNb2RlbC5Db2RlKSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihkZWJ1Z2dlckdyb3VwLCB7XHJcbiAgICAgICAgICAgICAgdHJlZU1vZGVsOiBaQ29tcG9uZW50SGVscGVyLmNvbnZlcnRUcmVlTW9kZWwoZGVidWdnZXJHcm91cC56TW9kZWwuQ29kZSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBKU09OOicsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBc3NldExpc3RGaWVsZHpNb2RlbChmaWVsZEVsZW1lbnRGb3JtTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBsaXN0UGFyYW06IEFzc2V0c05vZGVQYXJhbSA9IHtcclxuICAgICAgYXNzZXRzRm9sZGVyOiBBc3NldHNGb2xkZXIubGlzdGZpZWxkbWFwcGluZyxcclxuICAgICAgbmFtZTogZmllbGRFbGVtZW50Rm9ybU5hbWUsXHJcbiAgICAgIGV4dGVuc2lvbjogQXNzZXRzQWxsb3dlZEV4dGVuc2lvbi5qc29uXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5hc3NldHNIdHRwTG9jYWxHZXQobGlzdFBhcmFtKS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKGZpZWxkTWFwcGluZzogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXNzZXRGb3JtRmllbGR6TW9kZWwoZmllbGRNYXBwaW5nLkZpZWxkRWxlbWVudE1hc3Rlck5hbWUpXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YmplY3RFdmVudChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBpZiAoIWV2ZW50IHx8ICFldmVudC50YXJnZXQgfHwgZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoXCJtb2RhbEdyb3VwLlwiKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcIioqIERlYnVnIC0gU3ViamVjdEV2ZW50XCIsIGV2ZW50KTtcclxuICAgIGxldCBjYWxsRnVuYztcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICBtZSxcclxuICAgICAgICBldmVudC50YXJnZXRcclxuICAgICAgKTtcclxuICAgICAgLy8gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGV2ZW50LlRhcmdldCwgZ3JvdXApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS53YXJuKGBFcnJvciBpbiBnZXRHcm91cFZhbHVlLiBFdmVudCB0YXJnZXQ6ICR7ZXZlbnQudGFyZ2V0fS4gRXJyb3I6ICR7ZXJyb3J9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKG1lKTtcclxuICAgICAgbmV3RnVuYyhldmVudCwgZ3JvdXAsIG1lKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAoZXZlbnQudHlwZS5lbmRzV2l0aChcIm9uTmF2aWdhdGVUb1wiKSkge1xyXG4gICAgICAgIGNvbnN0IG5VcmwgPSBldmVudC50YXJnZXQucmVwbGFjZShcIi86aWRcIiwgXCIvXCIgKyBldmVudC5kYXRhKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbblVybF0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiemdyaWQtY2VsbENsaWNrXCIpIHtcclxuICAgICAgICBjb25zdCBjTmFtZSA9IGNhbGxGdW5jLnNsaWNlKDQpO1xyXG4gICAgICAgIHRoaXMuc2hvd3pNb2RhbChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGRFbGVtZW50TmFtZTogY05hbWUsXHJcbiAgICAgICAgICAgIGZpZWxkRWxlbWVudE9ic2VydmFibGUkOiBldmVudC5jb2x1bW5GaWVsZHMkLFxyXG4gICAgICAgICAgICBwYXJlbnRHcm91cDogZ3JvdXAsXHJcbiAgICAgICAgICAgIHpNb2RlbDoge30sXHJcbiAgICAgICAgICAgIGZvcm1IZWFkZXI6ICcnLFxyXG4gICAgICAgICAgICByZWZlcklkOiBldmVudC5kYXRhLklkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGlmIChldmVudC50eXBlID09PSBcInpncmlkLWNlbGxDbGlja1wiKSB7XHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLm5hdmlnYXRlVXJsKSB7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSBjYWxsRnVuYy5uYXZpZ2F0ZVVybC5yZXBsYWNlKFwiOmlkXCIsIGV2ZW50LmRhdGEuSWQpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLmZvcm1IZWFkZXIpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd3pNb2RhbChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpZWxkRWxlbWVudE5hbWU6IGNhbGxGdW5jLmN0cmxOYW1lLFxyXG4gICAgICAgICAgICAgIGZpZWxkRWxlbWVudE9ic2VydmFibGUkOiBldmVudC5jb2x1bW5GaWVsZHMkLFxyXG4gICAgICAgICAgICAgIHBhcmVudEdyb3VwOiBncm91cCxcclxuICAgICAgICAgICAgICB6TW9kZWw6IHt9LFxyXG4gICAgICAgICAgICAgIGZvcm1IZWFkZXI6IGNhbGxGdW5jLmZvcm1IZWFkZXIsXHJcbiAgICAgICAgICAgICAgcmVmZXJJZDogZXZlbnQuZGF0YS5JZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBjYWxsRnVuYyB0eXBlOiAke2NhbGxGdW5jfS4gRXZlbnQgdGFyZ2V0OiAke2V2ZW50LnRhcmdldH1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgRnVuY3Rpb24gbm90IGRlZmluZWQgaW4gZ3JvdXAuIFRhcmdldDogJHtldmVudC50YXJnZXR9LiBFdmVudCBkZXRhaWxzOiBgLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdyaWRBY3Rpdml0eUxvZ09uSXRlbUNsaWNrKGV2ZW50OiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdncmlkQWN0aXZpdHlMb2dPbkl0ZW1DbGljazogJywgZXZlbnQpO1xyXG4gICAgY29uc3QgcmVjID0gZXZlbnQuZGF0YUl0ZW07XHJcbiAgICBzd2l0Y2ggKHJlYy50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ0xpc3RGaWVsZCc6XHJcbiAgICAgIGNhc2UgJ0Zvcm1GaWVsZCc6XHJcbiAgICAgICAgdGhpcy5nZXRGaWVsZHpNb2RlbChyZWMudHlwZSwgcmVjLmFjdGl2aXR5TmFtZSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0VGFiKDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdSZXNvdXJjZVNlcnZlckFQSSc6XHJcbiAgICAgICAgY29uc3Qgd2F0Y2hOYW1lVmFsdWUgPSAnX2RlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXNbJyArIChyZWMuaW5kZXggLSAxKSArICddLnJlZmVyZW5jZSc7XHJcbiAgICAgICAgdGhpcy5zZXRXYXRjaE5hbWVWYWx1ZSh3YXRjaE5hbWVWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUYWIoMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0h0dHBHZXQkJzpcclxuICAgICAgY2FzZSAnSHR0cFBvc3QkJzpcclxuICAgICAgY2FzZSAnSHR0cFB1dCQnOlxyXG4gICAgICBjYXNlICdIdHRwRGVsZXRlJCc6XHJcbiAgICAgICAgdGhpcy5zZXRXYXRjaE5hbWVWYWx1ZSgnX2RlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXNbJyArIChyZWMuaW5kZXggLSAxKSArICddJyk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUYWIoMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdFRhYihpbmRleDogbnVtYmVyKSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIC8vIHRoaXMuZGVidWcuekNvbXBvbmVudHNbXCJ6dGFiX2RlYnVnZ2VyVGFic1wiXS5zdGF0ZS5sYXN0U2VsZWN0ZWRUYWJJbmRleCA9IGluZGV4O1xyXG4gICAgLy8gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnQodGhpcy5kZWJ1ZywgJ3p0YWJfZGVidWdnZXJUYWJzJykuc3RhdGUubGFzdFNlbGVjdGVkVGFiSW5kZXggPSBpbmRleDtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6dGFiX2RlYnVnZ2VyVGFicycpLnNlbGVjdFRhYihpbmRleCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFdhdGNoTmFtZVZhbHVlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGVidWcuek1vZGVsWydEZWJ1Z1dhdGNoTmFtZSddID0gbmV3VmFsdWU7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoJ1dhdGNoTmFtZScsIG5ld1ZhbHVlLCB0aGlzLmRlYnVnLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkR3JpZERhdGEoKSB7XHJcbiAgICBjb25zdCBhY3Rpdml0eUxvZ0dyaWQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmRlYnVnLCAnemdyaWRfQWN0aXZpdHlMb2dHcmlkJyk7XHJcbiAgICBpZiAoYWN0aXZpdHlMb2dHcmlkKSB7XHJcbiAgICAgIGFjdGl2aXR5TG9nR3JpZC5zZXREYXRhKHRoaXMuZGVidWcuekRhdGEuY29sbGVjdGVkQWN0aXZpdGllcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RXYXRjaE5hbWUoY29tcG9uZW50OiBJb25pY1NlbGVjdGFibGVDb21wb25lbnQsIHNlYXJjaFRleHQ6IHN0cmluZywgcGFnZU5vOiBudW1iZXIsXHJcbiAgICBtZTogYW55LCBkYXRhSXRlbTogYW55LCByZWNvcmRJZD86IHN0cmluZykge1xyXG5cclxuICAgIGNvbnN0IHdhdGNoTGlzdCA9IFtcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuek1vZGVsJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC56RGF0YScgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuZmllbGRzJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5mb3JtLnZhbHVlJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5iYWNrTmF2aWdhdGlvblBhZ2UnIH0sXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLnBhcmVudFJlZmVyZW5jZUZpZWxkJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5wYXJlbnRSZWZlcmVuY2VJZCcgfSxcclxuICAgICAgeyBOYW1lOiAnT2JqZWN0LmtleXMoZ3JvdXAuekNvbXBvbmVudHMpJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5ncmlkT3B0aW9ucy56Z3JpZC5ncmlkLmRhdGEnIH1cclxuICAgICAgLy8geyBOYW1lOiAnT2JqZWN0LmtleXMoX2RlYnVnLnpDb21wb25lbnRzKScgfSxcclxuICAgICAgLy8geyBOYW1lOiAnX2RlYnVnLnpNb2RlbCcgfSxcclxuICAgICAgLy8geyBOYW1lOiAnX2RlYnVnLnpEYXRhJyB9LFxyXG4gICAgICAvLyB7IE5hbWU6ICdfZGVidWcuekRhdGEuY29sbGVjdGVkQWN0aXZpdGllcycgfSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3QgYWRkaXRpb25hbFdhdGNoTGlzdCA9IHRoaXMuc2NvcGU/Lmdyb3VwPy5hZGRpdGlvbmFsV2F0Y2hMaXN0O1xyXG4gICAgaWYgKGFkZGl0aW9uYWxXYXRjaExpc3QpIHtcclxuICAgICAgYWRkaXRpb25hbFdhdGNoTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIHdhdGNoTGlzdC5wdXNoKHsgTmFtZTogaXRlbSB9KTtcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVzdWx0cztcclxuICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgIHJlc3VsdHMgPSB3YXRjaExpc3QuZmlsdGVyKChzKSA9PiBzLk5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkgIT09IC0xKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFnZU5vID09PSAwICYmIHNlYXJjaFRleHQpIHtcclxuICAgICAgcmV0dXJuIG9mKHsgZGF0YVNldDogcmVzdWx0cyB9KTtcclxuICAgIH0gZWxzZSBpZiAocGFnZU5vID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBvZih7IGRhdGFTZXQ6IHdhdGNoTGlzdCB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZih7IGRhdGFTZXQ6IFtdIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXYXRjaE5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWJ1Zy56TW9kZWwuRGVidWdXYXRjaE5hbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhbmdlV2F0Y2hOYW1lKGV2ZW50OiBhbnksIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdvbkNoYW5nZVdhdGNoTmFtZTogJywgZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGV2ZW50LmRhdGEudmFsdWU7XHJcbiAgICBpZiAobmV3VmFsdWUpIHtcclxuICAgICAgdGhpcy5kZWJ1Zy56TW9kZWxbJ0RlYnVnV2F0Y2hOYW1lJ10gPSBuZXdWYWx1ZS5yZXBsYWNlKCdncm91cCcsICdfZ3JvdXAnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmllbGRFbGVtZW50b25FZGl0b3JDb2RlQ2hhbmdlKGVsOiBaQ29tcG9uZW50T3V0cHV0RXZlbnQpIHtcclxuICAgIHRoaXMucmVmcmVzaFRyZWVNb2RlbCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgdHJlZU5vZGVzRXhwYW5kQWxsKCkge1xyXG4gICAgdGhpcy5kZWJ1Zy56Q29tcG9uZW50c1snenRyZWVfZGVidWdaVHJlZSddLmV4cGFuZEFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmVlTm9kZXNDb2xsYXBzZUFsbCgpIHtcclxuICAgIHRoaXMuZGVidWcuekNvbXBvbmVudHNbJ3p0cmVlX2RlYnVnWlRyZWUnXS5jb2xsYXBzZUFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoVHJlZU1vZGVsKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZCA9IEpTT04ucGFyc2UodGhpcy5kZWJ1Zy56TW9kZWwuQ29kZSk7XHJcbiAgICAgIC8vIHRoaXMuX2FkZE5vZGVzVG9UcmVlKGQpO1xyXG4gICAgICAvLyBncm91cFsndHJlZU1vZGVsJ10gPSB0aGlzLmNvbnZlcnRUcmVlTW9kZWwoZCk7XHJcbiAgICAgIHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddID0gWkNvbXBvbmVudEhlbHBlci5jb252ZXJ0VHJlZU1vZGVsKGQpO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmVlSXRlbVRlbXBsYXRlKGVsOiBaVHJlZVRlbXBsYXRlUGFyYW1zKSB7XHJcbiAgICBjb25zdCBnZXRGaWVsZFZhbHVlID0gKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGl0ZW0uX0RhdGFWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiBpdGVtLl9EYXRhVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFwiLi4uXCI7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZWwuZGF0YUl0ZW0uTmFtZSArXHJcbiAgICAgIFwiIC0gW1wiICtcclxuICAgICAgZWwuZGF0YUl0ZW0uVHlwZSArXHJcbiAgICAgIFwiXSA9IFwiICtcclxuICAgICAgZ2V0RmllbGRWYWx1ZShlbC5kYXRhSXRlbSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkl0ZW1DbGljayhldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIGNvbnNvbGUubG9nKFwib25JdGVtQ2xpY2sgZGF0YSByZWNlaXZlZDogXCIsIGV2ZW50KTtcclxuICAgIGNvbnN0IGRhdGFJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgZXZlbnQuZGF0YSk7XHJcbiAgICBkYXRhSXRlbS5WYWx1ZSA9IGRhdGFJdGVtLl9EYXRhVmFsdWU7XHJcbiAgICBkZWxldGUgZGF0YUl0ZW0uX0RhdGFWYWx1ZTtcclxuICAgIGNvbnN0IHptb2RlbCA9IHtcclxuICAgICAgbm9kZU1vZGVsOiBKU09OLnN0cmluZ2lmeShkYXRhSXRlbSwgbnVsbCwgMilcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zaG93ek1vZGFsKFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGRFbGVtZW50TmFtZTogJ2lvbm12RWRpdEZpZWxkTm9kZUZvcm0nLFxyXG4gICAgICAgIHBhcmVudEdyb3VwOiB0aGlzLmRlYnVnLl9ncm91cCxcclxuICAgICAgICB6TW9kZWw6IHptb2RlbCxcclxuICAgICAgICBmb3JtSGVhZGVyOiAnRmllbGQgRWxlbWVudCBJbmZvJ1xyXG4gICAgICB9XHJcbiAgICApLnN1YnNjcmliZSgobW9kYWxEYXRhOiBNb2RhbFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChtb2RhbERhdGEucmVzcG9uc2VUeXBlID09PSBcImNhbmNlbFwiKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBKU09OLnBhcnNlKG1vZGFsRGF0YS5kYXRhLm5vZGVNb2RlbCk7XHJcbiAgICAgIGlmIChuZXdEYXRhLlZhbHVlKSB7XHJcbiAgICAgICAgbmV3RGF0YS5fRGF0YVZhbHVlID0gbmV3RGF0YS5WYWx1ZTtcclxuICAgICAgICBuZXdEYXRhLlZhbHVlID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVwZGF0ZVRyZWVOb2RlKG5ld0RhdGEsIHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddLCBldmVudC5ldmVudCk7XHJcbiAgICAgIGNvbnN0IG5ld1RyZWVNb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10pKTtcclxuICAgICAgY29uc3QgcmV2ZXJ0ZWRNb2RlbCA9IFpDb21wb25lbnRIZWxwZXIucmV2ZXJ0VHJlZU1vZGVsKG5ld1RyZWVNb2RlbCk7XHJcbiAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBuZXdDb2RlLCB0aGlzLmRlYnVnKTtcclxuICAgICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gICAgICAvLyB0aGlzLm1haW5TZXJ2aWNlLnVwZGF0ZU1vZGVsKG51bGwsIHRoaXMuZGVidWcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyZWVOb2RlKG5ld05vZGU6IGFueSwgdHJlZU1vZGVsOiBhbnksIGluZGV4OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHRyZWVJbmRleCA9IGluZGV4LnNwbGl0KFwiX1wiKTtcclxuICAgIGlmICh0cmVlSW5kZXgubGVuZ3RoID4gMSkge1xyXG4gICAgICBjb25zdCBuZXdJbmRleCA9IHRyZWVJbmRleC5zbGljZSgxKS5qb2luKFwiX1wiKTtcclxuICAgICAgdGhpcy51cGRhdGVUcmVlTm9kZShuZXdOb2RlLCB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWUsIG5ld0luZGV4KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlKSB7XHJcbiAgICAgICAgbmV3Tm9kZS5WYWx1ZSA9IHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0gPSBuZXdOb2RlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRUcmVlTm9kZShuZXdOb2RlOiBhbnksIHRyZWVNb2RlbDogYW55LCBpbmRleDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB0cmVlSW5kZXggPSBpbmRleC5zcGxpdChcIl9cIik7XHJcbiAgICBpZiAodHJlZUluZGV4Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc3QgbmV3SW5kZXggPSB0cmVlSW5kZXguc2xpY2UoMSkuam9pbihcIl9cIik7XHJcbiAgICAgIHRoaXMuaW5zZXJ0VHJlZU5vZGUobmV3Tm9kZSwgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlLCBuZXdJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodHJlZUluZGV4WzBdKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSkpIHtcclxuICAgICAgICAgIHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWUucHVzaChuZXdOb2RlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0cmVlTW9kZWwucHVzaChuZXdOb2RlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVUcmVlTm9kZSh0cmVlTW9kZWw6IGFueSwgaW5kZXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgdHJlZUluZGV4ID0gaW5kZXguc3BsaXQoXCJfXCIpO1xyXG4gICAgaWYgKHRyZWVJbmRleC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gdHJlZUluZGV4LnNsaWNlKDEpLmpvaW4oXCJfXCIpO1xyXG4gICAgICB0aGlzLnJlbW92ZVRyZWVOb2RlKHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSwgbmV3SW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJlZU1vZGVsLnNwbGljZSgrdHJlZUluZGV4WzBdLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UcmVlTm9kZUNoYW5nZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uVHJlZU5vZGVDaGFuZ2U6IFwiLCBlbCk7XHJcbiAgICBjb25zdCBjb2RlRGF0YSA9IEpTT04uc3RyaW5naWZ5KGVsLmRhdGEpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBjb2RlRGF0YSwgdGhpcy5kZWJ1Zyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZE5vZGUoKSB7XHJcbiAgICBjb25zdCBlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50ID0ge1xyXG4gICAgICBkYXRhOiB7fSxcclxuICAgICAgcm93RGF0YToge30sXHJcbiAgICAgIGV2ZW50OiBcIlwiLFxyXG4gICAgICB0YXJnZXQ6IFwiXCIsXHJcbiAgICAgIHR5cGU6IFwiXCIsXHJcbiAgICAgIGNvbHVtbkZpZWxkcyQ6IG51bGxcclxuICAgIH07XHJcbiAgICB0aGlzLm9uQWRkTm9kZShlbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9uQWRkTm9kZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZygnb25BZGROb2RlIGlzIGNhbGxlZCcsIGVsKTtcclxuICAgIC8vIGNvbnN0IGRhdGFJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgZWwuZGF0YSk7XHJcbiAgICAvLyBkYXRhSXRlbS5WYWx1ZSA9IGRhdGFJdGVtLl9EYXRhVmFsdWU7XHJcbiAgICAvLyBkZWxldGUgZGF0YUl0ZW0uX0RhdGFWYWx1ZTtcclxuICAgIGNvbnN0IGluaXRpYWxNb2RlbCA9IHtcclxuICAgICAgTmFtZTogJ05hbWUnLCBEaXNwbGF5TmFtZTogJ05hbWUnLCBWYWx1ZTogJ05hbWUnLCBUeXBlOiAndGV4dCcsXHJcbiAgICAgIGdyaWRDb2xWaXNpYmxlOiB0cnVlLFxyXG4gICAgICB3aWR0aDogMTUwLFxyXG4gICAgICBtaW5XaWR0aDogMTAwLFxyXG4gICAgICBlbmFibGVGaWx0ZXJpbmc6IHRydWUsXHJcbiAgICAgIGVuYWJsZVNvcnRpbmc6IHRydWUsXHJcbiAgICAgIHBpbm5lZExlZnQ6IGZhbHNlLFxyXG4gICAgICBQbGFjZUhvbGRlcjogXCJOYW1lXCIsXHJcbiAgICAgIElzUmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBNaW5MZW5ndGg6IDIsXHJcbiAgICAgIE1heExlbmd0aDogNTAsXHJcbiAgICAgIExhYmVsOiBcIk5hbWU6XCIsXHJcbiAgICAgIERpdkNsYXNzOiBcImNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtNiBjb2wtbGctM1wiLFxyXG4gICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgIFNob3dMYWJlbDogdHJ1ZSxcclxuICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgLy9FbmFibGVIaWRpbmc6IHRydWUsXHJcbiAgICAgIC8vY2VsbEZpbHRlcjogXCJcIixcclxuICAgICAgLy9maWx0ZXJDZWxsRmlsdGVyZWQ6IGZhbHNlLFxyXG4gICAgICAvL2VuYWJsZVBpbm5pbmc6IHRydWUsXHJcbiAgICAgIC8vcGlubmVkUmlnaHQ6IGZhbHNlLFxyXG4gICAgICAvL1VwZGF0ZU9uQmx1cjogdHJ1ZSxcclxuICAgICAgLy9BcHBlbmREaXZDbGVhckZpeDogZmFsc2UsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgem1vZGVsID0ge1xyXG4gICAgICBub2RlTW9kZWw6IEpTT04uc3RyaW5naWZ5KGluaXRpYWxNb2RlbCwgbnVsbCwgMilcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zaG93ek1vZGFsKFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGRFbGVtZW50TmFtZTogJ2lvbm12RWRpdEZpZWxkTm9kZUZvcm0nLFxyXG4gICAgICAgIHBhcmVudEdyb3VwOiB0aGlzLmRlYnVnLl9ncm91cCxcclxuICAgICAgICB6TW9kZWw6IHptb2RlbCxcclxuICAgICAgICBmb3JtSGVhZGVyOiAnQWRkIEZpZWxkIEVsZW1lbnQgSXRlbSdcclxuICAgICAgfVxyXG4gICAgKS5zdWJzY3JpYmUoKG1vZGFsRGF0YTogTW9kYWxSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAobW9kYWxEYXRhLnJlc3BvbnNlVHlwZSA9PT0gXCJjYW5jZWxcIikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdEYXRhID0gSlNPTi5wYXJzZShtb2RhbERhdGEuZGF0YS5ub2RlTW9kZWwpO1xyXG4gICAgICBpZiAobmV3RGF0YS5WYWx1ZSkge1xyXG4gICAgICAgIG5ld0RhdGEuX0RhdGFWYWx1ZSA9IG5ld0RhdGEuVmFsdWU7XHJcbiAgICAgICAgbmV3RGF0YS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnNlcnRUcmVlTm9kZShuZXdEYXRhLCB0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgIGNvbnN0IG5ld1RyZWVNb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10pKTtcclxuICAgICAgY29uc3QgcmV2ZXJ0ZWRNb2RlbCA9IFpDb21wb25lbnRIZWxwZXIucmV2ZXJ0VHJlZU1vZGVsKG5ld1RyZWVNb2RlbCk7XHJcbiAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBuZXdDb2RlLCB0aGlzLmRlYnVnKTtcclxuICAgICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gICAgICAvLyB0aGlzLm1haW5TZXJ2aWNlLnVwZGF0ZU1vZGVsKG51bGwsIHRoaXMuZGVidWcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUmVtb3ZlTm9kZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93KCdSZW1vdmUgTm9kZScsICdBcmUgeW91IHN1cmU/JyxcclxuICAgICAgW1xyXG4gICAgICAgIHsgdGV4dDogXCJOb1wiLCBjc3NDbGFzczogXCJzZWNvbmRhcnlcIiB9IGFzIEFsZXJ0QnV0dG9uLFxyXG4gICAgICAgIHsgdGV4dDogXCJZZXNcIiwgY3NzQ2xhc3M6IFwicHJpbWFyeVwiIH0gYXMgQWxlcnRCdXR0b25cclxuICAgICAgXSlcclxuICAgICAgLnN1YnNjcmliZShyZXBseSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGx5ID09PSAnWWVzJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92ZSBOb2RlJywgZWwpO1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVUcmVlTm9kZSh0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgICAgICBjb25zdCBuZXdUcmVlTW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddKSk7XHJcbiAgICAgICAgICBjb25zdCByZXZlcnRlZE1vZGVsID0gWkNvbXBvbmVudEhlbHBlci5yZXZlcnRUcmVlTW9kZWwobmV3VHJlZU1vZGVsKTtcclxuICAgICAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShcIkNvZGVcIiwgbmV3Q29kZSwgdGhpcy5kZWJ1Zyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ290b0ZpZWxkRWxlbWVudCgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYWRtaW4vZmllbGQnXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU1vZGVsKCkge1xyXG4gICAgY29uc3QgZGVidWcgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgZmcgPSB0aGlzLmRlYnVnLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJUaGUgZGVidWcgZm9ybSBpcyBub3QgZGlydHksIHNvIHRoZSByZWNvcmQgaXMgbm90IHNhdmVkLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZmcudmFsaWQpIHtcclxuICAgICAgdGhpcy5jb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLnNob3dGb3JtR3JvdXBFcnJvck1lc3NhZ2UodGhpcy5ncm91cCwgZmcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb2YoZGVidWcuek1vZGVsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICAvLyBzd2l0Y2hNYXAoem1vZGVsID0+IHtcclxuICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwiQmVmb3JlIHVwZGF0ZSwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgIC8vICAgcmV0dXJuIHRoaXMuYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXApO1xyXG4gICAgICAgIC8vIH0pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5sb2FkVmlhQXNzZXQpIHtcclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHR5cGVvZiBkZWJ1Zy56TW9kZWwgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkZWJ1Zy56TW9kZWwpIDogZGVidWcuek1vZGVsO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbTogQXNzZXRzTm9kZVBhcmFtID0ge1xyXG4gICAgICAgICAgICAgIGlkOiBkZWJ1Zy56TW9kZWwuSWQsXHJcbiAgICAgICAgICAgICAgYXNzZXRzUm91dGU6IEFzc2V0c1JvdXRlcy5maWVsZHMsXHJcbiAgICAgICAgICAgICAgYXNzZXRzRm9sZGVyOiBBc3NldHNGb2xkZXIuZmllbGRlbGVtZW50LFxyXG4gICAgICAgICAgICAgIHBhcmFtczogcGF5bG9hZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuYXNzZXRzSHR0cE5vZGVQdXQocGFyYW0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgbWFwKHJlcyA9PiB0aGlzLmhhbmRsZVN1Y2Nlc3MocmVzLCBcIlJlY29yZCBpcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS5cIikpLFxyXG4gICAgICAgICAgICAgIG1hcChyZXMgPT4gdGhpcy5zaWduYWxyU2VydmljZS5zZW5kVG9DbGllbnRHcm91cCh0aGlzLmdyb3Vwc1RvU2VuZCwgdGhpcy5ldmVudE5hbWUsIGRlYnVnLnpNb2RlbCkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwUHV0JChgJHtkZWJ1Zy5yZXNvdXJjZVVSTH0vJHtkZWJ1Zy56TW9kZWwuSWR9YCwgZGVidWcuek1vZGVsKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAocmVzID0+IHRoaXMuaGFuZGxlU3VjY2VzcyhyZXMsIFwiUmVjb3JkIGlzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSksXHJcbiAgICAgICAgICAgIG1hcChyZXMgPT4gdGhpcy5zaWduYWxyU2VydmljZS5zZW5kVG9DbGllbnRHcm91cCh0aGlzLmdyb3Vwc1RvU2VuZCwgdGhpcy5ldmVudE5hbWUsIGRlYnVnLnpNb2RlbCkpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWZ0ZXIgdXBkYXRpbmcgRGVidWcgRm9ybSwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgICAgaWYgKHptb2RlbCAmJiB6bW9kZWwuRGF0YSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnLnpNb2RlbCwgem1vZGVsLkRhdGEpO1xyXG4gICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuYWZ0ZXJVcGRhdGVNb2RlbChncm91cCk7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKiogV29ya2Zsb3cgQnV0dG9uICoqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gbm90IGluIHVzZSwgcGxhbiB0byBlbmhhbmNlIGZvciB0aGUgdXNhZ2UgZm9yIGZ1dHVyZS5cclxuICBwdWJsaWMgbG9hZFdvcmtmbG93RGF0YSgpIHtcclxuICAgIGNvbnN0IHpncmlkX1dvcmtmbG93QnV0dG9uR3JpZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQnKTtcclxuICAgIGlmICh6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQpIHtcclxuICAgICAgemdyaWRfV29ya2Zsb3dCdXR0b25HcmlkLnNldERhdGEodGhpcy5kZWJ1Zy56RGF0YS5jb2xsZWN0ZWRXb3JrZmxvd0J1dHRvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBncmlkV29ya2Zsb3dCdXR0b25Pbkl0ZW1DbGljayhldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBkYXRhSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50LmRhdGFJdGVtKTtcclxuICAgIGNvbnN0IGZpZWxkID0gZGF0YUl0ZW0ucmVmRmllbGQ7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBkYXRhSXRlbS5yZWZBdHRyaWJ1dGU7XHJcblxyXG4gICAgLy8gR2V0IE1hcHBlZCBJbmZvXHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgIC5zZXQoXCJCdXR0b25JZFwiLCBmaWVsZC5JZCk7XHJcbiAgICB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTChcImUxd2ZzX3dmY19nZXRtYXBwZWRCdXR0b25JbmZvVVJMXCIpLCBwYXJhbXMpLnBpcGUoXHJcbiAgICAgIG1hcChhc3luYyByZXMgPT4ge1xyXG4gICAgICAgIGxldCByb2xlSW5mbyA9IFtdO1xyXG4gICAgICAgIGxldCBzdGF0dXNJbmZvID0gW107XHJcbiAgICAgICAgbGV0IHBhcmVudFN0YXR1c0luZm8gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHJlcy5NYXBwZWRSb2xlTGlzdCkge1xyXG4gICAgICAgICAgcm9sZUluZm8gPSByZXMuTWFwcGVkUm9sZUxpc3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzLk1hcHBlZFN0YXR1c0xpc3QpIHtcclxuICAgICAgICAgIHJlcy5NYXBwZWRTdGF0dXNMaXN0LmZvckVhY2goKF9zdGF0dXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzdGF0dXNJbmZvLnB1c2goX3N0YXR1cy5OYW1lICsgJyAoJyArIF9zdGF0dXMuQ29kZSArICcpJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXMuTWFwcGVkUGFyZW50U3RhdHVzTGlzdCkge1xyXG4gICAgICAgICAgcmVzLk1hcHBlZFBhcmVudFN0YXR1c0xpc3QuZm9yRWFjaCgoX3BhcmVudFN0YXR1czogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHBhcmVudFN0YXR1c0luZm8ucHVzaChfcGFyZW50U3RhdHVzLk5hbWUgKyAnICgnICsgX3BhcmVudFN0YXR1cy5Db2RlICsgJyknKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgX21hcHBlZEluZm8gPSB7XHJcbiAgICAgICAgICAnbWFwcGVkUm9sZUluZm8nOiByb2xlSW5mby5sZW5ndGggPiAwID8gcm9sZUluZm8gOiAnTi5BLicsXHJcbiAgICAgICAgICAnbWFwcGVkU3RhdHVzSW5mbyc6IHN0YXR1c0luZm8ubGVuZ3RoID4gMCA/IHN0YXR1c0luZm8gOiAnTi5BLicsXHJcbiAgICAgICAgICAnbWFwcGVkUGFyZW50U3RhdHVzSW5mbyc6IHBhcmVudFN0YXR1c0luZm8ubGVuZ3RoID4gMCA/IHBhcmVudFN0YXR1c0luZm8gOiAnTi5BLidcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyByZXRyZWl2ZSBhbGwgaW1wb3J0YW50IGluZm9cclxuICAgICAgICBjb25zdCBfYnV0dG9uSW5mbyA9IHtcclxuICAgICAgICAgICdXb3JrZmxvd0lkJzogZmllbGQuV29ya2Zsb3dJZCxcclxuICAgICAgICAgICdCdXR0b25JZCc6IGZpZWxkLklkLFxyXG4gICAgICAgICAgJ0J1dHRvbk5hbWUnOiBmaWVsZC5OYW1lLFxyXG4gICAgICAgICAgJ0J1dHRvbkNvZGUnOiBmaWVsZC5Db2RlLFxyXG4gICAgICAgICAgJ0J1dHRvblR5cGVJZCc6IGZpZWxkLlR5cGUuSWQsXHJcbiAgICAgICAgICAnQnV0dG9uVHlwZU5hbWUnOiBmaWVsZC5UeXBlLk5hbWUsXHJcbiAgICAgICAgICAnQnV0dG9uVHlwZUNvZGUnOiBmaWVsZC5UeXBlLkNvZGUsXHJcbiAgICAgICAgICAnQnV0dG9uVmlzaWJsZSc6IGF0dHJpYnV0ZS5WaXNpYmxlLFxyXG4gICAgICAgICAgJ0J1dHRvbkNsaWNrRXZlbnQnOiBhdHRyaWJ1dGUuQ2xpY2tFdmVudCxcclxuICAgICAgICAgICdCdXR0b25VUkwnOiBhdHRyaWJ1dGUuVVJMLFxyXG4gICAgICAgICAgJ0J1dHRvbkljb24nOiBhdHRyaWJ1dGUuSWNvblxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBfZ290b1N0YXR1c0luZm8gPSB7XHJcbiAgICAgICAgICAnR290b1N0YXR1c0lkJzogJ04uQS4nLFxyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNOYW1lJzogJ04uQS4nLFxyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNDb2RlJzogJ04uQS4nXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKGZpZWxkLlN0YXR1cykge1xyXG4gICAgICAgICAgY29uc3QgX2dvdG9TdGF0dXMgPSBmaWVsZC5TdGF0dXNcclxuICAgICAgICAgIF9nb3RvU3RhdHVzSW5mbyA9IHtcclxuICAgICAgICAgICAgJ0dvdG9TdGF0dXNJZCc6IF9nb3RvU3RhdHVzLklkLFxyXG4gICAgICAgICAgICAnR290b1N0YXR1c05hbWUnOiBfZ290b1N0YXR1cy5OYW1lLFxyXG4gICAgICAgICAgICAnR290b1N0YXR1c0NvZGUnOiBfZ290b1N0YXR1cy5Db2RlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzTW9kZWwgPSBPYmplY3QuYXNzaWduKF9idXR0b25JbmZvLCBfZ290b1N0YXR1c0luZm8sIF9tYXBwZWRJbmZvKTtcclxuICAgICAgICB0aGlzLnNob3d6TW9kYWwoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkRWxlbWVudE5hbWU6ICdtdldvcmtmbG93QnV0dG9uRGVidWdGb3JtJyxcclxuICAgICAgICAgICAgcGFyZW50R3JvdXA6IHRoaXMuZGVidWcuX2dyb3VwLFxyXG4gICAgICAgICAgICB6TW9kZWw6IHByb3BlcnRpZXNNb2RlbCxcclxuICAgICAgICAgICAgZm9ybUhlYWRlcjogJ1dvcmtmbG93IEJ1dHRvbiBJbmZvJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChtb2RhbERhdGE6IE1vZGFsUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChtb2RhbERhdGEucmVzcG9uc2VUeXBlID09PSBcImNhbmNlbFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTdWNjZXNzKHJlczogUmVzcG9uc2UgfCBhbnksIHN1Y2Nlc3NNc2c6IHN0cmluZyk6IFJlc3BvbnNlIHtcclxuICAgIGlmIChyZXMgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHN1Y2Nlc3NNc2cpO1xyXG4gICAgfSBlbHNlIGlmIChyZXMuRGF0YSAhPT0gdW5kZWZpbmVkICYmIHJlcy5Qcm9jZXNzaW5nU3RhdHVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHJlcy5Qcm9jZXNzaW5nU3RhdHVzID09PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzLkRhdGEpKSB7XHJcbiAgICAgICAgICByZXMuRGF0YS5tYXAocyA9PiB0aGlzLndlYkFwaVNlcnZpY2Uuc2hvd0h0dHBSZXNwb25zZU1lc3NhZ2UoTUVTU0FHRVRZUEUuU3VjY2VzcyxcclxuICAgICAgICAgICAgYCR7c3VjY2Vzc01zZ30gOiAke3MuQ29zdENvZGV9YCwgbnVsbCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2Uuc2hvd0h0dHBSZXNwb25zZU1lc3NhZ2UoTUVTU0FHRVRZUEUuU3VjY2Vzcywgc3VjY2Vzc01zZywgbnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHN1Y2Nlc3NNc2cpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGhhbmRsZUVycm9yKHJlczogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaGFuZGxlRXJyb3IocmVzKTtcclxuICB9XHJcblxyXG4gIC8vIENsb25lIHRoZSBtZXRob2QgZnJvbSBtYWluc2VydmljZTogVG8gcHJldmVudCBjaXJjdWxhciBkZXBlbmRlbmN5IHdoZW4gaW5qZWN0IG1haW4gc2VydmljZVxyXG4gIHB1YmxpYyBzaG93ek1vZGFsKG1vZGFsUGFnZVBhcmFtczogTW9kYWxQYWdlUGFyYW1zKTogT2JzZXJ2YWJsZTxNb2RhbFJlc3BvbnNlPiB7XHJcbiAgICBpZiAobW9kYWxQYWdlUGFyYW1zLnBhcmVudEdyb3VwKSB7XHJcbiAgICAgIC8vIGRpc2FibGUgaXNUcmlnZ2VyZWQgYmVmb3JlIGRpc3BsYXkgdGhlIHBvcHVwLlxyXG4gICAgICBtb2RhbFBhZ2VQYXJhbXMucGFyZW50R3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZS5zaG93KG1vZGFsUGFnZVBhcmFtcyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==