@lumeer/pivot 0.0.2 → 0.0.5

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.
@@ -43,7 +43,8 @@ export class PivotDataConverter {
43
43
  const pivotConstraint = aggregatorAttribute.data && aggregatorAttribute.data;
44
44
  const overrideConstraint = pivotConstraint && this.transform?.checkValidConstraintOverride?.(constraint, pivotConstraint);
45
45
  const finalConstraint = overrideConstraint || constraint || new UnknownConstraint();
46
- return this.formatDataValue(finalConstraint.createDataValue(value, constraintData), finalConstraint);
46
+ const serializedValue = (constraint || new UnknownConstraint()).createDataValue(value, constraintData).serialize();
47
+ return this.formatDataValue(finalConstraint.createDataValue(serializedValue, constraintData), finalConstraint);
47
48
  }
48
49
  formatDataValue(dataValue, constraint) {
49
50
  switch (constraint.type) {
@@ -129,14 +130,14 @@ export class PivotDataConverter {
129
130
  const filteredValueAttributes = (config.valueAttributes || []).filter(valueAttr => !mergedValueAttributes.some(merAttr => deepObjectsEquals(valueAttr, merAttr)));
130
131
  mergedValueAttributes.push(...filteredValueAttributes);
131
132
  if (!additionalData) {
133
+ const rowSticky = this.mapStickyValues((config.rowAttributes || []).map(attr => attr.sticky));
134
+ const columnSticky = this.mapStickyValues((config.columnAttributes || []).map(attr => attr.sticky));
132
135
  additionalData = {
133
- rowShowSums: (config.rowAttributes || []).map(attr => attr.showSums),
134
- rowSticky: this.mapStickyValues((config.rowAttributes || []).map(attr => !!attr.sticky)),
135
- rowSorts: (config.rowAttributes || []).map(attr => attr.sort),
136
+ rowsConfig: (config.rowAttributes || []).map((attr, index) => ({ showSums: attr.showSums, sort: attr.sort, expressions: attr.expressions, sticky: rowSticky[index] })),
137
+ columnsConfig: (config.columnAttributes || []).map((attr, index) => ({ showSums: attr.showSums, sort: attr.sort, expressions: attr.expressions, sticky: columnSticky[index] })),
138
+ rowShowHeaderAttributes: (config.rowAttributes || []).map(attr => attr.showHeader),
136
139
  rowAttributes: (config.rowAttributes || []).map(attr => this.pivotAttributeAttribute(attr)),
137
- columnShowSums: (config.columnAttributes || []).map(attr => attr.showSums),
138
- columnSticky: this.mapStickyValues((config.columnAttributes || []).map(attr => !!attr.sticky)),
139
- columnSorts: (config.columnAttributes || []).map(attr => attr.sort),
140
+ columnShowHeaderAttributes: (config.columnAttributes || []).map(attr => false),
140
141
  columnAttributes: (config.columnAttributes || []).map(attr => this.pivotAttributeAttribute(attr)),
141
142
  };
142
143
  }
@@ -236,19 +237,17 @@ export class PivotDataConverter {
236
237
  }, { titles: [], constraints: [], headers: [], values: [], dataResources: [], valueTypes: [], aggregations: [] });
237
238
  return {
238
239
  columnHeaders: data.headers,
240
+ columnHeaderAttributes: [],
239
241
  rowHeaders: [],
242
+ rowHeaderAttributes: [],
240
243
  valueTitles: data.titles,
241
244
  values: [data.values],
242
245
  dataResources: [data.dataResources],
243
246
  valuesConstraints: data.constraints,
244
247
  valueTypes: data.valueTypes,
245
248
  valueAggregations: data.aggregations,
246
- rowShowSums: [],
247
- rowSticky: [],
248
- rowSorts: [],
249
- columnShowSums: [],
250
- columnSticky: [],
251
- columnSorts: [],
249
+ rowsConfig: [],
250
+ columnsConfig: [],
252
251
  hasAdditionalColumnLevel: true,
253
252
  };
254
253
  }
@@ -263,8 +262,12 @@ export class PivotDataConverter {
263
262
  }
264
263
  convertAggregatedData(aggregatedData, valueAttributes, pivotColors, additionalData) {
265
264
  const rowData = this.convertMapToPivotDataHeader(aggregatedData.map, aggregatedData.rowLevels, pivotColors.rows, pivotColors.values, additionalData.rowAttributes);
265
+ const rowHeaderAttributes = (additionalData.rowAttributes || [])
266
+ .map((attribute, index) => additionalData.rowShowHeaderAttributes?.[index] ? ({ title: attribute.name, color: pivotColors.rows?.[index] }) : undefined);
266
267
  const { titles: valueTitles, constraints: valuesConstraints } = this.createValueTitles(valueAttributes);
267
268
  const columnData = this.convertMapToPivotDataHeader(aggregatedData.rowLevels > 0 ? aggregatedData.columnsMap : aggregatedData.map, aggregatedData.columnLevels, pivotColors.columns, pivotColors.values, additionalData.columnAttributes, valueTitles);
269
+ const columnHeaderAttributes = (additionalData.columnAttributes || [])
270
+ .map((attribute, index) => additionalData.columnShowHeaderAttributes?.[index] ? ({ title: attribute.name, color: pivotColors.columns?.[index] }) : undefined);
268
271
  const values = this.initMatrix(rowData.maxIndex + 1, columnData.maxIndex + 1);
269
272
  const dataResources = this.initMatrix(rowData.maxIndex + 1, columnData.maxIndex + 1);
270
273
  if ((valueAttributes || []).length > 0) {
@@ -275,7 +278,9 @@ export class PivotDataConverter {
275
278
  (aggregatedData.columnLevels > 0 && valueTitles.length > 1);
276
279
  return {
277
280
  rowHeaders: rowData.headers,
281
+ rowHeaderAttributes,
278
282
  columnHeaders: columnData.headers,
283
+ columnHeaderAttributes,
279
284
  valueTitles,
280
285
  values,
281
286
  dataResources,
@@ -402,7 +407,7 @@ export class PivotDataConverter {
402
407
  }, { titles: [], constraints: [] });
403
408
  }
404
409
  createValueTitle(aggregation, attributeName) {
405
- const valueAggregationTitle = this.transform?.translateAggregation?.(aggregation) || aggregation.toString();
410
+ const valueAggregationTitle = this.transform?.formatAggregation?.(aggregation) || aggregation.toString();
406
411
  return `${valueAggregationTitle} ${attributeName || ''}`.trim();
407
412
  }
408
413
  initMatrix(rows, columns) {
@@ -499,4 +504,4 @@ function canMergeConfigsByType(type, c1, c2) {
499
504
  return ((c1.rowAttributes || []).length === (c2.rowAttributes || []).length &&
500
505
  (c1.columnAttributes || []).length === (c2.columnAttributes || []).length);
501
506
  }
502
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZGF0YS1jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sbXItcGl2b3QtdGFibGUvc3JjL2xpYi91dGlsL3Bpdm90LWRhdGEtY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE9BQU8sRUFPTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGNBQWMsRUFJZCxpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLHlCQUF5QixFQUF3RCxzQkFBc0IsRUFBRSxnQ0FBZ0MsR0FDMUksTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRzNILE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQVNwRCxJQUFLLGVBS0o7QUFMRCxXQUFLLGVBQWU7SUFDbEIseURBQU0sQ0FBQTtJQUNOLHFEQUFJLENBQUE7SUFDSiwyREFBTyxDQUFBO0lBQ1AseUVBQWMsQ0FBQTtBQUNoQixDQUFDLEVBTEksZUFBZSxLQUFmLGVBQWUsUUFLbkI7QUFtQkQsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixXQUFXLENBQWU7SUFDMUIsU0FBUyxDQUFhO0lBQ3RCLHdCQUF3QixDQUE0QztJQUNwRSxzQkFBc0IsQ0FBNEM7SUFDbEUsSUFBSSxDQUF3QjtJQUM1QixNQUFNLENBQWlCO0lBQ3ZCLFNBQVMsQ0FBb0I7SUFDN0IsY0FBYyxDQUFrQjtJQUVoQyxjQUFjLENBQWlCO0lBRXZDO1FBQ0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsQ0FDeEYsSUFBSSxDQUFDLGdCQUFn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Q0FBQyxDQUFDLE1BQU0sQ0FBQztLQUNsRjtJQUNELE9BQU8sQ0FDTCxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQ25FLENBQUMsRUFBRSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQzFFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEx1bWVlcjogTW9kZXJuIERhdGEgRGVmaW5pdGlvbiBhbmQgUHJvY2Vzc2luZyBQbGF0Zm9ybVxuICpcbiAqIENvcHlyaWdodCAoQykgc2luY2UgMjAxNyBMdW1lZXIuaW8sIHMuci5vLiBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBBZ2dyZWdhdGVkRGF0YU1hcCxcbiAgQWdncmVnYXRlZERhdGFWYWx1ZXMsXG4gIEFnZ3JlZ2F0ZWRNYXBEYXRhLFxuICBDb25zdHJhaW50LFxuICBDb25zdHJhaW50RGF0YSxcbiAgQ29uc3RyYWludFR5cGUsXG4gIERhdGFBZ2dyZWdhdGlvblR5cGUsXG4gIERhdGFBZ2dyZWdhdG9yLFxuICBEYXRhQWdncmVnYXRvckF0dHJpYnV0ZSxcbiAgRGF0YVZhbHVlLFxuICBEb2N1bWVudHNBbmRMaW5rc0RhdGEsXG4gIFVua25vd25Db25zdHJhaW50LFxuICBhZ2dyZWdhdGVEYXRhUmVzb3VyY2VzLFxuICBkYXRhQWdncmVnYXRpb25Db25zdHJhaW50LCBRdWVyeVN0ZW0sIENvbGxlY3Rpb24sIExpbmtUeXBlLCBEYXRhUmVzb3VyY2UsIFF1ZXJ5LCBBdHRyaWJ1dGVzUmVzb3VyY2VUeXBlLCBhdHRyaWJ1dGVzUmVzb3VyY2VzQXR0cmlidXRlc01hcCxcbn0gZnJvbSAnQGx1bWVlci9kYXRhLWZpbHRlcnMnO1xuaW1wb3J0IHtkZWVwT2JqZWN0c0VxdWFscywgZmxhdHRlbk1hdHJpeCwgZmxhdHRlblZhbHVlcywgaXNBcnJheSwgaXNOb3ROdWxsT3JVbmRlZmluZWQsIHVuaXF1ZVZhbHVlc30gZnJvbSAnQGx1bWVlci91dGlscyc7XG5pbXBvcnQge0xtclBpdm90QXR0cmlidXRlLCBMbXJQaXZvdENvbmZpZywgTG1yUGl2b3RSb3dDb2x1bW5BdHRyaWJ1dGUsIExtclBpdm90U29ydCwgTG1yUGl2b3RTdGVtQ29uZmlnLCBMbXJQaXZvdFRyYW5zZm9ybSwgTG1yUGl2b3RWYWx1ZUF0dHJpYnV0ZX0gZnJvbSAnLi9sbXItcGl2b3QtY29uZmlnJztcbmltcG9ydCB7TG1yUGl2b3REYXRhLCBMbXJQaXZvdERhdGFIZWFkZXIsIExtclBpdm90U3RlbURhdGF9IGZyb20gJy4vbG1yLXBpdm90LWRhdGEnO1xuaW1wb3J0IHtwaXZvdFN0ZW1Db25maWdJc0VtcHR5fSBmcm9tICcuL3Bpdm90LXV0aWwnO1xuXG5pbnRlcmZhY2UgUGl2b3RNZXJnZURhdGEge1xuICBjb25maWdzOiBMbXJQaXZvdFN0ZW1Db25maWdbXTtcbiAgc3RlbXM6IFF1ZXJ5U3RlbVtdO1xuICBzdGVtc0luZGV4ZXM6IG51bWJlcltdO1xuICB0eXBlOiBQaXZvdENvbmZpZ1R5cGU7XG59XG5cbmVudW0gUGl2b3RDb25maWdUeXBlIHtcbiAgVmFsdWVzLFxuICBSb3dzLFxuICBDb2x1bW5zLFxuICBSb3dzQW5kQ29sdW1ucyxcbn1cblxuaW50ZXJmYWNlIFBpdm90Q29sb3JzIHtcbiAgcm93czogc3RyaW5nW107XG4gIGNvbHVtbnM6IHN0cmluZ1tdO1xuICB2YWx1ZXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgUGl2b3RDb25maWdEYXRhIHtcbiAgcm93U2hvd1N1bXM6IGJvb2xlYW5bXTtcbiAgcm93U3RpY2t5OiBib29sZWFuW107XG4gIHJvd1NvcnRzOiBMbXJQaXZvdFNvcnRbXTtcbiAgY29sdW1uU2hvd1N1bXM6IGJvb2xlYW5bXTtcbiAgY29sdW1uU3RpY2t5OiBib29sZWFuW107XG4gIGNvbHVtblNvcnRzOiBMbXJQaXZvdFNvcnRbXTtcbiAgcm93QXR0cmlidXRlczogQXR0cmlidXRlW107XG4gIGNvbHVtbkF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdO1xufVxuXG5leHBvcnQgY2xhc3MgUGl2b3REYXRhQ29udmVydGVyIHtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uczogQ29sbGVjdGlvbltdO1xuICBwcml2YXRlIGxpbmtUeXBlczogTGlua1R5cGVbXTtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uc0F0dHJpYnV0ZXNNYXA6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEF0dHJpYnV0ZT4+O1xuICBwcml2YXRlIGxpbmtUeXBlc0F0dHJpYnV0ZXNNYXA6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEF0dHJpYnV0ZT4+O1xuICBwcml2YXRlIGRhdGE6IERvY3VtZW50c0FuZExpbmtzRGF0YTtcbiAgcHJpdmF0ZSBjb25maWc6IExtclBpdm90Q29uZmlnO1xuICBwcml2YXRlIHRyYW5zZm9ybTogTG1yUGl2b3RUcmFuc2Zvcm07XG4gIHByaXZhdGUgY29uc3RyYWludERhdGE/OiBDb25zdHJhaW50RGF0YTtcblxuICBwcml2YXRlIGRhdGFBZ2dyZWdhdG9yOiBEYXRhQWdncmVnYXRvcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRhdGFBZ2dyZWdhdG9yID0gbmV3IERhdGFBZ2dyZWdhdG9yKCh2YWx1ZSwgY29uc3RyYWludCwgZGF0YSwgYWdncmVnYXRvckF0dHJpYnV0ZSkgPT5cbiAgICAgIHRoaXMuZm9ybWF0UGl2b3RWYWx1ZSh2YWx1ZSwgY29uc3RyYWludCwgZGF0YSwgYWdncmVnYXRvckF0dHJpYnV0ZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRQaXZvdFZhbHVlKFxuICAgIHZhbHVlOiBhbnksXG4gICAgY29uc3RyYWludDogQ29uc3RyYWludCxcbiAgICBjb25zdHJhaW50RGF0YTogQ29uc3RyYWludERhdGEsXG4gICAgYWdncmVnYXRvckF0dHJpYnV0ZTogRGF0YUFnZ3JlZ2F0b3JBdHRyaWJ1dGVcbiAgKTogYW55IHtcbiAgICBjb25zdCBwaXZvdENvbnN0cmFpbnQgPSBhZ2dyZWdhdG9yQXR0cmlidXRlLmRhdGEgJiYgKGFnZ3JlZ2F0b3JBdHRyaWJ1dGUuZGF0YSBhcyBDb25zdHJhaW50KTtcbiAgICBjb25zdCBvdmVycmlkZUNvbnN0cmFpbnQgPVxuICAgICAgcGl2b3RDb25zdHJhaW50ICYmIHRoaXMudHJhbnNmb3JtPy5jaGVja1ZhbGlkQ29uc3RyYWludE92ZXJyaWRlPy4oY29uc3RyYWludCwgcGl2b3RDb25zdHJhaW50KTtcbiAgICBjb25zdCBmaW5hbENvbnN0cmFpbnQgPSBvdmVycmlkZUNvbnN0cmFpbnQgfHwgY29uc3RyYWludCB8fCBuZXcgVW5rbm93bkNvbnN0cmFpbnQoKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXREYXRhVmFsdWUoZmluYWxDb25zdHJhaW50LmNyZWF0ZURhdGFWYWx1ZSh2YWx1ZSwgY29uc3RyYWludERhdGEpLCBmaW5hbENvbnN0cmFpbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXREYXRhVmFsdWUoZGF0YVZhbHVlOiBEYXRhVmFsdWUsIGNvbnN0cmFpbnQ6IENvbnN0cmFpbnQpOiBhbnkge1xuICAgIHN3aXRjaCAoY29uc3RyYWludC50eXBlKSB7XG4gICAgICBjYXNlIENvbnN0cmFpbnRUeXBlLkRhdGVUaW1lOlxuICAgICAgICByZXR1cm4gZGF0YVZhbHVlLmZvcm1hdCgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRhdGFWYWx1ZS5zZXJpYWxpemUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURhdGEoXG4gICAgY29uZmlnOiBMbXJQaXZvdENvbmZpZyxcbiAgICB0cmFuc2Zvcm06IExtclBpdm90VHJhbnNmb3JtLFxuICAgIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uW10sXG4gICAgbGlua1R5cGVzOiBMaW5rVHlwZVtdLFxuICAgIGRhdGE6IERvY3VtZW50c0FuZExpbmtzRGF0YSxcbiAgICBjb25zdHJhaW50RGF0YTogQ29uc3RyYWludERhdGFcbiAgKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgdGhpcy5jb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25zO1xuICAgIHRoaXMubGlua1R5cGVzID0gbGlua1R5cGVzO1xuICAgIHRoaXMuY29sbGVjdGlvbnNBdHRyaWJ1dGVzTWFwID0gYXR0cmlidXRlc1Jlc291cmNlc0F0dHJpYnV0ZXNNYXAoY29sbGVjdGlvbnMpO1xuICAgIHRoaXMubGlua1R5cGVzQXR0cmlidXRlc01hcCA9IGF0dHJpYnV0ZXNSZXNvdXJjZXNBdHRyaWJ1dGVzTWFwKGxpbmtUeXBlcyk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmNvbnN0cmFpbnREYXRhID0gY29uc3RyYWludERhdGE7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRGF0YShcbiAgICBjb25maWc6IExtclBpdm90Q29uZmlnLFxuICAgIHRyYW5zZm9ybTogTG1yUGl2b3RUcmFuc2Zvcm0sXG4gICAgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25bXSxcbiAgICBsaW5rVHlwZXM6IExpbmtUeXBlW10sXG4gICAgZGF0YTogRG9jdW1lbnRzQW5kTGlua3NEYXRhLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICBjb25zdHJhaW50RGF0YT86IENvbnN0cmFpbnREYXRhXG4gICk6IExtclBpdm90RGF0YSB7XG4gICAgdGhpcy51cGRhdGVEYXRhKGNvbmZpZywgdHJhbnNmb3JtLCBjb2xsZWN0aW9ucywgbGlua1R5cGVzLCBkYXRhLCBjb25zdHJhaW50RGF0YSk7XG5cbiAgICBjb25zdCB7c3RlbXNDb25maWdzLCBzdGVtc30gPSB0aGlzLmZpbHRlckVtcHR5Q29uZmlncyhjb25maWcsIHF1ZXJ5KTtcblxuICAgIGNvbnN0IG1lcmdlRGF0YSA9IHRoaXMuY3JlYXRlUGl2b3RNZXJnZURhdGEoY29uZmlnLm1lcmdlVGFibGVzLCBzdGVtc0NvbmZpZ3MsIHN0ZW1zKTtcbiAgICBjb25zdCBhYmxlVG9NZXJnZSA9IG1lcmdlRGF0YS5sZW5ndGggPD0gMTtcbiAgICBjb25zdCBwaXZvdERhdGEgPSB0aGlzLm1lcmdlUGl2b3REYXRhKG1lcmdlRGF0YSk7XG4gICAgcmV0dXJuIHtkYXRhOiBwaXZvdERhdGEsIGNvbnN0cmFpbnREYXRhLCBhYmxlVG9NZXJnZSwgbWVyZ2VUYWJsZXM6IGNvbmZpZy5tZXJnZVRhYmxlc307XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckVtcHR5Q29uZmlncyhjb25maWc6IExtclBpdm90Q29uZmlnLCBxdWVyeTogUXVlcnkpOiB7c3RlbXNDb25maWdzOiBMbXJQaXZvdFN0ZW1Db25maWdbXTsgc3RlbXM6IFF1ZXJ5U3RlbVtdfSB7XG4gICAgcmV0dXJuIChjb25maWcuc3RlbXNDb25maWdzIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAoe3N0ZW1zQ29uZmlncywgc3RlbXN9LCBzdGVtQ29uZmlnLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIXBpdm90U3RlbUNvbmZpZ0lzRW1wdHkoc3RlbUNvbmZpZykpIHtcbiAgICAgICAgICBjb25zdCBzdGVtID0gKHF1ZXJ5LnN0ZW1zIHx8IFtdKVtpbmRleF07XG4gICAgICAgICAgc3RlbXNDb25maWdzLnB1c2goc3RlbUNvbmZpZyk7XG4gICAgICAgICAgc3RlbXMucHVzaChzdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7c3RlbXNDb25maWdzLCBzdGVtc307XG4gICAgICB9LFxuICAgICAge3N0ZW1zQ29uZmlnczogW10sIHN0ZW1zOiBbXX1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQaXZvdE1lcmdlRGF0YShcbiAgICBtZXJnZVRhYmxlczogYm9vbGVhbixcbiAgICBzdGVtc0NvbmZpZ3M6IExtclBpdm90U3RlbUNvbmZpZ1tdLFxuICAgIHN0ZW1zOiBRdWVyeVN0ZW1bXVxuICApOiBQaXZvdE1lcmdlRGF0YVtdIHtcbiAgICByZXR1cm4gc3RlbXNDb25maWdzLnJlZHVjZSgobWVyZ2VEYXRhOiBQaXZvdE1lcmdlRGF0YVtdLCBzdGVtQ29uZmlnLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnVHlwZSA9IGdldFBpdm90U3RlbUNvbmZpZ1R5cGUoc3RlbUNvbmZpZyk7XG4gICAgICBjb25zdCBtZXJnZURhdGFJbmRleCA9IG1lcmdlRGF0YS5maW5kSW5kZXgoXG4gICAgICAgIGRhdGEgPT4gZGF0YS50eXBlID09PSBjb25maWdUeXBlICYmIGNhbk1lcmdlQ29uZmlnc0J5VHlwZShkYXRhLnR5cGUsIGRhdGEuY29uZmlnc1swXSwgc3RlbUNvbmZpZylcbiAgICAgICk7XG4gICAgICBpZiAobWVyZ2VUYWJsZXMgJiYgbWVyZ2VEYXRhSW5kZXggPj0gMCkge1xuICAgICAgICBtZXJnZURhdGFbbWVyZ2VEYXRhSW5kZXhdLmNvbmZpZ3MucHVzaChzdGVtQ29uZmlnKTtcbiAgICAgICAgbWVyZ2VEYXRhW21lcmdlRGF0YUluZGV4XS5zdGVtcy5wdXNoKHN0ZW1zW2luZGV4XSk7XG4gICAgICAgIG1lcmdlRGF0YVttZXJnZURhdGFJbmRleF0uc3RlbXNJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVyZ2VEYXRhLnB1c2goe2NvbmZpZ3M6IFtzdGVtQ29uZmlnXSwgc3RlbXM6IFtzdGVtc1tpbmRleF1dLCBzdGVtc0luZGV4ZXM6IFtpbmRleF0sIHR5cGU6IGNvbmZpZ1R5cGV9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lcmdlRGF0YTtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlUGl2b3REYXRhKG1lcmdlRGF0YTogUGl2b3RNZXJnZURhdGFbXSk6IExtclBpdm90U3RlbURhdGFbXSB7XG4gICAgcmV0dXJuIG1lcmdlRGF0YS5yZWR1Y2UoKHN0ZW1EYXRhLCBkYXRhKSA9PiB7XG4gICAgICBpZiAoZGF0YS50eXBlID09PSBQaXZvdENvbmZpZ1R5cGUuVmFsdWVzKSB7XG4gICAgICAgIHN0ZW1EYXRhLnB1c2godGhpcy5jb252ZXJ0VmFsdWVBdHRyaWJ1dGVzKGRhdGEuY29uZmlncywgZGF0YS5zdGVtcywgZGF0YS5zdGVtc0luZGV4ZXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZW1EYXRhLnB1c2godGhpcy50cmFuc2Zvcm1TdGVtcyhkYXRhLmNvbmZpZ3MsIGRhdGEuc3RlbXMsIGRhdGEuc3RlbXNJbmRleGVzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RlbURhdGE7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1TdGVtcyhjb25maWdzOiBMbXJQaXZvdFN0ZW1Db25maWdbXSwgcXVlcnlTdGVtczogUXVlcnlTdGVtW10sIHN0ZW1zSW5kZXhlczogbnVtYmVyW10pOiBMbXJQaXZvdFN0ZW1EYXRhIHtcbiAgICBjb25zdCBwaXZvdENvbG9yczogUGl2b3RDb2xvcnMgPSB7cm93czogW10sIGNvbHVtbnM6IFtdLCB2YWx1ZXM6IFtdfTtcbiAgICBjb25zdCBtZXJnZWRWYWx1ZUF0dHJpYnV0ZXM6IExtclBpdm90VmFsdWVBdHRyaWJ1dGVbXSA9IFtdO1xuICAgIGxldCBtZXJnZWRBZ2dyZWdhdGVkRGF0YTogQWdncmVnYXRlZE1hcERhdGEgPSBudWxsO1xuICAgIGxldCBhZGRpdGlvbmFsRGF0YTogUGl2b3RDb25maWdEYXRhO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBjb25maWdzW2ldO1xuICAgICAgY29uc3QgcXVlcnlTdGVtID0gcXVlcnlTdGVtc1tpXTtcbiAgICAgIGNvbnN0IHN0ZW1JbmRleCA9IHN0ZW1zSW5kZXhlc1tpXTtcbiAgICAgIGNvbnN0IHN0ZW1EYXRhID0gdGhpcy5kYXRhPy5kYXRhQnlTdGVtcz8uW3N0ZW1JbmRleF07XG5cbiAgICAgIHRoaXMuZGF0YUFnZ3JlZ2F0b3IudXBkYXRlRGF0YShcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9ucyxcbiAgICAgICAgc3RlbURhdGE/LmRvY3VtZW50cyB8fCBbXSxcbiAgICAgICAgdGhpcy5saW5rVHlwZXMsXG4gICAgICAgIHN0ZW1EYXRhPy5saW5rSW5zdGFuY2VzIHx8IFtdLFxuICAgICAgICBxdWVyeVN0ZW0sXG4gICAgICAgIHRoaXMuY29uc3RyYWludERhdGFcbiAgICAgICk7XG4gICAgICBjb25zdCByb3dBdHRyaWJ1dGVzID0gKGNvbmZpZy5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0cmlidXRlID0+XG4gICAgICAgIHRoaXMuY29udmVydFBpdm90Um93Q29sdW1uQXR0cmlidXRlKGF0dHJpYnV0ZSlcbiAgICAgICk7XG4gICAgICBjb25zdCBjb2x1bW5BdHRyaWJ1dGVzID0gKGNvbmZpZy5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0cmlidXRlID0+XG4gICAgICAgIHRoaXMuY29udmVydFBpdm90Um93Q29sdW1uQXR0cmlidXRlKGF0dHJpYnV0ZSlcbiAgICAgICk7XG4gICAgICBjb25zdCB2YWx1ZUF0dHJpYnV0ZXMgPSAoY29uZmlnLnZhbHVlQXR0cmlidXRlcyB8fCBbXSkubWFwKGF0dHJpYnV0ZSA9PiB0aGlzLmNvbnZlcnRQaXZvdEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTtcblxuICAgICAgcGl2b3RDb2xvcnMucm93cy5wdXNoKC4uLnRoaXMuZ2V0QXR0cmlidXRlc0NvbG9ycyhjb25maWcucm93QXR0cmlidXRlcykpO1xuICAgICAgcGl2b3RDb2xvcnMuY29sdW1ucy5wdXNoKC4uLnRoaXMuZ2V0QXR0cmlidXRlc0NvbG9ycyhjb25maWcuY29sdW1uQXR0cmlidXRlcykpO1xuICAgICAgcGl2b3RDb2xvcnMudmFsdWVzLnB1c2goLi4udGhpcy5nZXRBdHRyaWJ1dGVzQ29sb3JzKGNvbmZpZy52YWx1ZUF0dHJpYnV0ZXMpKTtcblxuICAgICAgY29uc3QgYWdncmVnYXRlZERhdGEgPSB0aGlzLmRhdGFBZ2dyZWdhdG9yLmFnZ3JlZ2F0ZShyb3dBdHRyaWJ1dGVzLCBjb2x1bW5BdHRyaWJ1dGVzLCB2YWx1ZUF0dHJpYnV0ZXMpO1xuICAgICAgbWVyZ2VkQWdncmVnYXRlZERhdGEgPSB0aGlzLm1lcmdlQWdncmVnYXRlZERhdGEobWVyZ2VkQWdncmVnYXRlZERhdGEsIGFnZ3JlZ2F0ZWREYXRhKTtcblxuICAgICAgY29uc3QgZmlsdGVyZWRWYWx1ZUF0dHJpYnV0ZXMgPSAoY29uZmlnLnZhbHVlQXR0cmlidXRlcyB8fCBbXSkuZmlsdGVyKFxuICAgICAgICB2YWx1ZUF0dHIgPT4gIW1lcmdlZFZhbHVlQXR0cmlidXRlcy5zb21lKG1lckF0dHIgPT4gZGVlcE9iamVjdHNFcXVhbHModmFsdWVBdHRyLCBtZXJBdHRyKSlcbiAgICAgICk7XG4gICAgICBtZXJnZWRWYWx1ZUF0dHJpYnV0ZXMucHVzaCguLi5maWx0ZXJlZFZhbHVlQXR0cmlidXRlcyk7XG5cbiAgICAgIGlmICghYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgYWRkaXRpb25hbERhdGEgPSB7XG4gICAgICAgICAgcm93U2hvd1N1bXM6IChjb25maWcucm93QXR0cmlidXRlcyB8fCBbXSkubWFwKGF0dHIgPT4gYXR0ci5zaG93U3VtcyksXG4gICAgICAgICAgcm93U3RpY2t5OiB0aGlzLm1hcFN0aWNreVZhbHVlcygoY29uZmlnLnJvd0F0dHJpYnV0ZXMgfHwgW10pLm1hcChhdHRyID0+ICEhYXR0ci5zdGlja3kpKSxcbiAgICAgICAgICByb3dTb3J0czogKGNvbmZpZy5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0ciA9PiBhdHRyLnNvcnQpLFxuICAgICAgICAgIHJvd0F0dHJpYnV0ZXM6IChjb25maWcucm93QXR0cmlidXRlcyB8fCBbXSkubWFwKGF0dHIgPT4gdGhpcy5waXZvdEF0dHJpYnV0ZUF0dHJpYnV0ZShhdHRyKSksXG4gICAgICAgICAgY29sdW1uU2hvd1N1bXM6IChjb25maWcuY29sdW1uQXR0cmlidXRlcyB8fCBbXSkubWFwKGF0dHIgPT4gYXR0ci5zaG93U3VtcyksXG4gICAgICAgICAgY29sdW1uU3RpY2t5OiB0aGlzLm1hcFN0aWNreVZhbHVlcygoY29uZmlnLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLm1hcChhdHRyID0+ICEhYXR0ci5zdGlja3kpKSxcbiAgICAgICAgICBjb2x1bW5Tb3J0czogKGNvbmZpZy5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0ciA9PiBhdHRyLnNvcnQpLFxuICAgICAgICAgIGNvbHVtbkF0dHJpYnV0ZXM6IChjb25maWcuY29sdW1uQXR0cmlidXRlcyB8fCBbXSkubWFwKGF0dHIgPT4gdGhpcy5waXZvdEF0dHJpYnV0ZUF0dHJpYnV0ZShhdHRyKSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udmVydEFnZ3JlZ2F0ZWREYXRhKG1lcmdlZEFnZ3JlZ2F0ZWREYXRhLCBtZXJnZWRWYWx1ZUF0dHJpYnV0ZXMsIHBpdm90Q29sb3JzLCBhZGRpdGlvbmFsRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIG1hcFN0aWNreVZhbHVlcyh2YWx1ZXM6IGJvb2xlYW5bXSk6IGJvb2xlYW5bXSB7XG4gICAgLy8gd2Ugc3VwcG9ydCBvbmx5IHN0aWNreSByb3dzL2NvbHVtbnMgaW4gYSByb3dcbiAgICByZXR1cm4gdmFsdWVzLnJlZHVjZSgoc3RpY2t5VmFsdWVzLCBzdGlja3ksIGluZGV4KSA9PiB7XG4gICAgICBzdGlja3lWYWx1ZXMucHVzaChzdGlja3kgJiYgKGluZGV4ID09PSAwIHx8IHN0aWNreVZhbHVlc1tpbmRleCAtIDFdKSk7XG4gICAgICByZXR1cm4gc3RpY2t5VmFsdWVzO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgcGl2b3RBdHRyaWJ1dGVDb25zdHJhaW50KHBpdm90QXR0cmlidXRlOiBMbXJQaXZvdEF0dHJpYnV0ZSk6IENvbnN0cmFpbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHRoaXMuZmluZEF0dHJpYnV0ZUJ5UGl2b3RBdHRyaWJ1dGUocGl2b3RBdHRyaWJ1dGUpO1xuICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBhdHRyaWJ1dGUgJiYgYXR0cmlidXRlLmNvbnN0cmFpbnQ7XG4gICAgY29uc3Qgb3ZlcnJpZGVDb25zdHJhaW50ID1cbiAgICAgIHBpdm90QXR0cmlidXRlLmNvbnN0cmFpbnQgJiZcbiAgICAgIHRoaXMudHJhbnNmb3JtPy5jaGVja1ZhbGlkQ29uc3RyYWludE92ZXJyaWRlPy4oY29uc3RyYWludCwgcGl2b3RBdHRyaWJ1dGUuY29uc3RyYWludCk7XG4gICAgcmV0dXJuIG92ZXJyaWRlQ29uc3RyYWludCB8fCBjb25zdHJhaW50O1xuICB9XG5cbiAgcHJpdmF0ZSBwaXZvdEF0dHJpYnV0ZUF0dHJpYnV0ZShwaXZvdEF0dHJpYnV0ZTogTG1yUGl2b3RBdHRyaWJ1dGUpOiBBdHRyaWJ1dGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHRoaXMuZmluZEF0dHJpYnV0ZUJ5UGl2b3RBdHRyaWJ1dGUocGl2b3RBdHRyaWJ1dGUpO1xuICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBhdHRyaWJ1dGU/LmNvbnN0cmFpbnQ7XG4gICAgICBjb25zdCBvdmVycmlkZUNvbnN0cmFpbnQgPVxuICAgICAgICBwaXZvdEF0dHJpYnV0ZS5jb25zdHJhaW50ICYmXG4gICAgICAgIHRoaXMudHJhbnNmb3JtPy5jaGVja1ZhbGlkQ29uc3RyYWludE92ZXJyaWRlPy4oY29uc3RyYWludCwgcGl2b3RBdHRyaWJ1dGUuY29uc3RyYWludCk7XG4gICAgICByZXR1cm4gey4uLmF0dHJpYnV0ZSwgY29uc3RyYWludDogb3ZlcnJpZGVDb25zdHJhaW50IHx8IGNvbnN0cmFpbnQgfHwgbmV3IFVua25vd25Db25zdHJhaW50KCl9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZUFnZ3JlZ2F0ZWREYXRhKGExOiBBZ2dyZWdhdGVkTWFwRGF0YSwgYTI6IEFnZ3JlZ2F0ZWRNYXBEYXRhKTogQWdncmVnYXRlZE1hcERhdGEge1xuICAgIGlmICghYTEgfHwgIWEyKSB7XG4gICAgICByZXR1cm4gYTEgfHwgYTI7XG4gICAgfVxuXG4gICAgdGhpcy5tZXJnZU1hcHMoYTEubWFwLCBhMi5tYXApO1xuICAgIHRoaXMubWVyZ2VNYXBzKGExLmNvbHVtbnNNYXAsIGEyLmNvbHVtbnNNYXApO1xuICAgIHJldHVybiB7XG4gICAgICBtYXA6IGExLm1hcCxcbiAgICAgIGNvbHVtbnNNYXA6IGExLmNvbHVtbnNNYXAsXG4gICAgICByb3dMZXZlbHM6IE1hdGgubWF4KGExLnJvd0xldmVscywgYTIucm93TGV2ZWxzKSxcbiAgICAgIGNvbHVtbkxldmVsczogTWF0aC5tYXgoYTEuY29sdW1uTGV2ZWxzLCBhMi5jb2x1bW5MZXZlbHMpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG1lcmdlTWFwcyhtMTogUmVjb3JkPHN0cmluZywgYW55PiwgbTI6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBPYmplY3Qua2V5cyhtMikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKG0xW2tleV0pIHtcbiAgICAgICAgaWYgKGlzQXJyYXkobTFba2V5XSkgJiYgaXNBcnJheShtMltrZXldKSkge1xuICAgICAgICAgIG0xW2tleV0ucHVzaCguLi5tMltrZXldKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNBcnJheShtMVtrZXldKSAmJiAhaXNBcnJheShtMltrZXldKSkge1xuICAgICAgICAgIHRoaXMubWVyZ2VNYXBzKG0xW2tleV0sIG0yW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtMVtrZXldID0gbTJba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXR0cmlidXRlc0NvbG9ycyhhdHRyaWJ1dGVzOiBMbXJQaXZvdEF0dHJpYnV0ZVtdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAoYXR0cmlidXRlcyB8fCBbXSkubWFwKGF0dHJpYnV0ZSA9PiB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZGF0YUFnZ3JlZ2F0b3IuZ2V0TmV4dENvbGxlY3Rpb25SZXNvdXJjZShhdHRyaWJ1dGUucmVzb3VyY2VJbmRleCk7XG4gICAgICByZXR1cm4gcmVzb3VyY2UgJiYgKDxDb2xsZWN0aW9uPnJlc291cmNlKS5jb2xvcjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFBpdm90Um93Q29sdW1uQXR0cmlidXRlKHBpdm90QXR0cmlidXRlOiBMbXJQaXZvdFJvd0NvbHVtbkF0dHJpYnV0ZSk6IERhdGFBZ2dyZWdhdG9yQXR0cmlidXRlIHtcbiAgICByZXR1cm4gey4uLnRoaXMuY29udmVydFBpdm90QXR0cmlidXRlKHBpdm90QXR0cmlidXRlKSwgZGF0YTogcGl2b3RBdHRyaWJ1dGUuY29uc3RyYWludH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRQaXZvdEF0dHJpYnV0ZShwaXZvdEF0dHJpYnV0ZTogTG1yUGl2b3RBdHRyaWJ1dGUpOiBEYXRhQWdncmVnYXRvckF0dHJpYnV0ZSB7XG4gICAgcmV0dXJuIHtyZXNvdXJjZUluZGV4OiBwaXZvdEF0dHJpYnV0ZS5yZXNvdXJjZUluZGV4LCBhdHRyaWJ1dGVJZDogcGl2b3RBdHRyaWJ1dGUuYXR0cmlidXRlSWR9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VmFsdWVBdHRyaWJ1dGVzKFxuICAgIGNvbmZpZ3M6IExtclBpdm90U3RlbUNvbmZpZ1tdLFxuICAgIHN0ZW1zOiBRdWVyeVN0ZW1bXSxcbiAgICBzdGVtc0luZGV4ZXM6IG51bWJlcltdXG4gICk6IExtclBpdm90U3RlbURhdGEge1xuICAgIGNvbnN0IGRhdGEgPSBjb25maWdzLnJlZHVjZShcbiAgICAgIChhbGxEYXRhLCBjb25maWcsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZW0gPSBzdGVtc1tpbmRleF07XG4gICAgICAgIGNvbnN0IHN0ZW1JbmRleCA9IHN0ZW1zSW5kZXhlc1tpbmRleF07XG5cbiAgICAgICAgY29uc3Qgc3RlbURhdGEgPSB0aGlzLmRhdGE/LmRhdGFCeVN0ZW1zPy5bc3RlbUluZGV4XTtcbiAgICAgICAgdGhpcy5kYXRhQWdncmVnYXRvci51cGRhdGVEYXRhKFxuICAgICAgICAgIHRoaXMuY29sbGVjdGlvbnMsXG4gICAgICAgICAgc3RlbURhdGE/LmRvY3VtZW50cyB8fCBbXSxcbiAgICAgICAgICB0aGlzLmxpbmtUeXBlcyxcbiAgICAgICAgICBzdGVtRGF0YT8ubGlua0luc3RhbmNlcyB8fCBbXSxcbiAgICAgICAgICBzdGVtLFxuICAgICAgICAgIHRoaXMuY29uc3RyYWludERhdGFcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB2YWx1ZUF0dHJpYnV0ZXMgPSBjb25maWcudmFsdWVBdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBhbGxEYXRhLnZhbHVlVHlwZXMucHVzaCguLi52YWx1ZUF0dHJpYnV0ZXMubWFwKGF0dHIgPT4gYXR0ci52YWx1ZVR5cGUpKTtcbiAgICAgICAgY29uc3QgdmFsdWVDb2xvcnMgPSB0aGlzLmdldEF0dHJpYnV0ZXNDb2xvcnModmFsdWVBdHRyaWJ1dGVzKTtcblxuICAgICAgICBjb25zdCB7dGl0bGVzLCBjb25zdHJhaW50c30gPSB0aGlzLmNyZWF0ZVZhbHVlVGl0bGVzKHZhbHVlQXR0cmlidXRlcyk7XG4gICAgICAgIGFsbERhdGEudGl0bGVzLnB1c2goLi4udGl0bGVzKTtcbiAgICAgICAgYWxsRGF0YS5jb25zdHJhaW50cy5wdXNoKC4uLmNvbnN0cmFpbnRzKTtcblxuICAgICAgICBjb25zdCB7aGVhZGVyc30gPSB0aGlzLmNvbnZlcnRNYXBUb1Bpdm90RGF0YUhlYWRlcih7fSwgMCwgW10sIHZhbHVlQ29sb3JzLCBbXSwgdGl0bGVzLCBhbGxEYXRhLmhlYWRlcnMubGVuZ3RoKTtcbiAgICAgICAgYWxsRGF0YS5oZWFkZXJzLnB1c2goLi4uaGVhZGVycyk7XG5cbiAgICAgICAgYWxsRGF0YS5hZ2dyZWdhdGlvbnMgPSBbLi4uKHZhbHVlQXR0cmlidXRlcyB8fCBbXSkubWFwKHZhbHVlQXR0cmlidXRlID0+IHZhbHVlQXR0cmlidXRlLmFnZ3JlZ2F0aW9uKV07XG5cbiAgICAgICAgY29uc3Qge3ZhbHVlcywgZGF0YVJlc291cmNlc30gPSAodmFsdWVBdHRyaWJ1dGVzIHx8IFtdKS5yZWR1Y2U8e3ZhbHVlczogYW55W107IGRhdGFSZXNvdXJjZXM6IERhdGFSZXNvdXJjZVtdW119PihcbiAgICAgICAgICAoYWdncmVnYXRvciwgdmFsdWVBdHRyaWJ1dGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzb3VyY2VzID0gdGhpcy5maW5kRGF0YVJlc291cmNlc0J5UGl2b3RBdHRyaWJ1dGUodmFsdWVBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gdGhpcy5maW5kQXR0cmlidXRlQnlQaXZvdEF0dHJpYnV0ZSh2YWx1ZUF0dHJpYnV0ZSk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFnZ3JlZ2F0ZURhdGFSZXNvdXJjZXModmFsdWVBdHRyaWJ1dGUuYWdncmVnYXRpb24sIGRhdGFSZXNvdXJjZXMsIGF0dHJpYnV0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICBhZ2dyZWdhdG9yLnZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIGFnZ3JlZ2F0b3IuZGF0YVJlc291cmNlcy5wdXNoKGRhdGFSZXNvdXJjZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0b3I7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7dmFsdWVzOiBbXSwgZGF0YVJlc291cmNlczogW119XG4gICAgICAgICk7XG5cbiAgICAgICAgYWxsRGF0YS52YWx1ZXMucHVzaCguLi52YWx1ZXMpO1xuICAgICAgICBhbGxEYXRhLmRhdGFSZXNvdXJjZXMucHVzaCguLi5kYXRhUmVzb3VyY2VzKTtcbiAgICAgICAgcmV0dXJuIGFsbERhdGE7XG4gICAgICB9LFxuICAgICAge3RpdGxlczogW10sIGNvbnN0cmFpbnRzOiBbXSwgaGVhZGVyczogW10sIHZhbHVlczogW10sIGRhdGFSZXNvdXJjZXM6IFtdLCB2YWx1ZVR5cGVzOiBbXSwgYWdncmVnYXRpb25zOiBbXX1cbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbkhlYWRlcnM6IGRhdGEuaGVhZGVycyxcbiAgICAgIHJvd0hlYWRlcnM6IFtdLFxuICAgICAgdmFsdWVUaXRsZXM6IGRhdGEudGl0bGVzLFxuICAgICAgdmFsdWVzOiBbZGF0YS52YWx1ZXNdLFxuICAgICAgZGF0YVJlc291cmNlczogW2RhdGEuZGF0YVJlc291cmNlc10sXG4gICAgICB2YWx1ZXNDb25zdHJhaW50czogZGF0YS5jb25zdHJhaW50cyxcbiAgICAgIHZhbHVlVHlwZXM6IGRhdGEudmFsdWVUeXBlcyxcbiAgICAgIHZhbHVlQWdncmVnYXRpb25zOiBkYXRhLmFnZ3JlZ2F0aW9ucyxcblxuICAgICAgcm93U2hvd1N1bXM6IFtdLFxuICAgICAgcm93U3RpY2t5OiBbXSxcbiAgICAgIHJvd1NvcnRzOiBbXSxcbiAgICAgIGNvbHVtblNob3dTdW1zOiBbXSxcbiAgICAgIGNvbHVtblN0aWNreTogW10sXG4gICAgICBjb2x1bW5Tb3J0czogW10sXG5cbiAgICAgIGhhc0FkZGl0aW9uYWxDb2x1bW5MZXZlbDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kRGF0YVJlc291cmNlc0J5UGl2b3RBdHRyaWJ1dGUocGl2b3RBdHRyaWJ1dGU6IExtclBpdm90QXR0cmlidXRlKTogRGF0YVJlc291cmNlW10ge1xuICAgIGlmIChwaXZvdEF0dHJpYnV0ZS5yZXNvdXJjZVR5cGUgPT09IEF0dHJpYnV0ZXNSZXNvdXJjZVR5cGUuQ29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuICh0aGlzLmRhdGE/LnVuaXF1ZURvY3VtZW50cyB8fCBbXSkuZmlsdGVyKGRvY3VtZW50ID0+IGRvY3VtZW50LmNvbGxlY3Rpb25JZCA9PT0gcGl2b3RBdHRyaWJ1dGUucmVzb3VyY2VJZCk7XG4gICAgfSBlbHNlIGlmIChwaXZvdEF0dHJpYnV0ZS5yZXNvdXJjZVR5cGUgPT09IEF0dHJpYnV0ZXNSZXNvdXJjZVR5cGUuTGlua1R5cGUpIHtcbiAgICAgIHJldHVybiAodGhpcy5kYXRhPy51bmlxdWVMaW5rSW5zdGFuY2VzIHx8IFtdKS5maWx0ZXIobGluayA9PiBsaW5rLmxpbmtUeXBlSWQgPT09IHBpdm90QXR0cmlidXRlLnJlc291cmNlSWQpO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRBZ2dyZWdhdGVkRGF0YShcbiAgICBhZ2dyZWdhdGVkRGF0YTogQWdncmVnYXRlZE1hcERhdGEsXG4gICAgdmFsdWVBdHRyaWJ1dGVzOiBMbXJQaXZvdFZhbHVlQXR0cmlidXRlW10sXG4gICAgcGl2b3RDb2xvcnM6IFBpdm90Q29sb3JzLFxuICAgIGFkZGl0aW9uYWxEYXRhOiBQaXZvdENvbmZpZ0RhdGFcbiAgKTogTG1yUGl2b3RTdGVtRGF0YSB7XG4gICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuY29udmVydE1hcFRvUGl2b3REYXRhSGVhZGVyKFxuICAgICAgYWdncmVnYXRlZERhdGEubWFwLFxuICAgICAgYWdncmVnYXRlZERhdGEucm93TGV2ZWxzLFxuICAgICAgcGl2b3RDb2xvcnMucm93cyxcbiAgICAgIHBpdm90Q29sb3JzLnZhbHVlcyxcbiAgICAgIGFkZGl0aW9uYWxEYXRhLnJvd0F0dHJpYnV0ZXNcbiAgICApO1xuXG4gICAgY29uc3Qge3RpdGxlczogdmFsdWVUaXRsZXMsIGNvbnN0cmFpbnRzOiB2YWx1ZXNDb25zdHJhaW50c30gPSB0aGlzLmNyZWF0ZVZhbHVlVGl0bGVzKHZhbHVlQXR0cmlidXRlcyk7XG4gICAgY29uc3QgY29sdW1uRGF0YSA9IHRoaXMuY29udmVydE1hcFRvUGl2b3REYXRhSGVhZGVyKFxuICAgICAgYWdncmVnYXRlZERhdGEucm93TGV2ZWxzID4gMCA/IGFnZ3JlZ2F0ZWREYXRhLmNvbHVtbnNNYXAgOiBhZ2dyZWdhdGVkRGF0YS5tYXAsXG4gICAgICBhZ2dyZWdhdGVkRGF0YS5jb2x1bW5MZXZlbHMsXG4gICAgICBwaXZvdENvbG9ycy5jb2x1bW5zLFxuICAgICAgcGl2b3RDb2xvcnMudmFsdWVzLFxuICAgICAgYWRkaXRpb25hbERhdGEuY29sdW1uQXR0cmlidXRlcyxcbiAgICAgIHZhbHVlVGl0bGVzXG4gICAgKTtcblxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuaW5pdE1hdHJpeDxudW1iZXI+KHJvd0RhdGEubWF4SW5kZXggKyAxLCBjb2x1bW5EYXRhLm1heEluZGV4ICsgMSk7XG4gICAgY29uc3QgZGF0YVJlc291cmNlcyA9IHRoaXMuaW5pdE1hdHJpeDxEYXRhUmVzb3VyY2VbXT4ocm93RGF0YS5tYXhJbmRleCArIDEsIGNvbHVtbkRhdGEubWF4SW5kZXggKyAxKTtcbiAgICBpZiAoKHZhbHVlQXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5maWxsVmFsdWVzKHZhbHVlcywgZGF0YVJlc291cmNlcywgcm93RGF0YS5oZWFkZXJzLCBjb2x1bW5EYXRhLmhlYWRlcnMsIHZhbHVlQXR0cmlidXRlcywgYWdncmVnYXRlZERhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlQWdncmVnYXRpb25zID0gKHZhbHVlQXR0cmlidXRlcyB8fCBbXSkubWFwKHZhbHVlQXR0cmlidXRlID0+IHZhbHVlQXR0cmlidXRlLmFnZ3JlZ2F0aW9uKTtcblxuICAgIGNvbnN0IGhhc0FkZGl0aW9uYWxDb2x1bW5MZXZlbCA9XG4gICAgICAoYWdncmVnYXRlZERhdGEuY29sdW1uTGV2ZWxzID09PSAwICYmIHZhbHVlVGl0bGVzLmxlbmd0aCA+IDApIHx8XG4gICAgICAoYWdncmVnYXRlZERhdGEuY29sdW1uTGV2ZWxzID4gMCAmJiB2YWx1ZVRpdGxlcy5sZW5ndGggPiAxKTtcbiAgICByZXR1cm4ge1xuICAgICAgcm93SGVhZGVyczogcm93RGF0YS5oZWFkZXJzLFxuICAgICAgY29sdW1uSGVhZGVyczogY29sdW1uRGF0YS5oZWFkZXJzLFxuICAgICAgdmFsdWVUaXRsZXMsXG4gICAgICB2YWx1ZXMsXG4gICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgdmFsdWVzQ29uc3RyYWludHMsXG4gICAgICB2YWx1ZUFnZ3JlZ2F0aW9ucyxcblxuICAgICAgLi4uYWRkaXRpb25hbERhdGEsXG5cbiAgICAgIHZhbHVlVHlwZXM6IHZhbHVlQXR0cmlidXRlcy5tYXAoYXR0ciA9PiBhdHRyLnZhbHVlVHlwZSEpLFxuICAgICAgaGFzQWRkaXRpb25hbENvbHVtbkxldmVsLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRNYXBUb1Bpdm90RGF0YUhlYWRlcihcbiAgICBtYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgbGV2ZWxzOiBudW1iZXIsXG4gICAgY29sb3JzOiBzdHJpbmdbXSxcbiAgICB2YWx1ZUNvbG9yczogc3RyaW5nW10sXG4gICAgYXR0cmlidXRlczogQXR0cmlidXRlW10sXG4gICAgdmFsdWVUaXRsZXM/OiBzdHJpbmdbXSxcbiAgICBhZGRpdGlvbmFsTnVtOiBudW1iZXIgPSAwXG4gICk6IHtoZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXTsgbWF4SW5kZXg6IG51bWJlcn0ge1xuICAgIGNvbnN0IGhlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdID0gW107XG4gICAgY29uc3QgZGF0YSA9IHttYXhJbmRleDogMH07XG4gICAgaWYgKGxldmVscyA9PT0gMCkge1xuICAgICAgaWYgKCh2YWx1ZVRpdGxlcyB8fCBbXSkubGVuZ3RoID4gMCkge1xuICAgICAgICBoZWFkZXJzLnB1c2goXG4gICAgICAgICAgLi4udmFsdWVUaXRsZXMhLm1hcCgodGl0bGUsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICB0YXJnZXRJbmRleDogaW5kZXggKyBhZGRpdGlvbmFsTnVtLFxuICAgICAgICAgICAgY29sb3I6IHZhbHVlQ29sb3JzW2luZGV4XSxcbiAgICAgICAgICAgIGlzVmFsdWVIZWFkZXI6IHRydWUsXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICAgIGRhdGEubWF4SW5kZXggPSB2YWx1ZVRpdGxlcyEubGVuZ3RoIC0gMSArIGFkZGl0aW9uYWxOdW07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjdXJyZW50SW5kZXggPSBhZGRpdGlvbmFsTnVtO1xuICAgICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKCh0aXRsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzWzBdO1xuICAgICAgICBpZiAobGV2ZWxzID09PSAxICYmICh2YWx1ZVRpdGxlcyB8fCBbXSkubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICBoZWFkZXJzLnB1c2goe1xuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICB0YXJnZXRJbmRleDogY3VycmVudEluZGV4LFxuICAgICAgICAgICAgY29sb3I6IGNvbG9yc1swXSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGF0dHJpYnV0ZT8uY29uc3RyYWludCB8fCBuZXcgVW5rbm93bkNvbnN0cmFpbnQoKSxcbiAgICAgICAgICAgIGlzVmFsdWVIZWFkZXI6IGZhbHNlLFxuICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogYXR0cmlidXRlPy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRhdGEubWF4SW5kZXggPSBNYXRoLm1heChkYXRhLm1heEluZGV4LCBjdXJyZW50SW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhlYWRlcnMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbMF0sXG4gICAgICAgICAgICBjb25zdHJhaW50OiBhdHRyaWJ1dGU/LmNvbnN0cmFpbnQgfHwgbmV3IFVua25vd25Db25zdHJhaW50KCksXG4gICAgICAgICAgICBpc1ZhbHVlSGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IGF0dHJpYnV0ZT8ubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hQaXZvdERhdGFIZWFkZXIoXG4gICAgICAgICAgbWFwW3RpdGxlXSxcbiAgICAgICAgICBoZWFkZXJzW2luZGV4XSxcbiAgICAgICAgICBjdXJyZW50SW5kZXgsXG4gICAgICAgICAgMSxcbiAgICAgICAgICBsZXZlbHMsXG4gICAgICAgICAgY29sb3JzLFxuICAgICAgICAgIHZhbHVlQ29sb3JzLFxuICAgICAgICAgIHZhbHVlVGl0bGVzIHx8IFtdLFxuICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICApO1xuICAgICAgICBjdXJyZW50SW5kZXggKz0gdGhpcy5udW1DaGlsZHJlbihtYXBbdGl0bGVdLCBsZXZlbHMgLSAxLCAodmFsdWVUaXRsZXMgJiYgdmFsdWVUaXRsZXMubGVuZ3RoKSB8fCAxKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7aGVhZGVycywgbWF4SW5kZXg6IGRhdGEubWF4SW5kZXh9O1xuICB9XG5cbiAgcHJpdmF0ZSBpdGVyYXRlVGhyb3VnaFBpdm90RGF0YUhlYWRlcihcbiAgICBjdXJyZW50TWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGhlYWRlcjogTG1yUGl2b3REYXRhSGVhZGVyLFxuICAgIGhlYWRlckluZGV4OiBudW1iZXIsXG4gICAgbGV2ZWw6IG51bWJlcixcbiAgICBtYXhMZXZlbHM6IG51bWJlcixcbiAgICBjb2xvcnM6IHN0cmluZ1tdLFxuICAgIHZhbHVlQ29sb3JzOiBzdHJpbmdbXSxcbiAgICB2YWx1ZVRpdGxlczogc3RyaW5nW10sXG4gICAgYXR0cmlidXRlczogQXR0cmlidXRlW10sXG4gICAgYWRkaXRpb25hbERhdGE6IHttYXhJbmRleDogbnVtYmVyfVxuICApIHtcbiAgICBpZiAobGV2ZWwgPT09IG1heExldmVscykge1xuICAgICAgaWYgKCh2YWx1ZVRpdGxlcyB8fCBbXSkubGVuZ3RoID4gMSkge1xuICAgICAgICBoZWFkZXIuY2hpbGRyZW4gPSB2YWx1ZVRpdGxlcy5tYXAoKHRpdGxlLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICB0YXJnZXRJbmRleDogaGVhZGVySW5kZXggKyBpbmRleCxcbiAgICAgICAgICBjb2xvcjogdmFsdWVDb2xvcnNbaW5kZXhdLFxuICAgICAgICAgIGlzVmFsdWVIZWFkZXI6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICAgICAgYWRkaXRpb25hbERhdGEubWF4SW5kZXggPSBNYXRoLm1heChhZGRpdGlvbmFsRGF0YS5tYXhJbmRleCwgaGVhZGVySW5kZXggKyB2YWx1ZVRpdGxlcy5sZW5ndGggLSAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBoZWFkZXIuY2hpbGRyZW4gPSBbXTtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gaGVhZGVySW5kZXg7XG4gICAgT2JqZWN0LmtleXMoY3VycmVudE1hcCkuZm9yRWFjaCgodGl0bGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXNbbGV2ZWxdO1xuICAgICAgaWYgKGxldmVsICsgMSA9PT0gbWF4TGV2ZWxzICYmICh2YWx1ZVRpdGxlcyB8fCBbXSkubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgaGVhZGVyLmNoaWxkcmVuIS5wdXNoKHtcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICB0YXJnZXRJbmRleDogY3VycmVudEluZGV4LFxuICAgICAgICAgIGNvbG9yOiBjb2xvcnNbbGV2ZWxdLFxuICAgICAgICAgIGNvbnN0cmFpbnQ6IGF0dHJpYnV0ZT8uY29uc3RyYWludCB8fCBuZXcgVW5rbm93bkNvbnN0cmFpbnQoKSxcbiAgICAgICAgICBpc1ZhbHVlSGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBhdHRyaWJ1dGU/Lm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICBhZGRpdGlvbmFsRGF0YS5tYXhJbmRleCA9IE1hdGgubWF4KGFkZGl0aW9uYWxEYXRhLm1heEluZGV4LCBjdXJyZW50SW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyLmNoaWxkcmVuIS5wdXNoKHtcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICBjb2xvcjogY29sb3JzW2xldmVsXSxcbiAgICAgICAgICBjb25zdHJhaW50OiBhdHRyaWJ1dGU/LmNvbnN0cmFpbnQgfHwgbmV3IFVua25vd25Db25zdHJhaW50KCksXG4gICAgICAgICAgaXNWYWx1ZUhlYWRlcjogZmFsc2UsXG4gICAgICAgICAgYXR0cmlidXRlTmFtZTogYXR0cmlidXRlPy5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pdGVyYXRlVGhyb3VnaFBpdm90RGF0YUhlYWRlcihcbiAgICAgICAgY3VycmVudE1hcFt0aXRsZV0sXG4gICAgICAgIGhlYWRlci5jaGlsZHJlbj8uW2luZGV4XSxcbiAgICAgICAgY3VycmVudEluZGV4LFxuICAgICAgICBsZXZlbCArIDEsXG4gICAgICAgIG1heExldmVscyxcbiAgICAgICAgY29sb3JzLFxuICAgICAgICB2YWx1ZUNvbG9ycyxcbiAgICAgICAgdmFsdWVUaXRsZXMsXG4gICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhXG4gICAgICApO1xuXG4gICAgICBjdXJyZW50SW5kZXggKz0gdGhpcy5udW1DaGlsZHJlbihcbiAgICAgICAgY3VycmVudE1hcFt0aXRsZV0sXG4gICAgICAgIG1heExldmVscyAtIChsZXZlbCArIDEpLFxuICAgICAgICAodmFsdWVUaXRsZXMgJiYgdmFsdWVUaXRsZXMubGVuZ3RoKSB8fCAxXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBudW1DaGlsZHJlbihtYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sIG1heExldmVsczogbnVtYmVyLCBudW1UaXRsZXM6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKG1heExldmVscyA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bVRpdGxlcztcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobWFwIHx8IHt9KTtcbiAgICBpZiAobWF4TGV2ZWxzID09PSAxKSB7XG4gICAgICByZXR1cm4ga2V5cy5sZW5ndGggKiBudW1UaXRsZXM7XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSBrZXlzLnJlZHVjZSgoc3VtLCBrZXkpID0+IHN1bSArIHRoaXMubnVtQ2hpbGRyZW5SZWN1cnNpdmUobWFwW2tleV0sIDEsIG1heExldmVscyksIDApO1xuICAgIHJldHVybiBjb3VudCAqIG51bVRpdGxlcztcbiAgfVxuXG4gIHByaXZhdGUgbnVtQ2hpbGRyZW5SZWN1cnNpdmUobWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBsZXZlbDogbnVtYmVyLCBtYXhMZXZlbHM6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKGxldmVsID49IG1heExldmVscykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG1hcCB8fCB7fSk7XG4gICAgaWYgKGxldmVsICsgMSA9PT0gbWF4TGV2ZWxzKSB7XG4gICAgICByZXR1cm4ga2V5cy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXMucmVkdWNlKChzdW0sIGtleSkgPT4gc3VtICsgdGhpcy5udW1DaGlsZHJlblJlY3Vyc2l2ZShtYXBba2V5XSwgbGV2ZWwgKyAxLCBtYXhMZXZlbHMpLCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmFsdWVUaXRsZXModmFsdWVBdHRyaWJ1dGVzOiBMbXJQaXZvdFZhbHVlQXR0cmlidXRlW10pOiB7dGl0bGVzOiBzdHJpbmdbXTsgY29uc3RyYWludHM6IENvbnN0cmFpbnRbXX0ge1xuICAgIHJldHVybiAodmFsdWVBdHRyaWJ1dGVzIHx8IFtdKS5yZWR1Y2U8e3RpdGxlczogc3RyaW5nW107IGNvbnN0cmFpbnRzOiBDb25zdHJhaW50W119PihcbiAgICAgICh7dGl0bGVzLCBjb25zdHJhaW50c30sIHBpdm90QXR0cmlidXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHRoaXMuZmluZEF0dHJpYnV0ZUJ5UGl2b3RBdHRyaWJ1dGUocGl2b3RBdHRyaWJ1dGUpO1xuICAgICAgICBjb25zdHJhaW50cy5wdXNoKFxuICAgICAgICAgIGRhdGFBZ2dyZWdhdGlvbkNvbnN0cmFpbnQocGl2b3RBdHRyaWJ1dGUuYWdncmVnYXRpb24pIHx8IHRoaXMucGl2b3RBdHRyaWJ1dGVDb25zdHJhaW50KHBpdm90QXR0cmlidXRlKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5jcmVhdGVWYWx1ZVRpdGxlKHBpdm90QXR0cmlidXRlLmFnZ3JlZ2F0aW9uLCBhdHRyaWJ1dGU/Lm5hbWUgfHwgJycpO1xuICAgICAgICB0aXRsZXMucHVzaCh0aXRsZSk7XG5cbiAgICAgICAgcmV0dXJuIHt0aXRsZXMsIGNvbnN0cmFpbnRzfTtcbiAgICAgIH0sXG4gICAgICB7dGl0bGVzOiBbXSwgY29uc3RyYWludHM6IFtdfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlVmFsdWVUaXRsZShhZ2dyZWdhdGlvbjogRGF0YUFnZ3JlZ2F0aW9uVHlwZSwgYXR0cmlidXRlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZUFnZ3JlZ2F0aW9uVGl0bGUgPSB0aGlzLnRyYW5zZm9ybT8udHJhbnNsYXRlQWdncmVnYXRpb24/LihhZ2dyZWdhdGlvbikgfHwgYWdncmVnYXRpb24udG9TdHJpbmcoKTtcbiAgICByZXR1cm4gYCR7dmFsdWVBZ2dyZWdhdGlvblRpdGxlfSAke2F0dHJpYnV0ZU5hbWUgfHwgJyd9YC50cmltKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRNYXRyaXg8VD4ocm93czogbnVtYmVyLCBjb2x1bW5zOiBudW1iZXIpOiBUW11bXSB7XG4gICAgY29uc3QgbWF0cml4OiBUW11bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBtYXRyaXhbaV0gPSBbXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIG1hdHJpeFtpXVtqXSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxsVmFsdWVzKFxuICAgIHZhbHVlczogbnVtYmVyW11bXSxcbiAgICBkYXRhUmVzb3VyY2VzOiBEYXRhUmVzb3VyY2VbXVtdW10sXG4gICAgcm93SGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gICAgY29sdW1uSGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gICAgdmFsdWVBdHRyaWJ1dGVzOiBMbXJQaXZvdFZhbHVlQXR0cmlidXRlW10sXG4gICAgYWdncmVnYXRlZERhdGE6IEFnZ3JlZ2F0ZWRNYXBEYXRhXG4gICkge1xuICAgIGlmIChyb3dIZWFkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hSb3dIZWFkZXJzKFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGRhdGFSZXNvdXJjZXMsXG4gICAgICAgIHJvd0hlYWRlcnMsXG4gICAgICAgIGNvbHVtbkhlYWRlcnMsXG4gICAgICAgIHZhbHVlQXR0cmlidXRlcyxcbiAgICAgICAgYWdncmVnYXRlZERhdGEubWFwXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZXJhdGVUaHJvdWdoQ29sdW1uSGVhZGVycyh2YWx1ZXMsIGRhdGFSZXNvdXJjZXMsIGNvbHVtbkhlYWRlcnMsIDAsIHZhbHVlQXR0cmlidXRlcywgYWdncmVnYXRlZERhdGEubWFwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGl0ZXJhdGVUaHJvdWdoUm93SGVhZGVycyhcbiAgICB2YWx1ZXM6IG51bWJlcltdW10sXG4gICAgZGF0YVJlc291cmNlczogRGF0YVJlc291cmNlW11bXVtdLFxuICAgIHJvd0hlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdLFxuICAgIGNvbHVtbkhlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdLFxuICAgIHZhbHVlQXR0cmlidXRlczogTG1yUGl2b3RWYWx1ZUF0dHJpYnV0ZVtdLFxuICAgIGN1cnJlbnRNYXA6IEFnZ3JlZ2F0ZWREYXRhTWFwXG4gICkge1xuICAgIGZvciAoY29uc3Qgcm93SGVhZGVyIG9mIHJvd0hlYWRlcnMpIHtcbiAgICAgIGNvbnN0IHJvd0hlYWRlck1hcCA9IGN1cnJlbnRNYXBbcm93SGVhZGVyLnRpdGxlXSB8fCB7fTtcblxuICAgICAgaWYgKHJvd0hlYWRlci5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLml0ZXJhdGVUaHJvdWdoUm93SGVhZGVycyhcbiAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgZGF0YVJlc291cmNlcyxcbiAgICAgICAgICByb3dIZWFkZXIuY2hpbGRyZW4sXG4gICAgICAgICAgY29sdW1uSGVhZGVycyxcbiAgICAgICAgICB2YWx1ZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgcm93SGVhZGVyTWFwXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGlzTm90TnVsbE9yVW5kZWZpbmVkKHJvd0hlYWRlci50YXJnZXRJbmRleCkgJiYgY29sdW1uSGVhZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hDb2x1bW5IZWFkZXJzKFxuICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgICAgIGNvbHVtbkhlYWRlcnMsXG4gICAgICAgICAgcm93SGVhZGVyLnRhcmdldEluZGV4ISxcbiAgICAgICAgICB2YWx1ZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgcm93SGVhZGVyTWFwXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpdGVyYXRlVGhyb3VnaENvbHVtbkhlYWRlcnMoXG4gICAgdmFsdWVzOiBudW1iZXJbXVtdLFxuICAgIGRhdGFSZXNvdXJjZXM6IERhdGFSZXNvdXJjZVtdW11bXSxcbiAgICBjb2x1bW5IZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSxcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIHZhbHVlQXR0cmlidXRlczogTG1yUGl2b3RWYWx1ZUF0dHJpYnV0ZVtdLFxuICAgIGN1cnJlbnRNYXA6IEFnZ3JlZ2F0ZWREYXRhTWFwIHwgQWdncmVnYXRlZERhdGFWYWx1ZXNbXVxuICApIHtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbkhlYWRlciBvZiBjb2x1bW5IZWFkZXJzKSB7XG4gICAgICBpZiAoY29sdW1uSGVhZGVyLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hDb2x1bW5IZWFkZXJzKFxuICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgICAgIGNvbHVtbkhlYWRlci5jaGlsZHJlbixcbiAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICB2YWx1ZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgY3VycmVudE1hcFtjb2x1bW5IZWFkZXIudGl0bGVdIHx8IHt9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGlzTm90TnVsbE9yVW5kZWZpbmVkKGNvbHVtbkhlYWRlci50YXJnZXRJbmRleCkpIHtcbiAgICAgICAgY29uc3QgYWdncmVnYXRlZERhdGFWYWx1ZXMgPSBpc0FycmF5KGN1cnJlbnRNYXApID8gY3VycmVudE1hcCA6IGN1cnJlbnRNYXBbY29sdW1uSGVhZGVyLnRpdGxlXTtcblxuICAgICAgICBpZiAodmFsdWVBdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlSW5kZXggPSBjb2x1bW5IZWFkZXIudGFyZ2V0SW5kZXghICUgdmFsdWVBdHRyaWJ1dGVzLmxlbmd0aDtcbiAgICAgICAgICBjb25zdCB7dmFsdWUsIGRhdGFSZXNvdXJjZXM6IGFnZ3JlZ2F0ZWREYXRhUmVzb3VyY2VzfSA9IHRoaXMuYWdncmVnYXRlVmFsdWUoXG4gICAgICAgICAgICB2YWx1ZUF0dHJpYnV0ZXNbdmFsdWVJbmRleF0sXG4gICAgICAgICAgICBhZ2dyZWdhdGVkRGF0YVZhbHVlc1xuICAgICAgICAgICk7XG4gICAgICAgICAgdmFsdWVzW3Jvd0luZGV4XVtjb2x1bW5IZWFkZXIudGFyZ2V0SW5kZXghXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFSZXNvdXJjZXNbcm93SW5kZXhdW2NvbHVtbkhlYWRlci50YXJnZXRJbmRleCFdID0gYWdncmVnYXRlZERhdGFSZXNvdXJjZXMgfHwgW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFnZ3JlZ2F0ZVZhbHVlKFxuICAgIHZhbHVlQXR0cmlidXRlOiBMbXJQaXZvdFZhbHVlQXR0cmlidXRlLFxuICAgIGFnZ3JlZ2F0ZWREYXRhVmFsdWVzOiBBZ2dyZWdhdGVkRGF0YVZhbHVlc1tdXG4gICk6IHt2YWx1ZT86IGFueTsgZGF0YVJlc291cmNlcz86IERhdGFSZXNvdXJjZVtdfSB7XG4gICAgY29uc3QgcmVzb3VyY2VBZ2dyZWdhdGVkRGF0YVZhbHVlcyA9IChhZ2dyZWdhdGVkRGF0YVZhbHVlcyB8fCBbXSkuZmlsdGVyKFxuICAgICAgYWdnID0+IGFnZy5yZXNvdXJjZUlkID09PSB2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZUlkICYmIGFnZy50eXBlID09PSB2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZVR5cGVcbiAgICApO1xuICAgIGlmIChyZXNvdXJjZUFnZ3JlZ2F0ZWREYXRhVmFsdWVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZGF0YVJlc291cmNlcyA9IGZsYXR0ZW5NYXRyaXgocmVzb3VyY2VBZ2dyZWdhdGVkRGF0YVZhbHVlcy5tYXAodmFsID0+IHZhbC5vYmplY3RzKSk7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSB0aGlzLnBpdm90QXR0cmlidXRlQXR0cmlidXRlKHZhbHVlQXR0cmlidXRlKTtcbiAgICAgIGlmICh2YWx1ZUF0dHJpYnV0ZS5hZ2dyZWdhdGlvbiA9PT0gRGF0YUFnZ3JlZ2F0aW9uVHlwZS5Kb2luKSB7XG4gICAgICAgIC8vIHZhbHVlcyB3aWxsIGJlIGpvaW5lZCBpbiBwaXZvdC10YWJsZS1jb252ZXJ0ZXJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gKGRhdGFSZXNvdXJjZXMgfHwgW10pLm1hcCgocmVzb3VyY2U6IERhdGFSZXNvdXJjZSkgPT4gcmVzb3VyY2UuZGF0YT8uW2F0dHJpYnV0ZT8uaWQgfHwgJyddKTtcbiAgICAgICAgcmV0dXJuIHt2YWx1ZTogdW5pcXVlVmFsdWVzKGZsYXR0ZW5WYWx1ZXModmFsdWVzKSksIGRhdGFSZXNvdXJjZXN9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZSA9IGF0dHJpYnV0ZSAmJiBhZ2dyZWdhdGVEYXRhUmVzb3VyY2VzKHZhbHVlQXR0cmlidXRlLmFnZ3JlZ2F0aW9uLCBkYXRhUmVzb3VyY2VzLCBhdHRyaWJ1dGUsIHRydWUpO1xuICAgICAgcmV0dXJuIHt2YWx1ZSwgZGF0YVJlc291cmNlc307XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQXR0cmlidXRlQnlQaXZvdEF0dHJpYnV0ZSh2YWx1ZUF0dHJpYnV0ZTogTG1yUGl2b3RBdHRyaWJ1dGUpOiBBdHRyaWJ1dGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZVR5cGUgPT09IEF0dHJpYnV0ZXNSZXNvdXJjZVR5cGUuQ29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbnNBdHRyaWJ1dGVzTWFwPy5bdmFsdWVBdHRyaWJ1dGUucmVzb3VyY2VJZF0/Llt2YWx1ZUF0dHJpYnV0ZS5hdHRyaWJ1dGVJZF07XG4gICAgfSBlbHNlIGlmICh2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZVR5cGUgPT09IEF0dHJpYnV0ZXNSZXNvdXJjZVR5cGUuTGlua1R5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpbmtUeXBlc0F0dHJpYnV0ZXNNYXA/Llt2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZUlkXT8uW3ZhbHVlQXR0cmlidXRlLmF0dHJpYnV0ZUlkXTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBpdm90U3RlbUNvbmZpZ1R5cGUoc3RlbUNvbmZpZzogTG1yUGl2b3RTdGVtQ29uZmlnKTogUGl2b3RDb25maWdUeXBlIHtcbiAgY29uc3Qgcm93TGVuZ3RoID0gKHN0ZW1Db25maWcucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoO1xuICBjb25zdCBjb2x1bW5MZW5ndGggPSAoc3RlbUNvbmZpZy5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGg7XG5cbiAgaWYgKHJvd0xlbmd0aCA+IDAgJiYgY29sdW1uTGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBQaXZvdENvbmZpZ1R5cGUuUm93c0FuZENvbHVtbnM7XG4gIH0gZWxzZSBpZiAocm93TGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBQaXZvdENvbmZpZ1R5cGUuUm93cztcbiAgfSBlbHNlIGlmIChjb2x1bW5MZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIFBpdm90Q29uZmlnVHlwZS5Db2x1bW5zO1xuICB9XG4gIHJldHVybiBQaXZvdENvbmZpZ1R5cGUuVmFsdWVzO1xufVxuXG5mdW5jdGlvbiBjYW5NZXJnZUNvbmZpZ3NCeVR5cGUodHlwZTogUGl2b3RDb25maWdUeXBlLCBjMTogTG1yUGl2b3RTdGVtQ29uZmlnLCBjMjogTG1yUGl2b3RTdGVtQ29uZmlnKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlID09PSBQaXZvdENvbmZpZ1R5cGUuUm93cykge1xuICAgIHJldHVybiAoYzEucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoID09PSAoYzIucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFBpdm90Q29uZmlnVHlwZS5Db2x1bW5zKSB7XG4gICAgcmV0dXJuIChjMS5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGggPT09IChjMi5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIChcbiAgICAoYzEucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoID09PSAoYzIucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoICYmXG4gICAgKGMxLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLmxlbmd0aCA9PT0gKGMyLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLmxlbmd0aFxuICApO1xufVxuIl19
507
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZGF0YS1jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sbXItcGl2b3QtdGFibGUvc3JjL2xpYi91dGlsL3Bpdm90LWRhdGEtY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE9BQU8sRUFPTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGNBQWMsRUFJZCxpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLHlCQUF5QixFQUF3RCxzQkFBc0IsRUFBRSxnQ0FBZ0MsR0FDMUksTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRzNILE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQVNwRCxJQUFLLGVBS0o7QUFMRCxXQUFLLGVBQWU7SUFDbEIseURBQU0sQ0FBQTtJQUNOLHFEQUFJLENBQUE7SUFDSiwyREFBTyxDQUFBO0lBQ1AseUVBQWMsQ0FBQTtBQUNoQixDQUFDLEVBTEksZUFBZSxLQUFmLGVBQWUsUUFLbkI7QUFpQkQsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixXQUFXLENBQWU7SUFDMUIsU0FBUyxDQUFhO0lBQ3RCLHdCQUF3QixDQUE0QztJQUNwRSxzQkFBc0IsQ0FBNEM7SUFDbEUsSUFBSSxDQUF3QjtJQUM1QixNQUFNLENBQWlCO0lBQ3ZCLFNBQVMsQ0FBb0I7SUFDN0IsY0FBYyxDQUFpQjtJQUUvQixjQUFjLENBQWlCO0lBRXZDO1FBQ0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsQ0FDeEYsSUFBSSxDQUFDLGdCQUFn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RSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztLQUNsRjtJQUNELE9BQU8sQ0FDTCxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQ25FLENBQUMsRUFBRSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQzFFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEx1bWVlcjogTW9kZXJuIERhdGEgRGVmaW5pdGlvbiBhbmQgUHJvY2Vzc2luZyBQbGF0Zm9ybVxuICpcbiAqIENvcHlyaWdodCAoQykgc2luY2UgMjAxNyBMdW1lZXIuaW8sIHMuci5vLiBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBBZ2dyZWdhdGVkRGF0YU1hcCxcbiAgQWdncmVnYXRlZERhdGFWYWx1ZXMsXG4gIEFnZ3JlZ2F0ZWRNYXBEYXRhLFxuICBDb25zdHJhaW50LFxuICBDb25zdHJhaW50RGF0YSxcbiAgQ29uc3RyYWludFR5cGUsXG4gIERhdGFBZ2dyZWdhdGlvblR5cGUsXG4gIERhdGFBZ2dyZWdhdG9yLFxuICBEYXRhQWdncmVnYXRvckF0dHJpYnV0ZSxcbiAgRGF0YVZhbHVlLFxuICBEb2N1bWVudHNBbmRMaW5rc0RhdGEsXG4gIFVua25vd25Db25zdHJhaW50LFxuICBhZ2dyZWdhdGVEYXRhUmVzb3VyY2VzLFxuICBkYXRhQWdncmVnYXRpb25Db25zdHJhaW50LCBRdWVyeVN0ZW0sIENvbGxlY3Rpb24sIExpbmtUeXBlLCBEYXRhUmVzb3VyY2UsIFF1ZXJ5LCBBdHRyaWJ1dGVzUmVzb3VyY2VUeXBlLCBhdHRyaWJ1dGVzUmVzb3VyY2VzQXR0cmlidXRlc01hcCxcbn0gZnJvbSAnQGx1bWVlci9kYXRhLWZpbHRlcnMnO1xuaW1wb3J0IHtkZWVwT2JqZWN0c0VxdWFscywgZmxhdHRlbk1hdHJpeCwgZmxhdHRlblZhbHVlcywgaXNBcnJheSwgaXNOb3ROdWxsT3JVbmRlZmluZWQsIHVuaXF1ZVZhbHVlc30gZnJvbSAnQGx1bWVlci91dGlscyc7XG5pbXBvcnQge0xtclBpdm90QXR0cmlidXRlLCBMbXJQaXZvdENvbmZpZywgTG1yUGl2b3RSb3dDb2x1bW5BdHRyaWJ1dGUsIExtclBpdm90U3RlbUNvbmZpZywgTG1yUGl2b3RUcmFuc2Zvcm0sIExtclBpdm90VmFsdWVBdHRyaWJ1dGV9IGZyb20gJy4vbG1yLXBpdm90LWNvbmZpZyc7XG5pbXBvcnQge0xtclBpdm90RGF0YSwgTG1yUGl2b3REYXRhSGVhZGVyLCBMbXJQaXZvdERpbWVuc2lvbkNvbmZpZywgTG1yUGl2b3RIZWFkZXJBdHRyaWJ1dGUsIExtclBpdm90U3RlbURhdGF9IGZyb20gJy4vbG1yLXBpdm90LWRhdGEnO1xuaW1wb3J0IHtwaXZvdFN0ZW1Db25maWdJc0VtcHR5fSBmcm9tICcuL3Bpdm90LXV0aWwnO1xuXG5pbnRlcmZhY2UgUGl2b3RNZXJnZURhdGEge1xuICBjb25maWdzOiBMbXJQaXZvdFN0ZW1Db25maWdbXTtcbiAgc3RlbXM6IFF1ZXJ5U3RlbVtdO1xuICBzdGVtc0luZGV4ZXM6IG51bWJlcltdO1xuICB0eXBlOiBQaXZvdENvbmZpZ1R5cGU7XG59XG5cbmVudW0gUGl2b3RDb25maWdUeXBlIHtcbiAgVmFsdWVzLFxuICBSb3dzLFxuICBDb2x1bW5zLFxuICBSb3dzQW5kQ29sdW1ucyxcbn1cblxuaW50ZXJmYWNlIFBpdm90Q29sb3JzIHtcbiAgcm93czogc3RyaW5nW107XG4gIGNvbHVtbnM6IHN0cmluZ1tdO1xuICB2YWx1ZXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgUGl2b3RDb25maWdEYXRhIHtcbiAgcm93c0NvbmZpZzogTG1yUGl2b3REaW1lbnNpb25Db25maWdbXTtcbiAgcm93U2hvd0hlYWRlckF0dHJpYnV0ZXM6IGJvb2xlYW5bXTtcbiAgY29sdW1uc0NvbmZpZzogTG1yUGl2b3REaW1lbnNpb25Db25maWdbXTtcbiAgY29sdW1uU2hvd0hlYWRlckF0dHJpYnV0ZXM6IGJvb2xlYW5bXTtcbiAgcm93QXR0cmlidXRlczogQXR0cmlidXRlW107XG4gIGNvbHVtbkF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdO1xufVxuXG5leHBvcnQgY2xhc3MgUGl2b3REYXRhQ29udmVydGVyIHtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uczogQ29sbGVjdGlvbltdO1xuICBwcml2YXRlIGxpbmtUeXBlczogTGlua1R5cGVbXTtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uc0F0dHJpYnV0ZXNNYXA6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEF0dHJpYnV0ZT4+O1xuICBwcml2YXRlIGxpbmtUeXBlc0F0dHJpYnV0ZXNNYXA6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEF0dHJpYnV0ZT4+O1xuICBwcml2YXRlIGRhdGE6IERvY3VtZW50c0FuZExpbmtzRGF0YTtcbiAgcHJpdmF0ZSBjb25maWc6IExtclBpdm90Q29uZmlnO1xuICBwcml2YXRlIHRyYW5zZm9ybTogTG1yUGl2b3RUcmFuc2Zvcm07XG4gIHByaXZhdGUgY29uc3RyYWludERhdGE6IENvbnN0cmFpbnREYXRhO1xuXG4gIHByaXZhdGUgZGF0YUFnZ3JlZ2F0b3I6IERhdGFBZ2dyZWdhdG9yO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGF0YUFnZ3JlZ2F0b3IgPSBuZXcgRGF0YUFnZ3JlZ2F0b3IoKHZhbHVlLCBjb25zdHJhaW50LCBkYXRhLCBhZ2dyZWdhdG9yQXR0cmlidXRlKSA9PlxuICAgICAgdGhpcy5mb3JtYXRQaXZvdFZhbHVlKHZhbHVlLCBjb25zdHJhaW50LCBkYXRhLCBhZ2dyZWdhdG9yQXR0cmlidXRlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFBpdm90VmFsdWUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBjb25zdHJhaW50OiBDb25zdHJhaW50LFxuICAgIGNvbnN0cmFpbnREYXRhOiBDb25zdHJhaW50RGF0YSxcbiAgICBhZ2dyZWdhdG9yQXR0cmlidXRlOiBEYXRhQWdncmVnYXRvckF0dHJpYnV0ZVxuICApOiBhbnkge1xuICAgIGNvbnN0IHBpdm90Q29uc3RyYWludCA9IGFnZ3JlZ2F0b3JBdHRyaWJ1dGUuZGF0YSAmJiAoYWdncmVnYXRvckF0dHJpYnV0ZS5kYXRhIGFzIENvbnN0cmFpbnQpO1xuICAgIGNvbnN0IG92ZXJyaWRlQ29uc3RyYWludCA9XG4gICAgICBwaXZvdENvbnN0cmFpbnQgJiYgdGhpcy50cmFuc2Zvcm0/LmNoZWNrVmFsaWRDb25zdHJhaW50T3ZlcnJpZGU/Lihjb25zdHJhaW50LCBwaXZvdENvbnN0cmFpbnQpO1xuICAgIGNvbnN0IGZpbmFsQ29uc3RyYWludCA9IG92ZXJyaWRlQ29uc3RyYWludCB8fCBjb25zdHJhaW50IHx8IG5ldyBVbmtub3duQ29uc3RyYWludCgpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRWYWx1ZSA9IChjb25zdHJhaW50IHx8IG5ldyBVbmtub3duQ29uc3RyYWludCgpKS5jcmVhdGVEYXRhVmFsdWUodmFsdWUsIGNvbnN0cmFpbnREYXRhKS5zZXJpYWxpemUoKVxuICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGFWYWx1ZShmaW5hbENvbnN0cmFpbnQuY3JlYXRlRGF0YVZhbHVlKHNlcmlhbGl6ZWRWYWx1ZSwgY29uc3RyYWludERhdGEpLCBmaW5hbENvbnN0cmFpbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXREYXRhVmFsdWUoZGF0YVZhbHVlOiBEYXRhVmFsdWUsIGNvbnN0cmFpbnQ6IENvbnN0cmFpbnQpOiBhbnkge1xuICAgIHN3aXRjaCAoY29uc3RyYWludC50eXBlKSB7XG4gICAgICBjYXNlIENvbnN0cmFpbnRUeXBlLkRhdGVUaW1lOlxuICAgICAgICByZXR1cm4gZGF0YVZhbHVlLmZvcm1hdCgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRhdGFWYWx1ZS5zZXJpYWxpemUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURhdGEoXG4gICAgY29uZmlnOiBMbXJQaXZvdENvbmZpZyxcbiAgICB0cmFuc2Zvcm06IExtclBpdm90VHJhbnNmb3JtLFxuICAgIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uW10sXG4gICAgbGlua1R5cGVzOiBMaW5rVHlwZVtdLFxuICAgIGRhdGE6IERvY3VtZW50c0FuZExpbmtzRGF0YSxcbiAgICBjb25zdHJhaW50RGF0YTogQ29uc3RyYWludERhdGFcbiAgKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgdGhpcy5jb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25zO1xuICAgIHRoaXMubGlua1R5cGVzID0gbGlua1R5cGVzO1xuICAgIHRoaXMuY29sbGVjdGlvbnNBdHRyaWJ1dGVzTWFwID0gYXR0cmlidXRlc1Jlc291cmNlc0F0dHJpYnV0ZXNNYXAoY29sbGVjdGlvbnMpO1xuICAgIHRoaXMubGlua1R5cGVzQXR0cmlidXRlc01hcCA9IGF0dHJpYnV0ZXNSZXNvdXJjZXNBdHRyaWJ1dGVzTWFwKGxpbmtUeXBlcyk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmNvbnN0cmFpbnREYXRhID0gY29uc3RyYWludERhdGE7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRGF0YShcbiAgICBjb25maWc6IExtclBpdm90Q29uZmlnLFxuICAgIHRyYW5zZm9ybTogTG1yUGl2b3RUcmFuc2Zvcm0sXG4gICAgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25bXSxcbiAgICBsaW5rVHlwZXM6IExpbmtUeXBlW10sXG4gICAgZGF0YTogRG9jdW1lbnRzQW5kTGlua3NEYXRhLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICBjb25zdHJhaW50RGF0YT86IENvbnN0cmFpbnREYXRhXG4gICk6IExtclBpdm90RGF0YSB7XG4gICAgdGhpcy51cGRhdGVEYXRhKGNvbmZpZywgdHJhbnNmb3JtLCBjb2xsZWN0aW9ucywgbGlua1R5cGVzLCBkYXRhLCBjb25zdHJhaW50RGF0YSk7XG5cbiAgICBjb25zdCB7c3RlbXNDb25maWdzLCBzdGVtc30gPSB0aGlzLmZpbHRlckVtcHR5Q29uZmlncyhjb25maWcsIHF1ZXJ5KTtcblxuICAgIGNvbnN0IG1lcmdlRGF0YSA9IHRoaXMuY3JlYXRlUGl2b3RNZXJnZURhdGEoY29uZmlnLm1lcmdlVGFibGVzLCBzdGVtc0NvbmZpZ3MsIHN0ZW1zKTtcbiAgICBjb25zdCBhYmxlVG9NZXJnZSA9IG1lcmdlRGF0YS5sZW5ndGggPD0gMTtcbiAgICBjb25zdCBwaXZvdERhdGEgPSB0aGlzLm1lcmdlUGl2b3REYXRhKG1lcmdlRGF0YSk7XG4gICAgcmV0dXJuIHtkYXRhOiBwaXZvdERhdGEsIGNvbnN0cmFpbnREYXRhLCBhYmxlVG9NZXJnZSwgbWVyZ2VUYWJsZXM6IGNvbmZpZy5tZXJnZVRhYmxlc307XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckVtcHR5Q29uZmlncyhjb25maWc6IExtclBpdm90Q29uZmlnLCBxdWVyeTogUXVlcnkpOiB7c3RlbXNDb25maWdzOiBMbXJQaXZvdFN0ZW1Db25maWdbXTsgc3RlbXM6IFF1ZXJ5U3RlbVtdfSB7XG4gICAgcmV0dXJuIChjb25maWcuc3RlbXNDb25maWdzIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAoe3N0ZW1zQ29uZmlncywgc3RlbXN9LCBzdGVtQ29uZmlnLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIXBpdm90U3RlbUNvbmZpZ0lzRW1wdHkoc3RlbUNvbmZpZykpIHtcbiAgICAgICAgICBjb25zdCBzdGVtID0gKHF1ZXJ5LnN0ZW1zIHx8IFtdKVtpbmRleF07XG4gICAgICAgICAgc3RlbXNDb25maWdzLnB1c2goc3RlbUNvbmZpZyk7XG4gICAgICAgICAgc3RlbXMucHVzaChzdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7c3RlbXNDb25maWdzLCBzdGVtc307XG4gICAgICB9LFxuICAgICAge3N0ZW1zQ29uZmlnczogW10sIHN0ZW1zOiBbXX1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQaXZvdE1lcmdlRGF0YShcbiAgICBtZXJnZVRhYmxlczogYm9vbGVhbixcbiAgICBzdGVtc0NvbmZpZ3M6IExtclBpdm90U3RlbUNvbmZpZ1tdLFxuICAgIHN0ZW1zOiBRdWVyeVN0ZW1bXVxuICApOiBQaXZvdE1lcmdlRGF0YVtdIHtcbiAgICByZXR1cm4gc3RlbXNDb25maWdzLnJlZHVjZSgobWVyZ2VEYXRhOiBQaXZvdE1lcmdlRGF0YVtdLCBzdGVtQ29uZmlnLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnVHlwZSA9IGdldFBpdm90U3RlbUNvbmZpZ1R5cGUoc3RlbUNvbmZpZyk7XG4gICAgICBjb25zdCBtZXJnZURhdGFJbmRleCA9IG1lcmdlRGF0YS5maW5kSW5kZXgoXG4gICAgICAgIGRhdGEgPT4gZGF0YS50eXBlID09PSBjb25maWdUeXBlICYmIGNhbk1lcmdlQ29uZmlnc0J5VHlwZShkYXRhLnR5cGUsIGRhdGEuY29uZmlnc1swXSwgc3RlbUNvbmZpZylcbiAgICAgICk7XG4gICAgICBpZiAobWVyZ2VUYWJsZXMgJiYgbWVyZ2VEYXRhSW5kZXggPj0gMCkge1xuICAgICAgICBtZXJnZURhdGFbbWVyZ2VEYXRhSW5kZXhdLmNvbmZpZ3MucHVzaChzdGVtQ29uZmlnKTtcbiAgICAgICAgbWVyZ2VEYXRhW21lcmdlRGF0YUluZGV4XS5zdGVtcy5wdXNoKHN0ZW1zW2luZGV4XSk7XG4gICAgICAgIG1lcmdlRGF0YVttZXJnZURhdGFJbmRleF0uc3RlbXNJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVyZ2VEYXRhLnB1c2goe2NvbmZpZ3M6IFtzdGVtQ29uZmlnXSwgc3RlbXM6IFtzdGVtc1tpbmRleF1dLCBzdGVtc0luZGV4ZXM6IFtpbmRleF0sIHR5cGU6IGNvbmZpZ1R5cGV9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lcmdlRGF0YTtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlUGl2b3REYXRhKG1lcmdlRGF0YTogUGl2b3RNZXJnZURhdGFbXSk6IExtclBpdm90U3RlbURhdGFbXSB7XG4gICAgcmV0dXJuIG1lcmdlRGF0YS5yZWR1Y2UoKHN0ZW1EYXRhLCBkYXRhKSA9PiB7XG4gICAgICBpZiAoZGF0YS50eXBlID09PSBQaXZvdENvbmZpZ1R5cGUuVmFsdWVzKSB7XG4gICAgICAgIHN0ZW1EYXRhLnB1c2godGhpcy5jb252ZXJ0VmFsdWVBdHRyaWJ1dGVzKGRhdGEuY29uZmlncywgZGF0YS5zdGVtcywgZGF0YS5zdGVtc0luZGV4ZXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZW1EYXRhLnB1c2godGhpcy50cmFuc2Zvcm1TdGVtcyhkYXRhLmNvbmZpZ3MsIGRhdGEuc3RlbXMsIGRhdGEuc3RlbXNJbmRleGVzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RlbURhdGE7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1TdGVtcyhjb25maWdzOiBMbXJQaXZvdFN0ZW1Db25maWdbXSwgcXVlcnlTdGVtczogUXVlcnlTdGVtW10sIHN0ZW1zSW5kZXhlczogbnVtYmVyW10pOiBMbXJQaXZvdFN0ZW1EYXRhIHtcbiAgICBjb25zdCBwaXZvdENvbG9yczogUGl2b3RDb2xvcnMgPSB7cm93czogW10sIGNvbHVtbnM6IFtdLCB2YWx1ZXM6IFtdfTtcbiAgICBjb25zdCBtZXJnZWRWYWx1ZUF0dHJpYnV0ZXM6IExtclBpdm90VmFsdWVBdHRyaWJ1dGVbXSA9IFtdO1xuICAgIGxldCBtZXJnZWRBZ2dyZWdhdGVkRGF0YTogQWdncmVnYXRlZE1hcERhdGEgPSBudWxsO1xuICAgIGxldCBhZGRpdGlvbmFsRGF0YTogUGl2b3RDb25maWdEYXRhO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBjb25maWdzW2ldO1xuICAgICAgY29uc3QgcXVlcnlTdGVtID0gcXVlcnlTdGVtc1tpXTtcbiAgICAgIGNvbnN0IHN0ZW1JbmRleCA9IHN0ZW1zSW5kZXhlc1tpXTtcbiAgICAgIGNvbnN0IHN0ZW1EYXRhID0gdGhpcy5kYXRhPy5kYXRhQnlTdGVtcz8uW3N0ZW1JbmRleF07XG5cbiAgICAgIHRoaXMuZGF0YUFnZ3JlZ2F0b3IudXBkYXRlRGF0YShcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9ucyxcbiAgICAgICAgc3RlbURhdGE/LmRvY3VtZW50cyB8fCBbXSxcbiAgICAgICAgdGhpcy5saW5rVHlwZXMsXG4gICAgICAgIHN0ZW1EYXRhPy5saW5rSW5zdGFuY2VzIHx8IFtdLFxuICAgICAgICBxdWVyeVN0ZW0sXG4gICAgICAgIHRoaXMuY29uc3RyYWludERhdGFcbiAgICAgICk7XG4gICAgICBjb25zdCByb3dBdHRyaWJ1dGVzID0gKGNvbmZpZy5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0cmlidXRlID0+XG4gICAgICAgIHRoaXMuY29udmVydFBpdm90Um93Q29sdW1uQXR0cmlidXRlKGF0dHJpYnV0ZSlcbiAgICAgICk7XG4gICAgICBjb25zdCBjb2x1bW5BdHRyaWJ1dGVzID0gKGNvbmZpZy5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0cmlidXRlID0+XG4gICAgICAgIHRoaXMuY29udmVydFBpdm90Um93Q29sdW1uQXR0cmlidXRlKGF0dHJpYnV0ZSlcbiAgICAgICk7XG4gICAgICBjb25zdCB2YWx1ZUF0dHJpYnV0ZXMgPSAoY29uZmlnLnZhbHVlQXR0cmlidXRlcyB8fCBbXSkubWFwKGF0dHJpYnV0ZSA9PiB0aGlzLmNvbnZlcnRQaXZvdEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTtcblxuICAgICAgcGl2b3RDb2xvcnMucm93cy5wdXNoKC4uLnRoaXMuZ2V0QXR0cmlidXRlc0NvbG9ycyhjb25maWcucm93QXR0cmlidXRlcykpO1xuICAgICAgcGl2b3RDb2xvcnMuY29sdW1ucy5wdXNoKC4uLnRoaXMuZ2V0QXR0cmlidXRlc0NvbG9ycyhjb25maWcuY29sdW1uQXR0cmlidXRlcykpO1xuICAgICAgcGl2b3RDb2xvcnMudmFsdWVzLnB1c2goLi4udGhpcy5nZXRBdHRyaWJ1dGVzQ29sb3JzKGNvbmZpZy52YWx1ZUF0dHJpYnV0ZXMpKTtcblxuICAgICAgY29uc3QgYWdncmVnYXRlZERhdGEgPSB0aGlzLmRhdGFBZ2dyZWdhdG9yLmFnZ3JlZ2F0ZShyb3dBdHRyaWJ1dGVzLCBjb2x1bW5BdHRyaWJ1dGVzLCB2YWx1ZUF0dHJpYnV0ZXMpO1xuICAgICAgbWVyZ2VkQWdncmVnYXRlZERhdGEgPSB0aGlzLm1lcmdlQWdncmVnYXRlZERhdGEobWVyZ2VkQWdncmVnYXRlZERhdGEsIGFnZ3JlZ2F0ZWREYXRhKTtcblxuICAgICAgY29uc3QgZmlsdGVyZWRWYWx1ZUF0dHJpYnV0ZXMgPSAoY29uZmlnLnZhbHVlQXR0cmlidXRlcyB8fCBbXSkuZmlsdGVyKFxuICAgICAgICB2YWx1ZUF0dHIgPT4gIW1lcmdlZFZhbHVlQXR0cmlidXRlcy5zb21lKG1lckF0dHIgPT4gZGVlcE9iamVjdHNFcXVhbHModmFsdWVBdHRyLCBtZXJBdHRyKSlcbiAgICAgICk7XG4gICAgICBtZXJnZWRWYWx1ZUF0dHJpYnV0ZXMucHVzaCguLi5maWx0ZXJlZFZhbHVlQXR0cmlidXRlcyk7XG5cbiAgICAgIGlmICghYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgY29uc3Qgcm93U3RpY2t5ID0gdGhpcy5tYXBTdGlja3lWYWx1ZXMoKGNvbmZpZy5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0ciA9PiBhdHRyLnN0aWNreSkpO1xuICAgICAgICBjb25zdCBjb2x1bW5TdGlja3kgPSB0aGlzLm1hcFN0aWNreVZhbHVlcygoY29uZmlnLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLm1hcChhdHRyID0+IGF0dHIuc3RpY2t5KSk7XG4gICAgICAgIGFkZGl0aW9uYWxEYXRhID0ge1xuICAgICAgICAgIHJvd3NDb25maWc6IChjb25maWcucm93QXR0cmlidXRlcyB8fCBbXSkubWFwKChhdHRyLCBpbmRleCkgPT4gKHtzaG93U3VtczogYXR0ci5zaG93U3Vtcywgc29ydDogYXR0ci5zb3J0LCBleHByZXNzaW9uczogYXR0ci5leHByZXNzaW9ucywgc3RpY2t5OiByb3dTdGlja3lbaW5kZXhdfSkpLFxuICAgICAgICAgIGNvbHVtbnNDb25maWc6IChjb25maWcuY29sdW1uQXR0cmlidXRlcyB8fCBbXSkubWFwKChhdHRyLCBpbmRleCkgPT4gKHtzaG93U3VtczogYXR0ci5zaG93U3Vtcywgc29ydDogYXR0ci5zb3J0LCBleHByZXNzaW9uczogYXR0ci5leHByZXNzaW9ucywgc3RpY2t5OiBjb2x1bW5TdGlja3lbaW5kZXhdfSkpLFxuICAgICAgICAgIHJvd1Nob3dIZWFkZXJBdHRyaWJ1dGVzOiAoY29uZmlnLnJvd0F0dHJpYnV0ZXMgfHwgW10pLm1hcChhdHRyID0+IGF0dHIuc2hvd0hlYWRlciksXG4gICAgICAgICAgcm93QXR0cmlidXRlczogKGNvbmZpZy5yb3dBdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0ciA9PiB0aGlzLnBpdm90QXR0cmlidXRlQXR0cmlidXRlKGF0dHIpKSxcbiAgICAgICAgICBjb2x1bW5TaG93SGVhZGVyQXR0cmlidXRlczogKGNvbmZpZy5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0ciA9PiBmYWxzZSksXG4gICAgICAgICAgY29sdW1uQXR0cmlidXRlczogKGNvbmZpZy5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0ciA9PiB0aGlzLnBpdm90QXR0cmlidXRlQXR0cmlidXRlKGF0dHIpKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0QWdncmVnYXRlZERhdGEobWVyZ2VkQWdncmVnYXRlZERhdGEsIG1lcmdlZFZhbHVlQXR0cmlidXRlcywgcGl2b3RDb2xvcnMsIGFkZGl0aW9uYWxEYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU3RpY2t5VmFsdWVzKHZhbHVlczogYm9vbGVhbltdKTogYm9vbGVhbltdIHtcbiAgICAvLyB3ZSBzdXBwb3J0IG9ubHkgc3RpY2t5IHJvd3MvY29sdW1ucyBpbiBhIHJvd1xuICAgIHJldHVybiB2YWx1ZXMucmVkdWNlKChzdGlja3lWYWx1ZXMsIHN0aWNreSwgaW5kZXgpID0+IHtcbiAgICAgIHN0aWNreVZhbHVlcy5wdXNoKHN0aWNreSAmJiAoaW5kZXggPT09IDAgfHwgc3RpY2t5VmFsdWVzW2luZGV4IC0gMV0pKTtcbiAgICAgIHJldHVybiBzdGlja3lWYWx1ZXM7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBwaXZvdEF0dHJpYnV0ZUNvbnN0cmFpbnQocGl2b3RBdHRyaWJ1dGU6IExtclBpdm90QXR0cmlidXRlKTogQ29uc3RyYWludCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gdGhpcy5maW5kQXR0cmlidXRlQnlQaXZvdEF0dHJpYnV0ZShwaXZvdEF0dHJpYnV0ZSk7XG4gICAgY29uc3QgY29uc3RyYWludCA9IGF0dHJpYnV0ZSAmJiBhdHRyaWJ1dGUuY29uc3RyYWludDtcbiAgICBjb25zdCBvdmVycmlkZUNvbnN0cmFpbnQgPVxuICAgICAgcGl2b3RBdHRyaWJ1dGUuY29uc3RyYWludCAmJlxuICAgICAgdGhpcy50cmFuc2Zvcm0/LmNoZWNrVmFsaWRDb25zdHJhaW50T3ZlcnJpZGU/Lihjb25zdHJhaW50LCBwaXZvdEF0dHJpYnV0ZS5jb25zdHJhaW50KTtcbiAgICByZXR1cm4gb3ZlcnJpZGVDb25zdHJhaW50IHx8IGNvbnN0cmFpbnQ7XG4gIH1cblxuICBwcml2YXRlIHBpdm90QXR0cmlidXRlQXR0cmlidXRlKHBpdm90QXR0cmlidXRlOiBMbXJQaXZvdEF0dHJpYnV0ZSk6IEF0dHJpYnV0ZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gdGhpcy5maW5kQXR0cmlidXRlQnlQaXZvdEF0dHJpYnV0ZShwaXZvdEF0dHJpYnV0ZSk7XG4gICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgY29uc3QgY29uc3RyYWludCA9IGF0dHJpYnV0ZT8uY29uc3RyYWludDtcbiAgICAgIGNvbnN0IG92ZXJyaWRlQ29uc3RyYWludCA9XG4gICAgICAgIHBpdm90QXR0cmlidXRlLmNvbnN0cmFpbnQgJiZcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0/LmNoZWNrVmFsaWRDb25zdHJhaW50T3ZlcnJpZGU/Lihjb25zdHJhaW50LCBwaXZvdEF0dHJpYnV0ZS5jb25zdHJhaW50KTtcbiAgICAgIHJldHVybiB7Li4uYXR0cmlidXRlLCBjb25zdHJhaW50OiBvdmVycmlkZUNvbnN0cmFpbnQgfHwgY29uc3RyYWludCB8fCBuZXcgVW5rbm93bkNvbnN0cmFpbnQoKX07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQWdncmVnYXRlZERhdGEoYTE6IEFnZ3JlZ2F0ZWRNYXBEYXRhLCBhMjogQWdncmVnYXRlZE1hcERhdGEpOiBBZ2dyZWdhdGVkTWFwRGF0YSB7XG4gICAgaWYgKCFhMSB8fCAhYTIpIHtcbiAgICAgIHJldHVybiBhMSB8fCBhMjtcbiAgICB9XG5cbiAgICB0aGlzLm1lcmdlTWFwcyhhMS5tYXAsIGEyLm1hcCk7XG4gICAgdGhpcy5tZXJnZU1hcHMoYTEuY29sdW1uc01hcCwgYTIuY29sdW1uc01hcCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hcDogYTEubWFwLFxuICAgICAgY29sdW1uc01hcDogYTEuY29sdW1uc01hcCxcbiAgICAgIHJvd0xldmVsczogTWF0aC5tYXgoYTEucm93TGV2ZWxzLCBhMi5yb3dMZXZlbHMpLFxuICAgICAgY29sdW1uTGV2ZWxzOiBNYXRoLm1heChhMS5jb2x1bW5MZXZlbHMsIGEyLmNvbHVtbkxldmVscyksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VNYXBzKG0xOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBtMjogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIE9iamVjdC5rZXlzKG0yKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAobTFba2V5XSkge1xuICAgICAgICBpZiAoaXNBcnJheShtMVtrZXldKSAmJiBpc0FycmF5KG0yW2tleV0pKSB7XG4gICAgICAgICAgbTFba2V5XS5wdXNoKC4uLm0yW2tleV0pO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0FycmF5KG0xW2tleV0pICYmICFpc0FycmF5KG0yW2tleV0pKSB7XG4gICAgICAgICAgdGhpcy5tZXJnZU1hcHMobTFba2V5XSwgbTJba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG0xW2tleV0gPSBtMltrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdHRyaWJ1dGVzQ29sb3JzKGF0dHJpYnV0ZXM6IExtclBpdm90QXR0cmlidXRlW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIChhdHRyaWJ1dGVzIHx8IFtdKS5tYXAoYXR0cmlidXRlID0+IHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5kYXRhQWdncmVnYXRvci5nZXROZXh0Q29sbGVjdGlvblJlc291cmNlKGF0dHJpYnV0ZS5yZXNvdXJjZUluZGV4KTtcbiAgICAgIHJldHVybiByZXNvdXJjZSAmJiAoPENvbGxlY3Rpb24+cmVzb3VyY2UpLmNvbG9yO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UGl2b3RSb3dDb2x1bW5BdHRyaWJ1dGUocGl2b3RBdHRyaWJ1dGU6IExtclBpdm90Um93Q29sdW1uQXR0cmlidXRlKTogRGF0YUFnZ3JlZ2F0b3JBdHRyaWJ1dGUge1xuICAgIHJldHVybiB7Li4udGhpcy5jb252ZXJ0UGl2b3RBdHRyaWJ1dGUocGl2b3RBdHRyaWJ1dGUpLCBkYXRhOiBwaXZvdEF0dHJpYnV0ZS5jb25zdHJhaW50fTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFBpdm90QXR0cmlidXRlKHBpdm90QXR0cmlidXRlOiBMbXJQaXZvdEF0dHJpYnV0ZSk6IERhdGFBZ2dyZWdhdG9yQXR0cmlidXRlIHtcbiAgICByZXR1cm4ge3Jlc291cmNlSW5kZXg6IHBpdm90QXR0cmlidXRlLnJlc291cmNlSW5kZXgsIGF0dHJpYnV0ZUlkOiBwaXZvdEF0dHJpYnV0ZS5hdHRyaWJ1dGVJZH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRWYWx1ZUF0dHJpYnV0ZXMoXG4gICAgY29uZmlnczogTG1yUGl2b3RTdGVtQ29uZmlnW10sXG4gICAgc3RlbXM6IFF1ZXJ5U3RlbVtdLFxuICAgIHN0ZW1zSW5kZXhlczogbnVtYmVyW11cbiAgKTogTG1yUGl2b3RTdGVtRGF0YSB7XG4gICAgY29uc3QgZGF0YSA9IGNvbmZpZ3MucmVkdWNlKFxuICAgICAgKGFsbERhdGEsIGNvbmZpZywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlbSA9IHN0ZW1zW2luZGV4XTtcbiAgICAgICAgY29uc3Qgc3RlbUluZGV4ID0gc3RlbXNJbmRleGVzW2luZGV4XTtcblxuICAgICAgICBjb25zdCBzdGVtRGF0YSA9IHRoaXMuZGF0YT8uZGF0YUJ5U3RlbXM/LltzdGVtSW5kZXhdO1xuICAgICAgICB0aGlzLmRhdGFBZ2dyZWdhdG9yLnVwZGF0ZURhdGEoXG4gICAgICAgICAgdGhpcy5jb2xsZWN0aW9ucyxcbiAgICAgICAgICBzdGVtRGF0YT8uZG9jdW1lbnRzIHx8IFtdLFxuICAgICAgICAgIHRoaXMubGlua1R5cGVzLFxuICAgICAgICAgIHN0ZW1EYXRhPy5saW5rSW5zdGFuY2VzIHx8IFtdLFxuICAgICAgICAgIHN0ZW0sXG4gICAgICAgICAgdGhpcy5jb25zdHJhaW50RGF0YVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlQXR0cmlidXRlcyA9IGNvbmZpZy52YWx1ZUF0dHJpYnV0ZXMgfHwgW107XG4gICAgICAgIGFsbERhdGEudmFsdWVUeXBlcy5wdXNoKC4uLnZhbHVlQXR0cmlidXRlcy5tYXAoYXR0ciA9PiBhdHRyLnZhbHVlVHlwZSkpO1xuICAgICAgICBjb25zdCB2YWx1ZUNvbG9ycyA9IHRoaXMuZ2V0QXR0cmlidXRlc0NvbG9ycyh2YWx1ZUF0dHJpYnV0ZXMpO1xuXG4gICAgICAgIGNvbnN0IHt0aXRsZXMsIGNvbnN0cmFpbnRzfSA9IHRoaXMuY3JlYXRlVmFsdWVUaXRsZXModmFsdWVBdHRyaWJ1dGVzKTtcbiAgICAgICAgYWxsRGF0YS50aXRsZXMucHVzaCguLi50aXRsZXMpO1xuICAgICAgICBhbGxEYXRhLmNvbnN0cmFpbnRzLnB1c2goLi4uY29uc3RyYWludHMpO1xuXG4gICAgICAgIGNvbnN0IHtoZWFkZXJzfSA9IHRoaXMuY29udmVydE1hcFRvUGl2b3REYXRhSGVhZGVyKHt9LCAwLCBbXSwgdmFsdWVDb2xvcnMsIFtdLCB0aXRsZXMsIGFsbERhdGEuaGVhZGVycy5sZW5ndGgpO1xuICAgICAgICBhbGxEYXRhLmhlYWRlcnMucHVzaCguLi5oZWFkZXJzKTtcblxuICAgICAgICBhbGxEYXRhLmFnZ3JlZ2F0aW9ucyA9IFsuLi4odmFsdWVBdHRyaWJ1dGVzIHx8IFtdKS5tYXAodmFsdWVBdHRyaWJ1dGUgPT4gdmFsdWVBdHRyaWJ1dGUuYWdncmVnYXRpb24pXTtcblxuICAgICAgICBjb25zdCB7dmFsdWVzLCBkYXRhUmVzb3VyY2VzfSA9ICh2YWx1ZUF0dHJpYnV0ZXMgfHwgW10pLnJlZHVjZTx7dmFsdWVzOiBhbnlbXTsgZGF0YVJlc291cmNlczogRGF0YVJlc291cmNlW11bXX0+KFxuICAgICAgICAgIChhZ2dyZWdhdG9yLCB2YWx1ZUF0dHJpYnV0ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFSZXNvdXJjZXMgPSB0aGlzLmZpbmREYXRhUmVzb3VyY2VzQnlQaXZvdEF0dHJpYnV0ZSh2YWx1ZUF0dHJpYnV0ZSk7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSB0aGlzLmZpbmRBdHRyaWJ1dGVCeVBpdm90QXR0cmlidXRlKHZhbHVlQXR0cmlidXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYWdncmVnYXRlRGF0YVJlc291cmNlcyh2YWx1ZUF0dHJpYnV0ZS5hZ2dyZWdhdGlvbiwgZGF0YVJlc291cmNlcywgYXR0cmlidXRlLCB0cnVlKTtcbiAgICAgICAgICAgIGFnZ3JlZ2F0b3IudmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgYWdncmVnYXRvci5kYXRhUmVzb3VyY2VzLnB1c2goZGF0YVJlc291cmNlcyk7XG4gICAgICAgICAgICByZXR1cm4gYWdncmVnYXRvcjtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt2YWx1ZXM6IFtdLCBkYXRhUmVzb3VyY2VzOiBbXX1cbiAgICAgICAgKTtcblxuICAgICAgICBhbGxEYXRhLnZhbHVlcy5wdXNoKC4uLnZhbHVlcyk7XG4gICAgICAgIGFsbERhdGEuZGF0YVJlc291cmNlcy5wdXNoKC4uLmRhdGFSZXNvdXJjZXMpO1xuICAgICAgICByZXR1cm4gYWxsRGF0YTtcbiAgICAgIH0sXG4gICAgICB7dGl0bGVzOiBbXSwgY29uc3RyYWludHM6IFtdLCBoZWFkZXJzOiBbXSwgdmFsdWVzOiBbXSwgZGF0YVJlc291cmNlczogW10sIHZhbHVlVHlwZXM6IFtdLCBhZ2dyZWdhdGlvbnM6IFtdfVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uSGVhZGVyczogZGF0YS5oZWFkZXJzLFxuICAgICAgY29sdW1uSGVhZGVyQXR0cmlidXRlczogW10sXG4gICAgICByb3dIZWFkZXJzOiBbXSxcbiAgICAgIHJvd0hlYWRlckF0dHJpYnV0ZXM6IFtdLFxuICAgICAgdmFsdWVUaXRsZXM6IGRhdGEudGl0bGVzLFxuICAgICAgdmFsdWVzOiBbZGF0YS52YWx1ZXNdLFxuICAgICAgZGF0YVJlc291cmNlczogW2RhdGEuZGF0YVJlc291cmNlc10sXG4gICAgICB2YWx1ZXNDb25zdHJhaW50czogZGF0YS5jb25zdHJhaW50cyxcbiAgICAgIHZhbHVlVHlwZXM6IGRhdGEudmFsdWVUeXBlcyxcbiAgICAgIHZhbHVlQWdncmVnYXRpb25zOiBkYXRhLmFnZ3JlZ2F0aW9ucyxcblxuICAgICAgcm93c0NvbmZpZzogW10sXG4gICAgICBjb2x1bW5zQ29uZmlnOiBbXSxcblxuICAgICAgaGFzQWRkaXRpb25hbENvbHVtbkxldmVsOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGZpbmREYXRhUmVzb3VyY2VzQnlQaXZvdEF0dHJpYnV0ZShwaXZvdEF0dHJpYnV0ZTogTG1yUGl2b3RBdHRyaWJ1dGUpOiBEYXRhUmVzb3VyY2VbXSB7XG4gICAgaWYgKHBpdm90QXR0cmlidXRlLnJlc291cmNlVHlwZSA9PT0gQXR0cmlidXRlc1Jlc291cmNlVHlwZS5Db2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZGF0YT8udW5pcXVlRG9jdW1lbnRzIHx8IFtdKS5maWx0ZXIoZG9jdW1lbnQgPT4gZG9jdW1lbnQuY29sbGVjdGlvbklkID09PSBwaXZvdEF0dHJpYnV0ZS5yZXNvdXJjZUlkKTtcbiAgICB9IGVsc2UgaWYgKHBpdm90QXR0cmlidXRlLnJlc291cmNlVHlwZSA9PT0gQXR0cmlidXRlc1Jlc291cmNlVHlwZS5MaW5rVHlwZSkge1xuICAgICAgcmV0dXJuICh0aGlzLmRhdGE/LnVuaXF1ZUxpbmtJbnN0YW5jZXMgfHwgW10pLmZpbHRlcihsaW5rID0+IGxpbmsubGlua1R5cGVJZCA9PT0gcGl2b3RBdHRyaWJ1dGUucmVzb3VyY2VJZCk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEFnZ3JlZ2F0ZWREYXRhKFxuICAgIGFnZ3JlZ2F0ZWREYXRhOiBBZ2dyZWdhdGVkTWFwRGF0YSxcbiAgICB2YWx1ZUF0dHJpYnV0ZXM6IExtclBpdm90VmFsdWVBdHRyaWJ1dGVbXSxcbiAgICBwaXZvdENvbG9yczogUGl2b3RDb2xvcnMsXG4gICAgYWRkaXRpb25hbERhdGE6IFBpdm90Q29uZmlnRGF0YVxuICApOiBMbXJQaXZvdFN0ZW1EYXRhIHtcbiAgICBjb25zdCByb3dEYXRhID0gdGhpcy5jb252ZXJ0TWFwVG9QaXZvdERhdGFIZWFkZXIoXG4gICAgICBhZ2dyZWdhdGVkRGF0YS5tYXAsXG4gICAgICBhZ2dyZWdhdGVkRGF0YS5yb3dMZXZlbHMsXG4gICAgICBwaXZvdENvbG9ycy5yb3dzLFxuICAgICAgcGl2b3RDb2xvcnMudmFsdWVzLFxuICAgICAgYWRkaXRpb25hbERhdGEucm93QXR0cmlidXRlc1xuICAgICk7XG4gICAgY29uc3Qgcm93SGVhZGVyQXR0cmlidXRlczogTG1yUGl2b3RIZWFkZXJBdHRyaWJ1dGVbXSA9IChhZGRpdGlvbmFsRGF0YS5yb3dBdHRyaWJ1dGVzIHx8IFtdKVxuICAgICAgLm1hcCgoYXR0cmlidXRlLCBpbmRleCkgPT4gYWRkaXRpb25hbERhdGEucm93U2hvd0hlYWRlckF0dHJpYnV0ZXM/LltpbmRleF0gPyAoe3RpdGxlOiBhdHRyaWJ1dGUubmFtZSwgY29sb3I6IHBpdm90Q29sb3JzLnJvd3M/LltpbmRleF19KSA6IHVuZGVmaW5lZClcblxuICAgIGNvbnN0IHt0aXRsZXM6IHZhbHVlVGl0bGVzLCBjb25zdHJhaW50czogdmFsdWVzQ29uc3RyYWludHN9ID0gdGhpcy5jcmVhdGVWYWx1ZVRpdGxlcyh2YWx1ZUF0dHJpYnV0ZXMpO1xuICAgIGNvbnN0IGNvbHVtbkRhdGEgPSB0aGlzLmNvbnZlcnRNYXBUb1Bpdm90RGF0YUhlYWRlcihcbiAgICAgIGFnZ3JlZ2F0ZWREYXRhLnJvd0xldmVscyA+IDAgPyBhZ2dyZWdhdGVkRGF0YS5jb2x1bW5zTWFwIDogYWdncmVnYXRlZERhdGEubWFwLFxuICAgICAgYWdncmVnYXRlZERhdGEuY29sdW1uTGV2ZWxzLFxuICAgICAgcGl2b3RDb2xvcnMuY29sdW1ucyxcbiAgICAgIHBpdm90Q29sb3JzLnZhbHVlcyxcbiAgICAgIGFkZGl0aW9uYWxEYXRhLmNvbHVtbkF0dHJpYnV0ZXMsXG4gICAgICB2YWx1ZVRpdGxlc1xuICAgICk7XG4gICAgY29uc3QgY29sdW1uSGVhZGVyQXR0cmlidXRlczogTG1yUGl2b3RIZWFkZXJBdHRyaWJ1dGVbXSA9IChhZGRpdGlvbmFsRGF0YS5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKVxuICAgICAgLm1hcCgoYXR0cmlidXRlLCBpbmRleCkgPT4gIGFkZGl0aW9uYWxEYXRhLmNvbHVtblNob3dIZWFkZXJBdHRyaWJ1dGVzPy5baW5kZXhdID8gKHt0aXRsZTogYXR0cmlidXRlLm5hbWUsIGNvbG9yOiBwaXZvdENvbG9ycy5jb2x1bW5zPy5baW5kZXhdfSkgOiB1bmRlZmluZWQpXG5cbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmluaXRNYXRyaXg8bnVtYmVyPihyb3dEYXRhLm1heEluZGV4ICsgMSwgY29sdW1uRGF0YS5tYXhJbmRleCArIDEpO1xuICAgIGNvbnN0IGRhdGFSZXNvdXJjZXMgPSB0aGlzLmluaXRNYXRyaXg8RGF0YVJlc291cmNlW10+KHJvd0RhdGEubWF4SW5kZXggKyAxLCBjb2x1bW5EYXRhLm1heEluZGV4ICsgMSk7XG4gICAgaWYgKCh2YWx1ZUF0dHJpYnV0ZXMgfHwgW10pLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZmlsbFZhbHVlcyh2YWx1ZXMsIGRhdGFSZXNvdXJjZXMsIHJvd0RhdGEuaGVhZGVycywgY29sdW1uRGF0YS5oZWFkZXJzLCB2YWx1ZUF0dHJpYnV0ZXMsIGFnZ3JlZ2F0ZWREYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUFnZ3JlZ2F0aW9ucyA9ICh2YWx1ZUF0dHJpYnV0ZXMgfHwgW10pLm1hcCh2YWx1ZUF0dHJpYnV0ZSA9PiB2YWx1ZUF0dHJpYnV0ZS5hZ2dyZWdhdGlvbik7XG5cbiAgICBjb25zdCBoYXNBZGRpdGlvbmFsQ29sdW1uTGV2ZWwgPVxuICAgICAgKGFnZ3JlZ2F0ZWREYXRhLmNvbHVtbkxldmVscyA9PT0gMCAmJiB2YWx1ZVRpdGxlcy5sZW5ndGggPiAwKSB8fFxuICAgICAgKGFnZ3JlZ2F0ZWREYXRhLmNvbHVtbkxldmVscyA+IDAgJiYgdmFsdWVUaXRsZXMubGVuZ3RoID4gMSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0hlYWRlcnM6IHJvd0RhdGEuaGVhZGVycyxcbiAgICAgIHJvd0hlYWRlckF0dHJpYnV0ZXMsXG4gICAgICBjb2x1bW5IZWFkZXJzOiBjb2x1bW5EYXRhLmhlYWRlcnMsXG4gICAgICBjb2x1bW5IZWFkZXJBdHRyaWJ1dGVzLFxuICAgICAgdmFsdWVUaXRsZXMsXG4gICAgICB2YWx1ZXMsXG4gICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgdmFsdWVzQ29uc3RyYWludHMsXG4gICAgICB2YWx1ZUFnZ3JlZ2F0aW9ucyxcblxuICAgICAgLi4uYWRkaXRpb25hbERhdGEsXG5cbiAgICAgIHZhbHVlVHlwZXM6IHZhbHVlQXR0cmlidXRlcy5tYXAoYXR0ciA9PiBhdHRyLnZhbHVlVHlwZSEpLFxuICAgICAgaGFzQWRkaXRpb25hbENvbHVtbkxldmVsLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRNYXBUb1Bpdm90RGF0YUhlYWRlcihcbiAgICBtYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgbGV2ZWxzOiBudW1iZXIsXG4gICAgY29sb3JzOiBzdHJpbmdbXSxcbiAgICB2YWx1ZUNvbG9yczogc3RyaW5nW10sXG4gICAgYXR0cmlidXRlczogQXR0cmlidXRlW10sXG4gICAgdmFsdWVUaXRsZXM/OiBzdHJpbmdbXSxcbiAgICBhZGRpdGlvbmFsTnVtOiBudW1iZXIgPSAwXG4gICk6IHtoZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXTsgbWF4SW5kZXg6IG51bWJlcn0ge1xuICAgIGNvbnN0IGhlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdID0gW107XG4gICAgY29uc3QgZGF0YSA9IHttYXhJbmRleDogMH07XG4gICAgaWYgKGxldmVscyA9PT0gMCkge1xuICAgICAgaWYgKCh2YWx1ZVRpdGxlcyB8fCBbXSkubGVuZ3RoID4gMCkge1xuICAgICAgICBoZWFkZXJzLnB1c2goXG4gICAgICAgICAgLi4udmFsdWVUaXRsZXMhLm1hcCgodGl0bGUsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICB0YXJnZXRJbmRleDogaW5kZXggKyBhZGRpdGlvbmFsTnVtLFxuICAgICAgICAgICAgY29sb3I6IHZhbHVlQ29sb3JzW2luZGV4XSxcbiAgICAgICAgICAgIGlzVmFsdWVIZWFkZXI6IHRydWUsXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICAgIGRhdGEubWF4SW5kZXggPSB2YWx1ZVRpdGxlcyEubGVuZ3RoIC0gMSArIGFkZGl0aW9uYWxOdW07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjdXJyZW50SW5kZXggPSBhZGRpdGlvbmFsTnVtO1xuICAgICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKCh0aXRsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzWzBdO1xuICAgICAgICBpZiAobGV2ZWxzID09PSAxICYmICh2YWx1ZVRpdGxlcyB8fCBbXSkubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICBoZWFkZXJzLnB1c2goe1xuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICB0YXJnZXRJbmRleDogY3VycmVudEluZGV4LFxuICAgICAgICAgICAgY29sb3I6IGNvbG9yc1swXSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGF0dHJpYnV0ZT8uY29uc3RyYWludCB8fCBuZXcgVW5rbm93bkNvbnN0cmFpbnQoKSxcbiAgICAgICAgICAgIGlzVmFsdWVIZWFkZXI6IGZhbHNlLFxuICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogYXR0cmlidXRlPy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRhdGEubWF4SW5kZXggPSBNYXRoLm1heChkYXRhLm1heEluZGV4LCBjdXJyZW50SW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhlYWRlcnMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbMF0sXG4gICAgICAgICAgICBjb25zdHJhaW50OiBhdHRyaWJ1dGU/LmNvbnN0cmFpbnQgfHwgbmV3IFVua25vd25Db25zdHJhaW50KCksXG4gICAgICAgICAgICBpc1ZhbHVlSGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IGF0dHJpYnV0ZT8ubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hQaXZvdERhdGFIZWFkZXIoXG4gICAgICAgICAgbWFwW3RpdGxlXSxcbiAgICAgICAgICBoZWFkZXJzW2luZGV4XSxcbiAgICAgICAgICBjdXJyZW50SW5kZXgsXG4gICAgICAgICAgMSxcbiAgICAgICAgICBsZXZlbHMsXG4gICAgICAgICAgY29sb3JzLFxuICAgICAgICAgIHZhbHVlQ29sb3JzLFxuICAgICAgICAgIHZhbHVlVGl0bGVzIHx8IFtdLFxuICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgZGF0YVxuICAgICAgICApO1xuICAgICAgICBjdXJyZW50SW5kZXggKz0gdGhpcy5udW1DaGlsZHJlbihtYXBbdGl0bGVdLCBsZXZlbHMgLSAxLCAodmFsdWVUaXRsZXMgJiYgdmFsdWVUaXRsZXMubGVuZ3RoKSB8fCAxKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7aGVhZGVycywgbWF4SW5kZXg6IGRhdGEubWF4SW5kZXh9O1xuICB9XG5cbiAgcHJpdmF0ZSBpdGVyYXRlVGhyb3VnaFBpdm90RGF0YUhlYWRlcihcbiAgICBjdXJyZW50TWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGhlYWRlcjogTG1yUGl2b3REYXRhSGVhZGVyLFxuICAgIGhlYWRlckluZGV4OiBudW1iZXIsXG4gICAgbGV2ZWw6IG51bWJlcixcbiAgICBtYXhMZXZlbHM6IG51bWJlcixcbiAgICBjb2xvcnM6IHN0cmluZ1tdLFxuICAgIHZhbHVlQ29sb3JzOiBzdHJpbmdbXSxcbiAgICB2YWx1ZVRpdGxlczogc3RyaW5nW10sXG4gICAgYXR0cmlidXRlczogQXR0cmlidXRlW10sXG4gICAgYWRkaXRpb25hbERhdGE6IHttYXhJbmRleDogbnVtYmVyfVxuICApIHtcbiAgICBpZiAobGV2ZWwgPT09IG1heExldmVscykge1xuICAgICAgaWYgKCh2YWx1ZVRpdGxlcyB8fCBbXSkubGVuZ3RoID4gMSkge1xuICAgICAgICBoZWFkZXIuY2hpbGRyZW4gPSB2YWx1ZVRpdGxlcy5tYXAoKHRpdGxlLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICB0YXJnZXRJbmRleDogaGVhZGVySW5kZXggKyBpbmRleCxcbiAgICAgICAgICBjb2xvcjogdmFsdWVDb2xvcnNbaW5kZXhdLFxuICAgICAgICAgIGlzVmFsdWVIZWFkZXI6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICAgICAgYWRkaXRpb25hbERhdGEubWF4SW5kZXggPSBNYXRoLm1heChhZGRpdGlvbmFsRGF0YS5tYXhJbmRleCwgaGVhZGVySW5kZXggKyB2YWx1ZVRpdGxlcy5sZW5ndGggLSAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBoZWFkZXIuY2hpbGRyZW4gPSBbXTtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gaGVhZGVySW5kZXg7XG4gICAgT2JqZWN0LmtleXMoY3VycmVudE1hcCkuZm9yRWFjaCgodGl0bGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXNbbGV2ZWxdO1xuICAgICAgaWYgKGxldmVsICsgMSA9PT0gbWF4TGV2ZWxzICYmICh2YWx1ZVRpdGxlcyB8fCBbXSkubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgaGVhZGVyLmNoaWxkcmVuIS5wdXNoKHtcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICB0YXJnZXRJbmRleDogY3VycmVudEluZGV4LFxuICAgICAgICAgIGNvbG9yOiBjb2xvcnNbbGV2ZWxdLFxuICAgICAgICAgIGNvbnN0cmFpbnQ6IGF0dHJpYnV0ZT8uY29uc3RyYWludCB8fCBuZXcgVW5rbm93bkNvbnN0cmFpbnQoKSxcbiAgICAgICAgICBpc1ZhbHVlSGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBhdHRyaWJ1dGU/Lm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICBhZGRpdGlvbmFsRGF0YS5tYXhJbmRleCA9IE1hdGgubWF4KGFkZGl0aW9uYWxEYXRhLm1heEluZGV4LCBjdXJyZW50SW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyLmNoaWxkcmVuIS5wdXNoKHtcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICBjb2xvcjogY29sb3JzW2xldmVsXSxcbiAgICAgICAgICBjb25zdHJhaW50OiBhdHRyaWJ1dGU/LmNvbnN0cmFpbnQgfHwgbmV3IFVua25vd25Db25zdHJhaW50KCksXG4gICAgICAgICAgaXNWYWx1ZUhlYWRlcjogZmFsc2UsXG4gICAgICAgICAgYXR0cmlidXRlTmFtZTogYXR0cmlidXRlPy5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pdGVyYXRlVGhyb3VnaFBpdm90RGF0YUhlYWRlcihcbiAgICAgICAgY3VycmVudE1hcFt0aXRsZV0sXG4gICAgICAgIGhlYWRlci5jaGlsZHJlbj8uW2luZGV4XSxcbiAgICAgICAgY3VycmVudEluZGV4LFxuICAgICAgICBsZXZlbCArIDEsXG4gICAgICAgIG1heExldmVscyxcbiAgICAgICAgY29sb3JzLFxuICAgICAgICB2YWx1ZUNvbG9ycyxcbiAgICAgICAgdmFsdWVUaXRsZXMsXG4gICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhXG4gICAgICApO1xuXG4gICAgICBjdXJyZW50SW5kZXggKz0gdGhpcy5udW1DaGlsZHJlbihcbiAgICAgICAgY3VycmVudE1hcFt0aXRsZV0sXG4gICAgICAgIG1heExldmVscyAtIChsZXZlbCArIDEpLFxuICAgICAgICAodmFsdWVUaXRsZXMgJiYgdmFsdWVUaXRsZXMubGVuZ3RoKSB8fCAxXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBudW1DaGlsZHJlbihtYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sIG1heExldmVsczogbnVtYmVyLCBudW1UaXRsZXM6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKG1heExldmVscyA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bVRpdGxlcztcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobWFwIHx8IHt9KTtcbiAgICBpZiAobWF4TGV2ZWxzID09PSAxKSB7XG4gICAgICByZXR1cm4ga2V5cy5sZW5ndGggKiBudW1UaXRsZXM7XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSBrZXlzLnJlZHVjZSgoc3VtLCBrZXkpID0+IHN1bSArIHRoaXMubnVtQ2hpbGRyZW5SZWN1cnNpdmUobWFwW2tleV0sIDEsIG1heExldmVscyksIDApO1xuICAgIHJldHVybiBjb3VudCAqIG51bVRpdGxlcztcbiAgfVxuXG4gIHByaXZhdGUgbnVtQ2hpbGRyZW5SZWN1cnNpdmUobWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBsZXZlbDogbnVtYmVyLCBtYXhMZXZlbHM6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKGxldmVsID49IG1heExldmVscykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG1hcCB8fCB7fSk7XG4gICAgaWYgKGxldmVsICsgMSA9PT0gbWF4TGV2ZWxzKSB7XG4gICAgICByZXR1cm4ga2V5cy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXMucmVkdWNlKChzdW0sIGtleSkgPT4gc3VtICsgdGhpcy5udW1DaGlsZHJlblJlY3Vyc2l2ZShtYXBba2V5XSwgbGV2ZWwgKyAxLCBtYXhMZXZlbHMpLCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmFsdWVUaXRsZXModmFsdWVBdHRyaWJ1dGVzOiBMbXJQaXZvdFZhbHVlQXR0cmlidXRlW10pOiB7dGl0bGVzOiBzdHJpbmdbXTsgY29uc3RyYWludHM6IENvbnN0cmFpbnRbXX0ge1xuICAgIHJldHVybiAodmFsdWVBdHRyaWJ1dGVzIHx8IFtdKS5yZWR1Y2U8e3RpdGxlczogc3RyaW5nW107IGNvbnN0cmFpbnRzOiBDb25zdHJhaW50W119PihcbiAgICAgICh7dGl0bGVzLCBjb25zdHJhaW50c30sIHBpdm90QXR0cmlidXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHRoaXMuZmluZEF0dHJpYnV0ZUJ5UGl2b3RBdHRyaWJ1dGUocGl2b3RBdHRyaWJ1dGUpO1xuICAgICAgICBjb25zdHJhaW50cy5wdXNoKFxuICAgICAgICAgIGRhdGFBZ2dyZWdhdGlvbkNvbnN0cmFpbnQocGl2b3RBdHRyaWJ1dGUuYWdncmVnYXRpb24pIHx8IHRoaXMucGl2b3RBdHRyaWJ1dGVDb25zdHJhaW50KHBpdm90QXR0cmlidXRlKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5jcmVhdGVWYWx1ZVRpdGxlKHBpdm90QXR0cmlidXRlLmFnZ3JlZ2F0aW9uLCBhdHRyaWJ1dGU/Lm5hbWUgfHwgJycpO1xuICAgICAgICB0aXRsZXMucHVzaCh0aXRsZSk7XG5cbiAgICAgICAgcmV0dXJuIHt0aXRsZXMsIGNvbnN0cmFpbnRzfTtcbiAgICAgIH0sXG4gICAgICB7dGl0bGVzOiBbXSwgY29uc3RyYWludHM6IFtdfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlVmFsdWVUaXRsZShhZ2dyZWdhdGlvbjogRGF0YUFnZ3JlZ2F0aW9uVHlwZSwgYXR0cmlidXRlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZUFnZ3JlZ2F0aW9uVGl0bGUgPSB0aGlzLnRyYW5zZm9ybT8uZm9ybWF0QWdncmVnYXRpb24/LihhZ2dyZWdhdGlvbikgfHwgYWdncmVnYXRpb24udG9TdHJpbmcoKTtcbiAgICByZXR1cm4gYCR7dmFsdWVBZ2dyZWdhdGlvblRpdGxlfSAke2F0dHJpYnV0ZU5hbWUgfHwgJyd9YC50cmltKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRNYXRyaXg8VD4ocm93czogbnVtYmVyLCBjb2x1bW5zOiBudW1iZXIpOiBUW11bXSB7XG4gICAgY29uc3QgbWF0cml4OiBUW11bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBtYXRyaXhbaV0gPSBbXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIG1hdHJpeFtpXVtqXSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxsVmFsdWVzKFxuICAgIHZhbHVlczogbnVtYmVyW11bXSxcbiAgICBkYXRhUmVzb3VyY2VzOiBEYXRhUmVzb3VyY2VbXVtdW10sXG4gICAgcm93SGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gICAgY29sdW1uSGVhZGVyczogTG1yUGl2b3REYXRhSGVhZGVyW10sXG4gICAgdmFsdWVBdHRyaWJ1dGVzOiBMbXJQaXZvdFZhbHVlQXR0cmlidXRlW10sXG4gICAgYWdncmVnYXRlZERhdGE6IEFnZ3JlZ2F0ZWRNYXBEYXRhXG4gICkge1xuICAgIGlmIChyb3dIZWFkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hSb3dIZWFkZXJzKFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGRhdGFSZXNvdXJjZXMsXG4gICAgICAgIHJvd0hlYWRlcnMsXG4gICAgICAgIGNvbHVtbkhlYWRlcnMsXG4gICAgICAgIHZhbHVlQXR0cmlidXRlcyxcbiAgICAgICAgYWdncmVnYXRlZERhdGEubWFwXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZXJhdGVUaHJvdWdoQ29sdW1uSGVhZGVycyh2YWx1ZXMsIGRhdGFSZXNvdXJjZXMsIGNvbHVtbkhlYWRlcnMsIDAsIHZhbHVlQXR0cmlidXRlcywgYWdncmVnYXRlZERhdGEubWFwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGl0ZXJhdGVUaHJvdWdoUm93SGVhZGVycyhcbiAgICB2YWx1ZXM6IG51bWJlcltdW10sXG4gICAgZGF0YVJlc291cmNlczogRGF0YVJlc291cmNlW11bXVtdLFxuICAgIHJvd0hlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdLFxuICAgIGNvbHVtbkhlYWRlcnM6IExtclBpdm90RGF0YUhlYWRlcltdLFxuICAgIHZhbHVlQXR0cmlidXRlczogTG1yUGl2b3RWYWx1ZUF0dHJpYnV0ZVtdLFxuICAgIGN1cnJlbnRNYXA6IEFnZ3JlZ2F0ZWREYXRhTWFwXG4gICkge1xuICAgIGZvciAoY29uc3Qgcm93SGVhZGVyIG9mIHJvd0hlYWRlcnMpIHtcbiAgICAgIGNvbnN0IHJvd0hlYWRlck1hcCA9IGN1cnJlbnRNYXBbcm93SGVhZGVyLnRpdGxlXSB8fCB7fTtcblxuICAgICAgaWYgKHJvd0hlYWRlci5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLml0ZXJhdGVUaHJvdWdoUm93SGVhZGVycyhcbiAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgZGF0YVJlc291cmNlcyxcbiAgICAgICAgICByb3dIZWFkZXIuY2hpbGRyZW4sXG4gICAgICAgICAgY29sdW1uSGVhZGVycyxcbiAgICAgICAgICB2YWx1ZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgcm93SGVhZGVyTWFwXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGlzTm90TnVsbE9yVW5kZWZpbmVkKHJvd0hlYWRlci50YXJnZXRJbmRleCkgJiYgY29sdW1uSGVhZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hDb2x1bW5IZWFkZXJzKFxuICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgICAgIGNvbHVtbkhlYWRlcnMsXG4gICAgICAgICAgcm93SGVhZGVyLnRhcmdldEluZGV4ISxcbiAgICAgICAgICB2YWx1ZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgcm93SGVhZGVyTWFwXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpdGVyYXRlVGhyb3VnaENvbHVtbkhlYWRlcnMoXG4gICAgdmFsdWVzOiBudW1iZXJbXVtdLFxuICAgIGRhdGFSZXNvdXJjZXM6IERhdGFSZXNvdXJjZVtdW11bXSxcbiAgICBjb2x1bW5IZWFkZXJzOiBMbXJQaXZvdERhdGFIZWFkZXJbXSxcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIHZhbHVlQXR0cmlidXRlczogTG1yUGl2b3RWYWx1ZUF0dHJpYnV0ZVtdLFxuICAgIGN1cnJlbnRNYXA6IEFnZ3JlZ2F0ZWREYXRhTWFwIHwgQWdncmVnYXRlZERhdGFWYWx1ZXNbXVxuICApIHtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbkhlYWRlciBvZiBjb2x1bW5IZWFkZXJzKSB7XG4gICAgICBpZiAoY29sdW1uSGVhZGVyLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuaXRlcmF0ZVRocm91Z2hDb2x1bW5IZWFkZXJzKFxuICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICBkYXRhUmVzb3VyY2VzLFxuICAgICAgICAgIGNvbHVtbkhlYWRlci5jaGlsZHJlbixcbiAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICB2YWx1ZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgY3VycmVudE1hcFtjb2x1bW5IZWFkZXIudGl0bGVdIHx8IHt9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGlzTm90TnVsbE9yVW5kZWZpbmVkKGNvbHVtbkhlYWRlci50YXJnZXRJbmRleCkpIHtcbiAgICAgICAgY29uc3QgYWdncmVnYXRlZERhdGFWYWx1ZXMgPSBpc0FycmF5KGN1cnJlbnRNYXApID8gY3VycmVudE1hcCA6IGN1cnJlbnRNYXBbY29sdW1uSGVhZGVyLnRpdGxlXTtcblxuICAgICAgICBpZiAodmFsdWVBdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlSW5kZXggPSBjb2x1bW5IZWFkZXIudGFyZ2V0SW5kZXghICUgdmFsdWVBdHRyaWJ1dGVzLmxlbmd0aDtcbiAgICAgICAgICBjb25zdCB7dmFsdWUsIGRhdGFSZXNvdXJjZXM6IGFnZ3JlZ2F0ZWREYXRhUmVzb3VyY2VzfSA9IHRoaXMuYWdncmVnYXRlVmFsdWUoXG4gICAgICAgICAgICB2YWx1ZUF0dHJpYnV0ZXNbdmFsdWVJbmRleF0sXG4gICAgICAgICAgICBhZ2dyZWdhdGVkRGF0YVZhbHVlc1xuICAgICAgICAgICk7XG4gICAgICAgICAgdmFsdWVzW3Jvd0luZGV4XVtjb2x1bW5IZWFkZXIudGFyZ2V0SW5kZXghXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFSZXNvdXJjZXNbcm93SW5kZXhdW2NvbHVtbkhlYWRlci50YXJnZXRJbmRleCFdID0gYWdncmVnYXRlZERhdGFSZXNvdXJjZXMgfHwgW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFnZ3JlZ2F0ZVZhbHVlKFxuICAgIHZhbHVlQXR0cmlidXRlOiBMbXJQaXZvdFZhbHVlQXR0cmlidXRlLFxuICAgIGFnZ3JlZ2F0ZWREYXRhVmFsdWVzOiBBZ2dyZWdhdGVkRGF0YVZhbHVlc1tdXG4gICk6IHt2YWx1ZT86IGFueTsgZGF0YVJlc291cmNlcz86IERhdGFSZXNvdXJjZVtdfSB7XG4gICAgY29uc3QgcmVzb3VyY2VBZ2dyZWdhdGVkRGF0YVZhbHVlcyA9IChhZ2dyZWdhdGVkRGF0YVZhbHVlcyB8fCBbXSkuZmlsdGVyKFxuICAgICAgYWdnID0+IGFnZy5yZXNvdXJjZUlkID09PSB2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZUlkICYmIGFnZy50eXBlID09PSB2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZVR5cGVcbiAgICApO1xuICAgIGlmIChyZXNvdXJjZUFnZ3JlZ2F0ZWREYXRhVmFsdWVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZGF0YVJlc291cmNlcyA9IGZsYXR0ZW5NYXRyaXgocmVzb3VyY2VBZ2dyZWdhdGVkRGF0YVZhbHVlcy5tYXAodmFsID0+IHZhbC5vYmplY3RzKSk7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSB0aGlzLnBpdm90QXR0cmlidXRlQXR0cmlidXRlKHZhbHVlQXR0cmlidXRlKTtcbiAgICAgIGlmICh2YWx1ZUF0dHJpYnV0ZS5hZ2dyZWdhdGlvbiA9PT0gRGF0YUFnZ3JlZ2F0aW9uVHlwZS5Kb2luKSB7XG4gICAgICAgIC8vIHZhbHVlcyB3aWxsIGJlIGpvaW5lZCBpbiBwaXZvdC10YWJsZS1jb252ZXJ0ZXJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gKGRhdGFSZXNvdXJjZXMgfHwgW10pLm1hcCgocmVzb3VyY2U6IERhdGFSZXNvdXJjZSkgPT4gcmVzb3VyY2UuZGF0YT8uW2F0dHJpYnV0ZT8uaWQgfHwgJyddKTtcbiAgICAgICAgcmV0dXJuIHt2YWx1ZTogdW5pcXVlVmFsdWVzKGZsYXR0ZW5WYWx1ZXModmFsdWVzKSksIGRhdGFSZXNvdXJjZXN9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZSA9IGF0dHJpYnV0ZSAmJiBhZ2dyZWdhdGVEYXRhUmVzb3VyY2VzKHZhbHVlQXR0cmlidXRlLmFnZ3JlZ2F0aW9uLCBkYXRhUmVzb3VyY2VzLCBhdHRyaWJ1dGUsIHRydWUpO1xuICAgICAgcmV0dXJuIHt2YWx1ZSwgZGF0YVJlc291cmNlc307XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQXR0cmlidXRlQnlQaXZvdEF0dHJpYnV0ZSh2YWx1ZUF0dHJpYnV0ZTogTG1yUGl2b3RBdHRyaWJ1dGUpOiBBdHRyaWJ1dGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZVR5cGUgPT09IEF0dHJpYnV0ZXNSZXNvdXJjZVR5cGUuQ29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbnNBdHRyaWJ1dGVzTWFwPy5bdmFsdWVBdHRyaWJ1dGUucmVzb3VyY2VJZF0/Llt2YWx1ZUF0dHJpYnV0ZS5hdHRyaWJ1dGVJZF07XG4gICAgfSBlbHNlIGlmICh2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZVR5cGUgPT09IEF0dHJpYnV0ZXNSZXNvdXJjZVR5cGUuTGlua1R5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpbmtUeXBlc0F0dHJpYnV0ZXNNYXA/Llt2YWx1ZUF0dHJpYnV0ZS5yZXNvdXJjZUlkXT8uW3ZhbHVlQXR0cmlidXRlLmF0dHJpYnV0ZUlkXTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBpdm90U3RlbUNvbmZpZ1R5cGUoc3RlbUNvbmZpZzogTG1yUGl2b3RTdGVtQ29uZmlnKTogUGl2b3RDb25maWdUeXBlIHtcbiAgY29uc3Qgcm93TGVuZ3RoID0gKHN0ZW1Db25maWcucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoO1xuICBjb25zdCBjb2x1bW5MZW5ndGggPSAoc3RlbUNvbmZpZy5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGg7XG5cbiAgaWYgKHJvd0xlbmd0aCA+IDAgJiYgY29sdW1uTGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBQaXZvdENvbmZpZ1R5cGUuUm93c0FuZENvbHVtbnM7XG4gIH0gZWxzZSBpZiAocm93TGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBQaXZvdENvbmZpZ1R5cGUuUm93cztcbiAgfSBlbHNlIGlmIChjb2x1bW5MZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIFBpdm90Q29uZmlnVHlwZS5Db2x1bW5zO1xuICB9XG4gIHJldHVybiBQaXZvdENvbmZpZ1R5cGUuVmFsdWVzO1xufVxuXG5mdW5jdGlvbiBjYW5NZXJnZUNvbmZpZ3NCeVR5cGUodHlwZTogUGl2b3RDb25maWdUeXBlLCBjMTogTG1yUGl2b3RTdGVtQ29uZmlnLCBjMjogTG1yUGl2b3RTdGVtQ29uZmlnKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlID09PSBQaXZvdENvbmZpZ1R5cGUuUm93cykge1xuICAgIHJldHVybiAoYzEucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoID09PSAoYzIucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFBpdm90Q29uZmlnVHlwZS5Db2x1bW5zKSB7XG4gICAgcmV0dXJuIChjMS5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGggPT09IChjMi5jb2x1bW5BdHRyaWJ1dGVzIHx8IFtdKS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIChcbiAgICAoYzEucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoID09PSAoYzIucm93QXR0cmlidXRlcyB8fCBbXSkubGVuZ3RoICYmXG4gICAgKGMxLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLmxlbmd0aCA9PT0gKGMyLmNvbHVtbkF0dHJpYnV0ZXMgfHwgW10pLmxlbmd0aFxuICApO1xufVxuIl19