@rangertechnologies/ngnxt 2.1.160 → 2.1.162

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.
@@ -9,9 +9,7 @@ export class PdfDesignerService {
9
9
  selectedElementSubject = new BehaviorSubject(-1);
10
10
  selectHeaderSubject = new BehaviorSubject(null);
11
11
  elementComponent = null;
12
- summaryRowData;
13
12
  pdf;
14
- data;
15
13
  unique_id;
16
14
  tempElem;
17
15
  pdfElements$ = this.pdfElementsSubject.asObservable();
@@ -208,43 +206,146 @@ export class PdfDesignerService {
208
206
  return this.pdf;
209
207
  }
210
208
  downloadElement() {
211
- // Make sure all elements have their latest values
212
209
  this.pdfElements.forEach(element => {
213
- // Use question if available, otherwise use value
214
210
  if (element.type === 'text') {
215
211
  element.value = element.question || element.value || '';
216
212
  }
213
+ if (element.subText && typeof element.subText === 'object') {
214
+ element.subText = JSON.stringify(element.subText);
215
+ }
216
+ if (element.pdfReferenceQuestions) {
217
+ delete element.pdfReferenceQuestions;
218
+ }
217
219
  });
218
220
  this.pdf[this.unique_id] = this.pdfElements;
219
221
  this.pdf['pdfJson'] = this.convertToPdfLayout(this.pdf);
220
- console.log("pdfJson", this.pdf.pdfJson);
221
- this.pdf?.pdfJson?.content?.forEach((item) => {
222
- if (typeof item.width === 'number') {
223
- item.width = item.width * 5.2;
224
- }
222
+ // Scale widths for columns
223
+ this.pdf?.pdfJson?.content?.forEach((row) => {
224
+ row.columns?.forEach((col) => {
225
+ if (typeof col.width === 'number' && col.width < 520) {
226
+ col.width = col.width * 5.2;
227
+ }
228
+ });
225
229
  });
230
+ console.log('pdf', this.pdf.pdfJson);
226
231
  return this.pdf;
227
232
  }
228
- getDocumentDefinition() {
229
- // AP-06MAR25 - Get the document definition for PDF generation
230
- const pdfData = this.downloadElement();
231
- const documentDefinition = {
232
- content: pdfData.pdfJson.content,
233
- styles: {
234
- header: {
235
- fontSize: 18,
236
- bold: true,
237
- margin: [0, 0, 0, 10]
238
- },
239
- subheader: {
240
- fontSize: 14,
241
- bold: true,
242
- margin: [0, 10, 0, 5]
243
- },
244
- // Add more styles as needed
233
+ convertToPdfLayout(input) {
234
+ const result = { content: [] };
235
+ const items = input[this.unique_id];
236
+ const styleProps = (item) => ({
237
+ fontSize: item.fontSize || 14,
238
+ bold: item.fontStyle === 'bold' || item.fontWeight >= 700,
239
+ italics: item.fontStyle === 'italic',
240
+ alignment: item.alignItems || '',
241
+ margin: item.margin || [0, 0, 0, 0]
242
+ });
243
+ const processItems = (items) => {
244
+ const rows = [];
245
+ let currentRow = { columns: [] };
246
+ let currentWidth = 0;
247
+ for (const item of items) {
248
+ const width = item.width || 100;
249
+ let element = { width, ...styleProps(item) };
250
+ if (currentWidth + width > 100) {
251
+ rows.push(currentRow);
252
+ currentRow = { columns: [] };
253
+ currentWidth = 0;
254
+ }
255
+ // if (item.type === 'text') {
256
+ // element.text = (item.question || item.value || '').replace(/\\n/g, '\n');
257
+ // }
258
+ if (item.type === "Space") {
259
+ currentRow.columns.push({ width, text: '', ...styleProps(item) });
260
+ }
261
+ else if (item.type === 'Line') {
262
+ element.canvas = [
263
+ {
264
+ type: 'line',
265
+ x1: item.x1 ?? 0,
266
+ y1: item.y1 ?? 0,
267
+ x2: item.x2 ?? 520,
268
+ y2: item.y2 ?? 0,
269
+ lineWidth: item.lineWidth ?? 1,
270
+ lineColor: item.lineColor ?? '#000000'
271
+ }
272
+ ];
273
+ currentRow.columns.push(element);
274
+ }
275
+ else if (item.type === "Pdf" && item.pdfReference) {
276
+ const nestedQuestions = input[this.unique_id].find(q => q.id === item.pdfReference)?.children || [];
277
+ const nestedContent = processItems(nestedQuestions);
278
+ if (currentRow.columns.length > 0) {
279
+ rows.push(currentRow);
280
+ currentRow = { columns: [] };
281
+ currentWidth = 0;
282
+ }
283
+ rows.push(...nestedContent);
284
+ }
285
+ else if (item.type === 'Table') {
286
+ const tableColumns = item.fieldsMeta || [];
287
+ const visibleCount = Math.min(3, tableColumns.length);
288
+ const mainColumns = tableColumns.slice(0, visibleCount);
289
+ const summaryColumns = tableColumns.slice(visibleCount);
290
+ const body = [];
291
+ // Table headers
292
+ body.push(mainColumns.map(col => ({
293
+ text: col.label,
294
+ ...styleProps(item)
295
+ })));
296
+ // Field names
297
+ body.push(mainColumns.map(col => ({
298
+ text: col.apiName,
299
+ ...styleProps(item)
300
+ })));
301
+ // Summary rows
302
+ summaryColumns.forEach((col) => {
303
+ const row = new Array(visibleCount).fill({ text: '', ...styleProps(item) });
304
+ row[visibleCount - 2] = { text: col.label, ...styleProps(item) };
305
+ row[visibleCount - 1] = { text: col.apiName, ...styleProps(item) };
306
+ body.push(row);
307
+ });
308
+ element = {
309
+ width: item.width || 520,
310
+ table: {
311
+ body,
312
+ widths: new Array(visibleCount).fill('*')
313
+ },
314
+ layout: 'lightHorizontalLines',
315
+ ...styleProps(item)
316
+ };
317
+ currentRow.columns.push(element);
318
+ }
319
+ else if (item.type === 'image') {
320
+ currentRow.columns.push({
321
+ width,
322
+ image: item.imageData || '',
323
+ fit: [item.width || 100, item.height || 100],
324
+ ...styleProps(item)
325
+ });
326
+ }
327
+ else {
328
+ const val = item.value || '';
329
+ currentRow.columns.push({
330
+ width,
331
+ text: val,
332
+ ...styleProps(item)
333
+ });
334
+ }
335
+ currentWidth += width;
336
+ if (currentWidth === 100) {
337
+ rows.push(currentRow);
338
+ currentRow = { columns: [] };
339
+ currentWidth = 0;
340
+ }
245
341
  }
342
+ if (currentRow.columns.length > 0) {
343
+ rows.push(currentRow);
344
+ }
345
+ return rows;
246
346
  };
247
- return documentDefinition;
347
+ result.content = processItems(items);
348
+ return result;
248
349
  }
249
350
  // AP-06MAR25 - Element new order update
250
351
  updateElementsOrder(updatedElements) {
@@ -269,91 +370,13 @@ export class PdfDesignerService {
269
370
  elementUpdate(index, element) {
270
371
  const elements = [...this.getElements()];
271
372
  if (elements[index]) {
272
- elements[index] = {
273
- ...elements[index],
274
- ...element // This ensures all properties are updated
275
- };
373
+ elements[index] = element;
276
374
  this.pdfElements = elements;
277
375
  this.sortElementsByOrder();
278
376
  this.pdfElementsSubject.next([...elements]);
279
377
  this.selectedElementSubject.next(index);
280
378
  }
281
379
  }
282
- convertToPdfLayout(input) {
283
- const result = { content: [] };
284
- const items = input[this.unique_id];
285
- const styleProps = (item) => ({
286
- fontSize: item.fontSize || 14,
287
- bold: item.fontStyle === 'bold' || item.fontWeight >= 700,
288
- italics: item.fontStyle === 'italic',
289
- alignment: item.alignItems || 'center',
290
- margin: item.margin || [0, 0, 0, 0]
291
- });
292
- for (const item of items) {
293
- const width = item.width || '*';
294
- let element = { width, ...styleProps(item) };
295
- if (item.type === 'text') {
296
- element.text = (item.question || item.value || '').replace(/\\n/g, '\n');
297
- }
298
- else if (item.type === 'Line') {
299
- element.canvas = [
300
- {
301
- type: 'line',
302
- x1: item.x1 ?? 0,
303
- y1: item.y1 ?? 0,
304
- x2: item.x2 ?? 520,
305
- y2: item.y2 ?? 0,
306
- lineWidth: item.lineWidth ?? 1,
307
- lineColor: item.lineColor ?? '#000000',
308
- dash: item.dash ?? undefined
309
- }
310
- ];
311
- }
312
- else if (item.type === 'Table') {
313
- const tableColumns = item.fieldsMeta || [];
314
- const visibleCount = Math.min(3, tableColumns.length);
315
- const mainColumns = tableColumns.slice(0, visibleCount);
316
- const summaryColumns = tableColumns.slice(visibleCount);
317
- const body = [];
318
- // Headers
319
- body.push(mainColumns.map(col => ({
320
- text: col.label,
321
- ...styleProps(item)
322
- })));
323
- // Fields
324
- body.push(mainColumns.map(col => ({
325
- text: col.apiName,
326
- ...styleProps(item)
327
- })));
328
- // Summary rows
329
- summaryColumns.forEach((col, idx) => {
330
- const row = new Array(visibleCount).fill({ text: '', ...styleProps(item) });
331
- row[visibleCount - 2] = { text: col.label, ...styleProps(item) };
332
- row[visibleCount - 1] = { text: col.apiName, ...styleProps(item) };
333
- body.push(row);
334
- });
335
- element = {
336
- width: item.width || 520,
337
- table: {
338
- body,
339
- widths: new Array(visibleCount).fill('*')
340
- },
341
- layout: 'lightHorizontalLines',
342
- ...styleProps(item)
343
- };
344
- }
345
- // Add final element to content
346
- result.content.push(element);
347
- }
348
- return result;
349
- }
350
- setSummaryRowData(data) {
351
- this.summaryRowData = data;
352
- console.log('SummaryRow data saved in service:', this.summaryRowData);
353
- }
354
- getSummaryRowData() {
355
- return this.summaryRowData;
356
- }
357
380
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PdfDesignerService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
358
381
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PdfDesignerService, providedIn: 'root' });
359
382
  }
@@ -363,4 +386,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
363
386
  providedIn: 'root'
364
387
  }]
365
388
  }], ctorParameters: () => [{ type: i1.HttpClient }] });
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLWRlc2lnbmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvc2VydmljZXMvcGRmLWRlc2lnbmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7QUFPbkQsTUFBTSxPQUFPLGtCQUFrQjtJQWtCVDtJQWpCWixXQUFXLEdBQVUsRUFBRSxDQUFDO0lBQ3hCLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELHNCQUFzQixHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekQsbUJBQW1CLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDckQsZ0JBQWdCLEdBQTRCLElBQUksQ0FBQztJQUN6RCxjQUFjLENBQU07SUFDcEIsR0FBRyxDQUFNO0lBQ1QsSUFBSSxDQUFNO0lBQ1YsU0FBUyxDQUFNO0lBQ2YsUUFBUSxDQUFRO0lBRWhCLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzlELG9CQUFvQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvRCxjQUFjLENBQU07SUFDcEIsaUJBQWlCLENBQU07SUFFdkIsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNsQyx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGFB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QyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztnQkFFSCxPQUFPLEdBQUc7b0JBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRztvQkFDeEIsS0FBSyxFQUFFO3dCQUNMLElBQUk7d0JBQ0osTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7cUJBQzFDO29CQUNELE1BQU0sRUFBRSxzQkFBc0I7b0JBQzlCLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztpQkFDcEIsQ0FBQztZQUNKLENBQUM7WUFFRCwrQkFBK0I7WUFDL0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFHRCxpQkFBaUIsQ0FBQyxJQUFTO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLEVBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQzt3R0EzWFUsa0JBQWtCOzRHQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRWxlbWVudENvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2VzL2J1aWxkZXIvZWxlbWVudC9lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQZGZEZXNpZ25lclNlcnZpY2Uge1xuICBwcml2YXRlIHBkZkVsZW1lbnRzOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIHBkZkVsZW1lbnRzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgcHJpdmF0ZSBzZWxlY3RlZEVsZW1lbnRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KC0xKTtcbiAgcHJpdmF0ZSBzZWxlY3RIZWFkZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuICBwcml2YXRlIGVsZW1lbnRDb21wb25lbnQ6IEVsZW1lbnRDb21wb25lbnQgfCBudWxsID0gbnVsbDtcbiAgc3VtbWFyeVJvd0RhdGE6IGFueTtcbiAgcGRmOiBhbnk7XG4gIGRhdGE6IGFueTtcbiAgdW5pcXVlX2lkOiBhbnk7XG4gIHRlbXBFbGVtOiBhbnlbXTtcblxuICBwZGZFbGVtZW50cyQgPSB0aGlzLnBkZkVsZW1lbnRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgc2VsZWN0ZWRFbGVtZW50JCA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgc2VsZWN0SGVhZGVyU3ViamVjdCQgPSB0aGlzLnNlbGVjdEhlYWRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGN1cnJlbnRFbGVtZW50OiBhbnk7XG4gIHNlbGVjdFRhYmxlQ29sdW1uOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XG4gICAgLy8gTG9hZCBzYXZlZCBlbGVtZW50cyBmcm9tIGxvY2FsU3RvcmFnZVxuICAgIHRoaXMucGRmRWxlbWVudHMgPSBbXTtcbiAgICBjb25zdCBzYXZlZFBkZkVsZW1lbnRzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BkZkVsZW1lbnRzJyk7XG4gICAgaWYgKHNhdmVkUGRmRWxlbWVudHMpIHtcbiAgICAgIHRoaXMucGRmRWxlbWVudHMgPSBKU09OLnBhcnNlKHNhdmVkUGRmRWxlbWVudHMpO1xuICAgICAgdGhpcy5wZGZFbGVtZW50c1N1YmplY3QubmV4dChbLi4udGhpcy5wZGZFbGVtZW50c10pO1xuICAgIH1cbiAgfVxuICBpbnRpYWxpemVCb29rKHBkZjogYW55KSB7XG4gICAgLy8gIC0gR2V0IHRoZSB1bmlxdWUgaWQgaW4gdGhlIHBkZiBcbiAgICB0aGlzLnVuaXF1ZV9pZCA9IE9iamVjdC5rZXlzKHBkZilbMF07XG4gICAgbGV0IHRlbXBib29rID0gcGRmW3RoaXMudW5pcXVlX2lkXTtcbi8vIFNLUzI4TUFSMjUgdXBkYXRlIG5lc3RlZCBwZGYgUXVlc3Rpb25zTWFwXG4gICAgdGVtcGJvb2suZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gXCJwZGZcIiAmJiBlbGVtZW50LnBkZlJlZmVyZW5jZSkge1xuICAgICAgICB0aGlzLmdldFJlZlFiRGF0YShlbGVtZW50LnBkZlJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudFsncGRmUmVmZXJlbmNlUXVlc3Rpb25zJ10gPSByZXNwb25zZTsgLy8gQXNzaWduIHJlc3BvbnNlIHRvIHBkZlJlZmVyZW5jZVF1ZXN0aW9uc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQVBJIEVycm9yOlwiLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHBkZlt0aGlzLnVuaXF1ZV9pZF0gPSB0ZW1wYm9va1xuICAgIHRoaXMucGRmID0gcGRmXG5cbiAgICB0aGlzLnBkZlt0aGlzLnVuaXF1ZV9pZF0/LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAvLyBpZiAodGhpcy5wZGYuc3FPcHRpb25zPy5bZWxlbWVudC5pZF0pIHtcbiAgICAgIC8vICAgZWxlbWVudC5vcHRpb25zID0gdGhpcy5wZGYuc3FPcHRpb25zW2VsZW1lbnQuaWRdLm9wdGlvbnM7XG4gICAgICAvLyB9XG4gICAgICB0aGlzLmFkZEVsZW1lbnQoZWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvL1NLUzI4TUFSMjUgRnVuY3Rpb24gdG8gZmV0Y2ggcmVmcWIgZGF0YVxuICBnZXRSZWZRYkRhdGEocmVmcWJpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGBodHRwczovL2Rldi1hcGkudmFsYXJoci5jb20vbnh0P25hbWU9JHtyZWZxYmlkfWApO1xuICB9XG5cbiAgIC8vQVAtMTdBUFIyNSBGdW5jdGlvbiB0byBnZW5lcmF0ZSB1bmlxdWUgaWRcbiAgIGFkZEVsZW1lbnRXaXRoSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcmVmaXggPSAnbmdueHQnOyBcbiAgICBjb25zdCBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fJztcbiAgICBsZXQgaWQgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDExOyBpKyspIHtcbiAgICAgIGlkICs9IGNoYXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeCtpZDtcbiAgfVxuXG4gIG5ld0Jvb2soKSB7XG4gICAgdGhpcy51bmlxdWVfaWQgPSB0aGlzLmFkZEVsZW1lbnRXaXRoSWQoKTtcbiAgICB0aGlzLnBkZiA9IHtcbiAgICAgICAgW3RoaXMudW5pcXVlX2lkXTogW10sXG4gICAgICAgICd0aXRsZSc6ICdVbnRpdGxlZCcsXG4gICAgfVxuICB9XG4gIC8vIEFQIDI2RkVCMjUgLSBjbGVhciB0aGUgZm9ybSBlbGVtZW50cyBcbiAgY2xlYXJFbGVtZW50cygpIHtcbiAgICB0aGlzLnBkZkVsZW1lbnRzID0gW107XG4gICAgdGhpcy5wZGZFbGVtZW50c1N1YmplY3QubmV4dChbLi4udGhpcy5wZGZFbGVtZW50c10pO1xuICB9XG4gIC8vIEdldCB0aGUgZWxlbWVudCBjb21wb25lbnQgcmVmZXJlbmNlXG4gIGdldEVsZW1lbnRDb21wb25lbnQoKTogRWxlbWVudENvbXBvbmVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDb21wb25lbnQ7XG4gIH1cblxuICBzZXRFbGVtZW50Q29tcG9uZW50KGNvbXBvbmVudDogRWxlbWVudENvbXBvbmVudCkge1xuICAgIHRoaXMuZWxlbWVudENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgfVxuXG4gIC8vIEFkZCBhIG5ldyBlbGVtZW50IHRvIHRoZSBmb3JtXG4gIGFkZEVsZW1lbnQoZWxlbWVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wZGZFbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIHRoaXMucGRmRWxlbWVudHNTdWJqZWN0Lm5leHQoWy4uLnRoaXMucGRmRWxlbWVudHNdKTtcbiAgfVxuICAvLyBTS1MxM01BUjI1IGFkZCB0YWJsZSBlbGVtZW50XG4gIGFkZFRhYmxlRWxlbWVudChlbGVtZW50OiBhbnksIGluZCA6YW55KSB7XG4gICAgLy9TS1MxM01BUjI1IEVuc3VyZSBjdXJyZW50RWxlbWVudCBleGlzdHNcbiAgICBpZiAoIXRoaXMuY3VycmVudEVsZW1lbnQpIHJldHVybjtcbiAgICAvLyBDbG9uZSBlbGVtZW50cyBhcnJheVxuICAgIGNvbnN0IGVsZW1lbnRzID0gWy4uLnRoaXMuZ2V0RWxlbWVudHMoKV07XG5cbiAgICAvLyBTS1MxM01BUjI1IEZpbmQgdGhlIGVsZW1lbnQgYW5kIHVwZGF0ZSBpdHMgY29sdW1uc1xuICAgIGNvbnN0IGluZGV4ID0gZWxlbWVudHMuZmluZEluZGV4KGVsID0+IGVsLmlkID09PSB0aGlzLmN1cnJlbnRFbGVtZW50LmlkKTtcblxuICAgIC8vIENsb25lIGNvbHVtbnMgYXJyYXkgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgY29uc3QgdXBkYXRlZENvbHVtbnMgPSBbLi4uKHRoaXMucGRmRWxlbWVudHNbaW5kZXhdLmNvbHVtbnMgfHwgW10pLCBlbGVtZW50XTtcbiAgICBsZXQgdGVtcEZpZWxkc01ldGEgPSB7XG4gICAgICAnbGFiZWwnOiBlbGVtZW50LmxhYmVsLFxuICAgICAgJ2FwaU5hbWUnOiBlbGVtZW50LmZpZWxkTmFtZSxcbiAgICAgIFwiaXNkZWxldGVkXCI6IGZhbHNlLFxuICAgICAgXCJvcmRlcmJ5ZmxhZ1wiOiBmYWxzZSxcbiAgICAgIFwiZmlsdGVyZmxhZ1wiOiBmYWxzZSxcbiAgICAgIFwib3V0cHV0RmxhZ1wiOiB0cnVlLFxuICAgICAgXCJpc2NoaWxkXCI6IGZhbHNlLFxuICAgICAgXCJyZXN1bHRhbnRmbGFnXCI6IGZhbHNlLFxuICAgICAgXCJzZWFyY2hmbGFnXCI6IGZhbHNlLFxuICAgICAgXCJmbGRUeXBlXCI6IGVsZW1lbnQudHlwZSxcbiAgICAgIFwicmVhZE9ubHlcIjogZmFsc2UsXG4gICAgICBcInVuaXF1ZUlkZW50aWZpZXJcIjogZWxlbWVudC5pZFxuICAgIH1cbiAgICBsZXQgZmllbGRzTWV0YSA9IFsuLi50aGlzLnBkZkVsZW1lbnRzW2luZGV4XS5maWVsZHNNZXRhLCB0ZW1wRmllbGRzTWV0YV07XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBlbGVtZW50c1tpbmRleF0gPSB7IC4uLmVsZW1lbnRzW2luZGV4XSwgY29sdW1uczogdXBkYXRlZENvbHVtbnMsIGZpZWxkc01ldGE6IGZpZWxkc01ldGEgfTtcbiAgICB9XG5cbiAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIGZvcm0gZWxlbWVudHNcbiAgICAvLyB0aGlzLnBkZkVsZW1lbnRzU3ViamVjdC5uZXh0KGVsZW1lbnRzKTtcbiAgICB0aGlzLnBkZkVsZW1lbnRzID0gZWxlbWVudHM7XG4gICAgdGhpcy5wZGZFbGVtZW50c1N1YmplY3QubmV4dChbLi4uZWxlbWVudHNdKTtcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudFN1YmplY3QubmV4dChpbmQpO1xuICAgIC8vIExvZyBmb3IgZGVidWdnaW5nXG4gICAgLy8gY29uc29sZS5sb2coXCJVcGRhdGVkIGZvcm0gZWxlbWVudHM6XCIsICB0aGlzLnBkZkVsZW1lbnRzKTtcbiAgfVxuXG4gIHVwZGF0ZUVsZW1lbnQoaW5kZXg6IG51bWJlciwgdXBkYXRlczogUGFydGlhbDxhbnk+KSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBbLi4udGhpcy5nZXRFbGVtZW50cygpXTtcbiAgICBpZiAoZWxlbWVudHNbaW5kZXhdKSB7XG4gICAgICBlbGVtZW50c1tpbmRleF0gPSB7XG4gICAgICAgIC4uLmVsZW1lbnRzW2luZGV4XSxcbiAgICAgICAgLi4udXBkYXRlcyxcbiAgICAgIH07XG4gICAgICB0aGlzLnBkZkVsZW1lbnRzU3ViamVjdC5uZXh0KGVsZW1lbnRzKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMucGRmRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB1cGRhdGVkRWxlbWVudCA9IHtcbiAgICAgICAgLi4udGhpcy5wZGZFbGVtZW50c1tpbmRleF0sXG4gICAgICAgIC4uLnVwZGF0ZXNcbiAgICAgIH07XG4gICAgICAgIGlmIChlbGVtZW50c1tpbmRleF0pIHtcbiAgICAgICAgICBlbGVtZW50c1tpbmRleF0gPSB7IC4uLmVsZW1lbnRzW2luZGV4XSwgLi4udXBkYXRlcyB9O1xuICAgICAgICAgIHRoaXMucGRmRWxlbWVudHMgPSBlbGVtZW50cztcbiAgICAgICAgICB0aGlzLnBkZkVsZW1lbnRzU3ViamVjdC5uZXh0KFsuLi50aGlzLnBkZkVsZW1lbnRzXSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGRmRWxlbWVudHNbaW5kZXhdID0gdXBkYXRlZEVsZW1lbnQ7XG4gICAgICB0aGlzLnBkZkVsZW1lbnRzU3ViamVjdC5uZXh0KFsuLi50aGlzLnBkZkVsZW1lbnRzXSk7XG4gICAgfVxuICB9XG4gIHVwZGF0ZVRpdGxlKGV2ZW50OiBhbnkpIHtcbiAgICAvL0FQLTEwTUFSMjUgVXBkYXRlcyB0aGUgdGl0bGUgb2YgdGhlIGZpcnN0IHJlY29yZCBpbiB0aGUgcGRmICBcbiAgICB0aGlzLnBkZi50aXRsZSA9IGV2ZW50O1xuICB9XG4gIHNldFNlbGVjdGVkRWxlbWVudChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRTdWJqZWN0Lm5leHQoaW5kZXgpO1xuICAgIHRoaXMuY3VycmVudEVsZW1lbnQgPSB0aGlzLnBkZkVsZW1lbnRzW2luZGV4XVxuICAgIHRoaXMuc2VsZWN0VGFibGVDb2x1bW4gPSBudWxsXG4gIH1cbiAgLy8gU0tTMTlNQVIyNSBzZXQgdGhlIHNlbGVjdGVkIHRhYmxlIGNvbHVtblxuICBzZXRTZWxlY3RlZFRhYmxlRWxlbWVudChpbmRleDogYW55LCBldmVudDogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50RWxlbWVudCA9IHRoaXMucGRmRWxlbWVudHNbaW5kZXhdXG4gICAgaWYgKHRoaXMuY3VycmVudEVsZW1lbnQ/LnR5cGUgPT09ICdUYWJsZScpIHtcbiAgICB9XG4gICAgY29uc3QgZm91bmRJdGVtID0gdGhpcy5jdXJyZW50RWxlbWVudD8udHlwZSA9PT0gJ1RhYmxlJyA/IHRoaXMuY3VycmVudEVsZW1lbnRbJ2ZpZWxkc01ldGEnXS5maW5kKGl0ZW0gPT4gaXRlbVsnYXBpTmFtZSddID09PSBldmVudD8uY29sdW1uKSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlbGVjdFRhYmxlQ29sdW1uID0gZm91bmRJdGVtPy51bmlxdWVJZGVudGlmaWVyXG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRTdWJqZWN0Lm5leHQoaW5kZXgpO1xuICB9XG4gIHJlbW92ZVNlbGVjdGVkVGFibGVFbGVtZW50KGluZGV4OiBudW1iZXIsIGV2ZW50OiBhbnkpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcImRkZFwiLGluZGV4LCBldmVudClcbiAgICB0aGlzLmN1cnJlbnRFbGVtZW50ID0gdGhpcy5wZGZFbGVtZW50c1tpbmRleF07XG5cbiAgICBpZiAodGhpcy5jdXJyZW50RWxlbWVudD8udHlwZSA9PT0gJ1RhYmxlJykge1xuICAgICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIGl0ZW1cbiAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuY3VycmVudEVsZW1lbnRbJ2ZpZWxkc01ldGEnXS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtWydhcGlOYW1lJ10gPT09IGV2ZW50Py5jb2x1bW4pO1xuICAgICAgLy8gUmVtb3ZlIHRoZSBpdGVtIGlmIGZvdW5kXG4gICAgICBpZiAoaXRlbUluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRFbGVtZW50WydmaWVsZHNNZXRhJ10uc3BsaWNlKGl0ZW1JbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0VGFibGVDb2x1bW4gPSBudWxsXG4gICAgdGhpcy5lbGVtZW50VXBkYXRlKGluZGV4LCB0aGlzLmN1cnJlbnRFbGVtZW50KVxuICB9XG4gIC8vIFNLUzE5TUFSMjUgZ2V0IHRoZSBzZWxlY3RlZCB0YWJsZSBjb2x1bW5cbiAgZ2V0U2VsZWN0VGFibGVDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0VGFibGVDb2x1bW47XG4gIH1cbiAgc2VsZWN0SGVhZGluZyhldmVudDogYW55KSB7XG4gICAgLy9BUC0xME1BUjI1IEVtaXRzIHRoZSBzZWxlY3RlZCBoZWFkaW5nIGV2ZW50ICBcbiAgICB0aGlzLnNlbGVjdEhlYWRlclN1YmplY3QubmV4dChldmVudCk7XG4gIH1cbiAgZ2V0RWxlbWVudHMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnBkZkVsZW1lbnRzLm1hcChlbGVtZW50ID0+ICh7XG4gICAgICAuLi5lbGVtZW50XG4gICAgfSkpO1xuICB9XG4gIHNvcnRFbGVtZW50c0J5T3JkZXIoKTogdm9pZCB7XG4gICAgLy9BUC0xME1BUjI1IFNvcnQgZWxlbWVudHMgYnkgY3VycmVudCBvcmRlclxuICAgIHRoaXMucGRmRWxlbWVudHMuc29ydCgoYSwgYikgPT4gYS5xdWVzdGlvbk51bWJlciAtIGIucXVlc3Rpb25OdW1iZXIpO1xuICAgIHRoaXMucGRmRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGVsZW1lbnQucXVlc3Rpb25OdW1iZXIgPSBpbmRleCArIDE7XG4gICAgfSk7XG4gICAgdGhpcy5wZGZFbGVtZW50c1N1YmplY3QubmV4dChbLi4udGhpcy5wZGZFbGVtZW50c10pO1xuICB9XG4gIC8vQVAtMTBNQVIyNSBSZXR1cm5zIHRoZSBjdXJyZW50IHBkZiBkYXRhICBcbiAgZ2V0Qm9vaygpIHtcbiAgICByZXR1cm4gdGhpcy5wZGY7XG4gIH1cbiAgZG93bmxvYWRFbGVtZW50KCkge1xuICAgIC8vIE1ha2Ugc3VyZSBhbGwgZWxlbWVudHMgaGF2ZSB0aGVpciBsYXRlc3QgdmFsdWVzXG4gICAgdGhpcy5wZGZFbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgLy8gVXNlIHF1ZXN0aW9uIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSB2YWx1ZVxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIGVsZW1lbnQudmFsdWUgPSBlbGVtZW50LnF1ZXN0aW9uIHx8IGVsZW1lbnQudmFsdWUgfHwgJyc7IFxuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMucGRmW3RoaXMudW5pcXVlX2lkXSA9IHRoaXMucGRmRWxlbWVudHM7XG4gICAgdGhpcy5wZGZbJ3BkZkpzb24nXSA9IHRoaXMuY29udmVydFRvUGRmTGF5b3V0KHRoaXMucGRmKTtcbiAgICBjb25zb2xlLmxvZyhcInBkZkpzb25cIiwgdGhpcy5wZGYucGRmSnNvbik7XG4gICAgdGhpcy5wZGY/LnBkZkpzb24/LmNvbnRlbnQ/LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtLndpZHRoID09PSAnbnVtYmVyJykge1xuICAgICAgICBpdGVtLndpZHRoID0gaXRlbS53aWR0aCAqIDUuMjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5wZGY7XG4gIH1cbiAgZ2V0RG9jdW1lbnREZWZpbml0aW9uKCkge1xuICAgIC8vIEFQLTA2TUFSMjUgLSBHZXQgdGhlIGRvY3VtZW50IGRlZmluaXRpb24gZm9yIFBERiBnZW5lcmF0aW9uXG4gICAgY29uc3QgcGRmRGF0YSA9IHRoaXMuZG93bmxvYWRFbGVtZW50KCk7XG4gICAgY29uc3QgZG9jdW1lbnREZWZpbml0aW9uID0ge1xuICAgICAgY29udGVudDogcGRmRGF0YS5wZGZKc29uLmNvbnRlbnQsXG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgaGVhZGVyOiB7XG4gICAgICAgICAgZm9udFNpemU6IDE4LFxuICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgbWFyZ2luOiBbMCwgMCwgMCwgMTBdXG4gICAgICAgIH0sXG4gICAgICAgIHN1YmhlYWRlcjoge1xuICAgICAgICAgIGZvbnRTaXplOiAxNCxcbiAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgIG1hcmdpbjogWzAsIDEwLCAwLCA1XVxuICAgICAgICB9LFxuICAgICAgICAvLyBBZGQgbW9yZSBzdHlsZXMgYXMgbmVlZGVkXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gZG9jdW1lbnREZWZpbml0aW9uO1xufVxuICAvLyBBUC0wNk1BUjI1IC0gRWxlbWVudCBuZXcgb3JkZXIgdXBkYXRlXG4gIHVwZGF0ZUVsZW1lbnRzT3JkZXIodXBkYXRlZEVsZW1lbnRzOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMucGRmRWxlbWVudHMgPSBbLi4udXBkYXRlZEVsZW1lbnRzXTtcbiAgICB0aGlzLnBkZkVsZW1lbnRzU3ViamVjdC5uZXh0KHRoaXMucGRmRWxlbWVudHMpO1xuICB9XG4gIC8vIFJlbW92ZSBhbiBlbGVtZW50IGJ5IElEXG4gIC8vIFNhdmUgZWxlbWVudHMgdG8gbG9jYWxTdG9yYWdlIGFuZCB1cGRhdGUgdGhlIHN1YmplY3RcbiAgcmVtb3ZlRWxlbWVudENvbXBvbmVudChpZDogYW55KSB7XG4gICAgdGhpcy50ZW1wRWxlbSA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50U3ViamVjdC5uZXh0KG51bGwpO1xuICAgIHRoaXMuY3VycmVudEVsZW1lbnQgPSB7fVxuICAgIHRoaXMucGRmRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5pZCAhPT0gaWQpIHtcbiAgICAgICAgdGhpcy50ZW1wRWxlbS5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucGRmRWxlbWVudHMgPSB0aGlzLnRlbXBFbGVtO1xuICAgIHRoaXMucGRmRWxlbWVudHNTdWJqZWN0Lm5leHQoWy4uLnRoaXMucGRmRWxlbWVudHNdKTtcbiAgfVxuICAvLyBTS1MxOU1BUjI1IHVwZGF0ZSB0aGUgZWxlbWVudFxuICBlbGVtZW50VXBkYXRlKGluZGV4OiBhbnksIGVsZW1lbnQ6IGFueSkge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gWy4uLnRoaXMuZ2V0RWxlbWVudHMoKV07XG4gICAgaWYgKGVsZW1lbnRzW2luZGV4XSkge1xuICAgICAgZWxlbWVudHNbaW5kZXhdID0ge1xuICAgICAgICAuLi5lbGVtZW50c1tpbmRleF0sXG4gICAgICAgIC4uLmVsZW1lbnQgLy8gVGhpcyBlbnN1cmVzIGFsbCBwcm9wZXJ0aWVzIGFyZSB1cGRhdGVkXG4gICAgICB9O1xuICAgICAgdGhpcy5wZGZFbGVtZW50cyA9IGVsZW1lbnRzO1xuICAgICAgdGhpcy5zb3J0RWxlbWVudHNCeU9yZGVyKCk7XG4gICAgICB0aGlzLnBkZkVsZW1lbnRzU3ViamVjdC5uZXh0KFsuLi5lbGVtZW50c10pO1xuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRTdWJqZWN0Lm5leHQoaW5kZXgpO1xuICAgIH1cbiAgfVxuICBjb252ZXJ0VG9QZGZMYXlvdXQoaW5wdXQ6IGFueSk6IGFueSB7XG4gICAgY29uc3QgcmVzdWx0ID0geyBjb250ZW50OiBbXSB9O1xuICAgIGNvbnN0IGl0ZW1zID0gaW5wdXRbdGhpcy51bmlxdWVfaWRdO1xuICBcbiAgICBjb25zdCBzdHlsZVByb3BzID0gKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgIGZvbnRTaXplOiBpdGVtLmZvbnRTaXplIHx8IDE0LFxuICAgICAgYm9sZDogaXRlbS5mb250U3R5bGUgPT09ICdib2xkJyB8fCBpdGVtLmZvbnRXZWlnaHQgPj0gNzAwLFxuICAgICAgaXRhbGljczogaXRlbS5mb250U3R5bGUgPT09ICdpdGFsaWMnLFxuICAgICAgYWxpZ25tZW50OiBpdGVtLmFsaWduSXRlbXMgfHwgJ2NlbnRlcicsXG4gICAgICBtYXJnaW46IGl0ZW0ubWFyZ2luIHx8IFswLCAwLCAwLCAwXVxuICAgIH0pO1xuICBcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gaXRlbS53aWR0aCB8fCAnKic7XG4gICAgICBsZXQgZWxlbWVudDogYW55ID0geyB3aWR0aCwgLi4uc3R5bGVQcm9wcyhpdGVtKSB9O1xuICBcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICBlbGVtZW50LnRleHQgPSAoaXRlbS5xdWVzdGlvbiB8fCBpdGVtLnZhbHVlIHx8ICcnKS5yZXBsYWNlKC9cXFxcbi9nLCAnXFxuJyk7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ0xpbmUnKSB7XG4gICAgICAgIGVsZW1lbnQuY2FudmFzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIHgxOiBpdGVtLngxID8/IDAsXG4gICAgICAgICAgICB5MTogaXRlbS55MSA/PyAwLFxuICAgICAgICAgICAgeDI6IGl0ZW0ueDIgPz8gNTIwLFxuICAgICAgICAgICAgeTI6IGl0ZW0ueTIgPz8gMCxcbiAgICAgICAgICAgIGxpbmVXaWR0aDogaXRlbS5saW5lV2lkdGggPz8gMSxcbiAgICAgICAgICAgIGxpbmVDb2xvcjogaXRlbS5saW5lQ29sb3IgPz8gJyMwMDAwMDAnLFxuICAgICAgICAgICAgZGFzaDogaXRlbS5kYXNoID8/IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAnVGFibGUnKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQ29sdW1ucyA9IGl0ZW0uZmllbGRzTWV0YSB8fCBbXTtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNvdW50ID0gTWF0aC5taW4oMywgdGFibGVDb2x1bW5zLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IG1haW5Db2x1bW5zID0gdGFibGVDb2x1bW5zLnNsaWNlKDAsIHZpc2libGVDb3VudCk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnlDb2x1bW5zID0gdGFibGVDb2x1bW5zLnNsaWNlKHZpc2libGVDb3VudCk7XG4gIFxuICAgICAgICBjb25zdCBib2R5OiBhbnlbXVtdID0gW107XG4gIFxuICAgICAgICAvLyBIZWFkZXJzXG4gICAgICAgIGJvZHkucHVzaChtYWluQ29sdW1ucy5tYXAoY29sID0+ICh7XG4gICAgICAgICAgdGV4dDogY29sLmxhYmVsLFxuICAgICAgICAgIC4uLnN0eWxlUHJvcHMoaXRlbSlcbiAgICAgICAgfSkpKTtcbiAgXG4gICAgICAgIC8vIEZpZWxkc1xuICAgICAgICBib2R5LnB1c2gobWFpbkNvbHVtbnMubWFwKGNvbCA9PiAoe1xuICAgICAgICAgIHRleHQ6IGNvbC5hcGlOYW1lLFxuICAgICAgICAgIC4uLnN0eWxlUHJvcHMoaXRlbSlcbiAgICAgICAgfSkpKTtcbiAgXG4gICAgICAgIC8vIFN1bW1hcnkgcm93c1xuICAgICAgICBzdW1tYXJ5Q29sdW1ucy5mb3JFYWNoKChjb2wsIGlkeCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IG5ldyBBcnJheSh2aXNpYmxlQ291bnQpLmZpbGwoeyB0ZXh0OiAnJywgLi4uc3R5bGVQcm9wcyhpdGVtKSB9KTtcbiAgICAgICAgICByb3dbdmlzaWJsZUNvdW50IC0gMl0gPSB7IHRleHQ6IGNvbC5sYWJlbCwgLi4uc3R5bGVQcm9wcyhpdGVtKSB9O1xuICAgICAgICAgIHJvd1t2aXNpYmxlQ291bnQgLSAxXSA9IHsgdGV4dDogY29sLmFwaU5hbWUsIC4uLnN0eWxlUHJvcHMoaXRlbSkgfTtcbiAgICAgICAgICBib2R5LnB1c2gocm93KTtcbiAgICAgICAgfSk7XG4gIFxuICAgICAgICBlbGVtZW50ID0ge1xuICAgICAgICAgIHdpZHRoOiBpdGVtLndpZHRoIHx8IDUyMCxcbiAgICAgICAgICB0YWJsZToge1xuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHdpZHRoczogbmV3IEFycmF5KHZpc2libGVDb3VudCkuZmlsbCgnKicpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYXlvdXQ6ICdsaWdodEhvcml6b250YWxMaW5lcycsXG4gICAgICAgICAgLi4uc3R5bGVQcm9wcyhpdGVtKVxuICAgICAgICB9O1xuICAgICAgfVxuICBcbiAgICAgIC8vIEFkZCBmaW5hbCBlbGVtZW50IHRvIGNvbnRlbnRcbiAgICAgIHJlc3VsdC5jb250ZW50LnB1c2goZWxlbWVudCk7XG4gICAgfVxuICBcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIFxuXG4gIHNldFN1bW1hcnlSb3dEYXRhKGRhdGE6IGFueSkge1xuICAgIHRoaXMuc3VtbWFyeVJvd0RhdGEgPSBkYXRhO1xuICAgIGNvbnNvbGUubG9nKCdTdW1tYXJ5Um93IGRhdGEgc2F2ZWQgaW4gc2VydmljZTonLCAgdGhpcy5zdW1tYXJ5Um93RGF0YSk7XG4gIH1cblxuICBnZXRTdW1tYXJ5Um93RGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdW1tYXJ5Um93RGF0YTtcbiAgfVxufVxuIl19
389
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLWRlc2lnbmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvc2VydmljZXMvcGRmLWRlc2lnbmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7QUFPbkQsTUFBTSxPQUFPLGtCQUFrQjtJQWdCVDtJQWZaLFdBQVcsR0FBVSxFQUFFLENBQUM7SUFDeEIsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7SUFDcEQsc0JBQXNCLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQztJQUNyRCxnQkFBZ0IsR0FBNEIsSUFBSSxDQUFDO0lBQ3pELEdBQUcsQ0FBTTtJQUNULFNBQVMsQ0FBTTtJQUNmLFFBQVEsQ0FBUTtJQUVoQixZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RELGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5RCxvQkFBb0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0QsY0FBYyxDQUFNO0lBQ3BCLGlCQUFpQixDQUFNO0lBRXZCLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDbEMsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3RCxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFDRCxhQUFhLENBQUMsR0FBUTtRQUNwQixtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkMsNENBQTRDO1FBQ3hDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMzQixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUMvQyxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUNYLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLDJDQUEyQztnQkFDMUYsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FDRixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUE7UUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFFZCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUMsMENBQTBDO1lBQzFDLDhEQUE4RDtZQUM5RCxJQUFJO1lBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsWUFBWSxDQUFDLE9BQWU7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBTSx3Q0FBd0MsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUEsMkNBQTJDO0lBQzNDLGdCQUFnQjtRQUNmLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxrRUFBa0UsQ0FBQztRQUNqRixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDWixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUIsRUFBRSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELE9BQU8sTUFBTSxHQUFDLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLEdBQUcsR0FBRztZQUNQLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUU7WUFDcEIsT0FBTyxFQUFFLFVBQVU7U0FDdEIsQ0FBQTtJQUNILENBQUM7SUFDRCx3Q0FBd0M7SUFDeEMsYUFBYTtRQUNYLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxzQ0FBc0M7SUFDdEMsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxTQUEyQjtRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsVUFBVSxDQUFDLE9BQVk7UUFFckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELCtCQUErQjtJQUMvQixlQUFlLENBQUMsT0FBWSxFQUFFLEdBQVE7UUFDcEMseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU87UUFDakMsdUJBQXVCO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUV6QyxxREFBcUQ7UUFDckQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6RSxrREFBa0Q7UUFDbEQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0UsSUFBSSxjQUFjLEdBQUc7WUFDbkIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3RCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixXQUFXLEVBQUUsS0FBSztZQUNsQixhQUFhLEVBQUUsS0FBSztZQUNwQixZQUFZLEVBQUUsS0FBSztZQUNuQixZQUFZLEVBQUUsSUFBSTtZQUNsQixTQUFTLEVBQUUsS0FBSztZQUNoQixlQUFlLEVBQUUsS0FBSztZQUN0QixZQUFZLEVBQUUsS0FBSztZQUNuQixTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDdkIsVUFBVSxFQUFFLEtBQUs7WUFDakIsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEVBQUU7U0FDL0IsQ0FBQTtRQUNELElBQUksVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUV6RSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pCLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQzVGLENBQUM7UUFFRCxpQ0FBaUM7UUFDakMsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDO1FBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxvQkFBb0I7UUFDcEIsNERBQTREO0lBQzlELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYSxFQUFFLE9BQXFCO1FBQ2hELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BCLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRztnQkFDaEIsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUNsQixHQUFHLE9BQU87YUFDWCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xELE1BQU0sY0FBYyxHQUFHO2dCQUNyQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO2dCQUMxQixHQUFHLE9BQU87YUFDWCxDQUFDO1lBQ0EsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDcEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLGNBQWMsQ0FBQztZQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUNELFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLCtEQUErRDtRQUMvRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUNELGtCQUFrQixDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDN0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQTtJQUMvQixDQUFDO0lBQ0QsMkNBQTJDO0lBQzNDLHVCQUF1QixDQUFDLEtBQVUsRUFBRSxLQUFVO1FBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM3QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3hKLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLEVBQUUsZ0JBQWdCLENBQUE7UUFDcEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsMEJBQTBCLENBQUMsS0FBYSxFQUFFLEtBQVU7UUFDbEQsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzFDLDZCQUE2QjtZQUM3QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDekcsMkJBQTJCO1lBQzNCLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUE7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFDRCwyQ0FBMkM7SUFDM0Msb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFDRCxhQUFhLENBQUMsS0FBVTtRQUN0QiwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUNELG1CQUFtQjtRQUNqQiwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMxQyxPQUFPLENBQUMsY0FBYyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsMkNBQTJDO0lBQzNDLE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUVILGVBQWU7UUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNqQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxRCxDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDM0QsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDbEMsT0FBTyxPQUFPLENBQUMscUJBQXFCLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFeEQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUMvQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQztvQkFDckQsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztnQkFDOUIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBVTtRQUMzQixNQUFNLE1BQU0sR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUU7WUFDN0IsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksR0FBRztZQUN6RCxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsS0FBSyxRQUFRO1lBQ3BDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7WUFDaEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDcEMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFZLEVBQVMsRUFBRTtZQUMzQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxVQUFVLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDakMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1lBRXJCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDO2dCQUNoQyxJQUFJLE9BQU8sR0FBUSxFQUFFLEtBQUssRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUVsRCxJQUFJLFlBQVksR0FBRyxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUM7b0JBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3RCLFVBQVUsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztvQkFDN0IsWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFDbkIsQ0FBQztnQkFDRCw4QkFBOEI7Z0JBQzlCLDhFQUE4RTtnQkFDOUUsSUFBSTtnQkFDSixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQzFCLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUVwRSxDQUFDO3FCQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDaEMsT0FBTyxDQUFDLE1BQU0sR0FBRzt3QkFDZjs0QkFDRSxJQUFJLEVBQUUsTUFBTTs0QkFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDOzRCQUNoQixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDOzRCQUNoQixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHOzRCQUNsQixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDOzRCQUNoQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDOzRCQUM5QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTO3lCQUN2QztxQkFDRixDQUFDO29CQUNGLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUVuQyxDQUFDO3FCQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNwRCxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7b0JBQ3BHLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFFcEQsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDdEIsVUFBVSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO3dCQUM3QixZQUFZLEdBQUcsQ0FBQyxDQUFDO29CQUNuQixDQUFDO29CQUNELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztnQkFFOUIsQ0FBQztxQkFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQ2pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO29CQUMzQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO29CQUN4RCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUV4RCxNQUFNLElBQUksR0FBWSxFQUFFLENBQUM7b0JBRXpCLGdCQUFnQjtvQkFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDaEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLO3dCQUNmLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztxQkFDcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFTCxjQUFjO29CQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ2hDLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTzt3QkFDakIsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO3FCQUNwQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUVMLGVBQWU7b0JBQ2YsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDNUUsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ2pFLEdBQUcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNqQixDQUFDLENBQUMsQ0FBQztvQkFFSCxPQUFPLEdBQUc7d0JBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRzt3QkFDeEIsS0FBSyxFQUFFOzRCQUNMLElBQUk7NEJBQ0osTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7eUJBQzFDO3dCQUNELE1BQU0sRUFBRSxzQkFBc0I7d0JBQzlCLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztxQkFDcEIsQ0FBQztvQkFDRixVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFbkMsQ0FBQztxQkFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQ2pDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUN0QixLQUFLO3dCQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUU7d0JBQzNCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDO3dCQUM1QyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7cUJBQ3BCLENBQUMsQ0FBQztnQkFFTCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQzdCLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUN0QixLQUFLO3dCQUNMLElBQUksRUFBRSxHQUFHO3dCQUNULEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztxQkFDcEIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsWUFBWSxJQUFJLEtBQUssQ0FBQztnQkFFdEIsSUFBSSxZQUFZLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3RCLFVBQVUsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztvQkFDN0IsWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFDbkIsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hCLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDQyx3Q0FBd0M7SUFDeEMsbUJBQW1CLENBQUMsZUFBc0I7UUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELDBCQUEwQjtJQUMxQix1REFBdUQ7SUFDdkQsc0JBQXNCLENBQUMsRUFBTztRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELGdDQUFnQztJQUNoQyxhQUFhLENBQUMsS0FBVSxFQUFFLE9BQVk7UUFDcEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQTtZQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztZQUM1QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7d0dBNVpVLGtCQUFrQjs0R0FBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVsZW1lbnRDb21wb25lbnQgfSBmcm9tICcuLi9wYWdlcy9idWlsZGVyL2VsZW1lbnQvZWxlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGRmRGVzaWduZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwZGZFbGVtZW50czogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBwZGZFbGVtZW50c1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG4gIHByaXZhdGUgc2VsZWN0ZWRFbGVtZW50U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigtMSk7XG4gIHByaXZhdGUgc2VsZWN0SGVhZGVyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgcHJpdmF0ZSBlbGVtZW50Q29tcG9uZW50OiBFbGVtZW50Q29tcG9uZW50IHwgbnVsbCA9IG51bGw7XG4gIHBkZjogYW55O1xuICB1bmlxdWVfaWQ6IGFueTtcbiAgdGVtcEVsZW06IGFueVtdO1xuXG4gIHBkZkVsZW1lbnRzJCA9IHRoaXMucGRmRWxlbWVudHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBzZWxlY3RlZEVsZW1lbnQkID0gdGhpcy5zZWxlY3RlZEVsZW1lbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBzZWxlY3RIZWFkZXJTdWJqZWN0JCA9IHRoaXMuc2VsZWN0SGVhZGVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgY3VycmVudEVsZW1lbnQ6IGFueTtcbiAgc2VsZWN0VGFibGVDb2x1bW46IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcbiAgICAvLyBMb2FkIHNhdmVkIGVsZW1lbnRzIGZyb20gbG9jYWxTdG9yYWdlXG4gICAgdGhpcy5wZGZFbGVtZW50cyA9IFtdO1xuICAgIGNvbnN0IHNhdmVkUGRmRWxlbWVudHMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGRmRWxlbWVudHMnKTtcbiAgICBpZiAoc2F2ZWRQZGZFbGVtZW50cykge1xuICAgICAgdGhpcy5wZGZFbGVtZW50cyA9IEpTT04ucGFyc2Uoc2F2ZWRQZGZFbGVtZW50cyk7XG4gICAgICB0aGlzLnBkZkVsZW1lbnRzU3ViamVjdC5uZXh0KFsuLi50aGlzLnBkZkVsZW1lbnRzXSk7XG4gICAgfVxuICB9XG4gIGludGlhbGl6ZUJvb2socGRmOiBhbnkpIHtcbiAgICAvLyAgLSBHZXQgdGhlIHVuaXF1ZSBpZCBpbiB0aGUgcGRmIFxuICAgIHRoaXMudW5pcXVlX2lkID0gT2JqZWN0LmtleXMocGRmKVswXTtcbiAgICBsZXQgdGVtcGJvb2sgPSBwZGZbdGhpcy51bmlxdWVfaWRdO1xuLy8gU0tTMjhNQVIyNSB1cGRhdGUgbmVzdGVkIHBkZiBRdWVzdGlvbnNNYXBcbiAgICB0ZW1wYm9vay5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC50eXBlID09PSBcInBkZlwiICYmIGVsZW1lbnQucGRmUmVmZXJlbmNlKSB7XG4gICAgICAgIHRoaXMuZ2V0UmVmUWJEYXRhKGVsZW1lbnQucGRmUmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50WydwZGZSZWZlcmVuY2VRdWVzdGlvbnMnXSA9IHJlc3BvbnNlOyAvLyBBc3NpZ24gcmVzcG9uc2UgdG8gcGRmUmVmZXJlbmNlUXVlc3Rpb25zXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBUEkgRXJyb3I6XCIsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcGRmW3RoaXMudW5pcXVlX2lkXSA9IHRlbXBib29rXG4gICAgdGhpcy5wZGYgPSBwZGZcblxuICAgIHRoaXMucGRmW3RoaXMudW5pcXVlX2lkXT8uZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIC8vIGlmICh0aGlzLnBkZi5zcU9wdGlvbnM/LltlbGVtZW50LmlkXSkge1xuICAgICAgLy8gICBlbGVtZW50Lm9wdGlvbnMgPSB0aGlzLnBkZi5zcU9wdGlvbnNbZWxlbWVudC5pZF0ub3B0aW9ucztcbiAgICAgIC8vIH1cbiAgICAgIHRoaXMuYWRkRWxlbWVudChlbGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vU0tTMjhNQVIyNSBGdW5jdGlvbiB0byBmZXRjaCByZWZxYiBkYXRhXG4gIGdldFJlZlFiRGF0YShyZWZxYmlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYGh0dHBzOi8vZGV2LWFwaS52YWxhcmhyLmNvbS9ueHQ/bmFtZT0ke3JlZnFiaWR9YCk7XG4gIH1cblxuICAgLy9BUC0xN0FQUjI1IEZ1bmN0aW9uIHRvIGdlbmVyYXRlIHVuaXF1ZSBpZFxuICAgYWRkRWxlbWVudFdpdGhJZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHByZWZpeCA9ICduZ254dCc7IFxuICAgIGNvbnN0IGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8nO1xuICAgIGxldCBpZCA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTE7IGkrKykge1xuICAgICAgaWQgKz0gY2hhcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzLmxlbmd0aCkpO1xuICAgIH1cbiAgICByZXR1cm4gcHJlZml4K2lkO1xuICB9XG5cbiAgbmV3Qm9vaygpIHtcbiAgICB0aGlzLnVuaXF1ZV9pZCA9IHRoaXMuYWRkRWxlbWVudFdpdGhJZCgpO1xuICAgIHRoaXMucGRmID0ge1xuICAgICAgICBbdGhpcy51bmlxdWVfaWRdOiBbXSxcbiAgICAgICAgJ3RpdGxlJzogJ1VudGl0bGVkJyxcbiAgICB9XG4gIH1cbiAgLy8gQVAgMjZGRUIyNSAtIGNsZWFyIHRoZSBmb3JtIGVsZW1lbnRzIFxuICBjbGVhckVsZW1lbnRzKCkge1xuICAgIHRoaXMucGRmRWxlbWVudHMgPSBbXTtcbiAgICB0aGlzLnBkZkVsZW1lbnRzU3ViamVjdC5uZXh0KFsuLi50aGlzLnBkZkVsZW1lbnRzXSk7XG4gIH1cbiAgLy8gR2V0IHRoZSBlbGVtZW50IGNvbXBvbmVudCByZWZlcmVuY2VcbiAgZ2V0RWxlbWVudENvbXBvbmVudCgpOiBFbGVtZW50Q29tcG9uZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENvbXBvbmVudDtcbiAgfVxuXG4gIHNldEVsZW1lbnRDb21wb25lbnQoY29tcG9uZW50OiBFbGVtZW50Q29tcG9uZW50KSB7XG4gICAgdGhpcy5lbGVtZW50Q29tcG9uZW50ID0gY29tcG9uZW50O1xuICB9XG5cbiAgLy8gQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGZvcm1cbiAgYWRkRWxlbWVudChlbGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgICBcbiAgICB0aGlzLnBkZkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgdGhpcy5wZGZFbGVtZW50c1N1YmplY3QubmV4dChbLi4udGhpcy5wZGZFbGVtZW50c10pO1xuICB9XG4gIC8vIFNLUzEzTUFSMjUgYWRkIHRhYmxlIGVsZW1lbnRcbiAgYWRkVGFibGVFbGVtZW50KGVsZW1lbnQ6IGFueSwgaW5kIDphbnkpIHtcbiAgICAvL1NLUzEzTUFSMjUgRW5zdXJlIGN1cnJlbnRFbGVtZW50IGV4aXN0c1xuICAgIGlmICghdGhpcy5jdXJyZW50RWxlbWVudCkgcmV0dXJuO1xuICAgIC8vIENsb25lIGVsZW1lbnRzIGFycmF5XG4gICAgY29uc3QgZWxlbWVudHMgPSBbLi4udGhpcy5nZXRFbGVtZW50cygpXTtcblxuICAgIC8vIFNLUzEzTUFSMjUgRmluZCB0aGUgZWxlbWVudCBhbmQgdXBkYXRlIGl0cyBjb2x1bW5zXG4gICAgY29uc3QgaW5kZXggPSBlbGVtZW50cy5maW5kSW5kZXgoZWwgPT4gZWwuaWQgPT09IHRoaXMuY3VycmVudEVsZW1lbnQuaWQpO1xuXG4gICAgLy8gQ2xvbmUgY29sdW1ucyBhcnJheSB0byB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cbiAgICBjb25zdCB1cGRhdGVkQ29sdW1ucyA9IFsuLi4odGhpcy5wZGZFbGVtZW50c1tpbmRleF0uY29sdW1ucyB8fCBbXSksIGVsZW1lbnRdO1xuICAgIGxldCB0ZW1wRmllbGRzTWV0YSA9IHtcbiAgICAgICdsYWJlbCc6IGVsZW1lbnQubGFiZWwsXG4gICAgICAnYXBpTmFtZSc6IGVsZW1lbnQuZmllbGROYW1lLFxuICAgICAgXCJpc2RlbGV0ZWRcIjogZmFsc2UsXG4gICAgICBcIm9yZGVyYnlmbGFnXCI6IGZhbHNlLFxuICAgICAgXCJmaWx0ZXJmbGFnXCI6IGZhbHNlLFxuICAgICAgXCJvdXRwdXRGbGFnXCI6IHRydWUsXG4gICAgICBcImlzY2hpbGRcIjogZmFsc2UsXG4gICAgICBcInJlc3VsdGFudGZsYWdcIjogZmFsc2UsXG4gICAgICBcInNlYXJjaGZsYWdcIjogZmFsc2UsXG4gICAgICBcImZsZFR5cGVcIjogZWxlbWVudC50eXBlLFxuICAgICAgXCJyZWFkT25seVwiOiBmYWxzZSxcbiAgICAgIFwidW5pcXVlSWRlbnRpZmllclwiOiBlbGVtZW50LmlkXG4gICAgfVxuICAgIGxldCBmaWVsZHNNZXRhID0gWy4uLnRoaXMucGRmRWxlbWVudHNbaW5kZXhdLmZpZWxkc01ldGEsIHRlbXBGaWVsZHNNZXRhXTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGVsZW1lbnRzW2luZGV4XSA9IHsgLi4uZWxlbWVudHNbaW5kZXhdLCBjb2x1bW5zOiB1cGRhdGVkQ29sdW1ucywgZmllbGRzTWV0YTogZmllbGRzTWV0YSB9O1xuICAgIH1cblxuICAgIC8vIEVtaXQgdGhlIHVwZGF0ZWQgZm9ybSBlbGVtZW50c1xuICAgIC8vIHRoaXMucGRmRWxlbWVudHNTdWJqZWN0Lm5leHQoZWxlbWVudHMpO1xuICAgIHRoaXMucGRmRWxlbWVudHMgPSBlbGVtZW50cztcbiAgICB0aGlzLnBkZkVsZW1lbnRzU3ViamVjdC5uZXh0KFsuLi5lbGVtZW50c10pO1xuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50U3ViamVjdC5uZXh0KGluZCk7XG4gICAgLy8gTG9nIGZvciBkZWJ1Z2dpbmdcbiAgICAvLyBjb25zb2xlLmxvZyhcIlVwZGF0ZWQgZm9ybSBlbGVtZW50czpcIiwgIHRoaXMucGRmRWxlbWVudHMpO1xuICB9XG5cbiAgdXBkYXRlRWxlbWVudChpbmRleDogbnVtYmVyLCB1cGRhdGVzOiBQYXJ0aWFsPGFueT4pIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IFsuLi50aGlzLmdldEVsZW1lbnRzKCldO1xuICAgIGlmIChlbGVtZW50c1tpbmRleF0pIHtcbiAgICAgIGVsZW1lbnRzW2luZGV4XSA9IHtcbiAgICAgICAgLi4uZWxlbWVudHNbaW5kZXhdLFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgfTtcbiAgICAgIHRoaXMucGRmRWxlbWVudHNTdWJqZWN0Lm5leHQoZWxlbWVudHMpO1xuICAgIH1cblxuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5wZGZFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRFbGVtZW50ID0ge1xuICAgICAgICAuLi50aGlzLnBkZkVsZW1lbnRzW2luZGV4XSxcbiAgICAgICAgLi4udXBkYXRlc1xuICAgICAgfTtcbiAgICAgICAgaWYgKGVsZW1lbnRzW2luZGV4XSkge1xuICAgICAgICAgIGVsZW1lbnRzW2luZGV4XSA9IHsgLi4uZWxlbWVudHNbaW5kZXhdLCAuLi51cGRhdGVzIH07XG4gICAgICAgICAgdGhpcy5wZGZFbGVtZW50cyA9IGVsZW1lbnRzO1xuICAgICAgICAgIHRoaXMucGRmRWxlbWVudHNTdWJqZWN0Lm5leHQoWy4uLnRoaXMucGRmRWxlbWVudHNdKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wZGZFbGVtZW50c1tpbmRleF0gPSB1cGRhdGVkRWxlbWVudDtcbiAgICAgIHRoaXMucGRmRWxlbWVudHNTdWJqZWN0Lm5leHQoWy4uLnRoaXMucGRmRWxlbWVudHNdKTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlVGl0bGUoZXZlbnQ6IGFueSkge1xuICAgIC8vQVAtMTBNQVIyNSBVcGRhdGVzIHRoZSB0aXRsZSBvZiB0aGUgZmlyc3QgcmVjb3JkIGluIHRoZSBwZGYgIFxuICAgIHRoaXMucGRmLnRpdGxlID0gZXZlbnQ7XG4gIH1cbiAgc2V0U2VsZWN0ZWRFbGVtZW50KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudFN1YmplY3QubmV4dChpbmRleCk7XG4gICAgdGhpcy5jdXJyZW50RWxlbWVudCA9IHRoaXMucGRmRWxlbWVudHNbaW5kZXhdXG4gICAgdGhpcy5zZWxlY3RUYWJsZUNvbHVtbiA9IG51bGxcbiAgfVxuICAvLyBTS1MxOU1BUjI1IHNldCB0aGUgc2VsZWN0ZWQgdGFibGUgY29sdW1uXG4gIHNldFNlbGVjdGVkVGFibGVFbGVtZW50KGluZGV4OiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnRFbGVtZW50ID0gdGhpcy5wZGZFbGVtZW50c1tpbmRleF1cbiAgICBpZiAodGhpcy5jdXJyZW50RWxlbWVudD8udHlwZSA9PT0gJ1RhYmxlJykge1xuICAgIH1cbiAgICBjb25zdCBmb3VuZEl0ZW0gPSB0aGlzLmN1cnJlbnRFbGVtZW50Py50eXBlID09PSAnVGFibGUnID8gdGhpcy5jdXJyZW50RWxlbWVudFsnZmllbGRzTWV0YSddLmZpbmQoaXRlbSA9PiBpdGVtWydhcGlOYW1lJ10gPT09IGV2ZW50Py5jb2x1bW4pIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuc2VsZWN0VGFibGVDb2x1bW4gPSBmb3VuZEl0ZW0/LnVuaXF1ZUlkZW50aWZpZXJcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudFN1YmplY3QubmV4dChpbmRleCk7XG4gIH1cbiAgcmVtb3ZlU2VsZWN0ZWRUYWJsZUVsZW1lbnQoaW5kZXg6IG51bWJlciwgZXZlbnQ6IGFueSkge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZGRkXCIsaW5kZXgsIGV2ZW50KVxuICAgIHRoaXMuY3VycmVudEVsZW1lbnQgPSB0aGlzLnBkZkVsZW1lbnRzW2luZGV4XTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRFbGVtZW50Py50eXBlID09PSAnVGFibGUnKSB7XG4gICAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgaXRlbVxuICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5jdXJyZW50RWxlbWVudFsnZmllbGRzTWV0YSddLmZpbmRJbmRleChpdGVtID0+IGl0ZW1bJ2FwaU5hbWUnXSA9PT0gZXZlbnQ/LmNvbHVtbik7XG4gICAgICAvLyBSZW1vdmUgdGhlIGl0ZW0gaWYgZm91bmRcbiAgICAgIGlmIChpdGVtSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEVsZW1lbnRbJ2ZpZWxkc01ldGEnXS5zcGxpY2UoaXRlbUluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZWxlY3RUYWJsZUNvbHVtbiA9IG51bGxcbiAgICB0aGlzLmVsZW1lbnRVcGRhdGUoaW5kZXgsIHRoaXMuY3VycmVudEVsZW1lbnQpXG4gIH1cbiAgLy8gU0tTMTlNQVIyNSBnZXQgdGhlIHNlbGVjdGVkIHRhYmxlIGNvbHVtblxuICBnZXRTZWxlY3RUYWJsZUNvbHVtbigpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RUYWJsZUNvbHVtbjtcbiAgfVxuICBzZWxlY3RIZWFkaW5nKGV2ZW50OiBhbnkpIHtcbiAgICAvL0FQLTEwTUFSMjUgRW1pdHMgdGhlIHNlbGVjdGVkIGhlYWRpbmcgZXZlbnQgIFxuICAgIHRoaXMuc2VsZWN0SGVhZGVyU3ViamVjdC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIGdldEVsZW1lbnRzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5wZGZFbGVtZW50cy5tYXAoZWxlbWVudCA9PiAoe1xuICAgICAgLi4uZWxlbWVudFxuICAgIH0pKTtcbiAgfVxuICBzb3J0RWxlbWVudHNCeU9yZGVyKCk6IHZvaWQge1xuICAgIC8vQVAtMTBNQVIyNSBTb3J0IGVsZW1lbnRzIGJ5IGN1cnJlbnQgb3JkZXJcbiAgICB0aGlzLnBkZkVsZW1lbnRzLnNvcnQoKGEsIGIpID0+IGEucXVlc3Rpb25OdW1iZXIgLSBiLnF1ZXN0aW9uTnVtYmVyKTtcbiAgICB0aGlzLnBkZkVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBlbGVtZW50LnF1ZXN0aW9uTnVtYmVyID0gaW5kZXggKyAxO1xuICAgIH0pO1xuICAgIHRoaXMucGRmRWxlbWVudHNTdWJqZWN0Lm5leHQoWy4uLnRoaXMucGRmRWxlbWVudHNdKTtcbiAgfVxuICAvL0FQLTEwTUFSMjUgUmV0dXJucyB0aGUgY3VycmVudCBwZGYgZGF0YSAgXG4gIGdldEJvb2soKSB7XG4gICAgcmV0dXJuIHRoaXMucGRmO1xuICB9XG5cbmRvd25sb2FkRWxlbWVudCgpIHtcbiAgdGhpcy5wZGZFbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgZWxlbWVudC52YWx1ZSA9IGVsZW1lbnQucXVlc3Rpb24gfHwgZWxlbWVudC52YWx1ZSB8fCAnJztcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuc3ViVGV4dCAmJiB0eXBlb2YgZWxlbWVudC5zdWJUZXh0ID09PSAnb2JqZWN0Jykge1xuICAgICAgZWxlbWVudC5zdWJUZXh0ID0gSlNPTi5zdHJpbmdpZnkoZWxlbWVudC5zdWJUZXh0KTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQucGRmUmVmZXJlbmNlUXVlc3Rpb25zKSB7XG4gICAgICBkZWxldGUgZWxlbWVudC5wZGZSZWZlcmVuY2VRdWVzdGlvbnM7XG4gICAgfVxuICB9KTtcblxuICB0aGlzLnBkZlt0aGlzLnVuaXF1ZV9pZF0gPSB0aGlzLnBkZkVsZW1lbnRzO1xuICB0aGlzLnBkZlsncGRmSnNvbiddID0gdGhpcy5jb252ZXJ0VG9QZGZMYXlvdXQodGhpcy5wZGYpO1xuXG4gIC8vIFNjYWxlIHdpZHRocyBmb3IgY29sdW1uc1xuICB0aGlzLnBkZj8ucGRmSnNvbj8uY29udGVudD8uZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICByb3cuY29sdW1ucz8uZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY29sLndpZHRoID09PSAnbnVtYmVyJyAmJiBjb2wud2lkdGggPCA1MjApIHtcbiAgICAgICAgY29sLndpZHRoID0gY29sLndpZHRoICogNS4yO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBjb25zb2xlLmxvZygncGRmJywgdGhpcy5wZGYucGRmSnNvbik7XG4gIHJldHVybiB0aGlzLnBkZjtcbn1cblxuY29udmVydFRvUGRmTGF5b3V0KGlucHV0OiBhbnkpOiBhbnkge1xuICBjb25zdCByZXN1bHQgPSB7IGNvbnRlbnQ6IFtdIH07XG4gIGNvbnN0IGl0ZW1zID0gaW5wdXRbdGhpcy51bmlxdWVfaWRdO1xuXG4gIGNvbnN0IHN0eWxlUHJvcHMgPSAoaXRlbTogYW55KSA9PiAoe1xuICAgIGZvbnRTaXplOiBpdGVtLmZvbnRTaXplIHx8IDE0LFxuICAgIGJvbGQ6IGl0ZW0uZm9udFN0eWxlID09PSAnYm9sZCcgfHwgaXRlbS5mb250V2VpZ2h0ID49IDcwMCxcbiAgICBpdGFsaWNzOiBpdGVtLmZvbnRTdHlsZSA9PT0gJ2l0YWxpYycsXG4gICAgYWxpZ25tZW50OiBpdGVtLmFsaWduSXRlbXMgfHwgJycsXG4gICAgbWFyZ2luOiBpdGVtLm1hcmdpbiB8fCBbMCwgMCwgMCwgMF1cbiAgfSk7XG5cbiAgY29uc3QgcHJvY2Vzc0l0ZW1zID0gKGl0ZW1zOiBhbnlbXSk6IGFueVtdID0+IHtcbiAgICBjb25zdCByb3dzID0gW107XG4gICAgbGV0IGN1cnJlbnRSb3cgPSB7IGNvbHVtbnM6IFtdIH07XG4gICAgbGV0IGN1cnJlbnRXaWR0aCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gaXRlbS53aWR0aCB8fCAxMDA7XG4gICAgICBsZXQgZWxlbWVudDogYW55ID0geyB3aWR0aCwgLi4uc3R5bGVQcm9wcyhpdGVtKSB9O1xuXG4gICAgICBpZiAoY3VycmVudFdpZHRoICsgd2lkdGggPiAxMDApIHtcbiAgICAgICAgcm93cy5wdXNoKGN1cnJlbnRSb3cpO1xuICAgICAgICBjdXJyZW50Um93ID0geyBjb2x1bW5zOiBbXSB9O1xuICAgICAgICBjdXJyZW50V2lkdGggPSAwO1xuICAgICAgfVxuICAgICAgLy8gaWYgKGl0ZW0udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAvLyAgIGVsZW1lbnQudGV4dCA9IChpdGVtLnF1ZXN0aW9uIHx8IGl0ZW0udmFsdWUgfHwgJycpLnJlcGxhY2UoL1xcXFxuL2csICdcXG4nKTtcbiAgICAgIC8vIH1cbiAgICAgIGlmIChpdGVtLnR5cGUgPT09IFwiU3BhY2VcIikge1xuICAgICAgICBjdXJyZW50Um93LmNvbHVtbnMucHVzaCh7IHdpZHRoLCB0ZXh0OiAnJywgLi4uc3R5bGVQcm9wcyhpdGVtKSB9KTtcblxuICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdMaW5lJykge1xuICAgICAgICBlbGVtZW50LmNhbnZhcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnbGluZScsXG4gICAgICAgICAgICB4MTogaXRlbS54MSA/PyAwLFxuICAgICAgICAgICAgeTE6IGl0ZW0ueTEgPz8gMCxcbiAgICAgICAgICAgIHgyOiBpdGVtLngyID8/IDUyMCxcbiAgICAgICAgICAgIHkyOiBpdGVtLnkyID8/IDAsXG4gICAgICAgICAgICBsaW5lV2lkdGg6IGl0ZW0ubGluZVdpZHRoID8/IDEsXG4gICAgICAgICAgICBsaW5lQ29sb3I6IGl0ZW0ubGluZUNvbG9yID8/ICcjMDAwMDAwJ1xuICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICAgICAgY3VycmVudFJvdy5jb2x1bW5zLnB1c2goZWxlbWVudCk7XG5cbiAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBcIlBkZlwiICYmIGl0ZW0ucGRmUmVmZXJlbmNlKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZFF1ZXN0aW9ucyA9IGlucHV0W3RoaXMudW5pcXVlX2lkXS5maW5kKHEgPT4gcS5pZCA9PT0gaXRlbS5wZGZSZWZlcmVuY2UpPy5jaGlsZHJlbiB8fCBbXTtcbiAgICAgICAgY29uc3QgbmVzdGVkQ29udGVudCA9IHByb2Nlc3NJdGVtcyhuZXN0ZWRRdWVzdGlvbnMpO1xuXG4gICAgICAgIGlmIChjdXJyZW50Um93LmNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJvd3MucHVzaChjdXJyZW50Um93KTtcbiAgICAgICAgICBjdXJyZW50Um93ID0geyBjb2x1bW5zOiBbXSB9O1xuICAgICAgICAgIGN1cnJlbnRXaWR0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcm93cy5wdXNoKC4uLm5lc3RlZENvbnRlbnQpO1xuXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ1RhYmxlJykge1xuICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnMgPSBpdGVtLmZpZWxkc01ldGEgfHwgW107XG4gICAgICAgIGNvbnN0IHZpc2libGVDb3VudCA9IE1hdGgubWluKDMsIHRhYmxlQ29sdW1ucy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBtYWluQ29sdW1ucyA9IHRhYmxlQ29sdW1ucy5zbGljZSgwLCB2aXNpYmxlQ291bnQpO1xuICAgICAgICBjb25zdCBzdW1tYXJ5Q29sdW1ucyA9IHRhYmxlQ29sdW1ucy5zbGljZSh2aXNpYmxlQ291bnQpO1xuXG4gICAgICAgIGNvbnN0IGJvZHk6IGFueVtdW10gPSBbXTtcblxuICAgICAgICAvLyBUYWJsZSBoZWFkZXJzXG4gICAgICAgIGJvZHkucHVzaChtYWluQ29sdW1ucy5tYXAoY29sID0+ICh7XG4gICAgICAgICAgdGV4dDogY29sLmxhYmVsLFxuICAgICAgICAgIC4uLnN0eWxlUHJvcHMoaXRlbSlcbiAgICAgICAgfSkpKTtcblxuICAgICAgICAvLyBGaWVsZCBuYW1lc1xuICAgICAgICBib2R5LnB1c2gobWFpbkNvbHVtbnMubWFwKGNvbCA9PiAoe1xuICAgICAgICAgIHRleHQ6IGNvbC5hcGlOYW1lLFxuICAgICAgICAgIC4uLnN0eWxlUHJvcHMoaXRlbSlcbiAgICAgICAgfSkpKTtcblxuICAgICAgICAvLyBTdW1tYXJ5IHJvd3NcbiAgICAgICAgc3VtbWFyeUNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gbmV3IEFycmF5KHZpc2libGVDb3VudCkuZmlsbCh7IHRleHQ6ICcnLCAuLi5zdHlsZVByb3BzKGl0ZW0pIH0pO1xuICAgICAgICAgIHJvd1t2aXNpYmxlQ291bnQgLSAyXSA9IHsgdGV4dDogY29sLmxhYmVsLCAuLi5zdHlsZVByb3BzKGl0ZW0pIH07XG4gICAgICAgICAgcm93W3Zpc2libGVDb3VudCAtIDFdID0geyB0ZXh0OiBjb2wuYXBpTmFtZSwgLi4uc3R5bGVQcm9wcyhpdGVtKSB9O1xuICAgICAgICAgIGJvZHkucHVzaChyb3cpO1xuICAgICAgICB9KTtcblxuICAgICAgICBlbGVtZW50ID0ge1xuICAgICAgICAgIHdpZHRoOiBpdGVtLndpZHRoIHx8IDUyMCxcbiAgICAgICAgICB0YWJsZToge1xuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHdpZHRoczogbmV3IEFycmF5KHZpc2libGVDb3VudCkuZmlsbCgnKicpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYXlvdXQ6ICdsaWdodEhvcml6b250YWxMaW5lcycsXG4gICAgICAgICAgLi4uc3R5bGVQcm9wcyhpdGVtKVxuICAgICAgICB9O1xuICAgICAgICBjdXJyZW50Um93LmNvbHVtbnMucHVzaChlbGVtZW50KTtcblxuICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgICAgY3VycmVudFJvdy5jb2x1bW5zLnB1c2goe1xuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGltYWdlOiBpdGVtLmltYWdlRGF0YSB8fCAnJyxcbiAgICAgICAgICBmaXQ6IFtpdGVtLndpZHRoIHx8IDEwMCwgaXRlbS5oZWlnaHQgfHwgMTAwXSxcbiAgICAgICAgICAuLi5zdHlsZVByb3BzKGl0ZW0pXG4gICAgICAgIH0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWwgPSBpdGVtLnZhbHVlIHx8ICcnO1xuICAgICAgICBjdXJyZW50Um93LmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgdGV4dDogdmFsLFxuICAgICAgICAgIC4uLnN0eWxlUHJvcHMoaXRlbSlcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRXaWR0aCArPSB3aWR0aDtcblxuICAgICAgaWYgKGN1cnJlbnRXaWR0aCA9PT0gMTAwKSB7XG4gICAgICAgIHJvd3MucHVzaChjdXJyZW50Um93KTtcbiAgICAgICAgY3VycmVudFJvdyA9IHsgY29sdW1uczogW10gfTtcbiAgICAgICAgY3VycmVudFdpZHRoID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFJvdy5jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJvd3MucHVzaChjdXJyZW50Um93KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93cztcbiAgfTtcblxuICByZXN1bHQuY29udGVudCA9IHByb2Nlc3NJdGVtcyhpdGVtcyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4gIC8vIEFQLTA2TUFSMjUgLSBFbGVtZW50IG5ldyBvcmRlciB1cGRhdGVcbiAgdXBkYXRlRWxlbWVudHNPcmRlcih1cGRhdGVkRWxlbWVudHM6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5wZGZFbGVtZW50cyA9IFsuLi51cGRhdGVkRWxlbWVudHNdO1xuICAgIHRoaXMucGRmRWxlbWVudHNTdWJqZWN0Lm5leHQodGhpcy5wZGZFbGVtZW50cyk7XG4gIH1cbiAgLy8gUmVtb3ZlIGFuIGVsZW1lbnQgYnkgSURcbiAgLy8gU2F2ZSBlbGVtZW50cyB0byBsb2NhbFN0b3JhZ2UgYW5kIHVwZGF0ZSB0aGUgc3ViamVjdFxuICByZW1vdmVFbGVtZW50Q29tcG9uZW50KGlkOiBhbnkpIHtcbiAgICB0aGlzLnRlbXBFbGVtID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgdGhpcy5jdXJyZW50RWxlbWVudCA9IHt9XG4gICAgdGhpcy5wZGZFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmlkICE9PSBpZCkge1xuICAgICAgICB0aGlzLnRlbXBFbGVtLnB1c2goZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5wZGZFbGVtZW50cyA9IHRoaXMudGVtcEVsZW07XG4gICAgdGhpcy5wZGZFbGVtZW50c1N1YmplY3QubmV4dChbLi4udGhpcy5wZGZFbGVtZW50c10pO1xuICB9XG4gIC8vIFNLUzE5TUFSMjUgdXBkYXRlIHRoZSBlbGVtZW50XG4gIGVsZW1lbnRVcGRhdGUoaW5kZXg6IGFueSwgZWxlbWVudDogYW55KSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBbLi4udGhpcy5nZXRFbGVtZW50cygpXTtcbiAgICBpZiAoZWxlbWVudHNbaW5kZXhdKSB7XG4gICAgICBlbGVtZW50c1tpbmRleF0gPSBlbGVtZW50XG4gICAgICB0aGlzLnBkZkVsZW1lbnRzID0gZWxlbWVudHM7XG4gICAgICB0aGlzLnNvcnRFbGVtZW50c0J5T3JkZXIoKTtcbiAgICAgIHRoaXMucGRmRWxlbWVudHNTdWJqZWN0Lm5leHQoWy4uLmVsZW1lbnRzXSk7XG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudFN1YmplY3QubmV4dChpbmRleCk7XG4gICAgfVxuICB9XG59XG4iXX0=