@firestitch/report 18.12.0 → 18.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/app/reports/components/component-grid/component-grid.component.d.ts +9 -1
  2. package/app/reports/components/component-grid/report-grid-cell.pipe.d.ts +11 -0
  3. package/app/reports/components/report-component/report-component.component.d.ts +0 -1
  4. package/app/reports/data/report-grid-source.d.ts +1 -0
  5. package/app/reports/export/report-export-collector.service.d.ts +8 -1
  6. package/app/reports/export/report-filter-lines.d.ts +2 -0
  7. package/app/reports/export/report-grid-export.d.ts +20 -0
  8. package/app/reports/export/report-pdf.service.d.ts +2 -0
  9. package/app/reports/export/report-pptx.service.d.ts +1 -0
  10. package/app/reports/group-by.d.ts +3 -0
  11. package/app/reports/interfaces/{report-chat-viewer-detail.interface.d.ts → report-chat-viewer-show-rows.interface.d.ts} +1 -1
  12. package/app/reports/interfaces/report-chat-viewer-state.interface.d.ts +2 -2
  13. package/app/reports/interfaces/report-export-snapshot.interface.d.ts +2 -0
  14. package/app/reports/interfaces/report-mark-action.type.d.ts +1 -1
  15. package/app/reports/interfaces/report-temporary-state.interface.d.ts +1 -1
  16. package/app/reports/interfaces/report-viewer-feature.type.d.ts +1 -1
  17. package/app/reports/interfaces/report.interface.d.ts +7 -0
  18. package/app/reports/report-filter-items.d.ts +1 -1
  19. package/app/reports/report-grid-layout.d.ts +9 -2
  20. package/app/reports/services/report-filter-state.service.d.ts +8 -1
  21. package/app/reports/tile-data-state.d.ts +2 -2
  22. package/esm2022/app/reports/components/component-grid/component-grid.component.mjs +70 -8
  23. package/esm2022/app/reports/components/component-grid/report-grid-cell.pipe.mjs +41 -0
  24. package/esm2022/app/reports/components/report-component/report-component.component.mjs +15 -19
  25. package/esm2022/app/reports/data/report-grid-source.mjs +11 -2
  26. package/esm2022/app/reports/data/report.data.mjs +3 -3
  27. package/esm2022/app/reports/export/report-export-collector.service.mjs +72 -7
  28. package/esm2022/app/reports/export/report-filter-lines.mjs +68 -1
  29. package/esm2022/app/reports/export/report-grid-export.mjs +48 -0
  30. package/esm2022/app/reports/export/report-pdf.service.mjs +47 -17
  31. package/esm2022/app/reports/export/report-pptx.service.mjs +48 -4
  32. package/esm2022/app/reports/group-by.mjs +13 -0
  33. package/esm2022/app/reports/interfaces/report-chat-viewer-show-rows.interface.mjs +2 -0
  34. package/esm2022/app/reports/interfaces/report-chat-viewer-state.interface.mjs +1 -1
  35. package/esm2022/app/reports/interfaces/report-export-snapshot.interface.mjs +1 -1
  36. package/esm2022/app/reports/interfaces/report-mark-action.type.mjs +1 -1
  37. package/esm2022/app/reports/interfaces/report-temporary-state.interface.mjs +1 -1
  38. package/esm2022/app/reports/interfaces/report-viewer-feature.type.mjs +1 -1
  39. package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
  40. package/esm2022/app/reports/mark-click.mjs +2 -2
  41. package/esm2022/app/reports/option-builder.mjs +4 -4
  42. package/esm2022/app/reports/report-filter-items.mjs +9 -7
  43. package/esm2022/app/reports/report-grid-layout.mjs +98 -4
  44. package/esm2022/app/reports/report-viewer-features.mjs +4 -2
  45. package/esm2022/app/reports/services/report-filter-state.service.mjs +125 -39
  46. package/esm2022/app/reports/tile-data-state.mjs +12 -17
  47. package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +2 -2
  48. package/esm2022/app/reports/views/report/report.component.mjs +2 -2
  49. package/fesm2022/{firestitch-report-echarts-CoaGXKET.mjs → firestitch-report-echarts-DMflI6jp.mjs} +2 -2
  50. package/fesm2022/{firestitch-report-echarts-CoaGXKET.mjs.map → firestitch-report-echarts-DMflI6jp.mjs.map} +1 -1
  51. package/fesm2022/{firestitch-report-firestitch-report-CHPA7sla.mjs → firestitch-report-firestitch-report-C94rjx24.mjs} +660 -125
  52. package/fesm2022/firestitch-report-firestitch-report-C94rjx24.mjs.map +1 -0
  53. package/fesm2022/firestitch-report.mjs +1 -1
  54. package/package.json +2 -2
  55. package/esm2022/app/reports/interfaces/report-chat-viewer-detail.interface.mjs +0 -2
  56. package/fesm2022/firestitch-report-firestitch-report-CHPA7sla.mjs.map +0 -1
@@ -12,7 +12,8 @@ import { DEFAULT_TEXT_COLOR, DEFAULT_TEXT_SIZE, TEXT_TABLE_BORDER_COLOR, TEXT_TA
12
12
  import { isDrawn } from '../values';
13
13
  import { categoryAxisTitle, chartDateLabel, chartReferences, colorByValues, drawsStatLines, extractChartSeries, extractWaterfall, formatPeriodLabel, isColorBy, measureLineStyle, measureMarkStat, PERCENT_AXIS_INTERVAL, PERCENT_AXIS_MAX, percentAxisMin, percentStackedShares, priorSeriesStyles, RANK_AXIS_MIN, rankValueAxes, referencePeak, resolveLegendPosition, seriesAxisIndexes, seriesHex, seriesStat, seriesTypes, spansMultipleYears, STAT_LABEL, valueAxisRange, } from '../option-builder';
14
14
  import { REPORT_CHART_COLORS, REPORT_KPI_CHANGE_COLORS, REPORT_KPI_SPARKLINE_COLOR, REPORT_KPI_TRACK_COLOR, REPORT_MUTED_TEXT_COLOR, REPORT_REFERENCE_COLOR, REPORT_WATERFALL_COLORS, } from '../theme/palette';
15
- import { HEADER_FOOTER_NAME, coverLines, emptyLabel, exportCell, exportNoteLines, exportTitle, exportWindowsLine, kpiCardHasExtras, kpiExportHeight, kpiExportParts, listColumns, listHeadings, listTotalsRow, moreRowsNotice, scaledKpiHeights, textOverflow, } from './report-export-collector.service';
15
+ import { HEADER_FOOTER_NAME, coverLines, emptyLabel, exportCell, exportNoteLines, exportTitle, exportWindowsLine, isEmptyTile, kpiCardHasExtras, kpiExportHeight, kpiExportParts, listColumns, listHeadings, listTotalsRow, moreRowsNotice, scaledKpiHeights, textOverflow, } from './report-export-collector.service';
16
+ import { gridExportTable } from './report-grid-export';
16
17
  import { OVERFLOW_SLACK, ReportTextLayoutService, } from './report-text-layout.service';
17
18
  import * as i0 from "@angular/core";
18
19
  // Component title strip height on the slide, inches.
@@ -63,6 +64,9 @@ const PPTX_RANK_WHOLE_STEP_PEAK = 10;
63
64
  const PPTX_RANK_FORMAT_CODE = '0';
64
65
  // Approximate table row height, inches — drives the rows-that-fit cap.
65
66
  const SLIDE_ROW_H = 0.26;
67
+ // The spaces a table's group label steps in by per level: a cell's text is
68
+ // the one place a slide table indents.
69
+ const GRID_INDENT = '\u00A0\u00A0\u00A0';
66
70
  // Rows fetched for a list's slide table. A slide table never continues onto
67
71
  // another slide, so this only has to cover the rows a box can show; the
68
72
  // moreRowsNotice() row names the rest.
@@ -450,7 +454,7 @@ export class ReportPptxService {
450
454
  const component = item.component;
451
455
  // Geometry is in inches — PowerPoint's native unit.
452
456
  const { x, y, w, h } = component;
453
- const title = exportTitle(component, tokens, item.search, item.crumbs);
457
+ const title = exportTitle(component, tokens, item.search, item.crumbs, item.filtered);
454
458
  if (title) {
455
459
  slide.addText(title, {
456
460
  x, y, w, h: TITLE_H,
@@ -480,7 +484,7 @@ export class ReportPptxService {
480
484
  fontSize: SMALL_FONT_SIZE, color: MUTED_COLOR, valign: 'top', margin: 0, fit: 'none',
481
485
  });
482
486
  }
483
- if (!item.data || !item.data.rows?.length) {
487
+ if (!item.data || isEmptyTile(item)) {
484
488
  slide.addText(emptyLabel(item), {
485
489
  x, y: bodyY, w, h: bodyH,
486
490
  fontSize: 10, italic: true, color: MUTED_COLOR, align: 'center', valign: 'middle',
@@ -494,6 +498,9 @@ export class ReportPptxService {
494
498
  case 'list':
495
499
  this._renderTable(slide, component, item.data, item.hiddenColumns, timezone, context, x, bodyY, w, bodyH);
496
500
  break;
501
+ case 'grid':
502
+ this._renderGridTable(slide, item, context, x, bodyY, w, bodyH);
503
+ break;
497
504
  case 'kpi':
498
505
  this._renderKpi(pptx, slide, item, timezone, context, x, bodyY, w, bodyH);
499
506
  break;
@@ -1093,6 +1100,43 @@ export class ReportPptxService {
1093
1100
  valign: 'middle',
1094
1101
  });
1095
1102
  }
1103
+ // A table tile as a native table (gridExportTable()): its heading rows
1104
+ // spanned as the screen's header, as many lines as the box holds (groups
1105
+ // and totals bold, a group's label stepped in by its depth), the
1106
+ // moreRowsNotice row for the rest and the total row. A number is written
1107
+ // in the report's locale.
1108
+ _renderGridTable(slide, item, context, x, y, w, h) {
1109
+ const table = gridExportTable(item.table);
1110
+ const cell = (exported, options = {}) => ({
1111
+ text: `${GRID_INDENT.repeat(exported.indent)}${exported.text}`,
1112
+ options: pptxRunOptions({
1113
+ ...(exported.colSpan > 1 ? { colspan: exported.colSpan } : {}),
1114
+ ...(exported.rowSpan > 1 ? { rowspan: exported.rowSpan } : {}),
1115
+ ...(exported.bold ? { bold: true } : {}),
1116
+ ...(exported.numeric ? { align: 'right' } : {}),
1117
+ ...options,
1118
+ }, exported.numeric ? context.locale : undefined),
1119
+ });
1120
+ const cap = Math.max(1, Math.floor(h / SLIDE_ROW_H) - table.head.length - (table.foot ? 1 : 0));
1121
+ const lines = table.body.slice(0, cap);
1122
+ const remaining = table.body.length - lines.length + table.moreRows;
1123
+ slide.addTable([
1124
+ ...table.head.map((row) => row.map((heading) => cell(heading, { color: 'FFFFFF', fill: { color: '4E79A7' } }))),
1125
+ ...lines.map((row) => row.map((line) => cell(line))),
1126
+ ...(remaining > 0
1127
+ ? [[{ text: moreRowsNotice(remaining), options: { colspan: table.numeric.length, italic: true, color: MUTED_COLOR } }]]
1128
+ : []),
1129
+ ...(table.foot ? [table.foot.map((total) => cell(total, { bold: true, fill: { color: 'E4E7EB' } }))] : []),
1130
+ ], {
1131
+ x, y, w,
1132
+ fontSize: 9,
1133
+ color: '1F2933',
1134
+ border: { type: 'solid', pt: 0.5, color: 'E4E7EB' },
1135
+ autoPage: false,
1136
+ rowH: SLIDE_ROW_H,
1137
+ valign: 'middle',
1138
+ });
1139
+ }
1096
1140
  // A KPI tile: the card the screen draws (kpi-card.ts decides every line),
1097
1141
  // as native text boxes and shapes stacked and centered in the body. A card
1098
1142
  // with only its value and label keeps the tile's long-standing single text
@@ -1308,4 +1352,4 @@ function claimSlots(slots, cell) {
1308
1352
  slots[row].fill(claimed, cell.column, cell.column + colSpan);
1309
1353
  }
1310
1354
  }
1311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBwdHguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LXBwdHguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLHFCQUFxQixHQUN0QixNQUFNLFdBQVcsQ0FBQztBQWdCbkIsT0FBTyxFQUErQixXQUFXLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFDakMsZUFBZSxFQUFFLFVBQVUsR0FDM0csTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsYUFBYSxF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QUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxFLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUV2QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN4QyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENB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TSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ3RHLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFFaEIsT0FBTyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDdkUsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxPQUFPLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqSCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM5QyxLQUFLLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDekQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJlcG9ydENoYXJ0RGF0YUxhYmVscyB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFydC1kYXRhLWxhYmVscy5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0RGF0ZUxhYmVsIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWRhdGUtbGFiZWwuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydExpbmVTdHlsZSB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFydC1saW5lLXN0eWxlLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnRNYXJrU3RhdCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFydC1tYXJrLXN0YXQuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRLcGlUcmVuZCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1rcGktdHJlbmQuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRMaXN0Q29sdW1uRm9ybWF0IH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWxpc3QtY29sdW1uLWZvcm1hdC5lbnVtJztcbmltcG9ydCB7IGxheWVyRmlsdGVyRmllbGRzIH0gZnJvbSAnLi4vZmlsdGVyLXRleHQnO1xuaW1wb3J0IHtcbiAgYXhpc051bWJlckZvcm1hdCxcbiAgY2hhcnRBeGlzRm9ybWF0Q29kZSxcbiAgY2hhcnRWYWx1ZVBlYWssXG4gIGhhc051bWJlckZvcm1hdCxcbiAgbnVtYmVyRm9ybWF0Q29kZSxcbiAgcmVzb2x2ZUNoYXJ0TnVtYmVyRm9ybWF0LFxuICByZXNvbHZlUmVwb3J0VGltZXpvbmUsXG59IGZyb20gJy4uL2Zvcm1hdCc7XG5pbXBvcnQge1xuICBDaGFydENvbmZpZyxcbiAgQ2hhcnRHcmFudWxhcml0eSxcbiAgQ2hhcnRNZWFzdXJlLFxuICBDaGFydFZhbHVlQXhpcyxcbiAgQ29tcG9uZW50RGF0YSxcbiAgTGVnZW5kUG9zaXRpb24sXG4gIEtwaUNvbmZpZyxcbiAgTnVtYmVyRm9ybWF0U3BlYyxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBSZXBvcnRMb2NhbGVUYWcsXG4gIFJlcG9ydFBhZ2UsXG4gIFdhdGVyZmFsbFN0ZXBLaW5kLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS3BpQ2FyZERlbHRhLCBLcGlDYXJkVGFyZ2V0LCBrcGlDYXJkVmlldywga3BpU3BhcmtsaW5lR2VvbWV0cnkgfSBmcm9tICcuLi9rcGktY2FyZCc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HIH0gZnJvbSAnLi4vbGF5b3V0JztcbmltcG9ydCB7IGxpc3RUb3RhbHNMYWJlbENvbHVtbiB9IGZyb20gJy4uL2xpc3QtY29uZmlnJztcbmltcG9ydCB7XG4gIERFRkFVTFRfVEVYVF9DT0xPUiwgREVGQVVMVF9URVhUX1NJWkUsIFRFWFRfVEFCTEVfQk9SREVSX0NPTE9SLCBURVhUX1RBQkxFX0JPUkRFUl9XSURUSCwgVEVYVF9UQUJMRV9DRUxMX1BBRERJTkcsXG4gIFRleHRCbG9jaywgVGV4dFBhcmFncmFwaCwgVGV4dFJ1biwgVGV4dFRhYmxlLCBUZXh0VGFibGVDZWxsLCBUZXh0VG9rZW5Db250ZXh0LCBibG9ja1BhcmFncmFwaHMsIHRleHRCbG9ja3MsXG59IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHsgaXNEcmF3biB9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQge1xuICBjYXRlZ29yeUF4aXNUaXRsZSxcbiAgY2hhcnREYXRlTGFiZWwsXG4gIGNoYXJ0UmVmZXJlbmNlcyxcbiAgY29sb3JCeVZhbHVlcyxcbiAgRHJhd25SZWZlcmVuY2UsXG4gIGRyYXdzU3RhdExpbmVzLFxuICBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgZXh0cmFjdENoYXJ0U2VyaWVzLFxuICBleHRyYWN0V2F0ZXJmYWxsLFxuICBmb3JtYXRQZXJpb2RMYWJlbCxcbiAgaXNDb2xvckJ5LFxuICBtZWFzdXJlTGluZVN0eWxlLFxuICBtZWFzdXJlTWFya1N0YXQsXG4gIFBFUkNFTlRfQVhJU19JTlRFUlZBTCxcbiAgUEVSQ0VOVF9BWElTX01BWCxcbiAgcGVyY2VudEF4aXNNaW4sXG4gIFBlcmNlbnRTaGFyZXMsXG4gIHBlcmNlbnRTdGFja2VkU2hhcmVzLFxuICBwcmlvclNlcmllc1N0eWxlcyxcbiAgUkFOS19BWElTX01JTixcbiAgcmFua1ZhbHVlQXhlcyxcbiAgcmVmZXJlbmNlUGVhayxcbiAgcmVzb2x2ZUxlZ2VuZFBvc2l0aW9uLFxuICBzZXJpZXNBeGlzSW5kZXhlcyxcbiAgc2VyaWVzSGV4LFxuICBzZXJpZXNTdGF0LFxuICBzZXJpZXNUeXBlcyxcbiAgc3BhbnNNdWx0aXBsZVllYXJzLFxuICBTVEFUX0xBQkVMLFxuICBWYWx1ZUF4aXNJbmRleCxcbiAgdmFsdWVBeGlzUmFuZ2UsXG4gIFdhdGVyZmFsbFN0ZXAsXG59IGZyb20gJy4uL29wdGlvbi1idWlsZGVyJztcbmltcG9ydCB7XG4gIFJFUE9SVF9DSEFSVF9DT0xPUlMsXG4gIFJFUE9SVF9LUElfQ0hBTkdFX0NPTE9SUyxcbiAgUkVQT1JUX0tQSV9TUEFSS0xJTkVfQ09MT1IsXG4gIFJFUE9SVF9LUElfVFJBQ0tfQ09MT1IsXG4gIFJFUE9SVF9NVVRFRF9URVhUX0NPTE9SLFxuICBSRVBPUlRfUkVGRVJFTkNFX0NPTE9SLFxuICBSRVBPUlRfV0FURVJGQUxMX0NPTE9SUyxcbn0gZnJvbSAnLi4vdGhlbWUvcGFsZXR0ZSc7XG5pbXBvcnQge1xuICBCdWlsdEV4cG9ydCwgQ29sbGVjdGVkQ29tcG9uZW50LCBDb2xsZWN0ZWRSZXBvcnQsIEhFQURFUl9GT09URVJfTkFNRSwgS3BpRXhwb3J0SGVpZ2h0cywgVGV4dE92ZXJmbG93LCBjb3ZlckxpbmVzLFxuICBlbXB0eUxhYmVsLCBleHBvcnRDZWxsLCBleHBvcnROb3RlTGluZXMsIGV4cG9ydFRpdGxlLCBleHBvcnRXaW5kb3dzTGluZSwga3BpQ2FyZEhhc0V4dHJhcywga3BpRXhwb3J0SGVpZ2h0LFxuICBrcGlFeHBvcnRQYXJ0cywgbGlzdENvbHVtbnMsIGxpc3RIZWFkaW5ncywgbGlzdFRvdGFsc1JvdywgbW9yZVJvd3NOb3RpY2UsIHNjYWxlZEtwaUhlaWdodHMsIHRleHRPdmVyZmxvdyxcbn0gZnJvbSAnLi9yZXBvcnQtZXhwb3J0LWNvbGxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIE9WRVJGTE9XX1NMQUNLLCBSZXBvcnRUZXh0TGF5b3V0U2VydmljZSwgVGV4dEJsb2NrTGF5b3V0LCBUZXh0U2VnbWVudExheW91dCwgVGV4dFRhYmxlTGF5b3V0LFxufSBmcm9tICcuL3JlcG9ydC10ZXh0LWxheW91dC5zZXJ2aWNlJztcblxuXG4vLyBDb21wb25lbnQgdGl0bGUgc3RyaXAgaGVpZ2h0IG9uIHRoZSBzbGlkZSwgaW5jaGVzLlxuY29uc3QgVElUTEVfSCA9IDAuMjg7XG5cbi8vIFRoZSBzbWFsbCBwcmludCBhIGNvbXBvbmVudCBtYXkgY2FycnksIGluY2hlczogdGhlIGRheXMgaXQgcmVhZHMgdW5kZXIgaXRzXG4vLyB0aXRsZSAoYSBzdWJ0aXRsZSBsaW5lKSwgaXRzIG5vdGVzIGF0IHRoZSBmb290IG9mIGl0cyBib3ggKGEgbGluZSBlYWNoKSwgYW5kXG4vLyB0aGUgbGluZXMgb2YgYSBLUEkgY2FyZCB1bmRlciBpdHMgdmFsdWUuIEEgY2hhcnQncyBvciBhIGxpc3QncyBub3RlcyBnaXZlXG4vLyB3YXkgYmVmb3JlIGl0cyBib2R5IHdvdWxkIHNocmluayB1bmRlciBNSU5fQk9EWV9ILlxuY29uc3QgU01BTExfRk9OVF9TSVpFID0gODtcbmNvbnN0IFNVQlRJVExFX0ggPSAwLjE4O1xuY29uc3QgTk9URV9MSU5FX0ggPSAwLjE2O1xuY29uc3QgTUlOX0JPRFlfSCA9IDAuNjtcbmNvbnN0IE1VVEVEX0NPTE9SID0gUkVQT1JUX01VVEVEX1RFWFRfQ09MT1I7XG5cbi8vIEEgS1BJIGNhcmQncyBwYXJ0cywgdG9wIHRvIGJvdHRvbSwgaW5jaGVzIChrcGlFeHBvcnRQYXJ0cyBzaGVkcyB0aGVcbi8vIHNwYXJrbGluZSwgdGhlbiB0aGUgdGFyZ2V0LCB0aGVuIHRoZSBub3RlcyBvbiBhIHNob3J0IHRpbGUpLlxuY29uc3QgS1BJX1RBUkdFVF9URVhUX0ggPSAwLjE4O1xuY29uc3QgS1BJX0JBUl9HQVAgPSAwLjAyO1xuY29uc3QgS1BJX0JBUl9IID0gMC4wNTtcbmNvbnN0IEtQSV9IRUlHSFRTOiBLcGlFeHBvcnRIZWlnaHRzID0ge1xuICB2YWx1ZTogMC40OCxcbiAgbGFiZWw6IDAuMjIsXG4gIGRlbHRhOiAwLjIyLFxuICB3aW5kb3c6IDAuMTgsXG4gIHRhcmdldDogS1BJX1RBUkdFVF9URVhUX0ggKyBLUElfQkFSX0dBUCArIEtQSV9CQVJfSCArIDAuMDMsXG4gIHNwYXJrbGluZTogMC40MixcbiAgbm90ZTogTk9URV9MSU5FX0gsXG59O1xuLy8gVGhlIHNpemUgb2YgdGhlIGRlbHRhLCB3aW5kb3cgYW5kIHRhcmdldCBsaW5lcy5cbmNvbnN0IEtQSV9MSU5FX0ZPTlRfU0laRSA9IDk7XG4vLyBUaGUgZGVsdGEncyB0cmlhbmdsZTogaXRzIHNpZGUsIGFuZCB0aGUgZ2FwIGJlZm9yZSB0aGUgY2hhbmdlLlxuY29uc3QgS1BJX0FSUk9XID0gMC4wOTtcbmNvbnN0IEtQSV9BUlJPV19HQVAgPSAwLjA0O1xuLy8gQSBjaGFyYWN0ZXIncyBhdmVyYWdlIHdpZHRoIGFzIGEgc2hhcmUgb2YgaXRzIGZvbnQgc2l6ZSwgZm9yIHBsYWNpbmcgdGhlXG4vLyB0cmlhbmdsZSBiZXNpZGUgdGV4dCBQb3dlclBvaW50IGxheXMgb3V0LlxuY29uc3QgUFBUWF9DSEFSX1dJRFRIID0gMC40Mjtcbi8vIFRoZSB0YXJnZXQncyBwcm9ncmVzcyBiYXIsIGFuZCB0aGUgdHJhY2sgaXQgZmlsbHMuXG5jb25zdCBLUElfQkFSX1cgPSAxLjc7XG5jb25zdCBLUElfVFJBQ0tfQ09MT1IgPSBSRVBPUlRfS1BJX1RSQUNLX0NPTE9SO1xuLy8gVGhlIHNwYXJrbGluZSdzIHdpZGVzdCBib3gsIGFuZCBpdHMgc2VyaWVzIG5hbWUgaW4gdGhlIGRhdGEgc2hlZXQgd2hlbiB0aGVcbi8vIG1lYXN1cmUgaGFzIG5vIGxhYmVsLlxuY29uc3QgS1BJX1NQQVJLTElORV9XID0gMjtcbmNvbnN0IEtQSV9TUEFSS0xJTkVfTkFNRSA9ICdUcmVuZCc7XG5cbi8vIEEgcmFuayBheGlzIGRyYXduIHRvcC1kb3duIGtlZXBzIGl0cyBjYXRlZ29yeSBsYWJlbHMgdW5kZXIgdGhlIHBsb3Q6IGF0IHRoZVxuLy8gYXhpcydzIGhpZ2ggZW5kLCB3aGljaCBhIHJldmVyc2VkIGF4aXMgcHV0cyBhdCB0aGUgYm90dG9tLiBSYW5rcyB1cCB0byB0aGlzXG4vLyBtYW55IGFyZSBzdGVwcGVkIG9uZSBhdCBhIHRpbWUuXG5jb25zdCBQUFRYX1JBTktfQ0FURUdPUllfTEFCRUxfUE9TID0gJ2hpZ2gnO1xuY29uc3QgUFBUWF9SQU5LX1dIT0xFX1NURVBfUEVBSyA9IDEwO1xuY29uc3QgUFBUWF9SQU5LX0ZPUk1BVF9DT0RFID0gJzAnO1xuLy8gQXBwcm94aW1hdGUgdGFibGUgcm93IGhlaWdodCwgaW5jaGVzIOKAlCBkcml2ZXMgdGhlIHJvd3MtdGhhdC1maXQgY2FwLlxuY29uc3QgU0xJREVfUk9XX0ggPSAwLjI2O1xuXG4vLyBSb3dzIGZldGNoZWQgZm9yIGEgbGlzdCdzIHNsaWRlIHRhYmxlLiBBIHNsaWRlIHRhYmxlIG5ldmVyIGNvbnRpbnVlcyBvbnRvXG4vLyBhbm90aGVyIHNsaWRlLCBzbyB0aGlzIG9ubHkgaGFzIHRvIGNvdmVyIHRoZSByb3dzIGEgYm94IGNhbiBzaG93OyB0aGVcbi8vIG1vcmVSb3dzTm90aWNlKCkgcm93IG5hbWVzIHRoZSByZXN0LlxuZXhwb3J0IGNvbnN0IFBQVFhfTElTVF9ST1dTID0gMTAwO1xuXG4vLyBPdXIgbGVnZW5kIHBvc2l0aW9ucyBtYXBwZWQgdG8gcHB0eGdlbmpzJ3Mgc2luZ2xlLWxldHRlciBsZWdlbmRQb3MgY29kZXMuXG4vLyAnaGlkZGVuJyBoYXMgbm8gc2xvdCDigJQgc2hvd0xlZ2VuZCBpcyB0dXJuZWQgb2ZmIGluc3RlYWQg4oCUIHNvIGl0IGZhbGxzIGJhY2tcbi8vIHRvIHRvcC5cbmNvbnN0IFBQVFhfTEVHRU5EX1BPUzogUmVjb3JkPExlZ2VuZFBvc2l0aW9uLCAndCcgfCAnYicgfCAnbCcgfCAncic+ID0ge1xuICB0b3A6ICd0JyxcbiAgYm90dG9tOiAnYicsXG4gIGxlZnQ6ICdsJyxcbiAgcmlnaHQ6ICdyJyxcbiAgaGlkZGVuOiAndCcsXG59O1xuXG4vLyBXaGF0IGEgd2F0ZXJmYWxsJ3Mgc2VyaWVzIGFyZSBjYWxsZWQgaW4gUG93ZXJQb2ludCdzIGRhdGEgc2hlZXQgYW5kIG9uIGhvdmVyLlxuLy8gVGhlIGxlZ2VuZCBzdGF5cyBvZmYsIGFzIGl0IGRvZXMgb24gc2NyZWVuLCB1bmxlc3MgdGhlIGNoYXJ0IGRyYXdzXG4vLyByZWZlcmVuY2VzLCB3aGljaCBvbmx5IHRoZSBsZWdlbmQgY2FuIG5hbWUgaW4gUG93ZXJQb2ludC5cbmNvbnN0IFdBVEVSRkFMTF9TRVJJRVNfTkFNRVM6IFJlY29yZDxXYXRlcmZhbGxTdGVwS2luZCwgc3RyaW5nPiA9IHtcbiAgcmlzZTogJ0luY3JlYXNlJyxcbiAgZmFsbDogJ0RlY3JlYXNlJyxcbiAgdG90YWw6ICdUb3RhbCcsXG59O1xuXG4vLyBBIG51bGwgaXMgYSBwZXJpb2Qgd2l0aCBubyB2YWx1ZS4gVGhlIHNjcmVlbiBicmVha3MgdGhlIGxpbmUgdGhlcmUsIGFuZFxuLy8gcHB0eGdlbmpzJ3MgZGVmYXVsdCAoJ3NwYW4nKSB3b3VsZCBkcmF3IHN0cmFpZ2h0IGFjcm9zcyBpdC4gVGhlIHNldHRpbmcgaXNcbi8vIGNoYXJ0LWxldmVsLCBzbyBhIGNvbWJvJ3MgZXZlcnkgdHlwZSBpbmhlcml0cyBpdCB0aHJvdWdoIHRoZSBjaGFydCBvcHRpb25zLlxuY29uc3QgQkxBTktTX0FTX0dBUFMgPSB7IGRpc3BsYXlCbGFua3NBczogJ2dhcCcgfSBhcyBjb25zdDtcblxuLy8gVGhlIGF4aXMgbGFiZWwgYW5kIHRpdGxlIHNpemVzIGV2ZXJ5IGNoYXJ0IHdpdGggYXhlcyBzaGFyZXMsIHdoaWNoZXZlciBheGlzXG4vLyB0aGV5IGxhbmQgb24uXG5jb25zdCBBWElTX0ZPTlRfU0laRVMgPSB7IGNhdEF4aXNMYWJlbEZvbnRTaXplOiA5LCB2YWxBeGlzTGFiZWxGb250U2l6ZTogOSwgdmFsQXhpc1RpdGxlRm9udFNpemU6IDEwIH0gYXMgY29uc3Q7XG5cbi8vIEEgbGluZSBzdHlsZSBhcyBQb3dlclBvaW50J3MgcHJlc2V0IGRhc2ggKGE6cHJzdERhc2gpLiBwcHR4Z2VuanMgd3JpdGVzIGl0XG4vLyBvbiBsaW5lIHNlcmllcyBvbmx5LCBzbyBhbiBhcmVhIGlzIG5ldmVyIGRhc2hlZC5cbmNvbnN0IFBQVFhfTElORV9EQVNIOiBSZWNvcmQ8UmVwb3J0Q2hhcnRMaW5lU3R5bGUsIHN0cmluZz4gPSB7XG4gIFtSZXBvcnRDaGFydExpbmVTdHlsZS5Tb2xpZF06ICdzb2xpZCcsXG4gIFtSZXBvcnRDaGFydExpbmVTdHlsZS5EYXNoZWRdOiAnZGFzaCcsXG4gIFtSZXBvcnRDaGFydExpbmVTdHlsZS5Eb3R0ZWRdOiAnc3lzRG90Jyxcbn07XG5cbi8vIEEgbGluZSdzIG1hcmtlcnMsIGFzIG9uIHNjcmVlbjogYSBkb3QgdGhlIHNjcmVlbidzIHNpemUgb24gZWFjaCBwb2ludC5cbmNvbnN0IFBQVFhfTElORV9TWU1CT0xfU0laRSA9IDY7XG5cbi8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3Mgc2hhcmUgYXhpczogd2hvbGUgcGVyY2VudGFnZXMuIFRoZSBzaGFyZXMgYXJlXG4vLyByYXRpb3MsIHNvICcwJScgaXMgcmlnaHQgd2hhdGV2ZXIgdGhlIHJlcG9ydCdzIHBlcmNlbnRGb3JtYXQuXG5jb25zdCBQUFRYX1BFUkNFTlRfRk9STUFUX0NPREUgPSAnMCUnO1xuXG4vLyBUaGUgc2l6ZSBvZiBhIGNoYXJ0J3MgZGF0YSBsYWJlbHMsIGEgc3RlcCB1bmRlciB0aGUgYXhpcyBsYWJlbHMsIGFzIG9uXG4vLyBzY3JlZW4uXG5jb25zdCBQUFRYX0RBVEFfTEFCRUxfRk9OVF9TSVpFID0gODtcblxuLy8gVGhlIG1vc3QgY2F0ZWdvcmllcyBhbiAnYXV0bycgZGF0YS1sYWJlbGVkIGNoYXJ0IGxhYmVscyBpbiBQb3dlclBvaW50LFxuLy8gd2hpY2ggY2Fubm90IGhpZGUgdGhlIGxhYmVscyB0aGF0IG92ZXJsYXA6IHBhc3QgdGhpcyBtYW55LCBpdCBsYWJlbHMgbm9uZS5cbmV4cG9ydCBjb25zdCBQUFRYX0FVVE9fTEFCRUxfTUFYX1BPSU5UUyA9IDI0O1xuXG4vLyBBIHJlZmVyZW5jZSBvciBzdGF0aXN0aWMgbGluZSdzIHdpZHRoIGluIHBvaW50czogYSBoYWlybGluZSBiZXNpZGUgdGhlXG4vLyBzZXJpZXMsIGFzIG9uIHNjcmVlbi5cbmNvbnN0IFBQVFhfQ09OU1RBTlRfTElORV9TSVpFID0gMTtcblxuLy8gV2hhdCB0aGUgdXBwZXIgZWRnZSBvZiBhIHJlZmVyZW5jZSBiYW5kIGlzIGNhbGxlZCBpbiB0aGUgZGF0YSBzaGVldCBhbmQgdGhlXG4vLyBsZWdlbmQsIGFmdGVyIHRoZSBiYW5kJ3Mgb3duIGxhYmVsIG9uIGl0cyBsb3dlciBlZGdlLlxuY29uc3QgUFBUWF9CQU5EX1VQUEVSX1NVRkZJWCA9ICcgKHVwcGVyKSc7XG5cbi8vIFdoYXQgdGhlIGV4cG9ydCdzIG92ZXJmbG93IGdhdGUgc2F5cyB0aGUgZGVjayBkb2VzIHdpdGggYSB0ZXh0IGJsb2NrIHRoYXRcbi8vIGRvZXMgbm90IGZpdCBpdHMgYm94LlxuY29uc3QgUFBUWF9PVkVSRkxPV19OT1RFID0gJ0luIHRoZSBQb3dlclBvaW50IGl0IHJ1bnMgcGFzdCB0aGUgYm90dG9tIG9mIGl0cyBib3gsIGFuZCB0YWJsZSByb3dzIHBhc3QgaXQgYXJlICdcbiAgKyAnbGVmdCBvdXQuJztcblxuLy8gVGhlIHNob3J0ZXN0IHRleHQgYm94IGEgdGV4dCBibG9jaydzIHdvcmRzIGdldCBiZXR3ZWVuIGl0cyB0YWJsZXMsIGluY2hlcyxcbi8vIGhvd2V2ZXIgY2xvc2UgdGhlIGNhbnZhcyBzZXRzIHRoZWlyIHRvcCBhbmQgYm90dG9tLlxuY29uc3QgVEVYVF9TRUdNRU5UX01JTl9IID0gMC4wNTtcblxuLy8gQSB0ZXh0IHRhYmxlJ3MgY2VsbCBtYXJnaW5zLCB0b3AsIHJpZ2h0LCBib3R0b20gYW5kIGxlZnQsIGluIHBvaW50czogdGhlXG4vLyBwYWRkaW5nIGV2ZXJ5IHJlbmRlcmVyIGRyYXdzIChURVhUX1RBQkxFX0NFTExfUEFERElORykuIHBwdHhnZW5qcyAzLjEyIHJlYWRzXG4vLyBhIG1hcmdpbiBsaXN0IGFzIHBvaW50cyB3aGVuIGl0cyBmaXJzdCB2YWx1ZSBpcyBhdCBsZWFzdCAxLCBhbmQgYXMgaW5jaGVzXG4vLyBvdGhlcndpc2UuXG5jb25zdCBURVhUX1RBQkxFX0NFTExfTUFSR0lOID0gW1xuICBURVhUX1RBQkxFX0NFTExfUEFERElORy52ZXJ0aWNhbCxcbiAgVEVYVF9UQUJMRV9DRUxMX1BBRERJTkcuaG9yaXpvbnRhbCxcbiAgVEVYVF9UQUJMRV9DRUxMX1BBRERJTkcudmVydGljYWwsXG4gIFRFWFRfVEFCTEVfQ0VMTF9QQURESU5HLmhvcml6b250YWwsXG5dO1xuXG4vLyBXaGVyZSB0aGUgbGVnZW5kIG9mIGEgY2hhcnQgd2l0aCByZWZlcmVuY2Ugb3Igc3RhdGlzdGljIGxpbmVzIHNpdHMgd2hlblxuLy8gdGhlIGNvbmZpZyBkb2VzIG5vdCBwaW4gaXQ6IHRoZSBvbmUgcGxhY2UgUG93ZXJQb2ludCBuYW1lcyB0aG9zZSBsaW5lcy5cbmNvbnN0IFBQVFhfQ09OU1RBTlRfTEVHRU5EOiBMZWdlbmRQb3NpdGlvbiA9ICd0b3AnO1xuXG4vLyBPbmUgbmF0aXZlIGNoYXJ0IHNlcmllczogaXRzIG5hbWUsIGl0cyBmaWxsIGFuZCBpdHMgdmFsdWUgcGVyIGNhdGVnb3J5LiBBXG4vLyBudWxsIGlzIGEgYmxhbmsgcG9pbnQ6IGEgZ2FwIGluIGV2ZXJ5IGF4aXMgY2hhcnQsIG5vdCBvbmx5IHRoZSB3YXRlcmZhbGwsXG4vLyBhbmQgYSB6ZXJvIHdoZXJlIGJhcnMgc3RhY2suXG5pbnRlcmZhY2UgUHB0eENoYXJ0U2VyaWVzIHtcbiAgbmFtZTogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdO1xufVxuXG4vLyBPbmUgbmF0aXZlIGNoYXJ0IG9mIGEgUG93ZXJQb2ludCBjaGFydDogdGhlIHR5cGUgaXQgZHJhd3MsIHdoaWNoIG9mIHRoZVxuLy8gY2hhcnQgZGF0YSdzIHNlcmllcyBpdCBob2xkcyAoYnkgaW5kZXgpLCB3aGV0aGVyIHRoZXkgcGxvdCBhZ2FpbnN0IHRoZVxuLy8gc2Vjb25kYXJ5IHZhbHVlIGF4aXMsIGFuZCB0aGUgb3B0aW9ucyBsYWlkIG92ZXIgdGhlIGNoYXJ0J3MgZm9yIGl0IGFsb25lLlxuaW50ZXJmYWNlIFBwdHhFbnRyeSB7XG4gIHR5cGU6IHN0cmluZztcbiAgaW5kZXhlczogbnVtYmVyW107XG4gIHNlY29uZGFyeTogYm9vbGVhbjtcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIEEgbGluZSBQb3dlclBvaW50IGRyYXdzIGF0IG9uZSB2YWx1ZSB0aGUgd2hvbGUgd2lkdGggb2YgdGhlIHBsb3QsIGFzIGFcbi8vIHNlcmllcyBvZiBpdHMgb3duOiBhIHJlZmVyZW5jZSBsaW5lLCBvbmUgZWRnZSBvZiBhIHJlZmVyZW5jZSBiYW5kLCBvciBhXG4vLyBtZWFzdXJlJ3Mgc3RhdGlzdGljIGxpbmUuIHBwdHhnZW5qcyBoYXMgbm8gbWFya0xpbmUgb3IgbWFya0FyZWEuXG5pbnRlcmZhY2UgUHB0eENvbnN0YW50TGluZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbiAgY29sb3I6IHN0cmluZztcbiAgc2Vjb25kYXJ5OiBib29sZWFuO1xufVxuXG4vLyBUaGUgb3B0aW9ucyBvZiBvbmUgcnVuIG9mIFBvd2VyUG9pbnQgdGV4dC4gUG93ZXJQb2ludCBwcm9vZnMgZXZlcnkgcnVuIGluIGl0c1xuLy8gbGFuZ3VhZ2UsIGFuZCBwcHR4Z2VuanMgd3JpdGVzIGVuLVVTIGZvciBhIHJ1biB0aGF0IG5hbWVzIG5vbmUuIEEgcnVuIHdob3NlXG4vLyB3aG9sZSB0ZXh0IGlzIGEgdmFsdWUgd3JpdHRlbiBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlIChhIEtQSSB2YWx1ZSwgYSBkYXRlXG4vLyBjZWxsLCB0aGUgY292ZXIncyBkYXRlKSBwYXNzZXMgdGhhdCBsb2NhbGUsIHNvIGEgRnJlbmNoIGRhdGUgaXMgbm90IG1hcmtlZFxuLy8gYXMgbWlzc3BlbGxlZCBFbmdsaXNoLiBBdXRob3JlZCBhbmQgaW50ZXJmYWNlIHRleHQgKHRpdGxlcywgbGFiZWxzLFxuLy8gaGVhZGluZ3MsIGZpbHRlciBsaW5lcywgbm90aWNlcykgcGFzc2VzIG5vbmUgYW5kIGtlZXBzIHRoZSBkZWZhdWx0LCBzbyBhblxuLy8gRW5nbGlzaCB0aXRsZSBpbiBhIEZyZW5jaCByZXBvcnQgaXMgbmV2ZXIgcHJvb2ZlZCBhcyBGcmVuY2guXG5leHBvcnQgZnVuY3Rpb24gcHB0eFJ1bk9wdGlvbnMoXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB2YWx1ZUxvY2FsZT86IFJlcG9ydExvY2FsZVRhZyxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHZhbHVlTG9jYWxlID8geyAuLi5vcHRpb25zLCBsYW5nOiB2YWx1ZUxvY2FsZSB9IDogb3B0aW9ucztcbn1cblxuLy8gQnVpbGRzIHRoZSBQb3dlclBvaW50IGRlY2sgY2xpZW50LXNpZGUgd2l0aCBwcHR4Z2VuanMuIENoYXJ0cyBhcmUgTkFUSVZFXG4vLyBlZGl0YWJsZSBQb3dlclBvaW50IGNoYXJ0cyAoc2xpZGUuYWRkQ2hhcnQgd3JpdGVzIHJlYWwgY2hhcnQgWE1MIHdpdGggYW5cbi8vIGVtYmVkZGVkIGRhdGEgd29ya2Jvb2sg4oCUIFwiRWRpdCBEYXRhXCIgd29ya3MpLCBuZXZlciBpbWFnZXMuIFRoZSBwYWdlIElTIHRoZVxuLy8gc2xpZGU6IHRoZSByZXBvcnQncyB1bml0IGlzIGluY2hlcyDigJQgZXhhY3RseSBQb3dlclBvaW50J3MgdW5pdCDigJQgc28gdGhlXG4vLyBsYXlvdXQgYW5kIGV2ZXJ5IGNvbXBvbmVudCBwb3NpdGlvbiB0cmFuc2ZlciB3aXRoIG5vIGNvbnZlcnNpb24gYXQgYWxsLlxuLy8gcHB0eGdlbmpzIGlzIGxvYWRlZCBsYXppbHkgc28gaXQgbGl2ZXMgaW4gaXRzIG93biB3ZWJwYWNrIGNodW5rLlxuLy9cbi8vIEEgdGV4dCBibG9jaydzIHdvcmRzIGFuZCB0YWJsZXMgYXJlIHBsYWNlZCB3aGVyZSB0aGUgY2FudmFzIGxheXMgdGhlbSBvdXRcbi8vIChSZXBvcnRUZXh0TGF5b3V0U2VydmljZSkuIFdvcmRzIHRoYXQgZG8gbm90IGZpdCBhIGJsb2NrJ3MgYm94IHJ1biBvbiBwYXN0XG4vLyBpdHMgYm90dG9tLCBhbmQgdGFibGUgcm93cyBwYXN0IGl0IGFyZSBsZWZ0IG91dCwgc28gYnVpbGQoKSBoYW5kcyB0aGUgZGVja1xuLy8gYmFjayB1bnNhdmVkIHdpdGggdGhlIGJsb2NrcyB0aGF0IGRvIG5vdCBmaXQsIGFuZCB0aGUgZXhwb3J0IGNhbiBhc2sgYWJvdXRcbi8vIHRoZW0gYmVmb3JlIGl0IHNhdmVzLlxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlcG9ydFBwdHhTZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90ZXh0TGF5b3V0ID0gaW5qZWN0KFJlcG9ydFRleHRMYXlvdXRTZXJ2aWNlKTtcblxuICBwdWJsaWMgYXN5bmMgYnVpbGQoY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQpOiBQcm9taXNlPEJ1aWx0RXhwb3J0PiB7XG4gICAgY29uc3QgUHB0eEdlbkpTID0gKGF3YWl0IGltcG9ydCgncHB0eGdlbmpzJykpLmRlZmF1bHQ7XG5cbiAgICBjb25zdCByZXBvcnQgPSBjb2xsZWN0ZWQucmVwb3J0O1xuICAgIGNvbnN0IHBhZ2VXID0gcmVwb3J0LnBhZ2VXaWR0aDtcbiAgICBjb25zdCBwYWdlSCA9IHJlcG9ydC5wYWdlSGVpZ2h0O1xuXG4gICAgY29uc3QgcHB0eCA9IG5ldyBQcHR4R2VuSlMoKTtcbiAgICBwcHR4LmRlZmluZUxheW91dCh7IG5hbWU6ICdSRVBPUlQnLCB3aWR0aDogcGFnZVcsIGhlaWdodDogcGFnZUggfSk7XG4gICAgcHB0eC5sYXlvdXQgPSAnUkVQT1JUJztcbiAgICBwcHR4LnRpdGxlID0gcmVwb3J0Lm5hbWU7XG5cbiAgICB0aGlzLl90aXRsZVNsaWRlKHBwdHgsIGNvbGxlY3RlZCwgcGFnZVcsIHBhZ2VIKTtcblxuICAgIC8vIFRoZSB0ZXh0IGJsb2NrcyB0aGF0IGRvIG5vdCBmaXQgdGhlaXIgYm94LCBieSBjb21wb25lbnQgaWQsIHNvIGEgaGVhZGVyXG4gICAgLy8gb3IgZm9vdGVyIGJsb2NrIGlzIGxpc3RlZCBvbmNlLCBub3Qgb25jZSBwZXIgc2xpZGUuXG4gICAgY29uc3Qgb3ZlcmZsb3dzID0gbmV3IE1hcDxudW1iZXIsIFRleHRPdmVyZmxvdz4oKTtcblxuICAgIGZvciAoY29uc3QgaW5kZXggb2YgY29sbGVjdGVkLnBhZ2VzLmtleXMoKSkge1xuICAgICAgYXdhaXQgdGhpcy5fcmVuZGVyUGFnZShwcHR4LCBjb2xsZWN0ZWQsIGluZGV4LCBvdmVyZmxvd3MpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvdmVyZmxvd3M6IFsuLi5vdmVyZmxvd3MudmFsdWVzKCldLFxuICAgICAgb3ZlcmZsb3dOb3RlOiBQUFRYX09WRVJGTE9XX05PVEUsXG4gICAgICBzYXZlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHBwdHgud3JpdGVGaWxlKHsgZmlsZU5hbWU6IGAke3RoaXMuX3NsdWcocmVwb3J0Lm5hbWUpfS5wcHR4YCB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIE9uZSByZXBvcnQgcGFnZSdzIHNsaWRlLiBUaGUgaGVhZGVyIGFuZCBmb290ZXIgZmlyc3QsIHNvIHRoZSBwYWdlJ3Mgb3duXG4gIC8vIGNvbXBvbmVudHMgc2l0IG9uIHRvcCBvZiB0aGVtIGV4YWN0bHkgYXMgb24gdGhlIGNhbnZhcy4gRWFjaCBsYXllcidzIHRleHRcbiAgLy8gZmlsbHMgaXRzIHZhbHVlIHRva2VucyB3aXRoIHRoYXQgbGF5ZXIncyB2YWx1ZXM6IHRoZSBtYXN0ZXIncyBvciB0aGVcbiAgLy8gcGFnZSdzLlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJQYWdlKFxuICAgIHBwdHg6IGFueSxcbiAgICBjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIG92ZXJmbG93czogTWFwPG51bWJlciwgVGV4dE92ZXJmbG93PixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVwb3J0ID0gY29sbGVjdGVkLnJlcG9ydDtcbiAgICBjb25zdCBjb2xsZWN0ZWRQYWdlID0gY29sbGVjdGVkLnBhZ2VzW2luZGV4XTtcbiAgICBjb25zdCBzbGlkZSA9IHBwdHguYWRkU2xpZGUoKTtcbiAgICBjb25zdCB0b2tlbnMgPSB0aGlzLl90b2tlbnMoY29sbGVjdGVkLCBjb2xsZWN0ZWRQYWdlLnBhZ2UsIGluZGV4KTtcbiAgICBjb25zdCBwYWdlVG9rZW5zID0geyAuLi50b2tlbnMsIHZhbHVlczogY29sbGVjdGVkUGFnZS52YWx1ZXMgfTtcbiAgICBjb25zdCB0aW1lem9uZSA9IHJlc29sdmVSZXBvcnRUaW1lem9uZShyZXBvcnQpO1xuXG4gICAgaWYgKCFjb2xsZWN0ZWRQYWdlLnBhZ2UubWFzdGVySGlkZGVuKSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZW5kZXJNYXN0ZXIoc2xpZGUsIGNvbGxlY3RlZCwgdG9rZW5zLCBvdmVyZmxvd3MpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2xsZWN0ZWRQYWdlLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmIChpdGVtLmNvbXBvbmVudC50eXBlICE9PSAndGV4dCcpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ29tcG9uZW50KHBwdHgsIHNsaWRlLCBpdGVtLCB0b2tlbnMsIHRpbWV6b25lLCBjb2xsZWN0ZWQuZm9ybWF0Q29udGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKGF3YWl0IHRoaXMuX3JlbmRlclRleHQoc2xpZGUsIGl0ZW0uY29tcG9uZW50LCBwYWdlVG9rZW5zKSkge1xuICAgICAgICB0aGlzLl9yZWNvcmRPdmVyZmxvdyhvdmVyZmxvd3MsIGl0ZW0uY29tcG9uZW50LCB0b2tlbnMucGFnZU5hbWUsIHBhZ2VUb2tlbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBoZWFkZXIgYW5kIGZvb3RlciwgdGhlaXIgdmFsdWUgdG9rZW5zIGZpbGxlZCB3aXRoIHRoZSBtYXN0ZXInc1xuICAvLyB2YWx1ZXMuIFRoZXkgcmVhZCBubyBwYWdlIGZpbHRlcjogaXRzIHRva2VuIHByaW50cyB0aGUgZW0gZGFzaCB0aGVyZS5cbiAgcHJpdmF0ZSBhc3luYyBfcmVuZGVyTWFzdGVyKFxuICAgIHNsaWRlOiBhbnksXG4gICAgY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQsXG4gICAgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0LFxuICAgIG92ZXJmbG93czogTWFwPG51bWJlciwgVGV4dE92ZXJmbG93PixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWFzdGVyVG9rZW5zID0ge1xuICAgICAgLi4udG9rZW5zLFxuICAgICAgdmFsdWVzOiBjb2xsZWN0ZWQubWFzdGVyVmFsdWVzLFxuICAgICAgZmlsdGVyczogbGF5ZXJGaWx0ZXJGaWVsZHMoY29sbGVjdGVkLmZpbHRlckZpZWxkcywgY29sbGVjdGVkLnJlcG9ydC5maWx0ZXJHcm91cHMgPz8gW10sIG51bGwpLFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiAoY29sbGVjdGVkLnJlcG9ydC5tYXN0ZXI/LmNvbXBvbmVudHMgPz8gW10pLmZpbHRlcihpc0RyYXduKSkge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuX3JlbmRlclRleHQoc2xpZGUsIGNvbXBvbmVudCwgbWFzdGVyVG9rZW5zKSkge1xuICAgICAgICB0aGlzLl9yZWNvcmRPdmVyZmxvdyhvdmVyZmxvd3MsIGNvbXBvbmVudCwgSEVBREVSX0ZPT1RFUl9OQU1FLCBtYXN0ZXJUb2tlbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIExpc3RzIGEgdGV4dCBibG9jayB0aGF0IGRvZXMgbm90IGZpdCBpdHMgYm94LCB1bmRlciB0aGUgcGFnZSB0aGUgZXhwb3J0J3NcbiAgLy8gb3ZlcmZsb3cgZ2F0ZSBuYW1lcyBpdCBieS4gQSBibG9jayBsaXN0ZWQgb24gYW4gZWFybGllciBzbGlkZSAoYSBoZWFkZXIgb3JcbiAgLy8gZm9vdGVyKSBrZWVwcyB0aGF0IGVudHJ5LlxuICBwcml2YXRlIF9yZWNvcmRPdmVyZmxvdyhcbiAgICBvdmVyZmxvd3M6IE1hcDxudW1iZXIsIFRleHRPdmVyZmxvdz4sXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgcGFnZTogc3RyaW5nLFxuICAgIHRva2VuczogVGV4dFRva2VuQ29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFvdmVyZmxvd3MuaGFzKGNvbXBvbmVudC5pZCkpIHtcbiAgICAgIG92ZXJmbG93cy5zZXQoY29tcG9uZW50LmlkLCB0ZXh0T3ZlcmZsb3coY29tcG9uZW50LCBwYWdlLCB0b2tlbnMpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90aXRsZVNsaWRlKHBwdHg6IGFueSwgY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQsIHBhZ2VXOiBudW1iZXIsIHBhZ2VIOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzbGlkZSA9IHBwdHguYWRkU2xpZGUoKTtcblxuICAgIHNsaWRlLmFkZFRleHQoY29sbGVjdGVkLnJlcG9ydC5uYW1lLCB7XG4gICAgICB4OiAwLjUsIHk6IHBhZ2VIICogMC4zLCB3OiBwYWdlVyAtIDEsIGg6IDAuOCxcbiAgICAgIGZvbnRTaXplOiAzMCwgYm9sZDogdHJ1ZSwgY29sb3I6ICcxRjI5MzMnLFxuICAgIH0pO1xuXG4gICAgLy8gY292ZXJMaW5lcygpIGxlYWRzIHdpdGggdGhlIGV4cG9ydCBkYXRlLCB0aGUgb25lIGxpbmUgd3JpdHRlbiBpbiB0aGVcbiAgICAvLyByZXBvcnQncyBsb2NhbGU7IHRoZSBmaWx0ZXIgYW5kIGNvbnRleHQgbGluZXMgYXJlIGludGVyZmFjZSB0ZXh0LlxuICAgIGNvbnN0IGxpbmVzID0gY292ZXJMaW5lcyhjb2xsZWN0ZWQpO1xuICAgIGNvbnN0IHJ1bnMgPSBsaW5lcy5tYXAoKGxpbmUsIGluZGV4KSA9PiAoe1xuICAgICAgdGV4dDogbGluZSxcbiAgICAgIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKFxuICAgICAgICB7IGJyZWFrTGluZTogaW5kZXggPCBsaW5lcy5sZW5ndGggLSAxIH0sXG4gICAgICAgIGluZGV4ID09PSAwID8gY29sbGVjdGVkLmZvcm1hdENvbnRleHQubG9jYWxlIDogdW5kZWZpbmVkLFxuICAgICAgKSxcbiAgICB9KSk7XG5cbiAgICBzbGlkZS5hZGRUZXh0KHJ1bnMsIHtcbiAgICAgIHg6IDAuNSwgeTogcGFnZUggKiAwLjMgKyAwLjksIHc6IHBhZ2VXIC0gMSwgaDogTWF0aC5tYXgoMC40LCBsaW5lcy5sZW5ndGggKiAwLjI1KSxcbiAgICAgIGZvbnRTaXplOiAxMiwgY29sb3I6ICc1MjYwNkQnLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQSB0ZXh0IGJsb2NrIGFzIG5hdGl2ZSBQb3dlclBvaW50IHRleHQsIGVkaXRhYmxlIGluIHRoZSBkZWNrLCBlYWNoIHJ1blxuICAvLyBjYXJyeWluZyBpdHMgb3duIGJvbGQvaXRhbGljL2NvbG9yL3NpemUuIFRoZSBibG9jayBpcyBtZWFzdXJlZCBhcyB0aGVcbiAgLy8gY2FudmFzIGxheXMgaXQgb3V0IChSZXBvcnRUZXh0TGF5b3V0U2VydmljZSkuIEEgYmxvY2sgd2l0aG91dCBhIHRhYmxlIGlzXG4gIC8vIE9ORSB0ZXh0IGJveCAoX2FkZFRleHRCb3gpLiBBIGJsb2NrIHdpdGggdGFibGVzIGlzIGEgc3RhY2sgaW5zaWRlIGl0c1xuICAvLyBwYWRkaW5nIChfcmVuZGVyVGV4dFN0YWNrKS4gUmV0dXJucyB3aGV0aGVyIGFueXRoaW5nIHJ1bnMgcGFzdCB0aGUgYm90dG9tXG4gIC8vIG9mIHRoZSBib3ggb3Igd2FzIGxlZnQgb3V0LlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJUZXh0KHNsaWRlOiBhbnksIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBodG1sID0gY29tcG9uZW50LmNvbmZpZz8uaHRtbCA/PyAnJztcbiAgICBjb25zdCBibG9ja3MgPSB0ZXh0QmxvY2tzKGh0bWwsIHRva2Vucyk7XG4gICAgY29uc3QgbGF5b3V0ID0gYXdhaXQgdGhpcy5fdGV4dExheW91dC5tZWFzdXJlKGNvbXBvbmVudCwgdG9rZW5zKTtcbiAgICBjb25zdCB0ZXh0Q291bnQgPSBibG9ja3MuZmlsdGVyKChibG9jaykgPT4gYmxvY2sua2luZCA9PT0gJ3RleHQnKS5sZW5ndGg7XG4gICAgY29uc3QgdGFibGVDb3VudCA9IGJsb2Nrcy5sZW5ndGggLSB0ZXh0Q291bnQ7XG5cbiAgICAvLyBUaGUgbWVhc3VyZSBmaW5kcyBhIGJsb2NrJ3MgcGFydHMgb25lIGZvciBvbmUgd2l0aCB0ZXh0QmxvY2tzLCB1bmxlc3MgdGhlXG4gICAgLy8gY2FudmFzIHJlbmRlcmVkIHRoZSBodG1sIGRpZmZlcmVudGx5LiBBIGJsb2NrIHdob3NlIHBhcnRzIGl0IGRpZCBub3RcbiAgICAvLyBmaW5kIGZhbGxzIGJhY2sgdG8gdGhlIG9uZSB0ZXh0IGJveCwgaXRzIHRhYmxlcyByZWFkIGFzIGxpbmVzIG9mIHRleHQuXG4gICAgaWYgKCF0YWJsZUNvdW50IHx8IGxheW91dC50YWJsZXMubGVuZ3RoICE9PSB0YWJsZUNvdW50IHx8IGxheW91dC5zZWdtZW50cy5sZW5ndGggIT09IHRleHRDb3VudCkge1xuICAgICAgdGhpcy5fYWRkVGV4dEJveChzbGlkZSwgY29tcG9uZW50LCBibG9ja1BhcmFncmFwaHMoYmxvY2tzKSk7XG5cbiAgICAgIHJldHVybiBsYXlvdXQub3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlclRleHRTdGFjayhzbGlkZSwgY29tcG9uZW50LCBibG9ja3MsIGxheW91dCkgfHwgbGF5b3V0Lm92ZXJmbG93O1xuICB9XG5cbiAgLy8gVGhlIHdvcmRzIGFzIE9ORSB0ZXh0IGJveCBvdmVyIHRoZSB3aG9sZSBibG9jay4gSXRzIGluc2V0IGlzIHRoZSBibG9jaydzXG4gIC8vIHBhZGRpbmcsIHNvIHRoZSB3b3JkcyBsYW5kIHdoZXJlIHRoZXkgc2F0IG9uIHNjcmVlbi5cbiAgcHJpdmF0ZSBfYWRkVGV4dEJveChzbGlkZTogYW55LCBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgcGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdKTogdm9pZCB7XG4gICAgY29uc3QgcnVucyA9IHRoaXMuX3BhcmFncmFwaFJ1bnMocGFyYWdyYXBocyk7XG4gICAgaWYgKCFydW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZGRpbmcgPSBjb21wb25lbnQuY29uZmlnPy5wYWRkaW5nO1xuICAgIGNvbnN0IGluc2V0ID0gKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpID0+ICh2YWx1ZSA/PyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HKSAqIDcyO1xuXG4gICAgc2xpZGUuYWRkVGV4dChydW5zLCB7XG4gICAgICB4OiBjb21wb25lbnQueCwgeTogY29tcG9uZW50LnksIHc6IGNvbXBvbmVudC53LCBoOiBjb21wb25lbnQuaCxcbiAgICAgIHZhbGlnbjogJ3RvcCcsXG4gICAgICBmb250RmFjZTogJ0FyaWFsJyxcbiAgICAgIG1hcmdpbjogW2luc2V0KHBhZGRpbmc/LmxlZnQpLCBpbnNldChwYWRkaW5nPy5yaWdodCksIGluc2V0KHBhZGRpbmc/LmJvdHRvbSksIGluc2V0KHBhZGRpbmc/LnRvcCldLFxuICAgICAgZml0OiAnbm9uZScsXG4gICAgfSk7XG4gIH1cblxuICAvLyBBIGJsb2NrIHdpdGggdGFibGVzIGFzIGEgc3RhY2sgaW5zaWRlIGl0cyBwYWRkaW5nOiBhIHRleHQgYm94IGZvciB0aGVcbiAgLy8gd29yZHMgYmVmb3JlLCBiZXR3ZWVuIGFuZCBhZnRlciBpdHMgdGFibGVzLCBhbmQgYSBuYXRpdmUgdGFibGUgZm9yIGVhY2hcbiAgLy8gdGFibGUsIGVhY2ggYXQgdGhlIHRvcCB0aGUgY2FudmFzIGdpdmVzIGl0LiBQb3dlclBvaW50IHNwYWNlcyBsaW5lcyBhXG4gIC8vIGxpdHRsZSBkaWZmZXJlbnRseSBmcm9tIHRoZSBjYW52YXMsIHNvIHBsYWNpbmcgZXZlcnkgcGFydCBhZnJlc2gga2VlcHNcbiAgLy8gdGhhdCBkcmlmdCBmcm9tIGFkZGluZyB1cCBkb3duIHRoZSBibG9jay4gUmV0dXJucyB3aGV0aGVyIGFueSBwYXJ0IHdhc1xuICAvLyBsZWZ0IG91dC5cbiAgcHJpdmF0ZSBfcmVuZGVyVGV4dFN0YWNrKFxuICAgIHNsaWRlOiBhbnksXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgYmxvY2tzOiBUZXh0QmxvY2tbXSxcbiAgICBsYXlvdXQ6IFRleHRCbG9ja0xheW91dCxcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFkZGluZyA9IGNvbXBvbmVudC5jb25maWc/LnBhZGRpbmc7XG4gICAgY29uc3QgeCA9IGNvbXBvbmVudC54ICsgKHBhZGRpbmc/LmxlZnQgPz8gREVGQVVMVF9DT01QT05FTlRfUEFERElORyk7XG4gICAgY29uc3QgeSA9IGNvbXBvbmVudC55ICsgKHBhZGRpbmc/LnRvcCA/PyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HKTtcbiAgICBsZXQgc2VnbWVudEluZGV4ID0gMDtcbiAgICBsZXQgdGFibGVJbmRleCA9IDA7XG4gICAgbGV0IGZsYWdnZWQgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgYmxvY2sgb2YgYmxvY2tzKSB7XG4gICAgICBjb25zdCBsZWZ0T3V0ID0gYmxvY2sua2luZCA9PT0gJ3RleHQnXG4gICAgICAgID8gdGhpcy5fYWRkVGV4dFNlZ21lbnQoc2xpZGUsIGJsb2NrLnBhcmFncmFwaHMsIGxheW91dC5zZWdtZW50c1tzZWdtZW50SW5kZXgrK10sIGxheW91dCwgeCwgeSlcbiAgICAgICAgOiB0aGlzLl9hZGRUZXh0VGFibGUoc2xpZGUsIGJsb2NrLnRhYmxlLCBsYXlvdXQudGFibGVzW3RhYmxlSW5kZXgrK10sIGxheW91dCwgeCwgeSk7XG5cbiAgICAgIGZsYWdnZWQgPSBmbGFnZ2VkIHx8IGxlZnRPdXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYWdnZWQ7XG4gIH1cblxuICAvLyBUaGUgd29yZHMgYmV0d2VlbiB0d28gdGFibGVzIChvciBiZWZvcmUgdGhlIGZpcnN0LCBvciBhZnRlciB0aGUgbGFzdCkgYXNcbiAgLy8gYSB0ZXh0IGJveCBmcm9tIHRoZSB0b3Agb2YgdGhlaXIgZmlyc3QgbGluZSB0byB0aGUgYm90dG9tIG9mIHRoZWlyIGxhc3QsXG4gIC8vIGFzIHdpZGUgYXMgdGhlIGJsb2NrJ3MgY29udGVudC4gQSBzdHJldGNoIHRoYXQgZHJhd3Mgbm90aGluZyBpcyBza2lwcGVkLFxuICAvLyBhbmQgb25lIHRoYXQgc3RhcnRzIGJlbG93IHRoZSBib3ggaXMgbGVmdCBvdXQuIFJldHVybnMgd2hldGhlciBpdCB3YXMuXG4gIHByaXZhdGUgX2FkZFRleHRTZWdtZW50KFxuICAgIHNsaWRlOiBhbnksXG4gICAgcGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdLFxuICAgIHNlZ21lbnQ6IFRleHRTZWdtZW50TGF5b3V0IHwgbnVsbCxcbiAgICBsYXlvdXQ6IFRleHRCbG9ja0xheW91dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlcixcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFzZWdtZW50IHx8ICFwYXJhZ3JhcGhzLnNvbWUoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJ1bnMubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzZWdtZW50LnRvcCA+PSBsYXlvdXQuY29udGVudEhlaWdodCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2xpZGUuYWRkVGV4dCh0aGlzLl9wYXJhZ3JhcGhSdW5zKHBhcmFncmFwaHMpLCB7XG4gICAgICB4LCB5OiB5ICsgc2VnbWVudC50b3AsIHc6IGxheW91dC5jb250ZW50V2lkdGgsIGg6IE1hdGgubWF4KFRFWFRfU0VHTUVOVF9NSU5fSCwgc2VnbWVudC5ib3R0b20gLSBzZWdtZW50LnRvcCksXG4gICAgICBtYXJnaW46IDAsXG4gICAgICB2YWxpZ246ICd0b3AnLFxuICAgICAgZm9udEZhY2U6ICdBcmlhbCcsXG4gICAgICBmaXQ6ICdub25lJyxcbiAgICB9KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEEgdGFibGUgYXMgYSBuYXRpdmUsIGVkaXRhYmxlIFBvd2VyUG9pbnQgdGFibGUgd2hlcmUgdGhlIGNhbnZhcyBwdXRzIGl0LFxuICAvLyBpbiBpdHMgY29sdW1uIHdpZHRocyBhbmQgcm93IGhlaWdodHMsIGluIHRoZSBvbmUgbG9vayBldmVyeSByZW5kZXJlclxuICAvLyBkcmF3cyAoVEVYVF9UQUJMRV8qIGluIHRleHQudHMpLiBPbmx5IHRoZSByb3dzIHRoYXQgZW5kIGluc2lkZSB0aGUgYm94IGFyZVxuICAvLyBrZXB0LiBSZXR1cm5zIHdoZXRoZXIgYW55IHJvdyB3YXMgbGVmdCBvdXQuXG4gIHByaXZhdGUgX2FkZFRleHRUYWJsZShcbiAgICBzbGlkZTogYW55LFxuICAgIHRhYmxlOiBUZXh0VGFibGUsXG4gICAgdGFibGVMYXlvdXQ6IFRleHRUYWJsZUxheW91dCxcbiAgICBsYXlvdXQ6IFRleHRCbG9ja0xheW91dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlcixcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2VwdCA9IHRoaXMuX2tlcHRSb3dzKHRhYmxlTGF5b3V0LCBsYXlvdXQuY29udGVudEhlaWdodCk7XG5cbiAgICBpZiAoa2VwdCkge1xuICAgICAgc2xpZGUuYWRkVGFibGUodGhpcy5fdGFibGVSb3dzKHRhYmxlLCBrZXB0KSwge1xuICAgICAgICB4OiB4ICsgdGFibGVMYXlvdXQubGVmdCxcbiAgICAgICAgeTogeSArIHRhYmxlTGF5b3V0LnRvcCxcbiAgICAgICAgdzogdGFibGVMYXlvdXQud2lkdGgsXG4gICAgICAgIGNvbFc6IHRhYmxlTGF5b3V0LmNvbHVtbldpZHRocyxcbiAgICAgICAgcm93SDogdGFibGVMYXlvdXQucm93SGVpZ2h0cy5zbGljZSgwLCBrZXB0KSxcbiAgICAgICAgYXV0b1BhZ2U6IGZhbHNlLFxuICAgICAgICBmb250RmFjZTogJ0FyaWFsJyxcbiAgICAgICAgZm9udFNpemU6IERFRkFVTFRfVEVYVF9TSVpFLFxuICAgICAgICBjb2xvcjogREVGQVVMVF9URVhUX0NPTE9SLnJlcGxhY2UoJyMnLCAnJyksXG4gICAgICAgIGJvcmRlcjogeyB0eXBlOiAnc29saWQnLCBwdDogVEVYVF9UQUJMRV9CT1JERVJfV0lEVEgsIGNvbG9yOiBURVhUX1RBQkxFX0JPUkRFUl9DT0xPUi5yZXBsYWNlKCcjJywgJycpIH0sXG4gICAgICAgIG1hcmdpbjogVEVYVF9UQUJMRV9DRUxMX01BUkdJTixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBrZXB0IDwgdGFibGUucm93cy5sZW5ndGg7XG4gIH1cblxuICAvLyBIb3cgbWFueSBvZiBhIHRhYmxlJ3Mgcm93cywgZnJvbSB0aGUgdG9wLCBlbmQgaW5zaWRlIHRoZSBib3guXG4gIHByaXZhdGUgX2tlcHRSb3dzKHRhYmxlTGF5b3V0OiBUZXh0VGFibGVMYXlvdXQsIGNvbnRlbnRIZWlnaHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGJvdHRvbSA9IHRhYmxlTGF5b3V0LnRvcDtcbiAgICBsZXQga2VwdCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHJvd0hlaWdodCBvZiB0YWJsZUxheW91dC5yb3dIZWlnaHRzKSB7XG4gICAgICBib3R0b20gKz0gcm93SGVpZ2h0O1xuICAgICAgaWYgKGJvdHRvbSA+IGNvbnRlbnRIZWlnaHQgKyBPVkVSRkxPV19TTEFDSykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAga2VwdCsrO1xuICAgIH1cblxuICAgIHJldHVybiBrZXB0O1xuICB9XG5cbiAgLy8gVGhlIGtlcHQgcm93cyBhcyBwcHR4Z2VuanMgY2VsbHMsIGVhY2ggcm93IGluIGdyaWQgb3JkZXIuIEEgUG93ZXJQb2ludFxuICAvLyB0YWJsZSBpcyBhIGZ1bGwgZ3JpZCwgYW5kIHBwdHhnZW5qcyBjb3VudHMgaXRzIGNvbHVtbnMgb24gdGhlIGZpcnN0IHJvd1xuICAvLyBhbmQgc2xpcHMgYSBtZXJnZWQgY2VsbCdzIGNvbnRpbnVhdGlvbiBpbnRvIHRoZSByb3cgYmVsb3cgYXQgdGhhdCBjZWxsJ3NcbiAgLy8gcGxhY2UgaW4gaXRzIG93biByb3cuIFNvIGEgY2VsbCBpcyB3cml0dGVuIGluIGl0cyB0b3AgbGVmdCBzbG90IG9ubHksIGFcbiAgLy8gc2xvdCBubyBjZWxsIGhvbGRzIGdldHMgYW4gZW1wdHkgY2VsbCwgYW5kIGEgY2VsbCdzIHNwYW5zIGVuZCB3aGVyZSB0aGV5XG4gIC8vIHdvdWxkIHJlYWNoIHBhc3QgdGhlIGtlcHQgcm93cyBvciBpbnRvIGEgc2xvdCBhbm90aGVyIGNlbGwgaG9sZHNcbiAgLy8gKGNsYWltU2xvdHMpLlxuICBwcml2YXRlIF90YWJsZVJvd3ModGFibGU6IFRleHRUYWJsZSwga2VwdDogbnVtYmVyKTogYW55W11bXSB7XG4gICAgY29uc3Qgc2xvdHM6IChUZXh0VGFibGVDZWxsIHwgbnVsbClbXVtdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDoga2VwdCB9LCAoKSA9PiBBcnJheSh0YWJsZS5jb2x1bW5zKS5maWxsKG51bGwpKTtcbiAgICB0YWJsZS5yb3dzLnNsaWNlKDAsIGtlcHQpLmZvckVhY2goKHJvdykgPT4gcm93LmNlbGxzLmZvckVhY2goKGNlbGwpID0+IGNsYWltU2xvdHMoc2xvdHMsIGNlbGwpKSk7XG5cbiAgICByZXR1cm4gc2xvdHMubWFwKChyb3csIHJvd0luZGV4KSA9PiByb3cuZmxhdE1hcCgoY2VsbCwgY29sdW1uKSA9PiB7XG4gICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgcmV0dXJuIFt7IHRleHQ6ICcnIH1dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2VsbC5yb3cgPT09IHJvd0luZGV4ICYmIGNlbGwuY29sdW1uID09PSBjb2x1bW4gPyBbdGhpcy5fdGFibGVDZWxsKGNlbGwpXSA6IFtdO1xuICAgIH0pKTtcbiAgfVxuXG4gIC8vIEEgdGV4dCB0YWJsZSdzIGNlbGw6IGl0cyB3b3JkcywgaXRzIHNwYW5zLCBpdHMgZmlsbCBhbmQgaXRzIGFsaWdubWVudC4gQVxuICAvLyBoZWFkZXIgY2VsbCdzIHJ1bnMgYXJlIGFscmVhZHkgYm9sZCAocGFyc2VUYWJsZSksIHNvIGEgcnVuIGl0cyBodG1sIHNldHNcbiAgLy8gaW4gYSBub3JtYWwgd2VpZ2h0IHN0YXlzIHRoYXQgd2F5LlxuICBwcml2YXRlIF90YWJsZUNlbGwoY2VsbDogVGV4dFRhYmxlQ2VsbCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBydW5zID0gdGhpcy5fcGFyYWdyYXBoUnVucyhjZWxsLnBhcmFncmFwaHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFuIGVtcHR5IGNlbGwgc3RpbGwgbmVlZHMgaXRzIG9uZSBlbXB0eSBwYXJhZ3JhcGguXG4gICAgICB0ZXh0OiBydW5zLmxlbmd0aCA/IHJ1bnMgOiAnJyxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY29sc3BhbjogY2VsbC5jb2xTcGFuLFxuICAgICAgICByb3dzcGFuOiBjZWxsLnJvd1NwYW4sXG4gICAgICAgIGZpbGw6IGNlbGwuZmlsbCA/IHsgY29sb3I6IGNlbGwuZmlsbC5yZXBsYWNlKCcjJywgJycpIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIGFsaWduOiBjZWxsLmFsaWduLFxuICAgICAgICB2YWxpZ246IGNlbGwudmFsaWduID8/ICdtaWRkbGUnLFxuICAgICAgICBtYXJnaW46IFRFWFRfVEFCTEVfQ0VMTF9NQVJHSU4sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBQYXJhZ3JhcGhzIGFzIHRoZSBydW5zIG9mIG9uZSBuYXRpdmUgdGV4dCBib2R5LCBlYWNoIHJ1biBpbiBpdHMgb3duXG4gIC8vIHN0eWxlLCBhIGxpbmUgYnJlYWsgYWZ0ZXIgZWFjaCBwYXJhZ3JhcGggYnV0IHRoZSBsYXN0LiBBbiBlbXB0eSBwYXJhZ3JhcGhcbiAgLy8gaXMgYSBibGFuayBsaW5lLiBUZXh0IGJveGVzIGFuZCB0YWJsZSBjZWxscyB0YWtlIHRoZSBzYW1lIHJ1bnMuXG4gIHByaXZhdGUgX3BhcmFncmFwaFJ1bnMocGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdKTogYW55W10ge1xuICAgIHJldHVybiBwYXJhZ3JhcGhzLmZsYXRNYXAoKHBhcmFncmFwaCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBwYXJhZ3JhcGhzLmxlbmd0aCAtIDE7XG4gICAgICBjb25zdCBwYXJhZ3JhcGhPcHRpb25zID0ge1xuICAgICAgICBhbGlnbjogcGFyYWdyYXBoLmFsaWduLFxuICAgICAgICBidWxsZXQ6IHBhcmFncmFwaC5idWxsZXQgPT09ICdudW1iZXInXG4gICAgICAgICAgPyB7IHR5cGU6ICdudW1iZXInIH1cbiAgICAgICAgICA6IChwYXJhZ3JhcGguYnVsbGV0ID09PSAnYnVsbGV0JyA/IHRydWUgOiB1bmRlZmluZWQpLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJ1bnM6IFRleHRSdW5bXSA9IHBhcmFncmFwaC5ydW5zLmxlbmd0aCA/IHBhcmFncmFwaC5ydW5zIDogW3sgdGV4dDogJycgfV07XG5cbiAgICAgIHJldHVybiBydW5zLm1hcCgocnVuLCBydW5JbmRleCkgPT4gKHtcbiAgICAgICAgdGV4dDogcnVuLnRleHQsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuX3J1bk9wdGlvbnMocnVuLCBwYXJhZ3JhcGhPcHRpb25zLCBydW5JbmRleCA9PT0gcnVucy5sZW5ndGggLSAxICYmICFpc0xhc3QpLFxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gT25lIHJ1bidzIG9wdGlvbnM6IGl0cyBvd24gc3R5bGUgb3ZlciBpdHMgcGFyYWdyYXBoJ3MgYWxpZ25tZW50IGFuZFxuICAvLyBidWxsZXQsIGFuZCBhIGxpbmUgYnJlYWsgd2hlbiBpdCBlbmRzIGEgcGFyYWdyYXBoIHRoYXQgaXMgbm90IHRoZSBsYXN0LlxuICBwcml2YXRlIF9ydW5PcHRpb25zKFxuICAgIHJ1bjogVGV4dFJ1bixcbiAgICBwYXJhZ3JhcGhPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBicmVha0xpbmU6IGJvb2xlYW4sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGFyYWdyYXBoT3B0aW9ucyxcbiAgICAgIGJvbGQ6IHJ1bi5ib2xkLFxuICAgICAgaXRhbGljOiBydW4uaXRhbGljLFxuICAgICAgdW5kZXJsaW5lOiBydW4udW5kZXJsaW5lID8geyBzdHlsZTogJ3NuZycgfSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmlrZTogcnVuLnN0cmlrZSA/ICdzbmdTdHJpa2UnIDogdW5kZWZpbmVkLFxuICAgICAgY29sb3I6IChydW4uY29sb3IgPz8gREVGQVVMVF9URVhUX0NPTE9SKS5yZXBsYWNlKCcjJywgJycpLFxuICAgICAgaGlnaGxpZ2h0OiBydW4uaGlnaGxpZ2h0Py5yZXBsYWNlKCcjJywgJycpLFxuICAgICAgZm9udFNpemU6IHJ1bi5mb250U2l6ZSA/PyBERUZBVUxUX1RFWFRfU0laRSxcbiAgICAgIGZvbnRGYWNlOiBydW4uZm9udEZhY2UsXG4gICAgICBoeXBlcmxpbms6IHJ1bi5saW5rID8geyB1cmw6IHJ1bi5saW5rIH0gOiB1bmRlZmluZWQsXG4gICAgICBicmVha0xpbmUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFdoYXQgdGhlIHRva2VucyBvZiBhIHRleHQgYmxvY2sgYW5kIG9mIGEgdGlsZSdzIHRpdGxlIGZpbGwgd2l0aCBvbiB0aGlzXG4gIC8vIHNsaWRlOiB0aGUgcGFnZSdzIHBvc2l0aW9uIGFtb25nIHRoZSByZXBvcnQncyBwYWdlcyDigJQgdGhlIHRpdGxlIHNsaWRlIGlzXG4gIC8vIG5vdCBhIHJlcG9ydCBwYWdlIOKAlCBhbmQgdGhlIHJlcG9ydCdzIGZpbHRlcnMgd2l0aCB0aGUgcGFnZSdzIG93biBwYWdlXG4gIC8vIGZpbHRlcnMgKGxheWVyRmlsdGVyRmllbGRzKS5cbiAgcHJpdmF0ZSBfdG9rZW5zKGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0LCBwYWdlOiBSZXBvcnRQYWdlLCBpbmRleDogbnVtYmVyKTogVGV4dFRva2VuQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VOdW1iZXI6IGluZGV4ICsgMSxcbiAgICAgIHBhZ2VOYW1lOiBwYWdlLm5hbWUgfHwgYFBhZ2UgJHtpbmRleCArIDF9YCxcbiAgICAgIHJlcG9ydE5hbWU6IGNvbGxlY3RlZC5yZXBvcnQubmFtZSxcbiAgICAgIGZpbHRlcnM6IGxheWVyRmlsdGVyRmllbGRzKGNvbGxlY3RlZC5maWx0ZXJGaWVsZHMsIGNvbGxlY3RlZC5yZXBvcnQuZmlsdGVyR3JvdXBzID8/IFtdLCBwYWdlLmlkKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSB0aWxlIG9uIGl0cyBzbGlkZSwgaXRzIHRpdGxlJ3MgdG9rZW5zIGZpbGxlZCB3aXRoIHRoZSBzbGlkZSdzIHBhZ2UuXG4gIHByaXZhdGUgX3JlbmRlckNvbXBvbmVudChcbiAgICBwcHR4OiBhbnksXG4gICAgc2xpZGU6IGFueSxcbiAgICBpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsXG4gICAgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0LFxuICAgIHRpbWV6b25lOiBzdHJpbmcsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gaXRlbS5jb21wb25lbnQ7XG4gICAgLy8gR2VvbWV0cnkgaXMgaW4gaW5jaGVzIOKAlCBQb3dlclBvaW50J3MgbmF0aXZlIHVuaXQuXG4gICAgY29uc3QgeyB4LCB5LCB3LCBoIH0gPSBjb21wb25lbnQ7XG5cbiAgICBjb25zdCB0aXRsZSA9IGV4cG9ydFRpdGxlKGNvbXBvbmVudCwgdG9rZW5zLCBpdGVtLnNlYXJjaCwgaXRlbS5jcnVtYnMpO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgc2xpZGUuYWRkVGV4dCh0aXRsZSwge1xuICAgICAgICB4LCB5LCB3LCBoOiBUSVRMRV9ILFxuICAgICAgICBmb250U2l6ZTogMTAsIGJvbGQ6IHRydWUsIGNvbG9yOiAnMUYyOTMzJywgdmFsaWduOiAndG9wJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEEgY2hhcnQgb3IgbGlzdCB0aGF0IGNvbXBhcmVzIG9yIGhhcyBhIHRpbWVmcmFtZSBuYW1lcyBpdHMgZGF5cyB1bmRlclxuICAgIC8vIHRoZSB0aXRsZSwgYW5kIGl0cyBub3RlcyBzaXQgYXQgdGhlIGZvb3Qgb2YgaXRzIGJveDsgYSBLUEkgY2FyZCBkcmF3c1xuICAgIC8vIGJvdGggaXRzZWxmLiBOZWl0aGVyIHRha2VzIHJvb20gZnJvbSBhIGNvbXBvbmVudCB3aXRob3V0IHRob3NlIGtleXMuXG4gICAgY29uc3Qgc3VidGl0bGUgPSBleHBvcnRXaW5kb3dzTGluZShpdGVtLCB0aW1lem9uZSwgY29udGV4dC5sb2NhbGUpO1xuICAgIGNvbnN0IG5vdGVzID0gY29tcG9uZW50LnR5cGUgPT09ICdrcGknID8gW10gOiBleHBvcnROb3RlTGluZXMoaXRlbSwgdGltZXpvbmUsIGNvbnRleHQubG9jYWxlKTtcbiAgICBjb25zdCB0b3AgPSB5ICsgVElUTEVfSCArIChzdWJ0aXRsZSA/IFNVQlRJVExFX0ggOiAwKTtcbiAgICBjb25zdCByb29tID0gTWF0aC5tYXgoMC4zLCB5ICsgaCAtIHRvcCk7XG4gICAgY29uc3Qga2VwdCA9IG5vdGVzLnNsaWNlKDAsIE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKHJvb20gLSBNSU5fQk9EWV9IKSAvIE5PVEVfTElORV9IKSkpO1xuXG4gICAgaWYgKHN1YnRpdGxlKSB7XG4gICAgICBzbGlkZS5hZGRUZXh0KHRoaXMuX2ZpdEVzdGltYXRlKHN1YnRpdGxlLCBTTUFMTF9GT05UX1NJWkUsIHcpLCB7XG4gICAgICAgIHgsIHk6IHkgKyBUSVRMRV9ILCB3LCBoOiBTVUJUSVRMRV9ILFxuICAgICAgICBmb250U2l6ZTogU01BTExfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsIHZhbGlnbjogJ3RvcCcsIG1hcmdpbjogMCwgZml0OiAnbm9uZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5WSA9IHRvcDtcbiAgICBjb25zdCBib2R5SCA9IE1hdGgubWF4KDAuMywgcm9vbSAtIGtlcHQubGVuZ3RoICogTk9URV9MSU5FX0gpO1xuXG4gICAgaWYgKGtlcHQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBub3RlTGluZXMgPSBrZXB0Lm1hcCgobm90ZSkgPT4gdGhpcy5fZml0RXN0aW1hdGUobm90ZSwgU01BTExfRk9OVF9TSVpFLCB3KSk7XG5cbiAgICAgIHNsaWRlLmFkZFRleHQodGhpcy5fbGluZVJ1bnMobm90ZUxpbmVzLCB7IGl0YWxpYzogdHJ1ZSB9KSwge1xuICAgICAgICB4LCB5OiBib2R5WSArIGJvZHlILCB3LCBoOiBrZXB0Lmxlbmd0aCAqIE5PVEVfTElORV9ILFxuICAgICAgICBmb250U2l6ZTogU01BTExfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsIHZhbGlnbjogJ3RvcCcsIG1hcmdpbjogMCwgZml0OiAnbm9uZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWl0ZW0uZGF0YSB8fCAhaXRlbS5kYXRhLnJvd3M/Lmxlbmd0aCkge1xuICAgICAgc2xpZGUuYWRkVGV4dChlbXB0eUxhYmVsKGl0ZW0pLCB7XG4gICAgICAgIHgsIHk6IGJvZHlZLCB3LCBoOiBib2R5SCxcbiAgICAgICAgZm9udFNpemU6IDEwLCBpdGFsaWM6IHRydWUsIGNvbG9yOiBNVVRFRF9DT0xPUiwgYWxpZ246ICdjZW50ZXInLCB2YWxpZ246ICdtaWRkbGUnLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XG4gICAgICBjYXNlICdjaGFydCc6XG4gICAgICAgIHRoaXMuX3JlbmRlckNoYXJ0KHBwdHgsIHNsaWRlLCBjb21wb25lbnQsIGl0ZW0uZGF0YSwgY29udGV4dCwgeCwgYm9keVksIHcsIGJvZHlIKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgdGhpcy5fcmVuZGVyVGFibGUoc2xpZGUsIGNvbXBvbmVudCwgaXRlbS5kYXRhLCBpdGVtLmhpZGRlbkNvbHVtbnMsIHRpbWV6b25lLCBjb250ZXh0LCB4LCBib2R5WSwgdywgYm9keUgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2twaSc6XG4gICAgICAgIHRoaXMuX3JlbmRlcktwaShwcHR4LCBzbGlkZSwgaXRlbSwgdGltZXpvbmUsIGNvbnRleHQsIHgsIGJvZHlZLCB3LCBib2R5SCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIExpbmVzIG9mIG9uZSB0ZXh0IGJveCwgZWFjaCBpdHMgb3duIHBhcmFncmFwaC5cbiAgcHJpdmF0ZSBfbGluZVJ1bnMobGluZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogYW55W10ge1xuICAgIHJldHVybiBsaW5lcy5tYXAoKGxpbmUsIGluZGV4KSA9PiAoeyB0ZXh0OiBsaW5lLCBvcHRpb25zOiB7IC4uLm9wdGlvbnMsIGJyZWFrTGluZTogaW5kZXggPCBsaW5lcy5sZW5ndGggLSAxIH0gfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyQ2hhcnQoXG4gICAgcHB0eDogYW55LFxuICAgIHNsaWRlOiBhbnksXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGg6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgICBjb25zdCBjaGFydFR5cGUgPSBjb25maWcuY2hhcnRUeXBlID8/ICdiYXInO1xuXG4gICAgaWYgKGNoYXJ0VHlwZSA9PT0gJ3dhdGVyZmFsbCcpIHtcbiAgICAgIHRoaXMuX3JlbmRlcldhdGVyZmFsbChwcHR4LCBzbGlkZSwgY29tcG9uZW50LCBkYXRhLCBjb250ZXh0LCB4LCB5LCB3LCBoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dHJhY3RlZCA9IGV4dHJhY3RDaGFydFNlcmllcyhjb21wb25lbnQsIGRhdGEpO1xuXG4gICAgY29uc3QgdHlwZU1hcDogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICAgIGJhcjogcHB0eC5DaGFydFR5cGUuYmFyLFxuICAgICAgbGluZTogcHB0eC5DaGFydFR5cGUubGluZSxcbiAgICAgIGFyZWE6IHBwdHguQ2hhcnRUeXBlLmFyZWEsXG4gICAgICBwaWU6IHBwdHguQ2hhcnRUeXBlLnBpZSxcbiAgICAgIGRvbnV0OiBwcHR4LkNoYXJ0VHlwZS5kb3VnaG51dCxcbiAgICB9O1xuXG4gICAgY29uc3QgcGllID0gY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCc7XG4gICAgY29uc3QgY29sb3JCeSA9IGlzQ29sb3JCeShjb25maWcpO1xuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuX2NhdGVnb3J5TGFiZWxzKFxuICAgICAgZXh0cmFjdGVkLmNhdGVnb3JpZXMsXG4gICAgICBkYXRhLmdyYW51bGFyaXR5LFxuICAgICAgY29udGV4dC5sb2NhbGUsXG4gICAgICBjaGFydERhdGVMYWJlbChjb25maWcpLFxuICAgICk7XG4gICAgLy8gQSAxMDAlIHN0YWNrZWQgY2hhcnQncyBwcmltYXJ5IGJhcnMgYW5kIGFyZWFzIHBsb3QgdGhlIHNoYXJlcyB0aGUgc2NyZWVuXG4gICAgLy8gZHJhd3MsIHN0YWNrZWQ6IFBvd2VyUG9pbnQncyBvd24gcGVyY2VudFN0YWNrZWQgZ3JvdXBpbmcgaXMgZHJvcHBlZCBvbiBhblxuICAgIC8vIGFyZWEgY2hhcnQsIHNvIG9uZSBydWxlIGNvdmVycyBib3RoLiBUaGUgZGF0YSBzaGVldCBob2xkcyB0aGUgc2hhcmVzO1xuICAgIC8vIHRoZSBDU1Yga2VlcHMgdGhlIHJhdyB2YWx1ZXMuXG4gICAgY29uc3Qgc2hhcmVzID0gcGVyY2VudFN0YWNrZWRTaGFyZXMoZXh0cmFjdGVkLCBjb25maWcpO1xuXG4gICAgLy8gTmF0aXZlIGNoYXJ0IGRhdGE6IG9uZSBlbnRyeSBwZXIgc2VyaWVzIChwaWUgY2hhcnRzIHRha2UgZXhhY3RseSBvbmUpLlxuICAgIC8vIGNvbG9yQnkgZW1pdHMgb25lIHNlcmllcyBwZXIgY2F0ZWdvcnkgZm9yIHRoZSBvbi1zY3JlZW4gb3ZlcmxhcDsgUG93ZXJQb2ludFxuICAgIC8vIGhhcyBubyBlcXVpdmFsZW50IG92ZXJsYXAsIHNvIGNvbGxhcHNlIHRoZW0gYmFjayBpbnRvIGEgc2luZ2xlIHNlcmllcyAoZWFjaFxuICAgIC8vIGNhdGVnb3J5J3MgdmFsdWUgc2l0cyBhdCBpdHMgb3duIHNsb3QpIOKAlCBvbmUgZnVsbC13aWR0aCBiYXIgcGVyIGNhdGVnb3J5IOKAlFxuICAgIC8vIHJhdGhlciB0aGFuIGxldHRpbmcgUG93ZXJQb2ludCBjbHVzdGVyIHRoZW0gaW50byBzbGl2ZXJzLlxuICAgIGNvbnN0IG1lYXN1cmVEYXRhID0gY29sb3JCeVxuICAgICAgPyBbe1xuICAgICAgICBuYW1lOiBjb25maWcubWVhc3VyZXM/LlswXT8ubGFiZWwgPz8gY29uZmlnLmNvbG9yQnk/LmxhYmVsID8/ICcnLFxuICAgICAgICBsYWJlbHMsXG4gICAgICAgIHZhbHVlczogY29sb3JCeVZhbHVlcyhleHRyYWN0ZWQpLFxuICAgICAgfV1cbiAgICAgIDogKHBpZSA/IGV4dHJhY3RlZC5zZXJpZXMuc2xpY2UoMCwgMSkgOiBleHRyYWN0ZWQuc2VyaWVzKVxuICAgICAgICAubWFwKChzZXJpZXMsIGluZGV4KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IHNlcmllcy5uYW1lLFxuICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAvLyBBIHBpZSBrZWVwcyB0aGUgMCB0aGUgc2NyZWVuJ3MgcGllIHVzZXM7IGFuIGF4aXMgY2hhcnQga2VlcHMgaXRzXG4gICAgICAgICAgLy8gbnVsbCBzbyB0aGUgcG9pbnQgaXMgYSBnYXAuXG4gICAgICAgICAgdmFsdWVzOiBwaWUgPyBzZXJpZXMudmFsdWVzLm1hcCgodmFsdWUpID0+IHZhbHVlID8/IDApIDogKHNoYXJlcz8uZ2V0KGluZGV4KSA/PyBzZXJpZXMudmFsdWVzKSxcbiAgICAgICAgfSkpO1xuXG4gICAgLy8gVGhlIHR5cGUgZWFjaCBjaGFydERhdGEgZW50cnkgaXMgZHJhd24gYXMuIEEgcGllIGlzIG9uZSBlbnRyeSBvZiBpdHMgb3duXG4gICAgLy8gdHlwZTsgY29sb3JCeSBjb2xsYXBzZWQgaXRzIHNlcmllcyBpbnRvIG9uZSwgZHJhd24gYXMgdGhlIGxvbmUgbWVhc3VyZSdzLlxuICAgIGNvbnN0IHNlcmllc0RhdGFUeXBlczogc3RyaW5nW10gPSBwaWVcbiAgICAgID8gW2NoYXJ0VHlwZV1cbiAgICAgIDogc2VyaWVzVHlwZXMoZXh0cmFjdGVkLCBjaGFydFR5cGUpLnNsaWNlKDAsIGNvbG9yQnkgPyAxIDogdW5kZWZpbmVkKTtcbiAgICBjb25zdCBkYXRhVHlwZXMgPSBzZXJpZXNEYXRhVHlwZXMubGVuZ3RoID8gc2VyaWVzRGF0YVR5cGVzIDogW2NoYXJ0VHlwZV07XG4gICAgLy8gVGhlIHZhbHVlIGF4aXMgb2YgZWFjaCBjaGFydERhdGEgZW50cnk7IGEgcGllIGFuZCBhIGNvbG9yQnkgY2hhcnQgaGF2ZVxuICAgIC8vIG9uZSBzZXJpZXMgb24gdGhlIG9uZSBheGlzLlxuICAgIGNvbnN0IGF4aXNJbmRleGVzID0gcGllIHx8IGNvbG9yQnkgPyBbMCBhcyBWYWx1ZUF4aXNJbmRleF0gOiBzZXJpZXNBeGlzSW5kZXhlcyhleHRyYWN0ZWQsIGNvbmZpZyk7XG4gICAgY29uc3QgdHdvQXhlcyA9IGF4aXNJbmRleGVzLmluY2x1ZGVzKDEpO1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBjaGFydFJlZmVyZW5jZXMoY29uZmlnLCB0d29BeGVzKTtcbiAgICBjb25zdCBmb3JtYXRDb2RlcyA9IHBpZSA/IFtdIDogdGhpcy5fbWVhc3VyZUZvcm1hdENvZGVzKGNvbmZpZywgZXh0cmFjdGVkLCBheGlzSW5kZXhlcywgY29udGV4dCwgc2hhcmVzLCByZWZlcmVuY2VzKTtcbiAgICAvLyBBIHZhbHVlIGF4aXMgdGhhdCBwbG90cyBub3RoaW5nIGJ1dCByYW5rcyByZWFkcyB0b3AtZG93biwgcmFuayAxIGF0IHRoZVxuICAgIC8vIHRvcCwgYXMgb24gc2NyZWVuIChhIDEwMCUgc3RhY2tlZCBjaGFydCdzIHByaW1hcnkgYXhpcyBpcyBpdHMgc2hhcmVzKS5cbiAgICBjb25zdCByYW5rQXhlcyA9IHBpZSB8fCBjb2xvckJ5IHx8IHNoYXJlcyA/IFtmYWxzZSwgZmFsc2VdIDogcmFua1ZhbHVlQXhlcyhleHRyYWN0ZWQsIGRhdGEsIGNvbmZpZyk7XG4gICAgY29uc3QgcmFua1BlYWtzID0gKFswLCAxXSBhcyBjb25zdCkubWFwKChheGlzSW5kZXgpID0+IGNoYXJ0VmFsdWVQZWFrKFxuICAgICAgZXh0cmFjdGVkLnNlcmllcy5maWx0ZXIoKF8sIGluZGV4KSA9PiBheGlzSW5kZXhlc1tpbmRleF0gPT09IGF4aXNJbmRleCkubWFwKChzZXJpZXMpID0+IHNlcmllcy52YWx1ZXMpLFxuICAgICAgZmFsc2UsXG4gICAgKSk7XG5cbiAgICAvLyBSZWZlcmVuY2VzIGFuZCBzdGF0aXN0aWMgbGluZXMgZm9sbG93IHRoZSBtZWFzdXJlcyBpbiB0aGUgY2hhcnQgZGF0YSxcbiAgICAvLyBlYWNoIGEgY29uc3RhbnQgc2VyaWVzIG9mIGl0cyBvd24uXG4gICAgY29uc3QgY29uc3RhbnRzID0gcGllXG4gICAgICA/IFtdXG4gICAgICA6IFtcbiAgICAgICAgLi4udGhpcy5fcmVmZXJlbmNlTGluZXMocmVmZXJlbmNlcyksXG4gICAgICAgIC4uLnRoaXMuX3N0YXRMaW5lcyhjb25maWcsIGV4dHJhY3RlZCwgYXhpc0luZGV4ZXMsIHNoYXJlcywgY29sb3JCeSwgbWVhc3VyZURhdGFbMF0/Lm5hbWUgPz8gJycpLFxuICAgICAgXTtcbiAgICBjb25zdCBsZWdlbmRQb3NpdGlvbiA9IHRoaXMuX2xlZ2VuZFBvc2l0aW9uKGNvbmZpZywgY29sb3JCeSwgZXh0cmFjdGVkLnNlcmllcy5sZW5ndGgsIGNvbnN0YW50cy5sZW5ndGgpO1xuICAgIGNvbnN0IGNoYXJ0RGF0YSA9IFtcbiAgICAgIC4uLm1lYXN1cmVEYXRhLFxuICAgICAgLi4uY29uc3RhbnRzLm1hcCgobGluZSkgPT4gKHsgbmFtZTogbGluZS5uYW1lLCBsYWJlbHMsIHZhbHVlczogbGFiZWxzLm1hcCgoKSA9PiBsaW5lLnZhbHVlKSB9KSksXG4gICAgXTtcblxuICAgIC8vIFNlcmllcyBjb2xvcnMgYXJlIHBlciBlbnRyeSAoX2VudHJ5UGxhbiksIG5ldmVyIGNoYXJ0LWxldmVsLCB3aGVyZSBhXG4gICAgLy8gbXVsdGktdHlwZSBjaGFydCdzIGV2ZXJ5IGVudHJ5IHdvdWxkIGluaGVyaXQgdGhlbS5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgeCwgeSwgdywgaCxcbiAgICAgIHNob3dMZWdlbmQ6IGxlZ2VuZFBvc2l0aW9uICE9PSAnaGlkZGVuJyxcbiAgICAgIGxlZ2VuZFBvczogUFBUWF9MRUdFTkRfUE9TW2xlZ2VuZFBvc2l0aW9uXSxcbiAgICAgIGxlZ2VuZEZvbnRTaXplOiA5LFxuICAgICAgYmFyRGlyOiBjb25maWcub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyA/ICdiYXInIDogJ2NvbCcsXG4gICAgICBiYXJHcm91cGluZzogY29uZmlnLnN0YWNrZWQgfHwgc2hhcmVzID8gJ3N0YWNrZWQnIDogJ2NsdXN0ZXJlZCcsXG4gICAgICBob2xlU2l6ZTogY2hhcnRUeXBlID09PSAnZG9udXQnID8gNTUgOiB1bmRlZmluZWQsXG4gICAgICAuLi4odHdvQXhlc1xuICAgICAgICA/IHRoaXMuX3R3b0F4ZXNPcHRpb25zKGNvbmZpZywgZGF0YSwgZm9ybWF0Q29kZXMsIHNoYXJlcywgcmFua0F4ZXMsIHJhbmtQZWFrcylcbiAgICAgICAgOiB0aGlzLl9heGlzVGV4dE9wdGlvbnMoY29uZmlnLCBkYXRhLCBwaWUpKSxcbiAgICAgIC4uLkJMQU5LU19BU19HQVBTLFxuICAgICAgLy8gQSBwaWUgaGFzIG5vIGF4ZXMuIEEgY29tYm8ncyB0eXBlcyBpbmhlcml0IHRoZXNlIGZyb20gdGhlIGNoYXJ0IGxldmVsO1xuICAgICAgLy8gYSB0d28tYXhpcyBjaGFydCdzIHZhbHVlIGF4ZXMgY2FycnkgdGhlaXIgb3duIGZvcm1hdCBjb2Rlcy4gQSAxMDAlXG4gICAgICAvLyBzdGFja2VkIGNoYXJ0J3Mgb25lIHZhbHVlIGF4aXMgaXMgdGhlIHNoYXJlIGF4aXMuXG4gICAgICAuLi4ocGllIHx8IHR3b0F4ZXMgPyB7fSA6IChzaGFyZXMgPyB0aGlzLl9wZXJjZW50QXhpc09wdGlvbnMoc2hhcmVzKSA6IHtcbiAgICAgICAgdmFsQXhpc0xhYmVsRm9ybWF0Q29kZTogZm9ybWF0Q29kZXNbMF0sXG4gICAgICB9KSksXG4gICAgICAuLi4ocGllID8ge30gOiB0aGlzLl9jYXRlZ29yeU9yZGVyT3B0aW9ucyhjb25maWcsIGRhdGFUeXBlcykpLFxuICAgICAgLi4uKHR3b0F4ZXMgfHwgIXJhbmtBeGVzWzBdID8ge30gOiB7XG4gICAgICAgIC4uLnRoaXMuX3JhbmtBeGlzT3B0aW9ucyhjb25maWcudmFsdWVBeGlzLCByYW5rUGVha3NbMF0pLFxuICAgICAgICBjYXRBeGlzTGFiZWxQb3M6IFBQVFhfUkFOS19DQVRFR09SWV9MQUJFTF9QT1MsXG4gICAgICB9KSxcbiAgICAgIGRhdGFCb3JkZXI6IHsgcHQ6IDAsIGNvbG9yOiAnRkZGRkZGJyB9LFxuICAgIH07XG5cbiAgICBjb25zdCBwcmlvclN0eWxlcyA9IHBpZSA/IG51bGwgOiBwcmlvclNlcmllc1N0eWxlcyhjb25maWcsIGRhdGEsIGV4dHJhY3RlZCk7XG4gICAgY29uc3QgZW50cmllcyA9IFtcbiAgICAgIC4uLnRoaXMuX2VudHJ5UGxhbihkYXRhVHlwZXMsIGV4dHJhY3RlZCwgY29uZmlnLCBheGlzSW5kZXhlcywgc2hhcmVzLCBjaGFydERhdGEubGVuZ3RoLCBwcmlvclN0eWxlcylcbiAgICAgICAgLm1hcCgoZW50cnkpID0+IHRoaXMuX3dpdGhEYXRhTGFiZWxzKGVudHJ5LCBjb25maWcsIGZvcm1hdENvZGVzLCBzaGFyZXMsIGxhYmVscy5sZW5ndGgpKSxcbiAgICAgIC4uLmNvbnN0YW50cy5tYXAoKGxpbmUsIGluZGV4KSA9PiB0aGlzLl9jb25zdGFudEVudHJ5KGxpbmUsIG1lYXN1cmVEYXRhLmxlbmd0aCArIGluZGV4LCBjaGFydERhdGEubGVuZ3RoKSksXG4gICAgXTtcblxuICAgIHRoaXMuX2FkZENoYXJ0KHNsaWRlLCB0eXBlTWFwLCBlbnRyaWVzLCBjaGFydERhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gV2hlcmUgdGhlIGxlZ2VuZCBzaXRzLCBhcyBvbiBzY3JlZW4gKHJlc29sdmVMZWdlbmRQb3NpdGlvbiksIHdpdGggdHdvXG4gIC8vIGRpZmZlcmVuY2VzLiBBIHNpbmdsZS1zZXJpZXMgY29sb3JCeSBjaGFydCBjYW4ndCBjYXJyeSBhIHBlci1jYXRlZ29yeVxuICAvLyBsZWdlbmQgaW4gYSBuYXRpdmUgUG93ZXJQb2ludCBiYXIgY2hhcnQsIHNvIHRoZSBjYXRlZ29yeSBheGlzIGxhYmVsc1xuICAvLyBpZGVudGlmeSBlYWNoIGJhciBpbnN0ZWFkLiBBbmQgYSByZWZlcmVuY2Ugb3Igc3RhdGlzdGljIGxpbmUgaXMgbmFtZWQgaW5cbiAgLy8gdGhlIGxlZ2VuZCBhbG9uZSwgd2hlcmUgdGhlIHNjcmVlbiBsYWJlbHMgaXQgb24gdGhlIGxpbmUsIHNvIGEgY2hhcnQgdGhhdFxuICAvLyBkcmF3cyBvbmUgc2hvd3MgdGhlIGxlZ2VuZCB3aGVuZXZlciB0aGUgY29uZmlnIGRvZXMgbm90IHBpbiBpdC4gQSBwaW5uZWRcbiAgLy8gcG9zaXRpb24sICdoaWRkZW4nIGluY2x1ZGVkLCBzdGlsbCB3aW5zLlxuICBwcml2YXRlIF9sZWdlbmRQb3NpdGlvbihcbiAgICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICAgIGNvbG9yQnk6IGJvb2xlYW4sXG4gICAgc2VyaWVzQ291bnQ6IG51bWJlcixcbiAgICBjb25zdGFudENvdW50OiBudW1iZXIsXG4gICk6IExlZ2VuZFBvc2l0aW9uIHtcbiAgICBpZiAoY29uc3RhbnRDb3VudCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5sZWdlbmQgPz8gUFBUWF9DT05TVEFOVF9MRUdFTkQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbG9yQnkgPyAnaGlkZGVuJyA6IHJlc29sdmVMZWdlbmRQb3NpdGlvbihjb25maWcsIHNlcmllc0NvdW50KTtcbiAgfVxuXG4gIC8vIEVhY2ggcmVmZXJlbmNlIChjaGFydFJlZmVyZW5jZXMpIGFzIGNvbnN0YW50IGxpbmVzOiBhIGxpbmUgYXQgaXRzIHZhbHVlLFxuICAvLyBvciBhIGJhbmQncyBsb3dlciBlZGdlIHVuZGVyIGl0cyBsYWJlbCBhbmQgaXRzIHVwcGVyIGVkZ2UgdW5kZXIgdGhlIGxhYmVsXG4gIC8vIHdpdGggUFBUWF9CQU5EX1VQUEVSX1NVRkZJWC4gQSBjaGFydCBkcmF3cyB0aGUgb25lcyB0aGUgc2NyZWVuIGRyYXdzOiBub25lXG4gIC8vIG9uIGEgaG9yaXpvbnRhbCBjaGFydCBvciBhIHBpZS5cbiAgcHJpdmF0ZSBfcmVmZXJlbmNlTGluZXMocmVmZXJlbmNlczogRHJhd25SZWZlcmVuY2VbXSk6IFBwdHhDb25zdGFudExpbmVbXSB7XG4gICAgcmV0dXJuIHJlZmVyZW5jZXMuZmxhdE1hcCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICBjb25zdCBsaW5lID0geyBuYW1lOiByZWZlcmVuY2UubGFiZWwsIHZhbHVlOiByZWZlcmVuY2UubG93LCBjb2xvcjogUkVQT1JUX1JFRkVSRU5DRV9DT0xPUiwgc2Vjb25kYXJ5OiByZWZlcmVuY2UuYXhpc0luZGV4ID09PSAxIH07XG5cbiAgICAgIHJldHVybiByZWZlcmVuY2UuYmFuZFxuICAgICAgICA/IFtsaW5lLCB7IC4uLmxpbmUsIG5hbWU6IGAke3JlZmVyZW5jZS5sYWJlbH0ke1BQVFhfQkFORF9VUFBFUl9TVUZGSVh9YCwgdmFsdWU6IHJlZmVyZW5jZS5oaWdoIH1dXG4gICAgICAgIDogW2xpbmVdO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRWFjaCBtZWFzdXJlJ3Mgc3RhdGlzdGljIGxpbmUsIHRha2VuIG92ZXIgdGhlIHZhbHVlcyB0aGUgc2VyaWVzIHBsb3RzXG4gIC8vIChpdHMgc2hhcmVzIG9uIGEgMTAwJSBzdGFja2VkIGNoYXJ0KSwgbmFtZWQgYWZ0ZXIgdGhlIHNlcmllcyAoJ1Zpc2l0c1xuICAvLyBhdmVyYWdlJykgYW5kIGRyYXduIGluIGl0cyBjb2xvciBvbiBpdHMgYXhpcy4gQSBjb2xvckJ5IGNoYXJ0J3Mgb25lIGxpbmVcbiAgLy8gaXMgdGFrZW4gb3ZlciBpdHMgY29sbGFwc2VkIGJhcnMgYW5kIGRyYXduIGluIHRoZSByZWZlcmVuY2Ugc2xhdGUsIGFzIG9uXG4gIC8vIHNjcmVlbi4gQSBzZXJpZXMgd2l0aCBubyB2YWx1ZSBkcmF3cyBub25lLCBhbmQgYSBob3Jpem9udGFsIGNoYXJ0IG5vbmUuXG4gIHByaXZhdGUgX3N0YXRMaW5lcyhcbiAgICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICAgIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gICAgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10sXG4gICAgc2hhcmVzOiBQZXJjZW50U2hhcmVzIHwgbnVsbCxcbiAgICBjb2xvckJ5OiBib29sZWFuLFxuICAgIGNvbG9yQnlOYW1lOiBzdHJpbmcsXG4gICk6IFBwdHhDb25zdGFudExpbmVbXSB7XG4gICAgaWYgKCFkcmF3c1N0YXRMaW5lcyhjb25maWcpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgbGluZSA9IChcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIHZhbHVlczogKG51bWJlciB8IG51bGwpW10sXG4gICAgICBzdGF0OiBSZXBvcnRDaGFydE1hcmtTdGF0LFxuICAgICAgY29sb3I6IHN0cmluZyxcbiAgICAgIHNlY29uZGFyeTogYm9vbGVhbixcbiAgICApOiBQcHR4Q29uc3RhbnRMaW5lW10gPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBzZXJpZXNTdGF0KHZhbHVlcywgc3RhdCk7XG4gICAgICBjb25zdCBzdGF0TmFtZSA9IFNUQVRfTEFCRUxbc3RhdF07XG5cbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbFxuICAgICAgICA/IFtdXG4gICAgICAgIDogW3sgbmFtZTogbmFtZSA/IGAke25hbWV9ICR7c3RhdE5hbWUudG9Mb3dlckNhc2UoKX1gIDogc3RhdE5hbWUsIHZhbHVlLCBjb2xvciwgc2Vjb25kYXJ5IH1dO1xuICAgIH07XG5cbiAgICBpZiAoY29sb3JCeSkge1xuICAgICAgY29uc3Qgc3RhdCA9IG1lYXN1cmVNYXJrU3RhdChleHRyYWN0ZWQuc2VyaWVzWzBdPy5tZWFzdXJlKTtcblxuICAgICAgcmV0dXJuIHN0YXQgPyBsaW5lKGNvbG9yQnlOYW1lLCBjb2xvckJ5VmFsdWVzKGV4dHJhY3RlZCksIHN0YXQsIFJFUE9SVF9SRUZFUkVOQ0VfQ09MT1IsIGZhbHNlKSA6IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBleHRyYWN0ZWQuc2VyaWVzLmZsYXRNYXAoKHNlcmllcywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXQgPSBtZWFzdXJlTWFya1N0YXQoc2VyaWVzLm1lYXN1cmUpO1xuXG4gICAgICByZXR1cm4gc3RhdFxuICAgICAgICA/IGxpbmUoc2VyaWVzLm5hbWUsIHNoYXJlcz8uZ2V0KGluZGV4KSA/PyBzZXJpZXMudmFsdWVzLCBzdGF0LCBzZXJpZXNIZXgoc2VyaWVzLCBpbmRleCksIGF4aXNJbmRleGVzW2luZGV4XSA9PT0gMSlcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgY29uc3RhbnQgbGluZSdzIG93biBlbnRyeTogZGFzaGVkLCB3aXRob3V0IG1hcmtlcnMgb3IgZGF0YSBsYWJlbHMsIG9uXG4gIC8vIGl0cyB2YWx1ZSBheGlzLiBJdHMgY29sb3JzIHJ1biB0aGUgbGVuZ3RoIG9mIHRoZSBjaGFydCdzIGRhdGEsIGFzIGFcbiAgLy8gbWVhc3VyZSBsaW5lJ3MgZG8gKF9lbnRyeVBsYW4pLCBzbyBubyBtYXJrZXIgZXZlciB0YWtlcyBhIHJhbmRvbSBjb2xvci5cbiAgcHJpdmF0ZSBfY29uc3RhbnRFbnRyeShsaW5lOiBQcHR4Q29uc3RhbnRMaW5lLCBpbmRleDogbnVtYmVyLCB0b3RhbERhdGE6IG51bWJlcik6IFBwdHhFbnRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdsaW5lJyxcbiAgICAgIGluZGV4ZXM6IFtpbmRleF0sXG4gICAgICBzZWNvbmRhcnk6IGxpbmUuc2Vjb25kYXJ5LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjaGFydENvbG9yczogQXJyYXk8c3RyaW5nPih0b3RhbERhdGEpLmZpbGwobGluZS5jb2xvciksXG4gICAgICAgIGxpbmVEYXNoOiBQUFRYX0xJTkVfREFTSFtSZXBvcnRDaGFydExpbmVTdHlsZS5EYXNoZWRdLFxuICAgICAgICBsaW5lRGF0YVN5bWJvbDogJ25vbmUnLFxuICAgICAgICBsaW5lU2l6ZTogUFBUWF9DT05TVEFOVF9MSU5FX1NJWkUsXG4gICAgICAgIHNob3dWYWx1ZTogZmFsc2UsXG4gICAgICAgIC4uLihsaW5lLnNlY29uZGFyeSA/IHsgc2Vjb25kYXJ5VmFsQXhpczogdHJ1ZSwgc2Vjb25kYXJ5Q2F0QXhpczogdHJ1ZSB9IDoge30pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVGhlIG51bWJlciBmb3JtYXQgY29kZSBvZiB0aGUgbWVhc3VyZXMgcGxvdHRlZCBvbiBlYWNoIHZhbHVlIGF4aXMsIGJ5XG4gIC8vIGF4aXMgaW5kZXgsIG1hdGNoaW5nIHRoZSBzY3JlZW4ncyB0aWNrcyAoX3ZhbHVlQXhpc0NvZGUpOiBhIG9uZS1heGlzIGNoYXJ0XG4gIC8vIHRha2VzIHRoZSBmb3JtYXQgaXRzIHBsb3R0ZWQgc2VyaWVzJyBtZWFzdXJlcyBhZ3JlZSBvbiwgYXMgb24gc2NyZWVuLiBBIDEwMCUgc3RhY2tlZFxuICAvLyBjaGFydCdzIHNoYXJlIGF4aXMgaXMgZHJhd24gaW4gUFBUWF9QRVJDRU5UX0ZPUk1BVF9DT0RFIGluc3RlYWQ7IHRoZXNlXG4gIC8vIGNvZGVzIHN0aWxsIHdyaXRlIHRoZSByYXcgdmFsdWVzIG9mIHRoZSBzZXJpZXMgYmVzaWRlIGl0cyBzaGFyZXMuIFRoZVxuICAvLyByZWZlcmVuY2VzIG9uIGFuIGF4aXMgY291bnQgdG93YXJkIGl0cyBwZWFrLCBhcyBvbiBzY3JlZW5cbiAgLy8gKHJlZmVyZW5jZVBlYWspLCBleGNlcHQgYSAxMDAlIHN0YWNrZWQgY2hhcnQncywgd2hpY2ggYXJlIHNoYXJlcy5cbiAgcHJpdmF0ZSBfbWVhc3VyZUZvcm1hdENvZGVzKFxuICAgIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gICAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgICBheGlzSW5kZXhlczogVmFsdWVBeGlzSW5kZXhbXSxcbiAgICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICAgIHNoYXJlczogUGVyY2VudFNoYXJlcyB8IG51bGwsXG4gICAgcmVmZXJlbmNlczogRHJhd25SZWZlcmVuY2VbXSxcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlYWNoID0gKGF4aXNJbmRleDogVmFsdWVBeGlzSW5kZXgpID0+IChzaGFyZXMgJiYgYXhpc0luZGV4ID09PSAwID8gMCA6IHJlZmVyZW5jZVBlYWsocmVmZXJlbmNlcywgYXhpc0luZGV4KSk7XG5cbiAgICBpZiAoIWF4aXNJbmRleGVzLmluY2x1ZGVzKDEpKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMudmFsdWVzKTtcbiAgICAgIGNvbnN0IHNwZWMgPSBheGlzTnVtYmVyRm9ybWF0KGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy5tZWFzdXJlKSk7XG5cbiAgICAgIHJldHVybiBbdGhpcy5fdmFsdWVBeGlzQ29kZShzcGVjLCB2YWx1ZXMsICEhY29uZmlnLnN0YWNrZWQsIGNvbnRleHQsIHJlYWNoKDApKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIChbMCwgMV0gYXMgY29uc3QpLm1hcCgoYXhpc0luZGV4KSA9PiB7XG4gICAgICBjb25zdCBvbkF4aXMgPSBleHRyYWN0ZWQuc2VyaWVzLmZpbHRlcigoXywgaW5kZXgpID0+IGF4aXNJbmRleGVzW2luZGV4XSA9PT0gYXhpc0luZGV4KTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlQXhpc0NvZGUoXG4gICAgICAgIGF4aXNOdW1iZXJGb3JtYXQob25BeGlzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMubWVhc3VyZSkpLFxuICAgICAgICBvbkF4aXMubWFwKChzZXJpZXMpID0+IHNlcmllcy52YWx1ZXMpLFxuICAgICAgICAhIWNvbmZpZy5zdGFja2VkICYmICFzaGFyZXMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHJlYWNoKGF4aXNJbmRleCksXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gQSBtZWFzdXJlIGVudHJ5IHdpdGggaXRzIGRhdGEgbGFiZWxzIChjb25maWcuZGF0YUxhYmVscyksIHNldCBvbiB0aGVcbiAgLy8gZW50cnkgYWxvbmU6IG9uIGEgY2hhcnQgb2Ygc2V2ZXJhbCBlbnRyaWVzIGEgY2hhcnQtbGV2ZWwga2V5IHdvdWxkIHJlYWNoXG4gIC8vIGV2ZXJ5IG9uZSBvZiB0aGVtLiBOZXZlciBjYWxsZWQgZm9yIGEgcmVmZXJlbmNlIG9yIHN0YXRpc3RpYyBsaW5lLlxuICAvL1xuICAvLyAnYWxsJyBsYWJlbHMgZXZlcnkgcG9pbnQuIFBvd2VyUG9pbnQgY2Fubm90IGhpZGUgb3ZlcmxhcHBpbmcgbGFiZWxzLCBzb1xuICAvLyAnYXV0bycgbGFiZWxzIGV2ZXJ5IHBvaW50IHVwIHRvIFBQVFhfQVVUT19MQUJFTF9NQVhfUE9JTlRTIGNhdGVnb3JpZXNcbiAgLy8gYW5kIG5vbmUgcGFzdCB0aGF0LiBwcHR4Z2VuanMgY2Fubm90IGxhYmVsIGEgc2luZ2xlIHBvaW50LCBzbyAnbGFzdCdcbiAgLy8gbGFiZWxzIG5vbmUgKGEgZG9jdW1lbnRlZCBnYXApLCBleGNlcHQgb24gYSBjb2xvckJ5IGNoYXJ0OiB0aGVyZSBldmVyeVxuICAvLyBiYXIgaXMgaXRzIG93biBzZXJpZXMnIGxhdGVzdCBwb2ludCBvbiBzY3JlZW4sIHNvICdsYXN0JyBsYWJlbHMgZXZlcnlcbiAgLy8gYmFyIG9mIHRoZSBvbmUgY29sbGFwc2VkIHNlcmllcywgYXMgJ2FsbCcgZG9lcy5cbiAgLy9cbiAgLy8gQSBsYWJlbCBpcyB3cml0dGVuIGluIGl0cyBheGlzJ3MgZm9ybWF0IGNvZGUgKCcwJScgZm9yIGEgc2hhcmUpLiBBXG4gIC8vIHN0YWNrZWQgYmFyJ3Mgc2l0cyBpbiB0aGUgbWlkZGxlIG9mIGl0cyBzZWdtZW50IGFuZCBhIGxpbmUncyBhYm92ZSBpdHNcbiAgLy8gcG9pbnQuIEEgY2x1c3RlcmVkIGJhciBrZWVwcyBQb3dlclBvaW50J3MgZGVmYXVsdCwgb3V0c2lkZSBpdHMgZW5kLCB3aGljaFxuICAvLyBwcHR4Z2VuanMgd291bGQgZHJvcCBvbiBhIG9uZS1lbnRyeSBjaGFydCBpZiBuYW1lZDsgYW4gYXJlYSB0YWtlcyBub1xuICAvLyBwb3NpdGlvbiBhdCBhbGwsIGFuZCBwcHR4Z2VuanMgZG9lcyBub3Qgc3RyaXAgb25lIGZyb20gYSBjb21ibydzIGFyZWEuXG4gIHByaXZhdGUgX3dpdGhEYXRhTGFiZWxzKFxuICAgIGVudHJ5OiBQcHR4RW50cnksXG4gICAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgICBmb3JtYXRDb2Rlczogc3RyaW5nW10sXG4gICAgc2hhcmVzOiBQZXJjZW50U2hhcmVzIHwgbnVsbCxcbiAgICBjYXRlZ29yeUNvdW50OiBudW1iZXIsXG4gICk6IFBwdHhFbnRyeSB7XG4gICAgY29uc3QgbW9kZSA9IGNvbmZpZy5kYXRhTGFiZWxzO1xuICAgIGNvbnN0IHNob3cgPSBtb2RlID09PSBSZXBvcnRDaGFydERhdGFMYWJlbHMuQWxsXG4gICAgICB8fCAobW9kZSA9PT0gUmVwb3J0Q2hhcnREYXRhTGFiZWxzLkF1dG8gJiYgY2F0ZWdvcnlDb3VudCA8PSBQUFRYX0FVVE9fTEFCRUxfTUFYX1BPSU5UUylcbiAgICAgIHx8IChtb2RlID09PSBSZXBvcnRDaGFydERhdGFMYWJlbHMuTGFzdCAmJiBpc0NvbG9yQnkoY29uZmlnKSk7XG4gICAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcblxuICAgIGlmICghc2hvdyB8fCBjaGFydFR5cGUgPT09ICdwaWUnIHx8IGNoYXJ0VHlwZSA9PT0gJ2RvbnV0Jykge1xuICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH1cblxuICAgIGNvbnN0IHNoYXJlID0gISFzaGFyZXM/LmhhcyhlbnRyeS5pbmRleGVzWzBdKTtcbiAgICBjb25zdCBzdGFja2VkID0gZW50cnkudHlwZSA9PT0gJ2JhcicgJiYgKHNoYXJlcyA/IHNoYXJlIDogISFjb25maWcuc3RhY2tlZCk7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLl9kYXRhTGFiZWxQb3NpdGlvbihlbnRyeS50eXBlLCBzdGFja2VkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5lbnRyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgLi4uZW50cnkub3B0aW9ucyxcbiAgICAgICAgc2hvd1ZhbHVlOiB0cnVlLFxuICAgICAgICBkYXRhTGFiZWxGb3JtYXRDb2RlOiBzaGFyZSA/IFBQVFhfUEVSQ0VOVF9GT1JNQVRfQ09ERSA6IGZvcm1hdENvZGVzW2VudHJ5LnNlY29uZGFyeSA/IDEgOiAwXSxcbiAgICAgICAgZGF0YUxhYmVsRm9udFNpemU6IFBQVFhfREFUQV9MQUJFTF9GT05UX1NJWkUsXG4gICAgICAgIC4uLihwb3NpdGlvbiA/IHsgZGF0YUxhYmVsUG9zaXRpb246IHBvc2l0aW9uIH0gOiB7fSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBBIDEwMCUgc3RhY2tlZCBjaGFydCdzIHNoYXJlIGF4aXMsIGFzIG9uIHNjcmVlbjogZnJvbSAwICgtMTAwJSB3aGVuIGFcbiAgLy8gc2hhcmUgaXMgbmVnYXRpdmUpIHRvIDEwMCUsIGEgZ3JpZGxpbmUgZXZlcnkgMjUlLCBpbiB3aG9sZSBwZXJjZW50YWdlcy5cbiAgcHJpdmF0ZSBfcGVyY2VudEF4aXNPcHRpb25zKHNoYXJlczogUGVyY2VudFNoYXJlcyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsQXhpc01pblZhbDogcGVyY2VudEF4aXNNaW4oc2hhcmVzKSxcbiAgICAgIHZhbEF4aXNNYXhWYWw6IFBFUkNFTlRfQVhJU19NQVgsXG4gICAgICB2YWxBeGlzTWFqb3JVbml0OiBQRVJDRU5UX0FYSVNfSU5URVJWQUwsXG4gICAgICB2YWxBeGlzTGFiZWxGb3JtYXRDb2RlOiBQUFRYX1BFUkNFTlRfRk9STUFUX0NPREUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgdHdvLWF4aXMgY2hhcnQncyBheGVzLCBlYWNoIGluIGl0cyBvd24gb2JqZWN0OiBwcHR4Z2VuanMgYnVpbGRzIHRoZVxuICAvLyBzZWNvbmQgdmFsdWUgYW5kIGNhdGVnb3J5IGF4ZXMgZnJvbSB0aGUgY2hhcnQncyBvcHRpb25zIHdpdGggdGhlc2UgbGFpZFxuICAvLyBvdmVyIHRoZW0sIHNvIGEgdmFsdWUtYXhpcyBrZXkgbGVmdCBhdCB0aGUgY2hhcnQgbGV2ZWwgd291bGQgcmVhY2ggYm90aC5cbiAgLy8gVGhlIHByaW1hcnkgdmFsdWUgYXhpcyBpcyBvbiB0aGUgbGVmdCB3aXRoIHRoZSBjYXRlZ29yeSBheGlzIHVuZGVyIGl0O1xuICAvLyB0aGUgc2Vjb25kIGlzIG9uIHRoZSByaWdodCwgd2l0aG91dCBncmlkbGluZXMgb2YgaXRzIG93biwgYW5kIGl0c1xuICAvLyBjYXRlZ29yeSBheGlzIGlzIGhpZGRlbi4gRWFjaCB2YWx1ZSBheGlzIGlzIHRpdGxlZCBvbmx5IGJ5IGl0cyBvd24gbGFiZWxcbiAgLy8gYW5kIGZvcm1hdHRlZCBieSB0aGUgbWVhc3VyZXMgcGxvdHRlZCBhZ2FpbnN0IGl0LCBhcyBvbiBzY3JlZW4uIE9uIGEgMTAwJVxuICAvLyBzdGFja2VkIGNoYXJ0IHRoZSBwcmltYXJ5IGF4aXMgaXMgdGhlIHNoYXJlIGF4aXMsIGFuZCB0aGUgc2Vjb25kIGF4aXMnc1xuICAvLyBzZXJpZXMgYXJlIG5vdCBzdGFja2VkLlxuICBwcml2YXRlIF90d29BeGVzT3B0aW9ucyhcbiAgICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICAgIGRhdGE6IENvbXBvbmVudERhdGEsXG4gICAgZm9ybWF0Q29kZXM6IHN0cmluZ1tdLFxuICAgIHNoYXJlczogUGVyY2VudFNoYXJlcyB8IG51bGwsXG4gICAgcmFua0F4ZXM6IGJvb2xlYW5bXSxcbiAgICByYW5rUGVha3M6IG51bWJlcltdLFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgdmFsdWVBeGlzID0gKGF4aXNJbmRleDogVmFsdWVBeGlzSW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGF4aXMgPSBheGlzSW5kZXggPT09IDEgPyBjb25maWcuc2Vjb25kYXJ5QXhpcyA6IGNvbmZpZy52YWx1ZUF4aXM7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMuX3ZhbHVlQXhpc1JhbmdlT3B0aW9ucyhheGlzLCBheGlzPy5sYWJlbCk7XG4gICAgICBjb25zdCByYW5rID0gcmFua0F4ZXNbYXhpc0luZGV4XSA/IHRoaXMuX3JhbmtBeGlzT3B0aW9ucyhheGlzLCByYW5rUGVha3NbYXhpc0luZGV4XSkgOiB7fTtcblxuICAgICAgaWYgKHNoYXJlcyAmJiBheGlzSW5kZXggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHsgLi4ucmFuZ2UsIC4uLnRoaXMuX3BlcmNlbnRBeGlzT3B0aW9ucyhzaGFyZXMpIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IC4uLnJhbmdlLCB2YWxBeGlzTGFiZWxGb3JtYXRDb2RlOiBmb3JtYXRDb2Rlc1theGlzSW5kZXhdLCAuLi5yYW5rIH07XG4gICAgfTtcbiAgICAvLyBUaGUgY2F0ZWdvcnkgbGFiZWxzIHN0YXkgdW5kZXIgdGhlIHBsb3Qgd2hlbiB0aGUgcHJpbWFyeSB2YWx1ZSBheGlzIGlzXG4gICAgLy8gYSByYW5rIGF4aXMgZHJhd24gdG9wLWRvd24uXG4gICAgY29uc3QgY2F0ZWdvcnkgPSByYW5rQXhlc1swXVxuICAgICAgPyB7IC4uLnRoaXMuX2NhdGVnb3J5VGl0bGVPcHRpb25zKGNvbmZpZywgZGF0YSksIGNhdEF4aXNMYWJlbFBvczogUFBUWF9SQU5LX0NBVEVHT1JZX0xBQkVMX1BPUyB9XG4gICAgICA6IHRoaXMuX2NhdGVnb3J5VGl0bGVPcHRpb25zKGNvbmZpZywgZGF0YSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uQVhJU19GT05UX1NJWkVTLFxuICAgICAgdmFsQXhlczogW3ZhbHVlQXhpcygwKSwgeyAuLi52YWx1ZUF4aXMoMSksIHZhbEdyaWRMaW5lOiB7IHN0eWxlOiAnbm9uZScgfSB9XSxcbiAgICAgIGNhdEF4ZXM6IFtjYXRlZ29yeSwgeyBjYXRBeGlzSGlkZGVuOiB0cnVlIH1dLFxuICAgIH07XG4gIH1cblxuICAvLyBBIHJhbmsgYXhpcywgYXMgb24gc2NyZWVuOiByZXZlcnNlZCAoJ21heE1pbicpLCBzbyByYW5rIDEgaXMgYXQgdGhlIHRvcCxcbiAgLy8gc3RhcnRpbmcgYXQgcmFuayAxIHVubGVzcyB0aGUgY29uZmlnIHBpbnMgYSBib3VuZCwgYW5kIGxhYmVsZWQgaW4gd2hvbGVcbiAgLy8gcmFua3MuIEZldyByYW5rcyBhcmUgc3RlcHBlZCBvbmUgYXQgYSB0aW1lIHdoZW4gdGhlIGNvbmZpZyBwaW5zIG5vXG4gIC8vIGludGVydmFsLCBzbyBubyB0aWNrIGZhbGxzIGJldHdlZW4gdHdvIHJhbmtzLlxuICBwcml2YXRlIF9yYW5rQXhpc09wdGlvbnMoYXhpczogQ2hhcnRWYWx1ZUF4aXMgfCB1bmRlZmluZWQsIHBlYWs6IG51bWJlcik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCByYW5nZSA9IHZhbHVlQXhpc1JhbmdlKGF4aXMpO1xuICAgIGNvbnN0IHdob2xlU3RlcHMgPSByYW5nZS5pbnRlcnZhbCA9PT0gdW5kZWZpbmVkICYmIHBlYWsgPD0gUFBUWF9SQU5LX1dIT0xFX1NURVBfUEVBSztcblxuICAgIHJldHVybiB7XG4gICAgICB2YWxBeGlzT3JpZW50YXRpb246ICdtYXhNaW4nLFxuICAgICAgdmFsQXhpc01pblZhbDogcmFuZ2UubWluID8/IFJBTktfQVhJU19NSU4sXG4gICAgICB2YWxBeGlzTGFiZWxGb3JtYXRDb2RlOiBQUFRYX1JBTktfRk9STUFUX0NPREUsXG4gICAgICAuLi4od2hvbGVTdGVwcyA/IHsgdmFsQXhpc01ham9yVW5pdDogMSB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICAvLyBBIGhvcml6b250YWwgYmFyIGNoYXJ0IHJlYWRzIHRvcC1kb3duLCBmaXJzdCBjYXRlZ29yeSBhdCB0aGUgdG9wLCBhcyBpdFxuICAvLyBkb2VzIG9uIHNjcmVlbi4gUG93ZXJQb2ludCBkcmF3cyBjYXRlZ29yeSAwIG5leHQgdG8gdGhlIHZhbHVlIGF4aXMsIGF0IHRoZVxuICAvLyBib3R0b20sIHNvIHRoZSBjYXRlZ29yeSBheGlzIGlzIHJldmVyc2VkICgnbWF4TWluJyk7IHRoZSB2YWx1ZSBheGlzIHRoZW5cbiAgLy8gY3Jvc3NlcyBhdCB0aGUgbGFzdCBjYXRlZ29yeSAoJ21heCcpLCB3aGljaCBub3cgc2l0cyBhdCB0aGUgYm90dG9tLCBhbmRcbiAgLy8gJ25leHRUbycga2VlcHMgaXRzIGxhYmVscyBvbiB0aGF0IGxpbmUgKHBwdHhnZW5qcydzIGRlZmF1bHQgZm9yIGEgYmFyXG4gIC8vIGRpcmVjdGlvbiwgJ2xvdycsIHdvdWxkIGZvbGxvdyB0aGUgZmlyc3QgY2F0ZWdvcnkgdG8gdGhlIHRvcCkuIE9ubHkgYW5cbiAgLy8gYWxsLWJhciBjaGFydDogYSBsaW5lIG9yIGFyZWEgaXMgbmV2ZXIgZHJhd24gc2lkZXdheXMuXG4gIHByaXZhdGUgX2NhdGVnb3J5T3JkZXJPcHRpb25zKGNvbmZpZzogQ2hhcnRDb25maWcsIHR5cGVzOiBzdHJpbmdbXSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBpZiAoY29uZmlnLm9yaWVudGF0aW9uICE9PSAnaG9yaXpvbnRhbCcgfHwgdHlwZXMuc29tZSgodHlwZSkgPT4gdHlwZSAhPT0gJ2JhcicpKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2F0QXhpc09yaWVudGF0aW9uOiAnbWF4TWluJywgY2F0QXhpc0Nyb3NzZXNBdDogJ21heCcsIHZhbEF4aXNMYWJlbFBvczogJ25leHRUbycgfTtcbiAgfVxuXG4gIC8vIFRoZSB2YWx1ZSBheGlzJ3MgbnVtYmVyIGZvcm1hdCBjb2RlLCBtYXRjaGluZyB0aGUgc2NyZWVuJ3MgdGlja3M6IHdpdGggYW5cbiAgLy8gYXhpcyBmb3JtYXQgKGF4aXNOdW1iZXJGb3JtYXQsIG9yIGEgd2F0ZXJmYWxsJ3MgZm9ybWF0dGVkIG1lYXN1cmUpIHRoZVxuICAvLyB1bml0cyBhbmQgZGVjaW1hbHMgdGhlIHNjcmVlbiBkZWNpZGVzIGZyb20gdGhlIHNhbWUgcGVhazsgd2l0aG91dCBvbmUsXG4gIC8vIHRoZSBjb2RlIGZvciB0aGUgc2NyZWVuJ3MgcGxhaW4gdGlja3MuIFRoZSBwZWFrIGlzIHRoZSBzZXJpZXMnIG9yIHRoZVxuICAvLyBmdXJ0aGVzdCByZWZlcmVuY2Ugb24gdGhlIGF4aXMgKHJlYWNoKSwgd2hpY2hldmVyIGlzIGxhcmdlcjsgdGhlIGZvcm1hdFxuICAvLyBoZWxwZXJzIHJlYWQgaXQgb2ZmIGEgb25lLXBvaW50IHNlcmllcy5cbiAgcHJpdmF0ZSBfdmFsdWVBeGlzQ29kZShcbiAgICBzcGVjOiBOdW1iZXJGb3JtYXRTcGVjIHwgbnVsbCxcbiAgICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdW10sXG4gICAgc3RhY2tlZDogYm9vbGVhbixcbiAgICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICAgIHJlYWNoOiBudW1iZXIsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgcGVhayA9IE1hdGgubWF4KGNoYXJ0VmFsdWVQZWFrKHZhbHVlcywgc3RhY2tlZCksIHJlYWNoKTtcbiAgICBjb25zdCBwZWFrU2VyaWVzID0gW1twZWFrXV07XG5cbiAgICBpZiAoIXNwZWMpIHtcbiAgICAgIHJldHVybiBjaGFydEF4aXNGb3JtYXRDb2RlKHBlYWtTZXJpZXMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGFydCA9IHJlc29sdmVDaGFydE51bWJlckZvcm1hdChzcGVjLCBwZWFrLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBudW1iZXJGb3JtYXRDb2RlKHNwZWMsIGNvbnRleHQsIGNoYXJ0LCBwZWFrU2VyaWVzLCBmYWxzZSk7XG4gIH1cblxuICAvLyBPbmUgbmF0aXZlIGNoYXJ0IHdoZW4gdGhlIHBsYW4gaXMgYSBzaW5nbGUgZW50cnksIGl0cyBvcHRpb25zIGxhaWQgb3ZlclxuICAvLyB0aGUgY2hhcnQncy4gT3RoZXJ3aXNlIHBwdHhnZW5qcydzIG11bHRpLXR5cGUgY2hhcnQsIHdoZXJlIGV2ZXJ5IGVudHJ5J3NcbiAgLy8gb3duIG9wdGlvbnMgYXJlIGxhaWQgb3ZlciB0aGUgY2hhcnQncy5cbiAgcHJpdmF0ZSBfYWRkQ2hhcnQoXG4gICAgc2xpZGU6IGFueSxcbiAgICB0eXBlTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGVudHJpZXM6IFBwdHhFbnRyeVtdLFxuICAgIGNoYXJ0RGF0YTogdW5rbm93bltdLFxuICAgIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiB2b2lkIHtcbiAgICBpZiAoZW50cmllcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgIHNsaWRlLmFkZENoYXJ0KHR5cGVNYXBbZW50cnkudHlwZV0sIGVudHJ5LmluZGV4ZXMubWFwKChpbmRleCkgPT4gY2hhcnREYXRhW2luZGV4XSksIHsgLi4ub3B0aW9ucywgLi4uZW50cnkub3B0aW9ucyB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNsaWRlLmFkZENoYXJ0KGVudHJpZXMubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIHR5cGU6IHR5cGVNYXBbZW50cnkudHlwZV0sXG4gICAgICBkYXRhOiBlbnRyeS5pbmRleGVzLm1hcCgoaW5kZXgpID0+IGNoYXJ0RGF0YVtpbmRleF0pLFxuICAgICAgb3B0aW9uczogZW50cnkub3B0aW9ucyxcbiAgICB9KSksIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gSG93IGEgY2hhcnQncyBzZXJpZXMgKGRhdGFUeXBlcywgb25lIHBlciBjaGFydERhdGEgZW50cnkpIGFyZSBjdXQgaW50b1xuICAvLyBuYXRpdmUgY2hhcnRzLCBhbmQgdGhlIGNvbG9ycyBlYWNoIGRyYXdzIGluLlxuICAvL1xuICAvLyBBIHBpZSdzIHNsaWNlcyBhbmQgYSBjb2xvckJ5IGNoYXJ0J3MgY29sbGFwc2VkIGJhcnMgYXJlIG9uZSBzZXJpZXMgY29sb3JlZFxuICAvLyBwb2ludCBieSBwb2ludCwgc28gdGhlaXIgb25lIGVudHJ5IGtlZXBzIHRoZSB3aG9sZSBwYWxldHRlLiBFdmVyeSBvdGhlclxuICAvLyBlbnRyeSBpcyBoYW5kZWQgZXhhY3RseSBpdHMgb3duIHNlcmllcycgY29sb3JzIChzZXJpZXNIZXgpLCBzbyBhIGxvbmUgYmFyXG4gIC8vIHNlcmllcyBpcyBvbmUgY29sb3IsIGFzIG9uIHNjcmVlbiwgcmF0aGVyIHRoYW4gYSBjb2xvciBwZXIgYmFyLlxuICAvL1xuICAvLyBCYXJzIHNoYXJlIG9uZSBlbnRyeSBwZXIgdmFsdWUgYXhpcywgc2luY2Ugc2VwYXJhdGUgYmFyIGNoYXJ0cyBvbiBvbmUgYXhpc1xuICAvLyBvdmVybGFwIGluc3RlYWQgb2YgY2x1c3RlcmluZywgYW5kIGFyZWFzIGxpa2V3aXNlLCBzaW5jZSB0aGV5IHN0YWNrIG9ubHlcbiAgLy8gaW5zaWRlIG9uZSBhcmVhIGNoYXJ0LiBFYWNoIGxpbmUgZ2V0cyBhbiBlbnRyeSBvZiBpdHMgb3duLCBzbyBpdHMgbGluZVxuICAvLyBvcHRpb25zIGFyZSBpdHMgb3duLiBwcHR4Z2VuanMgY29sb3JzIGEgbGluZSBieSBpdHMgcGxhY2UgaW4gaXRzIGVudHJ5IGJ1dFxuICAvLyBmaWxscyBpdHMgbWFya2VycyBieSBpdHMgcGxhY2UgYWNyb3NzIGV2ZXJ5IGVudHJ5J3MgZGF0YSwgYW5kIHdpdGggYVxuICAvLyByYW5kb20gY29sb3IgcGFzdCB0aGUgZW5kIG9mIHRoZSBsaXN0LCBzbyBhIGxpbmUncyBsaXN0IGlzIGl0cyBvbmUgY29sb3JcbiAgLy8gdGhlIHdob2xlIGxlbmd0aCBvZiB0aGUgY2hhcnQncyBkYXRhICh0b3RhbERhdGEsIHdoaWNoIGNvdW50cyB0aGVcbiAgLy8gY29uc3RhbnQgbGluZXMgYWZ0ZXIgdGhlIG1lYXN1cmVzIHRvbykuXG4gIC8vXG4gIC8vIEFuIGVudHJ5IG9uIHRoZSBzZWNvbmQgdmFsdWUgYXhpcyAoc2VyaWVzQXhpc0luZGV4ZXMpIHBsb3RzIGFnYWluc3QgdGhlXG4gIC8vIHNlY29uZCB2YWx1ZSBhbmQgY2F0ZWdvcnkgYXhlcy5cbiAgLy9cbiAgLy8gQSBsaW5lIGVudHJ5IGRyYXdzIGl0cyBtZWFzdXJlJ3MgbGluZSBzdHlsZSAoUFBUWF9MSU5FX0RBU0gpIGFuZCBpdHNcbiAgLy8gbWFya2Vycywgb3Igbm9uZS4gT24gYSAxMDAlIHN0YWNrZWQgY2hhcnQgb25seSB0aGUgc2hhcmUgZW50cmllcyBzdGFjaztcbiAgLy8gYSBiYXIgb3IgYXJlYSBlbnRyeSBvbiB0aGUgc2Vjb25kIGF4aXMgaXMgZHJhd24gc2lkZSBieSBzaWRlLCBhcyBvblxuICAvLyBzY3JlZW4uXG4gIC8vXG4gIC8vIEEgY2hhcnQgdGhhdCBwbG90cyBhIHByaW9yIHNlcmllcyBjb2xvcnMgaXQgYXMgdGhlIHNjcmVlbiBkb2VzXG4gIC8vIChwcmlvclN0eWxlcyk6IGluIGl0cyBjdXJyZW50IHNlcmllcycgY29sb3IsIGFuZCBkYXNoZWQgd2hlbiBpdCBpcyBhIGxpbmVcbiAgLy8gd2hvc2UgbWVhc3VyZSBuYW1lcyBubyBsaW5lIHN0eWxlIG9mIGl0cyBvd24uXG4gIHByaXZhdGUgX2VudHJ5UGxhbihcbiAgICBkYXRhVHlwZXM6IHN0cmluZ1tdLFxuICAgIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gICAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgICBheGlzSW5kZXhlczogVmFsdWVBeGlzSW5kZXhbXSxcbiAgICBzaGFyZXM6IFBlcmNlbnRTaGFyZXMgfCBudWxsLFxuICAgIHRvdGFsRGF0YTogbnVtYmVyLFxuICAgIHByaW9yU3R5bGVzOiB7IGNvbG9yczogc3RyaW5nW107IHByaW9yczogYm9vbGVhbltdIH0gfCBudWxsLFxuICApOiBQcHR4RW50cnlbXSB7XG4gICAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcbiAgICBpZiAoY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcgfHwgaXNDb2xvckJ5KGNvbmZpZykpIHtcbiAgICAgIHJldHVybiBbeyB0eXBlOiBkYXRhVHlwZXNbMF0sIGluZGV4ZXM6IFswXSwgc2Vjb25kYXJ5OiBmYWxzZSwgb3B0aW9uczogeyBjaGFydENvbG9yczogUkVQT1JUX0NIQVJUX0NPTE9SUyB9IH1dO1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJpZXM6IFBwdHhFbnRyeVtdID0gW107XG4gICAgY29uc3QgcGVyQXhpcyA9IG5ldyBNYXA8c3RyaW5nLCBQcHR4RW50cnk+KCk7XG4gICAgZGF0YVR5cGVzLmZvckVhY2goKHR5cGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzZWNvbmRhcnkgPSBheGlzSW5kZXhlc1tpbmRleF0gPT09IDE7XG4gICAgICBjb25zdCBrZXkgPSBgJHt0eXBlfS0ke3NlY29uZGFyeX1gO1xuICAgICAgbGV0IGVudHJ5ID0gdHlwZSA9PT0gJ2xpbmUnID8gdW5kZWZpbmVkIDogcGVyQXhpcy5nZXQoa2V5KTtcblxuICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICBlbnRyeSA9IHsgdHlwZSwgaW5kZXhlczogW10sIHNlY29uZGFyeSwgb3B0aW9uczoge30gfTtcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgcGVyQXhpcy5zZXQoa2V5LCBlbnRyeSk7XG4gICAgICB9XG5cbiAgICAgIGVudHJ5LmluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBoZXggPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKCFleHRyYWN0ZWQuc2VyaWVzW2luZGV4XSkge1xuICAgICAgICByZXR1cm4gUkVQT1JUX0NIQVJUX0NPTE9SU1tpbmRleCAlIFJFUE9SVF9DSEFSVF9DT0xPUlMubGVuZ3RoXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByaW9yU3R5bGVzPy5jb2xvcnNbaW5kZXhdID8/IHNlcmllc0hleChleHRyYWN0ZWQuc2VyaWVzW2luZGV4XSwgaW5kZXgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoe1xuICAgICAgLi4uZW50cnksXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGNoYXJ0Q29sb3JzOiBlbnRyeS50eXBlID09PSAnbGluZSdcbiAgICAgICAgICA/IEFycmF5PHN0cmluZz4odG90YWxEYXRhKS5maWxsKGhleChlbnRyeS5pbmRleGVzWzBdKSlcbiAgICAgICAgICA6IGVudHJ5LmluZGV4ZXMubWFwKGhleCksXG4gICAgICAgIC4uLihlbnRyeS50eXBlID09PSAnbGluZSdcbiAgICAgICAgICA/IHRoaXMuX2xpbmVPcHRpb25zKGV4dHJhY3RlZC5zZXJpZXNbZW50cnkuaW5kZXhlc1swXV0/Lm1lYXN1cmUsICEhcHJpb3JTdHlsZXM/LnByaW9yc1tlbnRyeS5pbmRleGVzWzBdXSlcbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHNoYXJlcyAmJiBlbnRyeS50eXBlICE9PSAnbGluZScgJiYgIXNoYXJlcy5oYXMoZW50cnkuaW5kZXhlc1swXSlcbiAgICAgICAgICA/IHsgYmFyR3JvdXBpbmc6IGVudHJ5LnR5cGUgPT09ICdhcmVhJyA/ICdzdGFuZGFyZCcgOiAnY2x1c3RlcmVkJyB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihlbnRyeS5zZWNvbmRhcnkgPyB7IHNlY29uZGFyeVZhbEF4aXM6IHRydWUsIHNlY29uZGFyeUNhdEF4aXM6IHRydWUgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgLy8gV2hlcmUgYSBkYXRhIGxhYmVsIHNpdHM6IFBvd2VyUG9pbnQncyBkTGJsUG9zIGNvZGUsIG9yIHVuZGVmaW5lZCB0byBsZWF2ZVxuICAvLyBpdCBvdXQgKF93aXRoRGF0YUxhYmVscyBzYXlzIHdoeSkuXG4gIHByaXZhdGUgX2RhdGFMYWJlbFBvc2l0aW9uKHR5cGU6IHN0cmluZywgc3RhY2tlZEJhcjogYm9vbGVhbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGUgPT09ICdsaW5lJykge1xuICAgICAgcmV0dXJuICd0JztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2tlZEJhciA/ICdjdHInIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gQSBsaW5lIGVudHJ5J3MgZGFzaCBhbmQgbWFya2Vycy4gQSBzdHlsZSBQb3dlclBvaW50IGhhcyBubyBkYXNoIGZvciBpc1xuICAvLyBkcmF3biBzb2xpZCwgYW5kIGEgcHJpb3IncyBsaW5lIGRhc2hlZCB1bmxlc3MgaXRzIG1lYXN1cmUgbmFtZXMgYSBzdHlsZS5cbiAgcHJpdmF0ZSBfbGluZU9wdGlvbnMobWVhc3VyZTogQ2hhcnRNZWFzdXJlIHwgdW5kZWZpbmVkLCBwcmlvciA9IGZhbHNlKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHN0eWxlID0gbWVhc3VyZUxpbmVTdHlsZShtZWFzdXJlKSA/PyAocHJpb3IgPyBSZXBvcnRDaGFydExpbmVTdHlsZS5EYXNoZWQgOiB1bmRlZmluZWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmVEYXNoOiBzdHlsZSA/IFBQVFhfTElORV9EQVNIW3N0eWxlXSA6IFBQVFhfTElORV9EQVNIW1JlcG9ydENoYXJ0TGluZVN0eWxlLlNvbGlkXSxcbiAgICAgIGxpbmVEYXRhU3ltYm9sOiBtZWFzdXJlPy5tYXJrZXJzID09PSBmYWxzZSA/ICdub25lJyA6ICdjaXJjbGUnLFxuICAgICAgbGluZURhdGFTeW1ib2xTaXplOiBQUFRYX0xJTkVfU1lNQk9MX1NJWkUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgd2F0ZXJmYWxsIGlzIGEgc3RhY2tlZCBiYXIgY2hhcnQgd2hvc2UgZmlyc3Qgc2VyaWVzIGlzIGludmlzaWJsZTogaXRcbiAgLy8gbGlmdHMgZWFjaCBiYXIgdG8gd2hlcmUgaXRzIHN0ZXAgc3RhcnRzLiBUaGUgc2VyaWVzIGFyZSBjdXQgZGlmZmVyZW50bHlcbiAgLy8gZnJvbSB0aGUgc2NyZWVuJ3M7IF93YXRlcmZhbGxTZXJpZXMgc2F5cyB3aHkuXG4gIHByaXZhdGUgX3JlbmRlcldhdGVyZmFsbChcbiAgICBwcHR4OiBhbnksXG4gICAgc2xpZGU6IGFueSxcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgICBkYXRhOiBDb21wb25lbnREYXRhLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBjb21wb25lbnQuY29uZmlnIGFzIENoYXJ0Q29uZmlnO1xuICAgIGNvbnN0IHdhdGVyZmFsbCA9IGV4dHJhY3RXYXRlcmZhbGwoY29tcG9uZW50LCBkYXRhKTtcbiAgICBjb25zdCBtZWFzdXJlID0gY29uZmlnLm1lYXN1cmVzPy5bMF07XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5fY2F0ZWdvcnlMYWJlbHMoXG4gICAgICB3YXRlcmZhbGwuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLmNhdGVnb3J5KSxcbiAgICAgIGRhdGEuZ3JhbnVsYXJpdHksXG4gICAgICBjb250ZXh0LmxvY2FsZSxcbiAgICAgIGNoYXJ0RGF0ZUxhYmVsKGNvbmZpZyksXG4gICAgKTtcbiAgICBjb25zdCBzZXJpZXMgPSB0aGlzLl93YXRlcmZhbGxTZXJpZXMod2F0ZXJmYWxsLnN0ZXBzKTtcbiAgICAvLyBUaGUgcmVmZXJlbmNlcyBhcmUgY29uc3RhbnQgbGluZXMgYmVzaWRlIHRoZSBzdGFja2VkIGJhcnMsIG9uIHRoZSBvbmVcbiAgICAvLyB2YWx1ZSBheGlzLiBXaXRob3V0IGFueSB0aGUgY2hhcnQgaXMgdGhlIG9uZSBzdGFja2VkIGJhciBjaGFydCwgd2l0aG91dFxuICAgIC8vIGEgbGVnZW5kOyB3aXRoIHRoZW0gdGhlIGxlZ2VuZCBuYW1lcyB0aGVtIChfbGVnZW5kUG9zaXRpb24pLCBhcyBpdFxuICAgIC8vIGFsb25lIGNhbiwgYmVzaWRlIHRoZSBzdGVwcycga2luZHMuXG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IGNoYXJ0UmVmZXJlbmNlcyhjb25maWcsIGZhbHNlKTtcbiAgICBjb25zdCBjb25zdGFudHMgPSB0aGlzLl9yZWZlcmVuY2VMaW5lcyhyZWZlcmVuY2VzKTtcbiAgICBjb25zdCBsZWdlbmRQb3NpdGlvbjogTGVnZW5kUG9zaXRpb24gPSBjb25zdGFudHMubGVuZ3RoID8gY29uZmlnLmxlZ2VuZCA/PyBQUFRYX0NPTlNUQU5UX0xFR0VORCA6ICdoaWRkZW4nO1xuICAgIGNvbnN0IGNoYXJ0RGF0YSA9IFtcbiAgICAgIC4uLnNlcmllcy5tYXAoKGVudHJ5KSA9PiAoeyBuYW1lOiBlbnRyeS5uYW1lLCBsYWJlbHMsIHZhbHVlczogZW50cnkudmFsdWVzIH0pKSxcbiAgICAgIC4uLmNvbnN0YW50cy5tYXAoKGxpbmUpID0+ICh7IG5hbWU6IGxpbmUubmFtZSwgbGFiZWxzLCB2YWx1ZXM6IGxhYmVscy5tYXAoKCkgPT4gbGluZS52YWx1ZSkgfSkpLFxuICAgIF07XG4gICAgY29uc3QgZW50cmllczogUHB0eEVudHJ5W10gPSBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdiYXInLFxuICAgICAgICBpbmRleGVzOiBzZXJpZXMubWFwKChfLCBpbmRleCkgPT4gaW5kZXgpLFxuICAgICAgICBzZWNvbmRhcnk6IGZhbHNlLFxuICAgICAgICBvcHRpb25zOiB7IGNoYXJ0Q29sb3JzOiBzZXJpZXMubWFwKChlbnRyeSkgPT4gZW50cnkuY29sb3IpLCBiYXJHcm91cGluZzogJ3N0YWNrZWQnIH0sXG4gICAgICB9LFxuICAgICAgLi4uY29uc3RhbnRzLm1hcCgobGluZSwgaW5kZXgpID0+IHRoaXMuX2NvbnN0YW50RW50cnkobGluZSwgc2VyaWVzLmxlbmd0aCArIGluZGV4LCBjaGFydERhdGEubGVuZ3RoKSksXG4gICAgXTtcblxuICAgIHRoaXMuX2FkZENoYXJ0KHNsaWRlLCB7IGJhcjogcHB0eC5DaGFydFR5cGUuYmFyLCBsaW5lOiBwcHR4LkNoYXJ0VHlwZS5saW5lIH0sIGVudHJpZXMsIGNoYXJ0RGF0YSwge1xuICAgICAgeCwgeSwgdywgaCxcbiAgICAgIHNob3dMZWdlbmQ6IGxlZ2VuZFBvc2l0aW9uICE9PSAnaGlkZGVuJyxcbiAgICAgIGxlZ2VuZFBvczogUFBUWF9MRUdFTkRfUE9TW2xlZ2VuZFBvc2l0aW9uXSxcbiAgICAgIGxlZ2VuZEZvbnRTaXplOiA5LFxuICAgICAgYmFyRGlyOiBjb25maWcub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyA/ICdiYXInIDogJ2NvbCcsXG4gICAgICAuLi50aGlzLl9heGlzVGV4dE9wdGlvbnMoY29uZmlnLCBkYXRhLCBmYWxzZSksXG4gICAgICAuLi5CTEFOS1NfQVNfR0FQUyxcbiAgICAgIC8vIFRoZSBheGlzIHNwYW5zIHRoZSBydW5uaW5nIHRvdGFsLCBzbyBpdHMgcGVhayBpcyB0aGUgZnVydGhlc3QgYSBzdGVwXG4gICAgICAvLyBlbmRzIGZyb20gemVybyAob3IgdGhlIGZ1cnRoZXN0IHJlZmVyZW5jZSk7IHRoZSBwaWVjZXMgaXQgaXMgY3V0IGludG9cbiAgICAgIC8vIG5ldmVyIHN0YWNrIHBhc3QgdGhhdC4gVGhlIG9uZSBtZWFzdXJlJ3MgZm9ybWF0IHdyaXRlcyBpdCwgYXMgb25cbiAgICAgIC8vIHNjcmVlbi5cbiAgICAgIHZhbEF4aXNMYWJlbEZvcm1hdENvZGU6IHRoaXMuX3ZhbHVlQXhpc0NvZGUoXG4gICAgICAgIG1lYXN1cmUgJiYgaGFzTnVtYmVyRm9ybWF0KG1lYXN1cmUpID8gbWVhc3VyZSA6IG51bGwsXG4gICAgICAgIFt3YXRlcmZhbGwuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLnN0YXJ0ICsgKHN0ZXAuY2hhbmdlID8/IDApKV0sXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICByZWZlcmVuY2VQZWFrKHJlZmVyZW5jZXMsIDApLFxuICAgICAgKSxcbiAgICAgIC4uLnRoaXMuX2NhdGVnb3J5T3JkZXJPcHRpb25zKGNvbmZpZywgWydiYXInXSksXG4gICAgICAvLyBBIHJ1bm5pbmcgdG90YWwgY2FuIGdvIGJlbG93IHplcm8sIHdoZXJlIHRoZSBjYXRlZ29yeSBheGlzIGNyb3NzZXM7XG4gICAgICAvLyBpdHMgbGFiZWxzIHN0YXkgYXQgdGhlIHBsb3QncyBlZGdlIGluc3RlYWQgb2YgYWNyb3NzIHRoZSBiYXJzLlxuICAgICAgY2F0QXhpc0xhYmVsUG9zOiAnbG93JyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFBvd2VyUG9pbnQgc3RhY2tzIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgYXBhcnQsIGVhY2ggZnJvbSB6ZXJvLCBzbyBhXG4gIC8vIGJhciBjYW5ub3Qgc2ltcGx5IHNpdCBvbiB0aGUgdG90YWwgYmVmb3JlIGl0IHRoZSB3YXkgaXQgZG9lcyBvbiBzY3JlZW4uXG4gIC8vIEVhY2ggc3RlcCBpcyBjdXQgYXQgemVybyBpbnN0ZWFkOiB0aGUgaW52aXNpYmxlIGJhc2UgY2FycmllcyBpdCB0byBpdHMgZW5kXG4gIC8vIG5lYXJlciB6ZXJvLCBhbmQgaXRzIGtpbmQncyBzZXJpZXMgY2FycmllcyB0aGUgcmVzdCDigJQgb25lIHNlcmllcyBhYm92ZSB6ZXJvXG4gIC8vIGFuZCBvbmUgYmVsb3csIGJlY2F1c2UgYSBzdGVwIHRoYXQgY3Jvc3NlcyB6ZXJvIG5lZWRzIGJvdGguIEV2ZXJ5IG90aGVyXG4gIC8vIHBvaW50IGlzIGxlZnQgYmxhbms6IGEgemVybyB0aGVyZSB3b3VsZCBzdGlsbCBkcmF3IGEgemVyby1oZWlnaHQgYmFyLCB3aGljaFxuICAvLyByZW5kZXJzIGFzIGEgaGFpcmxpbmUuIEEga2luZCdzIHNlcmllcyB0aGF0IHN0YXlzIGJsYW5rIGlzIGRyb3BwZWQuXG4gIHByaXZhdGUgX3dhdGVyZmFsbFNlcmllcyhzdGVwczogV2F0ZXJmYWxsU3RlcFtdKTogUHB0eENoYXJ0U2VyaWVzW10ge1xuICAgIGNvbnN0IGJhc2U6IFBwdHhDaGFydFNlcmllcyA9IHsgbmFtZTogJycsIGNvbG9yOiAndHJhbnNwYXJlbnQnLCB2YWx1ZXM6IFtdIH07XG4gICAgY29uc3Qga2luZHMgPSBPYmplY3Qua2V5cyhXQVRFUkZBTExfU0VSSUVTX05BTUVTKSBhcyBXYXRlcmZhbGxTdGVwS2luZFtdO1xuICAgIGNvbnN0IHBpZWNlID0gKGtpbmQ6IFdhdGVyZmFsbFN0ZXBLaW5kKSA9PiAoe1xuICAgICAga2luZCwgbmFtZTogV0FURVJGQUxMX1NFUklFU19OQU1FU1traW5kXSwgY29sb3I6IFJFUE9SVF9XQVRFUkZBTExfQ09MT1JTW2tpbmRdLCB2YWx1ZXM6IFtdIGFzIChudW1iZXIgfCBudWxsKVtdLFxuICAgIH0pO1xuICAgIGNvbnN0IGFib3ZlID0ga2luZHMubWFwKHBpZWNlKTtcbiAgICBjb25zdCBiZWxvdyA9IGtpbmRzLm1hcChwaWVjZSk7XG4gICAgY29uc3QgYmxhbmtaZXJvID0gKHZhbHVlOiBudW1iZXIpID0+ICh2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZSk7XG5cbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RlcHMpIHtcbiAgICAgIGNvbnN0IGVuZCA9IHN0ZXAuc3RhcnQgKyAoc3RlcC5jaGFuZ2UgPz8gMCk7XG4gICAgICBjb25zdCBsb3cgPSBNYXRoLm1pbihzdGVwLnN0YXJ0LCBlbmQpO1xuICAgICAgY29uc3QgaGlnaCA9IE1hdGgubWF4KHN0ZXAuc3RhcnQsIGVuZCk7XG5cbiAgICAgIGJhc2UudmFsdWVzLnB1c2goYmxhbmtaZXJvKGxvdyA+IDAgPyBsb3cgOiAoaGlnaCA8IDAgPyBoaWdoIDogMCkpKTtcbiAgICAgIGFib3ZlLmZvckVhY2goKGVudHJ5KSA9PiBlbnRyeS52YWx1ZXMucHVzaChcbiAgICAgICAgZW50cnkua2luZCA9PT0gc3RlcC5raW5kID8gYmxhbmtaZXJvKE1hdGgubWF4KGhpZ2gsIDApIC0gTWF0aC5tYXgobG93LCAwKSkgOiBudWxsLFxuICAgICAgKSk7XG4gICAgICBiZWxvdy5mb3JFYWNoKChlbnRyeSkgPT4gZW50cnkudmFsdWVzLnB1c2goXG4gICAgICAgIGVudHJ5LmtpbmQgPT09IHN0ZXAua2luZCA/IGJsYW5rWmVybyhNYXRoLm1pbihsb3csIDApIC0gTWF0aC5taW4oaGlnaCwgMCkpIDogbnVsbCxcbiAgICAgICkpO1xuICAgIH1cblxuICAgIHJldHVybiBbYmFzZSwgLi4uWy4uLmFib3ZlLCAuLi5iZWxvd10uZmlsdGVyKChlbnRyeSkgPT4gZW50cnkudmFsdWVzLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gbnVsbCkpXTtcbiAgfVxuXG4gIC8vIENvbXBhY3QgcGVyaW9kIGxhYmVscyBtYXRjaCB0aGUgb24tc2NyZWVuIGF4aXMsIGluIHRoZSByZXBvcnQncyBsb2NhbGUgYW5kXG4gIC8vIHRoZSBheGlzJ3MgZGF0ZSBsYWJlbCBzdHlsZSAoYSBzaG9ydCBsYWJlbCB0YWtlcyBpdHMgeWVhciBvbmx5IHdoZW4gdGhlXG4gIC8vIGRhdGEgc3BhbnMgeWVhcnMpOyBQb3dlclBvaW50IGNhbid0IGRvIGEgc3R5bGVkIHNlY29uZCBsaW5lLCBzbyBpdCdzXG4gIC8vIGlubGluZS5cbiAgcHJpdmF0ZSBfY2F0ZWdvcnlMYWJlbHMoXG4gICAgY2F0ZWdvcmllczogc3RyaW5nW10sXG4gICAgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuICAgIGRhdGVMYWJlbDogUmVwb3J0Q2hhcnREYXRlTGFiZWwsXG4gICk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIWdyYW51bGFyaXR5KSB7XG4gICAgICByZXR1cm4gY2F0ZWdvcmllcztcbiAgICB9XG5cbiAgICBjb25zdCBtdWx0aVllYXIgPSBzcGFuc011bHRpcGxlWWVhcnMoY2F0ZWdvcmllcyk7XG5cbiAgICByZXR1cm4gY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBmb3JtYXRQZXJpb2RMYWJlbChjYXRlZ29yeSwgZ3JhbnVsYXJpdHksIG11bHRpWWVhciwgbG9jYWxlLCBkYXRlTGFiZWwpKTtcbiAgfVxuXG4gIC8vIFRoZSBheGlzIGxhYmVsIGFuZCB0aXRsZSBzZXR0aW5ncyBvZiBhIGNoYXJ0IHdpdGggb25lIHZhbHVlIGF4aXMsIGFuZCB0aGF0XG4gIC8vIGF4aXMncyByYW5nZSAodmFsdWVBeGlzKS4gQSBwaWUgaGFzIG5vIHZhbHVlIGF4aXMgdG8gdGl0bGUuIFdpdGhvdXQgYVxuICAvLyB2YWx1ZUF4aXMubGFiZWwgdGhlIHZhbHVlIGF4aXMgaXMgdGl0bGVkIGJ5IHRoZSBmaXJzdCBtZWFzdXJlJ3MgbGFiZWwsIGFzXG4gIC8vIGRlY2tzIGFsd2F5cyBoYXZlIGJlZW47IHRoZSBzY3JlZW4gc2hvd3Mgb25seSBhbiBleHBsaWNpdCB0aXRsZS4gQW5cbiAgLy8gZXhwbGljaXQgZW1wdHkgbGFiZWwgc3VwcHJlc3NlcyB0aGF0IGZhbGxiYWNrLCBhcyBpdCBkb2VzIG9uIHNjcmVlbiwgYW5kXG4gIC8vIGEgMTAwJSBzdGFja2VkIGNoYXJ0J3Mgc2hhcmUgYXhpcyBpcyBuZXZlciB0aXRsZWQgd2l0aCBvbmUgc2VyaWVzJyBuYW1lLlxuICBwcml2YXRlIF9heGlzVGV4dE9wdGlvbnMoY29uZmlnOiBDaGFydENvbmZpZywgZGF0YTogQ29tcG9uZW50RGF0YSwgcGllOiBib29sZWFuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5BWElTX0ZPTlRfU0laRVMsXG4gICAgICAuLi50aGlzLl9jYXRlZ29yeVRpdGxlT3B0aW9ucyhjb25maWcsIGRhdGEpLFxuICAgICAgLi4uKHBpZVxuICAgICAgICA/IHsgc2hvd1ZhbEF4aXNUaXRsZTogZmFsc2UgfVxuICAgICAgICA6IHRoaXMuX3ZhbHVlQXhpc1JhbmdlT3B0aW9ucyhcbiAgICAgICAgICBjb25maWcudmFsdWVBeGlzLFxuICAgICAgICAgIGNvbmZpZy52YWx1ZUF4aXM/LmxhYmVsID8/IChjb25maWcucGVyY2VudFN0YWNrZWQgPT09IHRydWUgPyB1bmRlZmluZWQgOiBjb25maWcubWVhc3VyZXM/LlswXT8ubGFiZWwpLFxuICAgICAgICApKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVGhlIGNhdGVnb3J5IGF4aXMncyB0aXRsZSwgYXMgdGhlIHNjcmVlbiBhbmQgdGhlIFBERiBuYW1lIGl0XG4gIC8vIChjYXRlZ29yeUF4aXNUaXRsZSk6IGEgZHJpbGxlZCBjaGFydCdzIGF4aXMgbmFtZXMgdGhlIGxldmVsIGl0IHdhcyByZWFkXG4gIC8vIGF0LCBlbHNlIHRoZSBhdXRob3JlZCB0aXRsZS5cbiAgcHJpdmF0ZSBfY2F0ZWdvcnlUaXRsZU9wdGlvbnMoY29uZmlnOiBDaGFydENvbmZpZywgZGF0YTogQ29tcG9uZW50RGF0YSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCB0aXRsZSA9IGNhdGVnb3J5QXhpc1RpdGxlKGNvbmZpZywgZGF0YSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2hvd0NhdEF4aXNUaXRsZTogISF0aXRsZSxcbiAgICAgIGNhdEF4aXNUaXRsZTogdGl0bGUsXG4gICAgICBjYXRBeGlzVGl0bGVGb250U2l6ZTogMTAsXG4gICAgfTtcbiAgfVxuXG4gIC8vIE9uZSB2YWx1ZSBheGlzJ3MgdGl0bGUgYW5kIHRoZSByYW5nZSB0aGUgY29uZmlnIHBpbnMgKHZhbHVlQXhpc1JhbmdlLCBhc1xuICAvLyBvbiBzY3JlZW4pLiBFdmVyeSBrZXkgaXMgc2V0LCBldmVuIHdoZW4gZW1wdHksIHNvIG9uIGEgdHdvLWF4aXMgY2hhcnRcbiAgLy8gbm90aGluZyBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgY2hhcnQncyBvcHRpb25zLlxuICBwcml2YXRlIF92YWx1ZUF4aXNSYW5nZU9wdGlvbnMoYXhpczogQ2hhcnRWYWx1ZUF4aXMgfCB1bmRlZmluZWQsIHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcmFuZ2UgPSB2YWx1ZUF4aXNSYW5nZShheGlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaG93VmFsQXhpc1RpdGxlOiAhIXRpdGxlLFxuICAgICAgdmFsQXhpc1RpdGxlOiB0aXRsZSB8fCB1bmRlZmluZWQsXG4gICAgICB2YWxBeGlzTWluVmFsOiByYW5nZS5taW4sXG4gICAgICB2YWxBeGlzTWF4VmFsOiByYW5nZS5tYXgsXG4gICAgICB2YWxBeGlzTWFqb3JVbml0OiByYW5nZS5pbnRlcnZhbCxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSBsaXN0J3MgdGFibGUsIHdpdGhvdXQgdGhlIGNvbHVtbnMgdGhlIHZpZXdlciBoaWQuIEEgdG90YWxzIHJvdyBjbG9zZXNcbiAgLy8gaXQsIGJvbGQgb24gdGhlIGJvcmRlciBncmF5LCBpbiBhIHJvdyBrZXB0IGZyZWUgZm9yIGl0LlxuICBwcml2YXRlIF9yZW5kZXJUYWJsZShcbiAgICBzbGlkZTogYW55LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIGRhdGE6IENvbXBvbmVudERhdGEsXG4gICAgaGlkZGVuQ29sdW1uczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICAgdGltZXpvbmU6IHN0cmluZyxcbiAgICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGg6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1ucyA9IGxpc3RDb2x1bW5zKGNvbXBvbmVudCwgZGF0YSwgY29udGV4dC5sb2NhbGUsIGhpZGRlbkNvbHVtbnMpO1xuICAgIGNvbnN0IHRvdGFscyA9IGxpc3RUb3RhbHNSb3coZGF0YSwgY29sdW1ucywgdGltZXpvbmUsIGNvbnRleHQpO1xuXG4gICAgY29uc3QgY2FwID0gTWF0aC5tYXgoMiwgTWF0aC5mbG9vcihoIC8gU0xJREVfUk9XX0gpIC0gMSAtICh0b3RhbHMgPyAxIDogMCkpO1xuICAgIGNvbnN0IHJvd3MgPSBkYXRhLnJvd3Muc2xpY2UoMCwgY2FwKTtcbiAgICBjb25zdCByZW1haW5pbmcgPSAoZGF0YS5wYWdpbmc/LnRvdGFsID8/IGRhdGEucm93cy5sZW5ndGgpIC0gcm93cy5sZW5ndGg7XG5cbiAgICAvLyBBIGNvbHVtbiBvZiBmb3JtYXR0ZWQgbnVtYmVycyBpcyByaWdodC1hbGlnbmVkLCBpdHMgaGVhZGluZyB0b28sIGFzIG9uXG4gICAgLy8gc2NyZWVuLlxuICAgIGNvbnN0IGFsaWduID0gKGluZGV4OiBudW1iZXIpID0+IChjb2x1bW5zW2luZGV4XT8ubnVtZXJpYyA/IHsgYWxpZ246ICdyaWdodCcgfSA6IHt9KTtcblxuICAgIGNvbnN0IGhlYWRlciA9IGxpc3RIZWFkaW5ncyhjb21wb25lbnQsIGRhdGEsIGNvbnRleHQubG9jYWxlLCBoaWRkZW5Db2x1bW5zKS5tYXAoKGhlYWRpbmcsIGluZGV4KSA9PiAoe1xuICAgICAgdGV4dDogaGVhZGluZyxcbiAgICAgIG9wdGlvbnM6IHsgYm9sZDogdHJ1ZSwgY29sb3I6ICdGRkZGRkYnLCBmaWxsOiB7IGNvbG9yOiAnNEU3OUE3JyB9LCAuLi5hbGlnbihpbmRleCkgfSxcbiAgICB9KSk7XG5cbiAgICAvLyBBIGRhdGUgb3IgZm9ybWF0dGVkLW51bWJlciBjZWxsIGlzIGEgdmFsdWUgd3JpdHRlbiBpbiB0aGUgcmVwb3J0J3NcbiAgICAvLyBsb2NhbGU7IGV2ZXJ5IG90aGVyIGNlbGwgcHJpbnRzIHRoZSBxdWVyeSdzIHRleHQgYXMgaXQgY2FtZS5cbiAgICBjb25zdCB2YWx1ZUxvY2FsZSA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2luZGV4XTtcblxuICAgICAgcmV0dXJuIGNvbHVtbi5udW1lcmljIHx8IGNvbHVtbi5mb3JtYXQgPT09IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQuRGF0ZSA/IGNvbnRleHQubG9jYWxlIDogdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICBjb25zdCBib2R5ID0gcm93cy5tYXAoKHJvdykgPT4gY29sdW1ucy5tYXAoKGNvbHVtbiwgaW5kZXgpID0+ICh7XG4gICAgICB0ZXh0OiBleHBvcnRDZWxsKHJvd1tjb2x1bW4uY29sdW1uXSwgY29sdW1uLCB0aW1lem9uZSwgY29udGV4dCwgcm93KSxcbiAgICAgIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKGFsaWduKGluZGV4KSwgdmFsdWVMb2NhbGUoaW5kZXgpKSxcbiAgICB9KSkpO1xuXG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGJvZHkucHVzaChbe1xuICAgICAgICB0ZXh0OiBtb3JlUm93c05vdGljZShyZW1haW5pbmcpLFxuICAgICAgICBvcHRpb25zOiB7IGNvbHNwYW46IGNvbHVtbnMubGVuZ3RoLCBpdGFsaWM6IHRydWUsIGNvbG9yOiBNVVRFRF9DT0xPUiB9IGFzIGFueSxcbiAgICAgIH1dKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgbGFiZWwgaXMgaW50ZXJmYWNlIHRleHQsIHNvIGl0IGtlZXBzIHRoZSBkZWZhdWx0IHByb29maW5nIGxhbmd1YWdlLlxuICAgIGlmICh0b3RhbHMpIHtcbiAgICAgIGNvbnN0IGxhYmVsQ29sdW1uID0gbGlzdFRvdGFsc0xhYmVsQ29sdW1uKGNvbHVtbnMsIGRhdGEudG90YWxzKTtcblxuICAgICAgYm9keS5wdXNoKHRvdGFscy5tYXAoKHRleHQsIGluZGV4KSA9PiAoe1xuICAgICAgICB0ZXh0LFxuICAgICAgICBvcHRpb25zOiBwcHR4UnVuT3B0aW9ucyhcbiAgICAgICAgICB7IGJvbGQ6IHRydWUsIGZpbGw6IHsgY29sb3I6ICdFNEU3RUInIH0sIC4uLmFsaWduKGluZGV4KSB9LFxuICAgICAgICAgIGNvbHVtbnNbaW5kZXhdLmNvbHVtbiA9PT0gbGFiZWxDb2x1bW4gPyB1bmRlZmluZWQgOiB2YWx1ZUxvY2FsZShpbmRleCksXG4gICAgICAgICksXG4gICAgICB9KSkpO1xuICAgIH1cblxuICAgIHNsaWRlLmFkZFRhYmxlKFtoZWFkZXIsIC4uLmJvZHldLCB7XG4gICAgICB4LCB5LCB3LFxuICAgICAgZm9udFNpemU6IDksXG4gICAgICBjb2xvcjogJzFGMjkzMycsXG4gICAgICBib3JkZXI6IHsgdHlwZTogJ3NvbGlkJywgcHQ6IDAuNSwgY29sb3I6ICdFNEU3RUInIH0sXG4gICAgICBhdXRvUGFnZTogZmFsc2UsXG4gICAgICByb3dIOiBTTElERV9ST1dfSCxcbiAgICAgIHZhbGlnbjogJ21pZGRsZScsXG4gICAgfSk7XG4gIH1cblxuICAvLyBBIEtQSSB0aWxlOiB0aGUgY2FyZCB0aGUgc2NyZWVuIGRyYXdzIChrcGktY2FyZC50cyBkZWNpZGVzIGV2ZXJ5IGxpbmUpLFxuICAvLyBhcyBuYXRpdmUgdGV4dCBib3hlcyBhbmQgc2hhcGVzIHN0YWNrZWQgYW5kIGNlbnRlcmVkIGluIHRoZSBib2R5LiBBIGNhcmRcbiAgLy8gd2l0aCBvbmx5IGl0cyB2YWx1ZSBhbmQgbGFiZWwga2VlcHMgdGhlIHRpbGUncyBsb25nLXN0YW5kaW5nIHNpbmdsZSB0ZXh0XG4gIC8vIGJveC5cbiAgcHJpdmF0ZSBfcmVuZGVyS3BpKFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICB0aW1lem9uZTogc3RyaW5nLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBpdGVtLmNvbXBvbmVudC5jb25maWcgYXMgS3BpQ29uZmlnO1xuICAgIGNvbnN0IHZpZXcgPSBrcGlDYXJkVmlldyhjb25maWcsIGl0ZW0uZGF0YSwgeyBmb3JtYXQ6IGNvbnRleHQsIHRpbWV6b25lIH0pO1xuICAgIGNvbnN0IG5vdGVzID0gZXhwb3J0Tm90ZUxpbmVzKGl0ZW0sIHRpbWV6b25lLCBjb250ZXh0LmxvY2FsZSk7XG5cbiAgICBpZiAoIWtwaUNhcmRIYXNFeHRyYXModmlldywgbm90ZXMpKSB7XG4gICAgICBzbGlkZS5hZGRUZXh0KFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHZpZXcudmFsdWUsXG4gICAgICAgICAgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoeyBmb250U2l6ZTogMjgsIGJvbGQ6IHRydWUsIGNvbG9yOiAnMUYyOTMzJywgYnJlYWtMaW5lOiB0cnVlIH0sIGNvbnRleHQubG9jYWxlKSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0ZXh0OiB2aWV3LmxhYmVsLCBvcHRpb25zOiB7IGZvbnRTaXplOiAxMCwgY29sb3I6IE1VVEVEX0NPTE9SIH0gfSxcbiAgICAgIF0sIHtcbiAgICAgICAgeCwgeSwgdywgaCxcbiAgICAgICAgYWxpZ246ICdjZW50ZXInLFxuICAgICAgICB2YWxpZ246ICdtaWRkbGUnLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBIHRpbGUgdG9vIHNob3J0IGZvciB0aGUgY2FyZCdzIGxpbmVzIHNocmlua3MgdGhlbSBhbGwgYWxpa2UuXG4gICAgY29uc3QgcGFydHMgPSBrcGlFeHBvcnRQYXJ0cyh2aWV3LCBub3RlcywgaCwgS1BJX0hFSUdIVFMpO1xuICAgIGNvbnN0IGhlaWdodHMgPSBzY2FsZWRLcGlIZWlnaHRzKEtQSV9IRUlHSFRTLCBwYXJ0cy5zY2FsZSk7XG4gICAgY29uc3QgbGluZUZvbnRTaXplID0gS1BJX0xJTkVfRk9OVF9TSVpFICogcGFydHMuc2NhbGU7XG4gICAgbGV0IHRvcCA9IHkgKyBNYXRoLm1heCgwLCAoaCAtIGtwaUV4cG9ydEhlaWdodCh2aWV3LCBwYXJ0cywgaGVpZ2h0cykpIC8gMik7XG4gICAgY29uc3QgbGluZSA9IChydW5zOiBhbnlbXSB8IHN0cmluZywgcm93SDogbnVtYmVyLCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgc2xpZGUuYWRkVGV4dChydW5zLCB7XG4gICAgICAgIHgsIHk6IHRvcCwgdywgaDogcm93SCxcbiAgICAgICAgYWxpZ246ICdjZW50ZXInLCB2YWxpZ246ICdtaWRkbGUnLCBtYXJnaW46IDAsIGZpdDogJ25vbmUnLCAuLi5vcHRpb25zLFxuICAgICAgfSk7XG4gICAgICB0b3AgKz0gcm93SDtcbiAgICB9O1xuXG4gICAgbGluZShcbiAgICAgIFt7IHRleHQ6IHZpZXcudmFsdWUsIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKHsgYm9sZDogdHJ1ZSwgY29sb3I6ICcxRjI5MzMnIH0sIGNvbnRleHQubG9jYWxlKSB9XSxcbiAgICAgIGhlaWdodHMudmFsdWUsXG4gICAgICB7IGZvbnRTaXplOiAyOCAqIHBhcnRzLnNjYWxlIH0sXG4gICAgKTtcblxuICAgIGlmICh2aWV3LmxhYmVsKSB7XG4gICAgICBsaW5lKHZpZXcubGFiZWwsIGhlaWdodHMubGFiZWwsIHsgZm9udFNpemU6IDEwICogcGFydHMuc2NhbGUsIGNvbG9yOiBNVVRFRF9DT0xPUiB9KTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMuZGVsdGEgJiYgdmlldy5kZWx0YSkge1xuICAgICAgdGhpcy5fa3BpRGVsdGEocHB0eCwgc2xpZGUsIHZpZXcuZGVsdGEsIGNvbnRleHQsIHgsIHRvcCwgdywgcGFydHMuc2NhbGUpO1xuICAgICAgdG9wICs9IGhlaWdodHMuZGVsdGE7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLndpbmRvdykge1xuICAgICAgY29uc3QgZGF5cyA9IHRoaXMuX2ZpdEVzdGltYXRlKHZpZXcud2luZG93LCBsaW5lRm9udFNpemUsIHcpO1xuXG4gICAgICBsaW5lKFt7IHRleHQ6IGRheXMsIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKHt9LCBjb250ZXh0LmxvY2FsZSkgfV0sIGhlaWdodHMud2luZG93LCB7XG4gICAgICAgIGZvbnRTaXplOiBsaW5lRm9udFNpemUsIGNvbG9yOiBNVVRFRF9DT0xPUixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy50YXJnZXQgJiYgdmlldy50YXJnZXQpIHtcbiAgICAgIHRoaXMuX2twaVRhcmdldChwcHR4LCBzbGlkZSwgdmlldy50YXJnZXQsIHgsIHRvcCwgdyk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy50YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLnNwYXJrbGluZSAmJiB2aWV3LnNwYXJrbGluZSkge1xuICAgICAgdGhpcy5fa3BpU3BhcmtsaW5lKHBwdHgsIHNsaWRlLCBpdGVtLCB2aWV3LnNwYXJrbGluZS52YWx1ZXMsIHZpZXcubGFiZWwsIHgsIHRvcCwgdyk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy5zcGFya2xpbmU7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLm5vdGVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZml0dGVkID0gcGFydHMubm90ZXMubWFwKChub3RlKSA9PiB0aGlzLl9maXRFc3RpbWF0ZShub3RlLCBTTUFMTF9GT05UX1NJWkUsIHcpKTtcblxuICAgICAgbGluZSh0aGlzLl9saW5lUnVucyhmaXR0ZWQsIHsgaXRhbGljOiB0cnVlIH0pLCBwYXJ0cy5ub3Rlcy5sZW5ndGggKiBoZWlnaHRzLm5vdGUsIHtcbiAgICAgICAgZm9udFNpemU6IFNNQUxMX0ZPTlRfU0laRSwgY29sb3I6IE1VVEVEX0NPTE9SLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGRlbHRhIHJvdzogdGhlIGNoYW5nZSBpbiB0aGUgY29sb3Igb2Ygd2hhdCBpdCBtZWFucyBhbmQgd2hhdCBpdCBpc1xuICAvLyBjb21wYXJlZCB3aXRoIGluIGdyZXksIGFzIG9uZSBjZW50ZXJlZCB0ZXh0IGJveCwgd2l0aCBhIHRyaWFuZ2xlIGJlc2lkZVxuICAvLyBpdCBwb2ludGluZyB0aGUgd2F5IHRoZSB2YWx1ZSBtb3ZlZCAobm9uZSB3aGVuIHRoZSBzaG93biBjaGFuZ2Ugcm91bmRzIHRvXG4gIC8vIHplcm8pLiBQb3dlclBvaW50IGxheXMgdGhlIHRleHQgb3V0IGl0c2VsZiwgc28gdGhlIHRyaWFuZ2xlIHNpdHMgd2hlcmVcbiAgLy8gdGhlIHRleHQncyBlc3RpbWF0ZWQgd2lkdGggcHV0cyBpdHMgc3RhcnQuXG4gIHByaXZhdGUgX2twaURlbHRhKFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGRlbHRhOiBLcGlDYXJkRGVsdGEsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3OiBudW1iZXIsXG4gICAgc2NhbGUgPSAxLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb2xvciA9IFJFUE9SVF9LUElfQ0hBTkdFX0NPTE9SU1tkZWx0YS50b25lXTtcbiAgICBjb25zdCBmb250U2l6ZSA9IEtQSV9MSU5FX0ZPTlRfU0laRSAqIHNjYWxlO1xuICAgIGNvbnN0IHJvd0ggPSBLUElfSEVJR0hUUy5kZWx0YSAqIHNjYWxlO1xuICAgIGNvbnN0IHNpZGUgPSBLUElfQVJST1cgKiBzY2FsZTtcbiAgICBjb25zdCBhcnJvdyA9IGRlbHRhLnRyZW5kID09PSBSZXBvcnRLcGlUcmVuZC5GbGF0ID8gMCA6IHNpZGUgKyBLUElfQVJST1dfR0FQICogc2NhbGU7XG4gICAgY29uc3QgY2hhbmdlVyA9IHRoaXMuX2VzdGltYXRlZFdpZHRoKGRlbHRhLnRleHQsIGZvbnRTaXplKTtcbiAgICBjb25zdCBjb21wYXJlZCA9IGRlbHRhLmNvbXBhcmVkXG4gICAgICA/IHRoaXMuX2ZpdEVzdGltYXRlKGAgJHtkZWx0YS5jb21wYXJlZH1gLCBmb250U2l6ZSwgdyAtIGFycm93IC0gY2hhbmdlVylcbiAgICAgIDogJyc7XG4gICAgY29uc3QgdGV4dFcgPSBNYXRoLm1pbih3IC0gYXJyb3csIGNoYW5nZVcgKyB0aGlzLl9lc3RpbWF0ZWRXaWR0aChjb21wYXJlZCwgZm9udFNpemUpKTtcbiAgICBjb25zdCBydW5zID0gW1xuICAgICAgeyB0ZXh0OiBkZWx0YS50ZXh0LCBvcHRpb25zOiBwcHR4UnVuT3B0aW9ucyh7IGJvbGQ6IHRydWUsIGNvbG9yIH0sIGNvbnRleHQubG9jYWxlKSB9LFxuICAgICAgLi4uKGNvbXBhcmVkID8gW3sgdGV4dDogY29tcGFyZWQsIG9wdGlvbnM6IHsgY29sb3I6IE1VVEVEX0NPTE9SIH0gfV0gOiBbXSksXG4gICAgXTtcblxuICAgIHNsaWRlLmFkZFRleHQocnVucywge1xuICAgICAgeDogeCArIGFycm93LCB5OiB0b3AsIHc6IE1hdGgubWF4KDAuMSwgdyAtIGFycm93KSwgaDogcm93SCxcbiAgICAgIGZvbnRTaXplLCBhbGlnbjogJ2NlbnRlcicsIHZhbGlnbjogJ21pZGRsZScsIG1hcmdpbjogMCwgZml0OiAnbm9uZScsXG4gICAgfSk7XG5cbiAgICBpZiAoYXJyb3cpIHtcbiAgICAgIHNsaWRlLmFkZFNoYXBlKHBwdHguU2hhcGVUeXBlLnRyaWFuZ2xlLCB7XG4gICAgICAgIHg6IE1hdGgubWF4KHgsIHggKyAodyAtIGFycm93IC0gdGV4dFcpIC8gMiksXG4gICAgICAgIHk6IHRvcCArIChyb3dIIC0gc2lkZSkgLyAyLFxuICAgICAgICB3OiBzaWRlLFxuICAgICAgICBoOiBzaWRlLFxuICAgICAgICBmaWxsOiB7IGNvbG9yIH0sXG4gICAgICAgIGxpbmU6IHsgY29sb3IsIHdpZHRoOiAwIH0sXG4gICAgICAgIGZsaXBWOiBkZWx0YS50cmVuZCA9PT0gUmVwb3J0S3BpVHJlbmQuRG93bixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFib3V0IGhvdyB3aWRlIGEgbGluZSBvZiB0ZXh0IHJ1bnMsIGluY2hlczogUG93ZXJQb2ludCBsYXlzIGl0IG91dCwgc29cbiAgLy8gb25seSBhbiBlc3RpbWF0ZSBmcm9tIGl0cyBhdmVyYWdlIGNoYXJhY3RlciB3aWR0aCBpcyB0byBoYW5kLlxuICBwcml2YXRlIF9lc3RpbWF0ZWRXaWR0aCh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCAqIGZvbnRTaXplICogUFBUWF9DSEFSX1dJRFRIIC8gNzI7XG4gIH1cblxuICAvLyBUaGUgdGV4dCBjdXQgd2l0aCBhbiBlbGxpcHNpcyB0byBhYm91dCB0aGUgd2lkdGgsIHNvIGEgbGluZSB0aGF0IHdvdWxkXG4gIC8vIHdyYXAgcGFzdCBpdHMgcm93IHN0YXlzIG9uZSBsaW5lLlxuICBwcml2YXRlIF9maXRFc3RpbWF0ZSh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplOiBudW1iZXIsIHdpZHRoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9lc3RpbWF0ZWRXaWR0aCh0ZXh0LCBmb250U2l6ZSkgPD0gd2lkdGgpIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cblxuICAgIGNvbnN0IGNoYXJzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih3aWR0aCAqIDcyIC8gKGZvbnRTaXplICogUFBUWF9DSEFSX1dJRFRIKSkgLSAxKTtcblxuICAgIHJldHVybiBjaGFycyA/IGAke3RleHQuc2xpY2UoMCwgY2hhcnMpLnRyaW1FbmQoKX3igKZgIDogJyc7XG4gIH1cblxuICAvLyBUaGUgdGFyZ2V0IGxpbmUgKCdHb2FsOiAkMSwwMDAgwrcgNTYlIG9mIHRhcmdldCcpIGFuZCwgd2hlbiB0aGUgc2VydmVyIHNlbnRcbiAgLy8gdGhlIHByb2dyZXNzLCBhIGJhciBmaWxsZWQgdGhhdCBmYXI6IGdyZWVuIG9uY2UgdGhlIHRhcmdldCBpcyBtZXQuXG4gIHByaXZhdGUgX2twaVRhcmdldChwcHR4OiBhbnksIHNsaWRlOiBhbnksIHRhcmdldDogS3BpQ2FyZFRhcmdldCwgeDogbnVtYmVyLCB0b3A6IG51bWJlciwgdzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdGV4dCA9IHRhcmdldC5wcm9ncmVzcyA/IGAke3RhcmdldC50ZXh0fSDCtyAke3RhcmdldC5wcm9ncmVzc31gIDogdGFyZ2V0LnRleHQ7XG5cbiAgICBzbGlkZS5hZGRUZXh0KHRoaXMuX2ZpdEVzdGltYXRlKHRleHQsIEtQSV9MSU5FX0ZPTlRfU0laRSwgdyksIHtcbiAgICAgIHgsIHk6IHRvcCwgdywgaDogS1BJX1RBUkdFVF9URVhUX0gsXG4gICAgICBmb250U2l6ZTogS1BJX0xJTkVfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsIGFsaWduOiAnY2VudGVyJywgdmFsaWduOiAnbWlkZGxlJywgbWFyZ2luOiAwLCBmaXQ6ICdub25lJyxcbiAgICB9KTtcblxuICAgIGlmICh0YXJnZXQuZmlsbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhclcgPSBNYXRoLm1pbih3ICogMC42LCBLUElfQkFSX1cpO1xuICAgIGNvbnN0IGJhclggPSB4ICsgKHcgLSBiYXJXKSAvIDI7XG4gICAgY29uc3QgYmFyWSA9IHRvcCArIEtQSV9UQVJHRVRfVEVYVF9IICsgS1BJX0JBUl9HQVA7XG4gICAgY29uc3QgYmFyID0gKHdpZHRoOiBudW1iZXIsIGNvbG9yOiBzdHJpbmcpID0+IHNsaWRlLmFkZFNoYXBlKHBwdHguU2hhcGVUeXBlLnJlY3QsIHtcbiAgICAgIHg6IGJhclgsIHk6IGJhclksIHc6IHdpZHRoLCBoOiBLUElfQkFSX0gsIGZpbGw6IHsgY29sb3IgfSwgbGluZTogeyBjb2xvciwgd2lkdGg6IDAgfSxcbiAgICB9KTtcblxuICAgIGJhcihiYXJXLCBLUElfVFJBQ0tfQ09MT1IpO1xuXG4gICAgaWYgKHRhcmdldC5maWxsID4gMCkge1xuICAgICAgYmFyKGJhclcgKiB0YXJnZXQuZmlsbCwgUkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTW3RhcmdldC50b25lXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHNwYXJrbGluZSBhcyBhIG5hdGl2ZSBsaW5lIGNoYXJ0IHdpdGggaXRzIGF4ZXMsIGdyaWRsaW5lcyBhbmQgbGVnZW5kXG4gIC8vIGhpZGRlbiwgc2NhbGVkIGZyb20gaXRzIGxvd2VzdCB2YWx1ZSB0byBpdHMgaGlnaGVzdCBhcyBvbiBzY3JlZW4sIGl0c1xuICAvLyBwZXJpb2RzIGFuZCB2YWx1ZXMgaW4gdGhlIGNoYXJ0J3MgZGF0YSBzaGVldC4gQSBnYXAgc3RheXMgYSBnYXAuIE1hcmtlcnNcbiAgLy8gc2hvdyBvbmx5IHdoZW4gYSB2YWx1ZSBzdGFuZHMgYWxvbmUgYmV0d2VlbiBnYXBzICh0aGUgbGFzdCBvbmUgdG9vKSxcbiAgLy8gd2hpY2ggYSBsaW5lIGNhbm5vdCBkcmF3LlxuICBwcml2YXRlIF9rcGlTcGFya2xpbmUoXG4gICAgcHB0eDogYW55LFxuICAgIHNsaWRlOiBhbnksXG4gICAgaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50LFxuICAgIHZhbHVlczogKG51bWJlciB8IG51bGwpW10sXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICB4OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3OiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG51bWJlcnMgPSB2YWx1ZXMuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIG51bWJlciA9PiB2YWx1ZSAhPT0gbnVsbCk7XG4gICAgY29uc3QgbG93ID0gTWF0aC5taW4oLi4ubnVtYmVycyk7XG4gICAgY29uc3QgaGlnaCA9IE1hdGgubWF4KC4uLm51bWJlcnMpO1xuICAgIGNvbnN0IHBhZCA9IGhpZ2ggPT09IGxvdyA/IE1hdGgubWF4KDEsIE1hdGguYWJzKGhpZ2gpKSA6IDA7XG4gICAgY29uc3QgYm94VyA9IE1hdGgubWluKHcgKiAwLjcsIEtQSV9TUEFSS0xJTkVfVyk7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBrcGlTcGFya2xpbmVHZW9tZXRyeSh2YWx1ZXMsIGZhbHNlKTtcbiAgICAvLyBrcGlTcGFya2xpbmVHZW9tZXRyeSBrZWVwcyB0aGUgbGFzdCBwb2ludCBvdXQgb2YgdGhlIGRvdHMsIGFzIHRoZVxuICAgIC8vIHNjcmVlbiBtYXJrcyBpdCBhcGFydDsgYSBsYXN0IHZhbHVlIGFmdGVyIGEgZ2FwIGlzIGEgbG9uZSBwb2ludCB0b28uXG4gICAgY29uc3QgbGFzdFN0YW5kc0Fsb25lID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXSAhPT0gbnVsbFxuICAgICAgJiYgKHZhbHVlcy5sZW5ndGggPT09IDEgfHwgdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAyXSA9PT0gbnVsbCk7XG4gICAgY29uc3QgcGVyaW9kcyA9IGl0ZW0uZGF0YT8ua3BpPy5zcGFya2xpbmU/LnBvaW50cz8ubWFwKChwb2ludCkgPT4gcG9pbnQucGVyaW9kKSA/PyBbXTtcbiAgICBjb25zdCBjb2xvciA9IFJFUE9SVF9LUElfU1BBUktMSU5FX0NPTE9SO1xuXG4gICAgdGhpcy5fYWRkQ2hhcnQoc2xpZGUsIHsgbGluZTogcHB0eC5DaGFydFR5cGUubGluZSB9LCBbe1xuICAgICAgdHlwZTogJ2xpbmUnLFxuICAgICAgaW5kZXhlczogWzBdLFxuICAgICAgc2Vjb25kYXJ5OiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY2hhcnRDb2xvcnM6IFtjb2xvcl0sXG4gICAgICAgIGxpbmVTaXplOiAxLjUsXG4gICAgICAgIGxpbmVEYXRhU3ltYm9sOiBnZW9tZXRyeS5kb3RzLmxlbmd0aCB8fCBsYXN0U3RhbmRzQWxvbmUgPyAnY2lyY2xlJyA6ICdub25lJyxcbiAgICAgICAgbGluZURhdGFTeW1ib2xTaXplOiA0LFxuICAgICAgfSxcbiAgICB9XSwgW3tcbiAgICAgIG5hbWU6IGxhYmVsIHx8IEtQSV9TUEFSS0xJTkVfTkFNRSxcbiAgICAgIGxhYmVsczogdmFsdWVzLm1hcCgoXywgaW5kZXgpID0+IHBlcmlvZHNbaW5kZXhdID8/IFN0cmluZyhpbmRleCArIDEpKSxcbiAgICAgIHZhbHVlcyxcbiAgICB9XSwge1xuICAgICAgeDogeCArICh3IC0gYm94VykgLyAyLCB5OiB0b3AsIHc6IGJveFcsIGg6IEtQSV9IRUlHSFRTLnNwYXJrbGluZSxcbiAgICAgIHNob3dMZWdlbmQ6IGZhbHNlLFxuICAgICAgc2hvd1RpdGxlOiBmYWxzZSxcbiAgICAgIGNhdEF4aXNIaWRkZW46IHRydWUsXG4gICAgICB2YWxBeGlzSGlkZGVuOiB0cnVlLFxuICAgICAgY2F0QXhpc0xpbmVTaG93OiBmYWxzZSxcbiAgICAgIHZhbEF4aXNMaW5lU2hvdzogZmFsc2UsXG4gICAgICBzaG93Q2F0QXhpc1RpdGxlOiBmYWxzZSxcbiAgICAgIHNob3dWYWxBeGlzVGl0bGU6IGZhbHNlLFxuICAgICAgdmFsR3JpZExpbmU6IHsgc3R5bGU6ICdub25lJyB9LFxuICAgICAgY2F0R3JpZExpbmU6IHsgc3R5bGU6ICdub25lJyB9LFxuICAgICAgdmFsQXhpc01pblZhbDogbG93IC0gcGFkLFxuICAgICAgdmFsQXhpc01heFZhbDogaGlnaCArIHBhZCxcbiAgICAgIC4uLkJMQU5LU19BU19HQVBTLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2x1ZyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldKy9nLCAnLScpLnJlcGxhY2UoL14tK3wtKyQvZywgJycpIHx8ICdyZXBvcnQnO1xuICB9XG59XG5cbi8vIEdpdmVzIGEgdGV4dCB0YWJsZSdzIGNlbGwgdGhlIGdyaWQgc2xvdHMgaXQgY292ZXJzIGZyb20gaXRzIHRvcCBsZWZ0OiBhc1xuLy8gbWFueSBjb2x1bW5zIGFzIGFyZSBmcmVlIGluIGl0cyB0b3Agcm93LCBhbmQgYXMgbWFueSByb3dzIGRvd24gYXMgYXJlIGZyZWVcbi8vIGFjcm9zcyB0aG9zZSBjb2x1bW5zLCBhdCBtb3N0IGl0cyBvd24gc3BhbnMuIEEgc2xvdCBpcyBmcmVlIHVudGlsIGEgY2VsbFxuLy8gcGxhY2VkIGJlZm9yZSBpdCBob2xkcyBpdCwgYW5kIHRoZSBncmlkIGhvbGRzIG9ubHkgdGhlIGtlcHQgcm93cy4gU28gYSBzcGFuXG4vLyB0aGUgYm94IGN1dHMgZW5kcyBhdCB0aGUgbGFzdCBrZXB0IHJvdywgYW5kIG9uZSB0aGUgaHRtbCBtYWtlcyBvdmVybGFwXG4vLyBhbm90aGVyIGNlbGwgKHdoaWNoIGEgYnJvd3NlciBkcmF3cyBvbiB0b3Agb2YgaXQpIGVuZHMgd2hlcmUgdGhleSBtZWV0LlxuZnVuY3Rpb24gY2xhaW1TbG90cyhzbG90czogKFRleHRUYWJsZUNlbGwgfCBudWxsKVtdW10sIGNlbGw6IFRleHRUYWJsZUNlbGwpOiB2b2lkIHtcbiAgY29uc3QgZnJlZSA9IChyb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIpID0+IHJvdyA8IHNsb3RzLmxlbmd0aCAmJiBjb2x1bW4gPCBzbG90c1tyb3ddLmxlbmd0aCAmJiAhc2xvdHNbcm93XVtjb2x1bW5dO1xuICBjb25zdCBjb2x1bW5zID0gKGNvdW50OiBudW1iZXIpID0+IEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0sIChfLCBvZmZzZXQpID0+IGNlbGwuY29sdW1uICsgb2Zmc2V0KTtcbiAgbGV0IGNvbFNwYW4gPSAwO1xuICBsZXQgcm93U3BhbiA9IDA7XG5cbiAgd2hpbGUgKGNvbFNwYW4gPCBjZWxsLmNvbFNwYW4gJiYgZnJlZShjZWxsLnJvdywgY2VsbC5jb2x1bW4gKyBjb2xTcGFuKSkge1xuICAgIGNvbFNwYW4rKztcbiAgfVxuICB3aGlsZSAoY29sU3BhbiAmJiByb3dTcGFuIDwgY2VsbC5yb3dTcGFuICYmIGNvbHVtbnMoY29sU3BhbikuZXZlcnkoKGNvbHVtbikgPT4gZnJlZShjZWxsLnJvdyArIHJvd1NwYW4sIGNvbHVtbikpKSB7XG4gICAgcm93U3BhbisrO1xuICB9XG5cbiAgY29uc3QgY2xhaW1lZCA9IHsgLi4uY2VsbCwgY29sU3Bhbiwgcm93U3BhbiB9O1xuICBmb3IgKGxldCByb3cgPSBjZWxsLnJvdzsgcm93IDwgY2VsbC5yb3cgKyByb3dTcGFuOyByb3crKykge1xuICAgIHNsb3RzW3Jvd10uZmlsbChjbGFpbWVkLCBjZWxsLmNvbHVtbiwgY2VsbC5jb2x1bW4gKyBjb2xTcGFuKTtcbiAgfVxufVxuIl19
1355
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBwdHguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LXBwdHguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLHFCQUFxQixHQUN0QixNQUFNLFdBQVcsQ0FBQztBQWdCbkIsT0FBTyxFQUErQixXQUFXLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFDakMsZUFBZSxFQUFFLFVBQVUsR0FDM0csTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsYUFBYSxF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QUM7SUFFaEIsT0FBTyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDdkUsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxPQUFPLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqSCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM5QyxLQUFLLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDekQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJlcG9ydENoYXJ0RGF0YUxhYmVscyB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFydC1kYXRhLWxhYmVscy5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0RGF0ZUxhYmVsIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWRhdGUtbGFiZWwuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydExpbmVTdHlsZSB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFydC1saW5lLXN0eWxlLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnRNYXJrU3RhdCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFydC1tYXJrLXN0YXQuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRLcGlUcmVuZCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1rcGktdHJlbmQuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRMaXN0Q29sdW1uRm9ybWF0IH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWxpc3QtY29sdW1uLWZvcm1hdC5lbnVtJztcbmltcG9ydCB7IGxheWVyRmlsdGVyRmllbGRzIH0gZnJvbSAnLi4vZmlsdGVyLXRleHQnO1xuaW1wb3J0IHtcbiAgYXhpc051bWJlckZvcm1hdCxcbiAgY2hhcnRBeGlzRm9ybWF0Q29kZSxcbiAgY2hhcnRWYWx1ZVBlYWssXG4gIGhhc051bWJlckZvcm1hdCxcbiAgbnVtYmVyRm9ybWF0Q29kZSxcbiAgcmVzb2x2ZUNoYXJ0TnVtYmVyRm9ybWF0LFxuICByZXNvbHZlUmVwb3J0VGltZXpvbmUsXG59IGZyb20gJy4uL2Zvcm1hdCc7XG5pbXBvcnQge1xuICBDaGFydENvbmZpZyxcbiAgQ2hhcnRHcmFudWxhcml0eSxcbiAgQ2hhcnRNZWFzdXJlLFxuICBDaGFydFZhbHVlQXhpcyxcbiAgQ29tcG9uZW50RGF0YSxcbiAgTGVnZW5kUG9zaXRpb24sXG4gIEtwaUNvbmZpZyxcbiAgTnVtYmVyRm9ybWF0U3BlYyxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBSZXBvcnRMb2NhbGVUYWcsXG4gIFJlcG9ydFBhZ2UsXG4gIFdhdGVyZmFsbFN0ZXBLaW5kLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS3BpQ2FyZERlbHRhLCBLcGlDYXJkVGFyZ2V0LCBrcGlDYXJkVmlldywga3BpU3BhcmtsaW5lR2VvbWV0cnkgfSBmcm9tICcuLi9rcGktY2FyZCc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HIH0gZnJvbSAnLi4vbGF5b3V0JztcbmltcG9ydCB7IGxpc3RUb3RhbHNMYWJlbENvbHVtbiB9IGZyb20gJy4uL2xpc3QtY29uZmlnJztcbmltcG9ydCB7XG4gIERFRkFVTFRfVEVYVF9DT0xPUiwgREVGQVVMVF9URVhUX1NJWkUsIFRFWFRfVEFCTEVfQk9SREVSX0NPTE9SLCBURVhUX1RBQkxFX0JPUkRFUl9XSURUSCwgVEVYVF9UQUJMRV9DRUxMX1BBRERJTkcsXG4gIFRleHRCbG9jaywgVGV4dFBhcmFncmFwaCwgVGV4dFJ1biwgVGV4dFRhYmxlLCBUZXh0VGFibGVDZWxsLCBUZXh0VG9rZW5Db250ZXh0LCBibG9ja1BhcmFncmFwaHMsIHRleHRCbG9ja3MsXG59IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHsgaXNEcmF3biB9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQge1xuICBjYXRlZ29yeUF4aXNUaXRsZSxcbiAgY2hhcnREYXRlTGFiZWwsXG4gIGNoYXJ0UmVmZXJlbmNlcyxcbiAgY29sb3JCeVZhbHVlcyxcbiAgRHJhd25SZWZlcmVuY2UsXG4gIGRyYXdzU3RhdExpbmVzLFxuICBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgZXh0cmFjdENoYXJ0U2VyaWVzLFxuICBleHRyYWN0V2F0ZXJmYWxsLFxuICBmb3JtYXRQZXJpb2RMYWJlbCxcbiAgaXNDb2xvckJ5LFxuICBtZWFzdXJlTGluZVN0eWxlLFxuICBtZWFzdXJlTWFya1N0YXQsXG4gIFBFUkNFTlRfQVhJU19JTlRFUlZBTCxcbiAgUEVSQ0VOVF9BWElTX01BWCxcbiAgcGVyY2VudEF4aXNNaW4sXG4gIFBlcmNlbnRTaGFyZXMsXG4gIHBlcmNlbnRTdGFja2VkU2hhcmVzLFxuICBwcmlvclNlcmllc1N0eWxlcyxcbiAgUkFOS19BWElTX01JTixcbiAgcmFua1ZhbHVlQXhlcyxcbiAgcmVmZXJlbmNlUGVhayxcbiAgcmVzb2x2ZUxlZ2VuZFBvc2l0aW9uLFxuICBzZXJpZXNBeGlzSW5kZXhlcyxcbiAgc2VyaWVzSGV4LFxuICBzZXJpZXNTdGF0LFxuICBzZXJpZXNUeXBlcyxcbiAgc3BhbnNNdWx0aXBsZVllYXJzLFxuICBTVEFUX0xBQkVMLFxuICBWYWx1ZUF4aXNJbmRleCxcbiAgdmFsdWVBeGlzUmFuZ2UsXG4gIFdhdGVyZmFsbFN0ZXAsXG59IGZyb20gJy4uL29wdGlvbi1idWlsZGVyJztcbmltcG9ydCB7XG4gIFJFUE9SVF9DSEFSVF9DT0xPUlMsXG4gIFJFUE9SVF9LUElfQ0hBTkdFX0NPTE9SUyxcbiAgUkVQT1JUX0tQSV9TUEFSS0xJTkVfQ09MT1IsXG4gIFJFUE9SVF9LUElfVFJBQ0tfQ09MT1IsXG4gIFJFUE9SVF9NVVRFRF9URVhUX0NPTE9SLFxuICBSRVBPUlRfUkVGRVJFTkNFX0NPTE9SLFxuICBSRVBPUlRfV0FURVJGQUxMX0NPTE9SUyxcbn0gZnJvbSAnLi4vdGhlbWUvcGFsZXR0ZSc7XG5pbXBvcnQge1xuICBCdWlsdEV4cG9ydCwgQ29sbGVjdGVkQ29tcG9uZW50LCBDb2xsZWN0ZWRSZXBvcnQsIEhFQURFUl9GT09URVJfTkFNRSwgS3BpRXhwb3J0SGVpZ2h0cywgVGV4dE92ZXJmbG93LCBjb3ZlckxpbmVzLFxuICBlbXB0eUxhYmVsLCBleHBvcnRDZWxsLCBleHBvcnROb3RlTGluZXMsIGV4cG9ydFRpdGxlLCBleHBvcnRXaW5kb3dzTGluZSwgaXNFbXB0eVRpbGUsIGtwaUNhcmRIYXNFeHRyYXMsXG4gIGtwaUV4cG9ydEhlaWdodCwga3BpRXhwb3J0UGFydHMsIGxpc3RDb2x1bW5zLCBsaXN0SGVhZGluZ3MsIGxpc3RUb3RhbHNSb3csIG1vcmVSb3dzTm90aWNlLCBzY2FsZWRLcGlIZWlnaHRzLFxuICB0ZXh0T3ZlcmZsb3csXG59IGZyb20gJy4vcmVwb3J0LWV4cG9ydC1jb2xsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkRXhwb3J0Q2VsbCwgZ3JpZEV4cG9ydFRhYmxlIH0gZnJvbSAnLi9yZXBvcnQtZ3JpZC1leHBvcnQnO1xuaW1wb3J0IHtcbiAgT1ZFUkZMT1dfU0xBQ0ssIFJlcG9ydFRleHRMYXlvdXRTZXJ2aWNlLCBUZXh0QmxvY2tMYXlvdXQsIFRleHRTZWdtZW50TGF5b3V0LCBUZXh0VGFibGVMYXlvdXQsXG59IGZyb20gJy4vcmVwb3J0LXRleHQtbGF5b3V0LnNlcnZpY2UnO1xuXG5cbi8vIENvbXBvbmVudCB0aXRsZSBzdHJpcCBoZWlnaHQgb24gdGhlIHNsaWRlLCBpbmNoZXMuXG5jb25zdCBUSVRMRV9IID0gMC4yODtcblxuLy8gVGhlIHNtYWxsIHByaW50IGEgY29tcG9uZW50IG1heSBjYXJyeSwgaW5jaGVzOiB0aGUgZGF5cyBpdCByZWFkcyB1bmRlciBpdHNcbi8vIHRpdGxlIChhIHN1YnRpdGxlIGxpbmUpLCBpdHMgbm90ZXMgYXQgdGhlIGZvb3Qgb2YgaXRzIGJveCAoYSBsaW5lIGVhY2gpLCBhbmRcbi8vIHRoZSBsaW5lcyBvZiBhIEtQSSBjYXJkIHVuZGVyIGl0cyB2YWx1ZS4gQSBjaGFydCdzIG9yIGEgbGlzdCdzIG5vdGVzIGdpdmVcbi8vIHdheSBiZWZvcmUgaXRzIGJvZHkgd291bGQgc2hyaW5rIHVuZGVyIE1JTl9CT0RZX0guXG5jb25zdCBTTUFMTF9GT05UX1NJWkUgPSA4O1xuY29uc3QgU1VCVElUTEVfSCA9IDAuMTg7XG5jb25zdCBOT1RFX0xJTkVfSCA9IDAuMTY7XG5jb25zdCBNSU5fQk9EWV9IID0gMC42O1xuY29uc3QgTVVURURfQ09MT1IgPSBSRVBPUlRfTVVURURfVEVYVF9DT0xPUjtcblxuLy8gQSBLUEkgY2FyZCdzIHBhcnRzLCB0b3AgdG8gYm90dG9tLCBpbmNoZXMgKGtwaUV4cG9ydFBhcnRzIHNoZWRzIHRoZVxuLy8gc3BhcmtsaW5lLCB0aGVuIHRoZSB0YXJnZXQsIHRoZW4gdGhlIG5vdGVzIG9uIGEgc2hvcnQgdGlsZSkuXG5jb25zdCBLUElfVEFSR0VUX1RFWFRfSCA9IDAuMTg7XG5jb25zdCBLUElfQkFSX0dBUCA9IDAuMDI7XG5jb25zdCBLUElfQkFSX0ggPSAwLjA1O1xuY29uc3QgS1BJX0hFSUdIVFM6IEtwaUV4cG9ydEhlaWdodHMgPSB7XG4gIHZhbHVlOiAwLjQ4LFxuICBsYWJlbDogMC4yMixcbiAgZGVsdGE6IDAuMjIsXG4gIHdpbmRvdzogMC4xOCxcbiAgdGFyZ2V0OiBLUElfVEFSR0VUX1RFWFRfSCArIEtQSV9CQVJfR0FQICsgS1BJX0JBUl9IICsgMC4wMyxcbiAgc3BhcmtsaW5lOiAwLjQyLFxuICBub3RlOiBOT1RFX0xJTkVfSCxcbn07XG4vLyBUaGUgc2l6ZSBvZiB0aGUgZGVsdGEsIHdpbmRvdyBhbmQgdGFyZ2V0IGxpbmVzLlxuY29uc3QgS1BJX0xJTkVfRk9OVF9TSVpFID0gOTtcbi8vIFRoZSBkZWx0YSdzIHRyaWFuZ2xlOiBpdHMgc2lkZSwgYW5kIHRoZSBnYXAgYmVmb3JlIHRoZSBjaGFuZ2UuXG5jb25zdCBLUElfQVJST1cgPSAwLjA5O1xuY29uc3QgS1BJX0FSUk9XX0dBUCA9IDAuMDQ7XG4vLyBBIGNoYXJhY3RlcidzIGF2ZXJhZ2Ugd2lkdGggYXMgYSBzaGFyZSBvZiBpdHMgZm9udCBzaXplLCBmb3IgcGxhY2luZyB0aGVcbi8vIHRyaWFuZ2xlIGJlc2lkZSB0ZXh0IFBvd2VyUG9pbnQgbGF5cyBvdXQuXG5jb25zdCBQUFRYX0NIQVJfV0lEVEggPSAwLjQyO1xuLy8gVGhlIHRhcmdldCdzIHByb2dyZXNzIGJhciwgYW5kIHRoZSB0cmFjayBpdCBmaWxscy5cbmNvbnN0IEtQSV9CQVJfVyA9IDEuNztcbmNvbnN0IEtQSV9UUkFDS19DT0xPUiA9IFJFUE9SVF9LUElfVFJBQ0tfQ09MT1I7XG4vLyBUaGUgc3BhcmtsaW5lJ3Mgd2lkZXN0IGJveCwgYW5kIGl0cyBzZXJpZXMgbmFtZSBpbiB0aGUgZGF0YSBzaGVldCB3aGVuIHRoZVxuLy8gbWVhc3VyZSBoYXMgbm8gbGFiZWwuXG5jb25zdCBLUElfU1BBUktMSU5FX1cgPSAyO1xuY29uc3QgS1BJX1NQQVJLTElORV9OQU1FID0gJ1RyZW5kJztcblxuLy8gQSByYW5rIGF4aXMgZHJhd24gdG9wLWRvd24ga2VlcHMgaXRzIGNhdGVnb3J5IGxhYmVscyB1bmRlciB0aGUgcGxvdDogYXQgdGhlXG4vLyBheGlzJ3MgaGlnaCBlbmQsIHdoaWNoIGEgcmV2ZXJzZWQgYXhpcyBwdXRzIGF0IHRoZSBib3R0b20uIFJhbmtzIHVwIHRvIHRoaXNcbi8vIG1hbnkgYXJlIHN0ZXBwZWQgb25lIGF0IGEgdGltZS5cbmNvbnN0IFBQVFhfUkFOS19DQVRFR09SWV9MQUJFTF9QT1MgPSAnaGlnaCc7XG5jb25zdCBQUFRYX1JBTktfV0hPTEVfU1RFUF9QRUFLID0gMTA7XG5jb25zdCBQUFRYX1JBTktfRk9STUFUX0NPREUgPSAnMCc7XG4vLyBBcHByb3hpbWF0ZSB0YWJsZSByb3cgaGVpZ2h0LCBpbmNoZXMg4oCUIGRyaXZlcyB0aGUgcm93cy10aGF0LWZpdCBjYXAuXG5jb25zdCBTTElERV9ST1dfSCA9IDAuMjY7XG5cbi8vIFRoZSBzcGFjZXMgYSB0YWJsZSdzIGdyb3VwIGxhYmVsIHN0ZXBzIGluIGJ5IHBlciBsZXZlbDogYSBjZWxsJ3MgdGV4dCBpc1xuLy8gdGhlIG9uZSBwbGFjZSBhIHNsaWRlIHRhYmxlIGluZGVudHMuXG5jb25zdCBHUklEX0lOREVOVCA9ICdcXHUwMEEwXFx1MDBBMFxcdTAwQTAnO1xuXG4vLyBSb3dzIGZldGNoZWQgZm9yIGEgbGlzdCdzIHNsaWRlIHRhYmxlLiBBIHNsaWRlIHRhYmxlIG5ldmVyIGNvbnRpbnVlcyBvbnRvXG4vLyBhbm90aGVyIHNsaWRlLCBzbyB0aGlzIG9ubHkgaGFzIHRvIGNvdmVyIHRoZSByb3dzIGEgYm94IGNhbiBzaG93OyB0aGVcbi8vIG1vcmVSb3dzTm90aWNlKCkgcm93IG5hbWVzIHRoZSByZXN0LlxuZXhwb3J0IGNvbnN0IFBQVFhfTElTVF9ST1dTID0gMTAwO1xuXG4vLyBPdXIgbGVnZW5kIHBvc2l0aW9ucyBtYXBwZWQgdG8gcHB0eGdlbmpzJ3Mgc2luZ2xlLWxldHRlciBsZWdlbmRQb3MgY29kZXMuXG4vLyAnaGlkZGVuJyBoYXMgbm8gc2xvdCDigJQgc2hvd0xlZ2VuZCBpcyB0dXJuZWQgb2ZmIGluc3RlYWQg4oCUIHNvIGl0IGZhbGxzIGJhY2tcbi8vIHRvIHRvcC5cbmNvbnN0IFBQVFhfTEVHRU5EX1BPUzogUmVjb3JkPExlZ2VuZFBvc2l0aW9uLCAndCcgfCAnYicgfCAnbCcgfCAncic+ID0ge1xuICB0b3A6ICd0JyxcbiAgYm90dG9tOiAnYicsXG4gIGxlZnQ6ICdsJyxcbiAgcmlnaHQ6ICdyJyxcbiAgaGlkZGVuOiAndCcsXG59O1xuXG4vLyBXaGF0IGEgd2F0ZXJmYWxsJ3Mgc2VyaWVzIGFyZSBjYWxsZWQgaW4gUG93ZXJQb2ludCdzIGRhdGEgc2hlZXQgYW5kIG9uIGhvdmVyLlxuLy8gVGhlIGxlZ2VuZCBzdGF5cyBvZmYsIGFzIGl0IGRvZXMgb24gc2NyZWVuLCB1bmxlc3MgdGhlIGNoYXJ0IGRyYXdzXG4vLyByZWZlcmVuY2VzLCB3aGljaCBvbmx5IHRoZSBsZWdlbmQgY2FuIG5hbWUgaW4gUG93ZXJQb2ludC5cbmNvbnN0IFdBVEVSRkFMTF9TRVJJRVNfTkFNRVM6IFJlY29yZDxXYXRlcmZhbGxTdGVwS2luZCwgc3RyaW5nPiA9IHtcbiAgcmlzZTogJ0luY3JlYXNlJyxcbiAgZmFsbDogJ0RlY3JlYXNlJyxcbiAgdG90YWw6ICdUb3RhbCcsXG59O1xuXG4vLyBBIG51bGwgaXMgYSBwZXJpb2Qgd2l0aCBubyB2YWx1ZS4gVGhlIHNjcmVlbiBicmVha3MgdGhlIGxpbmUgdGhlcmUsIGFuZFxuLy8gcHB0eGdlbmpzJ3MgZGVmYXVsdCAoJ3NwYW4nKSB3b3VsZCBkcmF3IHN0cmFpZ2h0IGFjcm9zcyBpdC4gVGhlIHNldHRpbmcgaXNcbi8vIGNoYXJ0LWxldmVsLCBzbyBhIGNvbWJvJ3MgZXZlcnkgdHlwZSBpbmhlcml0cyBpdCB0aHJvdWdoIHRoZSBjaGFydCBvcHRpb25zLlxuY29uc3QgQkxBTktTX0FTX0dBUFMgPSB7IGRpc3BsYXlCbGFua3NBczogJ2dhcCcgfSBhcyBjb25zdDtcblxuLy8gVGhlIGF4aXMgbGFiZWwgYW5kIHRpdGxlIHNpemVzIGV2ZXJ5IGNoYXJ0IHdpdGggYXhlcyBzaGFyZXMsIHdoaWNoZXZlciBheGlzXG4vLyB0aGV5IGxhbmQgb24uXG5jb25zdCBBWElTX0ZPTlRfU0laRVMgPSB7IGNhdEF4aXNMYWJlbEZvbnRTaXplOiA5LCB2YWxBeGlzTGFiZWxGb250U2l6ZTogOSwgdmFsQXhpc1RpdGxlRm9udFNpemU6IDEwIH0gYXMgY29uc3Q7XG5cbi8vIEEgbGluZSBzdHlsZSBhcyBQb3dlclBvaW50J3MgcHJlc2V0IGRhc2ggKGE6cHJzdERhc2gpLiBwcHR4Z2VuanMgd3JpdGVzIGl0XG4vLyBvbiBsaW5lIHNlcmllcyBvbmx5LCBzbyBhbiBhcmVhIGlzIG5ldmVyIGRhc2hlZC5cbmNvbnN0IFBQVFhfTElORV9EQVNIOiBSZWNvcmQ8UmVwb3J0Q2hhcnRMaW5lU3R5bGUsIHN0cmluZz4gPSB7XG4gIFtSZXBvcnRDaGFydExpbmVTdHlsZS5Tb2xpZF06ICdzb2xpZCcsXG4gIFtSZXBvcnRDaGFydExpbmVTdHlsZS5EYXNoZWRdOiAnZGFzaCcsXG4gIFtSZXBvcnRDaGFydExpbmVTdHlsZS5Eb3R0ZWRdOiAnc3lzRG90Jyxcbn07XG5cbi8vIEEgbGluZSdzIG1hcmtlcnMsIGFzIG9uIHNjcmVlbjogYSBkb3QgdGhlIHNjcmVlbidzIHNpemUgb24gZWFjaCBwb2ludC5cbmNvbnN0IFBQVFhfTElORV9TWU1CT0xfU0laRSA9IDY7XG5cbi8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3Mgc2hhcmUgYXhpczogd2hvbGUgcGVyY2VudGFnZXMuIFRoZSBzaGFyZXMgYXJlXG4vLyByYXRpb3MsIHNvICcwJScgaXMgcmlnaHQgd2hhdGV2ZXIgdGhlIHJlcG9ydCdzIHBlcmNlbnRGb3JtYXQuXG5jb25zdCBQUFRYX1BFUkNFTlRfRk9STUFUX0NPREUgPSAnMCUnO1xuXG4vLyBUaGUgc2l6ZSBvZiBhIGNoYXJ0J3MgZGF0YSBsYWJlbHMsIGEgc3RlcCB1bmRlciB0aGUgYXhpcyBsYWJlbHMsIGFzIG9uXG4vLyBzY3JlZW4uXG5jb25zdCBQUFRYX0RBVEFfTEFCRUxfRk9OVF9TSVpFID0gODtcblxuLy8gVGhlIG1vc3QgY2F0ZWdvcmllcyBhbiAnYXV0bycgZGF0YS1sYWJlbGVkIGNoYXJ0IGxhYmVscyBpbiBQb3dlclBvaW50LFxuLy8gd2hpY2ggY2Fubm90IGhpZGUgdGhlIGxhYmVscyB0aGF0IG92ZXJsYXA6IHBhc3QgdGhpcyBtYW55LCBpdCBsYWJlbHMgbm9uZS5cbmV4cG9ydCBjb25zdCBQUFRYX0FVVE9fTEFCRUxfTUFYX1BPSU5UUyA9IDI0O1xuXG4vLyBBIHJlZmVyZW5jZSBvciBzdGF0aXN0aWMgbGluZSdzIHdpZHRoIGluIHBvaW50czogYSBoYWlybGluZSBiZXNpZGUgdGhlXG4vLyBzZXJpZXMsIGFzIG9uIHNjcmVlbi5cbmNvbnN0IFBQVFhfQ09OU1RBTlRfTElORV9TSVpFID0gMTtcblxuLy8gV2hhdCB0aGUgdXBwZXIgZWRnZSBvZiBhIHJlZmVyZW5jZSBiYW5kIGlzIGNhbGxlZCBpbiB0aGUgZGF0YSBzaGVldCBhbmQgdGhlXG4vLyBsZWdlbmQsIGFmdGVyIHRoZSBiYW5kJ3Mgb3duIGxhYmVsIG9uIGl0cyBsb3dlciBlZGdlLlxuY29uc3QgUFBUWF9CQU5EX1VQUEVSX1NVRkZJWCA9ICcgKHVwcGVyKSc7XG5cbi8vIFdoYXQgdGhlIGV4cG9ydCdzIG92ZXJmbG93IGdhdGUgc2F5cyB0aGUgZGVjayBkb2VzIHdpdGggYSB0ZXh0IGJsb2NrIHRoYXRcbi8vIGRvZXMgbm90IGZpdCBpdHMgYm94LlxuY29uc3QgUFBUWF9PVkVSRkxPV19OT1RFID0gJ0luIHRoZSBQb3dlclBvaW50IGl0IHJ1bnMgcGFzdCB0aGUgYm90dG9tIG9mIGl0cyBib3gsIGFuZCB0YWJsZSByb3dzIHBhc3QgaXQgYXJlICdcbiAgKyAnbGVmdCBvdXQuJztcblxuLy8gVGhlIHNob3J0ZXN0IHRleHQgYm94IGEgdGV4dCBibG9jaydzIHdvcmRzIGdldCBiZXR3ZWVuIGl0cyB0YWJsZXMsIGluY2hlcyxcbi8vIGhvd2V2ZXIgY2xvc2UgdGhlIGNhbnZhcyBzZXRzIHRoZWlyIHRvcCBhbmQgYm90dG9tLlxuY29uc3QgVEVYVF9TRUdNRU5UX01JTl9IID0gMC4wNTtcblxuLy8gQSB0ZXh0IHRhYmxlJ3MgY2VsbCBtYXJnaW5zLCB0b3AsIHJpZ2h0LCBib3R0b20gYW5kIGxlZnQsIGluIHBvaW50czogdGhlXG4vLyBwYWRkaW5nIGV2ZXJ5IHJlbmRlcmVyIGRyYXdzIChURVhUX1RBQkxFX0NFTExfUEFERElORykuIHBwdHhnZW5qcyAzLjEyIHJlYWRzXG4vLyBhIG1hcmdpbiBsaXN0IGFzIHBvaW50cyB3aGVuIGl0cyBmaXJzdCB2YWx1ZSBpcyBhdCBsZWFzdCAxLCBhbmQgYXMgaW5jaGVzXG4vLyBvdGhlcndpc2UuXG5jb25zdCBURVhUX1RBQkxFX0NFTExfTUFSR0lOID0gW1xuICBURVhUX1RBQkxFX0NFTExfUEFERElORy52ZXJ0aWNhbCxcbiAgVEVYVF9UQUJMRV9DRUxMX1BBRERJTkcuaG9yaXpvbnRhbCxcbiAgVEVYVF9UQUJMRV9DRUxMX1BBRERJTkcudmVydGljYWwsXG4gIFRFWFRfVEFCTEVfQ0VMTF9QQURESU5HLmhvcml6b250YWwsXG5dO1xuXG4vLyBXaGVyZSB0aGUgbGVnZW5kIG9mIGEgY2hhcnQgd2l0aCByZWZlcmVuY2Ugb3Igc3RhdGlzdGljIGxpbmVzIHNpdHMgd2hlblxuLy8gdGhlIGNvbmZpZyBkb2VzIG5vdCBwaW4gaXQ6IHRoZSBvbmUgcGxhY2UgUG93ZXJQb2ludCBuYW1lcyB0aG9zZSBsaW5lcy5cbmNvbnN0IFBQVFhfQ09OU1RBTlRfTEVHRU5EOiBMZWdlbmRQb3NpdGlvbiA9ICd0b3AnO1xuXG4vLyBPbmUgbmF0aXZlIGNoYXJ0IHNlcmllczogaXRzIG5hbWUsIGl0cyBmaWxsIGFuZCBpdHMgdmFsdWUgcGVyIGNhdGVnb3J5LiBBXG4vLyBudWxsIGlzIGEgYmxhbmsgcG9pbnQ6IGEgZ2FwIGluIGV2ZXJ5IGF4aXMgY2hhcnQsIG5vdCBvbmx5IHRoZSB3YXRlcmZhbGwsXG4vLyBhbmQgYSB6ZXJvIHdoZXJlIGJhcnMgc3RhY2suXG5pbnRlcmZhY2UgUHB0eENoYXJ0U2VyaWVzIHtcbiAgbmFtZTogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdO1xufVxuXG4vLyBPbmUgbmF0aXZlIGNoYXJ0IG9mIGEgUG93ZXJQb2ludCBjaGFydDogdGhlIHR5cGUgaXQgZHJhd3MsIHdoaWNoIG9mIHRoZVxuLy8gY2hhcnQgZGF0YSdzIHNlcmllcyBpdCBob2xkcyAoYnkgaW5kZXgpLCB3aGV0aGVyIHRoZXkgcGxvdCBhZ2FpbnN0IHRoZVxuLy8gc2Vjb25kYXJ5IHZhbHVlIGF4aXMsIGFuZCB0aGUgb3B0aW9ucyBsYWlkIG92ZXIgdGhlIGNoYXJ0J3MgZm9yIGl0IGFsb25lLlxuaW50ZXJmYWNlIFBwdHhFbnRyeSB7XG4gIHR5cGU6IHN0cmluZztcbiAgaW5kZXhlczogbnVtYmVyW107XG4gIHNlY29uZGFyeTogYm9vbGVhbjtcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIEEgbGluZSBQb3dlclBvaW50IGRyYXdzIGF0IG9uZSB2YWx1ZSB0aGUgd2hvbGUgd2lkdGggb2YgdGhlIHBsb3QsIGFzIGFcbi8vIHNlcmllcyBvZiBpdHMgb3duOiBhIHJlZmVyZW5jZSBsaW5lLCBvbmUgZWRnZSBvZiBhIHJlZmVyZW5jZSBiYW5kLCBvciBhXG4vLyBtZWFzdXJlJ3Mgc3RhdGlzdGljIGxpbmUuIHBwdHhnZW5qcyBoYXMgbm8gbWFya0xpbmUgb3IgbWFya0FyZWEuXG5pbnRlcmZhY2UgUHB0eENvbnN0YW50TGluZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbiAgY29sb3I6IHN0cmluZztcbiAgc2Vjb25kYXJ5OiBib29sZWFuO1xufVxuXG4vLyBUaGUgb3B0aW9ucyBvZiBvbmUgcnVuIG9mIFBvd2VyUG9pbnQgdGV4dC4gUG93ZXJQb2ludCBwcm9vZnMgZXZlcnkgcnVuIGluIGl0c1xuLy8gbGFuZ3VhZ2UsIGFuZCBwcHR4Z2VuanMgd3JpdGVzIGVuLVVTIGZvciBhIHJ1biB0aGF0IG5hbWVzIG5vbmUuIEEgcnVuIHdob3NlXG4vLyB3aG9sZSB0ZXh0IGlzIGEgdmFsdWUgd3JpdHRlbiBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlIChhIEtQSSB2YWx1ZSwgYSBkYXRlXG4vLyBjZWxsLCB0aGUgY292ZXIncyBkYXRlKSBwYXNzZXMgdGhhdCBsb2NhbGUsIHNvIGEgRnJlbmNoIGRhdGUgaXMgbm90IG1hcmtlZFxuLy8gYXMgbWlzc3BlbGxlZCBFbmdsaXNoLiBBdXRob3JlZCBhbmQgaW50ZXJmYWNlIHRleHQgKHRpdGxlcywgbGFiZWxzLFxuLy8gaGVhZGluZ3MsIGZpbHRlciBsaW5lcywgbm90aWNlcykgcGFzc2VzIG5vbmUgYW5kIGtlZXBzIHRoZSBkZWZhdWx0LCBzbyBhblxuLy8gRW5nbGlzaCB0aXRsZSBpbiBhIEZyZW5jaCByZXBvcnQgaXMgbmV2ZXIgcHJvb2ZlZCBhcyBGcmVuY2guXG5leHBvcnQgZnVuY3Rpb24gcHB0eFJ1bk9wdGlvbnMoXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB2YWx1ZUxvY2FsZT86IFJlcG9ydExvY2FsZVRhZyxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHZhbHVlTG9jYWxlID8geyAuLi5vcHRpb25zLCBsYW5nOiB2YWx1ZUxvY2FsZSB9IDogb3B0aW9ucztcbn1cblxuLy8gQnVpbGRzIHRoZSBQb3dlclBvaW50IGRlY2sgY2xpZW50LXNpZGUgd2l0aCBwcHR4Z2VuanMuIENoYXJ0cyBhcmUgTkFUSVZFXG4vLyBlZGl0YWJsZSBQb3dlclBvaW50IGNoYXJ0cyAoc2xpZGUuYWRkQ2hhcnQgd3JpdGVzIHJlYWwgY2hhcnQgWE1MIHdpdGggYW5cbi8vIGVtYmVkZGVkIGRhdGEgd29ya2Jvb2sg4oCUIFwiRWRpdCBEYXRhXCIgd29ya3MpLCBuZXZlciBpbWFnZXMuIFRoZSBwYWdlIElTIHRoZVxuLy8gc2xpZGU6IHRoZSByZXBvcnQncyB1bml0IGlzIGluY2hlcyDigJQgZXhhY3RseSBQb3dlclBvaW50J3MgdW5pdCDigJQgc28gdGhlXG4vLyBsYXlvdXQgYW5kIGV2ZXJ5IGNvbXBvbmVudCBwb3NpdGlvbiB0cmFuc2ZlciB3aXRoIG5vIGNvbnZlcnNpb24gYXQgYWxsLlxuLy8gcHB0eGdlbmpzIGlzIGxvYWRlZCBsYXppbHkgc28gaXQgbGl2ZXMgaW4gaXRzIG93biB3ZWJwYWNrIGNodW5rLlxuLy9cbi8vIEEgdGV4dCBibG9jaydzIHdvcmRzIGFuZCB0YWJsZXMgYXJlIHBsYWNlZCB3aGVyZSB0aGUgY2FudmFzIGxheXMgdGhlbSBvdXRcbi8vIChSZXBvcnRUZXh0TGF5b3V0U2VydmljZSkuIFdvcmRzIHRoYXQgZG8gbm90IGZpdCBhIGJsb2NrJ3MgYm94IHJ1biBvbiBwYXN0XG4vLyBpdHMgYm90dG9tLCBhbmQgdGFibGUgcm93cyBwYXN0IGl0IGFyZSBsZWZ0IG91dCwgc28gYnVpbGQoKSBoYW5kcyB0aGUgZGVja1xuLy8gYmFjayB1bnNhdmVkIHdpdGggdGhlIGJsb2NrcyB0aGF0IGRvIG5vdCBmaXQsIGFuZCB0aGUgZXhwb3J0IGNhbiBhc2sgYWJvdXRcbi8vIHRoZW0gYmVmb3JlIGl0IHNhdmVzLlxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlcG9ydFBwdHhTZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90ZXh0TGF5b3V0ID0gaW5qZWN0KFJlcG9ydFRleHRMYXlvdXRTZXJ2aWNlKTtcblxuICBwdWJsaWMgYXN5bmMgYnVpbGQoY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQpOiBQcm9taXNlPEJ1aWx0RXhwb3J0PiB7XG4gICAgY29uc3QgUHB0eEdlbkpTID0gKGF3YWl0IGltcG9ydCgncHB0eGdlbmpzJykpLmRlZmF1bHQ7XG5cbiAgICBjb25zdCByZXBvcnQgPSBjb2xsZWN0ZWQucmVwb3J0O1xuICAgIGNvbnN0IHBhZ2VXID0gcmVwb3J0LnBhZ2VXaWR0aDtcbiAgICBjb25zdCBwYWdlSCA9IHJlcG9ydC5wYWdlSGVpZ2h0O1xuXG4gICAgY29uc3QgcHB0eCA9IG5ldyBQcHR4R2VuSlMoKTtcbiAgICBwcHR4LmRlZmluZUxheW91dCh7IG5hbWU6ICdSRVBPUlQnLCB3aWR0aDogcGFnZVcsIGhlaWdodDogcGFnZUggfSk7XG4gICAgcHB0eC5sYXlvdXQgPSAnUkVQT1JUJztcbiAgICBwcHR4LnRpdGxlID0gcmVwb3J0Lm5hbWU7XG5cbiAgICB0aGlzLl90aXRsZVNsaWRlKHBwdHgsIGNvbGxlY3RlZCwgcGFnZVcsIHBhZ2VIKTtcblxuICAgIC8vIFRoZSB0ZXh0IGJsb2NrcyB0aGF0IGRvIG5vdCBmaXQgdGhlaXIgYm94LCBieSBjb21wb25lbnQgaWQsIHNvIGEgaGVhZGVyXG4gICAgLy8gb3IgZm9vdGVyIGJsb2NrIGlzIGxpc3RlZCBvbmNlLCBub3Qgb25jZSBwZXIgc2xpZGUuXG4gICAgY29uc3Qgb3ZlcmZsb3dzID0gbmV3IE1hcDxudW1iZXIsIFRleHRPdmVyZmxvdz4oKTtcblxuICAgIGZvciAoY29uc3QgaW5kZXggb2YgY29sbGVjdGVkLnBhZ2VzLmtleXMoKSkge1xuICAgICAgYXdhaXQgdGhpcy5fcmVuZGVyUGFnZShwcHR4LCBjb2xsZWN0ZWQsIGluZGV4LCBvdmVyZmxvd3MpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvdmVyZmxvd3M6IFsuLi5vdmVyZmxvd3MudmFsdWVzKCldLFxuICAgICAgb3ZlcmZsb3dOb3RlOiBQUFRYX09WRVJGTE9XX05PVEUsXG4gICAgICBzYXZlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHBwdHgud3JpdGVGaWxlKHsgZmlsZU5hbWU6IGAke3RoaXMuX3NsdWcocmVwb3J0Lm5hbWUpfS5wcHR4YCB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIE9uZSByZXBvcnQgcGFnZSdzIHNsaWRlLiBUaGUgaGVhZGVyIGFuZCBmb290ZXIgZmlyc3QsIHNvIHRoZSBwYWdlJ3Mgb3duXG4gIC8vIGNvbXBvbmVudHMgc2l0IG9uIHRvcCBvZiB0aGVtIGV4YWN0bHkgYXMgb24gdGhlIGNhbnZhcy4gRWFjaCBsYXllcidzIHRleHRcbiAgLy8gZmlsbHMgaXRzIHZhbHVlIHRva2VucyB3aXRoIHRoYXQgbGF5ZXIncyB2YWx1ZXM6IHRoZSBtYXN0ZXIncyBvciB0aGVcbiAgLy8gcGFnZSdzLlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJQYWdlKFxuICAgIHBwdHg6IGFueSxcbiAgICBjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIG92ZXJmbG93czogTWFwPG51bWJlciwgVGV4dE92ZXJmbG93PixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVwb3J0ID0gY29sbGVjdGVkLnJlcG9ydDtcbiAgICBjb25zdCBjb2xsZWN0ZWRQYWdlID0gY29sbGVjdGVkLnBhZ2VzW2luZGV4XTtcbiAgICBjb25zdCBzbGlkZSA9IHBwdHguYWRkU2xpZGUoKTtcbiAgICBjb25zdCB0b2tlbnMgPSB0aGlzLl90b2tlbnMoY29sbGVjdGVkLCBjb2xsZWN0ZWRQYWdlLnBhZ2UsIGluZGV4KTtcbiAgICBjb25zdCBwYWdlVG9rZW5zID0geyAuLi50b2tlbnMsIHZhbHVlczogY29sbGVjdGVkUGFnZS52YWx1ZXMgfTtcbiAgICBjb25zdCB0aW1lem9uZSA9IHJlc29sdmVSZXBvcnRUaW1lem9uZShyZXBvcnQpO1xuXG4gICAgaWYgKCFjb2xsZWN0ZWRQYWdlLnBhZ2UubWFzdGVySGlkZGVuKSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZW5kZXJNYXN0ZXIoc2xpZGUsIGNvbGxlY3RlZCwgdG9rZW5zLCBvdmVyZmxvd3MpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2xsZWN0ZWRQYWdlLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmIChpdGVtLmNvbXBvbmVudC50eXBlICE9PSAndGV4dCcpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ29tcG9uZW50KHBwdHgsIHNsaWRlLCBpdGVtLCB0b2tlbnMsIHRpbWV6b25lLCBjb2xsZWN0ZWQuZm9ybWF0Q29udGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKGF3YWl0IHRoaXMuX3JlbmRlclRleHQoc2xpZGUsIGl0ZW0uY29tcG9uZW50LCBwYWdlVG9rZW5zKSkge1xuICAgICAgICB0aGlzLl9yZWNvcmRPdmVyZmxvdyhvdmVyZmxvd3MsIGl0ZW0uY29tcG9uZW50LCB0b2tlbnMucGFnZU5hbWUsIHBhZ2VUb2tlbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBoZWFkZXIgYW5kIGZvb3RlciwgdGhlaXIgdmFsdWUgdG9rZW5zIGZpbGxlZCB3aXRoIHRoZSBtYXN0ZXInc1xuICAvLyB2YWx1ZXMuIFRoZXkgcmVhZCBubyBwYWdlIGZpbHRlcjogaXRzIHRva2VuIHByaW50cyB0aGUgZW0gZGFzaCB0aGVyZS5cbiAgcHJpdmF0ZSBhc3luYyBfcmVuZGVyTWFzdGVyKFxuICAgIHNsaWRlOiBhbnksXG4gICAgY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQsXG4gICAgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0LFxuICAgIG92ZXJmbG93czogTWFwPG51bWJlciwgVGV4dE92ZXJmbG93PixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWFzdGVyVG9rZW5zID0ge1xuICAgICAgLi4udG9rZW5zLFxuICAgICAgdmFsdWVzOiBjb2xsZWN0ZWQubWFzdGVyVmFsdWVzLFxuICAgICAgZmlsdGVyczogbGF5ZXJGaWx0ZXJGaWVsZHMoY29sbGVjdGVkLmZpbHRlckZpZWxkcywgY29sbGVjdGVkLnJlcG9ydC5maWx0ZXJHcm91cHMgPz8gW10sIG51bGwpLFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiAoY29sbGVjdGVkLnJlcG9ydC5tYXN0ZXI/LmNvbXBvbmVudHMgPz8gW10pLmZpbHRlcihpc0RyYXduKSkge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuX3JlbmRlclRleHQoc2xpZGUsIGNvbXBvbmVudCwgbWFzdGVyVG9rZW5zKSkge1xuICAgICAgICB0aGlzLl9yZWNvcmRPdmVyZmxvdyhvdmVyZmxvd3MsIGNvbXBvbmVudCwgSEVBREVSX0ZPT1RFUl9OQU1FLCBtYXN0ZXJUb2tlbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIExpc3RzIGEgdGV4dCBibG9jayB0aGF0IGRvZXMgbm90IGZpdCBpdHMgYm94LCB1bmRlciB0aGUgcGFnZSB0aGUgZXhwb3J0J3NcbiAgLy8gb3ZlcmZsb3cgZ2F0ZSBuYW1lcyBpdCBieS4gQSBibG9jayBsaXN0ZWQgb24gYW4gZWFybGllciBzbGlkZSAoYSBoZWFkZXIgb3JcbiAgLy8gZm9vdGVyKSBrZWVwcyB0aGF0IGVudHJ5LlxuICBwcml2YXRlIF9yZWNvcmRPdmVyZmxvdyhcbiAgICBvdmVyZmxvd3M6IE1hcDxudW1iZXIsIFRleHRPdmVyZmxvdz4sXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgcGFnZTogc3RyaW5nLFxuICAgIHRva2VuczogVGV4dFRva2VuQ29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFvdmVyZmxvd3MuaGFzKGNvbXBvbmVudC5pZCkpIHtcbiAgICAgIG92ZXJmbG93cy5zZXQoY29tcG9uZW50LmlkLCB0ZXh0T3ZlcmZsb3coY29tcG9uZW50LCBwYWdlLCB0b2tlbnMpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90aXRsZVNsaWRlKHBwdHg6IGFueSwgY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQsIHBhZ2VXOiBudW1iZXIsIHBhZ2VIOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzbGlkZSA9IHBwdHguYWRkU2xpZGUoKTtcblxuICAgIHNsaWRlLmFkZFRleHQoY29sbGVjdGVkLnJlcG9ydC5uYW1lLCB7XG4gICAgICB4OiAwLjUsIHk6IHBhZ2VIICogMC4zLCB3OiBwYWdlVyAtIDEsIGg6IDAuOCxcbiAgICAgIGZvbnRTaXplOiAzMCwgYm9sZDogdHJ1ZSwgY29sb3I6ICcxRjI5MzMnLFxuICAgIH0pO1xuXG4gICAgLy8gY292ZXJMaW5lcygpIGxlYWRzIHdpdGggdGhlIGV4cG9ydCBkYXRlLCB0aGUgb25lIGxpbmUgd3JpdHRlbiBpbiB0aGVcbiAgICAvLyByZXBvcnQncyBsb2NhbGU7IHRoZSBmaWx0ZXIgYW5kIGNvbnRleHQgbGluZXMgYXJlIGludGVyZmFjZSB0ZXh0LlxuICAgIGNvbnN0IGxpbmVzID0gY292ZXJMaW5lcyhjb2xsZWN0ZWQpO1xuICAgIGNvbnN0IHJ1bnMgPSBsaW5lcy5tYXAoKGxpbmUsIGluZGV4KSA9PiAoe1xuICAgICAgdGV4dDogbGluZSxcbiAgICAgIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKFxuICAgICAgICB7IGJyZWFrTGluZTogaW5kZXggPCBsaW5lcy5sZW5ndGggLSAxIH0sXG4gICAgICAgIGluZGV4ID09PSAwID8gY29sbGVjdGVkLmZvcm1hdENvbnRleHQubG9jYWxlIDogdW5kZWZpbmVkLFxuICAgICAgKSxcbiAgICB9KSk7XG5cbiAgICBzbGlkZS5hZGRUZXh0KHJ1bnMsIHtcbiAgICAgIHg6IDAuNSwgeTogcGFnZUggKiAwLjMgKyAwLjksIHc6IHBhZ2VXIC0gMSwgaDogTWF0aC5tYXgoMC40LCBsaW5lcy5sZW5ndGggKiAwLjI1KSxcbiAgICAgIGZvbnRTaXplOiAxMiwgY29sb3I6ICc1MjYwNkQnLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQSB0ZXh0IGJsb2NrIGFzIG5hdGl2ZSBQb3dlclBvaW50IHRleHQsIGVkaXRhYmxlIGluIHRoZSBkZWNrLCBlYWNoIHJ1blxuICAvLyBjYXJyeWluZyBpdHMgb3duIGJvbGQvaXRhbGljL2NvbG9yL3NpemUuIFRoZSBibG9jayBpcyBtZWFzdXJlZCBhcyB0aGVcbiAgLy8gY2FudmFzIGxheXMgaXQgb3V0IChSZXBvcnRUZXh0TGF5b3V0U2VydmljZSkuIEEgYmxvY2sgd2l0aG91dCBhIHRhYmxlIGlzXG4gIC8vIE9ORSB0ZXh0IGJveCAoX2FkZFRleHRCb3gpLiBBIGJsb2NrIHdpdGggdGFibGVzIGlzIGEgc3RhY2sgaW5zaWRlIGl0c1xuICAvLyBwYWRkaW5nIChfcmVuZGVyVGV4dFN0YWNrKS4gUmV0dXJucyB3aGV0aGVyIGFueXRoaW5nIHJ1bnMgcGFzdCB0aGUgYm90dG9tXG4gIC8vIG9mIHRoZSBib3ggb3Igd2FzIGxlZnQgb3V0LlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJUZXh0KHNsaWRlOiBhbnksIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBodG1sID0gY29tcG9uZW50LmNvbmZpZz8uaHRtbCA/PyAnJztcbiAgICBjb25zdCBibG9ja3MgPSB0ZXh0QmxvY2tzKGh0bWwsIHRva2Vucyk7XG4gICAgY29uc3QgbGF5b3V0ID0gYXdhaXQgdGhpcy5fdGV4dExheW91dC5tZWFzdXJlKGNvbXBvbmVudCwgdG9rZW5zKTtcbiAgICBjb25zdCB0ZXh0Q291bnQgPSBibG9ja3MuZmlsdGVyKChibG9jaykgPT4gYmxvY2sua2luZCA9PT0gJ3RleHQnKS5sZW5ndGg7XG4gICAgY29uc3QgdGFibGVDb3VudCA9IGJsb2Nrcy5sZW5ndGggLSB0ZXh0Q291bnQ7XG5cbiAgICAvLyBUaGUgbWVhc3VyZSBmaW5kcyBhIGJsb2NrJ3MgcGFydHMgb25lIGZvciBvbmUgd2l0aCB0ZXh0QmxvY2tzLCB1bmxlc3MgdGhlXG4gICAgLy8gY2FudmFzIHJlbmRlcmVkIHRoZSBodG1sIGRpZmZlcmVudGx5LiBBIGJsb2NrIHdob3NlIHBhcnRzIGl0IGRpZCBub3RcbiAgICAvLyBmaW5kIGZhbGxzIGJhY2sgdG8gdGhlIG9uZSB0ZXh0IGJveCwgaXRzIHRhYmxlcyByZWFkIGFzIGxpbmVzIG9mIHRleHQuXG4gICAgaWYgKCF0YWJsZUNvdW50IHx8IGxheW91dC50YWJsZXMubGVuZ3RoICE9PSB0YWJsZUNvdW50IHx8IGxheW91dC5zZWdtZW50cy5sZW5ndGggIT09IHRleHRDb3VudCkge1xuICAgICAgdGhpcy5fYWRkVGV4dEJveChzbGlkZSwgY29tcG9uZW50LCBibG9ja1BhcmFncmFwaHMoYmxvY2tzKSk7XG5cbiAgICAgIHJldHVybiBsYXlvdXQub3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlclRleHRTdGFjayhzbGlkZSwgY29tcG9uZW50LCBibG9ja3MsIGxheW91dCkgfHwgbGF5b3V0Lm92ZXJmbG93O1xuICB9XG5cbiAgLy8gVGhlIHdvcmRzIGFzIE9ORSB0ZXh0IGJveCBvdmVyIHRoZSB3aG9sZSBibG9jay4gSXRzIGluc2V0IGlzIHRoZSBibG9jaydzXG4gIC8vIHBhZGRpbmcsIHNvIHRoZSB3b3JkcyBsYW5kIHdoZXJlIHRoZXkgc2F0IG9uIHNjcmVlbi5cbiAgcHJpdmF0ZSBfYWRkVGV4dEJveChzbGlkZTogYW55LCBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgcGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdKTogdm9pZCB7XG4gICAgY29uc3QgcnVucyA9IHRoaXMuX3BhcmFncmFwaFJ1bnMocGFyYWdyYXBocyk7XG4gICAgaWYgKCFydW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZGRpbmcgPSBjb21wb25lbnQuY29uZmlnPy5wYWRkaW5nO1xuICAgIGNvbnN0IGluc2V0ID0gKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpID0+ICh2YWx1ZSA/PyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HKSAqIDcyO1xuXG4gICAgc2xpZGUuYWRkVGV4dChydW5zLCB7XG4gICAgICB4OiBjb21wb25lbnQueCwgeTogY29tcG9uZW50LnksIHc6IGNvbXBvbmVudC53LCBoOiBjb21wb25lbnQuaCxcbiAgICAgIHZhbGlnbjogJ3RvcCcsXG4gICAgICBmb250RmFjZTogJ0FyaWFsJyxcbiAgICAgIG1hcmdpbjogW2luc2V0KHBhZGRpbmc/LmxlZnQpLCBpbnNldChwYWRkaW5nPy5yaWdodCksIGluc2V0KHBhZGRpbmc/LmJvdHRvbSksIGluc2V0KHBhZGRpbmc/LnRvcCldLFxuICAgICAgZml0OiAnbm9uZScsXG4gICAgfSk7XG4gIH1cblxuICAvLyBBIGJsb2NrIHdpdGggdGFibGVzIGFzIGEgc3RhY2sgaW5zaWRlIGl0cyBwYWRkaW5nOiBhIHRleHQgYm94IGZvciB0aGVcbiAgLy8gd29yZHMgYmVmb3JlLCBiZXR3ZWVuIGFuZCBhZnRlciBpdHMgdGFibGVzLCBhbmQgYSBuYXRpdmUgdGFibGUgZm9yIGVhY2hcbiAgLy8gdGFibGUsIGVhY2ggYXQgdGhlIHRvcCB0aGUgY2FudmFzIGdpdmVzIGl0LiBQb3dlclBvaW50IHNwYWNlcyBsaW5lcyBhXG4gIC8vIGxpdHRsZSBkaWZmZXJlbnRseSBmcm9tIHRoZSBjYW52YXMsIHNvIHBsYWNpbmcgZXZlcnkgcGFydCBhZnJlc2gga2VlcHNcbiAgLy8gdGhhdCBkcmlmdCBmcm9tIGFkZGluZyB1cCBkb3duIHRoZSBibG9jay4gUmV0dXJucyB3aGV0aGVyIGFueSBwYXJ0IHdhc1xuICAvLyBsZWZ0IG91dC5cbiAgcHJpdmF0ZSBfcmVuZGVyVGV4dFN0YWNrKFxuICAgIHNsaWRlOiBhbnksXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgYmxvY2tzOiBUZXh0QmxvY2tbXSxcbiAgICBsYXlvdXQ6IFRleHRCbG9ja0xheW91dCxcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFkZGluZyA9IGNvbXBvbmVudC5jb25maWc/LnBhZGRpbmc7XG4gICAgY29uc3QgeCA9IGNvbXBvbmVudC54ICsgKHBhZGRpbmc/LmxlZnQgPz8gREVGQVVMVF9DT01QT05FTlRfUEFERElORyk7XG4gICAgY29uc3QgeSA9IGNvbXBvbmVudC55ICsgKHBhZGRpbmc/LnRvcCA/PyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HKTtcbiAgICBsZXQgc2VnbWVudEluZGV4ID0gMDtcbiAgICBsZXQgdGFibGVJbmRleCA9IDA7XG4gICAgbGV0IGZsYWdnZWQgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgYmxvY2sgb2YgYmxvY2tzKSB7XG4gICAgICBjb25zdCBsZWZ0T3V0ID0gYmxvY2sua2luZCA9PT0gJ3RleHQnXG4gICAgICAgID8gdGhpcy5fYWRkVGV4dFNlZ21lbnQoc2xpZGUsIGJsb2NrLnBhcmFncmFwaHMsIGxheW91dC5zZWdtZW50c1tzZWdtZW50SW5kZXgrK10sIGxheW91dCwgeCwgeSlcbiAgICAgICAgOiB0aGlzLl9hZGRUZXh0VGFibGUoc2xpZGUsIGJsb2NrLnRhYmxlLCBsYXlvdXQudGFibGVzW3RhYmxlSW5kZXgrK10sIGxheW91dCwgeCwgeSk7XG5cbiAgICAgIGZsYWdnZWQgPSBmbGFnZ2VkIHx8IGxlZnRPdXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYWdnZWQ7XG4gIH1cblxuICAvLyBUaGUgd29yZHMgYmV0d2VlbiB0d28gdGFibGVzIChvciBiZWZvcmUgdGhlIGZpcnN0LCBvciBhZnRlciB0aGUgbGFzdCkgYXNcbiAgLy8gYSB0ZXh0IGJveCBmcm9tIHRoZSB0b3Agb2YgdGhlaXIgZmlyc3QgbGluZSB0byB0aGUgYm90dG9tIG9mIHRoZWlyIGxhc3QsXG4gIC8vIGFzIHdpZGUgYXMgdGhlIGJsb2NrJ3MgY29udGVudC4gQSBzdHJldGNoIHRoYXQgZHJhd3Mgbm90aGluZyBpcyBza2lwcGVkLFxuICAvLyBhbmQgb25lIHRoYXQgc3RhcnRzIGJlbG93IHRoZSBib3ggaXMgbGVmdCBvdXQuIFJldHVybnMgd2hldGhlciBpdCB3YXMuXG4gIHByaXZhdGUgX2FkZFRleHRTZWdtZW50KFxuICAgIHNsaWRlOiBhbnksXG4gICAgcGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdLFxuICAgIHNlZ21lbnQ6IFRleHRTZWdtZW50TGF5b3V0IHwgbnVsbCxcbiAgICBsYXlvdXQ6IFRleHRCbG9ja0xheW91dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlcixcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFzZWdtZW50IHx8ICFwYXJhZ3JhcGhzLnNvbWUoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJ1bnMubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzZWdtZW50LnRvcCA+PSBsYXlvdXQuY29udGVudEhlaWdodCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2xpZGUuYWRkVGV4dCh0aGlzLl9wYXJhZ3JhcGhSdW5zKHBhcmFncmFwaHMpLCB7XG4gICAgICB4LCB5OiB5ICsgc2VnbWVudC50b3AsIHc6IGxheW91dC5jb250ZW50V2lkdGgsIGg6IE1hdGgubWF4KFRFWFRfU0VHTUVOVF9NSU5fSCwgc2VnbWVudC5ib3R0b20gLSBzZWdtZW50LnRvcCksXG4gICAgICBtYXJnaW46IDAsXG4gICAgICB2YWxpZ246ICd0b3AnLFxuICAgICAgZm9udEZhY2U6ICdBcmlhbCcsXG4gICAgICBmaXQ6ICdub25lJyxcbiAgICB9KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEEgdGFibGUgYXMgYSBuYXRpdmUsIGVkaXRhYmxlIFBvd2VyUG9pbnQgdGFibGUgd2hlcmUgdGhlIGNhbnZhcyBwdXRzIGl0LFxuICAvLyBpbiBpdHMgY29sdW1uIHdpZHRocyBhbmQgcm93IGhlaWdodHMsIGluIHRoZSBvbmUgbG9vayBldmVyeSByZW5kZXJlclxuICAvLyBkcmF3cyAoVEVYVF9UQUJMRV8qIGluIHRleHQudHMpLiBPbmx5IHRoZSByb3dzIHRoYXQgZW5kIGluc2lkZSB0aGUgYm94IGFyZVxuICAvLyBrZXB0LiBSZXR1cm5zIHdoZXRoZXIgYW55IHJvdyB3YXMgbGVmdCBvdXQuXG4gIHByaXZhdGUgX2FkZFRleHRUYWJsZShcbiAgICBzbGlkZTogYW55LFxuICAgIHRhYmxlOiBUZXh0VGFibGUsXG4gICAgdGFibGVMYXlvdXQ6IFRleHRUYWJsZUxheW91dCxcbiAgICBsYXlvdXQ6IFRleHRCbG9ja0xheW91dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlcixcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2VwdCA9IHRoaXMuX2tlcHRSb3dzKHRhYmxlTGF5b3V0LCBsYXlvdXQuY29udGVudEhlaWdodCk7XG5cbiAgICBpZiAoa2VwdCkge1xuICAgICAgc2xpZGUuYWRkVGFibGUodGhpcy5fdGFibGVSb3dzKHRhYmxlLCBrZXB0KSwge1xuICAgICAgICB4OiB4ICsgdGFibGVMYXlvdXQubGVmdCxcbiAgICAgICAgeTogeSArIHRhYmxlTGF5b3V0LnRvcCxcbiAgICAgICAgdzogdGFibGVMYXlvdXQud2lkdGgsXG4gICAgICAgIGNvbFc6IHRhYmxlTGF5b3V0LmNvbHVtbldpZHRocyxcbiAgICAgICAgcm93SDogdGFibGVMYXlvdXQucm93SGVpZ2h0cy5zbGljZSgwLCBrZXB0KSxcbiAgICAgICAgYXV0b1BhZ2U6IGZhbHNlLFxuICAgICAgICBmb250RmFjZTogJ0FyaWFsJyxcbiAgICAgICAgZm9udFNpemU6IERFRkFVTFRfVEVYVF9TSVpFLFxuICAgICAgICBjb2xvcjogREVGQVVMVF9URVhUX0NPTE9SLnJlcGxhY2UoJyMnLCAnJyksXG4gICAgICAgIGJvcmRlcjogeyB0eXBlOiAnc29saWQnLCBwdDogVEVYVF9UQUJMRV9CT1JERVJfV0lEVEgsIGNvbG9yOiBURVhUX1RBQkxFX0JPUkRFUl9DT0xPUi5yZXBsYWNlKCcjJywgJycpIH0sXG4gICAgICAgIG1hcmdpbjogVEVYVF9UQUJMRV9DRUxMX01BUkdJTixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBrZXB0IDwgdGFibGUucm93cy5sZW5ndGg7XG4gIH1cblxuICAvLyBIb3cgbWFueSBvZiBhIHRhYmxlJ3Mgcm93cywgZnJvbSB0aGUgdG9wLCBlbmQgaW5zaWRlIHRoZSBib3guXG4gIHByaXZhdGUgX2tlcHRSb3dzKHRhYmxlTGF5b3V0OiBUZXh0VGFibGVMYXlvdXQsIGNvbnRlbnRIZWlnaHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGJvdHRvbSA9IHRhYmxlTGF5b3V0LnRvcDtcbiAgICBsZXQga2VwdCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHJvd0hlaWdodCBvZiB0YWJsZUxheW91dC5yb3dIZWlnaHRzKSB7XG4gICAgICBib3R0b20gKz0gcm93SGVpZ2h0O1xuICAgICAgaWYgKGJvdHRvbSA+IGNvbnRlbnRIZWlnaHQgKyBPVkVSRkxPV19TTEFDSykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAga2VwdCsrO1xuICAgIH1cblxuICAgIHJldHVybiBrZXB0O1xuICB9XG5cbiAgLy8gVGhlIGtlcHQgcm93cyBhcyBwcHR4Z2VuanMgY2VsbHMsIGVhY2ggcm93IGluIGdyaWQgb3JkZXIuIEEgUG93ZXJQb2ludFxuICAvLyB0YWJsZSBpcyBhIGZ1bGwgZ3JpZCwgYW5kIHBwdHhnZW5qcyBjb3VudHMgaXRzIGNvbHVtbnMgb24gdGhlIGZpcnN0IHJvd1xuICAvLyBhbmQgc2xpcHMgYSBtZXJnZWQgY2VsbCdzIGNvbnRpbnVhdGlvbiBpbnRvIHRoZSByb3cgYmVsb3cgYXQgdGhhdCBjZWxsJ3NcbiAgLy8gcGxhY2UgaW4gaXRzIG93biByb3cuIFNvIGEgY2VsbCBpcyB3cml0dGVuIGluIGl0cyB0b3AgbGVmdCBzbG90IG9ubHksIGFcbiAgLy8gc2xvdCBubyBjZWxsIGhvbGRzIGdldHMgYW4gZW1wdHkgY2VsbCwgYW5kIGEgY2VsbCdzIHNwYW5zIGVuZCB3aGVyZSB0aGV5XG4gIC8vIHdvdWxkIHJlYWNoIHBhc3QgdGhlIGtlcHQgcm93cyBvciBpbnRvIGEgc2xvdCBhbm90aGVyIGNlbGwgaG9sZHNcbiAgLy8gKGNsYWltU2xvdHMpLlxuICBwcml2YXRlIF90YWJsZVJvd3ModGFibGU6IFRleHRUYWJsZSwga2VwdDogbnVtYmVyKTogYW55W11bXSB7XG4gICAgY29uc3Qgc2xvdHM6IChUZXh0VGFibGVDZWxsIHwgbnVsbClbXVtdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDoga2VwdCB9LCAoKSA9PiBBcnJheSh0YWJsZS5jb2x1bW5zKS5maWxsKG51bGwpKTtcbiAgICB0YWJsZS5yb3dzLnNsaWNlKDAsIGtlcHQpLmZvckVhY2goKHJvdykgPT4gcm93LmNlbGxzLmZvckVhY2goKGNlbGwpID0+IGNsYWltU2xvdHMoc2xvdHMsIGNlbGwpKSk7XG5cbiAgICByZXR1cm4gc2xvdHMubWFwKChyb3csIHJvd0luZGV4KSA9PiByb3cuZmxhdE1hcCgoY2VsbCwgY29sdW1uKSA9PiB7XG4gICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgcmV0dXJuIFt7IHRleHQ6ICcnIH1dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2VsbC5yb3cgPT09IHJvd0luZGV4ICYmIGNlbGwuY29sdW1uID09PSBjb2x1bW4gPyBbdGhpcy5fdGFibGVDZWxsKGNlbGwpXSA6IFtdO1xuICAgIH0pKTtcbiAgfVxuXG4gIC8vIEEgdGV4dCB0YWJsZSdzIGNlbGw6IGl0cyB3b3JkcywgaXRzIHNwYW5zLCBpdHMgZmlsbCBhbmQgaXRzIGFsaWdubWVudC4gQVxuICAvLyBoZWFkZXIgY2VsbCdzIHJ1bnMgYXJlIGFscmVhZHkgYm9sZCAocGFyc2VUYWJsZSksIHNvIGEgcnVuIGl0cyBodG1sIHNldHNcbiAgLy8gaW4gYSBub3JtYWwgd2VpZ2h0IHN0YXlzIHRoYXQgd2F5LlxuICBwcml2YXRlIF90YWJsZUNlbGwoY2VsbDogVGV4dFRhYmxlQ2VsbCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBydW5zID0gdGhpcy5fcGFyYWdyYXBoUnVucyhjZWxsLnBhcmFncmFwaHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFuIGVtcHR5IGNlbGwgc3RpbGwgbmVlZHMgaXRzIG9uZSBlbXB0eSBwYXJhZ3JhcGguXG4gICAgICB0ZXh0OiBydW5zLmxlbmd0aCA/IHJ1bnMgOiAnJyxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY29sc3BhbjogY2VsbC5jb2xTcGFuLFxuICAgICAgICByb3dzcGFuOiBjZWxsLnJvd1NwYW4sXG4gICAgICAgIGZpbGw6IGNlbGwuZmlsbCA/IHsgY29sb3I6IGNlbGwuZmlsbC5yZXBsYWNlKCcjJywgJycpIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIGFsaWduOiBjZWxsLmFsaWduLFxuICAgICAgICB2YWxpZ246IGNlbGwudmFsaWduID8/ICdtaWRkbGUnLFxuICAgICAgICBtYXJnaW46IFRFWFRfVEFCTEVfQ0VMTF9NQVJHSU4sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBQYXJhZ3JhcGhzIGFzIHRoZSBydW5zIG9mIG9uZSBuYXRpdmUgdGV4dCBib2R5LCBlYWNoIHJ1biBpbiBpdHMgb3duXG4gIC8vIHN0eWxlLCBhIGxpbmUgYnJlYWsgYWZ0ZXIgZWFjaCBwYXJhZ3JhcGggYnV0IHRoZSBsYXN0LiBBbiBlbXB0eSBwYXJhZ3JhcGhcbiAgLy8gaXMgYSBibGFuayBsaW5lLiBUZXh0IGJveGVzIGFuZCB0YWJsZSBjZWxscyB0YWtlIHRoZSBzYW1lIHJ1bnMuXG4gIHByaXZhdGUgX3BhcmFncmFwaFJ1bnMocGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdKTogYW55W10ge1xuICAgIHJldHVybiBwYXJhZ3JhcGhzLmZsYXRNYXAoKHBhcmFncmFwaCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBwYXJhZ3JhcGhzLmxlbmd0aCAtIDE7XG4gICAgICBjb25zdCBwYXJhZ3JhcGhPcHRpb25zID0ge1xuICAgICAgICBhbGlnbjogcGFyYWdyYXBoLmFsaWduLFxuICAgICAgICBidWxsZXQ6IHBhcmFncmFwaC5idWxsZXQgPT09ICdudW1iZXInXG4gICAgICAgICAgPyB7IHR5cGU6ICdudW1iZXInIH1cbiAgICAgICAgICA6IChwYXJhZ3JhcGguYnVsbGV0ID09PSAnYnVsbGV0JyA/IHRydWUgOiB1bmRlZmluZWQpLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJ1bnM6IFRleHRSdW5bXSA9IHBhcmFncmFwaC5ydW5zLmxlbmd0aCA/IHBhcmFncmFwaC5ydW5zIDogW3sgdGV4dDogJycgfV07XG5cbiAgICAgIHJldHVybiBydW5zLm1hcCgocnVuLCBydW5JbmRleCkgPT4gKHtcbiAgICAgICAgdGV4dDogcnVuLnRleHQsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuX3J1bk9wdGlvbnMocnVuLCBwYXJhZ3JhcGhPcHRpb25zLCBydW5JbmRleCA9PT0gcnVucy5sZW5ndGggLSAxICYmICFpc0xhc3QpLFxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gT25lIHJ1bidzIG9wdGlvbnM6IGl0cyBvd24gc3R5bGUgb3ZlciBpdHMgcGFyYWdyYXBoJ3MgYWxpZ25tZW50IGFuZFxuICAvLyBidWxsZXQsIGFuZCBhIGxpbmUgYnJlYWsgd2hlbiBpdCBlbmRzIGEgcGFyYWdyYXBoIHRoYXQgaXMgbm90IHRoZSBsYXN0LlxuICBwcml2YXRlIF9ydW5PcHRpb25zKFxuICAgIHJ1bjogVGV4dFJ1bixcbiAgICBwYXJhZ3JhcGhPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBicmVha0xpbmU6IGJvb2xlYW4sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGFyYWdyYXBoT3B0aW9ucyxcbiAgICAgIGJvbGQ6IHJ1bi5ib2xkLFxuICAgICAgaXRhbGljOiBydW4uaXRhbGljLFxuICAgICAgdW5kZXJsaW5lOiBydW4udW5kZXJsaW5lID8geyBzdHlsZTogJ3NuZycgfSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmlrZTogcnVuLnN0cmlrZSA/ICdzbmdTdHJpa2UnIDogdW5kZWZpbmVkLFxuICAgICAgY29sb3I6IChydW4uY29sb3IgPz8gREVGQVVMVF9URVhUX0NPTE9SKS5yZXBsYWNlKCcjJywgJycpLFxuICAgICAgaGlnaGxpZ2h0OiBydW4uaGlnaGxpZ2h0Py5yZXBsYWNlKCcjJywgJycpLFxuICAgICAgZm9udFNpemU6IHJ1bi5mb250U2l6ZSA/PyBERUZBVUxUX1RFWFRfU0laRSxcbiAgICAgIGZvbnRGYWNlOiBydW4uZm9udEZhY2UsXG4gICAgICBoeXBlcmxpbms6IHJ1bi5saW5rID8geyB1cmw6IHJ1bi5saW5rIH0gOiB1bmRlZmluZWQsXG4gICAgICBicmVha0xpbmUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFdoYXQgdGhlIHRva2VucyBvZiBhIHRleHQgYmxvY2sgYW5kIG9mIGEgdGlsZSdzIHRpdGxlIGZpbGwgd2l0aCBvbiB0aGlzXG4gIC8vIHNsaWRlOiB0aGUgcGFnZSdzIHBvc2l0aW9uIGFtb25nIHRoZSByZXBvcnQncyBwYWdlcyDigJQgdGhlIHRpdGxlIHNsaWRlIGlzXG4gIC8vIG5vdCBhIHJlcG9ydCBwYWdlIOKAlCBhbmQgdGhlIHJlcG9ydCdzIGZpbHRlcnMgd2l0aCB0aGUgcGFnZSdzIG93biBwYWdlXG4gIC8vIGZpbHRlcnMgKGxheWVyRmlsdGVyRmllbGRzKS5cbiAgcHJpdmF0ZSBfdG9rZW5zKGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0LCBwYWdlOiBSZXBvcnRQYWdlLCBpbmRleDogbnVtYmVyKTogVGV4dFRva2VuQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VOdW1iZXI6IGluZGV4ICsgMSxcbiAgICAgIHBhZ2VOYW1lOiBwYWdlLm5hbWUgfHwgYFBhZ2UgJHtpbmRleCArIDF9YCxcbiAgICAgIHJlcG9ydE5hbWU6IGNvbGxlY3RlZC5yZXBvcnQubmFtZSxcbiAgICAgIGZpbHRlcnM6IGxheWVyRmlsdGVyRmllbGRzKGNvbGxlY3RlZC5maWx0ZXJGaWVsZHMsIGNvbGxlY3RlZC5yZXBvcnQuZmlsdGVyR3JvdXBzID8/IFtdLCBwYWdlLmlkKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSB0aWxlIG9uIGl0cyBzbGlkZSwgaXRzIHRpdGxlJ3MgdG9rZW5zIGZpbGxlZCB3aXRoIHRoZSBzbGlkZSdzIHBhZ2UuXG4gIHByaXZhdGUgX3JlbmRlckNvbXBvbmVudChcbiAgICBwcHR4OiBhbnksXG4gICAgc2xpZGU6IGFueSxcbiAgICBpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsXG4gICAgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0LFxuICAgIHRpbWV6b25lOiBzdHJpbmcsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gaXRlbS5jb21wb25lbnQ7XG4gICAgLy8gR2VvbWV0cnkgaXMgaW4gaW5jaGVzIOKAlCBQb3dlclBvaW50J3MgbmF0aXZlIHVuaXQuXG4gICAgY29uc3QgeyB4LCB5LCB3LCBoIH0gPSBjb21wb25lbnQ7XG5cbiAgICBjb25zdCB0aXRsZSA9IGV4cG9ydFRpdGxlKGNvbXBvbmVudCwgdG9rZW5zLCBpdGVtLnNlYXJjaCwgaXRlbS5jcnVtYnMsIGl0ZW0uZmlsdGVyZWQpO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgc2xpZGUuYWRkVGV4dCh0aXRsZSwge1xuICAgICAgICB4LCB5LCB3LCBoOiBUSVRMRV9ILFxuICAgICAgICBmb250U2l6ZTogMTAsIGJvbGQ6IHRydWUsIGNvbG9yOiAnMUYyOTMzJywgdmFsaWduOiAndG9wJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEEgY2hhcnQgb3IgbGlzdCB0aGF0IGNvbXBhcmVzIG9yIGhhcyBhIHRpbWVmcmFtZSBuYW1lcyBpdHMgZGF5cyB1bmRlclxuICAgIC8vIHRoZSB0aXRsZSwgYW5kIGl0cyBub3RlcyBzaXQgYXQgdGhlIGZvb3Qgb2YgaXRzIGJveDsgYSBLUEkgY2FyZCBkcmF3c1xuICAgIC8vIGJvdGggaXRzZWxmLiBOZWl0aGVyIHRha2VzIHJvb20gZnJvbSBhIGNvbXBvbmVudCB3aXRob3V0IHRob3NlIGtleXMuXG4gICAgY29uc3Qgc3VidGl0bGUgPSBleHBvcnRXaW5kb3dzTGluZShpdGVtLCB0aW1lem9uZSwgY29udGV4dC5sb2NhbGUpO1xuICAgIGNvbnN0IG5vdGVzID0gY29tcG9uZW50LnR5cGUgPT09ICdrcGknID8gW10gOiBleHBvcnROb3RlTGluZXMoaXRlbSwgdGltZXpvbmUsIGNvbnRleHQubG9jYWxlKTtcbiAgICBjb25zdCB0b3AgPSB5ICsgVElUTEVfSCArIChzdWJ0aXRsZSA/IFNVQlRJVExFX0ggOiAwKTtcbiAgICBjb25zdCByb29tID0gTWF0aC5tYXgoMC4zLCB5ICsgaCAtIHRvcCk7XG4gICAgY29uc3Qga2VwdCA9IG5vdGVzLnNsaWNlKDAsIE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKHJvb20gLSBNSU5fQk9EWV9IKSAvIE5PVEVfTElORV9IKSkpO1xuXG4gICAgaWYgKHN1YnRpdGxlKSB7XG4gICAgICBzbGlkZS5hZGRUZXh0KHRoaXMuX2ZpdEVzdGltYXRlKHN1YnRpdGxlLCBTTUFMTF9GT05UX1NJWkUsIHcpLCB7XG4gICAgICAgIHgsIHk6IHkgKyBUSVRMRV9ILCB3LCBoOiBTVUJUSVRMRV9ILFxuICAgICAgICBmb250U2l6ZTogU01BTExfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsIHZhbGlnbjogJ3RvcCcsIG1hcmdpbjogMCwgZml0OiAnbm9uZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5WSA9IHRvcDtcbiAgICBjb25zdCBib2R5SCA9IE1hdGgubWF4KDAuMywgcm9vbSAtIGtlcHQubGVuZ3RoICogTk9URV9MSU5FX0gpO1xuXG4gICAgaWYgKGtlcHQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBub3RlTGluZXMgPSBrZXB0Lm1hcCgobm90ZSkgPT4gdGhpcy5fZml0RXN0aW1hdGUobm90ZSwgU01BTExfRk9OVF9TSVpFLCB3KSk7XG5cbiAgICAgIHNsaWRlLmFkZFRleHQodGhpcy5fbGluZVJ1bnMobm90ZUxpbmVzLCB7IGl0YWxpYzogdHJ1ZSB9KSwge1xuICAgICAgICB4LCB5OiBib2R5WSArIGJvZHlILCB3LCBoOiBrZXB0Lmxlbmd0aCAqIE5PVEVfTElORV9ILFxuICAgICAgICBmb250U2l6ZTogU01BTExfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsIHZhbGlnbjogJ3RvcCcsIG1hcmdpbjogMCwgZml0OiAnbm9uZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWl0ZW0uZGF0YSB8fCBpc0VtcHR5VGlsZShpdGVtKSkge1xuICAgICAgc2xpZGUuYWRkVGV4dChlbXB0eUxhYmVsKGl0ZW0pLCB7XG4gICAgICAgIHgsIHk6IGJvZHlZLCB3LCBoOiBib2R5SCxcbiAgICAgICAgZm9udFNpemU6IDEwLCBpdGFsaWM6IHRydWUsIGNvbG9yOiBNVVRFRF9DT0xPUiwgYWxpZ246ICdjZW50ZXInLCB2YWxpZ246ICdtaWRkbGUnLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XG4gICAgICBjYXNlICdjaGFydCc6XG4gICAgICAgIHRoaXMuX3JlbmRlckNoYXJ0KHBwdHgsIHNsaWRlLCBjb21wb25lbnQsIGl0ZW0uZGF0YSwgY29udGV4dCwgeCwgYm9keVksIHcsIGJvZHlIKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgdGhpcy5fcmVuZGVyVGFibGUoc2xpZGUsIGNvbXBvbmVudCwgaXRlbS5kYXRhLCBpdGVtLmhpZGRlbkNvbHVtbnMsIHRpbWV6b25lLCBjb250ZXh0LCB4LCBib2R5WSwgdywgYm9keUgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dyaWQnOlxuICAgICAgICB0aGlzLl9yZW5kZXJHcmlkVGFibGUoc2xpZGUsIGl0ZW0sIGNvbnRleHQsIHgsIGJvZHlZLCB3LCBib2R5SCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAna3BpJzpcbiAgICAgICAgdGhpcy5fcmVuZGVyS3BpKHBwdHgsIHNsaWRlLCBpdGVtLCB0aW1lem9uZSwgY29udGV4dCwgeCwgYm9keVksIHcsIGJvZHlIKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8gTGluZXMgb2Ygb25lIHRleHQgYm94LCBlYWNoIGl0cyBvd24gcGFyYWdyYXBoLlxuICBwcml2YXRlIF9saW5lUnVucyhsaW5lczogcmVhZG9ubHkgc3RyaW5nW10sIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGxpbmVzLm1hcCgobGluZSwgaW5kZXgpID0+ICh7IHRleHQ6IGxpbmUsIG9wdGlvbnM6IHsgLi4ub3B0aW9ucywgYnJlYWtMaW5lOiBpbmRleCA8IGxpbmVzLmxlbmd0aCAtIDEgfSB9KSk7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJDaGFydChcbiAgICBwcHR4OiBhbnksXG4gICAgc2xpZGU6IGFueSxcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgICBkYXRhOiBDb21wb25lbnREYXRhLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBjb21wb25lbnQuY29uZmlnIGFzIENoYXJ0Q29uZmlnO1xuICAgIGNvbnN0IGNoYXJ0VHlwZSA9IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2Jhcic7XG5cbiAgICBpZiAoY2hhcnRUeXBlID09PSAnd2F0ZXJmYWxsJykge1xuICAgICAgdGhpcy5fcmVuZGVyV2F0ZXJmYWxsKHBwdHgsIHNsaWRlLCBjb21wb25lbnQsIGRhdGEsIGNvbnRleHQsIHgsIHksIHcsIGgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG5cbiAgICBjb25zdCB0eXBlTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgYmFyOiBwcHR4LkNoYXJ0VHlwZS5iYXIsXG4gICAgICBsaW5lOiBwcHR4LkNoYXJ0VHlwZS5saW5lLFxuICAgICAgYXJlYTogcHB0eC5DaGFydFR5cGUuYXJlYSxcbiAgICAgIHBpZTogcHB0eC5DaGFydFR5cGUucGllLFxuICAgICAgZG9udXQ6IHBwdHguQ2hhcnRUeXBlLmRvdWdobnV0LFxuICAgIH07XG5cbiAgICBjb25zdCBwaWUgPSBjaGFydFR5cGUgPT09ICdwaWUnIHx8IGNoYXJ0VHlwZSA9PT0gJ2RvbnV0JztcbiAgICBjb25zdCBjb2xvckJ5ID0gaXNDb2xvckJ5KGNvbmZpZyk7XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5fY2F0ZWdvcnlMYWJlbHMoXG4gICAgICBleHRyYWN0ZWQuY2F0ZWdvcmllcyxcbiAgICAgIGRhdGEuZ3JhbnVsYXJpdHksXG4gICAgICBjb250ZXh0LmxvY2FsZSxcbiAgICAgIGNoYXJ0RGF0ZUxhYmVsKGNvbmZpZyksXG4gICAgKTtcbiAgICAvLyBBIDEwMCUgc3RhY2tlZCBjaGFydCdzIHByaW1hcnkgYmFycyBhbmQgYXJlYXMgcGxvdCB0aGUgc2hhcmVzIHRoZSBzY3JlZW5cbiAgICAvLyBkcmF3cywgc3RhY2tlZDogUG93ZXJQb2ludCdzIG93biBwZXJjZW50U3RhY2tlZCBncm91cGluZyBpcyBkcm9wcGVkIG9uIGFuXG4gICAgLy8gYXJlYSBjaGFydCwgc28gb25lIHJ1bGUgY292ZXJzIGJvdGguIFRoZSBkYXRhIHNoZWV0IGhvbGRzIHRoZSBzaGFyZXM7XG4gICAgLy8gdGhlIENTViBrZWVwcyB0aGUgcmF3IHZhbHVlcy5cbiAgICBjb25zdCBzaGFyZXMgPSBwZXJjZW50U3RhY2tlZFNoYXJlcyhleHRyYWN0ZWQsIGNvbmZpZyk7XG5cbiAgICAvLyBOYXRpdmUgY2hhcnQgZGF0YTogb25lIGVudHJ5IHBlciBzZXJpZXMgKHBpZSBjaGFydHMgdGFrZSBleGFjdGx5IG9uZSkuXG4gICAgLy8gY29sb3JCeSBlbWl0cyBvbmUgc2VyaWVzIHBlciBjYXRlZ29yeSBmb3IgdGhlIG9uLXNjcmVlbiBvdmVybGFwOyBQb3dlclBvaW50XG4gICAgLy8gaGFzIG5vIGVxdWl2YWxlbnQgb3ZlcmxhcCwgc28gY29sbGFwc2UgdGhlbSBiYWNrIGludG8gYSBzaW5nbGUgc2VyaWVzIChlYWNoXG4gICAgLy8gY2F0ZWdvcnkncyB2YWx1ZSBzaXRzIGF0IGl0cyBvd24gc2xvdCkg4oCUIG9uZSBmdWxsLXdpZHRoIGJhciBwZXIgY2F0ZWdvcnkg4oCUXG4gICAgLy8gcmF0aGVyIHRoYW4gbGV0dGluZyBQb3dlclBvaW50IGNsdXN0ZXIgdGhlbSBpbnRvIHNsaXZlcnMuXG4gICAgY29uc3QgbWVhc3VyZURhdGEgPSBjb2xvckJ5XG4gICAgICA/IFt7XG4gICAgICAgIG5hbWU6IGNvbmZpZy5tZWFzdXJlcz8uWzBdPy5sYWJlbCA/PyBjb25maWcuY29sb3JCeT8ubGFiZWwgPz8gJycsXG4gICAgICAgIGxhYmVscyxcbiAgICAgICAgdmFsdWVzOiBjb2xvckJ5VmFsdWVzKGV4dHJhY3RlZCksXG4gICAgICB9XVxuICAgICAgOiAocGllID8gZXh0cmFjdGVkLnNlcmllcy5zbGljZSgwLCAxKSA6IGV4dHJhY3RlZC5zZXJpZXMpXG4gICAgICAgIC5tYXAoKHNlcmllcywgaW5kZXgpID0+ICh7XG4gICAgICAgICAgbmFtZTogc2VyaWVzLm5hbWUsXG4gICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgIC8vIEEgcGllIGtlZXBzIHRoZSAwIHRoZSBzY3JlZW4ncyBwaWUgdXNlczsgYW4gYXhpcyBjaGFydCBrZWVwcyBpdHNcbiAgICAgICAgICAvLyBudWxsIHNvIHRoZSBwb2ludCBpcyBhIGdhcC5cbiAgICAgICAgICB2YWx1ZXM6IHBpZSA/IHNlcmllcy52YWx1ZXMubWFwKCh2YWx1ZSkgPT4gdmFsdWUgPz8gMCkgOiAoc2hhcmVzPy5nZXQoaW5kZXgpID8/IHNlcmllcy52YWx1ZXMpLFxuICAgICAgICB9KSk7XG5cbiAgICAvLyBUaGUgdHlwZSBlYWNoIGNoYXJ0RGF0YSBlbnRyeSBpcyBkcmF3biBhcy4gQSBwaWUgaXMgb25lIGVudHJ5IG9mIGl0cyBvd25cbiAgICAvLyB0eXBlOyBjb2xvckJ5IGNvbGxhcHNlZCBpdHMgc2VyaWVzIGludG8gb25lLCBkcmF3biBhcyB0aGUgbG9uZSBtZWFzdXJlJ3MuXG4gICAgY29uc3Qgc2VyaWVzRGF0YVR5cGVzOiBzdHJpbmdbXSA9IHBpZVxuICAgICAgPyBbY2hhcnRUeXBlXVxuICAgICAgOiBzZXJpZXNUeXBlcyhleHRyYWN0ZWQsIGNoYXJ0VHlwZSkuc2xpY2UoMCwgY29sb3JCeSA/IDEgOiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IGRhdGFUeXBlcyA9IHNlcmllc0RhdGFUeXBlcy5sZW5ndGggPyBzZXJpZXNEYXRhVHlwZXMgOiBbY2hhcnRUeXBlXTtcbiAgICAvLyBUaGUgdmFsdWUgYXhpcyBvZiBlYWNoIGNoYXJ0RGF0YSBlbnRyeTsgYSBwaWUgYW5kIGEgY29sb3JCeSBjaGFydCBoYXZlXG4gICAgLy8gb25lIHNlcmllcyBvbiB0aGUgb25lIGF4aXMuXG4gICAgY29uc3QgYXhpc0luZGV4ZXMgPSBwaWUgfHwgY29sb3JCeSA/IFswIGFzIFZhbHVlQXhpc0luZGV4XSA6IHNlcmllc0F4aXNJbmRleGVzKGV4dHJhY3RlZCwgY29uZmlnKTtcbiAgICBjb25zdCB0d29BeGVzID0gYXhpc0luZGV4ZXMuaW5jbHVkZXMoMSk7XG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IGNoYXJ0UmVmZXJlbmNlcyhjb25maWcsIHR3b0F4ZXMpO1xuICAgIGNvbnN0IGZvcm1hdENvZGVzID0gcGllID8gW10gOiB0aGlzLl9tZWFzdXJlRm9ybWF0Q29kZXMoY29uZmlnLCBleHRyYWN0ZWQsIGF4aXNJbmRleGVzLCBjb250ZXh0LCBzaGFyZXMsIHJlZmVyZW5jZXMpO1xuICAgIC8vIEEgdmFsdWUgYXhpcyB0aGF0IHBsb3RzIG5vdGhpbmcgYnV0IHJhbmtzIHJlYWRzIHRvcC1kb3duLCByYW5rIDEgYXQgdGhlXG4gICAgLy8gdG9wLCBhcyBvbiBzY3JlZW4gKGEgMTAwJSBzdGFja2VkIGNoYXJ0J3MgcHJpbWFyeSBheGlzIGlzIGl0cyBzaGFyZXMpLlxuICAgIGNvbnN0IHJhbmtBeGVzID0gcGllIHx8IGNvbG9yQnkgfHwgc2hhcmVzID8gW2ZhbHNlLCBmYWxzZV0gOiByYW5rVmFsdWVBeGVzKGV4dHJhY3RlZCwgZGF0YSwgY29uZmlnKTtcbiAgICBjb25zdCByYW5rUGVha3MgPSAoWzAsIDFdIGFzIGNvbnN0KS5tYXAoKGF4aXNJbmRleCkgPT4gY2hhcnRWYWx1ZVBlYWsoXG4gICAgICBleHRyYWN0ZWQuc2VyaWVzLmZpbHRlcigoXywgaW5kZXgpID0+IGF4aXNJbmRleGVzW2luZGV4XSA9PT0gYXhpc0luZGV4KS5tYXAoKHNlcmllcykgPT4gc2VyaWVzLnZhbHVlcyksXG4gICAgICBmYWxzZSxcbiAgICApKTtcblxuICAgIC8vIFJlZmVyZW5jZXMgYW5kIHN0YXRpc3RpYyBsaW5lcyBmb2xsb3cgdGhlIG1lYXN1cmVzIGluIHRoZSBjaGFydCBkYXRhLFxuICAgIC8vIGVhY2ggYSBjb25zdGFudCBzZXJpZXMgb2YgaXRzIG93bi5cbiAgICBjb25zdCBjb25zdGFudHMgPSBwaWVcbiAgICAgID8gW11cbiAgICAgIDogW1xuICAgICAgICAuLi50aGlzLl9yZWZlcmVuY2VMaW5lcyhyZWZlcmVuY2VzKSxcbiAgICAgICAgLi4udGhpcy5fc3RhdExpbmVzKGNvbmZpZywgZXh0cmFjdGVkLCBheGlzSW5kZXhlcywgc2hhcmVzLCBjb2xvckJ5LCBtZWFzdXJlRGF0YVswXT8ubmFtZSA/PyAnJyksXG4gICAgICBdO1xuICAgIGNvbnN0IGxlZ2VuZFBvc2l0aW9uID0gdGhpcy5fbGVnZW5kUG9zaXRpb24oY29uZmlnLCBjb2xvckJ5LCBleHRyYWN0ZWQuc2VyaWVzLmxlbmd0aCwgY29uc3RhbnRzLmxlbmd0aCk7XG4gICAgY29uc3QgY2hhcnREYXRhID0gW1xuICAgICAgLi4ubWVhc3VyZURhdGEsXG4gICAgICAuLi5jb25zdGFudHMubWFwKChsaW5lKSA9PiAoeyBuYW1lOiBsaW5lLm5hbWUsIGxhYmVscywgdmFsdWVzOiBsYWJlbHMubWFwKCgpID0+IGxpbmUudmFsdWUpIH0pKSxcbiAgICBdO1xuXG4gICAgLy8gU2VyaWVzIGNvbG9ycyBhcmUgcGVyIGVudHJ5IChfZW50cnlQbGFuKSwgbmV2ZXIgY2hhcnQtbGV2ZWwsIHdoZXJlIGFcbiAgICAvLyBtdWx0aS10eXBlIGNoYXJ0J3MgZXZlcnkgZW50cnkgd291bGQgaW5oZXJpdCB0aGVtLlxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICB4LCB5LCB3LCBoLFxuICAgICAgc2hvd0xlZ2VuZDogbGVnZW5kUG9zaXRpb24gIT09ICdoaWRkZW4nLFxuICAgICAgbGVnZW5kUG9zOiBQUFRYX0xFR0VORF9QT1NbbGVnZW5kUG9zaXRpb25dLFxuICAgICAgbGVnZW5kRm9udFNpemU6IDksXG4gICAgICBiYXJEaXI6IGNvbmZpZy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ2JhcicgOiAnY29sJyxcbiAgICAgIGJhckdyb3VwaW5nOiBjb25maWcuc3RhY2tlZCB8fCBzaGFyZXMgPyAnc3RhY2tlZCcgOiAnY2x1c3RlcmVkJyxcbiAgICAgIGhvbGVTaXplOiBjaGFydFR5cGUgPT09ICdkb251dCcgPyA1NSA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLih0d29BeGVzXG4gICAgICAgID8gdGhpcy5fdHdvQXhlc09wdGlvbnMoY29uZmlnLCBkYXRhLCBmb3JtYXRDb2Rlcywgc2hhcmVzLCByYW5rQXhlcywgcmFua1BlYWtzKVxuICAgICAgICA6IHRoaXMuX2F4aXNUZXh0T3B0aW9ucyhjb25maWcsIGRhdGEsIHBpZSkpLFxuICAgICAgLi4uQkxBTktTX0FTX0dBUFMsXG4gICAgICAvLyBBIHBpZSBoYXMgbm8gYXhlcy4gQSBjb21ibydzIHR5cGVzIGluaGVyaXQgdGhlc2UgZnJvbSB0aGUgY2hhcnQgbGV2ZWw7XG4gICAgICAvLyBhIHR3by1heGlzIGNoYXJ0J3MgdmFsdWUgYXhlcyBjYXJyeSB0aGVpciBvd24gZm9ybWF0IGNvZGVzLiBBIDEwMCVcbiAgICAgIC8vIHN0YWNrZWQgY2hhcnQncyBvbmUgdmFsdWUgYXhpcyBpcyB0aGUgc2hhcmUgYXhpcy5cbiAgICAgIC4uLihwaWUgfHwgdHdvQXhlcyA/IHt9IDogKHNoYXJlcyA/IHRoaXMuX3BlcmNlbnRBeGlzT3B0aW9ucyhzaGFyZXMpIDoge1xuICAgICAgICB2YWxBeGlzTGFiZWxGb3JtYXRDb2RlOiBmb3JtYXRDb2Rlc1swXSxcbiAgICAgIH0pKSxcbiAgICAgIC4uLihwaWUgPyB7fSA6IHRoaXMuX2NhdGVnb3J5T3JkZXJPcHRpb25zKGNvbmZpZywgZGF0YVR5cGVzKSksXG4gICAgICAuLi4odHdvQXhlcyB8fCAhcmFua0F4ZXNbMF0gPyB7fSA6IHtcbiAgICAgICAgLi4udGhpcy5fcmFua0F4aXNPcHRpb25zKGNvbmZpZy52YWx1ZUF4aXMsIHJhbmtQZWFrc1swXSksXG4gICAgICAgIGNhdEF4aXNMYWJlbFBvczogUFBUWF9SQU5LX0NBVEVHT1JZX0xBQkVMX1BPUyxcbiAgICAgIH0pLFxuICAgICAgZGF0YUJvcmRlcjogeyBwdDogMCwgY29sb3I6ICdGRkZGRkYnIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHByaW9yU3R5bGVzID0gcGllID8gbnVsbCA6IHByaW9yU2VyaWVzU3R5bGVzKGNvbmZpZywgZGF0YSwgZXh0cmFjdGVkKTtcbiAgICBjb25zdCBlbnRyaWVzID0gW1xuICAgICAgLi4udGhpcy5fZW50cnlQbGFuKGRhdGFUeXBlcywgZXh0cmFjdGVkLCBjb25maWcsIGF4aXNJbmRleGVzLCBzaGFyZXMsIGNoYXJ0RGF0YS5sZW5ndGgsIHByaW9yU3R5bGVzKVxuICAgICAgICAubWFwKChlbnRyeSkgPT4gdGhpcy5fd2l0aERhdGFMYWJlbHMoZW50cnksIGNvbmZpZywgZm9ybWF0Q29kZXMsIHNoYXJlcywgbGFiZWxzLmxlbmd0aCkpLFxuICAgICAgLi4uY29uc3RhbnRzLm1hcCgobGluZSwgaW5kZXgpID0+IHRoaXMuX2NvbnN0YW50RW50cnkobGluZSwgbWVhc3VyZURhdGEubGVuZ3RoICsgaW5kZXgsIGNoYXJ0RGF0YS5sZW5ndGgpKSxcbiAgICBdO1xuXG4gICAgdGhpcy5fYWRkQ2hhcnQoc2xpZGUsIHR5cGVNYXAsIGVudHJpZXMsIGNoYXJ0RGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBXaGVyZSB0aGUgbGVnZW5kIHNpdHMsIGFzIG9uIHNjcmVlbiAocmVzb2x2ZUxlZ2VuZFBvc2l0aW9uKSwgd2l0aCB0d29cbiAgLy8gZGlmZmVyZW5jZXMuIEEgc2luZ2xlLXNlcmllcyBjb2xvckJ5IGNoYXJ0IGNhbid0IGNhcnJ5IGEgcGVyLWNhdGVnb3J5XG4gIC8vIGxlZ2VuZCBpbiBhIG5hdGl2ZSBQb3dlclBvaW50IGJhciBjaGFydCwgc28gdGhlIGNhdGVnb3J5IGF4aXMgbGFiZWxzXG4gIC8vIGlkZW50aWZ5IGVhY2ggYmFyIGluc3RlYWQuIEFuZCBhIHJlZmVyZW5jZSBvciBzdGF0aXN0aWMgbGluZSBpcyBuYW1lZCBpblxuICAvLyB0aGUgbGVnZW5kIGFsb25lLCB3aGVyZSB0aGUgc2NyZWVuIGxhYmVscyBpdCBvbiB0aGUgbGluZSwgc28gYSBjaGFydCB0aGF0XG4gIC8vIGRyYXdzIG9uZSBzaG93cyB0aGUgbGVnZW5kIHdoZW5ldmVyIHRoZSBjb25maWcgZG9lcyBub3QgcGluIGl0LiBBIHBpbm5lZFxuICAvLyBwb3NpdGlvbiwgJ2hpZGRlbicgaW5jbHVkZWQsIHN0aWxsIHdpbnMuXG4gIHByaXZhdGUgX2xlZ2VuZFBvc2l0aW9uKFxuICAgIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gICAgY29sb3JCeTogYm9vbGVhbixcbiAgICBzZXJpZXNDb3VudDogbnVtYmVyLFxuICAgIGNvbnN0YW50Q291bnQ6IG51bWJlcixcbiAgKTogTGVnZW5kUG9zaXRpb24ge1xuICAgIGlmIChjb25zdGFudENvdW50KSB7XG4gICAgICByZXR1cm4gY29uZmlnLmxlZ2VuZCA/PyBQUFRYX0NPTlNUQU5UX0xFR0VORDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sb3JCeSA/ICdoaWRkZW4nIDogcmVzb2x2ZUxlZ2VuZFBvc2l0aW9uKGNvbmZpZywgc2VyaWVzQ291bnQpO1xuICB9XG5cbiAgLy8gRWFjaCByZWZlcmVuY2UgKGNoYXJ0UmVmZXJlbmNlcykgYXMgY29uc3RhbnQgbGluZXM6IGEgbGluZSBhdCBpdHMgdmFsdWUsXG4gIC8vIG9yIGEgYmFuZCdzIGxvd2VyIGVkZ2UgdW5kZXIgaXRzIGxhYmVsIGFuZCBpdHMgdXBwZXIgZWRnZSB1bmRlciB0aGUgbGFiZWxcbiAgLy8gd2l0aCBQUFRYX0JBTkRfVVBQRVJfU1VGRklYLiBBIGNoYXJ0IGRyYXdzIHRoZSBvbmVzIHRoZSBzY3JlZW4gZHJhd3M6IG5vbmVcbiAgLy8gb24gYSBob3Jpem9udGFsIGNoYXJ0IG9yIGEgcGllLlxuICBwcml2YXRlIF9yZWZlcmVuY2VMaW5lcyhyZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdKTogUHB0eENvbnN0YW50TGluZVtdIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlcy5mbGF0TWFwKChyZWZlcmVuY2UpID0+IHtcbiAgICAgIGNvbnN0IGxpbmUgPSB7IG5hbWU6IHJlZmVyZW5jZS5sYWJlbCwgdmFsdWU6IHJlZmVyZW5jZS5sb3csIGNvbG9yOiBSRVBPUlRfUkVGRVJFTkNFX0NPTE9SLCBzZWNvbmRhcnk6IHJlZmVyZW5jZS5heGlzSW5kZXggPT09IDEgfTtcblxuICAgICAgcmV0dXJuIHJlZmVyZW5jZS5iYW5kXG4gICAgICAgID8gW2xpbmUsIHsgLi4ubGluZSwgbmFtZTogYCR7cmVmZXJlbmNlLmxhYmVsfSR7UFBUWF9CQU5EX1VQUEVSX1NVRkZJWH1gLCB2YWx1ZTogcmVmZXJlbmNlLmhpZ2ggfV1cbiAgICAgICAgOiBbbGluZV07XG4gICAgfSk7XG4gIH1cblxuICAvLyBFYWNoIG1lYXN1cmUncyBzdGF0aXN0aWMgbGluZSwgdGFrZW4gb3ZlciB0aGUgdmFsdWVzIHRoZSBzZXJpZXMgcGxvdHNcbiAgLy8gKGl0cyBzaGFyZXMgb24gYSAxMDAlIHN0YWNrZWQgY2hhcnQpLCBuYW1lZCBhZnRlciB0aGUgc2VyaWVzICgnVmlzaXRzXG4gIC8vIGF2ZXJhZ2UnKSBhbmQgZHJhd24gaW4gaXRzIGNvbG9yIG9uIGl0cyBheGlzLiBBIGNvbG9yQnkgY2hhcnQncyBvbmUgbGluZVxuICAvLyBpcyB0YWtlbiBvdmVyIGl0cyBjb2xsYXBzZWQgYmFycyBhbmQgZHJhd24gaW4gdGhlIHJlZmVyZW5jZSBzbGF0ZSwgYXMgb25cbiAgLy8gc2NyZWVuLiBBIHNlcmllcyB3aXRoIG5vIHZhbHVlIGRyYXdzIG5vbmUsIGFuZCBhIGhvcml6b250YWwgY2hhcnQgbm9uZS5cbiAgcHJpdmF0ZSBfc3RhdExpbmVzKFxuICAgIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gICAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgICBheGlzSW5kZXhlczogVmFsdWVBeGlzSW5kZXhbXSxcbiAgICBzaGFyZXM6IFBlcmNlbnRTaGFyZXMgfCBudWxsLFxuICAgIGNvbG9yQnk6IGJvb2xlYW4sXG4gICAgY29sb3JCeU5hbWU6IHN0cmluZyxcbiAgKTogUHB0eENvbnN0YW50TGluZVtdIHtcbiAgICBpZiAoIWRyYXdzU3RhdExpbmVzKGNvbmZpZykpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lID0gKFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXSxcbiAgICAgIHN0YXQ6IFJlcG9ydENoYXJ0TWFya1N0YXQsXG4gICAgICBjb2xvcjogc3RyaW5nLFxuICAgICAgc2Vjb25kYXJ5OiBib29sZWFuLFxuICAgICk6IFBwdHhDb25zdGFudExpbmVbXSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHNlcmllc1N0YXQodmFsdWVzLCBzdGF0KTtcbiAgICAgIGNvbnN0IHN0YXROYW1lID0gU1RBVF9MQUJFTFtzdGF0XTtcblxuICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsXG4gICAgICAgID8gW11cbiAgICAgICAgOiBbeyBuYW1lOiBuYW1lID8gYCR7bmFtZX0gJHtzdGF0TmFtZS50b0xvd2VyQ2FzZSgpfWAgOiBzdGF0TmFtZSwgdmFsdWUsIGNvbG9yLCBzZWNvbmRhcnkgfV07XG4gICAgfTtcblxuICAgIGlmIChjb2xvckJ5KSB7XG4gICAgICBjb25zdCBzdGF0ID0gbWVhc3VyZU1hcmtTdGF0KGV4dHJhY3RlZC5zZXJpZXNbMF0/Lm1lYXN1cmUpO1xuXG4gICAgICByZXR1cm4gc3RhdCA/IGxpbmUoY29sb3JCeU5hbWUsIGNvbG9yQnlWYWx1ZXMoZXh0cmFjdGVkKSwgc3RhdCwgUkVQT1JUX1JFRkVSRU5DRV9DT0xPUiwgZmFsc2UpIDogW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dHJhY3RlZC5zZXJpZXMuZmxhdE1hcCgoc2VyaWVzLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdCA9IG1lYXN1cmVNYXJrU3RhdChzZXJpZXMubWVhc3VyZSk7XG5cbiAgICAgIHJldHVybiBzdGF0XG4gICAgICAgID8gbGluZShzZXJpZXMubmFtZSwgc2hhcmVzPy5nZXQoaW5kZXgpID8/IHNlcmllcy52YWx1ZXMsIHN0YXQsIHNlcmllc0hleChzZXJpZXMsIGluZGV4KSwgYXhpc0luZGV4ZXNbaW5kZXhdID09PSAxKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gQSBjb25zdGFudCBsaW5lJ3Mgb3duIGVudHJ5OiBkYXNoZWQsIHdpdGhvdXQgbWFya2VycyBvciBkYXRhIGxhYmVscywgb25cbiAgLy8gaXRzIHZhbHVlIGF4aXMuIEl0cyBjb2xvcnMgcnVuIHRoZSBsZW5ndGggb2YgdGhlIGNoYXJ0J3MgZGF0YSwgYXMgYVxuICAvLyBtZWFzdXJlIGxpbmUncyBkbyAoX2VudHJ5UGxhbiksIHNvIG5vIG1hcmtlciBldmVyIHRha2VzIGEgcmFuZG9tIGNvbG9yLlxuICBwcml2YXRlIF9jb25zdGFudEVudHJ5KGxpbmU6IFBwdHhDb25zdGFudExpbmUsIGluZGV4OiBudW1iZXIsIHRvdGFsRGF0YTogbnVtYmVyKTogUHB0eEVudHJ5IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2xpbmUnLFxuICAgICAgaW5kZXhlczogW2luZGV4XSxcbiAgICAgIHNlY29uZGFyeTogbGluZS5zZWNvbmRhcnksXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGNoYXJ0Q29sb3JzOiBBcnJheTxzdHJpbmc+KHRvdGFsRGF0YSkuZmlsbChsaW5lLmNvbG9yKSxcbiAgICAgICAgbGluZURhc2g6IFBQVFhfTElORV9EQVNIW1JlcG9ydENoYXJ0TGluZVN0eWxlLkRhc2hlZF0sXG4gICAgICAgIGxpbmVEYXRhU3ltYm9sOiAnbm9uZScsXG4gICAgICAgIGxpbmVTaXplOiBQUFRYX0NPTlNUQU5UX0xJTkVfU0laRSxcbiAgICAgICAgc2hvd1ZhbHVlOiBmYWxzZSxcbiAgICAgICAgLi4uKGxpbmUuc2Vjb25kYXJ5ID8geyBzZWNvbmRhcnlWYWxBeGlzOiB0cnVlLCBzZWNvbmRhcnlDYXRBeGlzOiB0cnVlIH0gOiB7fSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgbnVtYmVyIGZvcm1hdCBjb2RlIG9mIHRoZSBtZWFzdXJlcyBwbG90dGVkIG9uIGVhY2ggdmFsdWUgYXhpcywgYnlcbiAgLy8gYXhpcyBpbmRleCwgbWF0Y2hpbmcgdGhlIHNjcmVlbidzIHRpY2tzIChfdmFsdWVBeGlzQ29kZSk6IGEgb25lLWF4aXMgY2hhcnRcbiAgLy8gdGFrZXMgdGhlIGZvcm1hdCBpdHMgcGxvdHRlZCBzZXJpZXMnIG1lYXN1cmVzIGFncmVlIG9uLCBhcyBvbiBzY3JlZW4uIEEgMTAwJSBzdGFja2VkXG4gIC8vIGNoYXJ0J3Mgc2hhcmUgYXhpcyBpcyBkcmF3biBpbiBQUFRYX1BFUkNFTlRfRk9STUFUX0NPREUgaW5zdGVhZDsgdGhlc2VcbiAgLy8gY29kZXMgc3RpbGwgd3JpdGUgdGhlIHJhdyB2YWx1ZXMgb2YgdGhlIHNlcmllcyBiZXNpZGUgaXRzIHNoYXJlcy4gVGhlXG4gIC8vIHJlZmVyZW5jZXMgb24gYW4gYXhpcyBjb3VudCB0b3dhcmQgaXRzIHBlYWssIGFzIG9uIHNjcmVlblxuICAvLyAocmVmZXJlbmNlUGVhayksIGV4Y2VwdCBhIDEwMCUgc3RhY2tlZCBjaGFydCdzLCB3aGljaCBhcmUgc2hhcmVzLlxuICBwcml2YXRlIF9tZWFzdXJlRm9ybWF0Q29kZXMoXG4gICAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICAgIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgc2hhcmVzOiBQZXJjZW50U2hhcmVzIHwgbnVsbCxcbiAgICByZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdLFxuICApOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVhY2ggPSAoYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCkgPT4gKHNoYXJlcyAmJiBheGlzSW5kZXggPT09IDAgPyAwIDogcmVmZXJlbmNlUGVhayhyZWZlcmVuY2VzLCBheGlzSW5kZXgpKTtcblxuICAgIGlmICghYXhpc0luZGV4ZXMuaW5jbHVkZXMoMSkpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy52YWx1ZXMpO1xuICAgICAgY29uc3Qgc3BlYyA9IGF4aXNOdW1iZXJGb3JtYXQoZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLm1lYXN1cmUpKTtcblxuICAgICAgcmV0dXJuIFt0aGlzLl92YWx1ZUF4aXNDb2RlKHNwZWMsIHZhbHVlcywgISFjb25maWcuc3RhY2tlZCwgY29udGV4dCwgcmVhY2goMCkpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFswLCAxXSBhcyBjb25zdCkubWFwKChheGlzSW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG9uQXhpcyA9IGV4dHJhY3RlZC5zZXJpZXMuZmlsdGVyKChfLCBpbmRleCkgPT4gYXhpc0luZGV4ZXNbaW5kZXhdID09PSBheGlzSW5kZXgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWVBeGlzQ29kZShcbiAgICAgICAgYXhpc051bWJlckZvcm1hdChvbkF4aXMubWFwKChzZXJpZXMpID0+IHNlcmllcy5tZWFzdXJlKSksXG4gICAgICAgIG9uQXhpcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLnZhbHVlcyksXG4gICAgICAgICEhY29uZmlnLnN0YWNrZWQgJiYgIXNoYXJlcyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgcmVhY2goYXhpc0luZGV4KSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBBIG1lYXN1cmUgZW50cnkgd2l0aCBpdHMgZGF0YSBsYWJlbHMgKGNvbmZpZy5kYXRhTGFiZWxzKSwgc2V0IG9uIHRoZVxuICAvLyBlbnRyeSBhbG9uZTogb24gYSBjaGFydCBvZiBzZXZlcmFsIGVudHJpZXMgYSBjaGFydC1sZXZlbCBrZXkgd291bGQgcmVhY2hcbiAgLy8gZXZlcnkgb25lIG9mIHRoZW0uIE5ldmVyIGNhbGxlZCBmb3IgYSByZWZlcmVuY2Ugb3Igc3RhdGlzdGljIGxpbmUuXG4gIC8vXG4gIC8vICdhbGwnIGxhYmVscyBldmVyeSBwb2ludC4gUG93ZXJQb2ludCBjYW5ub3QgaGlkZSBvdmVybGFwcGluZyBsYWJlbHMsIHNvXG4gIC8vICdhdXRvJyBsYWJlbHMgZXZlcnkgcG9pbnQgdXAgdG8gUFBUWF9BVVRPX0xBQkVMX01BWF9QT0lOVFMgY2F0ZWdvcmllc1xuICAvLyBhbmQgbm9uZSBwYXN0IHRoYXQuIHBwdHhnZW5qcyBjYW5ub3QgbGFiZWwgYSBzaW5nbGUgcG9pbnQsIHNvICdsYXN0J1xuICAvLyBsYWJlbHMgbm9uZSAoYSBkb2N1bWVudGVkIGdhcCksIGV4Y2VwdCBvbiBhIGNvbG9yQnkgY2hhcnQ6IHRoZXJlIGV2ZXJ5XG4gIC8vIGJhciBpcyBpdHMgb3duIHNlcmllcycgbGF0ZXN0IHBvaW50IG9uIHNjcmVlbiwgc28gJ2xhc3QnIGxhYmVscyBldmVyeVxuICAvLyBiYXIgb2YgdGhlIG9uZSBjb2xsYXBzZWQgc2VyaWVzLCBhcyAnYWxsJyBkb2VzLlxuICAvL1xuICAvLyBBIGxhYmVsIGlzIHdyaXR0ZW4gaW4gaXRzIGF4aXMncyBmb3JtYXQgY29kZSAoJzAlJyBmb3IgYSBzaGFyZSkuIEFcbiAgLy8gc3RhY2tlZCBiYXIncyBzaXRzIGluIHRoZSBtaWRkbGUgb2YgaXRzIHNlZ21lbnQgYW5kIGEgbGluZSdzIGFib3ZlIGl0c1xuICAvLyBwb2ludC4gQSBjbHVzdGVyZWQgYmFyIGtlZXBzIFBvd2VyUG9pbnQncyBkZWZhdWx0LCBvdXRzaWRlIGl0cyBlbmQsIHdoaWNoXG4gIC8vIHBwdHhnZW5qcyB3b3VsZCBkcm9wIG9uIGEgb25lLWVudHJ5IGNoYXJ0IGlmIG5hbWVkOyBhbiBhcmVhIHRha2VzIG5vXG4gIC8vIHBvc2l0aW9uIGF0IGFsbCwgYW5kIHBwdHhnZW5qcyBkb2VzIG5vdCBzdHJpcCBvbmUgZnJvbSBhIGNvbWJvJ3MgYXJlYS5cbiAgcHJpdmF0ZSBfd2l0aERhdGFMYWJlbHMoXG4gICAgZW50cnk6IFBwdHhFbnRyeSxcbiAgICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICAgIGZvcm1hdENvZGVzOiBzdHJpbmdbXSxcbiAgICBzaGFyZXM6IFBlcmNlbnRTaGFyZXMgfCBudWxsLFxuICAgIGNhdGVnb3J5Q291bnQ6IG51bWJlcixcbiAgKTogUHB0eEVudHJ5IHtcbiAgICBjb25zdCBtb2RlID0gY29uZmlnLmRhdGFMYWJlbHM7XG4gICAgY29uc3Qgc2hvdyA9IG1vZGUgPT09IFJlcG9ydENoYXJ0RGF0YUxhYmVscy5BbGxcbiAgICAgIHx8IChtb2RlID09PSBSZXBvcnRDaGFydERhdGFMYWJlbHMuQXV0byAmJiBjYXRlZ29yeUNvdW50IDw9IFBQVFhfQVVUT19MQUJFTF9NQVhfUE9JTlRTKVxuICAgICAgfHwgKG1vZGUgPT09IFJlcG9ydENoYXJ0RGF0YUxhYmVscy5MYXN0ICYmIGlzQ29sb3JCeShjb25maWcpKTtcbiAgICBjb25zdCBjaGFydFR5cGUgPSBjb25maWcuY2hhcnRUeXBlID8/ICdiYXInO1xuXG4gICAgaWYgKCFzaG93IHx8IGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY2hhcnRUeXBlID09PSAnZG9udXQnKSB7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hhcmUgPSAhIXNoYXJlcz8uaGFzKGVudHJ5LmluZGV4ZXNbMF0pO1xuICAgIGNvbnN0IHN0YWNrZWQgPSBlbnRyeS50eXBlID09PSAnYmFyJyAmJiAoc2hhcmVzID8gc2hhcmUgOiAhIWNvbmZpZy5zdGFja2VkKTtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuX2RhdGFMYWJlbFBvc2l0aW9uKGVudHJ5LnR5cGUsIHN0YWNrZWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmVudHJ5LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICAuLi5lbnRyeS5vcHRpb25zLFxuICAgICAgICBzaG93VmFsdWU6IHRydWUsXG4gICAgICAgIGRhdGFMYWJlbEZvcm1hdENvZGU6IHNoYXJlID8gUFBUWF9QRVJDRU5UX0ZPUk1BVF9DT0RFIDogZm9ybWF0Q29kZXNbZW50cnkuc2Vjb25kYXJ5ID8gMSA6IDBdLFxuICAgICAgICBkYXRhTGFiZWxGb250U2l6ZTogUFBUWF9EQVRBX0xBQkVMX0ZPTlRfU0laRSxcbiAgICAgICAgLi4uKHBvc2l0aW9uID8geyBkYXRhTGFiZWxQb3NpdGlvbjogcG9zaXRpb24gfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3Mgc2hhcmUgYXhpcywgYXMgb24gc2NyZWVuOiBmcm9tIDAgKC0xMDAlIHdoZW4gYVxuICAvLyBzaGFyZSBpcyBuZWdhdGl2ZSkgdG8gMTAwJSwgYSBncmlkbGluZSBldmVyeSAyNSUsIGluIHdob2xlIHBlcmNlbnRhZ2VzLlxuICBwcml2YXRlIF9wZXJjZW50QXhpc09wdGlvbnMoc2hhcmVzOiBQZXJjZW50U2hhcmVzKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7XG4gICAgICB2YWxBeGlzTWluVmFsOiBwZXJjZW50QXhpc01pbihzaGFyZXMpLFxuICAgICAgdmFsQXhpc01heFZhbDogUEVSQ0VOVF9BWElTX01BWCxcbiAgICAgIHZhbEF4aXNNYWpvclVuaXQ6IFBFUkNFTlRfQVhJU19JTlRFUlZBTCxcbiAgICAgIHZhbEF4aXNMYWJlbEZvcm1hdENvZGU6IFBQVFhfUEVSQ0VOVF9GT1JNQVRfQ09ERSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSB0d28tYXhpcyBjaGFydCdzIGF4ZXMsIGVhY2ggaW4gaXRzIG93biBvYmplY3Q6IHBwdHhnZW5qcyBidWlsZHMgdGhlXG4gIC8vIHNlY29uZCB2YWx1ZSBhbmQgY2F0ZWdvcnkgYXhlcyBmcm9tIHRoZSBjaGFydCdzIG9wdGlvbnMgd2l0aCB0aGVzZSBsYWlkXG4gIC8vIG92ZXIgdGhlbSwgc28gYSB2YWx1ZS1heGlzIGtleSBsZWZ0IGF0IHRoZSBjaGFydCBsZXZlbCB3b3VsZCByZWFjaCBib3RoLlxuICAvLyBUaGUgcHJpbWFyeSB2YWx1ZSBheGlzIGlzIG9uIHRoZSBsZWZ0IHdpdGggdGhlIGNhdGVnb3J5IGF4aXMgdW5kZXIgaXQ7XG4gIC8vIHRoZSBzZWNvbmQgaXMgb24gdGhlIHJpZ2h0LCB3aXRob3V0IGdyaWRsaW5lcyBvZiBpdHMgb3duLCBhbmQgaXRzXG4gIC8vIGNhdGVnb3J5IGF4aXMgaXMgaGlkZGVuLiBFYWNoIHZhbHVlIGF4aXMgaXMgdGl0bGVkIG9ubHkgYnkgaXRzIG93biBsYWJlbFxuICAvLyBhbmQgZm9ybWF0dGVkIGJ5IHRoZSBtZWFzdXJlcyBwbG90dGVkIGFnYWluc3QgaXQsIGFzIG9uIHNjcmVlbi4gT24gYSAxMDAlXG4gIC8vIHN0YWNrZWQgY2hhcnQgdGhlIHByaW1hcnkgYXhpcyBpcyB0aGUgc2hhcmUgYXhpcywgYW5kIHRoZSBzZWNvbmQgYXhpcydzXG4gIC8vIHNlcmllcyBhcmUgbm90IHN0YWNrZWQuXG4gIHByaXZhdGUgX3R3b0F4ZXNPcHRpb25zKFxuICAgIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gICAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgICBmb3JtYXRDb2Rlczogc3RyaW5nW10sXG4gICAgc2hhcmVzOiBQZXJjZW50U2hhcmVzIHwgbnVsbCxcbiAgICByYW5rQXhlczogYm9vbGVhbltdLFxuICAgIHJhbmtQZWFrczogbnVtYmVyW10sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCB2YWx1ZUF4aXMgPSAoYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCkgPT4ge1xuICAgICAgY29uc3QgYXhpcyA9IGF4aXNJbmRleCA9PT0gMSA/IGNvbmZpZy5zZWNvbmRhcnlBeGlzIDogY29uZmlnLnZhbHVlQXhpcztcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5fdmFsdWVBeGlzUmFuZ2VPcHRpb25zKGF4aXMsIGF4aXM/LmxhYmVsKTtcbiAgICAgIGNvbnN0IHJhbmsgPSByYW5rQXhlc1theGlzSW5kZXhdID8gdGhpcy5fcmFua0F4aXNPcHRpb25zKGF4aXMsIHJhbmtQZWFrc1theGlzSW5kZXhdKSA6IHt9O1xuXG4gICAgICBpZiAoc2hhcmVzICYmIGF4aXNJbmRleCA9PT0gMCkge1xuICAgICAgICByZXR1cm4geyAuLi5yYW5nZSwgLi4udGhpcy5fcGVyY2VudEF4aXNPcHRpb25zKHNoYXJlcykgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgLi4ucmFuZ2UsIHZhbEF4aXNMYWJlbEZvcm1hdENvZGU6IGZvcm1hdENvZGVzW2F4aXNJbmRleF0sIC4uLnJhbmsgfTtcbiAgICB9O1xuICAgIC8vIFRoZSBjYXRlZ29yeSBsYWJlbHMgc3RheSB1bmRlciB0aGUgcGxvdCB3aGVuIHRoZSBwcmltYXJ5IHZhbHVlIGF4aXMgaXNcbiAgICAvLyBhIHJhbmsgYXhpcyBkcmF3biB0b3AtZG93bi5cbiAgICBjb25zdCBjYXRlZ29yeSA9IHJhbmtBeGVzWzBdXG4gICAgICA/IHsgLi4udGhpcy5fY2F0ZWdvcnlUaXRsZU9wdGlvbnMoY29uZmlnLCBkYXRhKSwgY2F0QXhpc0xhYmVsUG9zOiBQUFRYX1JBTktfQ0FURUdPUllfTEFCRUxfUE9TIH1cbiAgICAgIDogdGhpcy5fY2F0ZWdvcnlUaXRsZU9wdGlvbnMoY29uZmlnLCBkYXRhKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5BWElTX0ZPTlRfU0laRVMsXG4gICAgICB2YWxBeGVzOiBbdmFsdWVBeGlzKDApLCB7IC4uLnZhbHVlQXhpcygxKSwgdmFsR3JpZExpbmU6IHsgc3R5bGU6ICdub25lJyB9IH1dLFxuICAgICAgY2F0QXhlczogW2NhdGVnb3J5LCB7IGNhdEF4aXNIaWRkZW46IHRydWUgfV0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgcmFuayBheGlzLCBhcyBvbiBzY3JlZW46IHJldmVyc2VkICgnbWF4TWluJyksIHNvIHJhbmsgMSBpcyBhdCB0aGUgdG9wLFxuICAvLyBzdGFydGluZyBhdCByYW5rIDEgdW5sZXNzIHRoZSBjb25maWcgcGlucyBhIGJvdW5kLCBhbmQgbGFiZWxlZCBpbiB3aG9sZVxuICAvLyByYW5rcy4gRmV3IHJhbmtzIGFyZSBzdGVwcGVkIG9uZSBhdCBhIHRpbWUgd2hlbiB0aGUgY29uZmlnIHBpbnMgbm9cbiAgLy8gaW50ZXJ2YWwsIHNvIG5vIHRpY2sgZmFsbHMgYmV0d2VlbiB0d28gcmFua3MuXG4gIHByaXZhdGUgX3JhbmtBeGlzT3B0aW9ucyhheGlzOiBDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZCwgcGVhazogbnVtYmVyKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHJhbmdlID0gdmFsdWVBeGlzUmFuZ2UoYXhpcyk7XG4gICAgY29uc3Qgd2hvbGVTdGVwcyA9IHJhbmdlLmludGVydmFsID09PSB1bmRlZmluZWQgJiYgcGVhayA8PSBQUFRYX1JBTktfV0hPTEVfU1RFUF9QRUFLO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbEF4aXNPcmllbnRhdGlvbjogJ21heE1pbicsXG4gICAgICB2YWxBeGlzTWluVmFsOiByYW5nZS5taW4gPz8gUkFOS19BWElTX01JTixcbiAgICAgIHZhbEF4aXNMYWJlbEZvcm1hdENvZGU6IFBQVFhfUkFOS19GT1JNQVRfQ09ERSxcbiAgICAgIC4uLih3aG9sZVN0ZXBzID8geyB2YWxBeGlzTWFqb3JVbml0OiAxIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgaG9yaXpvbnRhbCBiYXIgY2hhcnQgcmVhZHMgdG9wLWRvd24sIGZpcnN0IGNhdGVnb3J5IGF0IHRoZSB0b3AsIGFzIGl0XG4gIC8vIGRvZXMgb24gc2NyZWVuLiBQb3dlclBvaW50IGRyYXdzIGNhdGVnb3J5IDAgbmV4dCB0byB0aGUgdmFsdWUgYXhpcywgYXQgdGhlXG4gIC8vIGJvdHRvbSwgc28gdGhlIGNhdGVnb3J5IGF4aXMgaXMgcmV2ZXJzZWQgKCdtYXhNaW4nKTsgdGhlIHZhbHVlIGF4aXMgdGhlblxuICAvLyBjcm9zc2VzIGF0IHRoZSBsYXN0IGNhdGVnb3J5ICgnbWF4JyksIHdoaWNoIG5vdyBzaXRzIGF0IHRoZSBib3R0b20sIGFuZFxuICAvLyAnbmV4dFRvJyBrZWVwcyBpdHMgbGFiZWxzIG9uIHRoYXQgbGluZSAocHB0eGdlbmpzJ3MgZGVmYXVsdCBmb3IgYSBiYXJcbiAgLy8gZGlyZWN0aW9uLCAnbG93Jywgd291bGQgZm9sbG93IHRoZSBmaXJzdCBjYXRlZ29yeSB0byB0aGUgdG9wKS4gT25seSBhblxuICAvLyBhbGwtYmFyIGNoYXJ0OiBhIGxpbmUgb3IgYXJlYSBpcyBuZXZlciBkcmF3biBzaWRld2F5cy5cbiAgcHJpdmF0ZSBfY2F0ZWdvcnlPcmRlck9wdGlvbnMoY29uZmlnOiBDaGFydENvbmZpZywgdHlwZXM6IHN0cmluZ1tdKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmIChjb25maWcub3JpZW50YXRpb24gIT09ICdob3Jpem9udGFsJyB8fCB0eXBlcy5zb21lKCh0eXBlKSA9PiB0eXBlICE9PSAnYmFyJykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjYXRBeGlzT3JpZW50YXRpb246ICdtYXhNaW4nLCBjYXRBeGlzQ3Jvc3Nlc0F0OiAnbWF4JywgdmFsQXhpc0xhYmVsUG9zOiAnbmV4dFRvJyB9O1xuICB9XG5cbiAgLy8gVGhlIHZhbHVlIGF4aXMncyBudW1iZXIgZm9ybWF0IGNvZGUsIG1hdGNoaW5nIHRoZSBzY3JlZW4ncyB0aWNrczogd2l0aCBhblxuICAvLyBheGlzIGZvcm1hdCAoYXhpc051bWJlckZvcm1hdCwgb3IgYSB3YXRlcmZhbGwncyBmb3JtYXR0ZWQgbWVhc3VyZSkgdGhlXG4gIC8vIHVuaXRzIGFuZCBkZWNpbWFscyB0aGUgc2NyZWVuIGRlY2lkZXMgZnJvbSB0aGUgc2FtZSBwZWFrOyB3aXRob3V0IG9uZSxcbiAgLy8gdGhlIGNvZGUgZm9yIHRoZSBzY3JlZW4ncyBwbGFpbiB0aWNrcy4gVGhlIHBlYWsgaXMgdGhlIHNlcmllcycgb3IgdGhlXG4gIC8vIGZ1cnRoZXN0IHJlZmVyZW5jZSBvbiB0aGUgYXhpcyAocmVhY2gpLCB3aGljaGV2ZXIgaXMgbGFyZ2VyOyB0aGUgZm9ybWF0XG4gIC8vIGhlbHBlcnMgcmVhZCBpdCBvZmYgYSBvbmUtcG9pbnQgc2VyaWVzLlxuICBwcml2YXRlIF92YWx1ZUF4aXNDb2RlKFxuICAgIHNwZWM6IE51bWJlckZvcm1hdFNwZWMgfCBudWxsLFxuICAgIHZhbHVlczogKG51bWJlciB8IG51bGwpW11bXSxcbiAgICBzdGFja2VkOiBib29sZWFuLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgcmVhY2g6IG51bWJlcixcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBwZWFrID0gTWF0aC5tYXgoY2hhcnRWYWx1ZVBlYWsodmFsdWVzLCBzdGFja2VkKSwgcmVhY2gpO1xuICAgIGNvbnN0IHBlYWtTZXJpZXMgPSBbW3BlYWtdXTtcblxuICAgIGlmICghc3BlYykge1xuICAgICAgcmV0dXJuIGNoYXJ0QXhpc0Zvcm1hdENvZGUocGVha1NlcmllcywgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYXJ0ID0gcmVzb2x2ZUNoYXJ0TnVtYmVyRm9ybWF0KHNwZWMsIHBlYWssIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG51bWJlckZvcm1hdENvZGUoc3BlYywgY29udGV4dCwgY2hhcnQsIHBlYWtTZXJpZXMsIGZhbHNlKTtcbiAgfVxuXG4gIC8vIE9uZSBuYXRpdmUgY2hhcnQgd2hlbiB0aGUgcGxhbiBpcyBhIHNpbmdsZSBlbnRyeSwgaXRzIG9wdGlvbnMgbGFpZCBvdmVyXG4gIC8vIHRoZSBjaGFydCdzLiBPdGhlcndpc2UgcHB0eGdlbmpzJ3MgbXVsdGktdHlwZSBjaGFydCwgd2hlcmUgZXZlcnkgZW50cnknc1xuICAvLyBvd24gb3B0aW9ucyBhcmUgbGFpZCBvdmVyIHRoZSBjaGFydCdzLlxuICBwcml2YXRlIF9hZGRDaGFydChcbiAgICBzbGlkZTogYW55LFxuICAgIHR5cGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgZW50cmllczogUHB0eEVudHJ5W10sXG4gICAgY2hhcnREYXRhOiB1bmtub3duW10sXG4gICAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IHZvaWQge1xuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgc2xpZGUuYWRkQ2hhcnQodHlwZU1hcFtlbnRyeS50eXBlXSwgZW50cnkuaW5kZXhlcy5tYXAoKGluZGV4KSA9PiBjaGFydERhdGFbaW5kZXhdKSwgeyAuLi5vcHRpb25zLCAuLi5lbnRyeS5vcHRpb25zIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2xpZGUuYWRkQ2hhcnQoZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoe1xuICAgICAgdHlwZTogdHlwZU1hcFtlbnRyeS50eXBlXSxcbiAgICAgIGRhdGE6IGVudHJ5LmluZGV4ZXMubWFwKChpbmRleCkgPT4gY2hhcnREYXRhW2luZGV4XSksXG4gICAgICBvcHRpb25zOiBlbnRyeS5vcHRpb25zLFxuICAgIH0pKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBIb3cgYSBjaGFydCdzIHNlcmllcyAoZGF0YVR5cGVzLCBvbmUgcGVyIGNoYXJ0RGF0YSBlbnRyeSkgYXJlIGN1dCBpbnRvXG4gIC8vIG5hdGl2ZSBjaGFydHMsIGFuZCB0aGUgY29sb3JzIGVhY2ggZHJhd3MgaW4uXG4gIC8vXG4gIC8vIEEgcGllJ3Mgc2xpY2VzIGFuZCBhIGNvbG9yQnkgY2hhcnQncyBjb2xsYXBzZWQgYmFycyBhcmUgb25lIHNlcmllcyBjb2xvcmVkXG4gIC8vIHBvaW50IGJ5IHBvaW50LCBzbyB0aGVpciBvbmUgZW50cnkga2VlcHMgdGhlIHdob2xlIHBhbGV0dGUuIEV2ZXJ5IG90aGVyXG4gIC8vIGVudHJ5IGlzIGhhbmRlZCBleGFjdGx5IGl0cyBvd24gc2VyaWVzJyBjb2xvcnMgKHNlcmllc0hleCksIHNvIGEgbG9uZSBiYXJcbiAgLy8gc2VyaWVzIGlzIG9uZSBjb2xvciwgYXMgb24gc2NyZWVuLCByYXRoZXIgdGhhbiBhIGNvbG9yIHBlciBiYXIuXG4gIC8vXG4gIC8vIEJhcnMgc2hhcmUgb25lIGVudHJ5IHBlciB2YWx1ZSBheGlzLCBzaW5jZSBzZXBhcmF0ZSBiYXIgY2hhcnRzIG9uIG9uZSBheGlzXG4gIC8vIG92ZXJsYXAgaW5zdGVhZCBvZiBjbHVzdGVyaW5nLCBhbmQgYXJlYXMgbGlrZXdpc2UsIHNpbmNlIHRoZXkgc3RhY2sgb25seVxuICAvLyBpbnNpZGUgb25lIGFyZWEgY2hhcnQuIEVhY2ggbGluZSBnZXRzIGFuIGVudHJ5IG9mIGl0cyBvd24sIHNvIGl0cyBsaW5lXG4gIC8vIG9wdGlvbnMgYXJlIGl0cyBvd24uIHBwdHhnZW5qcyBjb2xvcnMgYSBsaW5lIGJ5IGl0cyBwbGFjZSBpbiBpdHMgZW50cnkgYnV0XG4gIC8vIGZpbGxzIGl0cyBtYXJrZXJzIGJ5IGl0cyBwbGFjZSBhY3Jvc3MgZXZlcnkgZW50cnkncyBkYXRhLCBhbmQgd2l0aCBhXG4gIC8vIHJhbmRvbSBjb2xvciBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpc3QsIHNvIGEgbGluZSdzIGxpc3QgaXMgaXRzIG9uZSBjb2xvclxuICAvLyB0aGUgd2hvbGUgbGVuZ3RoIG9mIHRoZSBjaGFydCdzIGRhdGEgKHRvdGFsRGF0YSwgd2hpY2ggY291bnRzIHRoZVxuICAvLyBjb25zdGFudCBsaW5lcyBhZnRlciB0aGUgbWVhc3VyZXMgdG9vKS5cbiAgLy9cbiAgLy8gQW4gZW50cnkgb24gdGhlIHNlY29uZCB2YWx1ZSBheGlzIChzZXJpZXNBeGlzSW5kZXhlcykgcGxvdHMgYWdhaW5zdCB0aGVcbiAgLy8gc2Vjb25kIHZhbHVlIGFuZCBjYXRlZ29yeSBheGVzLlxuICAvL1xuICAvLyBBIGxpbmUgZW50cnkgZHJhd3MgaXRzIG1lYXN1cmUncyBsaW5lIHN0eWxlIChQUFRYX0xJTkVfREFTSCkgYW5kIGl0c1xuICAvLyBtYXJrZXJzLCBvciBub25lLiBPbiBhIDEwMCUgc3RhY2tlZCBjaGFydCBvbmx5IHRoZSBzaGFyZSBlbnRyaWVzIHN0YWNrO1xuICAvLyBhIGJhciBvciBhcmVhIGVudHJ5IG9uIHRoZSBzZWNvbmQgYXhpcyBpcyBkcmF3biBzaWRlIGJ5IHNpZGUsIGFzIG9uXG4gIC8vIHNjcmVlbi5cbiAgLy9cbiAgLy8gQSBjaGFydCB0aGF0IHBsb3RzIGEgcHJpb3Igc2VyaWVzIGNvbG9ycyBpdCBhcyB0aGUgc2NyZWVuIGRvZXNcbiAgLy8gKHByaW9yU3R5bGVzKTogaW4gaXRzIGN1cnJlbnQgc2VyaWVzJyBjb2xvciwgYW5kIGRhc2hlZCB3aGVuIGl0IGlzIGEgbGluZVxuICAvLyB3aG9zZSBtZWFzdXJlIG5hbWVzIG5vIGxpbmUgc3R5bGUgb2YgaXRzIG93bi5cbiAgcHJpdmF0ZSBfZW50cnlQbGFuKFxuICAgIGRhdGFUeXBlczogc3RyaW5nW10sXG4gICAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICAgIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICAgIHNoYXJlczogUGVyY2VudFNoYXJlcyB8IG51bGwsXG4gICAgdG90YWxEYXRhOiBudW1iZXIsXG4gICAgcHJpb3JTdHlsZXM6IHsgY29sb3JzOiBzdHJpbmdbXTsgcHJpb3JzOiBib29sZWFuW10gfSB8IG51bGwsXG4gICk6IFBwdHhFbnRyeVtdIHtcbiAgICBjb25zdCBjaGFydFR5cGUgPSBjb25maWcuY2hhcnRUeXBlID8/ICdiYXInO1xuICAgIGlmIChjaGFydFR5cGUgPT09ICdwaWUnIHx8IGNoYXJ0VHlwZSA9PT0gJ2RvbnV0JyB8fCBpc0NvbG9yQnkoY29uZmlnKSkge1xuICAgICAgcmV0dXJuIFt7IHR5cGU6IGRhdGFUeXBlc1swXSwgaW5kZXhlczogWzBdLCBzZWNvbmRhcnk6IGZhbHNlLCBvcHRpb25zOiB7IGNoYXJ0Q29sb3JzOiBSRVBPUlRfQ0hBUlRfQ09MT1JTIH0gfV07XG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllczogUHB0eEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBwZXJBeGlzID0gbmV3IE1hcDxzdHJpbmcsIFBwdHhFbnRyeT4oKTtcbiAgICBkYXRhVHlwZXMuZm9yRWFjaCgodHlwZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHNlY29uZGFyeSA9IGF4aXNJbmRleGVzW2luZGV4XSA9PT0gMTtcbiAgICAgIGNvbnN0IGtleSA9IGAke3R5cGV9LSR7c2Vjb25kYXJ5fWA7XG4gICAgICBsZXQgZW50cnkgPSB0eXBlID09PSAnbGluZScgPyB1bmRlZmluZWQgOiBwZXJBeGlzLmdldChrZXkpO1xuXG4gICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIGVudHJ5ID0geyB0eXBlLCBpbmRleGVzOiBbXSwgc2Vjb25kYXJ5LCBvcHRpb25zOiB7fSB9O1xuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICBwZXJBeGlzLnNldChrZXksIGVudHJ5KTtcbiAgICAgIH1cblxuICAgICAgZW50cnkuaW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGhleCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoIWV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdKSB7XG4gICAgICAgIHJldHVybiBSRVBPUlRfQ0hBUlRfQ09MT1JTW2luZGV4ICUgUkVQT1JUX0NIQVJUX0NPTE9SUy5sZW5ndGhdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJpb3JTdHlsZXM/LmNvbG9yc1tpbmRleF0gPz8gc2VyaWVzSGV4KGV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdLCBpbmRleCk7XG4gICAgfTtcblxuICAgIHJldHVybiBlbnRyaWVzLm1hcCgoZW50cnkpID0+ICh7XG4gICAgICAuLi5lbnRyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY2hhcnRDb2xvcnM6IGVudHJ5LnR5cGUgPT09ICdsaW5lJ1xuICAgICAgICAgID8gQXJyYXk8c3RyaW5nPih0b3RhbERhdGEpLmZpbGwoaGV4KGVudHJ5LmluZGV4ZXNbMF0pKVxuICAgICAgICAgIDogZW50cnkuaW5kZXhlcy5tYXAoaGV4KSxcbiAgICAgICAgLi4uKGVudHJ5LnR5cGUgPT09ICdsaW5lJ1xuICAgICAgICAgID8gdGhpcy5fbGluZU9wdGlvbnMoZXh0cmFjdGVkLnNlcmllc1tlbnRyeS5pbmRleGVzWzBdXT8ubWVhc3VyZSwgISFwcmlvclN0eWxlcz8ucHJpb3JzW2VudHJ5LmluZGV4ZXNbMF1dKVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oc2hhcmVzICYmIGVudHJ5LnR5cGUgIT09ICdsaW5lJyAmJiAhc2hhcmVzLmhhcyhlbnRyeS5pbmRleGVzWzBdKVxuICAgICAgICAgID8geyBiYXJHcm91cGluZzogZW50cnkudHlwZSA9PT0gJ2FyZWEnID8gJ3N0YW5kYXJkJyA6ICdjbHVzdGVyZWQnIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKGVudHJ5LnNlY29uZGFyeSA/IHsgc2Vjb25kYXJ5VmFsQXhpczogdHJ1ZSwgc2Vjb25kYXJ5Q2F0QXhpczogdHJ1ZSB9IDoge30pLFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cblxuICAvLyBXaGVyZSBhIGRhdGEgbGFiZWwgc2l0czogUG93ZXJQb2ludCdzIGRMYmxQb3MgY29kZSwgb3IgdW5kZWZpbmVkIHRvIGxlYXZlXG4gIC8vIGl0IG91dCAoX3dpdGhEYXRhTGFiZWxzIHNheXMgd2h5KS5cbiAgcHJpdmF0ZSBfZGF0YUxhYmVsUG9zaXRpb24odHlwZTogc3RyaW5nLCBzdGFja2VkQmFyOiBib29sZWFuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZSA9PT0gJ2xpbmUnKSB7XG4gICAgICByZXR1cm4gJ3QnO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFja2VkQmFyID8gJ2N0cicgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBBIGxpbmUgZW50cnkncyBkYXNoIGFuZCBtYXJrZXJzLiBBIHN0eWxlIFBvd2VyUG9pbnQgaGFzIG5vIGRhc2ggZm9yIGlzXG4gIC8vIGRyYXduIHNvbGlkLCBhbmQgYSBwcmlvcidzIGxpbmUgZGFzaGVkIHVubGVzcyBpdHMgbWVhc3VyZSBuYW1lcyBhIHN0eWxlLlxuICBwcml2YXRlIF9saW5lT3B0aW9ucyhtZWFzdXJlOiBDaGFydE1lYXN1cmUgfCB1bmRlZmluZWQsIHByaW9yID0gZmFsc2UpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3Qgc3R5bGUgPSBtZWFzdXJlTGluZVN0eWxlKG1lYXN1cmUpID8/IChwcmlvciA/IFJlcG9ydENoYXJ0TGluZVN0eWxlLkRhc2hlZCA6IHVuZGVmaW5lZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZURhc2g6IHN0eWxlID8gUFBUWF9MSU5FX0RBU0hbc3R5bGVdIDogUFBUWF9MSU5FX0RBU0hbUmVwb3J0Q2hhcnRMaW5lU3R5bGUuU29saWRdLFxuICAgICAgbGluZURhdGFTeW1ib2w6IG1lYXN1cmU/Lm1hcmtlcnMgPT09IGZhbHNlID8gJ25vbmUnIDogJ2NpcmNsZScsXG4gICAgICBsaW5lRGF0YVN5bWJvbFNpemU6IFBQVFhfTElORV9TWU1CT0xfU0laRSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSB3YXRlcmZhbGwgaXMgYSBzdGFja2VkIGJhciBjaGFydCB3aG9zZSBmaXJzdCBzZXJpZXMgaXMgaW52aXNpYmxlOiBpdFxuICAvLyBsaWZ0cyBlYWNoIGJhciB0byB3aGVyZSBpdHMgc3RlcCBzdGFydHMuIFRoZSBzZXJpZXMgYXJlIGN1dCBkaWZmZXJlbnRseVxuICAvLyBmcm9tIHRoZSBzY3JlZW4nczsgX3dhdGVyZmFsbFNlcmllcyBzYXlzIHdoeS5cbiAgcHJpdmF0ZSBfcmVuZGVyV2F0ZXJmYWxsKFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIGRhdGE6IENvbXBvbmVudERhdGEsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbXBvbmVudC5jb25maWcgYXMgQ2hhcnRDb25maWc7XG4gICAgY29uc3Qgd2F0ZXJmYWxsID0gZXh0cmFjdFdhdGVyZmFsbChjb21wb25lbnQsIGRhdGEpO1xuICAgIGNvbnN0IG1lYXN1cmUgPSBjb25maWcubWVhc3VyZXM/LlswXTtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLl9jYXRlZ29yeUxhYmVscyhcbiAgICAgIHdhdGVyZmFsbC5zdGVwcy5tYXAoKHN0ZXApID0+IHN0ZXAuY2F0ZWdvcnkpLFxuICAgICAgZGF0YS5ncmFudWxhcml0eSxcbiAgICAgIGNvbnRleHQubG9jYWxlLFxuICAgICAgY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICApO1xuICAgIGNvbnN0IHNlcmllcyA9IHRoaXMuX3dhdGVyZmFsbFNlcmllcyh3YXRlcmZhbGwuc3RlcHMpO1xuICAgIC8vIFRoZSByZWZlcmVuY2VzIGFyZSBjb25zdGFudCBsaW5lcyBiZXNpZGUgdGhlIHN0YWNrZWQgYmFycywgb24gdGhlIG9uZVxuICAgIC8vIHZhbHVlIGF4aXMuIFdpdGhvdXQgYW55IHRoZSBjaGFydCBpcyB0aGUgb25lIHN0YWNrZWQgYmFyIGNoYXJ0LCB3aXRob3V0XG4gICAgLy8gYSBsZWdlbmQ7IHdpdGggdGhlbSB0aGUgbGVnZW5kIG5hbWVzIHRoZW0gKF9sZWdlbmRQb3NpdGlvbiksIGFzIGl0XG4gICAgLy8gYWxvbmUgY2FuLCBiZXNpZGUgdGhlIHN0ZXBzJyBraW5kcy5cbiAgICBjb25zdCByZWZlcmVuY2VzID0gY2hhcnRSZWZlcmVuY2VzKGNvbmZpZywgZmFsc2UpO1xuICAgIGNvbnN0IGNvbnN0YW50cyA9IHRoaXMuX3JlZmVyZW5jZUxpbmVzKHJlZmVyZW5jZXMpO1xuICAgIGNvbnN0IGxlZ2VuZFBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbiA9IGNvbnN0YW50cy5sZW5ndGggPyBjb25maWcubGVnZW5kID8/IFBQVFhfQ09OU1RBTlRfTEVHRU5EIDogJ2hpZGRlbic7XG4gICAgY29uc3QgY2hhcnREYXRhID0gW1xuICAgICAgLi4uc2VyaWVzLm1hcCgoZW50cnkpID0+ICh7IG5hbWU6IGVudHJ5Lm5hbWUsIGxhYmVscywgdmFsdWVzOiBlbnRyeS52YWx1ZXMgfSkpLFxuICAgICAgLi4uY29uc3RhbnRzLm1hcCgobGluZSkgPT4gKHsgbmFtZTogbGluZS5uYW1lLCBsYWJlbHMsIHZhbHVlczogbGFiZWxzLm1hcCgoKSA9PiBsaW5lLnZhbHVlKSB9KSksXG4gICAgXTtcbiAgICBjb25zdCBlbnRyaWVzOiBQcHR4RW50cnlbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2JhcicsXG4gICAgICAgIGluZGV4ZXM6IHNlcmllcy5tYXAoKF8sIGluZGV4KSA9PiBpbmRleCksXG4gICAgICAgIHNlY29uZGFyeTogZmFsc2UsXG4gICAgICAgIG9wdGlvbnM6IHsgY2hhcnRDb2xvcnM6IHNlcmllcy5tYXAoKGVudHJ5KSA9PiBlbnRyeS5jb2xvciksIGJhckdyb3VwaW5nOiAnc3RhY2tlZCcgfSxcbiAgICAgIH0sXG4gICAgICAuLi5jb25zdGFudHMubWFwKChsaW5lLCBpbmRleCkgPT4gdGhpcy5fY29uc3RhbnRFbnRyeShsaW5lLCBzZXJpZXMubGVuZ3RoICsgaW5kZXgsIGNoYXJ0RGF0YS5sZW5ndGgpKSxcbiAgICBdO1xuXG4gICAgdGhpcy5fYWRkQ2hhcnQoc2xpZGUsIHsgYmFyOiBwcHR4LkNoYXJ0VHlwZS5iYXIsIGxpbmU6IHBwdHguQ2hhcnRUeXBlLmxpbmUgfSwgZW50cmllcywgY2hhcnREYXRhLCB7XG4gICAgICB4LCB5LCB3LCBoLFxuICAgICAgc2hvd0xlZ2VuZDogbGVnZW5kUG9zaXRpb24gIT09ICdoaWRkZW4nLFxuICAgICAgbGVnZW5kUG9zOiBQUFRYX0xFR0VORF9QT1NbbGVnZW5kUG9zaXRpb25dLFxuICAgICAgbGVnZW5kRm9udFNpemU6IDksXG4gICAgICBiYXJEaXI6IGNvbmZpZy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ2JhcicgOiAnY29sJyxcbiAgICAgIC4uLnRoaXMuX2F4aXNUZXh0T3B0aW9ucyhjb25maWcsIGRhdGEsIGZhbHNlKSxcbiAgICAgIC4uLkJMQU5LU19BU19HQVBTLFxuICAgICAgLy8gVGhlIGF4aXMgc3BhbnMgdGhlIHJ1bm5pbmcgdG90YWwsIHNvIGl0cyBwZWFrIGlzIHRoZSBmdXJ0aGVzdCBhIHN0ZXBcbiAgICAgIC8vIGVuZHMgZnJvbSB6ZXJvIChvciB0aGUgZnVydGhlc3QgcmVmZXJlbmNlKTsgdGhlIHBpZWNlcyBpdCBpcyBjdXQgaW50b1xuICAgICAgLy8gbmV2ZXIgc3RhY2sgcGFzdCB0aGF0LiBUaGUgb25lIG1lYXN1cmUncyBmb3JtYXQgd3JpdGVzIGl0LCBhcyBvblxuICAgICAgLy8gc2NyZWVuLlxuICAgICAgdmFsQXhpc0xhYmVsRm9ybWF0Q29kZTogdGhpcy5fdmFsdWVBeGlzQ29kZShcbiAgICAgICAgbWVhc3VyZSAmJiBoYXNOdW1iZXJGb3JtYXQobWVhc3VyZSkgPyBtZWFzdXJlIDogbnVsbCxcbiAgICAgICAgW3dhdGVyZmFsbC5zdGVwcy5tYXAoKHN0ZXApID0+IHN0ZXAuc3RhcnQgKyAoc3RlcC5jaGFuZ2UgPz8gMCkpXSxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHJlZmVyZW5jZVBlYWsocmVmZXJlbmNlcywgMCksXG4gICAgICApLFxuICAgICAgLi4udGhpcy5fY2F0ZWdvcnlPcmRlck9wdGlvbnMoY29uZmlnLCBbJ2JhciddKSxcbiAgICAgIC8vIEEgcnVubmluZyB0b3RhbCBjYW4gZ28gYmVsb3cgemVybywgd2hlcmUgdGhlIGNhdGVnb3J5IGF4aXMgY3Jvc3NlcztcbiAgICAgIC8vIGl0cyBsYWJlbHMgc3RheSBhdCB0aGUgcGxvdCdzIGVkZ2UgaW5zdGVhZCBvZiBhY3Jvc3MgdGhlIGJhcnMuXG4gICAgICBjYXRBeGlzTGFiZWxQb3M6ICdsb3cnLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUG93ZXJQb2ludCBzdGFja3MgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcyBhcGFydCwgZWFjaCBmcm9tIHplcm8sIHNvIGFcbiAgLy8gYmFyIGNhbm5vdCBzaW1wbHkgc2l0IG9uIHRoZSB0b3RhbCBiZWZvcmUgaXQgdGhlIHdheSBpdCBkb2VzIG9uIHNjcmVlbi5cbiAgLy8gRWFjaCBzdGVwIGlzIGN1dCBhdCB6ZXJvIGluc3RlYWQ6IHRoZSBpbnZpc2libGUgYmFzZSBjYXJyaWVzIGl0IHRvIGl0cyBlbmRcbiAgLy8gbmVhcmVyIHplcm8sIGFuZCBpdHMga2luZCdzIHNlcmllcyBjYXJyaWVzIHRoZSByZXN0IOKAlCBvbmUgc2VyaWVzIGFib3ZlIHplcm9cbiAgLy8gYW5kIG9uZSBiZWxvdywgYmVjYXVzZSBhIHN0ZXAgdGhhdCBjcm9zc2VzIHplcm8gbmVlZHMgYm90aC4gRXZlcnkgb3RoZXJcbiAgLy8gcG9pbnQgaXMgbGVmdCBibGFuazogYSB6ZXJvIHRoZXJlIHdvdWxkIHN0aWxsIGRyYXcgYSB6ZXJvLWhlaWdodCBiYXIsIHdoaWNoXG4gIC8vIHJlbmRlcnMgYXMgYSBoYWlybGluZS4gQSBraW5kJ3Mgc2VyaWVzIHRoYXQgc3RheXMgYmxhbmsgaXMgZHJvcHBlZC5cbiAgcHJpdmF0ZSBfd2F0ZXJmYWxsU2VyaWVzKHN0ZXBzOiBXYXRlcmZhbGxTdGVwW10pOiBQcHR4Q2hhcnRTZXJpZXNbXSB7XG4gICAgY29uc3QgYmFzZTogUHB0eENoYXJ0U2VyaWVzID0geyBuYW1lOiAnJywgY29sb3I6ICd0cmFuc3BhcmVudCcsIHZhbHVlczogW10gfTtcbiAgICBjb25zdCBraW5kcyA9IE9iamVjdC5rZXlzKFdBVEVSRkFMTF9TRVJJRVNfTkFNRVMpIGFzIFdhdGVyZmFsbFN0ZXBLaW5kW107XG4gICAgY29uc3QgcGllY2UgPSAoa2luZDogV2F0ZXJmYWxsU3RlcEtpbmQpID0+ICh7XG4gICAgICBraW5kLCBuYW1lOiBXQVRFUkZBTExfU0VSSUVTX05BTUVTW2tpbmRdLCBjb2xvcjogUkVQT1JUX1dBVEVSRkFMTF9DT0xPUlNba2luZF0sIHZhbHVlczogW10gYXMgKG51bWJlciB8IG51bGwpW10sXG4gICAgfSk7XG4gICAgY29uc3QgYWJvdmUgPSBraW5kcy5tYXAocGllY2UpO1xuICAgIGNvbnN0IGJlbG93ID0ga2luZHMubWFwKHBpZWNlKTtcbiAgICBjb25zdCBibGFua1plcm8gPSAodmFsdWU6IG51bWJlcikgPT4gKHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlKTtcblxuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBzdGVwcykge1xuICAgICAgY29uc3QgZW5kID0gc3RlcC5zdGFydCArIChzdGVwLmNoYW5nZSA/PyAwKTtcbiAgICAgIGNvbnN0IGxvdyA9IE1hdGgubWluKHN0ZXAuc3RhcnQsIGVuZCk7XG4gICAgICBjb25zdCBoaWdoID0gTWF0aC5tYXgoc3RlcC5zdGFydCwgZW5kKTtcblxuICAgICAgYmFzZS52YWx1ZXMucHVzaChibGFua1plcm8obG93ID4gMCA/IGxvdyA6IChoaWdoIDwgMCA/IGhpZ2ggOiAwKSkpO1xuICAgICAgYWJvdmUuZm9yRWFjaCgoZW50cnkpID0+IGVudHJ5LnZhbHVlcy5wdXNoKFxuICAgICAgICBlbnRyeS5raW5kID09PSBzdGVwLmtpbmQgPyBibGFua1plcm8oTWF0aC5tYXgoaGlnaCwgMCkgLSBNYXRoLm1heChsb3csIDApKSA6IG51bGwsXG4gICAgICApKTtcbiAgICAgIGJlbG93LmZvckVhY2goKGVudHJ5KSA9PiBlbnRyeS52YWx1ZXMucHVzaChcbiAgICAgICAgZW50cnkua2luZCA9PT0gc3RlcC5raW5kID8gYmxhbmtaZXJvKE1hdGgubWluKGxvdywgMCkgLSBNYXRoLm1pbihoaWdoLCAwKSkgOiBudWxsLFxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtiYXNlLCAuLi5bLi4uYWJvdmUsIC4uLmJlbG93XS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZXMuc29tZSgodmFsdWUpID0+IHZhbHVlICE9PSBudWxsKSldO1xuICB9XG5cbiAgLy8gQ29tcGFjdCBwZXJpb2QgbGFiZWxzIG1hdGNoIHRoZSBvbi1zY3JlZW4gYXhpcywgaW4gdGhlIHJlcG9ydCdzIGxvY2FsZSBhbmRcbiAgLy8gdGhlIGF4aXMncyBkYXRlIGxhYmVsIHN0eWxlIChhIHNob3J0IGxhYmVsIHRha2VzIGl0cyB5ZWFyIG9ubHkgd2hlbiB0aGVcbiAgLy8gZGF0YSBzcGFucyB5ZWFycyk7IFBvd2VyUG9pbnQgY2FuJ3QgZG8gYSBzdHlsZWQgc2Vjb25kIGxpbmUsIHNvIGl0J3NcbiAgLy8gaW5saW5lLlxuICBwcml2YXRlIF9jYXRlZ29yeUxhYmVscyhcbiAgICBjYXRlZ29yaWVzOiBzdHJpbmdbXSxcbiAgICBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcsXG4gICAgZGF0ZUxhYmVsOiBSZXBvcnRDaGFydERhdGVMYWJlbCxcbiAgKTogc3RyaW5nW10ge1xuICAgIGlmICghZ3JhbnVsYXJpdHkpIHtcbiAgICAgIHJldHVybiBjYXRlZ29yaWVzO1xuICAgIH1cblxuICAgIGNvbnN0IG11bHRpWWVhciA9IHNwYW5zTXVsdGlwbGVZZWFycyhjYXRlZ29yaWVzKTtcblxuICAgIHJldHVybiBjYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IGZvcm1hdFBlcmlvZExhYmVsKGNhdGVnb3J5LCBncmFudWxhcml0eSwgbXVsdGlZZWFyLCBsb2NhbGUsIGRhdGVMYWJlbCkpO1xuICB9XG5cbiAgLy8gVGhlIGF4aXMgbGFiZWwgYW5kIHRpdGxlIHNldHRpbmdzIG9mIGEgY2hhcnQgd2l0aCBvbmUgdmFsdWUgYXhpcywgYW5kIHRoYXRcbiAgLy8gYXhpcydzIHJhbmdlICh2YWx1ZUF4aXMpLiBBIHBpZSBoYXMgbm8gdmFsdWUgYXhpcyB0byB0aXRsZS4gV2l0aG91dCBhXG4gIC8vIHZhbHVlQXhpcy5sYWJlbCB0aGUgdmFsdWUgYXhpcyBpcyB0aXRsZWQgYnkgdGhlIGZpcnN0IG1lYXN1cmUncyBsYWJlbCwgYXNcbiAgLy8gZGVja3MgYWx3YXlzIGhhdmUgYmVlbjsgdGhlIHNjcmVlbiBzaG93cyBvbmx5IGFuIGV4cGxpY2l0IHRpdGxlLiBBblxuICAvLyBleHBsaWNpdCBlbXB0eSBsYWJlbCBzdXBwcmVzc2VzIHRoYXQgZmFsbGJhY2ssIGFzIGl0IGRvZXMgb24gc2NyZWVuLCBhbmRcbiAgLy8gYSAxMDAlIHN0YWNrZWQgY2hhcnQncyBzaGFyZSBheGlzIGlzIG5ldmVyIHRpdGxlZCB3aXRoIG9uZSBzZXJpZXMnIG5hbWUuXG4gIHByaXZhdGUgX2F4aXNUZXh0T3B0aW9ucyhjb25maWc6IENoYXJ0Q29uZmlnLCBkYXRhOiBDb21wb25lbnREYXRhLCBwaWU6IGJvb2xlYW4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkFYSVNfRk9OVF9TSVpFUyxcbiAgICAgIC4uLnRoaXMuX2NhdGVnb3J5VGl0bGVPcHRpb25zKGNvbmZpZywgZGF0YSksXG4gICAgICAuLi4ocGllXG4gICAgICAgID8geyBzaG93VmFsQXhpc1RpdGxlOiBmYWxzZSB9XG4gICAgICAgIDogdGhpcy5fdmFsdWVBeGlzUmFuZ2VPcHRpb25zKFxuICAgICAgICAgIGNvbmZpZy52YWx1ZUF4aXMsXG4gICAgICAgICAgY29uZmlnLnZhbHVlQXhpcz8ubGFiZWwgPz8gKGNvbmZpZy5wZXJjZW50U3RhY2tlZCA9PT0gdHJ1ZSA/IHVuZGVmaW5lZCA6IGNvbmZpZy5tZWFzdXJlcz8uWzBdPy5sYWJlbCksXG4gICAgICAgICkpLFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgY2F0ZWdvcnkgYXhpcydzIHRpdGxlLCBhcyB0aGUgc2NyZWVuIGFuZCB0aGUgUERGIG5hbWUgaXRcbiAgLy8gKGNhdGVnb3J5QXhpc1RpdGxlKTogYSBkcmlsbGVkIGNoYXJ0J3MgYXhpcyBuYW1lcyB0aGUgbGV2ZWwgaXQgd2FzIHJlYWRcbiAgLy8gYXQsIGVsc2UgdGhlIGF1dGhvcmVkIHRpdGxlLlxuICBwcml2YXRlIF9jYXRlZ29yeVRpdGxlT3B0aW9ucyhjb25maWc6IENoYXJ0Q29uZmlnLCBkYXRhOiBDb21wb25lbnREYXRhKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHRpdGxlID0gY2F0ZWdvcnlBeGlzVGl0bGUoY29uZmlnLCBkYXRhKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaG93Q2F0QXhpc1RpdGxlOiAhIXRpdGxlLFxuICAgICAgY2F0QXhpc1RpdGxlOiB0aXRsZSxcbiAgICAgIGNhdEF4aXNUaXRsZUZvbnRTaXplOiAxMCxcbiAgICB9O1xuICB9XG5cbiAgLy8gT25lIHZhbHVlIGF4aXMncyB0aXRsZSBhbmQgdGhlIHJhbmdlIHRoZSBjb25maWcgcGlucyAodmFsdWVBeGlzUmFuZ2UsIGFzXG4gIC8vIG9uIHNjcmVlbikuIEV2ZXJ5IGtleSBpcyBzZXQsIGV2ZW4gd2hlbiBlbXB0eSwgc28gb24gYSB0d28tYXhpcyBjaGFydFxuICAvLyBub3RoaW5nIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBjaGFydCdzIG9wdGlvbnMuXG4gIHByaXZhdGUgX3ZhbHVlQXhpc1JhbmdlT3B0aW9ucyhheGlzOiBDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZCwgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCByYW5nZSA9IHZhbHVlQXhpc1JhbmdlKGF4aXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dWYWxBeGlzVGl0bGU6ICEhdGl0bGUsXG4gICAgICB2YWxBeGlzVGl0bGU6IHRpdGxlIHx8IHVuZGVmaW5lZCxcbiAgICAgIHZhbEF4aXNNaW5WYWw6IHJhbmdlLm1pbixcbiAgICAgIHZhbEF4aXNNYXhWYWw6IHJhbmdlLm1heCxcbiAgICAgIHZhbEF4aXNNYWpvclVuaXQ6IHJhbmdlLmludGVydmFsLFxuICAgIH07XG4gIH1cblxuICAvLyBBIGxpc3QncyB0YWJsZSwgd2l0aG91dCB0aGUgY29sdW1ucyB0aGUgdmlld2VyIGhpZC4gQSB0b3RhbHMgcm93IGNsb3Nlc1xuICAvLyBpdCwgYm9sZCBvbiB0aGUgYm9yZGVyIGdyYXksIGluIGEgcm93IGtlcHQgZnJlZSBmb3IgaXQuXG4gIHByaXZhdGUgX3JlbmRlclRhYmxlKFxuICAgIHNsaWRlOiBhbnksXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgICBoaWRkZW5Db2x1bW5zOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICB0aW1lem9uZTogc3RyaW5nLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW5zID0gbGlzdENvbHVtbnMoY29tcG9uZW50LCBkYXRhLCBjb250ZXh0LmxvY2FsZSwgaGlkZGVuQ29sdW1ucyk7XG4gICAgY29uc3QgdG90YWxzID0gbGlzdFRvdGFsc1JvdyhkYXRhLCBjb2x1bW5zLCB0aW1lem9uZSwgY29udGV4dCk7XG5cbiAgICBjb25zdCBjYXAgPSBNYXRoLm1heCgyLCBNYXRoLmZsb29yKGggLyBTTElERV9ST1dfSCkgLSAxIC0gKHRvdGFscyA/IDEgOiAwKSk7XG4gICAgY29uc3Qgcm93cyA9IGRhdGEucm93cy5zbGljZSgwLCBjYXApO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IChkYXRhLnBhZ2luZz8udG90YWwgPz8gZGF0YS5yb3dzLmxlbmd0aCkgLSByb3dzLmxlbmd0aDtcblxuICAgIC8vIEEgY29sdW1uIG9mIGZvcm1hdHRlZCBudW1iZXJzIGlzIHJpZ2h0LWFsaWduZWQsIGl0cyBoZWFkaW5nIHRvbywgYXMgb25cbiAgICAvLyBzY3JlZW4uXG4gICAgY29uc3QgYWxpZ24gPSAoaW5kZXg6IG51bWJlcikgPT4gKGNvbHVtbnNbaW5kZXhdPy5udW1lcmljID8geyBhbGlnbjogJ3JpZ2h0JyB9IDoge30pO1xuXG4gICAgY29uc3QgaGVhZGVyID0gbGlzdEhlYWRpbmdzKGNvbXBvbmVudCwgZGF0YSwgY29udGV4dC5sb2NhbGUsIGhpZGRlbkNvbHVtbnMpLm1hcCgoaGVhZGluZywgaW5kZXgpID0+ICh7XG4gICAgICB0ZXh0OiBoZWFkaW5nLFxuICAgICAgb3B0aW9uczogeyBib2xkOiB0cnVlLCBjb2xvcjogJ0ZGRkZGRicsIGZpbGw6IHsgY29sb3I6ICc0RTc5QTcnIH0sIC4uLmFsaWduKGluZGV4KSB9LFxuICAgIH0pKTtcblxuICAgIC8vIEEgZGF0ZSBvciBmb3JtYXR0ZWQtbnVtYmVyIGNlbGwgaXMgYSB2YWx1ZSB3cml0dGVuIGluIHRoZSByZXBvcnQnc1xuICAgIC8vIGxvY2FsZTsgZXZlcnkgb3RoZXIgY2VsbCBwcmludHMgdGhlIHF1ZXJ5J3MgdGV4dCBhcyBpdCBjYW1lLlxuICAgIGNvbnN0IHZhbHVlTG9jYWxlID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbaW5kZXhdO1xuXG4gICAgICByZXR1cm4gY29sdW1uLm51bWVyaWMgfHwgY29sdW1uLmZvcm1hdCA9PT0gUmVwb3J0TGlzdENvbHVtbkZvcm1hdC5EYXRlID8gY29udGV4dC5sb2NhbGUgOiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGJvZHkgPSByb3dzLm1hcCgocm93KSA9PiBjb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleCkgPT4gKHtcbiAgICAgIHRleHQ6IGV4cG9ydENlbGwocm93W2NvbHVtbi5jb2x1bW5dLCBjb2x1bW4sIHRpbWV6b25lLCBjb250ZXh0LCByb3cpLFxuICAgICAgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoYWxpZ24oaW5kZXgpLCB2YWx1ZUxvY2FsZShpbmRleCkpLFxuICAgIH0pKSk7XG5cbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgYm9keS5wdXNoKFt7XG4gICAgICAgIHRleHQ6IG1vcmVSb3dzTm90aWNlKHJlbWFpbmluZyksXG4gICAgICAgIG9wdGlvbnM6IHsgY29sc3BhbjogY29sdW1ucy5sZW5ndGgsIGl0YWxpYzogdHJ1ZSwgY29sb3I6IE1VVEVEX0NPTE9SIH0gYXMgYW55LFxuICAgICAgfV0pO1xuICAgIH1cblxuICAgIC8vIFRoZSBsYWJlbCBpcyBpbnRlcmZhY2UgdGV4dCwgc28gaXQga2VlcHMgdGhlIGRlZmF1bHQgcHJvb2ZpbmcgbGFuZ3VhZ2UuXG4gICAgaWYgKHRvdGFscykge1xuICAgICAgY29uc3QgbGFiZWxDb2x1bW4gPSBsaXN0VG90YWxzTGFiZWxDb2x1bW4oY29sdW1ucywgZGF0YS50b3RhbHMpO1xuXG4gICAgICBib2R5LnB1c2godG90YWxzLm1hcCgodGV4dCwgaW5kZXgpID0+ICh7XG4gICAgICAgIHRleHQsXG4gICAgICAgIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKFxuICAgICAgICAgIHsgYm9sZDogdHJ1ZSwgZmlsbDogeyBjb2xvcjogJ0U0RTdFQicgfSwgLi4uYWxpZ24oaW5kZXgpIH0sXG4gICAgICAgICAgY29sdW1uc1tpbmRleF0uY29sdW1uID09PSBsYWJlbENvbHVtbiA/IHVuZGVmaW5lZCA6IHZhbHVlTG9jYWxlKGluZGV4KSxcbiAgICAgICAgKSxcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgc2xpZGUuYWRkVGFibGUoW2hlYWRlciwgLi4uYm9keV0sIHtcbiAgICAgIHgsIHksIHcsXG4gICAgICBmb250U2l6ZTogOSxcbiAgICAgIGNvbG9yOiAnMUYyOTMzJyxcbiAgICAgIGJvcmRlcjogeyB0eXBlOiAnc29saWQnLCBwdDogMC41LCBjb2xvcjogJ0U0RTdFQicgfSxcbiAgICAgIGF1dG9QYWdlOiBmYWxzZSxcbiAgICAgIHJvd0g6IFNMSURFX1JPV19ILFxuICAgICAgdmFsaWduOiAnbWlkZGxlJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgdGFibGUgdGlsZSBhcyBhIG5hdGl2ZSB0YWJsZSAoZ3JpZEV4cG9ydFRhYmxlKCkpOiBpdHMgaGVhZGluZyByb3dzXG4gIC8vIHNwYW5uZWQgYXMgdGhlIHNjcmVlbidzIGhlYWRlciwgYXMgbWFueSBsaW5lcyBhcyB0aGUgYm94IGhvbGRzIChncm91cHNcbiAgLy8gYW5kIHRvdGFscyBib2xkLCBhIGdyb3VwJ3MgbGFiZWwgc3RlcHBlZCBpbiBieSBpdHMgZGVwdGgpLCB0aGVcbiAgLy8gbW9yZVJvd3NOb3RpY2Ugcm93IGZvciB0aGUgcmVzdCBhbmQgdGhlIHRvdGFsIHJvdy4gQSBudW1iZXIgaXMgd3JpdHRlblxuICAvLyBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlLlxuICBwcml2YXRlIF9yZW5kZXJHcmlkVGFibGUoXG4gICAgc2xpZGU6IGFueSxcbiAgICBpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlID0gZ3JpZEV4cG9ydFRhYmxlKGl0ZW0udGFibGUhKTtcbiAgICBjb25zdCBjZWxsID0gKGV4cG9ydGVkOiBHcmlkRXhwb3J0Q2VsbCwgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSkgPT4gKHtcbiAgICAgIHRleHQ6IGAke0dSSURfSU5ERU5ULnJlcGVhdChleHBvcnRlZC5pbmRlbnQpfSR7ZXhwb3J0ZWQudGV4dH1gLFxuICAgICAgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoe1xuICAgICAgICAuLi4oZXhwb3J0ZWQuY29sU3BhbiA+IDEgPyB7IGNvbHNwYW46IGV4cG9ydGVkLmNvbFNwYW4gfSA6IHt9KSxcbiAgICAgICAgLi4uKGV4cG9ydGVkLnJvd1NwYW4gPiAxID8geyByb3dzcGFuOiBleHBvcnRlZC5yb3dTcGFuIH0gOiB7fSksXG4gICAgICAgIC4uLihleHBvcnRlZC5ib2xkID8geyBib2xkOiB0cnVlIH0gOiB7fSksXG4gICAgICAgIC4uLihleHBvcnRlZC5udW1lcmljID8geyBhbGlnbjogJ3JpZ2h0JyB9IDoge30pLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgfSwgZXhwb3J0ZWQubnVtZXJpYyA/IGNvbnRleHQubG9jYWxlIDogdW5kZWZpbmVkKSxcbiAgICB9KTtcbiAgICBjb25zdCBjYXAgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGggLyBTTElERV9ST1dfSCkgLSB0YWJsZS5oZWFkLmxlbmd0aCAtICh0YWJsZS5mb290ID8gMSA6IDApKTtcbiAgICBjb25zdCBsaW5lcyA9IHRhYmxlLmJvZHkuc2xpY2UoMCwgY2FwKTtcbiAgICBjb25zdCByZW1haW5pbmcgPSB0YWJsZS5ib2R5Lmxlbmd0aCAtIGxpbmVzLmxlbmd0aCArIHRhYmxlLm1vcmVSb3dzO1xuXG4gICAgc2xpZGUuYWRkVGFibGUoW1xuICAgICAgLi4udGFibGUuaGVhZC5tYXAoKHJvdykgPT4gcm93Lm1hcCgoaGVhZGluZykgPT4gY2VsbChoZWFkaW5nLCB7IGNvbG9yOiAnRkZGRkZGJywgZmlsbDogeyBjb2xvcjogJzRFNzlBNycgfSB9KSkpLFxuICAgICAgLi4ubGluZXMubWFwKChyb3cpID0+IHJvdy5tYXAoKGxpbmUpID0+IGNlbGwobGluZSkpKSxcbiAgICAgIC4uLihyZW1haW5pbmcgPiAwXG4gICAgICAgID8gW1t7IHRleHQ6IG1vcmVSb3dzTm90aWNlKHJlbWFpbmluZyksIG9wdGlvbnM6IHsgY29sc3BhbjogdGFibGUubnVtZXJpYy5sZW5ndGgsIGl0YWxpYzogdHJ1ZSwgY29sb3I6IE1VVEVEX0NPTE9SIH0gfV1dXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHRhYmxlLmZvb3QgPyBbdGFibGUuZm9vdC5tYXAoKHRvdGFsKSA9PiBjZWxsKHRvdGFsLCB7IGJvbGQ6IHRydWUsIGZpbGw6IHsgY29sb3I6ICdFNEU3RUInIH0gfSkpXSA6IFtdKSxcbiAgICBdLCB7XG4gICAgICB4LCB5LCB3LFxuICAgICAgZm9udFNpemU6IDksXG4gICAgICBjb2xvcjogJzFGMjkzMycsXG4gICAgICBib3JkZXI6IHsgdHlwZTogJ3NvbGlkJywgcHQ6IDAuNSwgY29sb3I6ICdFNEU3RUInIH0sXG4gICAgICBhdXRvUGFnZTogZmFsc2UsXG4gICAgICByb3dIOiBTTElERV9ST1dfSCxcbiAgICAgIHZhbGlnbjogJ21pZGRsZScsXG4gICAgfSk7XG4gIH1cblxuICAvLyBBIEtQSSB0aWxlOiB0aGUgY2FyZCB0aGUgc2NyZWVuIGRyYXdzIChrcGktY2FyZC50cyBkZWNpZGVzIGV2ZXJ5IGxpbmUpLFxuICAvLyBhcyBuYXRpdmUgdGV4dCBib3hlcyBhbmQgc2hhcGVzIHN0YWNrZWQgYW5kIGNlbnRlcmVkIGluIHRoZSBib2R5LiBBIGNhcmRcbiAgLy8gd2l0aCBvbmx5IGl0cyB2YWx1ZSBhbmQgbGFiZWwga2VlcHMgdGhlIHRpbGUncyBsb25nLXN0YW5kaW5nIHNpbmdsZSB0ZXh0XG4gIC8vIGJveC5cbiAgcHJpdmF0ZSBfcmVuZGVyS3BpKFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICB0aW1lem9uZTogc3RyaW5nLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBpdGVtLmNvbXBvbmVudC5jb25maWcgYXMgS3BpQ29uZmlnO1xuICAgIGNvbnN0IHZpZXcgPSBrcGlDYXJkVmlldyhjb25maWcsIGl0ZW0uZGF0YSwgeyBmb3JtYXQ6IGNvbnRleHQsIHRpbWV6b25lIH0pO1xuICAgIGNvbnN0IG5vdGVzID0gZXhwb3J0Tm90ZUxpbmVzKGl0ZW0sIHRpbWV6b25lLCBjb250ZXh0LmxvY2FsZSk7XG5cbiAgICBpZiAoIWtwaUNhcmRIYXNFeHRyYXModmlldywgbm90ZXMpKSB7XG4gICAgICBzbGlkZS5hZGRUZXh0KFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHZpZXcudmFsdWUsXG4gICAgICAgICAgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoeyBmb250U2l6ZTogMjgsIGJvbGQ6IHRydWUsIGNvbG9yOiAnMUYyOTMzJywgYnJlYWtMaW5lOiB0cnVlIH0sIGNvbnRleHQubG9jYWxlKSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0ZXh0OiB2aWV3LmxhYmVsLCBvcHRpb25zOiB7IGZvbnRTaXplOiAxMCwgY29sb3I6IE1VVEVEX0NPTE9SIH0gfSxcbiAgICAgIF0sIHtcbiAgICAgICAgeCwgeSwgdywgaCxcbiAgICAgICAgYWxpZ246ICdjZW50ZXInLFxuICAgICAgICB2YWxpZ246ICdtaWRkbGUnLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBIHRpbGUgdG9vIHNob3J0IGZvciB0aGUgY2FyZCdzIGxpbmVzIHNocmlua3MgdGhlbSBhbGwgYWxpa2UuXG4gICAgY29uc3QgcGFydHMgPSBrcGlFeHBvcnRQYXJ0cyh2aWV3LCBub3RlcywgaCwgS1BJX0hFSUdIVFMpO1xuICAgIGNvbnN0IGhlaWdodHMgPSBzY2FsZWRLcGlIZWlnaHRzKEtQSV9IRUlHSFRTLCBwYXJ0cy5zY2FsZSk7XG4gICAgY29uc3QgbGluZUZvbnRTaXplID0gS1BJX0xJTkVfRk9OVF9TSVpFICogcGFydHMuc2NhbGU7XG4gICAgbGV0IHRvcCA9IHkgKyBNYXRoLm1heCgwLCAoaCAtIGtwaUV4cG9ydEhlaWdodCh2aWV3LCBwYXJ0cywgaGVpZ2h0cykpIC8gMik7XG4gICAgY29uc3QgbGluZSA9IChydW5zOiBhbnlbXSB8IHN0cmluZywgcm93SDogbnVtYmVyLCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgc2xpZGUuYWRkVGV4dChydW5zLCB7XG4gICAgICAgIHgsIHk6IHRvcCwgdywgaDogcm93SCxcbiAgICAgICAgYWxpZ246ICdjZW50ZXInLCB2YWxpZ246ICdtaWRkbGUnLCBtYXJnaW46IDAsIGZpdDogJ25vbmUnLCAuLi5vcHRpb25zLFxuICAgICAgfSk7XG4gICAgICB0b3AgKz0gcm93SDtcbiAgICB9O1xuXG4gICAgbGluZShcbiAgICAgIFt7IHRleHQ6IHZpZXcudmFsdWUsIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKHsgYm9sZDogdHJ1ZSwgY29sb3I6ICcxRjI5MzMnIH0sIGNvbnRleHQubG9jYWxlKSB9XSxcbiAgICAgIGhlaWdodHMudmFsdWUsXG4gICAgICB7IGZvbnRTaXplOiAyOCAqIHBhcnRzLnNjYWxlIH0sXG4gICAgKTtcblxuICAgIGlmICh2aWV3LmxhYmVsKSB7XG4gICAgICBsaW5lKHZpZXcubGFiZWwsIGhlaWdodHMubGFiZWwsIHsgZm9udFNpemU6IDEwICogcGFydHMuc2NhbGUsIGNvbG9yOiBNVVRFRF9DT0xPUiB9KTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMuZGVsdGEgJiYgdmlldy5kZWx0YSkge1xuICAgICAgdGhpcy5fa3BpRGVsdGEocHB0eCwgc2xpZGUsIHZpZXcuZGVsdGEsIGNvbnRleHQsIHgsIHRvcCwgdywgcGFydHMuc2NhbGUpO1xuICAgICAgdG9wICs9IGhlaWdodHMuZGVsdGE7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLndpbmRvdykge1xuICAgICAgY29uc3QgZGF5cyA9IHRoaXMuX2ZpdEVzdGltYXRlKHZpZXcud2luZG93LCBsaW5lRm9udFNpemUsIHcpO1xuXG4gICAgICBsaW5lKFt7IHRleHQ6IGRheXMsIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKHt9LCBjb250ZXh0LmxvY2FsZSkgfV0sIGhlaWdodHMud2luZG93LCB7XG4gICAgICAgIGZvbnRTaXplOiBsaW5lRm9udFNpemUsIGNvbG9yOiBNVVRFRF9DT0xPUixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy50YXJnZXQgJiYgdmlldy50YXJnZXQpIHtcbiAgICAgIHRoaXMuX2twaVRhcmdldChwcHR4LCBzbGlkZSwgdmlldy50YXJnZXQsIHgsIHRvcCwgdyk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy50YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLnNwYXJrbGluZSAmJiB2aWV3LnNwYXJrbGluZSkge1xuICAgICAgdGhpcy5fa3BpU3BhcmtsaW5lKHBwdHgsIHNsaWRlLCBpdGVtLCB2aWV3LnNwYXJrbGluZS52YWx1ZXMsIHZpZXcubGFiZWwsIHgsIHRvcCwgdyk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy5zcGFya2xpbmU7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLm5vdGVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZml0dGVkID0gcGFydHMubm90ZXMubWFwKChub3RlKSA9PiB0aGlzLl9maXRFc3RpbWF0ZShub3RlLCBTTUFMTF9GT05UX1NJWkUsIHcpKTtcblxuICAgICAgbGluZSh0aGlzLl9saW5lUnVucyhmaXR0ZWQsIHsgaXRhbGljOiB0cnVlIH0pLCBwYXJ0cy5ub3Rlcy5sZW5ndGggKiBoZWlnaHRzLm5vdGUsIHtcbiAgICAgICAgZm9udFNpemU6IFNNQUxMX0ZPTlRfU0laRSwgY29sb3I6IE1VVEVEX0NPTE9SLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGRlbHRhIHJvdzogdGhlIGNoYW5nZSBpbiB0aGUgY29sb3Igb2Ygd2hhdCBpdCBtZWFucyBhbmQgd2hhdCBpdCBpc1xuICAvLyBjb21wYXJlZCB3aXRoIGluIGdyZXksIGFzIG9uZSBjZW50ZXJlZCB0ZXh0IGJveCwgd2l0aCBhIHRyaWFuZ2xlIGJlc2lkZVxuICAvLyBpdCBwb2ludGluZyB0aGUgd2F5IHRoZSB2YWx1ZSBtb3ZlZCAobm9uZSB3aGVuIHRoZSBzaG93biBjaGFuZ2Ugcm91bmRzIHRvXG4gIC8vIHplcm8pLiBQb3dlclBvaW50IGxheXMgdGhlIHRleHQgb3V0IGl0c2VsZiwgc28gdGhlIHRyaWFuZ2xlIHNpdHMgd2hlcmVcbiAgLy8gdGhlIHRleHQncyBlc3RpbWF0ZWQgd2lkdGggcHV0cyBpdHMgc3RhcnQuXG4gIHByaXZhdGUgX2twaURlbHRhKFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGRlbHRhOiBLcGlDYXJkRGVsdGEsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3OiBudW1iZXIsXG4gICAgc2NhbGUgPSAxLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb2xvciA9IFJFUE9SVF9LUElfQ0hBTkdFX0NPTE9SU1tkZWx0YS50b25lXTtcbiAgICBjb25zdCBmb250U2l6ZSA9IEtQSV9MSU5FX0ZPTlRfU0laRSAqIHNjYWxlO1xuICAgIGNvbnN0IHJvd0ggPSBLUElfSEVJR0hUUy5kZWx0YSAqIHNjYWxlO1xuICAgIGNvbnN0IHNpZGUgPSBLUElfQVJST1cgKiBzY2FsZTtcbiAgICBjb25zdCBhcnJvdyA9IGRlbHRhLnRyZW5kID09PSBSZXBvcnRLcGlUcmVuZC5GbGF0ID8gMCA6IHNpZGUgKyBLUElfQVJST1dfR0FQICogc2NhbGU7XG4gICAgY29uc3QgY2hhbmdlVyA9IHRoaXMuX2VzdGltYXRlZFdpZHRoKGRlbHRhLnRleHQsIGZvbnRTaXplKTtcbiAgICBjb25zdCBjb21wYXJlZCA9IGRlbHRhLmNvbXBhcmVkXG4gICAgICA/IHRoaXMuX2ZpdEVzdGltYXRlKGAgJHtkZWx0YS5jb21wYXJlZH1gLCBmb250U2l6ZSwgdyAtIGFycm93IC0gY2hhbmdlVylcbiAgICAgIDogJyc7XG4gICAgY29uc3QgdGV4dFcgPSBNYXRoLm1pbih3IC0gYXJyb3csIGNoYW5nZVcgKyB0aGlzLl9lc3RpbWF0ZWRXaWR0aChjb21wYXJlZCwgZm9udFNpemUpKTtcbiAgICBjb25zdCBydW5zID0gW1xuICAgICAgeyB0ZXh0OiBkZWx0YS50ZXh0LCBvcHRpb25zOiBwcHR4UnVuT3B0aW9ucyh7IGJvbGQ6IHRydWUsIGNvbG9yIH0sIGNvbnRleHQubG9jYWxlKSB9LFxuICAgICAgLi4uKGNvbXBhcmVkID8gW3sgdGV4dDogY29tcGFyZWQsIG9wdGlvbnM6IHsgY29sb3I6IE1VVEVEX0NPTE9SIH0gfV0gOiBbXSksXG4gICAgXTtcblxuICAgIHNsaWRlLmFkZFRleHQocnVucywge1xuICAgICAgeDogeCArIGFycm93LCB5OiB0b3AsIHc6IE1hdGgubWF4KDAuMSwgdyAtIGFycm93KSwgaDogcm93SCxcbiAgICAgIGZvbnRTaXplLCBhbGlnbjogJ2NlbnRlcicsIHZhbGlnbjogJ21pZGRsZScsIG1hcmdpbjogMCwgZml0OiAnbm9uZScsXG4gICAgfSk7XG5cbiAgICBpZiAoYXJyb3cpIHtcbiAgICAgIHNsaWRlLmFkZFNoYXBlKHBwdHguU2hhcGVUeXBlLnRyaWFuZ2xlLCB7XG4gICAgICAgIHg6IE1hdGgubWF4KHgsIHggKyAodyAtIGFycm93IC0gdGV4dFcpIC8gMiksXG4gICAgICAgIHk6IHRvcCArIChyb3dIIC0gc2lkZSkgLyAyLFxuICAgICAgICB3OiBzaWRlLFxuICAgICAgICBoOiBzaWRlLFxuICAgICAgICBmaWxsOiB7IGNvbG9yIH0sXG4gICAgICAgIGxpbmU6IHsgY29sb3IsIHdpZHRoOiAwIH0sXG4gICAgICAgIGZsaXBWOiBkZWx0YS50cmVuZCA9PT0gUmVwb3J0S3BpVHJlbmQuRG93bixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFib3V0IGhvdyB3aWRlIGEgbGluZSBvZiB0ZXh0IHJ1bnMsIGluY2hlczogUG93ZXJQb2ludCBsYXlzIGl0IG91dCwgc29cbiAgLy8gb25seSBhbiBlc3RpbWF0ZSBmcm9tIGl0cyBhdmVyYWdlIGNoYXJhY3RlciB3aWR0aCBpcyB0byBoYW5kLlxuICBwcml2YXRlIF9lc3RpbWF0ZWRXaWR0aCh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCAqIGZvbnRTaXplICogUFBUWF9DSEFSX1dJRFRIIC8gNzI7XG4gIH1cblxuICAvLyBUaGUgdGV4dCBjdXQgd2l0aCBhbiBlbGxpcHNpcyB0byBhYm91dCB0aGUgd2lkdGgsIHNvIGEgbGluZSB0aGF0IHdvdWxkXG4gIC8vIHdyYXAgcGFzdCBpdHMgcm93IHN0YXlzIG9uZSBsaW5lLlxuICBwcml2YXRlIF9maXRFc3RpbWF0ZSh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplOiBudW1iZXIsIHdpZHRoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9lc3RpbWF0ZWRXaWR0aCh0ZXh0LCBmb250U2l6ZSkgPD0gd2lkdGgpIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cblxuICAgIGNvbnN0IGNoYXJzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih3aWR0aCAqIDcyIC8gKGZvbnRTaXplICogUFBUWF9DSEFSX1dJRFRIKSkgLSAxKTtcblxuICAgIHJldHVybiBjaGFycyA/IGAke3RleHQuc2xpY2UoMCwgY2hhcnMpLnRyaW1FbmQoKX3igKZgIDogJyc7XG4gIH1cblxuICAvLyBUaGUgdGFyZ2V0IGxpbmUgKCdHb2FsOiAkMSwwMDAgwrcgNTYlIG9mIHRhcmdldCcpIGFuZCwgd2hlbiB0aGUgc2VydmVyIHNlbnRcbiAgLy8gdGhlIHByb2dyZXNzLCBhIGJhciBmaWxsZWQgdGhhdCBmYXI6IGdyZWVuIG9uY2UgdGhlIHRhcmdldCBpcyBtZXQuXG4gIHByaXZhdGUgX2twaVRhcmdldChwcHR4OiBhbnksIHNsaWRlOiBhbnksIHRhcmdldDogS3BpQ2FyZFRhcmdldCwgeDogbnVtYmVyLCB0b3A6IG51bWJlciwgdzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdGV4dCA9IHRhcmdldC5wcm9ncmVzcyA/IGAke3RhcmdldC50ZXh0fSDCtyAke3RhcmdldC5wcm9ncmVzc31gIDogdGFyZ2V0LnRleHQ7XG5cbiAgICBzbGlkZS5hZGRUZXh0KHRoaXMuX2ZpdEVzdGltYXRlKHRleHQsIEtQSV9MSU5FX0ZPTlRfU0laRSwgdyksIHtcbiAgICAgIHgsIHk6IHRvcCwgdywgaDogS1BJX1RBUkdFVF9URVhUX0gsXG4gICAgICBmb250U2l6ZTogS1BJX0xJTkVfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsIGFsaWduOiAnY2VudGVyJywgdmFsaWduOiAnbWlkZGxlJywgbWFyZ2luOiAwLCBmaXQ6ICdub25lJyxcbiAgICB9KTtcblxuICAgIGlmICh0YXJnZXQuZmlsbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhclcgPSBNYXRoLm1pbih3ICogMC42LCBLUElfQkFSX1cpO1xuICAgIGNvbnN0IGJhclggPSB4ICsgKHcgLSBiYXJXKSAvIDI7XG4gICAgY29uc3QgYmFyWSA9IHRvcCArIEtQSV9UQVJHRVRfVEVYVF9IICsgS1BJX0JBUl9HQVA7XG4gICAgY29uc3QgYmFyID0gKHdpZHRoOiBudW1iZXIsIGNvbG9yOiBzdHJpbmcpID0+IHNsaWRlLmFkZFNoYXBlKHBwdHguU2hhcGVUeXBlLnJlY3QsIHtcbiAgICAgIHg6IGJhclgsIHk6IGJhclksIHc6IHdpZHRoLCBoOiBLUElfQkFSX0gsIGZpbGw6IHsgY29sb3IgfSwgbGluZTogeyBjb2xvciwgd2lkdGg6IDAgfSxcbiAgICB9KTtcblxuICAgIGJhcihiYXJXLCBLUElfVFJBQ0tfQ09MT1IpO1xuXG4gICAgaWYgKHRhcmdldC5maWxsID4gMCkge1xuICAgICAgYmFyKGJhclcgKiB0YXJnZXQuZmlsbCwgUkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTW3RhcmdldC50b25lXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHNwYXJrbGluZSBhcyBhIG5hdGl2ZSBsaW5lIGNoYXJ0IHdpdGggaXRzIGF4ZXMsIGdyaWRsaW5lcyBhbmQgbGVnZW5kXG4gIC8vIGhpZGRlbiwgc2NhbGVkIGZyb20gaXRzIGxvd2VzdCB2YWx1ZSB0byBpdHMgaGlnaGVzdCBhcyBvbiBzY3JlZW4sIGl0c1xuICAvLyBwZXJpb2RzIGFuZCB2YWx1ZXMgaW4gdGhlIGNoYXJ0J3MgZGF0YSBzaGVldC4gQSBnYXAgc3RheXMgYSBnYXAuIE1hcmtlcnNcbiAgLy8gc2hvdyBvbmx5IHdoZW4gYSB2YWx1ZSBzdGFuZHMgYWxvbmUgYmV0d2VlbiBnYXBzICh0aGUgbGFzdCBvbmUgdG9vKSxcbiAgLy8gd2hpY2ggYSBsaW5lIGNhbm5vdCBkcmF3LlxuICBwcml2YXRlIF9rcGlTcGFya2xpbmUoXG4gICAgcHB0eDogYW55LFxuICAgIHNsaWRlOiBhbnksXG4gICAgaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50LFxuICAgIHZhbHVlczogKG51bWJlciB8IG51bGwpW10sXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICB4OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3OiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG51bWJlcnMgPSB2YWx1ZXMuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIG51bWJlciA9PiB2YWx1ZSAhPT0gbnVsbCk7XG4gICAgY29uc3QgbG93ID0gTWF0aC5taW4oLi4ubnVtYmVycyk7XG4gICAgY29uc3QgaGlnaCA9IE1hdGgubWF4KC4uLm51bWJlcnMpO1xuICAgIGNvbnN0IHBhZCA9IGhpZ2ggPT09IGxvdyA/IE1hdGgubWF4KDEsIE1hdGguYWJzKGhpZ2gpKSA6IDA7XG4gICAgY29uc3QgYm94VyA9IE1hdGgubWluKHcgKiAwLjcsIEtQSV9TUEFSS0xJTkVfVyk7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBrcGlTcGFya2xpbmVHZW9tZXRyeSh2YWx1ZXMsIGZhbHNlKTtcbiAgICAvLyBrcGlTcGFya2xpbmVHZW9tZXRyeSBrZWVwcyB0aGUgbGFzdCBwb2ludCBvdXQgb2YgdGhlIGRvdHMsIGFzIHRoZVxuICAgIC8vIHNjcmVlbiBtYXJrcyBpdCBhcGFydDsgYSBsYXN0IHZhbHVlIGFmdGVyIGEgZ2FwIGlzIGEgbG9uZSBwb2ludCB0b28uXG4gICAgY29uc3QgbGFzdFN0YW5kc0Fsb25lID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXSAhPT0gbnVsbFxuICAgICAgJiYgKHZhbHVlcy5sZW5ndGggPT09IDEgfHwgdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAyXSA9PT0gbnVsbCk7XG4gICAgY29uc3QgcGVyaW9kcyA9IGl0ZW0uZGF0YT8ua3BpPy5zcGFya2xpbmU/LnBvaW50cz8ubWFwKChwb2ludCkgPT4gcG9pbnQucGVyaW9kKSA/PyBbXTtcbiAgICBjb25zdCBjb2xvciA9IFJFUE9SVF9LUElfU1BBUktMSU5FX0NPTE9SO1xuXG4gICAgdGhpcy5fYWRkQ2hhcnQoc2xpZGUsIHsgbGluZTogcHB0eC5DaGFydFR5cGUubGluZSB9LCBbe1xuICAgICAgdHlwZTogJ2xpbmUnLFxuICAgICAgaW5kZXhlczogWzBdLFxuICAgICAgc2Vjb25kYXJ5OiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY2hhcnRDb2xvcnM6IFtjb2xvcl0sXG4gICAgICAgIGxpbmVTaXplOiAxLjUsXG4gICAgICAgIGxpbmVEYXRhU3ltYm9sOiBnZW9tZXRyeS5kb3RzLmxlbmd0aCB8fCBsYXN0U3RhbmRzQWxvbmUgPyAnY2lyY2xlJyA6ICdub25lJyxcbiAgICAgICAgbGluZURhdGFTeW1ib2xTaXplOiA0LFxuICAgICAgfSxcbiAgICB9XSwgW3tcbiAgICAgIG5hbWU6IGxhYmVsIHx8IEtQSV9TUEFSS0xJTkVfTkFNRSxcbiAgICAgIGxhYmVsczogdmFsdWVzLm1hcCgoXywgaW5kZXgpID0+IHBlcmlvZHNbaW5kZXhdID8/IFN0cmluZyhpbmRleCArIDEpKSxcbiAgICAgIHZhbHVlcyxcbiAgICB9XSwge1xuICAgICAgeDogeCArICh3IC0gYm94VykgLyAyLCB5OiB0b3AsIHc6IGJveFcsIGg6IEtQSV9IRUlHSFRTLnNwYXJrbGluZSxcbiAgICAgIHNob3dMZWdlbmQ6IGZhbHNlLFxuICAgICAgc2hvd1RpdGxlOiBmYWxzZSxcbiAgICAgIGNhdEF4aXNIaWRkZW46IHRydWUsXG4gICAgICB2YWxBeGlzSGlkZGVuOiB0cnVlLFxuICAgICAgY2F0QXhpc0xpbmVTaG93OiBmYWxzZSxcbiAgICAgIHZhbEF4aXNMaW5lU2hvdzogZmFsc2UsXG4gICAgICBzaG93Q2F0QXhpc1RpdGxlOiBmYWxzZSxcbiAgICAgIHNob3dWYWxBeGlzVGl0bGU6IGZhbHNlLFxuICAgICAgdmFsR3JpZExpbmU6IHsgc3R5bGU6ICdub25lJyB9LFxuICAgICAgY2F0R3JpZExpbmU6IHsgc3R5bGU6ICdub25lJyB9LFxuICAgICAgdmFsQXhpc01pblZhbDogbG93IC0gcGFkLFxuICAgICAgdmFsQXhpc01heFZhbDogaGlnaCArIHBhZCxcbiAgICAgIC4uLkJMQU5LU19BU19HQVBTLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2x1ZyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldKy9nLCAnLScpLnJlcGxhY2UoL14tK3wtKyQvZywgJycpIHx8ICdyZXBvcnQnO1xuICB9XG59XG5cbi8vIEdpdmVzIGEgdGV4dCB0YWJsZSdzIGNlbGwgdGhlIGdyaWQgc2xvdHMgaXQgY292ZXJzIGZyb20gaXRzIHRvcCBsZWZ0OiBhc1xuLy8gbWFueSBjb2x1bW5zIGFzIGFyZSBmcmVlIGluIGl0cyB0b3Agcm93LCBhbmQgYXMgbWFueSByb3dzIGRvd24gYXMgYXJlIGZyZWVcbi8vIGFjcm9zcyB0aG9zZSBjb2x1bW5zLCBhdCBtb3N0IGl0cyBvd24gc3BhbnMuIEEgc2xvdCBpcyBmcmVlIHVudGlsIGEgY2VsbFxuLy8gcGxhY2VkIGJlZm9yZSBpdCBob2xkcyBpdCwgYW5kIHRoZSBncmlkIGhvbGRzIG9ubHkgdGhlIGtlcHQgcm93cy4gU28gYSBzcGFuXG4vLyB0aGUgYm94IGN1dHMgZW5kcyBhdCB0aGUgbGFzdCBrZXB0IHJvdywgYW5kIG9uZSB0aGUgaHRtbCBtYWtlcyBvdmVybGFwXG4vLyBhbm90aGVyIGNlbGwgKHdoaWNoIGEgYnJvd3NlciBkcmF3cyBvbiB0b3Agb2YgaXQpIGVuZHMgd2hlcmUgdGhleSBtZWV0LlxuZnVuY3Rpb24gY2xhaW1TbG90cyhzbG90czogKFRleHRUYWJsZUNlbGwgfCBudWxsKVtdW10sIGNlbGw6IFRleHRUYWJsZUNlbGwpOiB2b2lkIHtcbiAgY29uc3QgZnJlZSA9IChyb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIpID0+IHJvdyA8IHNsb3RzLmxlbmd0aCAmJiBjb2x1bW4gPCBzbG90c1tyb3ddLmxlbmd0aCAmJiAhc2xvdHNbcm93XVtjb2x1bW5dO1xuICBjb25zdCBjb2x1bW5zID0gKGNvdW50OiBudW1iZXIpID0+IEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0sIChfLCBvZmZzZXQpID0+IGNlbGwuY29sdW1uICsgb2Zmc2V0KTtcbiAgbGV0IGNvbFNwYW4gPSAwO1xuICBsZXQgcm93U3BhbiA9IDA7XG5cbiAgd2hpbGUgKGNvbFNwYW4gPCBjZWxsLmNvbFNwYW4gJiYgZnJlZShjZWxsLnJvdywgY2VsbC5jb2x1bW4gKyBjb2xTcGFuKSkge1xuICAgIGNvbFNwYW4rKztcbiAgfVxuICB3aGlsZSAoY29sU3BhbiAmJiByb3dTcGFuIDwgY2VsbC5yb3dTcGFuICYmIGNvbHVtbnMoY29sU3BhbikuZXZlcnkoKGNvbHVtbikgPT4gZnJlZShjZWxsLnJvdyArIHJvd1NwYW4sIGNvbHVtbikpKSB7XG4gICAgcm93U3BhbisrO1xuICB9XG5cbiAgY29uc3QgY2xhaW1lZCA9IHsgLi4uY2VsbCwgY29sU3Bhbiwgcm93U3BhbiB9O1xuICBmb3IgKGxldCByb3cgPSBjZWxsLnJvdzsgcm93IDwgY2VsbC5yb3cgKyByb3dTcGFuOyByb3crKykge1xuICAgIHNsb3RzW3Jvd10uZmlsbChjbGFpbWVkLCBjZWxsLmNvbHVtbiwgY2VsbC5jb2x1bW4gKyBjb2xTcGFuKTtcbiAgfVxufVxuIl19