@firestitch/report 18.21.4 → 18.21.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/reports/components/component-list/component-list.component.d.ts +3 -0
- package/app/reports/export/report-export-collector.service.d.ts +1 -1
- package/app/reports/export/report-pptx.service.d.ts +0 -1
- package/app/reports/interfaces/report-value-label.interface.d.ts +4 -0
- package/app/reports/interfaces/report.interface.d.ts +2 -0
- package/app/reports/option-builder.d.ts +1 -0
- package/app/reports/value-labels.d.ts +2 -0
- package/esm2022/app/reports/components/component-list/component-list.component.mjs +11 -3
- package/esm2022/app/reports/export/report-export-collector.service.mjs +13 -8
- package/esm2022/app/reports/export/report-pdf.service.mjs +2 -2
- package/esm2022/app/reports/export/report-pptx.service.mjs +9 -17
- package/esm2022/app/reports/interfaces/report-value-label.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/mark-click.mjs +9 -6
- package/esm2022/app/reports/option-builder.mjs +60 -10
- package/esm2022/app/reports/value-labels.mjs +26 -0
- package/esm2022/public_api.mjs +2 -1
- package/fesm2022/{firestitch-report-echarts-CBBTk1Ql.mjs → firestitch-report-echarts-D7WNr0Z4.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-CBBTk1Ql.mjs.map → firestitch-report-echarts-D7WNr0Z4.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-Cl_JOBli.mjs → firestitch-report-firestitch-report-DWP3aywv.mjs} +123 -42
- package/fesm2022/firestitch-report-firestitch-report-DWP3aywv.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
- package/fesm2022/firestitch-report-firestitch-report-Cl_JOBli.mjs.map +0 -1
|
@@ -20,6 +20,7 @@ import { ReportFilterOptionsService } from '../services/report-filter-options.se
|
|
|
20
20
|
import { ReportFilterStateService } from '../services/report-filter-state.service';
|
|
21
21
|
import { fillTitleTokens, textPlain } from '../text';
|
|
22
22
|
import { tileDataState, valuesMatchAnyGroupIds } from '../tile-data-state';
|
|
23
|
+
import { valueLabel } from '../value-labels';
|
|
23
24
|
import { failedValueKeys, reportComponents, shownValues, textValues, valueKeys, } from '../values';
|
|
24
25
|
import { exportLines, matchLineText, valuePicks } from './report-filter-lines';
|
|
25
26
|
import { GRID_EXPORT_COLUMNS, gridExportNotes } from './report-grid-export';
|
|
@@ -98,15 +99,17 @@ export function coverLines(collected) {
|
|
|
98
99
|
// An exported list cell, reading like the on-screen cell, through the same
|
|
99
100
|
// functions as the screen: a date column renders in the report's zone and
|
|
100
101
|
// locale, and a column with number-format keys (a cross-tab's cells through
|
|
101
|
-
// its cellFormat) in the report's locale and currency.
|
|
102
|
-
//
|
|
103
|
-
//
|
|
102
|
+
// its cellFormat) in the report's locale and currency. A value of a column
|
|
103
|
+
// the data labels (`labels`, ComponentData.valueLabels: an enum's, a
|
|
104
|
+
// cross-tab's row key's) reads as its label. Any other value goes out
|
|
105
|
+
// verbatim, and an empty one as ''. CSV never comes through here: the server
|
|
106
|
+
// writes it, labels included.
|
|
104
107
|
//
|
|
105
108
|
// An output column is written by what it holds, as the screen's cell is
|
|
106
109
|
// (formatOutputValue): a signed change, a percent change, a change of a rate
|
|
107
110
|
// in points, a rank, a share. Its row gives a change the prior beside it, so
|
|
108
111
|
// a missing baseline ('—') reads apart from a zero one ('n/a').
|
|
109
|
-
export function exportCell(value, column, timezone, context, row) {
|
|
112
|
+
export function exportCell(value, column, timezone, context, row, labels) {
|
|
110
113
|
const output = column.output;
|
|
111
114
|
if (output) {
|
|
112
115
|
return formatOutputValue(value, output.output, column, context, {
|
|
@@ -122,13 +125,15 @@ export function exportCell(value, column, timezone, context, row) {
|
|
|
122
125
|
if (column.format === ReportListColumnFormat.Date) {
|
|
123
126
|
return formatReportDate(value, timezone, context.locale);
|
|
124
127
|
}
|
|
125
|
-
return
|
|
128
|
+
return valueLabel(labels, column.column, value)
|
|
129
|
+
?? (hasNumberFormat(column) ? formatNumber(value, column, context, { empty: '' }) : String(value));
|
|
126
130
|
}
|
|
127
131
|
// The columns an exported list table draws. A cross-tab's arrive with its
|
|
128
132
|
// rows (the row key first, then one per pivot value), since only the result
|
|
129
133
|
// knows the pivot values, and are built by pivotColumnSpecs() as on screen:
|
|
130
|
-
// headed by its
|
|
131
|
-
//
|
|
134
|
+
// headed by its pivot values as pivotHeadings() reads them (their labels, its
|
|
135
|
+
// periods in the report's locale), each pivot value formatted by cellFormat.
|
|
136
|
+
// A plain list draws its configured columns but the ones the
|
|
132
137
|
// viewer hid (`hidden`, kept to listHiddenColumns, so never all of them),
|
|
133
138
|
// else every column the query returned, as it came. Output columns (the
|
|
134
139
|
// data's outputs, a cross-tab cell through cellMeasures) carry how they are
|
|
@@ -681,4 +686,4 @@ export class ReportExportCollectorService {
|
|
|
681
686
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportExportCollectorService, decorators: [{
|
|
682
687
|
type: Injectable
|
|
683
688
|
}] });
|
|
684
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4cG9ydC1jb2xsZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LWV4cG9ydC1jb2xsZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQTRCLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNFLE9BQU8sRUFBYyxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUNMLFFBQVEsRUFDUixlQUFlLEVBQ2YsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLHFCQUFxQixHQUN0QixNQUFNLFdBQVcsQ0FBQztBQXNCbkIsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLHFCQUFxQixHQUN0QixNQUFNLGdCQUFn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RUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDekQsQ0FBQztJQUNOLENBQUM7d0dBN2NVLDRCQUE0Qjs0R0FBNUIsNEJBQTRCOzs0RkFBNUIsNEJBQTRCO2tCQUR4QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEdyaWRGb3JtYXR0ZXIsIEdyaWRUYWJsZSwgcmVhZEdyaWRUYWJsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2dyaWQnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmb3JrSm9pbiwgZnJvbSwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdG9BcnJheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgcmVwb3J0R3JpZEZvcm1hdHRlciB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29tcG9uZW50LWdyaWQvcmVwb3J0LWdyaWQtZm9ybWF0dGVyJztcbmltcG9ydCB7IFJlcG9ydEdyaWRTb3VyY2UgfSBmcm9tICcuLi9kYXRhL3JlcG9ydC1ncmlkLXNvdXJjZSc7XG5pbXBvcnQgeyBSZXBvcnREYXRhIH0gZnJvbSAnLi4vZGF0YS9yZXBvcnQuZGF0YSc7XG5pbXBvcnQgeyBjcnVtYmVkVGl0bGUsIGRyaWxsQ3J1bWJMYWJlbHMgfSBmcm9tICcuLi9kcmlsbC1jcnVtYnMnO1xuaW1wb3J0IHsgUmVwb3J0TGlzdENvbHVtbkZvcm1hdCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1saXN0LWNvbHVtbi1mb3JtYXQuZW51bSc7XG5pbXBvcnQgeyBsYXllckZpbHRlckZpZWxkcywgdGV4dEZpbHRlckZpZWxkcyB9IGZyb20gJy4uL2ZpbHRlci10ZXh0JztcbmltcG9ydCB7XG4gIERBWV9MT05HLFxuICBmb3JtYXRMb2NhbERhdGUsXG4gIGZvcm1hdE51bWJlcixcbiAgZm9ybWF0T3V0cHV0VmFsdWUsXG4gIGZvcm1hdFJlcG9ydERhdGUsXG4gIGhhc051bWJlckZvcm1hdCxcbiAgcmVzb2x2ZVJlcG9ydFRpbWV6b25lLFxufSBmcm9tICcuLi9mb3JtYXQnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0TGluZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWV4cG9ydC1saW5lLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRFeHBvcnRMaW5lc0lucHV0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZXhwb3J0LWxpbmVzLWlucHV0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRFeHBvcnRTbmFwc2hvdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWV4cG9ydC1zbmFwc2hvdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0U3RhdGVTbmFwc2hvdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LXN0YXRlLXNuYXBzaG90LmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBDb21wb25lbnREYXRhLFxuICBDb21wb25lbnREYXRhU3RhdGUsXG4gIEZpbHRlckdyb3VwVmFsdWUsXG4gIExpc3RDb2x1bW4sXG4gIExpc3RDb25maWcsXG4gIFJlcG9ydCxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBSZXBvcnRMb2NhbGVUYWcsXG4gIFJlcG9ydE1hc3RlcixcbiAgUmVwb3J0UGFnZSxcbiAgUmVwb3J0UGFnZVZhbHVlLFxuICBSZXBvcnRSZWxhdGl2ZVJhbmdlLFxuICBSZXNvbHZlZEZpbHRlclZhbHVlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS3BpQ2FyZFZpZXcgfSBmcm9tICcuLi9rcGktY2FyZCc7XG5pbXBvcnQge1xuICBMSVNUX1RPVEFMX0xBQkVMLFxuICBMaXN0T3V0cHV0Q29sdW1uLFxuICBsaXN0SGlkZGVuQ29sdW1ucyxcbiAgbGlzdE91dHB1dENvbHVtbnMsXG4gIGxpc3RUb3RhbHNMYWJlbENvbHVtbixcbn0gZnJvbSAnLi4vbGlzdC1jb25maWcnO1xuaW1wb3J0IHsgcGl2b3RDb2x1bW5TcGVjcyB9IGZyb20gJy4uL29wdGlvbi1idWlsZGVyJztcbmltcG9ydCB7IGNvbXBvbmVudE5vdGVMaW5lcywgY29tcG9uZW50V2luZG93c0xpbmUgfSBmcm9tICcuLi9vdXRwdXQtbm90ZXMnO1xuaW1wb3J0IHsgZ3JvdXBPcHRpb25zUmVhZGVyLCByZXNvbHZlT3B0aW9uVmFsdWVzIH0gZnJvbSAnLi4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5pbXBvcnQgeyBhdXRob3JlZEdyaWRMYXlvdXQgfSBmcm9tICcuLi9yZXBvcnQtZ3JpZC1sYXlvdXQnO1xuaW1wb3J0IHsgaXNUaWxlIH0gZnJvbSAnLi4vcmVwb3J0LXRpbGUnO1xuaW1wb3J0IHsgb2ZmZXJlZFZpZXdlckZlYXR1cmVzIH0gZnJvbSAnLi4vcmVwb3J0LXZpZXdlci1mZWF0dXJlcyc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJPcHRpb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3JlcG9ydC1maWx0ZXItb3B0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3JlcG9ydC1maWx0ZXItc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBUZXh0RmlsdGVyRmllbGQsIFRleHRUb2tlbkNvbnRleHQsIFRleHRWYWx1ZSwgZmlsbFRpdGxlVG9rZW5zLCB0ZXh0UGxhaW4gfSBmcm9tICcuLi90ZXh0JztcbmltcG9ydCB7IHRpbGVEYXRhU3RhdGUsIHZhbHVlc01hdGNoQW55R3JvdXBJZHMgfSBmcm9tICcuLi90aWxlLWRhdGEtc3RhdGUnO1xuaW1wb3J0IHtcbiAgZmFpbGVkVmFsdWVLZXlzLCByZXBvcnRDb21wb25lbnRzLCBzaG93blZhbHVlcywgdGV4dFZhbHVlcywgdmFsdWVLZXlzLFxufSBmcm9tICcuLi92YWx1ZXMnO1xuXG5pbXBvcnQgeyBleHBvcnRMaW5lcywgbWF0Y2hMaW5lVGV4dCwgdmFsdWVQaWNrcyB9IGZyb20gJy4vcmVwb3J0LWZpbHRlci1saW5lcyc7XG5pbXBvcnQgeyBHUklEX0VYUE9SVF9DT0xVTU5TLCBncmlkRXhwb3J0Tm90ZXMgfSBmcm9tICcuL3JlcG9ydC1ncmlkLWV4cG9ydCc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0ZWRDb21wb25lbnQge1xuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudDtcbiAgLy8gbnVsbCA9IGl0cyBxdWVyeSBmYWlsZWQ7IGV4cG9ydHMgc2hvdyBhIG5vdGUuIEFsd2F5cyBudWxsIGZvciBhIHRleHRcbiAgLy8gYmxvY2ssIHdoaWNoIGhhcyBubyBxdWVyeSDigJQgc2VlIGlzRmFpbGVkKCkuXG4gIGRhdGE6IENvbXBvbmVudERhdGEgfCBudWxsO1xuICAvLyBUaGUgdGV4dCBhIGxpc3Qgd2FzIHNlYXJjaGVkIGJ5IHdoZW4gaXQgd2FzIGZldGNoZWQ7IGFic2VudCB3aGVuIGl0c1xuICAvLyBzZWFyY2ggYm94IHdhcyBlbXB0eSwgYW5kIGZvciBldmVyeSBvdGhlciBjb21wb25lbnQuXG4gIHNlYXJjaD86IHN0cmluZztcbiAgLy8gVGhlIGNvbmZpZyBjb2x1bW5zIGEgdmlld2VyIGhpZCBvbiBhIHBsYWluIGxpc3QsIHdoaWNoIGl0cyB0YWJsZSBsZWF2ZXNcbiAgLy8gb3V0IChsaXN0Q29sdW1ucyk7IGVtcHR5IGZvciBldmVyeSBvdGhlciBjb21wb25lbnQuXG4gIGhpZGRlbkNvbHVtbnM6IHN0cmluZ1tdO1xuICAvLyBUaGUgYnJlYWRjcnVtYiBvZiB0aGUgZHJpbGwgcGF0aCBhIGNoYXJ0IHdhcyByZWFkIGF0ICh0aGUgcGF0aCBpdHNcbiAgLy8gYW5zd2VyIGFwcGxpZWQpLCBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlOyBhYnNlbnQgYXQgdGhlIGNoYXJ0J3MgdG9wLlxuICBjcnVtYnM/OiBzdHJpbmdbXTtcbiAgLy8gQSB0YWJsZSB0aWxlIGFzIHRoZSBzY3JlZW4gZHJhd3MgaXQgKHJlYWRHcmlkVGFibGUoKSksIHVwIHRvIHRoZVxuICAvLyByZW5kZXJlcidzIHJvdyBjYXAgYW5kIEdSSURfRVhQT1JUX0NPTFVNTlMgY29sdW1uczsgaXRzIGRhdGEgaXMgdGhlblxuICAvLyB0aGUgcmVhZCdzIHJlcG9ydCBsaW5lLCB3aXRoIG5vIHJvd3MuIEFic2VudCBmb3IgZXZlcnkgb3RoZXIgY29tcG9uZW50LlxuICB0YWJsZT86IEdyaWRUYWJsZTtcbiAgLy8gVGhlIGxpbmVzIGEgdGFibGUgYWRkcyB1bmRlciBpdHMgYm94IChncmlkRXhwb3J0Tm90ZXMoKSkuXG4gIHRhYmxlTm90ZXM/OiBzdHJpbmdbXTtcbiAgLy8gQSB0YWJsZSB3aG9zZSBjb2x1bW4gZmlsdGVycyBuYXJyb3dlZCBpdHMgcm93cywgd2hpY2ggaXRzIHRpdGxlIHNheXMuXG4gIGZpbHRlcmVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0ZWRQYWdlIHtcbiAgcGFnZTogUmVwb3J0UGFnZTtcbiAgY29tcG9uZW50czogQ29sbGVjdGVkQ29tcG9uZW50W107XG4gIC8vIFdoYXQgdGhlIHBhZ2UncyB0ZXh0IGJsb2NrcyBmaWxsIHRoZWlyIHt7dmFsdWUuPGtleT59fSB0b2tlbnMgd2l0aCwgYnkga2V5XG4gIC8vICh0ZXh0VmFsdWVzKSwgYW5kIHRoZSBrZXlzIG9mIHRoZSB2YWx1ZXMgaXRzIHRleHQgc2hvd3Mgd2hvc2UgbnVtYmVycyBkaWRcbiAgLy8gbm90IGNvbWUgYmFjazogdGhlIHJlcXVlc3QgZmFpbGVkLCBvciB0aGUgdmFsdWUncyBvd24gcXVlcnkgZGlkLlxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIFRleHRWYWx1ZT47XG4gIGZhaWxlZFZhbHVlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGVkUmVwb3J0IHtcbiAgcmVwb3J0OiBSZXBvcnQ7XG4gIHBhZ2VzOiBDb2xsZWN0ZWRQYWdlW107XG4gIC8vIFRoZSBoZWFkZXIgYW5kIGZvb3RlcidzIHZhbHVlcywgYXMgYSBwYWdlJ3M6IHJlYWQgb25jZSBmb3IgdGhlIHdob2xlXG4gIC8vIGZpbGUsIHNpbmNlIGV2ZXJ5IHBhZ2UgdGhhdCBzaG93cyB0aGUgbWFzdGVyIHNob3dzIHRoZSBzYW1lIG51bWJlcnMuXG4gIG1hc3RlclZhbHVlczogUmVjb3JkPHN0cmluZywgVGV4dFZhbHVlPjtcbiAgbWFzdGVyRmFpbGVkVmFsdWVzOiBzdHJpbmdbXTtcbiAgLy8gVGhlIGZpbHRlciBsaW5lcyBvZiB0aGUgdGl0bGUgc2xpZGUvcGFnZSwgaW4gb3JkZXI6IHRoZVxuICAvLyBleHBvcnQncyBmaWx0ZXIgbGluZXMgKGNvdmVyRmlsdGVyTGluZXMpLCB0aGVuIHRoZSBtYXRjaCB3aGlsZSBpdCBpc1xuICAvLyAnYW55Jy5cbiAgZmlsdGVyU3VtbWFyeTogc3RyaW5nW107XG4gIC8vIFdoYXQgZWFjaCB7e2ZpbHRlci48aWQ+fX0gdG9rZW4gcHJpbnRzLCBieSBmaWx0ZXIgZ3JvdXAgaWQ6IHRoZSBmaWx0ZXJcbiAgLy8gYmFyJ3MgdmFsdWVzIGFzIHRoZSBzY3JlZW4gd29yZHMgdGhlbSwgcmVhZCBvbmNlIHNvIGV2ZXJ5IHBhZ2Ugb2YgdGhlXG4gIC8vIGZpbGUgYWdyZWVzLiBFdmVyeSBncm91cCdzOiBhIHBhZ2UgcmVhZHMgaXRzIG93biAobGF5ZXJGaWx0ZXJGaWVsZHMpLlxuICBmaWx0ZXJGaWVsZHM6IFJlY29yZDxudW1iZXIsIFRleHRGaWx0ZXJGaWVsZD47XG4gIC8vIFdoYXQgdGhlIG51bWJlcnMgYXJlIG1lYXN1cmVkIGluLCBmb3IgdGhlIHRpdGxlIHNsaWRlL3BhZ2U6IHRoZSB6b25lIGFuZFxuICAvLyB0aGUgY3VycmVuY3kgdGhlIHNlcnZlciByZXNvbHZlZCBmb3IgdGhlIHJlcG9ydC4gRWFjaCBpcyBsZWZ0IG91dCB3aGVuIHRoZVxuICAvLyBzZXJ2ZXIgZG9lcyBub3Qgc2VuZCBpdCwgcmF0aGVyIHRoYW4gYSBndWVzcyB0aGF0IHdvdWxkIGJlIHdyb25nIHdoZW5ldmVyXG4gIC8vIHRoZSBkZWZhdWx0IGFwcGxpZXMuXG4gIGNvbnRleHRMaW5lczogc3RyaW5nW107XG4gIC8vIEhvdyB0aGUgb3BlbiByZXBvcnQgd3JpdGVzIGl0cyBudW1iZXJzIGFuZCBkYXRlcyAoaXRzIGxvY2FsZSwgY3VycmVuY3lcbiAgLy8gYW5kIHBlcmNlbnQgZm9ybSksIHJlYWQgb25jZSBzbyBldmVyeSBwYWdlIG9mIHRoZSBmaWxlIGFncmVlcy5cbiAgZm9ybWF0Q29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dDtcbn1cblxuLy8gSG93IGFuIGV4cG9ydCB3b3JkcyB0aGUgc2NyZWVuIChleHBvcnRXb3JkaW5nKTogdGhlIGZpbHRlciBsaW5lcyAodGhlXG4vLyBjb3ZlcidzLCBhbmQgdGhlIHppcCdzIG5vdGVzKSwgd2hhdCBlYWNoIHt7ZmlsdGVyLjxpZD59fSB0b2tlbiBwcmludHMsIGJ5XG4vLyBmaWx0ZXIgZ3JvdXAgaWQsIGFuZCBlYWNoIHRpbGUncyB0aXRsZSBhcyB0aGUgY2FudmFzIGhlYWRlciByZWFkcyBpdCwgYnlcbi8vIGNvbXBvbmVudCBpZCwgd2hpY2ggdGhlIHppcCBuYW1lcyB0aGUgdGlsZSdzIGZpbGUgYWZ0ZXIuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEV4cG9ydFdvcmRpbmcge1xuICBsaW5lczogUmVwb3J0RXhwb3J0TGluZVtdO1xuICBmaWx0ZXJGaWVsZHM6IFJlY29yZDxudW1iZXIsIFRleHRGaWx0ZXJGaWVsZD47XG4gIHRpdGxlczogUmVjb3JkPG51bWJlciwgc3RyaW5nPjtcbn1cblxuLy8gQSBjb21wb25lbnQgYSBidWlsZCBjb3VsZCBub3QgZHJhdzogdGhlIHBhZ2UgdGhlIGV4cG9ydCdzIGdhdGUgbmFtZXMgaXRcbi8vIHVuZGVyIGFuZCBob3cgaXQgcmVhZHMgdGhlcmUsIGl0cyB0aXRsZSBvciB0aGUgc3RhcnQgb2YgYSB0ZXh0IGJsb2NrJ3Ncbi8vIHdvcmRzLlxuZXhwb3J0IGludGVyZmFjZSBVbmRyYXduQ29tcG9uZW50IHtcbiAgY29tcG9uZW50SWQ6IG51bWJlcjtcbiAgcGFnZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8vIEEgZmlsZSBidWlsdCBhbmQgbm90IHlldCBzYXZlZC4gV2hldGhlciBldmVyeSBjb21wb25lbnQgY291bGQgYmUgZHJhd24gaXNcbi8vIGtub3duIG9ubHkgb25jZSB0aGUgZmlsZSBpcyBidWlsdCwgc28gdGhlIGV4cG9ydCBhc2tzIGFib3V0IGl0IGJldHdlZW4gdGhlXG4vLyBidWlsZCBhbmQgdGhlIHNhdmU6IGB1bmRyYXduYCBsaXN0cyB0aGUgY29tcG9uZW50cyB0aGUgZmlsZSBtYXJrcyBhcyBub3Rcbi8vIGRyYXduIGluIHRoZWlyIHBsYWNlLCBhbmQgYHNhdmVgIHdyaXRlcyB0aGUgZmlsZS5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbHRFeHBvcnQge1xuICB1bmRyYXduOiBVbmRyYXduQ29tcG9uZW50W107XG4gIHNhdmU6ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xufVxuXG4vLyBPbmUgZXhwb3J0ZWQgbGlzdCBjb2x1bW46IHRoZSBjZWxsIGtleSwgaXRzIGhlYWRpbmcgYW5kIGl0cyBmb3JtYXQsIGFuZFxuLy8gd2hldGhlciBpdHMgY2VsbHMgYXJlIGZvcm1hdHRlZCBudW1iZXJzLCB3aGljaCBldmVyeSBleHBvcnQgcmlnaHQtYWxpZ25zXG4vLyAoaGVhZGVyIGluY2x1ZGVkKSBhcyB0aGUgc2NyZWVuIGRvZXMuIEEgY29sdW1uIHRoYXQgaG9sZHMgYSBjb21wYXJlZCxcbi8vIHdpbmRvd2VkLCByYW5rZWQgb3Igc2hhcmVkIG91dHB1dCBjYXJyaWVzIGhvdyBpdCBpcyB3cml0dGVuIChvdXRwdXQpLCBhbmRcbi8vIGhvbGRzIG51bWJlcnMgd2hldGhlciBvciBub3QgaXQgbmFtZXMgYSBmb3JtYXQuXG5leHBvcnQgdHlwZSBFeHBvcnRMaXN0Q29sdW1uID0gTGlzdENvbHVtbiAmIHsgbnVtZXJpYzogYm9vbGVhbjsgb3V0cHV0PzogTGlzdE91dHB1dENvbHVtbiB9O1xuXG4vLyBIb3cgdGFsbCBlYWNoIHBhcnQgb2YgYW4gZXhwb3J0ZWQgS1BJIGNhcmQgaXMsIGluIHRoZSByZW5kZXJlcidzIHVuaXRcbi8vIChwb2ludHMgaW4gdGhlIFBERiwgaW5jaGVzIGluIHRoZSBkZWNrKS4gQSBub3RlIGlzIG9uZSBsaW5lLlxuZXhwb3J0IGludGVyZmFjZSBLcGlFeHBvcnRIZWlnaHRzIHtcbiAgdmFsdWU6IG51bWJlcjtcbiAgbGFiZWw6IG51bWJlcjtcbiAgZGVsdGE6IG51bWJlcjtcbiAgd2luZG93OiBudW1iZXI7XG4gIHRhcmdldDogbnVtYmVyO1xuICBzcGFya2xpbmU6IG51bWJlcjtcbiAgbm90ZTogbnVtYmVyO1xufVxuXG4vLyBUaGUgcGFydHMgb2YgYSBLUEkgY2FyZCBhbiBleHBvcnQgZHJhd3M6IHRoZSB2YWx1ZSBhbmQgaXRzIGxhYmVsIGFsd2F5cyxcbi8vIHRoZSByZXN0IHdoZW4gdGhlIGNhcmQgaGFzIHRoZW0gYW5kIHRoZSB0aWxlIGhhcyByb29tIChrcGlFeHBvcnRQYXJ0cykuXG4vLyBzY2FsZSBzaHJpbmtzIHRoZSByb3dzIGFuZCB0aGVpciB0ZXh0IHdoZW4gdGhlIHBhcnRzIHRoYXQgYWx3YXlzIHN0YXkgc3RpbGxcbi8vIHN0YW5kIHRhbGxlciB0aGFuIHRoZSB0aWxlIChzY2FsZWRLcGlIZWlnaHRzKTogMSB3aGVuIHRoZXkgZml0LlxuZXhwb3J0IGludGVyZmFjZSBLcGlFeHBvcnRQYXJ0cyB7XG4gIGRlbHRhOiBib29sZWFuO1xuICB3aW5kb3c6IGJvb2xlYW47XG4gIHRhcmdldDogYm9vbGVhbjtcbiAgc3BhcmtsaW5lOiBib29sZWFuO1xuICBub3Rlczogc3RyaW5nW107XG4gIHNjYWxlOiBudW1iZXI7XG59XG5cbi8vIEhvdyBmYXIgYSBLUEkgY2FyZCdzIHJvd3Mgc2hyaW5rIHRvIGZpdCBhIHNob3J0IHRpbGUuIEEgdGlsZSBzaG9ydGVyIHN0aWxsXG4vLyBsZXRzIHRoZSBjYXJkIHJ1biBwYXN0IGl0cyBmb290IHJhdGhlciB0aGFuIHByaW50IGl0IHVucmVhZGFibHkgc21hbGwuXG5jb25zdCBLUElfRVhQT1JUX01JTl9TQ0FMRSA9IDAuNTtcblxuLy8gSG93IG1hbnkgdGlsZSBxdWVyaWVzIGFuIGV4cG9ydCBydW5zIGF0IG9uY2UuXG4vL1xuLy8gTm90IGEgcG9saXRlbmVzcyBzZXR0aW5nIOKAlCBpdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgZGVjayBhbmQgYSBicm9rZW5cbi8vIG9uZS4gVGhlc2UgcXVlcmllcyBhcmUgaGVhdnkgYW5kIHJlYWQgdGhlIHNhbWUgdGFibGVzLCBzbyBmaXJpbmcgYWxsIG9mIHRoZW1cbi8vIHRvZ2V0aGVyIHB1dHMgZXZlcnkgb25lIGluIGNvbnRlbnRpb24gZm9yIHRoZSBzYW1lIGRhdGFiYXNlIGF0IHRoZSBzYW1lXG4vLyBtb21lbnQgYW5kIHRoZXkgY3Jvc3MgdGhlIHN0YXRlbWVudCBjZWlsaW5nIGFzIGEgZ3JvdXA6IG1lYXN1cmVkIG9uIHJlcG9ydFxuLy8gMjgsIHRlbiB0aWxlcyB0aGF0IGVhY2ggYW5zd2VyIGluIDktMjRzIHJ1biBvbmUgYWZ0ZXIgYW5vdGhlciBhbGwgZmFpbGVkIGF0XG4vLyB+MzBzIHdoZW4gcmVsZWFzZWQgdG9nZXRoZXIuIENvbmN1cnJlbmN5IGJ1eXMgd2FsbC1jbG9jayBvbmx5IHVwIHRvIHRoZSBwb2ludFxuLy8gd2hlcmUgdGhlIHF1ZXJpZXMgc3RhcnQgdGFraW5nIGl0IGJhY2sgb2ZmIGVhY2ggb3RoZXIsIGFuZCBwYXN0IHRoYXQgaXQgYnV5c1xuLy8gZmFpbHVyZXMuXG5jb25zdCBFWFBPUlRfQ09OQ1VSUkVOQ1kgPSAzO1xuXG4vLyBXaGF0IHRoZSBleHBvcnQgZ2F0ZXMgY2FsbCB0aGUgaGVhZGVyIGFuZCBmb290ZXI6IHdoZW4gYSB2YWx1ZSB0aGV5IHNob3dcbi8vIGNhbWUgYmFjayB3aXRob3V0IGl0cyBudW1iZXIsIGFuZCB3aGVuIG9uZSBvZiB0aGVpciBibG9ja3MgY291bGQgbm90IGJlXG4vLyBkcmF3bi5cbmV4cG9ydCBjb25zdCBIRUFERVJfRk9PVEVSX05BTUUgPSAnSGVhZGVyICYgZm9vdGVyJztcblxuLy8gSG93IG11Y2ggb2YgYSB0ZXh0IGJsb2NrJ3Mgd29yZHMgdGhlIGV4cG9ydCBnYXRlcyBxdW90ZSB0byBuYW1lIHRoZSBibG9jay5cbmNvbnN0IFRFWFRfU05JUFBFVF9MRU5HVEggPSA0MDtcblxuLy8gT25lIHJlcXVlc3QgaW4gYW4gZXhwb3J0J3MgcXVldWU6IGEgdGlsZSdzIGRhdGEsIG9yIHRoZSBudW1iZXJzIG9mIHRoZVxuLy8gdmFsdWVzIG9uZSBsYXllcidzIHRleHQgcmVhZHMsIHJlYWQgdG9nZXRoZXIuIEEgdmFsdWVzIGpvYidzIHBhZ2VJbmRleCBpc1xuLy8gbnVsbCBmb3IgdGhlIGhlYWRlciBhbmQgZm9vdGVyICh0aGUgbWFzdGVyKTsgYHZhbHVlc2AgaXMgZXZlcnkgdmFsdWUgb2YgdGhlXG4vLyBsYXllciwgd2hpY2ggbmFtZXMgaXRzIHRva2VucyBhbmQgd2hvc2UgZmlsdGVyIHZhbHVlcyB0aGUgcmVxdWVzdCBjYXJyaWVzLFxuLy8gYW5kIGBjb21wb25lbnRzYCB0aGUgb25lcyBpdHMgdGV4dCBzaG93cywgd2hvc2UgbnVtYmVycyB0aGUgZmFpbHVyZSBnYXRlXG4vLyByZXF1aXJlcy5cbnR5cGUgQ29sbGVjdEpvYiA9XG4gIHwgeyBraW5kOiAnY29tcG9uZW50JzsgcGFnZUluZGV4OiBudW1iZXI7IGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50IH1cbiAgfCB7XG4gICAga2luZDogJ3ZhbHVlcyc7XG4gICAgcGFnZUluZGV4OiBudW1iZXIgfCBudWxsO1xuICAgIHBhZ2VJZDogbnVtYmVyO1xuICAgIHZhbHVlczogUmVwb3J0Q29tcG9uZW50W107XG4gICAgY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50W107XG4gIH07XG5cbi8vIE9uZSBsYXllcidzIHZhbHVlcyBhcyB0aGUgZmlsZSBwcmludHMgdGhlbS5cbnR5cGUgQ29sbGVjdGVkVmFsdWVzID0gUGljazxDb2xsZWN0ZWRQYWdlLCAndmFsdWVzJyB8ICdmYWlsZWRWYWx1ZXMnPjtcblxuLy8gV2hhdCBhIGpvYiBjYW1lIGJhY2sgd2l0aCwgYW5kIHRoZSBwYWdlIGl0IGlzIGZpbGVkIHVuZGVyLlxudHlwZSBDb2xsZWN0UmVzdWx0ID1cbiAgfCB7IGtpbmQ6ICdjb21wb25lbnQnOyBwYWdlSW5kZXg6IG51bWJlcjsgaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50IH1cbiAgfCB7IGtpbmQ6ICd2YWx1ZXMnOyBwYWdlSW5kZXg6IG51bWJlciB8IG51bGw7IGNvbGxlY3RlZDogQ29sbGVjdGVkVmFsdWVzIH07XG5cbi8vIFdoYXQgYSBjb21wb25lbnQgd2l0aCBub3RoaW5nIHRvIGRyYXcgcHJpbnRzIGluIHRoZSBleHBvcnRlZCBmaWxlLlxuLy9cbi8vIFRoZSB0d28gY2FzZXMgbXVzdCBub3QgcmVhZCBhbGlrZS4gQSB0aWxlIHRoYXQgcmV0dXJuZWQgbm8gcm93cyBpcyBhIGZpbmRpbmdcbi8vIGFib3V0IHRoZSBwZXJpb2Qg4oCUIHRoZSByZXBvcnQgd29ya2VkIGFuZCB0aGUgYW5zd2VyIGlzIFwibm9uZVwiLiBBIHRpbGUgd2hvc2Vcbi8vIHF1ZXJ5IGZhaWxlZCBpcyBhIGhvbGUgaW4gdGhlIGZpbGUsIGFuZCBjYWxsaW5nIHRoYXQgXCJEYXRhIHVuYXZhaWxhYmxlXCIgdGVsbHNcbi8vIHRoZSByZWFkZXIgdGhlIGRhdGEgZG9lcyBub3QgZXhpc3Qgd2hlbiB3aGF0IGhhcHBlbmVkIGlzIHRoYXQgbm9ib2R5IG1hbmFnZWRcbi8vIHRvIGFzayBmb3IgaXQuIFNoYXJlZCBieSBib3RoIHJlbmRlcmVycyBzbyB0aGUgUERGIGFuZCB0aGUgZGVjayBjYW5ub3QgZW5kIHVwXG4vLyBkZXNjcmliaW5nIHRoZSBzYW1lIGhvbGUgdHdvIGRpZmZlcmVudCB3YXlzLlxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5TGFiZWwoaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGl0ZW0uZGF0YSA/ICdObyBkYXRhJyA6ICdDb3VsZCBub3QgYmUgZ2VuZXJhdGVkJztcbn1cblxuLy8gQSBjb21wb25lbnQncyB0aXRsZSBhcyBhbiBleHBvcnRlZCBmaWxlIHByaW50cyBpdDogaXRzIHRva2VucyBmaWxsZWQgd2l0aFxuLy8gdGhlIHBhZ2UgaXQgaXMgZHJhd24gb24gKHRoZSBwaHlzaWNhbCBwYWdlIHdoZXJlIHRoZSBQREYgbnVtYmVycyBhXG4vLyBjb250aW51YXRpb24gcGFnZSksIGFzIHRoZSBjYW52YXMgaGVhZGVyIHJlYWRzIGl0LiBBIGRyaWxsZWQgY2hhcnQncyB0aXRsZVxuLy8gaXMgZm9sbG93ZWQgYnkgaXRzIGJyZWFkY3J1bWIsIGBjcnVtYnNgIChkcmlsbENydW1iTGFiZWxzKTogJ09yZGVycyBieVxuLy8gUGVyaW9kIOKAuiAyMDI2IOKAuiBRMycuIEEgc2VhcmNoZWQgbGlzdCBzYXlzIHNvLCBzaW5jZSBpdHMgdGFibGUgaG9sZHMgb25seVxuLy8gdGhlIG1hdGNoaW5nIHJvd3M6ICdPcmRlcnMgKG1hdGNoaW5nIFwibm9ydGhcIiknLiBBbiB1bnRpdGxlZCBvbmUgcmVhZHNcbi8vICdNYXRjaGluZyBcIm5vcnRoXCInLiAnJyB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gcHJpbnQuIFNoYXJlZCBieSB0aGUgUERGXG4vLyBhbmQgdGhlIGRlY2ssIGNvbnRpbnVhdGlvbiBwYWdlcyBpbmNsdWRlZC5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRUaXRsZShcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIHRva2VuczogVGV4dFRva2VuQ29udGV4dCxcbiAgc2VhcmNoPzogc3RyaW5nIHwgbnVsbCxcbiAgY3J1bWJzPzogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsLFxuICBmaWx0ZXJlZCA9IGZhbHNlLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgdGl0bGUgPSBjcnVtYmVkVGl0bGUoZmlsbFRpdGxlVG9rZW5zKGNvbXBvbmVudC50aXRsZSwgdG9rZW5zKSwgY3J1bWJzID8/IFtdKTtcblxuICBpZiAoZmlsdGVyZWQpIHtcbiAgICByZXR1cm4gdGl0bGUgPyBgJHt0aXRsZX0gKGZpbHRlcmVkKWAgOiAnRmlsdGVyZWQnO1xuICB9XG5cbiAgaWYgKCFzZWFyY2gpIHtcbiAgICByZXR1cm4gdGl0bGU7XG4gIH1cblxuICByZXR1cm4gdGl0bGUgPyBgJHt0aXRsZX0gKG1hdGNoaW5nIFwiJHtzZWFyY2h9XCIpYCA6IGBNYXRjaGluZyBcIiR7c2VhcmNofVwiYDtcbn1cblxuLy8gV2hldGhlciBhIHRpbGUncyBxdWVyeSBmYWlsZWQuIEEgdGV4dCBibG9jayBoYXMgbm8gcXVlcnksIHNvIGl0IG5ldmVyIGRpZC5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZhaWxlZChpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuICFpdGVtLmRhdGEgJiYgaXRlbS5jb21wb25lbnQudHlwZSAhPT0gJ3RleHQnO1xufVxuXG4vLyBBIHRleHQgYmxvY2sgYXMgdGhlIGV4cG9ydCBnYXRlcyBuYW1lIGl0OiBieSB0aGUgc3RhcnQgb2YgaXRzIHdvcmRzLCBvbiBvbmVcbi8vIGxpbmUuXG5leHBvcnQgZnVuY3Rpb24gdGV4dFNuaXBwZXQoY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIHRva2VuczogVGV4dFRva2VuQ29udGV4dCk6IHN0cmluZyB7XG4gIGNvbnN0IHRleHQgPSB0ZXh0UGxhaW4oY29tcG9uZW50LmNvbmZpZz8uaHRtbCA/PyAnJywgdG9rZW5zKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuXG4gIHJldHVybiB0ZXh0Lmxlbmd0aCA+IFRFWFRfU05JUFBFVF9MRU5HVEggPyBgJHt0ZXh0LnNsaWNlKDAsIFRFWFRfU05JUFBFVF9MRU5HVEgpLnRyaW1FbmQoKX3igKZgIDogdGV4dDtcbn1cblxuLy8gVGhlIGxpbmVzIHVuZGVyIHRoZSByZXBvcnQncyBuYW1lIG9uIHRoZSBQREYgdGl0bGUgcGFnZSBhbmQgdGhlIHRpdGxlIHNsaWRlOlxuLy8gdGhlIGV4cG9ydCBkYXRlLCB0aGUgYWN0aXZlIGZpbHRlcnMsIHRoZW4gd2hhdCB0aGUgbnVtYmVycyBhcmUgbWVhc3VyZWQgaW4uXG4vLyBUaGUgZGF0ZSBhbHdheXMgbGVhZHMgKHRoZSBQb3dlclBvaW50IG1hcmtzIHRoYXQgbGluZSBhcyB3cml0dGVuIGluIHRoZVxuLy8gcmVwb3J0J3MgbG9jYWxlKS4gSXQgaXMgdG9kYXkgaW4gdGhlIHJlcG9ydCdzIHpvbmUsIHRoZSBzYW1lIGRheSBpdHMgZmlsdGVyc1xuLy8gcmVzb2x2ZSBcInRvZGF5XCIgdG8sIHdyaXR0ZW4gaW4gdGhlIHJlcG9ydCdzIGxvY2FsZS5cbmV4cG9ydCBmdW5jdGlvbiBjb3ZlckxpbmVzKGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0KTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgIGZvcm1hdExvY2FsRGF0ZShcbiAgICAgIG5ldyBEYXRlKCksXG4gICAgICBjb2xsZWN0ZWQuZm9ybWF0Q29udGV4dC5sb2NhbGUsXG4gICAgICBEQVlfTE9ORyxcbiAgICAgIHJlc29sdmVSZXBvcnRUaW1lem9uZShjb2xsZWN0ZWQucmVwb3J0KSxcbiAgICApLFxuICAgIC4uLmNvbGxlY3RlZC5maWx0ZXJTdW1tYXJ5LFxuICAgIC4uLmNvbGxlY3RlZC5jb250ZXh0TGluZXMsXG4gIF07XG59XG5cbi8vIEFuIGV4cG9ydGVkIGxpc3QgY2VsbCwgcmVhZGluZyBsaWtlIHRoZSBvbi1zY3JlZW4gY2VsbCwgdGhyb3VnaCB0aGUgc2FtZVxuLy8gZnVuY3Rpb25zIGFzIHRoZSBzY3JlZW46IGEgZGF0ZSBjb2x1bW4gcmVuZGVycyBpbiB0aGUgcmVwb3J0J3Mgem9uZSBhbmRcbi8vIGxvY2FsZSwgYW5kIGEgY29sdW1uIHdpdGggbnVtYmVyLWZvcm1hdCBrZXlzIChhIGNyb3NzLXRhYidzIGNlbGxzIHRocm91Z2hcbi8vIGl0cyBjZWxsRm9ybWF0KSBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlIGFuZCBjdXJyZW5jeS4gQW55IG90aGVyIHZhbHVlIGdvZXNcbi8vIG91dCB2ZXJiYXRpbSwgYW5kIGFuIGVtcHR5IG9uZSBhcyAnJy4gQ1NWIG5ldmVyIGNvbWVzIHRocm91Z2ggaGVyZTogaXRzXG4vLyB2YWx1ZXMgc3RheSByYXcuXG4vL1xuLy8gQW4gb3V0cHV0IGNvbHVtbiBpcyB3cml0dGVuIGJ5IHdoYXQgaXQgaG9sZHMsIGFzIHRoZSBzY3JlZW4ncyBjZWxsIGlzXG4vLyAoZm9ybWF0T3V0cHV0VmFsdWUpOiBhIHNpZ25lZCBjaGFuZ2UsIGEgcGVyY2VudCBjaGFuZ2UsIGEgY2hhbmdlIG9mIGEgcmF0ZVxuLy8gaW4gcG9pbnRzLCBhIHJhbmssIGEgc2hhcmUuIEl0cyByb3cgZ2l2ZXMgYSBjaGFuZ2UgdGhlIHByaW9yIGJlc2lkZSBpdCwgc29cbi8vIGEgbWlzc2luZyBiYXNlbGluZSAoJ+KAlCcpIHJlYWRzIGFwYXJ0IGZyb20gYSB6ZXJvIG9uZSAoJ24vYScpLlxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydENlbGwoXG4gIHZhbHVlOiB1bmtub3duLFxuICBjb2x1bW46IExpc3RDb2x1bW4gJiB7IG91dHB1dD86IExpc3RPdXRwdXRDb2x1bW4gfSxcbiAgdGltZXpvbmU6IHN0cmluZyxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgcm93PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsLFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgb3V0cHV0ID0gY29sdW1uLm91dHB1dDtcblxuICBpZiAob3V0cHV0KSB7XG4gICAgcmV0dXJuIGZvcm1hdE91dHB1dFZhbHVlKHZhbHVlLCBvdXRwdXQub3V0cHV0LCBjb2x1bW4sIGNvbnRleHQsIHtcbiAgICAgIG1lYXN1cmVTcGVjOiBvdXRwdXQubWVhc3VyZVNwZWMsXG4gICAgICBwcmlvcjogb3V0cHV0LnByaW9yQWxpYXMgJiYgcm93ID8gcm93W291dHB1dC5wcmlvckFsaWFzXSA6IHVuZGVmaW5lZCxcbiAgICAgIGZsb29yOiBvdXRwdXQuZmxvb3IsXG4gICAgICBlbXB0eTogJycsXG4gICAgfSkudGV4dDtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGNvbHVtbi5mb3JtYXQgPT09IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQuRGF0ZSkge1xuICAgIHJldHVybiBmb3JtYXRSZXBvcnREYXRlKHZhbHVlLCB0aW1lem9uZSwgY29udGV4dC5sb2NhbGUpO1xuICB9XG5cbiAgcmV0dXJuIGhhc051bWJlckZvcm1hdChjb2x1bW4pID8gZm9ybWF0TnVtYmVyKHZhbHVlLCBjb2x1bW4sIGNvbnRleHQsIHsgZW1wdHk6ICcnIH0pIDogU3RyaW5nKHZhbHVlKTtcbn1cblxuLy8gVGhlIGNvbHVtbnMgYW4gZXhwb3J0ZWQgbGlzdCB0YWJsZSBkcmF3cy4gQSBjcm9zcy10YWIncyBhcnJpdmUgd2l0aCBpdHNcbi8vIHJvd3MgKHRoZSByb3cga2V5IGZpcnN0LCB0aGVuIG9uZSBwZXIgcGl2b3QgdmFsdWUpLCBzaW5jZSBvbmx5IHRoZSByZXN1bHRcbi8vIGtub3dzIHRoZSBwaXZvdCB2YWx1ZXMsIGFuZCBhcmUgYnVpbHQgYnkgcGl2b3RDb2x1bW5TcGVjcygpIGFzIG9uIHNjcmVlbjpcbi8vIGhlYWRlZCBieSBpdHMgcGVyaW9kcyBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlLCBlYWNoIHBpdm90IHZhbHVlIGZvcm1hdHRlZCBieVxuLy8gY2VsbEZvcm1hdC4gQSBwbGFpbiBsaXN0IGRyYXdzIGl0cyBjb25maWd1cmVkIGNvbHVtbnMgYnV0IHRoZSBvbmVzIHRoZVxuLy8gdmlld2VyIGhpZCAoYGhpZGRlbmAsIGtlcHQgdG8gbGlzdEhpZGRlbkNvbHVtbnMsIHNvIG5ldmVyIGFsbCBvZiB0aGVtKSxcbi8vIGVsc2UgZXZlcnkgY29sdW1uIHRoZSBxdWVyeSByZXR1cm5lZCwgYXMgaXQgY2FtZS4gT3V0cHV0IGNvbHVtbnMgKHRoZVxuLy8gZGF0YSdzIG91dHB1dHMsIGEgY3Jvc3MtdGFiIGNlbGwgdGhyb3VnaCBjZWxsTWVhc3VyZXMpIGNhcnJ5IGhvdyB0aGV5IGFyZVxuLy8gd3JpdHRlbjsgd2l0aG91dCB0aG9zZSBrZXlzIHRoZSBjb2x1bW5zIGFyZSBleGFjdGx5IGFzIGJlZm9yZS5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0Q29sdW1ucyhcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuICBoaWRkZW46IHJlYWRvbmx5IHN0cmluZ1tdID0gW10sXG4pOiBFeHBvcnRMaXN0Q29sdW1uW10ge1xuICBjb25zdCBjb25maWcgPSAoY29tcG9uZW50LmNvbmZpZyA/PyB7fSkgYXMgTGlzdENvbmZpZztcblxuICBpZiAoY29uZmlnLnBpdm90Qnk/LmNvbHVtbikge1xuICAgIHJldHVybiB3aXRoT3V0cHV0Q29sdW1ucyhwaXZvdENvbHVtblNwZWNzKGNvbmZpZywgZGF0YSwgbG9jYWxlKSwgZGF0YSwgW10pO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5jb2x1bW5zPy5sZW5ndGgpIHtcbiAgICBjb25zdCBoaWRkZW5OYW1lcyA9IGxpc3RIaWRkZW5Db2x1bW5zKGNvbmZpZywgaGlkZGVuKTtcblxuICAgIHJldHVybiB3aXRoT3V0cHV0Q29sdW1ucyhcbiAgICAgIGNvbmZpZy5jb2x1bW5zXG4gICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gIWhpZGRlbk5hbWVzLmluY2x1ZGVzKGNvbHVtbi5jb2x1bW4pKVxuICAgICAgICAubWFwKChjb2x1bW4pID0+ICh7IC4uLmNvbHVtbiwgbnVtZXJpYzogaGFzTnVtYmVyRm9ybWF0KGNvbHVtbikgfSkpLFxuICAgICAgZGF0YSxcbiAgICAgIGNvbmZpZy5jb2x1bW5zLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gd2l0aE91dHB1dENvbHVtbnMoZGF0YS5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiAoeyBjb2x1bW4sIG51bWVyaWM6IGZhbHNlIH0pKSwgZGF0YSwgW10pO1xufVxuXG4vLyBUaGUgY29sdW1ucyB3aXRoIHRoZWlyIG91dHB1dCBtZXRhZGF0YSBhdHRhY2hlZCAobGlzdE91dHB1dENvbHVtbnMsIGFzIHRoZVxuLy8gc2NyZWVuJ3MgbGlzdCByZXNvbHZlcyBpdCk6IGFuIG91dHB1dCBjb2x1bW4gaG9sZHMgbnVtYmVycyBhbmQgaXMgd3JpdHRlblxuLy8gYnkgd2hhdCBpdCBob2xkcy4gVW5jaGFuZ2VkIHdoZW4gdGhlIGRhdGEgaGFzIG5vIG91dHB1dHMuXG5mdW5jdGlvbiB3aXRoT3V0cHV0Q29sdW1ucyhcbiAgY29sdW1uczogRXhwb3J0TGlzdENvbHVtbltdLFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBhdXRob3JlZDogcmVhZG9ubHkgTGlzdENvbHVtbltdLFxuKTogRXhwb3J0TGlzdENvbHVtbltdIHtcbiAgaWYgKCFkYXRhLm91dHB1dHMpIHtcbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIGNvbnN0IG91dHB1dHMgPSBsaXN0T3V0cHV0Q29sdW1ucyhjb2x1bW5zLCBkYXRhLCBhdXRob3JlZCk7XG5cbiAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4pID0+IChvdXRwdXRzW2NvbHVtbi5jb2x1bW5dXG4gICAgPyB7IC4uLmNvbHVtbiwgbnVtZXJpYzogdHJ1ZSwgb3V0cHV0OiBvdXRwdXRzW2NvbHVtbi5jb2x1bW5dIH1cbiAgICA6IGNvbHVtbikpO1xufVxuXG4vLyBUaGUgaGVhZGluZyBvdmVyIGVhY2ggY29sdW1uIG9mIGxpc3RDb2x1bW5zKCk6IGEgcGxhaW4gbGlzdCdzIGNvbmZpZ3VyZWRcbi8vIGxhYmVsLCBlbHNlIGl0cyBjb2x1bW47IGEgY3Jvc3MtdGFiJ3MgaGVhZGluZyBmcm9tIHBpdm90Q29sdW1uU3BlY3MoKS5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0SGVhZGluZ3MoXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZyxcbiAgaGlkZGVuOiByZWFkb25seSBzdHJpbmdbXSA9IFtdLFxuKTogc3RyaW5nW10ge1xuICByZXR1cm4gbGlzdENvbHVtbnMoY29tcG9uZW50LCBkYXRhLCBsb2NhbGUsIGhpZGRlbikubWFwKChjb2x1bW4pID0+IGNvbHVtbi5sYWJlbCB8fCBjb2x1bW4uY29sdW1uKTtcbn1cblxuLy8gQW4gZXhwb3J0ZWQgbGlzdCdzIHRvdGFscyByb3csIG9uZSBjZWxsIHBlciBjb2x1bW4gb2YgbGlzdENvbHVtbnMoKTogZWFjaFxuLy8gdG90YWwgd3JpdHRlbiBsaWtlIGl0cyBjb2x1bW4ncyBjZWxscywgYW5kIExJU1RfVE9UQUxfTEFCRUwgaW4gdGhlIGZpcnN0XG4vLyBjb2x1bW4gd2hlbiB0aGF0IGNvbHVtbiBob2xkcyBubyB0b3RhbCAoYSBjcm9zcy10YWIncyByb3cga2V5KS4gbnVsbCB3aGVuXG4vLyB0aGUgbGlzdCBoYXMgbm8gdG90YWxzLiBUaGUgQ1NWIG5ldmVyIGNhcnJpZXMgb25lOiBpdHMgcm93cyBzdGF5IHJhdy5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0VG90YWxzUm93KFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBjb2x1bW5zOiByZWFkb25seSBFeHBvcnRMaXN0Q29sdW1uW10sXG4gIHRpbWV6b25lOiBzdHJpbmcsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBzdHJpbmdbXSB8IG51bGwge1xuICBjb25zdCB0b3RhbHMgPSBkYXRhLnRvdGFscztcblxuICBpZiAoIXRvdGFscykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbGFiZWwgPSBsaXN0VG90YWxzTGFiZWxDb2x1bW4oY29sdW1ucywgdG90YWxzKTtcblxuICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gKGNvbHVtbi5jb2x1bW4gPT09IGxhYmVsXG4gICAgPyBMSVNUX1RPVEFMX0xBQkVMXG4gICAgOiBleHBvcnRDZWxsKHRvdGFsc1tjb2x1bW4uY29sdW1uXSwgY29sdW1uLCB0aW1lem9uZSwgY29udGV4dCwgdG90YWxzKSkpO1xufVxuXG4vLyBUaGUgc3VidGl0bGUgdW5kZXIgYSBjaGFydCdzIG9yIGEgbGlzdCdzIHRpdGxlOiB0aGUgZGF5cyBpdCByZWFkcywgYW5kIHRoZVxuLy8gZGF5cyBlYWNoIGNvbXBhcmlzb24gbGFuZSByZWFkcyAoJ1NlcCAxIOKAkyAxNSwgMjAyNiDCtyB2cyBwcmV2aW91cyBtb250aDpcbi8vIEF1ZyAxIOKAkyAxNSwgMjAyNicpLCBhcyB0aGUgc2NyZWVuJ3Mgbm90ZSBvcGVucyB3aXRoLiAnJyB3aXRob3V0IGFcbi8vIGNvbXBhcmlzb24gb3IgYSB0aW1lZnJhbWUsIGFuZCBmb3IgYSBLUEksIHdob3NlIGNhcmQgcHJpbnRzIGl0cyBvd24gd2luZG93XG4vLyBsaW5lLlxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFdpbmRvd3NMaW5lKGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCwgdGltZXpvbmU6IHN0cmluZywgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcpOiBzdHJpbmcge1xuICBpZiAoIWl0ZW0uZGF0YSB8fCBpdGVtLmNvbXBvbmVudC50eXBlID09PSAna3BpJykge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRXaW5kb3dzTGluZShpdGVtLmRhdGEsIHsgbG9jYWxlLCB0aW1lem9uZSB9KTtcbn1cblxuLy8gVGhlIG5vdGUgbGluZXMgdW5kZXIgYSBjb21wb25lbnQncyBib3g6IHdoeSBhIGNvbXBhcmlzb24gcmVhZHMgYXMgaXQgZG9lcyxcbi8vIGEgS1BJJ3MgZGVsdGEgbm90ZSwgYW5kIHdoYXQgZWFjaCB3aW5kb3dlZCB2YWx1ZSBpcyBhbmQgd2h5LiBUaGUgZGF5cyBhcmVcbi8vIGxlZnQgb3V0ICh0aGUgc3VidGl0bGUgb3IgdGhlIEtQSSBjYXJkIHByaW50cyB0aGVtKSwgYW5kIHRoZSB3aW5kb3dcbi8vIGRlc2NyaXB0aW9ucyBhcmUgaW4sIHNpbmNlIGEgZmlsZSBoYXMgbm8gdG9vbHRpcCBvciBoZWFkZXIgdG8gY2FycnkgdGhlbS5cbi8vIEVtcHR5IHdoZW4gdGhlIGRhdGEgaGFzIG5vbmUgb2YgdGhlIGtleXMuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0Tm90ZUxpbmVzKGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCwgdGltZXpvbmU6IHN0cmluZywgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbXG4gICAgLi4uY29tcG9uZW50Tm90ZUxpbmVzKGl0ZW0uZGF0YSwgeyBsb2NhbGUsIHRpbWV6b25lIH0sIHsgd2luZG93czogZmFsc2UsIHdpbmRvd0Rlc2NyaXB0aW9uczogdHJ1ZSB9KSxcbiAgICAuLi4oaXRlbS50YWJsZU5vdGVzID8/IFtdKSxcbiAgXTtcbn1cblxuLy8gV2hldGhlciBhIHRpbGUgaGFzIG5vdGhpbmcgdG8gZHJhdzogbm8gcm93cywgb3IgYSB0YWJsZSB3aXRoIG5vIGxpbmUuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eVRpbGUoaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiBpdGVtLnRhYmxlXG4gICAgPyAhaXRlbS50YWJsZS5yb3dzLmxlbmd0aCAmJiAhaXRlbS50YWJsZS50b3RhbFJvd1xuICAgIDogIWl0ZW0uZGF0YT8ucm93cz8ubGVuZ3RoO1xufVxuXG4vLyBXaGV0aGVyIGEgS1BJIGNhcmQgaGFzIG1vcmUgdG8gZHJhdyB0aGFuIGl0cyB2YWx1ZSBhbmQgbGFiZWwuIFdpdGhvdXQsIGJvdGhcbi8vIGV4cG9ydHMgZHJhdyB0aGUgdGlsZSBleGFjdGx5IGFzIHRoZXkgYWx3YXlzIGhhdmUuXG5leHBvcnQgZnVuY3Rpb24ga3BpQ2FyZEhhc0V4dHJhcyh2aWV3OiBLcGlDYXJkVmlldywgbm90ZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiAhISh2aWV3LmRlbHRhIHx8IHZpZXcud2luZG93IHx8IHZpZXcudGFyZ2V0IHx8IHZpZXcuc3BhcmtsaW5lIHx8IG5vdGVzLmxlbmd0aCk7XG59XG5cbi8vIFdoaWNoIHBhcnRzIG9mIGEgS1BJIGNhcmQgZml0IGEgdGlsZSBgYXZhaWxhYmxlYCB0YWxsLiBBIHNob3J0IHRpbGUgc2hlZHMgdGhlXG4vLyBzcGFya2xpbmUgZmlyc3QsIHRoZW4gdGhlIHRhcmdldCBsaW5lLCB0aGVuIHRoZSBub3RlczsgdGhlIHZhbHVlLCBpdHMgbGFiZWxcbi8vIGFuZCB0aGUgZGVsdGEgcm93IGFsd2F5cyBzdGF5LCBhbmQgdGhlIHdpbmRvdyBsaW5lIHN0YXlzIHdoZW5ldmVyIHRoZSBjYXJkXG4vLyBzaG93cyBhIGNvbXBhcmlzb24gKGl0cyBkYXlzIGFyZSB3aGF0IHRoZSBkZWx0YSBpcyBtZWFzdXJlZCBvdmVyKS4gVGhlXG4vLyBzcGFya2xpbmUgbmVlZHMgdmFsdWVzIHRvIGRyYXcuIFdoZW4gd2hhdCBzdGF5cyBpcyBzdGlsbCB0b28gdGFsbCwgZXZlcnlcbi8vIHJvdyBzaHJpbmtzIGJ5IHRoZSBzYW1lIHNjYWxlLCBkb3duIHRvIEtQSV9FWFBPUlRfTUlOX1NDQUxFOyBieSB0aGVuIHRoZVxuLy8gc3BhcmtsaW5lLCB0aGUgdGFyZ2V0IGFuZCB0aGUgbm90ZXMgYXJlIGdvbmUuXG5leHBvcnQgZnVuY3Rpb24ga3BpRXhwb3J0UGFydHMoXG4gIHZpZXc6IEtwaUNhcmRWaWV3LFxuICBub3RlczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIGF2YWlsYWJsZTogbnVtYmVyLFxuICBoZWlnaHRzOiBLcGlFeHBvcnRIZWlnaHRzLFxuKTogS3BpRXhwb3J0UGFydHMge1xuICBjb25zdCBwYXJ0czogS3BpRXhwb3J0UGFydHMgPSB7XG4gICAgZGVsdGE6ICEhdmlldy5kZWx0YSxcbiAgICB3aW5kb3c6ICEhdmlldy53aW5kb3csXG4gICAgdGFyZ2V0OiAhIXZpZXcudGFyZ2V0LFxuICAgIHNwYXJrbGluZTogISF2aWV3LnNwYXJrbGluZT8udmFsdWVzLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gbnVsbCksXG4gICAgbm90ZXM6IFsuLi5ub3Rlc10sXG4gICAgc2NhbGU6IDEsXG4gIH07XG4gIGNvbnN0IGhlaWdodCA9ICgpID0+IGtwaUV4cG9ydEhlaWdodCh2aWV3LCBwYXJ0cywgaGVpZ2h0cyk7XG5cbiAgaWYgKGhlaWdodCgpID4gYXZhaWxhYmxlKSB7XG4gICAgcGFydHMuc3BhcmtsaW5lID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaGVpZ2h0KCkgPiBhdmFpbGFibGUpIHtcbiAgICBwYXJ0cy50YXJnZXQgPSBmYWxzZTtcbiAgfVxuXG4gIHdoaWxlIChoZWlnaHQoKSA+IGF2YWlsYWJsZSAmJiBwYXJ0cy5ub3Rlcy5sZW5ndGgpIHtcbiAgICBwYXJ0cy5ub3Rlcy5wb3AoKTtcbiAgfVxuXG4gIGlmIChoZWlnaHQoKSA+IGF2YWlsYWJsZSAmJiAhcGFydHMuZGVsdGEpIHtcbiAgICBwYXJ0cy53aW5kb3cgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChoZWlnaHQoKSA+IGF2YWlsYWJsZSkge1xuICAgIHBhcnRzLnNjYWxlID0gTWF0aC5tYXgoS1BJX0VYUE9SVF9NSU5fU0NBTEUsIE1hdGgubWF4KDAsIGF2YWlsYWJsZSkgLyBoZWlnaHQoKSk7XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFRoZSBoZWlnaHRzIHNjYWxlZCBieSB0aGUgcGFydHMnIHNjYWxlOiB3aGF0IHRoZSByZW5kZXJlciBsYXlzIHRoZSBjYXJkXG4vLyBvdXQgd2l0aCwgaXRzIHRleHQgc2l6ZWQgYnkgdGhlIHNhbWUgc2NhbGUuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVkS3BpSGVpZ2h0cyhoZWlnaHRzOiBLcGlFeHBvcnRIZWlnaHRzLCBzY2FsZTogbnVtYmVyKTogS3BpRXhwb3J0SGVpZ2h0cyB7XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IGhlaWdodHMudmFsdWUgKiBzY2FsZSxcbiAgICBsYWJlbDogaGVpZ2h0cy5sYWJlbCAqIHNjYWxlLFxuICAgIGRlbHRhOiBoZWlnaHRzLmRlbHRhICogc2NhbGUsXG4gICAgd2luZG93OiBoZWlnaHRzLndpbmRvdyAqIHNjYWxlLFxuICAgIHRhcmdldDogaGVpZ2h0cy50YXJnZXQgKiBzY2FsZSxcbiAgICBzcGFya2xpbmU6IGhlaWdodHMuc3BhcmtsaW5lICogc2NhbGUsXG4gICAgbm90ZTogaGVpZ2h0cy5ub3RlICogc2NhbGUsXG4gIH07XG59XG5cbi8vIEhvdyB0YWxsIHRoZSBjYXJkJ3MgZHJhd24gcGFydHMgc3RhbmQgdG9nZXRoZXIsIGluIHRoZSBoZWlnaHRzJyB1bml0LlxuZXhwb3J0IGZ1bmN0aW9uIGtwaUV4cG9ydEhlaWdodCh2aWV3OiBLcGlDYXJkVmlldywgcGFydHM6IEtwaUV4cG9ydFBhcnRzLCBoZWlnaHRzOiBLcGlFeHBvcnRIZWlnaHRzKTogbnVtYmVyIHtcbiAgcmV0dXJuIGhlaWdodHMudmFsdWVcbiAgICArICh2aWV3LmxhYmVsID8gaGVpZ2h0cy5sYWJlbCA6IDApXG4gICAgKyAocGFydHMuZGVsdGEgPyBoZWlnaHRzLmRlbHRhIDogMClcbiAgICArIChwYXJ0cy53aW5kb3cgPyBoZWlnaHRzLndpbmRvdyA6IDApXG4gICAgKyAocGFydHMudGFyZ2V0ID8gaGVpZ2h0cy50YXJnZXQgOiAwKVxuICAgICsgKHBhcnRzLnNwYXJrbGluZSA/IGhlaWdodHMuc3BhcmtsaW5lIDogMClcbiAgICArIHBhcnRzLm5vdGVzLmxlbmd0aCAqIGhlaWdodHMubm90ZTtcbn1cblxuLy8gVGhlIGxhc3Qgcm93IG9mIGFuIGV4cG9ydGVkIGxpc3QgdGFibGUgdGhhdCBzdG9wcyBzaG9ydCBvZiBpdHMgcmVzdWx0OiBob3dcbi8vIG1hbnkgcm93cyB0aGUgZmlsZSBsZWF2ZXMgb3V0IGFuZCB3aGVyZSB0aGUgd2hvbGUgc2V0IGNhbiBiZSBoYWQuIEVhY2hcbi8vIGZvcm1hdCBmZXRjaGVzIGl0cyBvd24gbnVtYmVyIG9mIHJvd3MgKFBERl9MSVNUX1JPV1MsIFBQVFhfTElTVF9ST1dTKSwgYW5kXG4vLyBib3RoIG5hbWUgd2hhdCBpcyBsZWZ0IHdpdGggdGhpcyBvbmUgc2VudGVuY2UuXG5leHBvcnQgZnVuY3Rpb24gbW9yZVJvd3NOb3RpY2UocmVtYWluaW5nOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYOKApiAke3JlbWFpbmluZ30gbW9yZSByb3cocykg4oCUIHVzZSB0aGUgY29tcG9uZW50J3MgQ1NWIGV4cG9ydCBmb3IgdGhlIGZ1bGwgZGF0YXNldGA7XG59XG5cbi8vIFRoZSBwYWdlcyBvZiBhIGNvbGxlY3RlZCByZXBvcnQgdGhhdCBoYXZlIGF0IGxlYXN0IG9uZSB0aWxlIHdob3NlIHF1ZXJ5XG4vLyBmYWlsZWQsIG9yIHdob3NlIHRleHQgc2hvd3MgYSB2YWx1ZSB0aGF0IGNhbWUgYmFjayB3aXRob3V0IGl0cyBudW1iZXIsIHRoZW5cbi8vIEhFQURFUl9GT09URVJfTkFNRSB3aGVuIHRoZSBoZWFkZXIgb3IgZm9vdGVyIHNob3dzIG9uZSBvbiBhIHBhZ2UgdGhhdCBzaG93c1xuLy8gdGhlIG1hc3RlciDigJQgd2hhdCB0aGUgZmFpbHVyZSBnYXRlIG5hbWVzIHRvIHRoZSB1c2VyLCBhbmQgd2hhdCBtYWtlcyBcInNvbWVcbi8vIG9mIHRoaXMgZmlsZSBpcyBtaXNzaW5nXCIgYSBmYWN0IHRoZSBjYWxsZXIgY2FuIGFjdCBvbiByYXRoZXIgdGhhbiBhIHRoaW5nXG4vLyB0aGV5IG5vdGljZSBpbiB0aGUgUERGIGFmdGVyd2FyZHMuXG5leHBvcnQgZnVuY3Rpb24gZmFpbGVkUGFnZU5hbWVzKGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0KTogc3RyaW5nW10ge1xuICAvLyBOdW1iZXJlZCBiZWZvcmUgdGhlIGZpbHRlciDigJQgYW4gdW5uYW1lZCBwYWdlIDQgdGhhdCBmYWlsZWQgaGFzIHRvIHJlYWRcbiAgLy8gXCJQYWdlIDRcIiwgbm90IFwiUGFnZSAxXCIgYmVjYXVzZSBpdCBoYXBwZW5lZCB0byBiZSB0aGUgZmlyc3QgZmFpbHVyZS5cbiAgY29uc3QgbmFtZXMgPSBjb2xsZWN0ZWQucGFnZXNcbiAgICAubWFwKChwYWdlLCBpbmRleCkgPT4gKHsgcGFnZSwgbnVtYmVyOiBpbmRleCArIDEgfSkpXG4gICAgLmZpbHRlcigoeyBwYWdlIH0pID0+IHBhZ2UuY29tcG9uZW50cy5zb21lKGlzRmFpbGVkKVxuICAgICAgfHwgc2hvd3NGYWlsZWRWYWx1ZShwYWdlLmNvbXBvbmVudHMubWFwKChpdGVtKSA9PiBpdGVtLmNvbXBvbmVudCksIHBhZ2UuZmFpbGVkVmFsdWVzKSlcbiAgICAubWFwKCh7IHBhZ2UsIG51bWJlciB9KSA9PiBwYWdlLnBhZ2UubmFtZSB8fCBgUGFnZSAke251bWJlcn1gKTtcbiAgY29uc3QgbWFzdGVyID0gY29sbGVjdGVkLnJlcG9ydC5tYXN0ZXI7XG4gIGNvbnN0IHNob3dzTWFzdGVyID0gY29sbGVjdGVkLnBhZ2VzLnNvbWUoKHsgcGFnZSB9KSA9PiAhcGFnZS5tYXN0ZXJIaWRkZW4pO1xuXG4gIGlmIChtYXN0ZXIgJiYgc2hvd3NNYXN0ZXIgJiYgc2hvd3NGYWlsZWRWYWx1ZShtYXN0ZXIuY29tcG9uZW50cywgY29sbGVjdGVkLm1hc3RlckZhaWxlZFZhbHVlcykpIHtcbiAgICBuYW1lcy5wdXNoKEhFQURFUl9GT09URVJfTkFNRSk7XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59XG5cbi8vIFdoZXRoZXIgYW55IG9mIHRoZSB0ZXh0IGJsb2NrcyBzaG93cyBvbmUgb2YgdGhlIGZhaWxlZCB2YWx1ZSBrZXlzLlxuZnVuY3Rpb24gc2hvd3NGYWlsZWRWYWx1ZShjb21wb25lbnRzOiBSZXBvcnRDb21wb25lbnRbXSwgZmFpbGVkOiByZWFkb25seSBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBzaG93biA9IG5ldyBTZXQoY29tcG9uZW50c1xuICAgIC5maWx0ZXIoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50LnR5cGUgPT09ICd0ZXh0JylcbiAgICAuZmxhdE1hcCgoY29tcG9uZW50KSA9PiB2YWx1ZUtleXMoY29tcG9uZW50LmNvbmZpZz8uaHRtbCkpKTtcblxuICByZXR1cm4gZmFpbGVkLnNvbWUoKGtleSkgPT4gc2hvd24uaGFzKGtleSkpO1xufVxuXG4vLyBUaGUgY292ZXIncyBmaWx0ZXIgbGluZXM6IHRoZSBleHBvcnQncyBmaWx0ZXIgbGluZXMsIHRoZW4gdGhlIG1hdGNoIHdoaWxlIHRoZSByZXBvcnQgYmFyJ3MgZmlsdGVycyBtYXRjaCBhbnkuIEEgZHJpbGxlZCBjaGFydCdzIGxpbmVcbi8vIGlzIGl0cyB0aXRsZSBhcyB0aGUgY2FudmFzIGhlYWRlciByZWFkcyBpdCAoYHRpdGxlc2AsIGJ5IGNvbXBvbmVudCBpZCkgYW5kXG4vLyB0aGUgY3J1bWJzIG9mIHRoZSBwYXRoIGl0cyBhbnN3ZXIgYXBwbGllZCAodGhlIG9uZXMgaXRzIHRpdGxlIHByaW50cyksIG5vdFxuLy8gdGhlIHBhdGggdGhlIHNjcmVlbiBhc2tlZCBmb3I6IHRoZSBzZXJ2ZXIgbWF5IGhhdmUgY3V0IHRoYXQgcGF0aCBzaG9ydCBvclxuLy8gcmVmdXNlZCBpdC5cbmV4cG9ydCBmdW5jdGlvbiBjb3ZlckZpbHRlckxpbmVzKFxuICBzbmFwc2hvdDogUmVwb3J0RXhwb3J0U25hcHNob3QsXG4gIGxpbmVzOiByZWFkb25seSBSZXBvcnRFeHBvcnRMaW5lW10sXG4gIHBhZ2VzOiByZWFkb25seSBQaWNrPENvbGxlY3RlZFBhZ2UsICdjb21wb25lbnRzJz5bXSxcbiAgdGl0bGVzOiBSZWFkb25seTxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHt9LFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBtYXRjaCA9IHNuYXBzaG90LmZlYXR1cmVzLmluY2x1ZGVzKCdtYXRjaEFueScpID8gbWF0Y2hMaW5lVGV4dChzbmFwc2hvdC5zdGF0ZS5tYXRjaCwgJ2xpbmUnKSA6IG51bGw7XG4gIGNvbnN0IGRyaWxsZWQgPSBwYWdlc1xuICAgIC5mbGF0TWFwKChwYWdlKSA9PiBwYWdlLmNvbXBvbmVudHMpXG4gICAgLmZpbHRlcigoaXRlbSkgPT4gISFpdGVtLmNydW1icz8ubGVuZ3RoKVxuICAgIC5tYXAoKGl0ZW0pID0+IGNydW1iZWRUaXRsZSh0aXRsZXNbaXRlbS5jb21wb25lbnQuaWRdID8/IGl0ZW0uY29tcG9uZW50LnRpdGxlLCBpdGVtLmNydW1icykpO1xuXG4gIHJldHVybiBbXG4gICAgLi4ubGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lLmtpbmQgIT09ICdkcmlsbCcpLm1hcCgobGluZSkgPT4gbGluZS50ZXh0KSxcbiAgICAuLi5kcmlsbGVkLFxuICAgIG1hdGNoLFxuICBdXG4gICAgLmZpbHRlcigobGluZSk6IGxpbmUgaXMgc3RyaW5nID0+ICEhbGluZSk7XG59XG5cbi8vIFdoZXRoZXIgYSBQREYgb3IgUG93ZXJQb2ludCBleHBvcnQgbGF5cyBhIGNvbXBvbmVudCBvdXQ6IGV2ZXJ5IHRpbGUsIGFuZFxuLy8gZXZlcnkgdGV4dCBibG9jaywgd2hpY2ggaGFzIG5vdGhpbmcgdG8gZmV0Y2ggYW5kIHJpZGVzIHRocm91Z2ggd2l0aCBub1xuLy8gZGF0YS4gQW55IG90aGVyIHR5cGUgKGFuIGlubGluZSB2YWx1ZSwgb3IgYSB0eXBlIHRoaXMgdmlld2VyIGRvZXMgbm90XG4vLyBrbm93KSBuZXZlciBpczogYSB2YWx1ZSBpcyByZWFkIG9ubHkgdGhyb3VnaCBpdHMgbGF5ZXIncyB2YWx1ZXMgam9iLlxuZXhwb3J0IGZ1bmN0aW9uIGlzRXhwb3J0U2xvdChjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNUaWxlKGNvbXBvbmVudCkgfHwgY29tcG9uZW50LnR5cGUgPT09ICd0ZXh0Jztcbn1cblxuLy8gR2F0aGVycyBldmVyeXRoaW5nIGFuIGV4cG9ydCBuZWVkczogZXZlcnkgY29tcG9uZW50J3MgZGF0YSBhY3Jvc3MgQUxMIHBhZ2VzXG4vLyAodGhlIGNhbnZhcyBvbmx5IHJlbmRlcnMgdGhlIGFjdGl2ZSBwYWdlLCBzbyBleHBvcnRzIGNhbid0IHNjcmFwZSB0aGVcbi8vIHNjcmVlbiksIGFuZCB0aGUgbnVtYmVycyBvZiB0aGUgdmFsdWVzIHRoZWlyIHRleHQgcmVhZHMsIGZldGNoZWQgZnJlc2ggd2l0aFxuLy8gdGhlIHZpZXdlcidzIGN1cnJlbnQgZmlsdGVyIHN0YXRlLlxuLy9cbi8vIEEgZmFpbGVkIGNvbXBvbmVudCByZXNvbHZlcyB0byBhIG51bGwgYGRhdGFgLCBhbmQgYSBmYWlsZWQgdmFsdWUgdG8gYSBrZXkgaW5cbi8vIGl0cyBwYWdlJ3MgZmFpbGVkVmFsdWVzLCByYXRoZXIgdGhhbiBmYWlsaW5nIHRoZSB3aG9sZSBjb2xsZWN0aW9uIOKAlCBidXQgdGhhdFxuLy8gaXMgc28gdGhlIGNhbGxlciBjYW4gUkVQT1JUIHdoYXQgZmFpbGVkLCBub3Qgc28gaXQgY2FuIGJlIGlnbm9yZWQ6IHNlZVxuLy8gZmFpbGVkUGFnZU5hbWVzKCkgYW5kIHRoZSBmYWlsdXJlIGdhdGUgdGhhdCB1c2VzIGl0LlxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlcG9ydEV4cG9ydENvbGxlY3RvclNlcnZpY2Uge1xuXG4gIHByaXZhdGUgX3JlcG9ydERhdGEgPSBpbmplY3QoUmVwb3J0RGF0YSk7XG4gIHByaXZhdGUgX2ZpbHRlclN0YXRlID0gaW5qZWN0KFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSk7XG4gIHByaXZhdGUgX2ZpbHRlck9wdGlvbnMgPSBpbmplY3QoUmVwb3J0RmlsdGVyT3B0aW9uc1NlcnZpY2UpO1xuXG4gIC8vIGxpc3RSb3dzIGlzIGhvdyBtYW55IHJvd3MgZWFjaCBsaXN0IGZldGNoZXM6IHRoZSByZW5kZXJlcidzIG93biBjYXAsIHNpbmNlXG4gIC8vIGEgUERGIHRhYmxlIGNvbnRpbnVlcyBvbnRvIGV4dHJhIHBhZ2VzIGFuZCBhIHNsaWRlIHRhYmxlIGNhbm5vdC5cbiAgLy9cbiAgLy8gVGhlIHNjcmVlbiBpcyByZWFkIG9uY2UsIHdoZW4gdGhlIGV4cG9ydCBzdGFydHMgKHNuYXBzaG90KTogZXZlcnkgdGlsZSxcbiAgLy8gZXZlcnkgdmFsdWVzIGpvYiwgdGhlIGZpbHRlciBsaW5lcyBhbmQgdGhlIGNvdmVyIHJlYWQgdGhhdCBjb3B5LCBzbyBhXG4gIC8vIGZpbHRlciBjaGFuZ2VkIHdoaWxlIHRoZSB0aWxlcyBhcmUgZmV0Y2hlZCByZWFjaGVzIG5vbmUgb2YgdGhlbS4gQSByZXRyeVxuICAvLyBjb2xsZWN0cyBhZ2FpbiwgYW5kIHNvIHJlYWRzIHRoZSBzY3JlZW4gYXMgaXQgaXMgdGhlbi5cbiAgcHVibGljIGNvbGxlY3QocmVwb3J0OiBSZXBvcnQsIGxpc3RSb3dzOiBudW1iZXIpOiBPYnNlcnZhYmxlPENvbGxlY3RlZFJlcG9ydD4ge1xuICAgIGNvbnN0IGpvYnMgPSB0aGlzLl9qb2JzKHJlcG9ydCk7XG4gICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLnNuYXBzaG90KHJlcG9ydCk7XG4gICAgY29uc3QgZm9ybWF0Q29udGV4dCA9IHNuYXBzaG90LmZvcm1hdENvbnRleHQ7XG5cbiAgICAvLyBSZWxlYXNlZCBhIGZldyBhdCBhIHRpbWUgcmF0aGVyIHRoYW4gYWxsIGF0IG9uY2UsIGEgcGFnZSdzIHZhbHVlcyBpbiB0aGVcbiAgICAvLyBzYW1lIHF1ZXVlIGFzIHRoZSB0aWxlcywgc28gdGhleSBuZXZlciBhZGQgdG8gdGhlIHF1ZXJpZXMgYWxyZWFkeVxuICAgIC8vIHJ1bm5pbmcuIG1lcmdlTWFwIGNvbXBsZXRlcyBvdXQgb2Ygb3JkZXIsIHNvIGVhY2ggcmVzdWx0IGNhcnJpZXMgdGhlIGpvYlxuICAgIC8vIGl0IGNhbWUgZnJvbSBhbmQgdGhlIHJvd3MgYXJlIGZpbGVkIGJ5IGluZGV4IOKAlCB0aGUgZGVjaydzIHBhZ2Ugb3JkZXJcbiAgICAvLyBjYW4ndCBkZXBlbmQgb24gd2hpY2ggcXVlcnkgaGFwcGVuZWQgdG8gZmluaXNoIGZpcnN0LlxuICAgIGNvbnN0IGFsbCQgPSBqb2JzLmxlbmd0aFxuICAgICAgPyBmcm9tKGpvYnMubWFwKChqb2IsIGluZGV4KSA9PiAoeyBqb2IsIGluZGV4IH0pKSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoXG4gICAgICAgICAgICAoeyBqb2IsIGluZGV4IH0pID0+IHRoaXMuX3J1bkpvYihyZXBvcnQsIGpvYiwgbGlzdFJvd3MsIHNuYXBzaG90KVxuICAgICAgICAgICAgICAucGlwZShtYXAoKHJlc3VsdCkgPT4gKHsgcmVzdWx0LCBpbmRleCB9KSkpLFxuICAgICAgICAgICAgRVhQT1JUX0NPTkNVUlJFTkNZLFxuICAgICAgICAgICksXG4gICAgICAgICAgdG9BcnJheSgpLFxuICAgICAgICApXG4gICAgICA6IG9mKFtdIGFzIHsgcmVzdWx0OiBDb2xsZWN0UmVzdWx0OyBpbmRleDogbnVtYmVyIH1bXSk7XG5cbiAgICAvLyBUaGUgbGluZXMgYW5kIHRoZSBmaWx0ZXIgdG9rZW5zIHJpZGUgYWxvbmdzaWRlIHRoZSBjb21wb25lbnQgZGF0YVxuICAgIC8vIHJhdGhlciB0aGFuIGJlaW5nIGJ1aWx0IGF0IHRoZSBlbmQsIGJlY2F1c2UgbmFtaW5nIGEgc2VsZWN0IGZpbHRlcidzXG4gICAgLy8gdmFsdWVzIGlzIGl0c2VsZiBhIHJlcXVlc3QuXG4gICAgcmV0dXJuIGZvcmtKb2luKHsgY29sbGVjdGVkOiBhbGwkLCB3b3JkaW5nOiB0aGlzLmV4cG9ydFdvcmRpbmcocmVwb3J0LCBzbmFwc2hvdCkgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHsgY29sbGVjdGVkLCB3b3JkaW5nIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWxlID0gdGhpcy5fZmlsZShyZXBvcnQsIGNvbGxlY3RlZCwgZm9ybWF0Q29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVwb3J0LFxuICAgICAgICAgICAgLi4uZmlsZSxcbiAgICAgICAgICAgIGZpbHRlclN1bW1hcnk6IGNvdmVyRmlsdGVyTGluZXMoc25hcHNob3QsIHdvcmRpbmcubGluZXMsIGZpbGUucGFnZXMsIHdvcmRpbmcudGl0bGVzKSxcbiAgICAgICAgICAgIGZpbHRlckZpZWxkczogd29yZGluZy5maWx0ZXJGaWVsZHMsXG4gICAgICAgICAgICBjb250ZXh0TGluZXM6IHRoaXMuX2NvbnRleHRMaW5lcyhyZXBvcnQpLFxuICAgICAgICAgICAgZm9ybWF0Q29udGV4dCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBUaGUgc2NyZWVuIGFzIG9uZSBleHBvcnQgcmVhZHMgaXQ6IHRoZSBzdGF0ZSBzbmFwc2hvdCwgZWFjaCBncm91cCdzIHZhbHVlXG4gIC8vIGFuZCBsaXZlIHByZXNldCwgZWFjaCB0aWxlJ3MgZmlsdGVyIGVudHJpZXMgYW5kIHN0YXRlICh0aWxlRGF0YVN0YXRlKSxcbiAgLy8gZWFjaCB2YWx1ZSdzIGZpbHRlciBlbnRyaWVzLCB0aGUgZ3JhaW4sIHRoZSBmZWF0dXJlcyBzZXJ2ZWQgYW5kIHRoZVxuICAvLyBmb3JtYXQuIEEgdmFsdWUncyBlbnRyaWVzIGFyZSByZWFkIGhlcmUgdG9vLCBzbyB0aGVcbiAgLy8gbnVtYmVycyBpbiBhIGZpbGUncyB0ZXh0IGFyZSBmaWx0ZXJlZCBhcyBpdHMgdGlsZXMgYXJlLCB3aGF0ZXZlciB0aGUgYmFyXG4gIC8vIGRvZXMgd2hpbGUgdGhlIGV4cG9ydCBydW5zLlxuICBwdWJsaWMgc25hcHNob3QocmVwb3J0OiBSZXBvcnQpOiBSZXBvcnRFeHBvcnRTbmFwc2hvdCB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9maWx0ZXJTdGF0ZS5zbmFwc2hvdCgpO1xuICAgIGNvbnN0IHRpbGVzID0gKHJlcG9ydC5wYWdlcyA/PyBbXSlcbiAgICAgIC5mbGF0TWFwKChwYWdlKSA9PiBwYWdlLmNvbXBvbmVudHMgPz8gW10pXG4gICAgICAuZmlsdGVyKChjb21wb25lbnQpID0+IGlzVGlsZShjb21wb25lbnQpKTtcbiAgICBjb25zdCB2YWx1ZXMgPSByZXBvcnRDb21wb25lbnRzKHJlcG9ydClcbiAgICAgIC5maWx0ZXIoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50LnR5cGUgPT09ICd2YWx1ZScpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlLFxuICAgICAgLi4udGhpcy5fZ3JvdXBWYWx1ZXMocmVwb3J0KSxcbiAgICAgIGZpbHRlcnM6IE9iamVjdC5mcm9tRW50cmllcyh0aWxlcy5tYXAoKHRpbGUpID0+IFt0aWxlLmlkLCB0aGlzLl9maWx0ZXJTdGF0ZS5yZXNvbHZlRm9yQ29tcG9uZW50KHRpbGUpXSkpLFxuICAgICAgdmFsdWVGaWx0ZXJzOiBPYmplY3QuZnJvbUVudHJpZXModmFsdWVzXG4gICAgICAgIC5tYXAoKHZhbHVlKSA9PiBbdmFsdWUuaWQsIHRoaXMuX2ZpbHRlclN0YXRlLnJlc29sdmVGb3JDb21wb25lbnQodmFsdWUpXSkpLFxuICAgICAgc3RhdGVzOiBPYmplY3QuZnJvbUVudHJpZXModGlsZXMubWFwKCh0aWxlKSA9PiBbdGlsZS5pZCwgdGhpcy5fdGlsZVN0YXRlKHJlcG9ydCwgdGlsZSwgc3RhdGUpXSkpLFxuICAgICAgZ3JpZEV4cGFuc2lvbnM6IE9iamVjdC5mcm9tRW50cmllcyh0aWxlc1xuICAgICAgICAubWFwKCh0aWxlKSA9PiBbdGlsZS5pZCwgdGhpcy5fZmlsdGVyU3RhdGUuZ3JpZEV4cGFuc2lvbih0aWxlKV0gYXMgY29uc3QpXG4gICAgICAgIC5maWx0ZXIoKFssIGV4cGFuc2lvbl0pID0+ICEhZXhwYW5zaW9uKSksXG4gICAgICBmcmVxdWVuY3k6IHRoaXMuX2ZpbHRlclN0YXRlLmZyZXF1ZW5jeSgpLFxuICAgICAgZmVhdHVyZXM6IG9mZmVyZWRWaWV3ZXJGZWF0dXJlcyhyZXBvcnQudmlld2VyRmVhdHVyZXMpLFxuICAgICAgZm9ybWF0Q29udGV4dDogdGhpcy5fZmlsdGVyU3RhdGUuZm9ybWF0Q29udGV4dCgpLFxuICAgIH07XG4gIH1cblxuICAvLyBIb3cgYW4gZXhwb3J0IHdvcmRzIHRoZSBzY3JlZW4sIG92ZXIgYSBzbmFwc2hvdCAoYHBhZ2VJZGAgZm9yIGEgVGhpc1xuICAvLyBQYWdlIHppcCk6IGl0cyBmaWx0ZXIgbGluZXMgKGV4cG9ydExpbmVzOiB0aGUgY292ZXIncywgYW5kIHRoZSB6aXAnc1xuICAvLyBmaWx0ZXJMaW5lcyksIHdoYXQgZWFjaCB7e2ZpbHRlci48aWQ+fX0gdG9rZW4gcHJpbnRzLCBhbmQgZWFjaCB0aWxlJ3NcbiAgLy8gdGl0bGUgYXMgdGhlIGNhbnZhcyBoZWFkZXIgcmVhZHMgaXQgKHRoZSB6aXAgbmFtZXMgaXRzIGZpbGVzIGFmdGVyXG4gIC8vIHRoZW0pLiBBIHNlbGVjdCdzIHBpY2tzIGFyZSBuYW1lZCBvbmNlIGZvciBhbGwgdGhyZWUsIGFzIHRoZSByZXBvcnQgYmFyXG4gIC8vIG5hbWVzIHRoZW0sIHNvIG5vIHRva2VuIGluIGEgZmlsZSByZWFkcyBhcyBsb2FkaW5nLlxuICBwdWJsaWMgZXhwb3J0V29yZGluZyhcbiAgICByZXBvcnQ6IFJlcG9ydCxcbiAgICBzbmFwc2hvdDogUmVwb3J0RXhwb3J0U25hcHNob3QsXG4gICAgcGFnZUlkOiBudW1iZXIgfCBudWxsID0gbnVsbCxcbiAgKTogT2JzZXJ2YWJsZTxSZXBvcnRFeHBvcnRXb3JkaW5nPiB7XG4gICAgY29uc3QgbmFtZXMgPSB0aGlzLl9waWNrTmFtZXIocmVwb3J0KTtcblxuICAgIHJldHVybiB0aGlzLl9maWx0ZXJGaWVsZHMocmVwb3J0LCBzbmFwc2hvdCwgbmFtZXMpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChmaWx0ZXJGaWVsZHMpID0+IHtcbiAgICAgICAgICBjb25zdCB0aXRsZXMgPSB0aGlzLl9leHBvcnRUaXRsZXMocmVwb3J0LCBwYWdlSWQsIGZpbHRlckZpZWxkcyk7XG5cbiAgICAgICAgICByZXR1cm4gZXhwb3J0TGluZXMoeyByZXBvcnQsIHNuYXBzaG90LCBwYWdlSWQsIG5hbWVzLCB0aXRsZXMgfSlcbiAgICAgICAgICAgIC5waXBlKG1hcCgobGluZXMpID0+ICh7IGxpbmVzLCBmaWx0ZXJGaWVsZHMsIHRpdGxlcyB9KSkpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBUaGUgdGl0bGUgb2YgZWFjaCB0aWxlLCBieSBjb21wb25lbnQgaWQsIGFzIHRoZSBjYW52YXMgaGVhZGVyIHJlYWRzIGl0OlxuICAvLyBpdHMgdG9rZW5zIGZpbGxlZCB3aXRoIGl0cyBwYWdlJ3MgZmllbGRzIGFuZCB0aGUgZmlsdGVycyB0aGUgcGFnZSByZWFkc1xuICAvLyAobGF5ZXJGaWx0ZXJGaWVsZHMpLiBUaGUgd2hvbGUgcmVwb3J0J3Mgb3Igb25lIHBhZ2UncyAocGFnZUlkKS4gQW5cbiAgLy8gdW50aXRsZWQgdGlsZSBpcyBsZWZ0IG91dDogdGhlIHNlcnZlciBuYW1lcyBpdHMgZmlsZSBieSBpdHMgdHlwZS5cbiAgcHJpdmF0ZSBfZXhwb3J0VGl0bGVzKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIHBhZ2VJZDogbnVtYmVyIHwgbnVsbCxcbiAgICBmaWVsZHM6IFJlY29yZDxudW1iZXIsIFRleHRGaWx0ZXJGaWVsZD4sXG4gICk6IFJlY29yZDxudW1iZXIsIHN0cmluZz4ge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoKHJlcG9ydC5wYWdlcyA/PyBbXSlcbiAgICAgIC5tYXAoKHBhZ2UsIGluZGV4KSA9PiAoeyBwYWdlLCBpbmRleCB9KSlcbiAgICAgIC5maWx0ZXIoKHsgcGFnZSB9KSA9PiAhcGFnZUlkIHx8IHBhZ2UuaWQgPT09IHBhZ2VJZClcbiAgICAgIC5mbGF0TWFwKCh7IHBhZ2UsIGluZGV4IH0pID0+IHtcbiAgICAgICAgY29uc3QgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0ID0ge1xuICAgICAgICAgIHBhZ2VOdW1iZXI6IGluZGV4ICsgMSxcbiAgICAgICAgICBwYWdlTmFtZTogcGFnZS5uYW1lIHx8IGBQYWdlICR7aW5kZXggKyAxfWAsXG4gICAgICAgICAgcmVwb3J0TmFtZTogcmVwb3J0Lm5hbWUsXG4gICAgICAgICAgZmlsdGVyczogbGF5ZXJGaWx0ZXJGaWVsZHMoZmllbGRzLCByZXBvcnQuZmlsdGVyR3JvdXBzID8/IFtdLCBwYWdlLmlkKSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gKHBhZ2UuY29tcG9uZW50cyA/PyBbXSlcbiAgICAgICAgICAuZmlsdGVyKChjb21wb25lbnQpID0+IGlzVGlsZShjb21wb25lbnQpICYmICEhY29tcG9uZW50LnRpdGxlKVxuICAgICAgICAgIC5tYXAoKGNvbXBvbmVudCk6IFtudW1iZXIsIHN0cmluZ10gPT4gW2NvbXBvbmVudC5pZCwgZmlsbFRpdGxlVG9rZW5zKGNvbXBvbmVudC50aXRsZSwgdG9rZW5zKV0pO1xuICAgICAgfSkpO1xuICB9XG5cbiAgLy8gRXZlcnkgcmVxdWVzdCB0aGUgZXhwb3J0IG1ha2VzLCBpbiBwYWdlIG9yZGVyOiBlYWNoIHBhZ2UncyB0aWxlcywgdGhlbiB0aGVcbiAgLy8gdmFsdWVzIGl0cyB0ZXh0IHNob3dzOyB0aGUgaGVhZGVyIGFuZCBmb290ZXIncyB2YWx1ZXMgbGFzdCwgd2hlbiBzb21lIHBhZ2VcbiAgLy8gc2hvd3MgdGhlIG1hc3Rlci4gVGV4dCBibG9ja3MgaGF2ZSBub3RoaW5nIHRvIGZldGNoIG9mIHRoZWlyIG93biDigJQgdGhleVxuICAvLyByaWRlIHRocm91Z2ggd2l0aCBubyBkYXRhLCBhbmQgdGhlaXIgdG9rZW5zIGFyZSBmaWxsZWQgZnJvbSB0aGVpciBsYXllcidzXG4gIC8vIHZhbHVlcy4gQSB2YWx1ZSBpcyByZWFkIG9ubHkgdGhyb3VnaCBpdHMgbGF5ZXIncyByZXF1ZXN0LCBuZXZlciBhcyBhIHRpbGVcbiAgLy8gKGlzRXhwb3J0U2xvdCkuIFRoZSBoZWFkZXIvZm9vdGVyIGJsb2NrcyAocmVwb3J0Lm1hc3RlcikgYXJlIHJlYWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVycyBzdHJhaWdodCBvZmYgdGhlIHJlcG9ydC5cbiAgcHJpdmF0ZSBfam9icyhyZXBvcnQ6IFJlcG9ydCk6IENvbGxlY3RKb2JbXSB7XG4gICAgY29uc3Qgam9iczogQ29sbGVjdEpvYltdID0gW107XG5cbiAgICByZXBvcnQucGFnZXMuZm9yRWFjaCgocGFnZSwgcGFnZUluZGV4KSA9PiB7XG4gICAgICBwYWdlLmNvbXBvbmVudHNcbiAgICAgICAgLmZpbHRlcihpc0V4cG9ydFNsb3QpXG4gICAgICAgIC5mb3JFYWNoKChjb21wb25lbnQpID0+IGpvYnMucHVzaCh7IGtpbmQ6ICdjb21wb25lbnQnLCBwYWdlSW5kZXgsIGNvbXBvbmVudCB9KSk7XG4gICAgICBqb2JzLnB1c2goLi4udGhpcy5fdmFsdWVzSm9icyhwYWdlLCBwYWdlSW5kZXgpKTtcbiAgICB9KTtcblxuICAgIGlmIChyZXBvcnQubWFzdGVyICYmIHJlcG9ydC5wYWdlcy5zb21lKChwYWdlKSA9PiAhcGFnZS5tYXN0ZXJIaWRkZW4pKSB7XG4gICAgICBqb2JzLnB1c2goLi4udGhpcy5fdmFsdWVzSm9icyhyZXBvcnQubWFzdGVyLCBudWxsKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvYnM7XG4gIH1cblxuICAvLyBBIGxheWVyJ3Mgb25lIHZhbHVlcyBqb2IsIG9yIG5vbmUgd2hlbiBpdHMgdGV4dCBzaG93cyBubyB2YWx1ZS5cbiAgcHJpdmF0ZSBfdmFsdWVzSm9icyhsYXllcjogUmVwb3J0UGFnZSB8IFJlcG9ydE1hc3RlciwgcGFnZUluZGV4OiBudW1iZXIgfCBudWxsKTogQ29sbGVjdEpvYltdIHtcbiAgICBjb25zdCB0ZXh0cyA9IGxheWVyLmNvbXBvbmVudHMuZmlsdGVyKChjb21wb25lbnQpID0+IGNvbXBvbmVudC50eXBlID09PSAndGV4dCcpO1xuICAgIGNvbnN0IHZhbHVlcyA9IGxheWVyLnZhbHVlcyA/PyBbXTtcbiAgICBjb25zdCBzaG93biA9IHNob3duVmFsdWVzKHZhbHVlcywgdGV4dHMpO1xuXG4gICAgcmV0dXJuIHNob3duLmxlbmd0aFxuICAgICAgPyBbeyBraW5kOiAndmFsdWVzJywgcGFnZUluZGV4LCBwYWdlSWQ6IGxheWVyLmlkLCB2YWx1ZXMsIGNvbXBvbmVudHM6IHNob3duIH1dXG4gICAgICA6IFtdO1xuICB9XG5cbiAgLy8gT25lIHF1ZXVlZCBqb2IsIGl0cyByZXN1bHQgdGFnZ2VkIHdpdGggdGhlIHBhZ2UgaXQgaXMgZmlsZWQgdW5kZXIuXG4gIHByaXZhdGUgX3J1bkpvYihcbiAgICByZXBvcnQ6IFJlcG9ydCxcbiAgICBqb2I6IENvbGxlY3RKb2IsXG4gICAgbGlzdFJvd3M6IG51bWJlcixcbiAgICBzbmFwc2hvdDogUmVwb3J0RXhwb3J0U25hcHNob3QsXG4gICk6IE9ic2VydmFibGU8Q29sbGVjdFJlc3VsdD4ge1xuICAgIGlmIChqb2Iua2luZCA9PT0gJ2NvbXBvbmVudCcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb21wb25lbnREYXRhKHJlcG9ydCwgam9iLmNvbXBvbmVudCwgbGlzdFJvd3MsIHNuYXBzaG90KVxuICAgICAgICAucGlwZShtYXAoKGl0ZW0pOiBDb2xsZWN0UmVzdWx0ID0+ICh7IGtpbmQ6ICdjb21wb25lbnQnLCBwYWdlSW5kZXg6IGpvYi5wYWdlSW5kZXgsIGl0ZW0gfSkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGFnZVZhbHVlcyhyZXBvcnQsIGpvYi5wYWdlSWQsIGpvYi52YWx1ZXMsIGpvYi5jb21wb25lbnRzLCBzbmFwc2hvdClcbiAgICAgIC5waXBlKG1hcCgoY29sbGVjdGVkKTogQ29sbGVjdFJlc3VsdCA9PiAoeyBraW5kOiAndmFsdWVzJywgcGFnZUluZGV4OiBqb2IucGFnZUluZGV4LCBjb2xsZWN0ZWQgfSkpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXBvbmVudERhdGEoXG4gICAgcmVwb3J0OiBSZXBvcnQsXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgbGlzdFJvd3M6IG51bWJlcixcbiAgICBzbmFwc2hvdDogUmVwb3J0RXhwb3J0U25hcHNob3QsXG4gICk6IE9ic2VydmFibGU8Q29sbGVjdGVkQ29tcG9uZW50PiB7XG4gICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAndGV4dCcpIHtcbiAgICAgIHJldHVybiBvZih7IGNvbXBvbmVudCwgZGF0YTogbnVsbCwgaGlkZGVuQ29sdW1uczogW10gfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVycyA9IHNuYXBzaG90LmZpbHRlcnNbY29tcG9uZW50LmlkXSA/PyBbXTtcblxuICAgIGlmIChjb21wb25lbnQudHlwZSA9PT0gJ2dyaWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ3JpZFRhYmxlKHJlcG9ydCwgY29tcG9uZW50LCBmaWx0ZXJzLCBzbmFwc2hvdC5zdGF0ZXNbY29tcG9uZW50LmlkXSA/PyB7fSwgbGlzdFJvd3MsIHNuYXBzaG90KTtcbiAgICB9XG5cbiAgICAvLyBUaGUgdGlsZSdzIG93biBzdGF0ZSwgdGhlIG9uZSBpdHMgc2NyZWVuIGFuZCBpdHMgQ1NWIGNhcnJ5XG4gICAgLy8gKHRpbGVEYXRhU3RhdGUpOiBhIHRpbGUgdGhhdCBmb2xsb3dzIHRoZSBncm91cC1ieSByZS1idWNrZXRzIGF0IHRoZVxuICAgIC8vIHZpZXdlcidzIGdyYWluLCBhIHRpbWUtc2VyaWVzIGNoYXJ0IGtlZXBzIGl0cyBkcmlsbCBwYXRoLCBhIGxpc3QgcmVhZHNcbiAgICAvLyBpbiB0aGUgc2NyZWVuJ3Mgb3JkZXIgYW5kIGhvbGRzIHRoZSBzY3JlZW4ncyByb3dzLiBBIGxpc3QgYWRkcyBpdHNcbiAgICAvLyBleHBvcnQgcGFnaW5nLlxuICAgIGNvbnN0IHRpbGVTdGF0ZSA9IHNuYXBzaG90LnN0YXRlc1tjb21wb25lbnQuaWRdID8/IHt9O1xuICAgIGNvbnN0IHN0YXRlOiBDb21wb25lbnREYXRhU3RhdGUgPSBjb21wb25lbnQudHlwZSA9PT0gJ2xpc3QnXG4gICAgICA/IHsgLi4udGlsZVN0YXRlLCBwYWdlOiAxLCBwYWdlU2l6ZTogbGlzdFJvd3MgfVxuICAgICAgOiB7IC4uLnRpbGVTdGF0ZSB9O1xuICAgIC8vIFRoZSB0YWJsZSBsZWF2ZXMgb3V0IHRoZSBjb2x1bW5zIHRoZSB2aWV3ZXIgaGlkLiBUaGUgcm93cyBhcmUgZmV0Y2hlZFxuICAgIC8vIHdob2xlLCBhcyB0aGUgc2NyZWVuIGZldGNoZXMgdGhlbSAodGhlIHNlcnZlciByZWFkcyBoaWRkZW5Db2x1bW5zIGZvciBhXG4gICAgLy8gQ1NWIG9ubHkpLCBhbmQgdGhlIHJlbmRlcmVycyBkcm9wIHRoZSBjZWxscy5cbiAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gWy4uLihzdGF0ZS5oaWRkZW5Db2x1bW5zID8/IFtdKV07XG5cbiAgICAvLyBoYW5kbGVyczogZmFsc2Uga2VlcHMgdGhlIGFwcCdzIGdsb2JhbCBlcnJvciBkaWFsb2cgb3V0IG9mIHRoaXMuIEEgZmFpbGVkXG4gICAgLy8gdGlsZSBpcyByZXBvcnRlZCBvbmNlLCBieSB0aGUgZmFpbHVyZSBnYXRlLCBuYW1pbmcgdGhlIHBhZ2VzIGl0IGNvc3Qg4oCUXG4gICAgLy8gbmV2ZXIgYXMgdGVuIHN0YWNrZWQgbW9kYWxzIGNhcnJ5aW5nIHRoZSBkYXRhYmFzZSdzIG93biB3b3JkaW5nLlxuICAgIHJldHVybiB0aGlzLl9yZXBvcnREYXRhLmNvbXBvbmVudERhdGEocmVwb3J0LmlkLCBjb21wb25lbnQuaWQsIGZpbHRlcnMsIHN0YXRlLCB0cnVlLCB7IGhhbmRsZXJzOiBmYWxzZSB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZGF0YTogQ29tcG9uZW50RGF0YSkgPT4gdGhpcy5fY29sbGVjdGVkKGNvbXBvbmVudCwgZGF0YSwgc3RhdGUuc2VhcmNoLCBoaWRkZW5Db2x1bW5zLCBzbmFwc2hvdCkpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKHsgY29tcG9uZW50LCBkYXRhOiBudWxsLCBoaWRkZW5Db2x1bW5zIH0pKSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBBIHRpbGUncyBzdGF0ZSBhcyBhbiBleHBvcnQgcmVhZHMgaXQ6IHRpbGVEYXRhU3RhdGUsIGFuZCBmb3IgYSB0YWJsZSB0aGVcbiAgLy8gbGF5b3V0IHRoZSB2aWV3ZXIgcHV0IGl0IGluLCBhYnNlbnQgd2hpbGUgaXQgc2hvd3MgaXRzIHN0b3JlZCBvbmUuXG4gIHByaXZhdGUgX3RpbGVTdGF0ZShyZXBvcnQ6IFJlcG9ydCwgdGlsZTogUmVwb3J0Q29tcG9uZW50LCBzdGF0ZTogUmVwb3J0U3RhdGVTbmFwc2hvdCk6IENvbXBvbmVudERhdGFTdGF0ZSB7XG4gICAgY29uc3QgbGF5b3V0ID0gdGlsZS50eXBlID09PSAnZ3JpZCcgPyB0aGlzLl9maWx0ZXJTdGF0ZS5ncmlkU2Vzc2lvbkxheW91dCh0aWxlKSA6IG51bGw7XG5cbiAgICByZXR1cm4geyAuLi50aWxlRGF0YVN0YXRlKHJlcG9ydCwgdGlsZSwgc3RhdGUpLCAuLi4obGF5b3V0ID8geyBsYXlvdXQgfSA6IHt9KSB9O1xuICB9XG5cbiAgLy8gQSB0YWJsZSB0aWxlIGFzIHRoZSBzY3JlZW4gZHJhd3MgaXQsIHJlYWQgYXBhcnQgZnJvbSB0aGUgc2NyZWVuIHRocm91Z2hcbiAgLy8gYW4gZXhwb3J0IHNvdXJjZSAocmVhZEdyaWRUYWJsZSgpKTogaW4gdGhlIHZpZXdlcidzIGxheW91dCB3aXRoIHRoZVxuICAvLyBncm91cHMgdGhleSBsZWZ0IG9wZW4sIGF0IG1vc3QgYHJvd3NgIGxpbmVzIGFuZCBHUklEX0VYUE9SVF9DT0xVTU5TXG4gIC8vIHBpdm90IGNvbHVtbnMsIGVhY2ggdmFsdWUgd3JpdHRlbiBieSB0aGUgc2NyZWVuJ3MgZm9ybWF0dGVyIG9uY2UgdGhlXG4gIC8vIHJlYWQncyByZXBvcnQgbGluZSBpcyBpbi4gVGhhdCBsaW5lIHN0YW5kcyBpbiBhcyBpdHMgZGF0YSwgc28gdGhlIHRpdGxlLFxuICAvLyB0aGUgc3VidGl0bGUgYW5kIHRoZSBub3RlcyByZWFkIGl0IGFzIGEgbGlzdCdzLiBBIGZhaWxlZCByZWFkIGlzIGFcbiAgLy8gZmFpbGVkIHRpbGUuXG4gIHByaXZhdGUgX2dyaWRUYWJsZShcbiAgICByZXBvcnQ6IFJlcG9ydCxcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgICBmaWx0ZXJzOiBSZXNvbHZlZEZpbHRlclZhbHVlW10sXG4gICAgc3RhdGU6IENvbXBvbmVudERhdGFTdGF0ZSxcbiAgICByb3dzOiBudW1iZXIsXG4gICAgc25hcHNob3Q6IFJlcG9ydEV4cG9ydFNuYXBzaG90LFxuICApOiBPYnNlcnZhYmxlPENvbGxlY3RlZENvbXBvbmVudD4ge1xuICAgIGNvbnN0IGxvY2FsZSA9IHNuYXBzaG90LmZvcm1hdENvbnRleHQubG9jYWxlO1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBSZXBvcnRHcmlkU291cmNlKHRoaXMuX3JlcG9ydERhdGEsIHJlcG9ydC5pZCwgY29tcG9uZW50LmlkLCB7IGlzRXhwb3J0OiB0cnVlLCBsb2NhbGU6ICgpID0+IGxvY2FsZSB9KTtcbiAgICBjb25zdCBzY3JlZW4gPSAoKSA9PiByZXBvcnRHcmlkRm9ybWF0dGVyKHtcbiAgICAgIGZvcm1hdDogc25hcHNob3QuZm9ybWF0Q29udGV4dCxcbiAgICAgIHRpbWV6b25lOiB0aGlzLl9maWx0ZXJTdGF0ZS50aW1lem9uZSgpLFxuICAgICAgcmVwb3J0OiBzb3VyY2UucmVwb3J0KCksXG4gICAgfSk7XG4gICAgY29uc3QgZm9ybWF0dGVyOiBHcmlkRm9ybWF0dGVyID0ge1xuICAgICAgZm9ybWF0OiAodmFsdWUsIGZpZWxkLCBwbGFjZW1lbnQpID0+IHNjcmVlbigpLmZvcm1hdCh2YWx1ZSwgZmllbGQsIHBsYWNlbWVudCksXG4gICAgICB0b051bWJlcjogKHRleHQsIGZpZWxkLCBwbGFjZW1lbnQpID0+IHNjcmVlbigpLnRvTnVtYmVyKHRleHQsIGZpZWxkLCBwbGFjZW1lbnQpLFxuICAgIH07XG4gICAgY29uc3QgbGF5b3V0ID0gc3RhdGUubGF5b3V0ID8/IGF1dGhvcmVkR3JpZExheW91dChjb21wb25lbnQpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGZpbHRlcnMsXG4gICAgICAuLi4oc3RhdGUubWF0Y2hBbnlHcm91cElkcz8ubGVuZ3RoID8geyBtYXRjaEFueUdyb3VwSWRzOiBzdGF0ZS5tYXRjaEFueUdyb3VwSWRzIH0gOiB7fSksXG4gICAgICAuLi4oc3RhdGUuZnJlcXVlbmN5ID8geyBmcmVxdWVuY3k6IHN0YXRlLmZyZXF1ZW5jeSB9IDoge30pLFxuICAgIH07XG5cbiAgICByZXR1cm4gcmVhZEdyaWRUYWJsZShzb3VyY2UsIGxheW91dCwgcGFyYW1zLCBzbmFwc2hvdC5ncmlkRXhwYW5zaW9ucz8uW2NvbXBvbmVudC5pZF0sIHsgcm93cywgY29sdW1uczogR1JJRF9FWFBPUlRfQ09MVU1OUyB9LCBmb3JtYXR0ZXIpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh0YWJsZSk6IENvbGxlY3RlZENvbXBvbmVudCA9PiAoe1xuICAgICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgICBkYXRhOiB7IC4uLihzb3VyY2UucmVwb3J0KCkgPz8ge30pLCBjb2x1bW5zOiBbXSwgcm93czogW10gfSBhcyBDb21wb25lbnREYXRhLFxuICAgICAgICAgIGhpZGRlbkNvbHVtbnM6IFtdLFxuICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgIHRhYmxlTm90ZXM6IGdyaWRFeHBvcnROb3Rlcyh0YWJsZSwgbGF5b3V0LCBsb2NhbGUpLFxuICAgICAgICAgIC4uLigobGF5b3V0LmZpbHRlcnMgPz8gW10pLmxlbmd0aCA/IHsgZmlsdGVyZWQ6IHRydWUgfSA6IHt9KSxcbiAgICAgICAgfSkpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKHsgY29tcG9uZW50LCBkYXRhOiBudWxsLCBoaWRkZW5Db2x1bW5zOiBbXSB9KSksXG4gICAgICApO1xuICB9XG5cbiAgLy8gT25lIHRpbGUncyBhbnN3ZXIgYXMgdGhlIHJlbmRlcmVycyB0YWtlIGl0LiBBIHNlYXJjaCB0aGUgc2VydmVyIGNvdWxkXG4gIC8vIG5vdCBhcHBseSAoc2VhcmNoTm90ZTogdGhlIGxpc3QgaGFzIG5vIHRleHQgY29sdW1uKSBuYXJyb3dlZCBub3RoaW5nLCBzb1xuICAvLyB0aGUgaXRlbSBkb2VzIG5vdCBjYXJyeSBpdC4gQSBkcmlsbGVkIGNoYXJ0IGNhcnJpZXMgdGhlIGJyZWFkY3J1bWIgb2YgdGhlXG4gIC8vIHBhdGggaXRzIGFuc3dlciBhcHBsaWVkLCB3aGljaCBpcyB3aGF0IGl0cyBudW1iZXJzIHdlcmUgcmVhZCBhdC5cbiAgcHJpdmF0ZSBfY29sbGVjdGVkKFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIGRhdGE6IENvbXBvbmVudERhdGEsXG4gICAgc2VhcmNoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgaGlkZGVuQ29sdW1uczogc3RyaW5nW10sXG4gICAgc25hcHNob3Q6IFJlcG9ydEV4cG9ydFNuYXBzaG90LFxuICApOiBDb2xsZWN0ZWRDb21wb25lbnQge1xuICAgIGNvbnN0IHBhdGggPSBkYXRhPy5kcmlsbD8ucGF0aCA/PyBbXTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb21wb25lbnQsXG4gICAgICBkYXRhLFxuICAgICAgLi4uKHNlYXJjaCAmJiAhZGF0YT8uc2VhcmNoTm90ZSA/IHsgc2VhcmNoIH0gOiB7fSksXG4gICAgICBoaWRkZW5Db2x1bW5zLFxuICAgICAgLi4uKHBhdGgubGVuZ3RoID8geyBjcnVtYnM6IGRyaWxsQ3J1bWJMYWJlbHMocGF0aCwgc25hcHNob3QuZm9ybWF0Q29udGV4dCkgfSA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLy8gRWFjaCBncm91cCdzIHZhbHVlIGFzIHRoZSBiYXIgaG9sZHMgaXQgbm93LCB3aXRoIHRoZSByZWxhdGl2ZSByYW5nZSBhXG4gIC8vIGRhdGUgdmFsdWUgc3RpbGwgaXMuIFRoZSBwaWNrcyBhcmUgY29waWVkLCBzbyB0aGUgc25hcHNob3Qga2VlcHMgdGhlbVxuICAvLyB3aGF0ZXZlciB0aGUgYmFyIGRvZXMgbmV4dC5cbiAgcHJpdmF0ZSBfZ3JvdXBWYWx1ZXMocmVwb3J0OiBSZXBvcnQpOiBQaWNrPFJlcG9ydEV4cG9ydFNuYXBzaG90LCAndmFsdWVzJyB8ICdwcmVzZXRzJz4ge1xuICAgIGNvbnN0IHZhbHVlczogUmVjb3JkPG51bWJlciwgRmlsdGVyR3JvdXBWYWx1ZT4gPSB7fTtcbiAgICBjb25zdCBwcmVzZXRzOiBSZWNvcmQ8bnVtYmVyLCBSZXBvcnRSZWxhdGl2ZVJhbmdlPiA9IHt9O1xuXG4gICAgKHJlcG9ydC5maWx0ZXJHcm91cHMgPz8gW10pLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2ZpbHRlclN0YXRlLnZhbHVlKGdyb3VwLmlkKTtcbiAgICAgIGNvbnN0IHByZXNldCA9IHRoaXMuX2ZpbHRlclN0YXRlLmxpdmVQcmVzZXQoZ3JvdXAuaWQpO1xuXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdmFsdWVzW2dyb3VwLmlkXSA9IHtcbiAgICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgICAuLi4odmFsdWUudmFsdWVzID8geyB2YWx1ZXM6IFsuLi52YWx1ZS52YWx1ZXNdIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHZhbHVlLmV4Y2x1ZGVWYWx1ZXMgPyB7IGV4Y2x1ZGVWYWx1ZXM6IFsuLi52YWx1ZS5leGNsdWRlVmFsdWVzXSB9IDoge30pLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHByZXNldCkge1xuICAgICAgICBwcmVzZXRzW2dyb3VwLmlkXSA9IHByZXNldDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7IHZhbHVlcywgcHJlc2V0cyB9O1xuICB9XG5cbiAgLy8gT25lIGxheWVyJ3MgdmFsdWVzLCByZWFkIGluIG9uZSByZXF1ZXN0LCBhcyBpdHMgdGV4dCdzIHRva2VucyBwcmludCB0aGVtLlxuICAvLyBUaGUgcmVxdWVzdCBjYXJyaWVzIHRoZSBmaWx0ZXIgdmFsdWVzIG9mIGV2ZXJ5IHZhbHVlIG9uIHRoZSBsYXllciwgYXMgdGhlXG4gIC8vIGNhbnZhcydzIGRvZXMsIHJlYWQgZnJvbSB0aGUgZXhwb3J0J3Mgc25hcHNob3QgbGlrZSBldmVyeSB0aWxlJ3MsIGFuZFxuICAvLyB3aGlsZSB0aGUgZ3JvdXBzIG1hdGNoICdhbnknIHRoZSBncm91cHMgdGhhdCBjb21iaW5lXG4gIC8vICh2YWx1ZXNNYXRjaEFueUdyb3VwSWRzKTogdGhlIHNlcnZlciBkZWNpZGVzIHdoaWNoIHZhbHVlcyBpdCByZWFkcyAodGhlXG4gIC8vIHNob3duIG9uZXMgYW5kIHRoZSBvcGVyYW5kcyBvZiB0aGUgZm9ybXVsYXMgYW1vbmcgdGhlbSkgYW5kIGFwcGxpZXMgdG9cbiAgLy8gZWFjaCBvbmx5IHRoZSBlbnRyaWVzIG5hbWluZyBpdHMgb3duIGZpbHRlcnMuIGhhbmRsZXJzOiBmYWxzZSBrZWVwcyB0aGVcbiAgLy8gZXJyb3IgZGlhbG9nIG91dCBvZiBpdCwgYXMgZm9yIGEgdGlsZS4gQSBmYWlsZWQgcmVxdWVzdCByZWFkcyBhcyBubyByb3dzLFxuICAvLyBzbyBldmVyeSB2YWx1ZSB0aGUgdGV4dCBzaG93cyBmYWlsZWQgYW5kIHRoZSBmYWlsdXJlIGdhdGUgbmFtZXMgaXRzIHBhZ2U7XG4gIC8vIG9uZSB2YWx1ZSdzIG93biBlcnJvciBmYWlscyBvbmx5IHRoYXQgdmFsdWUsIGFuZCBhIGZhaWxlZCBvcGVyYW5kIGZhaWxzXG4gIC8vIHRoZSBmb3JtdWxhIHRoYXQgcmVhZHMgaXQuXG4gIHByaXZhdGUgX3BhZ2VWYWx1ZXMoXG4gICAgcmVwb3J0OiBSZXBvcnQsXG4gICAgcGFnZUlkOiBudW1iZXIsXG4gICAgdmFsdWVzOiBSZXBvcnRDb21wb25lbnRbXSxcbiAgICBzaG93bjogUmVwb3J0Q29tcG9uZW50W10sXG4gICAgc25hcHNob3Q6IFJlcG9ydEV4cG9ydFNuYXBzaG90LFxuICApOiBPYnNlcnZhYmxlPENvbGxlY3RlZFZhbHVlcz4ge1xuICAgIGNvbnN0IGZvcm1hdENvbnRleHQgPSBzbmFwc2hvdC5mb3JtYXRDb250ZXh0O1xuICAgIGNvbnN0IGZpbHRlcnMgPSB2YWx1ZXMuZmxhdE1hcCgoY29tcG9uZW50KSA9PiBzbmFwc2hvdC52YWx1ZUZpbHRlcnNbY29tcG9uZW50LmlkXSA/PyBbXSk7XG4gICAgY29uc3QgbWF0Y2hBbnlHcm91cElkcyA9IHZhbHVlc01hdGNoQW55R3JvdXBJZHMocmVwb3J0LCBwYWdlSWQsIHNuYXBzaG90LnN0YXRlKTtcblxuICAgIHJldHVybiB0aGlzLl9yZXBvcnREYXRhLnBhZ2VWYWx1ZXMocmVwb3J0LmlkLCBwYWdlSWQsIGZpbHRlcnMsIHRydWUsIHsgaGFuZGxlcnM6IGZhbHNlIH0sIG1hdGNoQW55R3JvdXBJZHMpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyb3dzKSA9PiBuZXcgTWFwKChyb3dzID8/IFtdKS5tYXAoKHJvdykgPT4gW3Jvdy5pZCwgcm93XSkpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihuZXcgTWFwPG51bWJlciwgUmVwb3J0UGFnZVZhbHVlPigpKSksXG4gICAgICAgIG1hcCgocm93cykgPT4gKHtcbiAgICAgICAgICB2YWx1ZXM6IHRleHRWYWx1ZXModmFsdWVzLCB7IHJvd3MgfSwgZm9ybWF0Q29udGV4dCksXG4gICAgICAgICAgZmFpbGVkVmFsdWVzOiBmYWlsZWRWYWx1ZUtleXMoc2hvd24sIHJvd3MpLFxuICAgICAgICB9KSksXG4gICAgICApO1xuICB9XG5cbiAgLy8gVGhlIHJlc3VsdHMgZmlsZWQgYnkgcGFnZSBpbiBqb2Igb3JkZXIuIEEgbGF5ZXIgd2l0aCBubyB2YWx1ZXMgam9iIChpdHNcbiAgLy8gdGV4dCBzaG93cyBubyB2YWx1ZSkgaGFzIG5vIG51bWJlcnMgdG8gd2FpdCBmb3I6IGl0cyB2YWx1ZXMgcmVhZCBhcyB0aGVcbiAgLy8gZW0gZGFzaCwgYW5kIG5vbmUgb2YgdGhlbSBmYWlsZWQuXG4gIHByaXZhdGUgX2ZpbGUoXG4gICAgcmVwb3J0OiBSZXBvcnQsXG4gICAgcmVzdWx0czogeyByZXN1bHQ6IENvbGxlY3RSZXN1bHQ7IGluZGV4OiBudW1iZXIgfVtdLFxuICAgIGZvcm1hdENvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICk6IFBpY2s8Q29sbGVjdGVkUmVwb3J0LCAncGFnZXMnIHwgJ21hc3RlclZhbHVlcycgfCAnbWFzdGVyRmFpbGVkVmFsdWVzJz4ge1xuICAgIGNvbnN0IHVucmVhZCA9ICh2YWx1ZXM6IFJlcG9ydENvbXBvbmVudFtdIHwgdW5kZWZpbmVkKTogQ29sbGVjdGVkVmFsdWVzID0+ICh7XG4gICAgICB2YWx1ZXM6IHRleHRWYWx1ZXModmFsdWVzID8/IFtdLCB7IHJvd3M6IG5ldyBNYXAoKSB9LCBmb3JtYXRDb250ZXh0KSxcbiAgICAgIGZhaWxlZFZhbHVlczogW10sXG4gICAgfSk7XG4gICAgY29uc3QgcGFnZXM6IENvbGxlY3RlZFBhZ2VbXSA9IHJlcG9ydC5wYWdlcy5tYXAoKHBhZ2UpID0+ICh7IHBhZ2UsIGNvbXBvbmVudHM6IFtdLCAuLi51bnJlYWQocGFnZS52YWx1ZXMpIH0pKTtcbiAgICBsZXQgbWFzdGVyID0gdW5yZWFkKHJlcG9ydC5tYXN0ZXI/LnZhbHVlcyk7XG5cbiAgICBbLi4ucmVzdWx0c11cbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleClcbiAgICAgIC5mb3JFYWNoKCh7IHJlc3VsdCB9KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQua2luZCA9PT0gJ2NvbXBvbmVudCcpIHtcbiAgICAgICAgICBwYWdlc1tyZXN1bHQucGFnZUluZGV4XS5jb21wb25lbnRzLnB1c2gocmVzdWx0Lml0ZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5wYWdlSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICBtYXN0ZXIgPSByZXN1bHQuY29sbGVjdGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24ocGFnZXNbcmVzdWx0LnBhZ2VJbmRleF0sIHJlc3VsdC5jb2xsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHJldHVybiB7IHBhZ2VzLCBtYXN0ZXJWYWx1ZXM6IG1hc3Rlci52YWx1ZXMsIG1hc3RlckZhaWxlZFZhbHVlczogbWFzdGVyLmZhaWxlZFZhbHVlcyB9O1xuICB9XG5cbiAgLy8gVGhlIHpvbmUgdGhlIHNlcnZlciByZXNvbHZlZCwgYXMgaXRzIElBTkEgaWQsIGFuZCB0aGUgY3VycmVuY3kgaXQgc2F5c1xuICAvLyB0aGUgcmVwb3J0J3MgbW9uZXkgaXMgaW4gKGEgbGFiZWw6IG5vdGhpbmcgaXMgY29udmVydGVkKS4gT25seSB0aGVcbiAgLy8gc2VydmVyJ3MgdmFsdWVzIGFyZSBwcmludGVkOiB0aGUgYnJvd3NlcidzIHpvbmUgKHJlc29sdmVSZXBvcnRUaW1lem9uZSdzXG4gIC8vIGZhbGxiYWNrIGZvciBhbiBvbGRlciBzZXJ2ZXIpIGlzIG5vdCB3aGF0IHRoZSBudW1iZXJzIHdlcmUgbWVhc3VyZWQgaW4sXG4gIC8vIGFuZCBhbiBvbGRlciBzZXJ2ZXIgbmFtZXMgbm8gY3VycmVuY3kgYXQgYWxsLlxuICBwcml2YXRlIF9jb250ZXh0TGluZXMocmVwb3J0OiBSZXBvcnQpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLihyZXBvcnQuZWZmZWN0aXZlVGltZXpvbmUgPyBbYFRpbWV6b25lOiAke3JlcG9ydC5lZmZlY3RpdmVUaW1lem9uZX1gXSA6IFtdKSxcbiAgICAgIC4uLihyZXBvcnQuZWZmZWN0aXZlQ3VycmVuY3kgPyBbYEN1cnJlbmN5OiAke3JlcG9ydC5lZmZlY3RpdmVDdXJyZW5jeX1gXSA6IFtdKSxcbiAgICBdO1xuICB9XG5cbiAgLy8gRXZlcnkgZmlsdGVyIGdyb3VwIG9mIHRoZSByZXBvcnQgYXMgaXRzIHt7ZmlsdGVyLjxpZD59fSB0b2tlbiBwcmludHMgaXRcbiAgLy8gaW4gdGhlIGZpbGUsIGF0IHRoZSBzbmFwc2hvdCdzIHZhbHVlcyBhbmQgaW4gaXRzIGZvcm1hdCwgYXMgdGhlIGNhbnZhc1xuICAvLyB3b3JkcyBpdC4gQSBzZWxlY3QncyBwaWNrcyBhcmUgbmFtZWQgZmlyc3QsIHNvIG5vIHRva2VuIGluIHRoZSBmaWxlXG4gIC8vIHJlYWRzIGFzIGxvYWRpbmcuIEVhY2ggcGFnZSBhbmQgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHJlYWQgdGhlaXIgb3duXG4gIC8vIGdyb3VwcyBvZiB0aGVzZSAobGF5ZXJGaWx0ZXJGaWVsZHMpLlxuICBwcml2YXRlIF9maWx0ZXJGaWVsZHMoXG4gICAgcmVwb3J0OiBSZXBvcnQsXG4gICAgc25hcHNob3Q6IFJlcG9ydEV4cG9ydFNuYXBzaG90LFxuICAgIG5hbWVzOiBSZXBvcnRFeHBvcnRMaW5lc0lucHV0WyduYW1lcyddLFxuICApOiBPYnNlcnZhYmxlPFJlY29yZDxudW1iZXIsIFRleHRGaWx0ZXJGaWVsZD4+IHtcbiAgICBjb25zdCBncm91cHMgPSByZXBvcnQuZmlsdGVyR3JvdXBzID8/IFtdO1xuICAgIGNvbnN0IHBpY2tlZCA9IGdyb3Vwc1xuICAgICAgLm1hcCgoZ3JvdXApID0+ICh7IGdyb3VwLCB2YWx1ZXM6IHZhbHVlUGlja3Moc25hcHNob3QudmFsdWVzW2dyb3VwLmlkXSkgfSkpXG4gICAgICAuZmlsdGVyKCh7IGdyb3VwLCB2YWx1ZXMgfSkgPT4gZ3JvdXAudHlwZSA9PT0gJ3NlbGVjdCcgJiYgdmFsdWVzLmxlbmd0aCk7XG4gICAgY29uc3QgbmFtZXMkID0gcGlja2VkLmxlbmd0aFxuICAgICAgPyBmb3JrSm9pbihwaWNrZWQubWFwKCh7IGdyb3VwLCB2YWx1ZXMgfSkgPT4gbmFtZXMoZ3JvdXAsIHZhbHVlcykpKVxuICAgICAgOiBvZihbXSBhcyBzdHJpbmdbXVtdKTtcblxuICAgIHJldHVybiBuYW1lcyQucGlwZShcbiAgICAgIG1hcCgobmFtZWQpID0+IHtcbiAgICAgICAgY29uc3QgYnlHcm91cCA9IG5ldyBNYXAocGlja2VkLm1hcCgoeyBncm91cCB9LCBpbmRleCkgPT4gW2dyb3VwLmlkLCBuYW1lZFtpbmRleF1dKSk7XG5cbiAgICAgICAgcmV0dXJuIHRleHRGaWx0ZXJGaWVsZHMoXG4gICAgICAgICAgZ3JvdXBzLFxuICAgICAgICAgIChncm91cElkKSA9PiBzbmFwc2hvdC52YWx1ZXNbZ3JvdXBJZF0sXG4gICAgICAgICAgc25hcHNob3QuZm9ybWF0Q29udGV4dC5sb2NhbGUsXG4gICAgICAgICAgKGdyb3VwKSA9PiBieUdyb3VwLmdldChncm91cC5pZCksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLy8gTmFtZXMgYSBzZWxlY3QgZ3JvdXAncyBwaWNrcyAoa2VwdCBvciBsZWZ0IG91dCkgZm9yIG9uZSBleHBvcnQsIHRoZWlyXG4gIC8vIHN0b3JlZCBpZHMgcmVzb2x2ZWQgdG8gdGhlIHNhbWUgbmFtZXMgdGhlIG9uLXNjcmVlbiBjaGlwcyBzaG93IOKAlCBhIGNvdmVyXG4gIC8vIHJlYWRpbmcgXCJPcmdhbml6YXRpb246IDg3NzQsIDg3NzdcIiB0ZWxscyB0aGUgcmVhZGVyIG5vdGhpbmcgYWJvdXQgd2hhdFxuICAvLyB0aGUgcmVwb3J0IGNvdmVycy4gRWFjaCBncm91cCdzIGZ1bGwgbGlzdCBpcyByZWFkIG9uY2UgZm9yIHRoZSBleHBvcnQsXG4gIC8vIHdoYXRldmVyIG5hbWVzIGl0cyBwaWNrczogaXRzIGZpbHRlciBsaW5lLCBpdHMgdG9rZW4sIGEgdGl0bGUuXG4gIC8vXG4gIC8vIFVzZXMgdGhlIHJlcG9ydCBiYXIncyBvd24gbmFtZXMgYW5kIHJlc29sdmVyIHNvIHRoZSB0d28gY2FuJ3QgZHJpZnQ6IGFcbiAgLy8gbmFtZSB0aGUgYmFyJ3MgbGlzdHMgdGF1Z2h0IChSZXBvcnRGaWx0ZXJPcHRpb25zU2VydmljZS5sYWJlbCkgY29tZXMgZmlyc3QsXG4gIC8vIHNvIGEgcGljayBhIGN1dCBvciBuYXJyb3dlZCBsaXN0IGxlYXZlcyBvdXQgcmVhZHMgYXMgaXRzIGNoaXAgZG9lcywgYW5kXG4gIC8vIHRoZSBmdWxsIGxpc3QgbmFtZXMgdGhlIHJlc3QuIEEgdmFsdWUgd2hvc2UgZW50aXR5IHdhcyBkZWxldGVkIGtlZXBzXG4gIC8vIHNob3dpbmcgaXRzIHJhdyBpZCByYXRoZXIgdGhhbiBkcm9wcGluZyBvZmYgdGhlIGNvdmVyIGFuZCBzaWxlbnRseVxuICAvLyB1bmRlcnN0YXRpbmcgdGhlIGZpbHRlci4gQSBmYWlsZWQgb3B0aW9uIGZldGNoIGRlZ3JhZGVzIHRoZSB3aG9sZSBsaW5lIHRvXG4gIC8vIGlkcyBmb3IgdGhlIHNhbWUgcmVhc29uOiBhbiBleHBvcnQgbXVzdCBuZXZlciBmYWlsIG9uIGEgY29zbWV0aWMgbG9va3VwLlxuICBwcml2YXRlIF9waWNrTmFtZXIocmVwb3J0OiBSZXBvcnQpOiBSZXBvcnRFeHBvcnRMaW5lc0lucHV0WyduYW1lcyddIHtcbiAgICBjb25zdCBvcHRpb25zID0gZ3JvdXBPcHRpb25zUmVhZGVyKHRoaXMuX3JlcG9ydERhdGEpO1xuXG4gICAgcmV0dXJuIChncm91cCwgdmFsdWVzKSA9PiByZXNvbHZlT3B0aW9uVmFsdWVzKFxuICAgICAgb3B0aW9ucyhncm91cCwgcmVwb3J0LmlkKSxcbiAgICAgIHZhbHVlcyxcbiAgICAgICh2YWx1ZSkgPT4gdGhpcy5fZmlsdGVyT3B0aW9ucy5sYWJlbChncm91cC5pZCwgdmFsdWUpLFxuICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc29sdmVkKSA9PiByZXNvbHZlZC5tYXAoKGl0ZW0pID0+IGl0ZW0ubmFtZSkpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKHZhbHVlcy5tYXAoKGl0ZW0pID0+IFN0cmluZyhpdGVtKSkpKSxcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
689
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4cG9ydC1jb2xsZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LWV4cG9ydC1jb2xsZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQTRCLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNFLE9BQU8sRUFBYyxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUNMLFFBQVEsRUFDUixlQUFlLEVBQ2YsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLHFCQUFxQixHQUN0QixNQUFNLFdBQVcsQ0FBQztBQXNCbkIsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLHFCQUFxQixHQUN0QixNQUFNLGdCQUFn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QUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDcEQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3pELENBQUM7SUFDTixDQUFDO3dHQTdjVSw0QkFBNEI7NEdBQTVCLDRCQUE0Qjs7NEZBQTVCLDRCQUE0QjtrQkFEeEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBHcmlkRm9ybWF0dGVyLCBHcmlkVGFibGUsIHJlYWRHcmlkVGFibGUgfSBmcm9tICdAZmlyZXN0aXRjaC9ncmlkJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZm9ya0pvaW4sIGZyb20sIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1lcmdlTWFwLCBzd2l0Y2hNYXAsIHRvQXJyYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IHJlcG9ydEdyaWRGb3JtYXR0ZXIgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1ncmlkL3JlcG9ydC1ncmlkLWZvcm1hdHRlcic7XG5pbXBvcnQgeyBSZXBvcnRHcmlkU291cmNlIH0gZnJvbSAnLi4vZGF0YS9yZXBvcnQtZ3JpZC1zb3VyY2UnO1xuaW1wb3J0IHsgUmVwb3J0RGF0YSB9IGZyb20gJy4uL2RhdGEvcmVwb3J0LmRhdGEnO1xuaW1wb3J0IHsgY3J1bWJlZFRpdGxlLCBkcmlsbENydW1iTGFiZWxzIH0gZnJvbSAnLi4vZHJpbGwtY3J1bWJzJztcbmltcG9ydCB7IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtbGlzdC1jb2x1bW4tZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgbGF5ZXJGaWx0ZXJGaWVsZHMsIHRleHRGaWx0ZXJGaWVsZHMgfSBmcm9tICcuLi9maWx0ZXItdGV4dCc7XG5pbXBvcnQge1xuICBEQVlfTE9ORyxcbiAgZm9ybWF0TG9jYWxEYXRlLFxuICBmb3JtYXROdW1iZXIsXG4gIGZvcm1hdE91dHB1dFZhbHVlLFxuICBmb3JtYXRSZXBvcnREYXRlLFxuICBoYXNOdW1iZXJGb3JtYXQsXG4gIHJlc29sdmVSZXBvcnRUaW1lem9uZSxcbn0gZnJvbSAnLi4vZm9ybWF0JztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydExpbmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1leHBvcnQtbGluZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0TGluZXNJbnB1dCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWV4cG9ydC1saW5lcy1pbnB1dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0U25hcHNob3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1leHBvcnQtc25hcHNob3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydFN0YXRlU25hcHNob3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1zdGF0ZS1zbmFwc2hvdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50RGF0YSxcbiAgQ29tcG9uZW50RGF0YVN0YXRlLFxuICBGaWx0ZXJHcm91cFZhbHVlLFxuICBMaXN0Q29sdW1uLFxuICBMaXN0Q29uZmlnLFxuICBSZXBvcnQsXG4gIFJlcG9ydENvbXBvbmVudCxcbiAgUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgUmVwb3J0TG9jYWxlVGFnLFxuICBSZXBvcnRNYXN0ZXIsXG4gIFJlcG9ydFBhZ2UsXG4gIFJlcG9ydFBhZ2VWYWx1ZSxcbiAgUmVwb3J0UmVsYXRpdmVSYW5nZSxcbiAgUmVzb2x2ZWRGaWx0ZXJWYWx1ZSxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEtwaUNhcmRWaWV3IH0gZnJvbSAnLi4va3BpLWNhcmQnO1xuaW1wb3J0IHtcbiAgTElTVF9UT1RBTF9MQUJFTCxcbiAgTGlzdE91dHB1dENvbHVtbixcbiAgbGlzdEhpZGRlbkNvbHVtbnMsXG4gIGxpc3RPdXRwdXRDb2x1bW5zLFxuICBsaXN0VG90YWxzTGFiZWxDb2x1bW4sXG59IGZyb20gJy4uL2xpc3QtY29uZmlnJztcbmltcG9ydCB7IHBpdm90Q29sdW1uU3BlY3MgfSBmcm9tICcuLi9vcHRpb24tYnVpbGRlcic7XG5pbXBvcnQgeyBjb21wb25lbnROb3RlTGluZXMsIGNvbXBvbmVudFdpbmRvd3NMaW5lIH0gZnJvbSAnLi4vb3V0cHV0LW5vdGVzJztcbmltcG9ydCB7IGdyb3VwT3B0aW9uc1JlYWRlciwgcmVzb2x2ZU9wdGlvblZhbHVlcyB9IGZyb20gJy4uL3JlcG9ydC1maWx0ZXItaXRlbXMnO1xuaW1wb3J0IHsgYXV0aG9yZWRHcmlkTGF5b3V0IH0gZnJvbSAnLi4vcmVwb3J0LWdyaWQtbGF5b3V0JztcbmltcG9ydCB7IGlzVGlsZSB9IGZyb20gJy4uL3JlcG9ydC10aWxlJztcbmltcG9ydCB7IG9mZmVyZWRWaWV3ZXJGZWF0dXJlcyB9IGZyb20gJy4uL3JlcG9ydC12aWV3ZXItZmVhdHVyZXMnO1xuaW1wb3J0IHsgUmVwb3J0RmlsdGVyT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLW9wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dEZpbHRlckZpZWxkLCBUZXh0VG9rZW5Db250ZXh0LCBUZXh0VmFsdWUsIGZpbGxUaXRsZVRva2VucywgdGV4dFBsYWluIH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyB0aWxlRGF0YVN0YXRlLCB2YWx1ZXNNYXRjaEFueUdyb3VwSWRzIH0gZnJvbSAnLi4vdGlsZS1kYXRhLXN0YXRlJztcbmltcG9ydCB7IHZhbHVlTGFiZWwgfSBmcm9tICcuLi92YWx1ZS1sYWJlbHMnO1xuaW1wb3J0IHtcbiAgZmFpbGVkVmFsdWVLZXlzLCByZXBvcnRDb21wb25lbnRzLCBzaG93blZhbHVlcywgdGV4dFZhbHVlcywgdmFsdWVLZXlzLFxufSBmcm9tICcuLi92YWx1ZXMnO1xuXG5pbXBvcnQgeyBleHBvcnRMaW5lcywgbWF0Y2hMaW5lVGV4dCwgdmFsdWVQaWNrcyB9IGZyb20gJy4vcmVwb3J0LWZpbHRlci1saW5lcyc7XG5pbXBvcnQgeyBHUklEX0VYUE9SVF9DT0xVTU5TLCBncmlkRXhwb3J0Tm90ZXMgfSBmcm9tICcuL3JlcG9ydC1ncmlkLWV4cG9ydCc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0ZWRDb21wb25lbnQge1xuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudDtcbiAgLy8gbnVsbCA9IGl0cyBxdWVyeSBmYWlsZWQ7IGV4cG9ydHMgc2hvdyBhIG5vdGUuIEFsd2F5cyBudWxsIGZvciBhIHRleHRcbiAgLy8gYmxvY2ssIHdoaWNoIGhhcyBubyBxdWVyeSDigJQgc2VlIGlzRmFpbGVkKCkuXG4gIGRhdGE6IENvbXBvbmVudERhdGEgfCBudWxsO1xuICAvLyBUaGUgdGV4dCBhIGxpc3Qgd2FzIHNlYXJjaGVkIGJ5IHdoZW4gaXQgd2FzIGZldGNoZWQ7IGFic2VudCB3aGVuIGl0c1xuICAvLyBzZWFyY2ggYm94IHdhcyBlbXB0eSwgYW5kIGZvciBldmVyeSBvdGhlciBjb21wb25lbnQuXG4gIHNlYXJjaD86IHN0cmluZztcbiAgLy8gVGhlIGNvbmZpZyBjb2x1bW5zIGEgdmlld2VyIGhpZCBvbiBhIHBsYWluIGxpc3QsIHdoaWNoIGl0cyB0YWJsZSBsZWF2ZXNcbiAgLy8gb3V0IChsaXN0Q29sdW1ucyk7IGVtcHR5IGZvciBldmVyeSBvdGhlciBjb21wb25lbnQuXG4gIGhpZGRlbkNvbHVtbnM6IHN0cmluZ1tdO1xuICAvLyBUaGUgYnJlYWRjcnVtYiBvZiB0aGUgZHJpbGwgcGF0aCBhIGNoYXJ0IHdhcyByZWFkIGF0ICh0aGUgcGF0aCBpdHNcbiAgLy8gYW5zd2VyIGFwcGxpZWQpLCBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlOyBhYnNlbnQgYXQgdGhlIGNoYXJ0J3MgdG9wLlxuICBjcnVtYnM/OiBzdHJpbmdbXTtcbiAgLy8gQSB0YWJsZSB0aWxlIGFzIHRoZSBzY3JlZW4gZHJhd3MgaXQgKHJlYWRHcmlkVGFibGUoKSksIHVwIHRvIHRoZVxuICAvLyByZW5kZXJlcidzIHJvdyBjYXAgYW5kIEdSSURfRVhQT1JUX0NPTFVNTlMgY29sdW1uczsgaXRzIGRhdGEgaXMgdGhlblxuICAvLyB0aGUgcmVhZCdzIHJlcG9ydCBsaW5lLCB3aXRoIG5vIHJvd3MuIEFic2VudCBmb3IgZXZlcnkgb3RoZXIgY29tcG9uZW50LlxuICB0YWJsZT86IEdyaWRUYWJsZTtcbiAgLy8gVGhlIGxpbmVzIGEgdGFibGUgYWRkcyB1bmRlciBpdHMgYm94IChncmlkRXhwb3J0Tm90ZXMoKSkuXG4gIHRhYmxlTm90ZXM/OiBzdHJpbmdbXTtcbiAgLy8gQSB0YWJsZSB3aG9zZSBjb2x1bW4gZmlsdGVycyBuYXJyb3dlZCBpdHMgcm93cywgd2hpY2ggaXRzIHRpdGxlIHNheXMuXG4gIGZpbHRlcmVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0ZWRQYWdlIHtcbiAgcGFnZTogUmVwb3J0UGFnZTtcbiAgY29tcG9uZW50czogQ29sbGVjdGVkQ29tcG9uZW50W107XG4gIC8vIFdoYXQgdGhlIHBhZ2UncyB0ZXh0IGJsb2NrcyBmaWxsIHRoZWlyIHt7dmFsdWUuPGtleT59fSB0b2tlbnMgd2l0aCwgYnkga2V5XG4gIC8vICh0ZXh0VmFsdWVzKSwgYW5kIHRoZSBrZXlzIG9mIHRoZSB2YWx1ZXMgaXRzIHRleHQgc2hvd3Mgd2hvc2UgbnVtYmVycyBkaWRcbiAgLy8gbm90IGNvbWUgYmFjazogdGhlIHJlcXVlc3QgZmFpbGVkLCBvciB0aGUgdmFsdWUncyBvd24gcXVlcnkgZGlkLlxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIFRleHRWYWx1ZT47XG4gIGZhaWxlZFZhbHVlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGVkUmVwb3J0IHtcbiAgcmVwb3J0OiBSZXBvcnQ7XG4gIHBhZ2VzOiBDb2xsZWN0ZWRQYWdlW107XG4gIC8vIFRoZSBoZWFkZXIgYW5kIGZvb3RlcidzIHZhbHVlcywgYXMgYSBwYWdlJ3M6IHJlYWQgb25jZSBmb3IgdGhlIHdob2xlXG4gIC8vIGZpbGUsIHNpbmNlIGV2ZXJ5IHBhZ2UgdGhhdCBzaG93cyB0aGUgbWFzdGVyIHNob3dzIHRoZSBzYW1lIG51bWJlcnMuXG4gIG1hc3RlclZhbHVlczogUmVjb3JkPHN0cmluZywgVGV4dFZhbHVlPjtcbiAgbWFzdGVyRmFpbGVkVmFsdWVzOiBzdHJpbmdbXTtcbiAgLy8gVGhlIGZpbHRlciBsaW5lcyBvZiB0aGUgdGl0bGUgc2xpZGUvcGFnZSwgaW4gb3JkZXI6IHRoZVxuICAvLyBleHBvcnQncyBmaWx0ZXIgbGluZXMgKGNvdmVyRmlsdGVyTGluZXMpLCB0aGVuIHRoZSBtYXRjaCB3aGlsZSBpdCBpc1xuICAvLyAnYW55Jy5cbiAgZmlsdGVyU3VtbWFyeTogc3RyaW5nW107XG4gIC8vIFdoYXQgZWFjaCB7e2ZpbHRlci48aWQ+fX0gdG9rZW4gcHJpbnRzLCBieSBmaWx0ZXIgZ3JvdXAgaWQ6IHRoZSBmaWx0ZXJcbiAgLy8gYmFyJ3MgdmFsdWVzIGFzIHRoZSBzY3JlZW4gd29yZHMgdGhlbSwgcmVhZCBvbmNlIHNvIGV2ZXJ5IHBhZ2Ugb2YgdGhlXG4gIC8vIGZpbGUgYWdyZWVzLiBFdmVyeSBncm91cCdzOiBhIHBhZ2UgcmVhZHMgaXRzIG93biAobGF5ZXJGaWx0ZXJGaWVsZHMpLlxuICBmaWx0ZXJGaWVsZHM6IFJlY29yZDxudW1iZXIsIFRleHRGaWx0ZXJGaWVsZD47XG4gIC8vIFdoYXQgdGhlIG51bWJlcnMgYXJlIG1lYXN1cmVkIGluLCBmb3IgdGhlIHRpdGxlIHNsaWRlL3BhZ2U6IHRoZSB6b25lIGFuZFxuICAvLyB0aGUgY3VycmVuY3kgdGhlIHNlcnZlciByZXNvbHZlZCBmb3IgdGhlIHJlcG9ydC4gRWFjaCBpcyBsZWZ0IG91dCB3aGVuIHRoZVxuICAvLyBzZXJ2ZXIgZG9lcyBub3Qgc2VuZCBpdCwgcmF0aGVyIHRoYW4gYSBndWVzcyB0aGF0IHdvdWxkIGJlIHdyb25nIHdoZW5ldmVyXG4gIC8vIHRoZSBkZWZhdWx0IGFwcGxpZXMuXG4gIGNvbnRleHRMaW5lczogc3RyaW5nW107XG4gIC8vIEhvdyB0aGUgb3BlbiByZXBvcnQgd3JpdGVzIGl0cyBudW1iZXJzIGFuZCBkYXRlcyAoaXRzIGxvY2FsZSwgY3VycmVuY3lcbiAgLy8gYW5kIHBlcmNlbnQgZm9ybSksIHJlYWQgb25jZSBzbyBldmVyeSBwYWdlIG9mIHRoZSBmaWxlIGFncmVlcy5cbiAgZm9ybWF0Q29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dDtcbn1cblxuLy8gSG93IGFuIGV4cG9ydCB3b3JkcyB0aGUgc2NyZWVuIChleHBvcnRXb3JkaW5nKTogdGhlIGZpbHRlciBsaW5lcyAodGhlXG4vLyBjb3ZlcidzLCBhbmQgdGhlIHppcCdzIG5vdGVzKSwgd2hhdCBlYWNoIHt7ZmlsdGVyLjxpZD59fSB0b2tlbiBwcmludHMsIGJ5XG4vLyBmaWx0ZXIgZ3JvdXAgaWQsIGFuZCBlYWNoIHRpbGUncyB0aXRsZSBhcyB0aGUgY2FudmFzIGhlYWRlciByZWFkcyBpdCwgYnlcbi8vIGNvbXBvbmVudCBpZCwgd2hpY2ggdGhlIHppcCBuYW1lcyB0aGUgdGlsZSdzIGZpbGUgYWZ0ZXIuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEV4cG9ydFdvcmRpbmcge1xuICBsaW5lczogUmVwb3J0RXhwb3J0TGluZVtdO1xuICBmaWx0ZXJGaWVsZHM6IFJlY29yZDxudW1iZXIsIFRleHRGaWx0ZXJGaWVsZD47XG4gIHRpdGxlczogUmVjb3JkPG51bWJlciwgc3RyaW5nPjtcbn1cblxuLy8gQSBjb21wb25lbnQgYSBidWlsZCBjb3VsZCBub3QgZHJhdzogdGhlIHBhZ2UgdGhlIGV4cG9ydCdzIGdhdGUgbmFtZXMgaXRcbi8vIHVuZGVyIGFuZCBob3cgaXQgcmVhZHMgdGhlcmUsIGl0cyB0aXRsZSBvciB0aGUgc3RhcnQgb2YgYSB0ZXh0IGJsb2NrJ3Ncbi8vIHdvcmRzLlxuZXhwb3J0IGludGVyZmFjZSBVbmRyYXduQ29tcG9uZW50IHtcbiAgY29tcG9uZW50SWQ6IG51bWJlcjtcbiAgcGFnZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8vIEEgZmlsZSBidWlsdCBhbmQgbm90IHlldCBzYXZlZC4gV2hldGhlciBldmVyeSBjb21wb25lbnQgY291bGQgYmUgZHJhd24gaXNcbi8vIGtub3duIG9ubHkgb25jZSB0aGUgZmlsZSBpcyBidWlsdCwgc28gdGhlIGV4cG9ydCBhc2tzIGFib3V0IGl0IGJldHdlZW4gdGhlXG4vLyBidWlsZCBhbmQgdGhlIHNhdmU6IGB1bmRyYXduYCBsaXN0cyB0aGUgY29tcG9uZW50cyB0aGUgZmlsZSBtYXJrcyBhcyBub3Rcbi8vIGRyYXduIGluIHRoZWlyIHBsYWNlLCBhbmQgYHNhdmVgIHdyaXRlcyB0aGUgZmlsZS5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbHRFeHBvcnQge1xuICB1bmRyYXduOiBVbmRyYXduQ29tcG9uZW50W107XG4gIHNhdmU6ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xufVxuXG4vLyBPbmUgZXhwb3J0ZWQgbGlzdCBjb2x1bW46IHRoZSBjZWxsIGtleSwgaXRzIGhlYWRpbmcgYW5kIGl0cyBmb3JtYXQsIGFuZFxuLy8gd2hldGhlciBpdHMgY2VsbHMgYXJlIGZvcm1hdHRlZCBudW1iZXJzLCB3aGljaCBldmVyeSBleHBvcnQgcmlnaHQtYWxpZ25zXG4vLyAoaGVhZGVyIGluY2x1ZGVkKSBhcyB0aGUgc2NyZWVuIGRvZXMuIEEgY29sdW1uIHRoYXQgaG9sZHMgYSBjb21wYXJlZCxcbi8vIHdpbmRvd2VkLCByYW5rZWQgb3Igc2hhcmVkIG91dHB1dCBjYXJyaWVzIGhvdyBpdCBpcyB3cml0dGVuIChvdXRwdXQpLCBhbmRcbi8vIGhvbGRzIG51bWJlcnMgd2hldGhlciBvciBub3QgaXQgbmFtZXMgYSBmb3JtYXQuXG5leHBvcnQgdHlwZSBFeHBvcnRMaXN0Q29sdW1uID0gTGlzdENvbHVtbiAmIHsgbnVtZXJpYzogYm9vbGVhbjsgb3V0cHV0PzogTGlzdE91dHB1dENvbHVtbiB9O1xuXG4vLyBIb3cgdGFsbCBlYWNoIHBhcnQgb2YgYW4gZXhwb3J0ZWQgS1BJIGNhcmQgaXMsIGluIHRoZSByZW5kZXJlcidzIHVuaXRcbi8vIChwb2ludHMgaW4gdGhlIFBERiwgaW5jaGVzIGluIHRoZSBkZWNrKS4gQSBub3RlIGlzIG9uZSBsaW5lLlxuZXhwb3J0IGludGVyZmFjZSBLcGlFeHBvcnRIZWlnaHRzIHtcbiAgdmFsdWU6IG51bWJlcjtcbiAgbGFiZWw6IG51bWJlcjtcbiAgZGVsdGE6IG51bWJlcjtcbiAgd2luZG93OiBudW1iZXI7XG4gIHRhcmdldDogbnVtYmVyO1xuICBzcGFya2xpbmU6IG51bWJlcjtcbiAgbm90ZTogbnVtYmVyO1xufVxuXG4vLyBUaGUgcGFydHMgb2YgYSBLUEkgY2FyZCBhbiBleHBvcnQgZHJhd3M6IHRoZSB2YWx1ZSBhbmQgaXRzIGxhYmVsIGFsd2F5cyxcbi8vIHRoZSByZXN0IHdoZW4gdGhlIGNhcmQgaGFzIHRoZW0gYW5kIHRoZSB0aWxlIGhhcyByb29tIChrcGlFeHBvcnRQYXJ0cykuXG4vLyBzY2FsZSBzaHJpbmtzIHRoZSByb3dzIGFuZCB0aGVpciB0ZXh0IHdoZW4gdGhlIHBhcnRzIHRoYXQgYWx3YXlzIHN0YXkgc3RpbGxcbi8vIHN0YW5kIHRhbGxlciB0aGFuIHRoZSB0aWxlIChzY2FsZWRLcGlIZWlnaHRzKTogMSB3aGVuIHRoZXkgZml0LlxuZXhwb3J0IGludGVyZmFjZSBLcGlFeHBvcnRQYXJ0cyB7XG4gIGRlbHRhOiBib29sZWFuO1xuICB3aW5kb3c6IGJvb2xlYW47XG4gIHRhcmdldDogYm9vbGVhbjtcbiAgc3BhcmtsaW5lOiBib29sZWFuO1xuICBub3Rlczogc3RyaW5nW107XG4gIHNjYWxlOiBudW1iZXI7XG59XG5cbi8vIEhvdyBmYXIgYSBLUEkgY2FyZCdzIHJvd3Mgc2hyaW5rIHRvIGZpdCBhIHNob3J0IHRpbGUuIEEgdGlsZSBzaG9ydGVyIHN0aWxsXG4vLyBsZXRzIHRoZSBjYXJkIHJ1biBwYXN0IGl0cyBmb290IHJhdGhlciB0aGFuIHByaW50IGl0IHVucmVhZGFibHkgc21hbGwuXG5jb25zdCBLUElfRVhQT1JUX01JTl9TQ0FMRSA9IDAuNTtcblxuLy8gSG93IG1hbnkgdGlsZSBxdWVyaWVzIGFuIGV4cG9ydCBydW5zIGF0IG9uY2UuXG4vL1xuLy8gTm90IGEgcG9saXRlbmVzcyBzZXR0aW5nIOKAlCBpdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgZGVjayBhbmQgYSBicm9rZW5cbi8vIG9uZS4gVGhlc2UgcXVlcmllcyBhcmUgaGVhdnkgYW5kIHJlYWQgdGhlIHNhbWUgdGFibGVzLCBzbyBmaXJpbmcgYWxsIG9mIHRoZW1cbi8vIHRvZ2V0aGVyIHB1dHMgZXZlcnkgb25lIGluIGNvbnRlbnRpb24gZm9yIHRoZSBzYW1lIGRhdGFiYXNlIGF0IHRoZSBzYW1lXG4vLyBtb21lbnQgYW5kIHRoZXkgY3Jvc3MgdGhlIHN0YXRlbWVudCBjZWlsaW5nIGFzIGEgZ3JvdXA6IG1lYXN1cmVkIG9uIHJlcG9ydFxuLy8gMjgsIHRlbiB0aWxlcyB0aGF0IGVhY2ggYW5zd2VyIGluIDktMjRzIHJ1biBvbmUgYWZ0ZXIgYW5vdGhlciBhbGwgZmFpbGVkIGF0XG4vLyB+MzBzIHdoZW4gcmVsZWFzZWQgdG9nZXRoZXIuIENvbmN1cnJlbmN5IGJ1eXMgd2FsbC1jbG9jayBvbmx5IHVwIHRvIHRoZSBwb2ludFxuLy8gd2hlcmUgdGhlIHF1ZXJpZXMgc3RhcnQgdGFraW5nIGl0IGJhY2sgb2ZmIGVhY2ggb3RoZXIsIGFuZCBwYXN0IHRoYXQgaXQgYnV5c1xuLy8gZmFpbHVyZXMuXG5jb25zdCBFWFBPUlRfQ09OQ1VSUkVOQ1kgPSAzO1xuXG4vLyBXaGF0IHRoZSBleHBvcnQgZ2F0ZXMgY2FsbCB0aGUgaGVhZGVyIGFuZCBmb290ZXI6IHdoZW4gYSB2YWx1ZSB0aGV5IHNob3dcbi8vIGNhbWUgYmFjayB3aXRob3V0IGl0cyBudW1iZXIsIGFuZCB3aGVuIG9uZSBvZiB0aGVpciBibG9ja3MgY291bGQgbm90IGJlXG4vLyBkcmF3bi5cbmV4cG9ydCBjb25zdCBIRUFERVJfRk9PVEVSX05BTUUgPSAnSGVhZGVyICYgZm9vdGVyJztcblxuLy8gSG93IG11Y2ggb2YgYSB0ZXh0IGJsb2NrJ3Mgd29yZHMgdGhlIGV4cG9ydCBnYXRlcyBxdW90ZSB0byBuYW1lIHRoZSBibG9jay5cbmNvbnN0IFRFWFRfU05JUFBFVF9MRU5HVEggPSA0MDtcblxuLy8gT25lIHJlcXVlc3QgaW4gYW4gZXhwb3J0J3MgcXVldWU6IGEgdGlsZSdzIGRhdGEsIG9yIHRoZSBudW1iZXJzIG9mIHRoZVxuLy8gdmFsdWVzIG9uZSBsYXllcidzIHRleHQgcmVhZHMsIHJlYWQgdG9nZXRoZXIuIEEgdmFsdWVzIGpvYidzIHBhZ2VJbmRleCBpc1xuLy8gbnVsbCBmb3IgdGhlIGhlYWRlciBhbmQgZm9vdGVyICh0aGUgbWFzdGVyKTsgYHZhbHVlc2AgaXMgZXZlcnkgdmFsdWUgb2YgdGhlXG4vLyBsYXllciwgd2hpY2ggbmFtZXMgaXRzIHRva2VucyBhbmQgd2hvc2UgZmlsdGVyIHZhbHVlcyB0aGUgcmVxdWVzdCBjYXJyaWVzLFxuLy8gYW5kIGBjb21wb25lbnRzYCB0aGUgb25lcyBpdHMgdGV4dCBzaG93cywgd2hvc2UgbnVtYmVycyB0aGUgZmFpbHVyZSBnYXRlXG4vLyByZXF1aXJlcy5cbnR5cGUgQ29sbGVjdEpvYiA9XG4gIHwgeyBraW5kOiAnY29tcG9uZW50JzsgcGFnZUluZGV4OiBudW1iZXI7IGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50IH1cbiAgfCB7XG4gICAga2luZDogJ3ZhbHVlcyc7XG4gICAgcGFnZUluZGV4OiBudW1iZXIgfCBudWxsO1xuICAgIHBhZ2VJZDogbnVtYmVyO1xuICAgIHZhbHVlczogUmVwb3J0Q29tcG9uZW50W107XG4gICAgY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50W107XG4gIH07XG5cbi8vIE9uZSBsYXllcidzIHZhbHVlcyBhcyB0aGUgZmlsZSBwcmludHMgdGhlbS5cbnR5cGUgQ29sbGVjdGVkVmFsdWVzID0gUGljazxDb2xsZWN0ZWRQYWdlLCAndmFsdWVzJyB8ICdmYWlsZWRWYWx1ZXMnPjtcblxuLy8gV2hhdCBhIGpvYiBjYW1lIGJhY2sgd2l0aCwgYW5kIHRoZSBwYWdlIGl0IGlzIGZpbGVkIHVuZGVyLlxudHlwZSBDb2xsZWN0UmVzdWx0ID1cbiAgfCB7IGtpbmQ6ICdjb21wb25lbnQnOyBwYWdlSW5kZXg6IG51bWJlcjsgaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50IH1cbiAgfCB7IGtpbmQ6ICd2YWx1ZXMnOyBwYWdlSW5kZXg6IG51bWJlciB8IG51bGw7IGNvbGxlY3RlZDogQ29sbGVjdGVkVmFsdWVzIH07XG5cbi8vIFdoYXQgYSBjb21wb25lbnQgd2l0aCBub3RoaW5nIHRvIGRyYXcgcHJpbnRzIGluIHRoZSBleHBvcnRlZCBmaWxlLlxuLy9cbi8vIFRoZSB0d28gY2FzZXMgbXVzdCBub3QgcmVhZCBhbGlrZS4gQSB0aWxlIHRoYXQgcmV0dXJuZWQgbm8gcm93cyBpcyBhIGZpbmRpbmdcbi8vIGFib3V0IHRoZSBwZXJpb2Qg4oCUIHRoZSByZXBvcnQgd29ya2VkIGFuZCB0aGUgYW5zd2VyIGlzIFwibm9uZVwiLiBBIHRpbGUgd2hvc2Vcbi8vIHF1ZXJ5IGZhaWxlZCBpcyBhIGhvbGUgaW4gdGhlIGZpbGUsIGFuZCBjYWxsaW5nIHRoYXQgXCJEYXRhIHVuYXZhaWxhYmxlXCIgdGVsbHNcbi8vIHRoZSByZWFkZXIgdGhlIGRhdGEgZG9lcyBub3QgZXhpc3Qgd2hlbiB3aGF0IGhhcHBlbmVkIGlzIHRoYXQgbm9ib2R5IG1hbmFnZWRcbi8vIHRvIGFzayBmb3IgaXQuIFNoYXJlZCBieSBib3RoIHJlbmRlcmVycyBzbyB0aGUgUERGIGFuZCB0aGUgZGVjayBjYW5ub3QgZW5kIHVwXG4vLyBkZXNjcmliaW5nIHRoZSBzYW1lIGhvbGUgdHdvIGRpZmZlcmVudCB3YXlzLlxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5TGFiZWwoaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGl0ZW0uZGF0YSA/ICdObyBkYXRhJyA6ICdDb3VsZCBub3QgYmUgZ2VuZXJhdGVkJztcbn1cblxuLy8gQSBjb21wb25lbnQncyB0aXRsZSBhcyBhbiBleHBvcnRlZCBmaWxlIHByaW50cyBpdDogaXRzIHRva2VucyBmaWxsZWQgd2l0aFxuLy8gdGhlIHBhZ2UgaXQgaXMgZHJhd24gb24gKHRoZSBwaHlzaWNhbCBwYWdlIHdoZXJlIHRoZSBQREYgbnVtYmVycyBhXG4vLyBjb250aW51YXRpb24gcGFnZSksIGFzIHRoZSBjYW52YXMgaGVhZGVyIHJlYWRzIGl0LiBBIGRyaWxsZWQgY2hhcnQncyB0aXRsZVxuLy8gaXMgZm9sbG93ZWQgYnkgaXRzIGJyZWFkY3J1bWIsIGBjcnVtYnNgIChkcmlsbENydW1iTGFiZWxzKTogJ09yZGVycyBieVxuLy8gUGVyaW9kIOKAuiAyMDI2IOKAuiBRMycuIEEgc2VhcmNoZWQgbGlzdCBzYXlzIHNvLCBzaW5jZSBpdHMgdGFibGUgaG9sZHMgb25seVxuLy8gdGhlIG1hdGNoaW5nIHJvd3M6ICdPcmRlcnMgKG1hdGNoaW5nIFwibm9ydGhcIiknLiBBbiB1bnRpdGxlZCBvbmUgcmVhZHNcbi8vICdNYXRjaGluZyBcIm5vcnRoXCInLiAnJyB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gcHJpbnQuIFNoYXJlZCBieSB0aGUgUERGXG4vLyBhbmQgdGhlIGRlY2ssIGNvbnRpbnVhdGlvbiBwYWdlcyBpbmNsdWRlZC5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRUaXRsZShcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIHRva2VuczogVGV4dFRva2VuQ29udGV4dCxcbiAgc2VhcmNoPzogc3RyaW5nIHwgbnVsbCxcbiAgY3J1bWJzPzogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsLFxuICBmaWx0ZXJlZCA9IGZhbHNlLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgdGl0bGUgPSBjcnVtYmVkVGl0bGUoZmlsbFRpdGxlVG9rZW5zKGNvbXBvbmVudC50aXRsZSwgdG9rZW5zKSwgY3J1bWJzID8/IFtdKTtcblxuICBpZiAoZmlsdGVyZWQpIHtcbiAgICByZXR1cm4gdGl0bGUgPyBgJHt0aXRsZX0gKGZpbHRlcmVkKWAgOiAnRmlsdGVyZWQnO1xuICB9XG5cbiAgaWYgKCFzZWFyY2gpIHtcbiAgICByZXR1cm4gdGl0bGU7XG4gIH1cblxuICByZXR1cm4gdGl0bGUgPyBgJHt0aXRsZX0gKG1hdGNoaW5nIFwiJHtzZWFyY2h9XCIpYCA6IGBNYXRjaGluZyBcIiR7c2VhcmNofVwiYDtcbn1cblxuLy8gV2hldGhlciBhIHRpbGUncyBxdWVyeSBmYWlsZWQuIEEgdGV4dCBibG9jayBoYXMgbm8gcXVlcnksIHNvIGl0IG5ldmVyIGRpZC5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZhaWxlZChpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuICFpdGVtLmRhdGEgJiYgaXRlbS5jb21wb25lbnQudHlwZSAhPT0gJ3RleHQnO1xufVxuXG4vLyBBIHRleHQgYmxvY2sgYXMgdGhlIGV4cG9ydCBnYXRlcyBuYW1lIGl0OiBieSB0aGUgc3RhcnQgb2YgaXRzIHdvcmRzLCBvbiBvbmVcbi8vIGxpbmUuXG5leHBvcnQgZnVuY3Rpb24gdGV4dFNuaXBwZXQoY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIHRva2VuczogVGV4dFRva2VuQ29udGV4dCk6IHN0cmluZyB7XG4gIGNvbnN0IHRleHQgPSB0ZXh0UGxhaW4oY29tcG9uZW50LmNvbmZpZz8uaHRtbCA/PyAnJywgdG9rZW5zKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuXG4gIHJldHVybiB0ZXh0Lmxlbmd0aCA+IFRFWFRfU05JUFBFVF9MRU5HVEggPyBgJHt0ZXh0LnNsaWNlKDAsIFRFWFRfU05JUFBFVF9MRU5HVEgpLnRyaW1FbmQoKX3igKZgIDogdGV4dDtcbn1cblxuLy8gVGhlIGxpbmVzIHVuZGVyIHRoZSByZXBvcnQncyBuYW1lIG9uIHRoZSBQREYgdGl0bGUgcGFnZSBhbmQgdGhlIHRpdGxlIHNsaWRlOlxuLy8gdGhlIGV4cG9ydCBkYXRlLCB0aGUgYWN0aXZlIGZpbHRlcnMsIHRoZW4gd2hhdCB0aGUgbnVtYmVycyBhcmUgbWVhc3VyZWQgaW4uXG4vLyBUaGUgZGF0ZSBhbHdheXMgbGVhZHMgKHRoZSBQb3dlclBvaW50IG1hcmtzIHRoYXQgbGluZSBhcyB3cml0dGVuIGluIHRoZVxuLy8gcmVwb3J0J3MgbG9jYWxlKS4gSXQgaXMgdG9kYXkgaW4gdGhlIHJlcG9ydCdzIHpvbmUsIHRoZSBzYW1lIGRheSBpdHMgZmlsdGVyc1xuLy8gcmVzb2x2ZSBcInRvZGF5XCIgdG8sIHdyaXR0ZW4gaW4gdGhlIHJlcG9ydCdzIGxvY2FsZS5cbmV4cG9ydCBmdW5jdGlvbiBjb3ZlckxpbmVzKGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0KTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgIGZvcm1hdExvY2FsRGF0ZShcbiAgICAgIG5ldyBEYXRlKCksXG4gICAgICBjb2xsZWN0ZWQuZm9ybWF0Q29udGV4dC5sb2NhbGUsXG4gICAgICBEQVlfTE9ORyxcbiAgICAgIHJlc29sdmVSZXBvcnRUaW1lem9uZShjb2xsZWN0ZWQucmVwb3J0KSxcbiAgICApLFxuICAgIC4uLmNvbGxlY3RlZC5maWx0ZXJTdW1tYXJ5LFxuICAgIC4uLmNvbGxlY3RlZC5jb250ZXh0TGluZXMsXG4gIF07XG59XG5cbi8vIEFuIGV4cG9ydGVkIGxpc3QgY2VsbCwgcmVhZGluZyBsaWtlIHRoZSBvbi1zY3JlZW4gY2VsbCwgdGhyb3VnaCB0aGUgc2FtZVxuLy8gZnVuY3Rpb25zIGFzIHRoZSBzY3JlZW46IGEgZGF0ZSBjb2x1bW4gcmVuZGVycyBpbiB0aGUgcmVwb3J0J3Mgem9uZSBhbmRcbi8vIGxvY2FsZSwgYW5kIGEgY29sdW1uIHdpdGggbnVtYmVyLWZvcm1hdCBrZXlzIChhIGNyb3NzLXRhYidzIGNlbGxzIHRocm91Z2hcbi8vIGl0cyBjZWxsRm9ybWF0KSBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlIGFuZCBjdXJyZW5jeS4gQSB2YWx1ZSBvZiBhIGNvbHVtblxuLy8gdGhlIGRhdGEgbGFiZWxzIChgbGFiZWxzYCwgQ29tcG9uZW50RGF0YS52YWx1ZUxhYmVsczogYW4gZW51bSdzLCBhXG4vLyBjcm9zcy10YWIncyByb3cga2V5J3MpIHJlYWRzIGFzIGl0cyBsYWJlbC4gQW55IG90aGVyIHZhbHVlIGdvZXMgb3V0XG4vLyB2ZXJiYXRpbSwgYW5kIGFuIGVtcHR5IG9uZSBhcyAnJy4gQ1NWIG5ldmVyIGNvbWVzIHRocm91Z2ggaGVyZTogdGhlIHNlcnZlclxuLy8gd3JpdGVzIGl0LCBsYWJlbHMgaW5jbHVkZWQuXG4vL1xuLy8gQW4gb3V0cHV0IGNvbHVtbiBpcyB3cml0dGVuIGJ5IHdoYXQgaXQgaG9sZHMsIGFzIHRoZSBzY3JlZW4ncyBjZWxsIGlzXG4vLyAoZm9ybWF0T3V0cHV0VmFsdWUpOiBhIHNpZ25lZCBjaGFuZ2UsIGEgcGVyY2VudCBjaGFuZ2UsIGEgY2hhbmdlIG9mIGEgcmF0ZVxuLy8gaW4gcG9pbnRzLCBhIHJhbmssIGEgc2hhcmUuIEl0cyByb3cgZ2l2ZXMgYSBjaGFuZ2UgdGhlIHByaW9yIGJlc2lkZSBpdCwgc29cbi8vIGEgbWlzc2luZyBiYXNlbGluZSAoJ+KAlCcpIHJlYWRzIGFwYXJ0IGZyb20gYSB6ZXJvIG9uZSAoJ24vYScpLlxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydENlbGwoXG4gIHZhbHVlOiB1bmtub3duLFxuICBjb2x1bW46IExpc3RDb2x1bW4gJiB7IG91dHB1dD86IExpc3RPdXRwdXRDb2x1bW4gfSxcbiAgdGltZXpvbmU6IHN0cmluZyxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgcm93PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsLFxuICBsYWJlbHM/OiBDb21wb25lbnREYXRhWyd2YWx1ZUxhYmVscyddLFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgb3V0cHV0ID0gY29sdW1uLm91dHB1dDtcblxuICBpZiAob3V0cHV0KSB7XG4gICAgcmV0dXJuIGZvcm1hdE91dHB1dFZhbHVlKHZhbHVlLCBvdXRwdXQub3V0cHV0LCBjb2x1bW4sIGNvbnRleHQsIHtcbiAgICAgIG1lYXN1cmVTcGVjOiBvdXRwdXQubWVhc3VyZVNwZWMsXG4gICAgICBwcmlvcjogb3V0cHV0LnByaW9yQWxpYXMgJiYgcm93ID8gcm93W291dHB1dC5wcmlvckFsaWFzXSA6IHVuZGVmaW5lZCxcbiAgICAgIGZsb29yOiBvdXRwdXQuZmxvb3IsXG4gICAgICBlbXB0eTogJycsXG4gICAgfSkudGV4dDtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGNvbHVtbi5mb3JtYXQgPT09IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQuRGF0ZSkge1xuICAgIHJldHVybiBmb3JtYXRSZXBvcnREYXRlKHZhbHVlLCB0aW1lem9uZSwgY29udGV4dC5sb2NhbGUpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlTGFiZWwobGFiZWxzLCBjb2x1bW4uY29sdW1uLCB2YWx1ZSlcbiAgICA/PyAoaGFzTnVtYmVyRm9ybWF0KGNvbHVtbikgPyBmb3JtYXROdW1iZXIodmFsdWUsIGNvbHVtbiwgY29udGV4dCwgeyBlbXB0eTogJycgfSkgOiBTdHJpbmcodmFsdWUpKTtcbn1cblxuLy8gVGhlIGNvbHVtbnMgYW4gZXhwb3J0ZWQgbGlzdCB0YWJsZSBkcmF3cy4gQSBjcm9zcy10YWIncyBhcnJpdmUgd2l0aCBpdHNcbi8vIHJvd3MgKHRoZSByb3cga2V5IGZpcnN0LCB0aGVuIG9uZSBwZXIgcGl2b3QgdmFsdWUpLCBzaW5jZSBvbmx5IHRoZSByZXN1bHRcbi8vIGtub3dzIHRoZSBwaXZvdCB2YWx1ZXMsIGFuZCBhcmUgYnVpbHQgYnkgcGl2b3RDb2x1bW5TcGVjcygpIGFzIG9uIHNjcmVlbjpcbi8vIGhlYWRlZCBieSBpdHMgcGl2b3QgdmFsdWVzIGFzIHBpdm90SGVhZGluZ3MoKSByZWFkcyB0aGVtICh0aGVpciBsYWJlbHMsIGl0c1xuLy8gcGVyaW9kcyBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlKSwgZWFjaCBwaXZvdCB2YWx1ZSBmb3JtYXR0ZWQgYnkgY2VsbEZvcm1hdC5cbi8vIEEgcGxhaW4gbGlzdCBkcmF3cyBpdHMgY29uZmlndXJlZCBjb2x1bW5zIGJ1dCB0aGUgb25lcyB0aGVcbi8vIHZpZXdlciBoaWQgKGBoaWRkZW5gLCBrZXB0IHRvIGxpc3RIaWRkZW5Db2x1bW5zLCBzbyBuZXZlciBhbGwgb2YgdGhlbSksXG4vLyBlbHNlIGV2ZXJ5IGNvbHVtbiB0aGUgcXVlcnkgcmV0dXJuZWQsIGFzIGl0IGNhbWUuIE91dHB1dCBjb2x1bW5zICh0aGVcbi8vIGRhdGEncyBvdXRwdXRzLCBhIGNyb3NzLXRhYiBjZWxsIHRocm91Z2ggY2VsbE1lYXN1cmVzKSBjYXJyeSBob3cgdGhleSBhcmVcbi8vIHdyaXR0ZW47IHdpdGhvdXQgdGhvc2Uga2V5cyB0aGUgY29sdW1ucyBhcmUgZXhhY3RseSBhcyBiZWZvcmUuXG5leHBvcnQgZnVuY3Rpb24gbGlzdENvbHVtbnMoXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZyxcbiAgaGlkZGVuOiByZWFkb25seSBzdHJpbmdbXSA9IFtdLFxuKTogRXhwb3J0TGlzdENvbHVtbltdIHtcbiAgY29uc3QgY29uZmlnID0gKGNvbXBvbmVudC5jb25maWcgPz8ge30pIGFzIExpc3RDb25maWc7XG5cbiAgaWYgKGNvbmZpZy5waXZvdEJ5Py5jb2x1bW4pIHtcbiAgICByZXR1cm4gd2l0aE91dHB1dENvbHVtbnMocGl2b3RDb2x1bW5TcGVjcyhjb25maWcsIGRhdGEsIGxvY2FsZSksIGRhdGEsIFtdKTtcbiAgfVxuXG4gIGlmIChjb25maWcuY29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgY29uc3QgaGlkZGVuTmFtZXMgPSBsaXN0SGlkZGVuQ29sdW1ucyhjb25maWcsIGhpZGRlbik7XG5cbiAgICByZXR1cm4gd2l0aE91dHB1dENvbHVtbnMoXG4gICAgICBjb25maWcuY29sdW1uc1xuICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+ICFoaWRkZW5OYW1lcy5pbmNsdWRlcyhjb2x1bW4uY29sdW1uKSlcbiAgICAgICAgLm1hcCgoY29sdW1uKSA9PiAoeyAuLi5jb2x1bW4sIG51bWVyaWM6IGhhc051bWJlckZvcm1hdChjb2x1bW4pIH0pKSxcbiAgICAgIGRhdGEsXG4gICAgICBjb25maWcuY29sdW1ucyxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHdpdGhPdXRwdXRDb2x1bW5zKGRhdGEuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gKHsgY29sdW1uLCBudW1lcmljOiBmYWxzZSB9KSksIGRhdGEsIFtdKTtcbn1cblxuLy8gVGhlIGNvbHVtbnMgd2l0aCB0aGVpciBvdXRwdXQgbWV0YWRhdGEgYXR0YWNoZWQgKGxpc3RPdXRwdXRDb2x1bW5zLCBhcyB0aGVcbi8vIHNjcmVlbidzIGxpc3QgcmVzb2x2ZXMgaXQpOiBhbiBvdXRwdXQgY29sdW1uIGhvbGRzIG51bWJlcnMgYW5kIGlzIHdyaXR0ZW5cbi8vIGJ5IHdoYXQgaXQgaG9sZHMuIFVuY2hhbmdlZCB3aGVuIHRoZSBkYXRhIGhhcyBubyBvdXRwdXRzLlxuZnVuY3Rpb24gd2l0aE91dHB1dENvbHVtbnMoXG4gIGNvbHVtbnM6IEV4cG9ydExpc3RDb2x1bW5bXSxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgYXV0aG9yZWQ6IHJlYWRvbmx5IExpc3RDb2x1bW5bXSxcbik6IEV4cG9ydExpc3RDb2x1bW5bXSB7XG4gIGlmICghZGF0YS5vdXRwdXRzKSB7XG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuICBjb25zdCBvdXRwdXRzID0gbGlzdE91dHB1dENvbHVtbnMoY29sdW1ucywgZGF0YSwgYXV0aG9yZWQpO1xuXG4gIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiAob3V0cHV0c1tjb2x1bW4uY29sdW1uXVxuICAgID8geyAuLi5jb2x1bW4sIG51bWVyaWM6IHRydWUsIG91dHB1dDogb3V0cHV0c1tjb2x1bW4uY29sdW1uXSB9XG4gICAgOiBjb2x1bW4pKTtcbn1cblxuLy8gVGhlIGhlYWRpbmcgb3ZlciBlYWNoIGNvbHVtbiBvZiBsaXN0Q29sdW1ucygpOiBhIHBsYWluIGxpc3QncyBjb25maWd1cmVkXG4vLyBsYWJlbCwgZWxzZSBpdHMgY29sdW1uOyBhIGNyb3NzLXRhYidzIGhlYWRpbmcgZnJvbSBwaXZvdENvbHVtblNwZWNzKCkuXG5leHBvcnQgZnVuY3Rpb24gbGlzdEhlYWRpbmdzKFxuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcsXG4gIGhpZGRlbjogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSxcbik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGxpc3RDb2x1bW5zKGNvbXBvbmVudCwgZGF0YSwgbG9jYWxlLCBoaWRkZW4pLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubGFiZWwgfHwgY29sdW1uLmNvbHVtbik7XG59XG5cbi8vIEFuIGV4cG9ydGVkIGxpc3QncyB0b3RhbHMgcm93LCBvbmUgY2VsbCBwZXIgY29sdW1uIG9mIGxpc3RDb2x1bW5zKCk6IGVhY2hcbi8vIHRvdGFsIHdyaXR0ZW4gbGlrZSBpdHMgY29sdW1uJ3MgY2VsbHMsIGFuZCBMSVNUX1RPVEFMX0xBQkVMIGluIHRoZSBmaXJzdFxuLy8gY29sdW1uIHdoZW4gdGhhdCBjb2x1bW4gaG9sZHMgbm8gdG90YWwgKGEgY3Jvc3MtdGFiJ3Mgcm93IGtleSkuIG51bGwgd2hlblxuLy8gdGhlIGxpc3QgaGFzIG5vIHRvdGFscy4gVGhlIENTViBuZXZlciBjYXJyaWVzIG9uZTogaXRzIHJvd3Mgc3RheSByYXcuXG5leHBvcnQgZnVuY3Rpb24gbGlzdFRvdGFsc1JvdyhcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgY29sdW1uczogcmVhZG9ubHkgRXhwb3J0TGlzdENvbHVtbltdLFxuICB0aW1lem9uZTogc3RyaW5nLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuKTogc3RyaW5nW10gfCBudWxsIHtcbiAgY29uc3QgdG90YWxzID0gZGF0YS50b3RhbHM7XG5cbiAgaWYgKCF0b3RhbHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGxhYmVsID0gbGlzdFRvdGFsc0xhYmVsQ29sdW1uKGNvbHVtbnMsIHRvdGFscyk7XG5cbiAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4pID0+IChjb2x1bW4uY29sdW1uID09PSBsYWJlbFxuICAgID8gTElTVF9UT1RBTF9MQUJFTFxuICAgIDogZXhwb3J0Q2VsbCh0b3RhbHNbY29sdW1uLmNvbHVtbl0sIGNvbHVtbiwgdGltZXpvbmUsIGNvbnRleHQsIHRvdGFscykpKTtcbn1cblxuLy8gVGhlIHN1YnRpdGxlIHVuZGVyIGEgY2hhcnQncyBvciBhIGxpc3QncyB0aXRsZTogdGhlIGRheXMgaXQgcmVhZHMsIGFuZCB0aGVcbi8vIGRheXMgZWFjaCBjb21wYXJpc29uIGxhbmUgcmVhZHMgKCdTZXAgMSDigJMgMTUsIDIwMjYgwrcgdnMgcHJldmlvdXMgbW9udGg6XG4vLyBBdWcgMSDigJMgMTUsIDIwMjYnKSwgYXMgdGhlIHNjcmVlbidzIG5vdGUgb3BlbnMgd2l0aC4gJycgd2l0aG91dCBhXG4vLyBjb21wYXJpc29uIG9yIGEgdGltZWZyYW1lLCBhbmQgZm9yIGEgS1BJLCB3aG9zZSBjYXJkIHByaW50cyBpdHMgb3duIHdpbmRvd1xuLy8gbGluZS5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRXaW5kb3dzTGluZShpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsIHRpbWV6b25lOiBzdHJpbmcsIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnKTogc3RyaW5nIHtcbiAgaWYgKCFpdGVtLmRhdGEgfHwgaXRlbS5jb21wb25lbnQudHlwZSA9PT0gJ2twaScpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50V2luZG93c0xpbmUoaXRlbS5kYXRhLCB7IGxvY2FsZSwgdGltZXpvbmUgfSk7XG59XG5cbi8vIFRoZSBub3RlIGxpbmVzIHVuZGVyIGEgY29tcG9uZW50J3MgYm94OiB3aHkgYSBjb21wYXJpc29uIHJlYWRzIGFzIGl0IGRvZXMsXG4vLyBhIEtQSSdzIGRlbHRhIG5vdGUsIGFuZCB3aGF0IGVhY2ggd2luZG93ZWQgdmFsdWUgaXMgYW5kIHdoeS4gVGhlIGRheXMgYXJlXG4vLyBsZWZ0IG91dCAodGhlIHN1YnRpdGxlIG9yIHRoZSBLUEkgY2FyZCBwcmludHMgdGhlbSksIGFuZCB0aGUgd2luZG93XG4vLyBkZXNjcmlwdGlvbnMgYXJlIGluLCBzaW5jZSBhIGZpbGUgaGFzIG5vIHRvb2x0aXAgb3IgaGVhZGVyIHRvIGNhcnJ5IHRoZW0uXG4vLyBFbXB0eSB3aGVuIHRoZSBkYXRhIGhhcyBub25lIG9mIHRoZSBrZXlzLlxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydE5vdGVMaW5lcyhpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsIHRpbWV6b25lOiBzdHJpbmcsIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnKTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgIC4uLmNvbXBvbmVudE5vdGVMaW5lcyhpdGVtLmRhdGEsIHsgbG9jYWxlLCB0aW1lem9uZSB9LCB7IHdpbmRvd3M6IGZhbHNlLCB3aW5kb3dEZXNjcmlwdGlvbnM6IHRydWUgfSksXG4gICAgLi4uKGl0ZW0udGFibGVOb3RlcyA/PyBbXSksXG4gIF07XG59XG5cbi8vIFdoZXRoZXIgYSB0aWxlIGhhcyBub3RoaW5nIHRvIGRyYXc6IG5vIHJvd3MsIG9yIGEgdGFibGUgd2l0aCBubyBsaW5lLlxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlUaWxlKGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXRlbS50YWJsZVxuICAgID8gIWl0ZW0udGFibGUucm93cy5sZW5ndGggJiYgIWl0ZW0udGFibGUudG90YWxSb3dcbiAgICA6ICFpdGVtLmRhdGE/LnJvd3M/Lmxlbmd0aDtcbn1cblxuLy8gV2hldGhlciBhIEtQSSBjYXJkIGhhcyBtb3JlIHRvIGRyYXcgdGhhbiBpdHMgdmFsdWUgYW5kIGxhYmVsLiBXaXRob3V0LCBib3RoXG4vLyBleHBvcnRzIGRyYXcgdGhlIHRpbGUgZXhhY3RseSBhcyB0aGV5IGFsd2F5cyBoYXZlLlxuZXhwb3J0IGZ1bmN0aW9uIGtwaUNhcmRIYXNFeHRyYXModmlldzogS3BpQ2FyZFZpZXcsIG5vdGVzOiByZWFkb25seSBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEodmlldy5kZWx0YSB8fCB2aWV3LndpbmRvdyB8fCB2aWV3LnRhcmdldCB8fCB2aWV3LnNwYXJrbGluZSB8fCBub3Rlcy5sZW5ndGgpO1xufVxuXG4vLyBXaGljaCBwYXJ0cyBvZiBhIEtQSSBjYXJkIGZpdCBhIHRpbGUgYGF2YWlsYWJsZWAgdGFsbC4gQSBzaG9ydCB0aWxlIHNoZWRzIHRoZVxuLy8gc3BhcmtsaW5lIGZpcnN0LCB0aGVuIHRoZSB0YXJnZXQgbGluZSwgdGhlbiB0aGUgbm90ZXM7IHRoZSB2YWx1ZSwgaXRzIGxhYmVsXG4vLyBhbmQgdGhlIGRlbHRhIHJvdyBhbHdheXMgc3RheSwgYW5kIHRoZSB3aW5kb3cgbGluZSBzdGF5cyB3aGVuZXZlciB0aGUgY2FyZFxuLy8gc2hvd3MgYSBjb21wYXJpc29uIChpdHMgZGF5cyBhcmUgd2hhdCB0aGUgZGVsdGEgaXMgbWVhc3VyZWQgb3ZlcikuIFRoZVxuLy8gc3BhcmtsaW5lIG5lZWRzIHZhbHVlcyB0byBkcmF3LiBXaGVuIHdoYXQgc3RheXMgaXMgc3RpbGwgdG9vIHRhbGwsIGV2ZXJ5XG4vLyByb3cgc2hyaW5rcyBieSB0aGUgc2FtZSBzY2FsZSwgZG93biB0byBLUElfRVhQT1JUX01JTl9TQ0FMRTsgYnkgdGhlbiB0aGVcbi8vIHNwYXJrbGluZSwgdGhlIHRhcmdldCBhbmQgdGhlIG5vdGVzIGFyZSBnb25lLlxuZXhwb3J0IGZ1bmN0aW9uIGtwaUV4cG9ydFBhcnRzKFxuICB2aWV3OiBLcGlDYXJkVmlldyxcbiAgbm90ZXM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBhdmFpbGFibGU6IG51bWJlcixcbiAgaGVpZ2h0czogS3BpRXhwb3J0SGVpZ2h0cyxcbik6IEtwaUV4cG9ydFBhcnRzIHtcbiAgY29uc3QgcGFydHM6IEtwaUV4cG9ydFBhcnRzID0ge1xuICAgIGRlbHRhOiAhIXZpZXcuZGVsdGEsXG4gICAgd2luZG93OiAhIXZpZXcud2luZG93LFxuICAgIHRhcmdldDogISF2aWV3LnRhcmdldCxcbiAgICBzcGFya2xpbmU6ICEhdmlldy5zcGFya2xpbmU/LnZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gdmFsdWUgIT09IG51bGwpLFxuICAgIG5vdGVzOiBbLi4ubm90ZXNdLFxuICAgIHNjYWxlOiAxLFxuICB9O1xuICBjb25zdCBoZWlnaHQgPSAoKSA9PiBrcGlFeHBvcnRIZWlnaHQodmlldywgcGFydHMsIGhlaWdodHMpO1xuXG4gIGlmIChoZWlnaHQoKSA+IGF2YWlsYWJsZSkge1xuICAgIHBhcnRzLnNwYXJrbGluZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGhlaWdodCgpID4gYXZhaWxhYmxlKSB7XG4gICAgcGFydHMudGFyZ2V0ID0gZmFsc2U7XG4gIH1cblxuICB3aGlsZSAoaGVpZ2h0KCkgPiBhdmFpbGFibGUgJiYgcGFydHMubm90ZXMubGVuZ3RoKSB7XG4gICAgcGFydHMubm90ZXMucG9wKCk7XG4gIH1cblxuICBpZiAoaGVpZ2h0KCkgPiBhdmFpbGFibGUgJiYgIXBhcnRzLmRlbHRhKSB7XG4gICAgcGFydHMud2luZG93ID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaGVpZ2h0KCkgPiBhdmFpbGFibGUpIHtcbiAgICBwYXJ0cy5zY2FsZSA9IE1hdGgubWF4KEtQSV9FWFBPUlRfTUlOX1NDQUxFLCBNYXRoLm1heCgwLCBhdmFpbGFibGUpIC8gaGVpZ2h0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG4vLyBUaGUgaGVpZ2h0cyBzY2FsZWQgYnkgdGhlIHBhcnRzJyBzY2FsZTogd2hhdCB0aGUgcmVuZGVyZXIgbGF5cyB0aGUgY2FyZFxuLy8gb3V0IHdpdGgsIGl0cyB0ZXh0IHNpemVkIGJ5IHRoZSBzYW1lIHNjYWxlLlxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlZEtwaUhlaWdodHMoaGVpZ2h0czogS3BpRXhwb3J0SGVpZ2h0cywgc2NhbGU6IG51bWJlcik6IEtwaUV4cG9ydEhlaWdodHMge1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBoZWlnaHRzLnZhbHVlICogc2NhbGUsXG4gICAgbGFiZWw6IGhlaWdodHMubGFiZWwgKiBzY2FsZSxcbiAgICBkZWx0YTogaGVpZ2h0cy5kZWx0YSAqIHNjYWxlLFxuICAgIHdpbmRvdzogaGVpZ2h0cy53aW5kb3cgKiBzY2FsZSxcbiAgICB0YXJnZXQ6IGhlaWdodHMudGFyZ2V0ICogc2NhbGUsXG4gICAgc3BhcmtsaW5lOiBoZWlnaHRzLnNwYXJrbGluZSAqIHNjYWxlLFxuICAgIG5vdGU6IGhlaWdodHMubm90ZSAqIHNjYWxlLFxuICB9O1xufVxuXG4vLyBIb3cgdGFsbCB0aGUgY2FyZCdzIGRyYXduIHBhcnRzIHN0YW5kIHRvZ2V0aGVyLCBpbiB0aGUgaGVpZ2h0cycgdW5pdC5cbmV4cG9ydCBmdW5jdGlvbiBrcGlFeHBvcnRIZWlnaHQodmlldzogS3BpQ2FyZFZpZXcsIHBhcnRzOiBLcGlFeHBvcnRQYXJ0cywgaGVpZ2h0czogS3BpRXhwb3J0SGVpZ2h0cyk6IG51bWJlciB7XG4gIHJldHVybiBoZWlnaHRzLnZhbHVlXG4gICAgKyAodmlldy5sYWJlbCA/IGhlaWdodHMubGFiZWwgOiAwKVxuICAgICsgKHBhcnRzLmRlbHRhID8gaGVpZ2h0cy5kZWx0YSA6IDApXG4gICAgKyAocGFydHMud2luZG93ID8gaGVpZ2h0cy53aW5kb3cgOiAwKVxuICAgICsgKHBhcnRzLnRhcmdldCA/IGhlaWdodHMudGFyZ2V0IDogMClcbiAgICArIChwYXJ0cy5zcGFya2xpbmUgPyBoZWlnaHRzLnNwYXJrbGluZSA6IDApXG4gICAgKyBwYXJ0cy5ub3Rlcy5sZW5ndGggKiBoZWlnaHRzLm5vdGU7XG59XG5cbi8vIFRoZSBsYXN0IHJvdyBvZiBhbiBleHBvcnRlZCBsaXN0IHRhYmxlIHRoYXQgc3RvcHMgc2hvcnQgb2YgaXRzIHJlc3VsdDogaG93XG4vLyBtYW55IHJvd3MgdGhlIGZpbGUgbGVhdmVzIG91dCBhbmQgd2hlcmUgdGhlIHdob2xlIHNldCBjYW4gYmUgaGFkLiBFYWNoXG4vLyBmb3JtYXQgZmV0Y2hlcyBpdHMgb3duIG51bWJlciBvZiByb3dzIChQREZfTElTVF9ST1dTLCBQUFRYX0xJU1RfUk9XUyksIGFuZFxuLy8gYm90aCBuYW1lIHdoYXQgaXMgbGVmdCB3aXRoIHRoaXMgb25lIHNlbnRlbmNlLlxuZXhwb3J0IGZ1bmN0aW9uIG1vcmVSb3dzTm90aWNlKHJlbWFpbmluZzogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGDigKYgJHtyZW1haW5pbmd9IG1vcmUgcm93KHMpIOKAlCB1c2UgdGhlIGNvbXBvbmVudCdzIENTViBleHBvcnQgZm9yIHRoZSBmdWxsIGRhdGFzZXRgO1xufVxuXG4vLyBUaGUgcGFnZXMgb2YgYSBjb2xsZWN0ZWQgcmVwb3J0IHRoYXQgaGF2ZSBhdCBsZWFzdCBvbmUgdGlsZSB3aG9zZSBxdWVyeVxuLy8gZmFpbGVkLCBvciB3aG9zZSB0ZXh0IHNob3dzIGEgdmFsdWUgdGhhdCBjYW1lIGJhY2sgd2l0aG91dCBpdHMgbnVtYmVyLCB0aGVuXG4vLyBIRUFERVJfRk9PVEVSX05BTUUgd2hlbiB0aGUgaGVhZGVyIG9yIGZvb3RlciBzaG93cyBvbmUgb24gYSBwYWdlIHRoYXQgc2hvd3Ncbi8vIHRoZSBtYXN0ZXIg4oCUIHdoYXQgdGhlIGZhaWx1cmUgZ2F0ZSBuYW1lcyB0byB0aGUgdXNlciwgYW5kIHdoYXQgbWFrZXMgXCJzb21lXG4vLyBvZiB0aGlzIGZpbGUgaXMgbWlzc2luZ1wiIGEgZmFjdCB0aGUgY2FsbGVyIGNhbiBhY3Qgb24gcmF0aGVyIHRoYW4gYSB0aGluZ1xuLy8gdGhleSBub3RpY2UgaW4gdGhlIFBERiBhZnRlcndhcmRzLlxuZXhwb3J0IGZ1bmN0aW9uIGZhaWxlZFBhZ2VOYW1lcyhjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCk6IHN0cmluZ1tdIHtcbiAgLy8gTnVtYmVyZWQgYmVmb3JlIHRoZSBmaWx0ZXIg4oCUIGFuIHVubmFtZWQgcGFnZSA0IHRoYXQgZmFpbGVkIGhhcyB0byByZWFkXG4gIC8vIFwiUGFnZSA0XCIsIG5vdCBcIlBhZ2UgMVwiIGJlY2F1c2UgaXQgaGFwcGVuZWQgdG8gYmUgdGhlIGZpcnN0IGZhaWx1cmUuXG4gIGNvbnN0IG5hbWVzID0gY29sbGVjdGVkLnBhZ2VzXG4gICAgLm1hcCgocGFnZSwgaW5kZXgpID0+ICh7IHBhZ2UsIG51bWJlcjogaW5kZXggKyAxIH0pKVxuICAgIC5maWx0ZXIoKHsgcGFnZSB9KSA9PiBwYWdlLmNvbXBvbmVudHMuc29tZShpc0ZhaWxlZClcbiAgICAgIHx8IHNob3dzRmFpbGVkVmFsdWUocGFnZS5jb21wb25lbnRzLm1hcCgoaXRlbSkgPT4gaXRlbS5jb21wb25lbnQpLCBwYWdlLmZhaWxlZFZhbHVlcykpXG4gICAgLm1hcCgoeyBwYWdlLCBudW1iZXIgfSkgPT4gcGFnZS5wYWdlLm5hbWUgfHwgYFBhZ2UgJHtudW1iZXJ9YCk7XG4gIGNvbnN0IG1hc3RlciA9IGNvbGxlY3RlZC5yZXBvcnQubWFzdGVyO1xuICBjb25zdCBzaG93c01hc3RlciA9IGNvbGxlY3RlZC5wYWdlcy5zb21lKCh7IHBhZ2UgfSkgPT4gIXBhZ2UubWFzdGVySGlkZGVuKTtcblxuICBpZiAobWFzdGVyICYmIHNob3dzTWFzdGVyICYmIHNob3dzRmFpbGVkVmFsdWUobWFzdGVyLmNvbXBvbmVudHMsIGNvbGxlY3RlZC5tYXN0ZXJGYWlsZWRWYWx1ZXMpKSB7XG4gICAgbmFtZXMucHVzaChIRUFERVJfRk9PVEVSX05BTUUpO1xuICB9XG5cbiAgcmV0dXJuIG5hbWVzO1xufVxuXG4vLyBXaGV0aGVyIGFueSBvZiB0aGUgdGV4dCBibG9ja3Mgc2hvd3Mgb25lIG9mIHRoZSBmYWlsZWQgdmFsdWUga2V5cy5cbmZ1bmN0aW9uIHNob3dzRmFpbGVkVmFsdWUoY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50W10sIGZhaWxlZDogcmVhZG9ubHkgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3Qgc2hvd24gPSBuZXcgU2V0KGNvbXBvbmVudHNcbiAgICAuZmlsdGVyKChjb21wb25lbnQpID0+IGNvbXBvbmVudC50eXBlID09PSAndGV4dCcpXG4gICAgLmZsYXRNYXAoKGNvbXBvbmVudCkgPT4gdmFsdWVLZXlzKGNvbXBvbmVudC5jb25maWc/Lmh0bWwpKSk7XG5cbiAgcmV0dXJuIGZhaWxlZC5zb21lKChrZXkpID0+IHNob3duLmhhcyhrZXkpKTtcbn1cblxuLy8gVGhlIGNvdmVyJ3MgZmlsdGVyIGxpbmVzOiB0aGUgZXhwb3J0J3MgZmlsdGVyIGxpbmVzLCB0aGVuIHRoZSBtYXRjaCB3aGlsZSB0aGUgcmVwb3J0IGJhcidzIGZpbHRlcnMgbWF0Y2ggYW55LiBBIGRyaWxsZWQgY2hhcnQncyBsaW5lXG4vLyBpcyBpdHMgdGl0bGUgYXMgdGhlIGNhbnZhcyBoZWFkZXIgcmVhZHMgaXQgKGB0aXRsZXNgLCBieSBjb21wb25lbnQgaWQpIGFuZFxuLy8gdGhlIGNydW1icyBvZiB0aGUgcGF0aCBpdHMgYW5zd2VyIGFwcGxpZWQgKHRoZSBvbmVzIGl0cyB0aXRsZSBwcmludHMpLCBub3Rcbi8vIHRoZSBwYXRoIHRoZSBzY3JlZW4gYXNrZWQgZm9yOiB0aGUgc2VydmVyIG1heSBoYXZlIGN1dCB0aGF0IHBhdGggc2hvcnQgb3Jcbi8vIHJlZnVzZWQgaXQuXG5leHBvcnQgZnVuY3Rpb24gY292ZXJGaWx0ZXJMaW5lcyhcbiAgc25hcHNob3Q6IFJlcG9ydEV4cG9ydFNuYXBzaG90LFxuICBsaW5lczogcmVhZG9ubHkgUmVwb3J0RXhwb3J0TGluZVtdLFxuICBwYWdlczogcmVhZG9ubHkgUGljazxDb2xsZWN0ZWRQYWdlLCAnY29tcG9uZW50cyc+W10sXG4gIHRpdGxlczogUmVhZG9ubHk8UmVjb3JkPG51bWJlciwgc3RyaW5nPj4gPSB7fSxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgbWF0Y2ggPSBzbmFwc2hvdC5mZWF0dXJlcy5pbmNsdWRlcygnbWF0Y2hBbnknKSA/IG1hdGNoTGluZVRleHQoc25hcHNob3Quc3RhdGUubWF0Y2gsICdsaW5lJykgOiBudWxsO1xuICBjb25zdCBkcmlsbGVkID0gcGFnZXNcbiAgICAuZmxhdE1hcCgocGFnZSkgPT4gcGFnZS5jb21wb25lbnRzKVxuICAgIC5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbS5jcnVtYnM/Lmxlbmd0aClcbiAgICAubWFwKChpdGVtKSA9PiBjcnVtYmVkVGl0bGUodGl0bGVzW2l0ZW0uY29tcG9uZW50LmlkXSA/PyBpdGVtLmNvbXBvbmVudC50aXRsZSwgaXRlbS5jcnVtYnMpKTtcblxuICByZXR1cm4gW1xuICAgIC4uLmxpbmVzLmZpbHRlcigobGluZSkgPT4gbGluZS5raW5kICE9PSAnZHJpbGwnKS5tYXAoKGxpbmUpID0+IGxpbmUudGV4dCksXG4gICAgLi4uZHJpbGxlZCxcbiAgICBtYXRjaCxcbiAgXVxuICAgIC5maWx0ZXIoKGxpbmUpOiBsaW5lIGlzIHN0cmluZyA9PiAhIWxpbmUpO1xufVxuXG4vLyBXaGV0aGVyIGEgUERGIG9yIFBvd2VyUG9pbnQgZXhwb3J0IGxheXMgYSBjb21wb25lbnQgb3V0OiBldmVyeSB0aWxlLCBhbmRcbi8vIGV2ZXJ5IHRleHQgYmxvY2ssIHdoaWNoIGhhcyBub3RoaW5nIHRvIGZldGNoIGFuZCByaWRlcyB0aHJvdWdoIHdpdGggbm9cbi8vIGRhdGEuIEFueSBvdGhlciB0eXBlIChhbiBpbmxpbmUgdmFsdWUsIG9yIGEgdHlwZSB0aGlzIHZpZXdlciBkb2VzIG5vdFxuLy8ga25vdykgbmV2ZXIgaXM6IGEgdmFsdWUgaXMgcmVhZCBvbmx5IHRocm91Z2ggaXRzIGxheWVyJ3MgdmFsdWVzIGpvYi5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4cG9ydFNsb3QoY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVGlsZShjb21wb25lbnQpIHx8IGNvbXBvbmVudC50eXBlID09PSAndGV4dCc7XG59XG5cbi8vIEdhdGhlcnMgZXZlcnl0aGluZyBhbiBleHBvcnQgbmVlZHM6IGV2ZXJ5IGNvbXBvbmVudCdzIGRhdGEgYWNyb3NzIEFMTCBwYWdlc1xuLy8gKHRoZSBjYW52YXMgb25seSByZW5kZXJzIHRoZSBhY3RpdmUgcGFnZSwgc28gZXhwb3J0cyBjYW4ndCBzY3JhcGUgdGhlXG4vLyBzY3JlZW4pLCBhbmQgdGhlIG51bWJlcnMgb2YgdGhlIHZhbHVlcyB0aGVpciB0ZXh0IHJlYWRzLCBmZXRjaGVkIGZyZXNoIHdpdGhcbi8vIHRoZSB2aWV3ZXIncyBjdXJyZW50IGZpbHRlciBzdGF0ZS5cbi8vXG4vLyBBIGZhaWxlZCBjb21wb25lbnQgcmVzb2x2ZXMgdG8gYSBudWxsIGBkYXRhYCwgYW5kIGEgZmFpbGVkIHZhbHVlIHRvIGEga2V5IGluXG4vLyBpdHMgcGFnZSdzIGZhaWxlZFZhbHVlcywgcmF0aGVyIHRoYW4gZmFpbGluZyB0aGUgd2hvbGUgY29sbGVjdGlvbiDigJQgYnV0IHRoYXRcbi8vIGlzIHNvIHRoZSBjYWxsZXIgY2FuIFJFUE9SVCB3aGF0IGZhaWxlZCwgbm90IHNvIGl0IGNhbiBiZSBpZ25vcmVkOiBzZWVcbi8vIGZhaWxlZFBhZ2VOYW1lcygpIGFuZCB0aGUgZmFpbHVyZSBnYXRlIHRoYXQgdXNlcyBpdC5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlIHtcblxuICBwcml2YXRlIF9yZXBvcnREYXRhID0gaW5qZWN0KFJlcG9ydERhdGEpO1xuICBwcml2YXRlIF9maWx0ZXJTdGF0ZSA9IGluamVjdChSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIF9maWx0ZXJPcHRpb25zID0gaW5qZWN0KFJlcG9ydEZpbHRlck9wdGlvbnNTZXJ2aWNlKTtcblxuICAvLyBsaXN0Um93cyBpcyBob3cgbWFueSByb3dzIGVhY2ggbGlzdCBmZXRjaGVzOiB0aGUgcmVuZGVyZXIncyBvd24gY2FwLCBzaW5jZVxuICAvLyBhIFBERiB0YWJsZSBjb250aW51ZXMgb250byBleHRyYSBwYWdlcyBhbmQgYSBzbGlkZSB0YWJsZSBjYW5ub3QuXG4gIC8vXG4gIC8vIFRoZSBzY3JlZW4gaXMgcmVhZCBvbmNlLCB3aGVuIHRoZSBleHBvcnQgc3RhcnRzIChzbmFwc2hvdCk6IGV2ZXJ5IHRpbGUsXG4gIC8vIGV2ZXJ5IHZhbHVlcyBqb2IsIHRoZSBmaWx0ZXIgbGluZXMgYW5kIHRoZSBjb3ZlciByZWFkIHRoYXQgY29weSwgc28gYVxuICAvLyBmaWx0ZXIgY2hhbmdlZCB3aGlsZSB0aGUgdGlsZXMgYXJlIGZldGNoZWQgcmVhY2hlcyBub25lIG9mIHRoZW0uIEEgcmV0cnlcbiAgLy8gY29sbGVjdHMgYWdhaW4sIGFuZCBzbyByZWFkcyB0aGUgc2NyZWVuIGFzIGl0IGlzIHRoZW4uXG4gIHB1YmxpYyBjb2xsZWN0KHJlcG9ydDogUmVwb3J0LCBsaXN0Um93czogbnVtYmVyKTogT2JzZXJ2YWJsZTxDb2xsZWN0ZWRSZXBvcnQ+IHtcbiAgICBjb25zdCBqb2JzID0gdGhpcy5fam9icyhyZXBvcnQpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5zbmFwc2hvdChyZXBvcnQpO1xuICAgIGNvbnN0IGZvcm1hdENvbnRleHQgPSBzbmFwc2hvdC5mb3JtYXRDb250ZXh0O1xuXG4gICAgLy8gUmVsZWFzZWQgYSBmZXcgYXQgYSB0aW1lIHJhdGhlciB0aGFuIGFsbCBhdCBvbmNlLCBhIHBhZ2UncyB2YWx1ZXMgaW4gdGhlXG4gICAgLy8gc2FtZSBxdWV1ZSBhcyB0aGUgdGlsZXMsIHNvIHRoZXkgbmV2ZXIgYWRkIHRvIHRoZSBxdWVyaWVzIGFscmVhZHlcbiAgICAvLyBydW5uaW5nLiBtZXJnZU1hcCBjb21wbGV0ZXMgb3V0IG9mIG9yZGVyLCBzbyBlYWNoIHJlc3VsdCBjYXJyaWVzIHRoZSBqb2JcbiAgICAvLyBpdCBjYW1lIGZyb20gYW5kIHRoZSByb3dzIGFyZSBmaWxlZCBieSBpbmRleCDigJQgdGhlIGRlY2sncyBwYWdlIG9yZGVyXG4gICAgLy8gY2FuJ3QgZGVwZW5kIG9uIHdoaWNoIHF1ZXJ5IGhhcHBlbmVkIHRvIGZpbmlzaCBmaXJzdC5cbiAgICBjb25zdCBhbGwkID0gam9icy5sZW5ndGhcbiAgICAgID8gZnJvbShqb2JzLm1hcCgoam9iLCBpbmRleCkgPT4gKHsgam9iLCBpbmRleCB9KSkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKFxuICAgICAgICAgICAgKHsgam9iLCBpbmRleCB9KSA9PiB0aGlzLl9ydW5Kb2IocmVwb3J0LCBqb2IsIGxpc3RSb3dzLCBzbmFwc2hvdClcbiAgICAgICAgICAgICAgLnBpcGUobWFwKChyZXN1bHQpID0+ICh7IHJlc3VsdCwgaW5kZXggfSkpKSxcbiAgICAgICAgICAgIEVYUE9SVF9DT05DVVJSRU5DWSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHRvQXJyYXkoKSxcbiAgICAgICAgKVxuICAgICAgOiBvZihbXSBhcyB7IHJlc3VsdDogQ29sbGVjdFJlc3VsdDsgaW5kZXg6IG51bWJlciB9W10pO1xuXG4gICAgLy8gVGhlIGxpbmVzIGFuZCB0aGUgZmlsdGVyIHRva2VucyByaWRlIGFsb25nc2lkZSB0aGUgY29tcG9uZW50IGRhdGFcbiAgICAvLyByYXRoZXIgdGhhbiBiZWluZyBidWlsdCBhdCB0aGUgZW5kLCBiZWNhdXNlIG5hbWluZyBhIHNlbGVjdCBmaWx0ZXInc1xuICAgIC8vIHZhbHVlcyBpcyBpdHNlbGYgYSByZXF1ZXN0LlxuICAgIHJldHVybiBmb3JrSm9pbih7IGNvbGxlY3RlZDogYWxsJCwgd29yZGluZzogdGhpcy5leHBvcnRXb3JkaW5nKHJlcG9ydCwgc25hcHNob3QpIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7IGNvbGxlY3RlZCwgd29yZGluZyB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMuX2ZpbGUocmVwb3J0LCBjb2xsZWN0ZWQsIGZvcm1hdENvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlcG9ydCxcbiAgICAgICAgICAgIC4uLmZpbGUsXG4gICAgICAgICAgICBmaWx0ZXJTdW1tYXJ5OiBjb3ZlckZpbHRlckxpbmVzKHNuYXBzaG90LCB3b3JkaW5nLmxpbmVzLCBmaWxlLnBhZ2VzLCB3b3JkaW5nLnRpdGxlcyksXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZHM6IHdvcmRpbmcuZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgY29udGV4dExpbmVzOiB0aGlzLl9jb250ZXh0TGluZXMocmVwb3J0KSxcbiAgICAgICAgICAgIGZvcm1hdENvbnRleHQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgLy8gVGhlIHNjcmVlbiBhcyBvbmUgZXhwb3J0IHJlYWRzIGl0OiB0aGUgc3RhdGUgc25hcHNob3QsIGVhY2ggZ3JvdXAncyB2YWx1ZVxuICAvLyBhbmQgbGl2ZSBwcmVzZXQsIGVhY2ggdGlsZSdzIGZpbHRlciBlbnRyaWVzIGFuZCBzdGF0ZSAodGlsZURhdGFTdGF0ZSksXG4gIC8vIGVhY2ggdmFsdWUncyBmaWx0ZXIgZW50cmllcywgdGhlIGdyYWluLCB0aGUgZmVhdHVyZXMgc2VydmVkIGFuZCB0aGVcbiAgLy8gZm9ybWF0LiBBIHZhbHVlJ3MgZW50cmllcyBhcmUgcmVhZCBoZXJlIHRvbywgc28gdGhlXG4gIC8vIG51bWJlcnMgaW4gYSBmaWxlJ3MgdGV4dCBhcmUgZmlsdGVyZWQgYXMgaXRzIHRpbGVzIGFyZSwgd2hhdGV2ZXIgdGhlIGJhclxuICAvLyBkb2VzIHdoaWxlIHRoZSBleHBvcnQgcnVucy5cbiAgcHVibGljIHNuYXBzaG90KHJlcG9ydDogUmVwb3J0KTogUmVwb3J0RXhwb3J0U25hcHNob3Qge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fZmlsdGVyU3RhdGUuc25hcHNob3QoKTtcbiAgICBjb25zdCB0aWxlcyA9IChyZXBvcnQucGFnZXMgPz8gW10pXG4gICAgICAuZmxhdE1hcCgocGFnZSkgPT4gcGFnZS5jb21wb25lbnRzID8/IFtdKVxuICAgICAgLmZpbHRlcigoY29tcG9uZW50KSA9PiBpc1RpbGUoY29tcG9uZW50KSk7XG4gICAgY29uc3QgdmFsdWVzID0gcmVwb3J0Q29tcG9uZW50cyhyZXBvcnQpXG4gICAgICAuZmlsdGVyKChjb21wb25lbnQpID0+IGNvbXBvbmVudC50eXBlID09PSAndmFsdWUnKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZSxcbiAgICAgIC4uLnRoaXMuX2dyb3VwVmFsdWVzKHJlcG9ydCksXG4gICAgICBmaWx0ZXJzOiBPYmplY3QuZnJvbUVudHJpZXModGlsZXMubWFwKCh0aWxlKSA9PiBbdGlsZS5pZCwgdGhpcy5fZmlsdGVyU3RhdGUucmVzb2x2ZUZvckNvbXBvbmVudCh0aWxlKV0pKSxcbiAgICAgIHZhbHVlRmlsdGVyczogT2JqZWN0LmZyb21FbnRyaWVzKHZhbHVlc1xuICAgICAgICAubWFwKCh2YWx1ZSkgPT4gW3ZhbHVlLmlkLCB0aGlzLl9maWx0ZXJTdGF0ZS5yZXNvbHZlRm9yQ29tcG9uZW50KHZhbHVlKV0pKSxcbiAgICAgIHN0YXRlczogT2JqZWN0LmZyb21FbnRyaWVzKHRpbGVzLm1hcCgodGlsZSkgPT4gW3RpbGUuaWQsIHRoaXMuX3RpbGVTdGF0ZShyZXBvcnQsIHRpbGUsIHN0YXRlKV0pKSxcbiAgICAgIGdyaWRFeHBhbnNpb25zOiBPYmplY3QuZnJvbUVudHJpZXModGlsZXNcbiAgICAgICAgLm1hcCgodGlsZSkgPT4gW3RpbGUuaWQsIHRoaXMuX2ZpbHRlclN0YXRlLmdyaWRFeHBhbnNpb24odGlsZSldIGFzIGNvbnN0KVxuICAgICAgICAuZmlsdGVyKChbLCBleHBhbnNpb25dKSA9PiAhIWV4cGFuc2lvbikpLFxuICAgICAgZnJlcXVlbmN5OiB0aGlzLl9maWx0ZXJTdGF0ZS5mcmVxdWVuY3koKSxcbiAgICAgIGZlYXR1cmVzOiBvZmZlcmVkVmlld2VyRmVhdHVyZXMocmVwb3J0LnZpZXdlckZlYXR1cmVzKSxcbiAgICAgIGZvcm1hdENvbnRleHQ6IHRoaXMuX2ZpbHRlclN0YXRlLmZvcm1hdENvbnRleHQoKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gSG93IGFuIGV4cG9ydCB3b3JkcyB0aGUgc2NyZWVuLCBvdmVyIGEgc25hcHNob3QgKGBwYWdlSWRgIGZvciBhIFRoaXNcbiAgLy8gUGFnZSB6aXApOiBpdHMgZmlsdGVyIGxpbmVzIChleHBvcnRMaW5lczogdGhlIGNvdmVyJ3MsIGFuZCB0aGUgemlwJ3NcbiAgLy8gZmlsdGVyTGluZXMpLCB3aGF0IGVhY2gge3tmaWx0ZXIuPGlkPn19IHRva2VuIHByaW50cywgYW5kIGVhY2ggdGlsZSdzXG4gIC8vIHRpdGxlIGFzIHRoZSBjYW52YXMgaGVhZGVyIHJlYWRzIGl0ICh0aGUgemlwIG5hbWVzIGl0cyBmaWxlcyBhZnRlclxuICAvLyB0aGVtKS4gQSBzZWxlY3QncyBwaWNrcyBhcmUgbmFtZWQgb25jZSBmb3IgYWxsIHRocmVlLCBhcyB0aGUgcmVwb3J0IGJhclxuICAvLyBuYW1lcyB0aGVtLCBzbyBubyB0b2tlbiBpbiBhIGZpbGUgcmVhZHMgYXMgbG9hZGluZy5cbiAgcHVibGljIGV4cG9ydFdvcmRpbmcoXG4gICAgcmVwb3J0OiBSZXBvcnQsXG4gICAgc25hcHNob3Q6IFJlcG9ydEV4cG9ydFNuYXBzaG90LFxuICAgIHBhZ2VJZDogbnVtYmVyIHwgbnVsbCA9IG51bGwsXG4gICk6IE9ic2VydmFibGU8UmVwb3J0RXhwb3J0V29yZGluZz4ge1xuICAgIGNvbnN0IG5hbWVzID0gdGhpcy5fcGlja05hbWVyKHJlcG9ydCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyRmllbGRzKHJlcG9ydCwgc25hcHNob3QsIG5hbWVzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoZmlsdGVyRmllbGRzKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGl0bGVzID0gdGhpcy5fZXhwb3J0VGl0bGVzKHJlcG9ydCwgcGFnZUlkLCBmaWx0ZXJGaWVsZHMpO1xuXG4gICAgICAgICAgcmV0dXJuIGV4cG9ydExpbmVzKHsgcmVwb3J0LCBzbmFwc2hvdCwgcGFnZUlkLCBuYW1lcywgdGl0bGVzIH0pXG4gICAgICAgICAgICAucGlwZShtYXAoKGxpbmVzKSA9PiAoeyBsaW5lcywgZmlsdGVyRmllbGRzLCB0aXRsZXMgfSkpKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgLy8gVGhlIHRpdGxlIG9mIGVhY2ggdGlsZSwgYnkgY29tcG9uZW50IGlkLCBhcyB0aGUgY2FudmFzIGhlYWRlciByZWFkcyBpdDpcbiAgLy8gaXRzIHRva2VucyBmaWxsZWQgd2l0aCBpdHMgcGFnZSdzIGZpZWxkcyBhbmQgdGhlIGZpbHRlcnMgdGhlIHBhZ2UgcmVhZHNcbiAgLy8gKGxheWVyRmlsdGVyRmllbGRzKS4gVGhlIHdob2xlIHJlcG9ydCdzIG9yIG9uZSBwYWdlJ3MgKHBhZ2VJZCkuIEFuXG4gIC8vIHVudGl0bGVkIHRpbGUgaXMgbGVmdCBvdXQ6IHRoZSBzZXJ2ZXIgbmFtZXMgaXRzIGZpbGUgYnkgaXRzIHR5cGUuXG4gIHByaXZhdGUgX2V4cG9ydFRpdGxlcyhcbiAgICByZXBvcnQ6IFJlcG9ydCxcbiAgICBwYWdlSWQ6IG51bWJlciB8IG51bGwsXG4gICAgZmllbGRzOiBSZWNvcmQ8bnVtYmVyLCBUZXh0RmlsdGVyRmllbGQ+LFxuICApOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKChyZXBvcnQucGFnZXMgPz8gW10pXG4gICAgICAubWFwKChwYWdlLCBpbmRleCkgPT4gKHsgcGFnZSwgaW5kZXggfSkpXG4gICAgICAuZmlsdGVyKCh7IHBhZ2UgfSkgPT4gIXBhZ2VJZCB8fCBwYWdlLmlkID09PSBwYWdlSWQpXG4gICAgICAuZmxhdE1hcCgoeyBwYWdlLCBpbmRleCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuczogVGV4dFRva2VuQ29udGV4dCA9IHtcbiAgICAgICAgICBwYWdlTnVtYmVyOiBpbmRleCArIDEsXG4gICAgICAgICAgcGFnZU5hbWU6IHBhZ2UubmFtZSB8fCBgUGFnZSAke2luZGV4ICsgMX1gLFxuICAgICAgICAgIHJlcG9ydE5hbWU6IHJlcG9ydC5uYW1lLFxuICAgICAgICAgIGZpbHRlcnM6IGxheWVyRmlsdGVyRmllbGRzKGZpZWxkcywgcmVwb3J0LmZpbHRlckdyb3VwcyA/PyBbXSwgcGFnZS5pZCksXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIChwYWdlLmNvbXBvbmVudHMgPz8gW10pXG4gICAgICAgICAgLmZpbHRlcigoY29tcG9uZW50KSA9PiBpc1RpbGUoY29tcG9uZW50KSAmJiAhIWNvbXBvbmVudC50aXRsZSlcbiAgICAgICAgICAubWFwKChjb21wb25lbnQpOiBbbnVtYmVyLCBzdHJpbmddID0+IFtjb21wb25lbnQuaWQsIGZpbGxUaXRsZVRva2Vucyhjb21wb25lbnQudGl0bGUsIHRva2VucyldKTtcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8vIEV2ZXJ5IHJlcXVlc3QgdGhlIGV4cG9ydCBtYWtlcywgaW4gcGFnZSBvcmRlcjogZWFjaCBwYWdlJ3MgdGlsZXMsIHRoZW4gdGhlXG4gIC8vIHZhbHVlcyBpdHMgdGV4dCBzaG93czsgdGhlIGhlYWRlciBhbmQgZm9vdGVyJ3MgdmFsdWVzIGxhc3QsIHdoZW4gc29tZSBwYWdlXG4gIC8vIHNob3dzIHRoZSBtYXN0ZXIuIFRleHQgYmxvY2tzIGhhdmUgbm90aGluZyB0byBmZXRjaCBvZiB0aGVpciBvd24g4oCUIHRoZXlcbiAgLy8gcmlkZSB0aHJvdWdoIHdpdGggbm8gZGF0YSwgYW5kIHRoZWlyIHRva2VucyBhcmUgZmlsbGVkIGZyb20gdGhlaXIgbGF5ZXInc1xuICAvLyB2YWx1ZXMuIEEgdmFsdWUgaXMgcmVhZCBvbmx5IHRocm91Z2ggaXRzIGxheWVyJ3MgcmVxdWVzdCwgbmV2ZXIgYXMgYSB0aWxlXG4gIC8vIChpc0V4cG9ydFNsb3QpLiBUaGUgaGVhZGVyL2Zvb3RlciBibG9ja3MgKHJlcG9ydC5tYXN0ZXIpIGFyZSByZWFkIGJ5IHRoZVxuICAvLyByZW5kZXJlcnMgc3RyYWlnaHQgb2ZmIHRoZSByZXBvcnQuXG4gIHByaXZhdGUgX2pvYnMocmVwb3J0OiBSZXBvcnQpOiBDb2xsZWN0Sm9iW10ge1xuICAgIGNvbnN0IGpvYnM6IENvbGxlY3RKb2JbXSA9IFtdO1xuXG4gICAgcmVwb3J0LnBhZ2VzLmZvckVhY2goKHBhZ2UsIHBhZ2VJbmRleCkgPT4ge1xuICAgICAgcGFnZS5jb21wb25lbnRzXG4gICAgICAgIC5maWx0ZXIoaXNFeHBvcnRTbG90KVxuICAgICAgICAuZm9yRWFjaCgoY29tcG9uZW50KSA9PiBqb2JzLnB1c2goeyBraW5kOiAnY29tcG9uZW50JywgcGFnZUluZGV4LCBjb21wb25lbnQgfSkpO1xuICAgICAgam9icy5wdXNoKC4uLnRoaXMuX3ZhbHVlc0pvYnMocGFnZSwgcGFnZUluZGV4KSk7XG4gICAgfSk7XG5cbiAgICBpZiAocmVwb3J0Lm1hc3RlciAmJiByZXBvcnQucGFnZXMuc29tZSgocGFnZSkgPT4gIXBhZ2UubWFzdGVySGlkZGVuKSkge1xuICAgICAgam9icy5wdXNoKC4uLnRoaXMuX3ZhbHVlc0pvYnMocmVwb3J0Lm1hc3RlciwgbnVsbCkpO1xuICAgIH1cblxuICAgIHJldHVybiBqb2JzO1xuICB9XG5cbiAgLy8gQSBsYXllcidzIG9uZSB2YWx1ZXMgam9iLCBvciBub25lIHdoZW4gaXRzIHRleHQgc2hvd3Mgbm8gdmFsdWUuXG4gIHByaXZhdGUgX3ZhbHVlc0pvYnMobGF5ZXI6IFJlcG9ydFBhZ2UgfCBSZXBvcnRNYXN0ZXIsIHBhZ2VJbmRleDogbnVtYmVyIHwgbnVsbCk6IENvbGxlY3RKb2JbXSB7XG4gICAgY29uc3QgdGV4dHMgPSBsYXllci5jb21wb25lbnRzLmZpbHRlcigoY29tcG9uZW50KSA9PiBjb21wb25lbnQudHlwZSA9PT0gJ3RleHQnKTtcbiAgICBjb25zdCB2YWx1ZXMgPSBsYXllci52YWx1ZXMgPz8gW107XG4gICAgY29uc3Qgc2hvd24gPSBzaG93blZhbHVlcyh2YWx1ZXMsIHRleHRzKTtcblxuICAgIHJldHVybiBzaG93bi5sZW5ndGhcbiAgICAgID8gW3sga2luZDogJ3ZhbHVlcycsIHBhZ2VJbmRleCwgcGFnZUlkOiBsYXllci5pZCwgdmFsdWVzLCBjb21wb25lbnRzOiBzaG93biB9XVxuICAgICAgOiBbXTtcbiAgfVxuXG4gIC8vIE9uZSBxdWV1ZWQgam9iLCBpdHMgcmVzdWx0IHRhZ2dlZCB3aXRoIHRoZSBwYWdlIGl0IGlzIGZpbGVkIHVuZGVyLlxuICBwcml2YXRlIF9ydW5Kb2IoXG4gICAgcmVwb3J0OiBSZXBvcnQsXG4gICAgam9iOiBDb2xsZWN0Sm9iLFxuICAgIGxpc3RSb3dzOiBudW1iZXIsXG4gICAgc25hcHNob3Q6IFJlcG9ydEV4cG9ydFNuYXBzaG90LFxuICApOiBPYnNlcnZhYmxlPENvbGxlY3RSZXN1bHQ+IHtcbiAgICBpZiAoam9iLmtpbmQgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50RGF0YShyZXBvcnQsIGpvYi5jb21wb25lbnQsIGxpc3RSb3dzLCBzbmFwc2hvdClcbiAgICAgICAgLnBpcGUobWFwKChpdGVtKTogQ29sbGVjdFJlc3VsdCA9PiAoeyBraW5kOiAnY29tcG9uZW50JywgcGFnZUluZGV4OiBqb2IucGFnZUluZGV4LCBpdGVtIH0pKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VWYWx1ZXMocmVwb3J0LCBqb2IucGFnZUlkLCBqb2IudmFsdWVzLCBqb2IuY29tcG9uZW50cywgc25hcHNob3QpXG4gICAgICAucGlwZShtYXAoKGNvbGxlY3RlZCk6IENvbGxlY3RSZXN1bHQgPT4gKHsga2luZDogJ3ZhbHVlcycsIHBhZ2VJbmRleDogam9iLnBhZ2VJbmRleCwgY29sbGVjdGVkIH0pKSk7XG4gIH1cblxuICBwcml2YXRlIF9jb21wb25lbnREYXRhKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIGxpc3RSb3dzOiBudW1iZXIsXG4gICAgc25hcHNob3Q6IFJlcG9ydEV4cG9ydFNuYXBzaG90LFxuICApOiBPYnNlcnZhYmxlPENvbGxlY3RlZENvbXBvbmVudD4ge1xuICAgIGlmIChjb21wb25lbnQudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXR1cm4gb2YoeyBjb21wb25lbnQsIGRhdGE6IG51bGwsIGhpZGRlbkNvbHVtbnM6IFtdIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcnMgPSBzbmFwc2hvdC5maWx0ZXJzW2NvbXBvbmVudC5pZF0gPz8gW107XG5cbiAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09ICdncmlkJykge1xuICAgICAgcmV0dXJuIHRoaXMuX2dyaWRUYWJsZShyZXBvcnQsIGNvbXBvbmVudCwgZmlsdGVycywgc25hcHNob3Quc3RhdGVzW2NvbXBvbmVudC5pZF0gPz8ge30sIGxpc3RSb3dzLCBzbmFwc2hvdCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHRpbGUncyBvd24gc3RhdGUsIHRoZSBvbmUgaXRzIHNjcmVlbiBhbmQgaXRzIENTViBjYXJyeVxuICAgIC8vICh0aWxlRGF0YVN0YXRlKTogYSB0aWxlIHRoYXQgZm9sbG93cyB0aGUgZ3JvdXAtYnkgcmUtYnVja2V0cyBhdCB0aGVcbiAgICAvLyB2aWV3ZXIncyBncmFpbiwgYSB0aW1lLXNlcmllcyBjaGFydCBrZWVwcyBpdHMgZHJpbGwgcGF0aCwgYSBsaXN0IHJlYWRzXG4gICAgLy8gaW4gdGhlIHNjcmVlbidzIG9yZGVyIGFuZCBob2xkcyB0aGUgc2NyZWVuJ3Mgcm93cy4gQSBsaXN0IGFkZHMgaXRzXG4gICAgLy8gZXhwb3J0IHBhZ2luZy5cbiAgICBjb25zdCB0aWxlU3RhdGUgPSBzbmFwc2hvdC5zdGF0ZXNbY29tcG9uZW50LmlkXSA/PyB7fTtcbiAgICBjb25zdCBzdGF0ZTogQ29tcG9uZW50RGF0YVN0YXRlID0gY29tcG9uZW50LnR5cGUgPT09ICdsaXN0J1xuICAgICAgPyB7IC4uLnRpbGVTdGF0ZSwgcGFnZTogMSwgcGFnZVNpemU6IGxpc3RSb3dzIH1cbiAgICAgIDogeyAuLi50aWxlU3RhdGUgfTtcbiAgICAvLyBUaGUgdGFibGUgbGVhdmVzIG91dCB0aGUgY29sdW1ucyB0aGUgdmlld2VyIGhpZC4gVGhlIHJvd3MgYXJlIGZldGNoZWRcbiAgICAvLyB3aG9sZSwgYXMgdGhlIHNjcmVlbiBmZXRjaGVzIHRoZW0gKHRoZSBzZXJ2ZXIgcmVhZHMgaGlkZGVuQ29sdW1ucyBmb3IgYVxuICAgIC8vIENTViBvbmx5KSwgYW5kIHRoZSByZW5kZXJlcnMgZHJvcCB0aGUgY2VsbHMuXG4gICAgY29uc3QgaGlkZGVuQ29sdW1ucyA9IFsuLi4oc3RhdGUuaGlkZGVuQ29sdW1ucyA/PyBbXSldO1xuXG4gICAgLy8gaGFuZGxlcnM6IGZhbHNlIGtlZXBzIHRoZSBhcHAncyBnbG9iYWwgZXJyb3IgZGlhbG9nIG91dCBvZiB0aGlzLiBBIGZhaWxlZFxuICAgIC8vIHRpbGUgaXMgcmVwb3J0ZWQgb25jZSwgYnkgdGhlIGZhaWx1cmUgZ2F0ZSwgbmFtaW5nIHRoZSBwYWdlcyBpdCBjb3N0IOKAlFxuICAgIC8vIG5ldmVyIGFzIHRlbiBzdGFja2VkIG1vZGFscyBjYXJyeWluZyB0aGUgZGF0YWJhc2UncyBvd24gd29yZGluZy5cbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0RGF0YS5jb21wb25lbnREYXRhKHJlcG9ydC5pZCwgY29tcG9uZW50LmlkLCBmaWx0ZXJzLCBzdGF0ZSwgdHJ1ZSwgeyBoYW5kbGVyczogZmFsc2UgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGRhdGE6IENvbXBvbmVudERhdGEpID0+IHRoaXMuX2NvbGxlY3RlZChjb21wb25lbnQsIGRhdGEsIHN0YXRlLnNlYXJjaCwgaGlkZGVuQ29sdW1ucywgc25hcHNob3QpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih7IGNvbXBvbmVudCwgZGF0YTogbnVsbCwgaGlkZGVuQ29sdW1ucyB9KSksXG4gICAgICApO1xuICB9XG5cbiAgLy8gQSB0aWxlJ3Mgc3RhdGUgYXMgYW4gZXhwb3J0IHJlYWRzIGl0OiB0aWxlRGF0YVN0YXRlLCBhbmQgZm9yIGEgdGFibGUgdGhlXG4gIC8vIGxheW91dCB0aGUgdmlld2VyIHB1dCBpdCBpbiwgYWJzZW50IHdoaWxlIGl0IHNob3dzIGl0cyBzdG9yZWQgb25lLlxuICBwcml2YXRlIF90aWxlU3RhdGUocmVwb3J0OiBSZXBvcnQsIHRpbGU6IFJlcG9ydENvbXBvbmVudCwgc3RhdGU6IFJlcG9ydFN0YXRlU25hcHNob3QpOiBDb21wb25lbnREYXRhU3RhdGUge1xuICAgIGNvbnN0IGxheW91dCA9IHRpbGUudHlwZSA9PT0gJ2dyaWQnID8gdGhpcy5fZmlsdGVyU3RhdGUuZ3JpZFNlc3Npb25MYXlvdXQodGlsZSkgOiBudWxsO1xuXG4gICAgcmV0dXJuIHsgLi4udGlsZURhdGFTdGF0ZShyZXBvcnQsIHRpbGUsIHN0YXRlKSwgLi4uKGxheW91dCA/IHsgbGF5b3V0IH0gOiB7fSkgfTtcbiAgfVxuXG4gIC8vIEEgdGFibGUgdGlsZSBhcyB0aGUgc2NyZWVuIGRyYXdzIGl0LCByZWFkIGFwYXJ0IGZyb20gdGhlIHNjcmVlbiB0aHJvdWdoXG4gIC8vIGFuIGV4cG9ydCBzb3VyY2UgKHJlYWRHcmlkVGFibGUoKSk6IGluIHRoZSB2aWV3ZXIncyBsYXlvdXQgd2l0aCB0aGVcbiAgLy8gZ3JvdXBzIHRoZXkgbGVmdCBvcGVuLCBhdCBtb3N0IGByb3dzYCBsaW5lcyBhbmQgR1JJRF9FWFBPUlRfQ09MVU1OU1xuICAvLyBwaXZvdCBjb2x1bW5zLCBlYWNoIHZhbHVlIHdyaXR0ZW4gYnkgdGhlIHNjcmVlbidzIGZvcm1hdHRlciBvbmNlIHRoZVxuICAvLyByZWFkJ3MgcmVwb3J0IGxpbmUgaXMgaW4uIFRoYXQgbGluZSBzdGFuZHMgaW4gYXMgaXRzIGRhdGEsIHNvIHRoZSB0aXRsZSxcbiAgLy8gdGhlIHN1YnRpdGxlIGFuZCB0aGUgbm90ZXMgcmVhZCBpdCBhcyBhIGxpc3Qncy4gQSBmYWlsZWQgcmVhZCBpcyBhXG4gIC8vIGZhaWxlZCB0aWxlLlxuICBwcml2YXRlIF9ncmlkVGFibGUoXG4gICAgcmVwb3J0OiBSZXBvcnQsXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgZmlsdGVyczogUmVzb2x2ZWRGaWx0ZXJWYWx1ZVtdLFxuICAgIHN0YXRlOiBDb21wb25lbnREYXRhU3RhdGUsXG4gICAgcm93czogbnVtYmVyLFxuICAgIHNuYXBzaG90OiBSZXBvcnRFeHBvcnRTbmFwc2hvdCxcbiAgKTogT2JzZXJ2YWJsZTxDb2xsZWN0ZWRDb21wb25lbnQ+IHtcbiAgICBjb25zdCBsb2NhbGUgPSBzbmFwc2hvdC5mb3JtYXRDb250ZXh0LmxvY2FsZTtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgUmVwb3J0R3JpZFNvdXJjZSh0aGlzLl9yZXBvcnREYXRhLCByZXBvcnQuaWQsIGNvbXBvbmVudC5pZCwgeyBpc0V4cG9ydDogdHJ1ZSwgbG9jYWxlOiAoKSA9PiBsb2NhbGUgfSk7XG4gICAgY29uc3Qgc2NyZWVuID0gKCkgPT4gcmVwb3J0R3JpZEZvcm1hdHRlcih7XG4gICAgICBmb3JtYXQ6IHNuYXBzaG90LmZvcm1hdENvbnRleHQsXG4gICAgICB0aW1lem9uZTogdGhpcy5fZmlsdGVyU3RhdGUudGltZXpvbmUoKSxcbiAgICAgIHJlcG9ydDogc291cmNlLnJlcG9ydCgpLFxuICAgIH0pO1xuICAgIGNvbnN0IGZvcm1hdHRlcjogR3JpZEZvcm1hdHRlciA9IHtcbiAgICAgIGZvcm1hdDogKHZhbHVlLCBmaWVsZCwgcGxhY2VtZW50KSA9PiBzY3JlZW4oKS5mb3JtYXQodmFsdWUsIGZpZWxkLCBwbGFjZW1lbnQpLFxuICAgICAgdG9OdW1iZXI6ICh0ZXh0LCBmaWVsZCwgcGxhY2VtZW50KSA9PiBzY3JlZW4oKS50b051bWJlcih0ZXh0LCBmaWVsZCwgcGxhY2VtZW50KSxcbiAgICB9O1xuICAgIGNvbnN0IGxheW91dCA9IHN0YXRlLmxheW91dCA/PyBhdXRob3JlZEdyaWRMYXlvdXQoY29tcG9uZW50KTtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBmaWx0ZXJzLFxuICAgICAgLi4uKHN0YXRlLm1hdGNoQW55R3JvdXBJZHM/Lmxlbmd0aCA/IHsgbWF0Y2hBbnlHcm91cElkczogc3RhdGUubWF0Y2hBbnlHcm91cElkcyB9IDoge30pLFxuICAgICAgLi4uKHN0YXRlLmZyZXF1ZW5jeSA/IHsgZnJlcXVlbmN5OiBzdGF0ZS5mcmVxdWVuY3kgfSA6IHt9KSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlYWRHcmlkVGFibGUoc291cmNlLCBsYXlvdXQsIHBhcmFtcywgc25hcHNob3QuZ3JpZEV4cGFuc2lvbnM/Lltjb21wb25lbnQuaWRdLCB7IHJvd3MsIGNvbHVtbnM6IEdSSURfRVhQT1JUX0NPTFVNTlMgfSwgZm9ybWF0dGVyKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodGFibGUpOiBDb2xsZWN0ZWRDb21wb25lbnQgPT4gKHtcbiAgICAgICAgICBjb21wb25lbnQsXG4gICAgICAgICAgZGF0YTogeyAuLi4oc291cmNlLnJlcG9ydCgpID8/IHt9KSwgY29sdW1uczogW10sIHJvd3M6IFtdIH0gYXMgQ29tcG9uZW50RGF0YSxcbiAgICAgICAgICBoaWRkZW5Db2x1bW5zOiBbXSxcbiAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICB0YWJsZU5vdGVzOiBncmlkRXhwb3J0Tm90ZXModGFibGUsIGxheW91dCwgbG9jYWxlKSxcbiAgICAgICAgICAuLi4oKGxheW91dC5maWx0ZXJzID8/IFtdKS5sZW5ndGggPyB7IGZpbHRlcmVkOiB0cnVlIH0gOiB7fSksXG4gICAgICAgIH0pKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih7IGNvbXBvbmVudCwgZGF0YTogbnVsbCwgaGlkZGVuQ29sdW1uczogW10gfSkpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIE9uZSB0aWxlJ3MgYW5zd2VyIGFzIHRoZSByZW5kZXJlcnMgdGFrZSBpdC4gQSBzZWFyY2ggdGhlIHNlcnZlciBjb3VsZFxuICAvLyBub3QgYXBwbHkgKHNlYXJjaE5vdGU6IHRoZSBsaXN0IGhhcyBubyB0ZXh0IGNvbHVtbikgbmFycm93ZWQgbm90aGluZywgc29cbiAgLy8gdGhlIGl0ZW0gZG9lcyBub3QgY2FycnkgaXQuIEEgZHJpbGxlZCBjaGFydCBjYXJyaWVzIHRoZSBicmVhZGNydW1iIG9mIHRoZVxuICAvLyBwYXRoIGl0cyBhbnN3ZXIgYXBwbGllZCwgd2hpY2ggaXMgd2hhdCBpdHMgbnVtYmVycyB3ZXJlIHJlYWQgYXQuXG4gIHByaXZhdGUgX2NvbGxlY3RlZChcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgICBkYXRhOiBDb21wb25lbnREYXRhLFxuICAgIHNlYXJjaDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGhpZGRlbkNvbHVtbnM6IHN0cmluZ1tdLFxuICAgIHNuYXBzaG90OiBSZXBvcnRFeHBvcnRTbmFwc2hvdCxcbiAgKTogQ29sbGVjdGVkQ29tcG9uZW50IHtcbiAgICBjb25zdCBwYXRoID0gZGF0YT8uZHJpbGw/LnBhdGggPz8gW107XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29tcG9uZW50LFxuICAgICAgZGF0YSxcbiAgICAgIC4uLihzZWFyY2ggJiYgIWRhdGE/LnNlYXJjaE5vdGUgPyB7IHNlYXJjaCB9IDoge30pLFxuICAgICAgaGlkZGVuQ29sdW1ucyxcbiAgICAgIC4uLihwYXRoLmxlbmd0aCA/IHsgY3J1bWJzOiBkcmlsbENydW1iTGFiZWxzKHBhdGgsIHNuYXBzaG90LmZvcm1hdENvbnRleHQpIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEVhY2ggZ3JvdXAncyB2YWx1ZSBhcyB0aGUgYmFyIGhvbGRzIGl0IG5vdywgd2l0aCB0aGUgcmVsYXRpdmUgcmFuZ2UgYVxuICAvLyBkYXRlIHZhbHVlIHN0aWxsIGlzLiBUaGUgcGlja3MgYXJlIGNvcGllZCwgc28gdGhlIHNuYXBzaG90IGtlZXBzIHRoZW1cbiAgLy8gd2hhdGV2ZXIgdGhlIGJhciBkb2VzIG5leHQuXG4gIHByaXZhdGUgX2dyb3VwVmFsdWVzKHJlcG9ydDogUmVwb3J0KTogUGljazxSZXBvcnRFeHBvcnRTbmFwc2hvdCwgJ3ZhbHVlcycgfCAncHJlc2V0cyc+IHtcbiAgICBjb25zdCB2YWx1ZXM6IFJlY29yZDxudW1iZXIsIEZpbHRlckdyb3VwVmFsdWU+ID0ge307XG4gICAgY29uc3QgcHJlc2V0czogUmVjb3JkPG51bWJlciwgUmVwb3J0UmVsYXRpdmVSYW5nZT4gPSB7fTtcblxuICAgIChyZXBvcnQuZmlsdGVyR3JvdXBzID8/IFtdKS5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9maWx0ZXJTdGF0ZS52YWx1ZShncm91cC5pZCk7XG4gICAgICBjb25zdCBwcmVzZXQgPSB0aGlzLl9maWx0ZXJTdGF0ZS5saXZlUHJlc2V0KGdyb3VwLmlkKTtcblxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlc1tncm91cC5pZF0gPSB7XG4gICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgLi4uKHZhbHVlLnZhbHVlcyA/IHsgdmFsdWVzOiBbLi4udmFsdWUudmFsdWVzXSB9IDoge30pLFxuICAgICAgICAgIC4uLih2YWx1ZS5leGNsdWRlVmFsdWVzID8geyBleGNsdWRlVmFsdWVzOiBbLi4udmFsdWUuZXhjbHVkZVZhbHVlc10gfSA6IHt9KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVzZXQpIHtcbiAgICAgICAgcHJlc2V0c1tncm91cC5pZF0gPSBwcmVzZXQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyB2YWx1ZXMsIHByZXNldHMgfTtcbiAgfVxuXG4gIC8vIE9uZSBsYXllcidzIHZhbHVlcywgcmVhZCBpbiBvbmUgcmVxdWVzdCwgYXMgaXRzIHRleHQncyB0b2tlbnMgcHJpbnQgdGhlbS5cbiAgLy8gVGhlIHJlcXVlc3QgY2FycmllcyB0aGUgZmlsdGVyIHZhbHVlcyBvZiBldmVyeSB2YWx1ZSBvbiB0aGUgbGF5ZXIsIGFzIHRoZVxuICAvLyBjYW52YXMncyBkb2VzLCByZWFkIGZyb20gdGhlIGV4cG9ydCdzIHNuYXBzaG90IGxpa2UgZXZlcnkgdGlsZSdzLCBhbmRcbiAgLy8gd2hpbGUgdGhlIGdyb3VwcyBtYXRjaCAnYW55JyB0aGUgZ3JvdXBzIHRoYXQgY29tYmluZVxuICAvLyAodmFsdWVzTWF0Y2hBbnlHcm91cElkcyk6IHRoZSBzZXJ2ZXIgZGVjaWRlcyB3aGljaCB2YWx1ZXMgaXQgcmVhZHMgKHRoZVxuICAvLyBzaG93biBvbmVzIGFuZCB0aGUgb3BlcmFuZHMgb2YgdGhlIGZvcm11bGFzIGFtb25nIHRoZW0pIGFuZCBhcHBsaWVzIHRvXG4gIC8vIGVhY2ggb25seSB0aGUgZW50cmllcyBuYW1pbmcgaXRzIG93biBmaWx0ZXJzLiBoYW5kbGVyczogZmFsc2Uga2VlcHMgdGhlXG4gIC8vIGVycm9yIGRpYWxvZyBvdXQgb2YgaXQsIGFzIGZvciBhIHRpbGUuIEEgZmFpbGVkIHJlcXVlc3QgcmVhZHMgYXMgbm8gcm93cyxcbiAgLy8gc28gZXZlcnkgdmFsdWUgdGhlIHRleHQgc2hvd3MgZmFpbGVkIGFuZCB0aGUgZmFpbHVyZSBnYXRlIG5hbWVzIGl0cyBwYWdlO1xuICAvLyBvbmUgdmFsdWUncyBvd24gZXJyb3IgZmFpbHMgb25seSB0aGF0IHZhbHVlLCBhbmQgYSBmYWlsZWQgb3BlcmFuZCBmYWlsc1xuICAvLyB0aGUgZm9ybXVsYSB0aGF0IHJlYWRzIGl0LlxuICBwcml2YXRlIF9wYWdlVmFsdWVzKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIHBhZ2VJZDogbnVtYmVyLFxuICAgIHZhbHVlczogUmVwb3J0Q29tcG9uZW50W10sXG4gICAgc2hvd246IFJlcG9ydENvbXBvbmVudFtdLFxuICAgIHNuYXBzaG90OiBSZXBvcnRFeHBvcnRTbmFwc2hvdCxcbiAgKTogT2JzZXJ2YWJsZTxDb2xsZWN0ZWRWYWx1ZXM+IHtcbiAgICBjb25zdCBmb3JtYXRDb250ZXh0ID0gc25hcHNob3QuZm9ybWF0Q29udGV4dDtcbiAgICBjb25zdCBmaWx0ZXJzID0gdmFsdWVzLmZsYXRNYXAoKGNvbXBvbmVudCkgPT4gc25hcHNob3QudmFsdWVGaWx0ZXJzW2NvbXBvbmVudC5pZF0gPz8gW10pO1xuICAgIGNvbnN0IG1hdGNoQW55R3JvdXBJZHMgPSB2YWx1ZXNNYXRjaEFueUdyb3VwSWRzKHJlcG9ydCwgcGFnZUlkLCBzbmFwc2hvdC5zdGF0ZSk7XG5cbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0RGF0YS5wYWdlVmFsdWVzKHJlcG9ydC5pZCwgcGFnZUlkLCBmaWx0ZXJzLCB0cnVlLCB7IGhhbmRsZXJzOiBmYWxzZSB9LCBtYXRjaEFueUdyb3VwSWRzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocm93cykgPT4gbmV3IE1hcCgocm93cyA/PyBbXSkubWFwKChyb3cpID0+IFtyb3cuaWQsIHJvd10pKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YobmV3IE1hcDxudW1iZXIsIFJlcG9ydFBhZ2VWYWx1ZT4oKSkpLFxuICAgICAgICBtYXAoKHJvd3MpID0+ICh7XG4gICAgICAgICAgdmFsdWVzOiB0ZXh0VmFsdWVzKHZhbHVlcywgeyByb3dzIH0sIGZvcm1hdENvbnRleHQpLFxuICAgICAgICAgIGZhaWxlZFZhbHVlczogZmFpbGVkVmFsdWVLZXlzKHNob3duLCByb3dzKSxcbiAgICAgICAgfSkpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIFRoZSByZXN1bHRzIGZpbGVkIGJ5IHBhZ2UgaW4gam9iIG9yZGVyLiBBIGxheWVyIHdpdGggbm8gdmFsdWVzIGpvYiAoaXRzXG4gIC8vIHRleHQgc2hvd3Mgbm8gdmFsdWUpIGhhcyBubyBudW1iZXJzIHRvIHdhaXQgZm9yOiBpdHMgdmFsdWVzIHJlYWQgYXMgdGhlXG4gIC8vIGVtIGRhc2gsIGFuZCBub25lIG9mIHRoZW0gZmFpbGVkLlxuICBwcml2YXRlIF9maWxlKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIHJlc3VsdHM6IHsgcmVzdWx0OiBDb2xsZWN0UmVzdWx0OyBpbmRleDogbnVtYmVyIH1bXSxcbiAgICBmb3JtYXRDb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICApOiBQaWNrPENvbGxlY3RlZFJlcG9ydCwgJ3BhZ2VzJyB8ICdtYXN0ZXJWYWx1ZXMnIHwgJ21hc3RlckZhaWxlZFZhbHVlcyc+IHtcbiAgICBjb25zdCB1bnJlYWQgPSAodmFsdWVzOiBSZXBvcnRDb21wb25lbnRbXSB8IHVuZGVmaW5lZCk6IENvbGxlY3RlZFZhbHVlcyA9PiAoe1xuICAgICAgdmFsdWVzOiB0ZXh0VmFsdWVzKHZhbHVlcyA/PyBbXSwgeyByb3dzOiBuZXcgTWFwKCkgfSwgZm9ybWF0Q29udGV4dCksXG4gICAgICBmYWlsZWRWYWx1ZXM6IFtdLFxuICAgIH0pO1xuICAgIGNvbnN0IHBhZ2VzOiBDb2xsZWN0ZWRQYWdlW10gPSByZXBvcnQucGFnZXMubWFwKChwYWdlKSA9PiAoeyBwYWdlLCBjb21wb25lbnRzOiBbXSwgLi4udW5yZWFkKHBhZ2UudmFsdWVzKSB9KSk7XG4gICAgbGV0IG1hc3RlciA9IHVucmVhZChyZXBvcnQubWFzdGVyPy52YWx1ZXMpO1xuXG4gICAgWy4uLnJlc3VsdHNdXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpXG4gICAgICAuZm9yRWFjaCgoeyByZXN1bHQgfSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LmtpbmQgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgcGFnZXNbcmVzdWx0LnBhZ2VJbmRleF0uY29tcG9uZW50cy5wdXNoKHJlc3VsdC5pdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQucGFnZUluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgbWFzdGVyID0gcmVzdWx0LmNvbGxlY3RlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHBhZ2VzW3Jlc3VsdC5wYWdlSW5kZXhdLCByZXN1bHQuY29sbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICByZXR1cm4geyBwYWdlcywgbWFzdGVyVmFsdWVzOiBtYXN0ZXIudmFsdWVzLCBtYXN0ZXJGYWlsZWRWYWx1ZXM6IG1hc3Rlci5mYWlsZWRWYWx1ZXMgfTtcbiAgfVxuXG4gIC8vIFRoZSB6b25lIHRoZSBzZXJ2ZXIgcmVzb2x2ZWQsIGFzIGl0cyBJQU5BIGlkLCBhbmQgdGhlIGN1cnJlbmN5IGl0IHNheXNcbiAgLy8gdGhlIHJlcG9ydCdzIG1vbmV5IGlzIGluIChhIGxhYmVsOiBub3RoaW5nIGlzIGNvbnZlcnRlZCkuIE9ubHkgdGhlXG4gIC8vIHNlcnZlcidzIHZhbHVlcyBhcmUgcHJpbnRlZDogdGhlIGJyb3dzZXIncyB6b25lIChyZXNvbHZlUmVwb3J0VGltZXpvbmUnc1xuICAvLyBmYWxsYmFjayBmb3IgYW4gb2xkZXIgc2VydmVyKSBpcyBub3Qgd2hhdCB0aGUgbnVtYmVycyB3ZXJlIG1lYXN1cmVkIGluLFxuICAvLyBhbmQgYW4gb2xkZXIgc2VydmVyIG5hbWVzIG5vIGN1cnJlbmN5IGF0IGFsbC5cbiAgcHJpdmF0ZSBfY29udGV4dExpbmVzKHJlcG9ydDogUmVwb3J0KTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi4ocmVwb3J0LmVmZmVjdGl2ZVRpbWV6b25lID8gW2BUaW1lem9uZTogJHtyZXBvcnQuZWZmZWN0aXZlVGltZXpvbmV9YF0gOiBbXSksXG4gICAgICAuLi4ocmVwb3J0LmVmZmVjdGl2ZUN1cnJlbmN5ID8gW2BDdXJyZW5jeTogJHtyZXBvcnQuZWZmZWN0aXZlQ3VycmVuY3l9YF0gOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIC8vIEV2ZXJ5IGZpbHRlciBncm91cCBvZiB0aGUgcmVwb3J0IGFzIGl0cyB7e2ZpbHRlci48aWQ+fX0gdG9rZW4gcHJpbnRzIGl0XG4gIC8vIGluIHRoZSBmaWxlLCBhdCB0aGUgc25hcHNob3QncyB2YWx1ZXMgYW5kIGluIGl0cyBmb3JtYXQsIGFzIHRoZSBjYW52YXNcbiAgLy8gd29yZHMgaXQuIEEgc2VsZWN0J3MgcGlja3MgYXJlIG5hbWVkIGZpcnN0LCBzbyBubyB0b2tlbiBpbiB0aGUgZmlsZVxuICAvLyByZWFkcyBhcyBsb2FkaW5nLiBFYWNoIHBhZ2UgYW5kIHRoZSBoZWFkZXIgYW5kIGZvb3RlciByZWFkIHRoZWlyIG93blxuICAvLyBncm91cHMgb2YgdGhlc2UgKGxheWVyRmlsdGVyRmllbGRzKS5cbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzKFxuICAgIHJlcG9ydDogUmVwb3J0LFxuICAgIHNuYXBzaG90OiBSZXBvcnRFeHBvcnRTbmFwc2hvdCxcbiAgICBuYW1lczogUmVwb3J0RXhwb3J0TGluZXNJbnB1dFsnbmFtZXMnXSxcbiAgKTogT2JzZXJ2YWJsZTxSZWNvcmQ8bnVtYmVyLCBUZXh0RmlsdGVyRmllbGQ+PiB7XG4gICAgY29uc3QgZ3JvdXBzID0gcmVwb3J0LmZpbHRlckdyb3VwcyA/PyBbXTtcbiAgICBjb25zdCBwaWNrZWQgPSBncm91cHNcbiAgICAgIC5tYXAoKGdyb3VwKSA9PiAoeyBncm91cCwgdmFsdWVzOiB2YWx1ZVBpY2tzKHNuYXBzaG90LnZhbHVlc1tncm91cC5pZF0pIH0pKVxuICAgICAgLmZpbHRlcigoeyBncm91cCwgdmFsdWVzIH0pID0+IGdyb3VwLnR5cGUgPT09ICdzZWxlY3QnICYmIHZhbHVlcy5sZW5ndGgpO1xuICAgIGNvbnN0IG5hbWVzJCA9IHBpY2tlZC5sZW5ndGhcbiAgICAgID8gZm9ya0pvaW4ocGlja2VkLm1hcCgoeyBncm91cCwgdmFsdWVzIH0pID0+IG5hbWVzKGdyb3VwLCB2YWx1ZXMpKSlcbiAgICAgIDogb2YoW10gYXMgc3RyaW5nW11bXSk7XG5cbiAgICByZXR1cm4gbmFtZXMkLnBpcGUoXG4gICAgICBtYXAoKG5hbWVkKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5R3JvdXAgPSBuZXcgTWFwKHBpY2tlZC5tYXAoKHsgZ3JvdXAgfSwgaW5kZXgpID0+IFtncm91cC5pZCwgbmFtZWRbaW5kZXhdXSkpO1xuXG4gICAgICAgIHJldHVybiB0ZXh0RmlsdGVyRmllbGRzKFxuICAgICAgICAgIGdyb3VwcyxcbiAgICAgICAgICAoZ3JvdXBJZCkgPT4gc25hcHNob3QudmFsdWVzW2dyb3VwSWRdLFxuICAgICAgICAgIHNuYXBzaG90LmZvcm1hdENvbnRleHQubG9jYWxlLFxuICAgICAgICAgIChncm91cCkgPT4gYnlHcm91cC5nZXQoZ3JvdXAuaWQpLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIE5hbWVzIGEgc2VsZWN0IGdyb3VwJ3MgcGlja3MgKGtlcHQgb3IgbGVmdCBvdXQpIGZvciBvbmUgZXhwb3J0LCB0aGVpclxuICAvLyBzdG9yZWQgaWRzIHJlc29sdmVkIHRvIHRoZSBzYW1lIG5hbWVzIHRoZSBvbi1zY3JlZW4gY2hpcHMgc2hvdyDigJQgYSBjb3ZlclxuICAvLyByZWFkaW5nIFwiT3JnYW5pemF0aW9uOiA4Nzc0LCA4Nzc3XCIgdGVsbHMgdGhlIHJlYWRlciBub3RoaW5nIGFib3V0IHdoYXRcbiAgLy8gdGhlIHJlcG9ydCBjb3ZlcnMuIEVhY2ggZ3JvdXAncyBmdWxsIGxpc3QgaXMgcmVhZCBvbmNlIGZvciB0aGUgZXhwb3J0LFxuICAvLyB3aGF0ZXZlciBuYW1lcyBpdHMgcGlja3M6IGl0cyBmaWx0ZXIgbGluZSwgaXRzIHRva2VuLCBhIHRpdGxlLlxuICAvL1xuICAvLyBVc2VzIHRoZSByZXBvcnQgYmFyJ3Mgb3duIG5hbWVzIGFuZCByZXNvbHZlciBzbyB0aGUgdHdvIGNhbid0IGRyaWZ0OiBhXG4gIC8vIG5hbWUgdGhlIGJhcidzIGxpc3RzIHRhdWdodCAoUmVwb3J0RmlsdGVyT3B0aW9uc1NlcnZpY2UubGFiZWwpIGNvbWVzIGZpcnN0LFxuICAvLyBzbyBhIHBpY2sgYSBjdXQgb3IgbmFycm93ZWQgbGlzdCBsZWF2ZXMgb3V0IHJlYWRzIGFzIGl0cyBjaGlwIGRvZXMsIGFuZFxuICAvLyB0aGUgZnVsbCBsaXN0IG5hbWVzIHRoZSByZXN0LiBBIHZhbHVlIHdob3NlIGVudGl0eSB3YXMgZGVsZXRlZCBrZWVwc1xuICAvLyBzaG93aW5nIGl0cyByYXcgaWQgcmF0aGVyIHRoYW4gZHJvcHBpbmcgb2ZmIHRoZSBjb3ZlciBhbmQgc2lsZW50bHlcbiAgLy8gdW5kZXJzdGF0aW5nIHRoZSBmaWx0ZXIuIEEgZmFpbGVkIG9wdGlvbiBmZXRjaCBkZWdyYWRlcyB0aGUgd2hvbGUgbGluZSB0b1xuICAvLyBpZHMgZm9yIHRoZSBzYW1lIHJlYXNvbjogYW4gZXhwb3J0IG11c3QgbmV2ZXIgZmFpbCBvbiBhIGNvc21ldGljIGxvb2t1cC5cbiAgcHJpdmF0ZSBfcGlja05hbWVyKHJlcG9ydDogUmVwb3J0KTogUmVwb3J0RXhwb3J0TGluZXNJbnB1dFsnbmFtZXMnXSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdyb3VwT3B0aW9uc1JlYWRlcih0aGlzLl9yZXBvcnREYXRhKTtcblxuICAgIHJldHVybiAoZ3JvdXAsIHZhbHVlcykgPT4gcmVzb2x2ZU9wdGlvblZhbHVlcyhcbiAgICAgIG9wdGlvbnMoZ3JvdXAsIHJlcG9ydC5pZCksXG4gICAgICB2YWx1ZXMsXG4gICAgICAodmFsdWUpID0+IHRoaXMuX2ZpbHRlck9wdGlvbnMubGFiZWwoZ3JvdXAuaWQsIHZhbHVlKSxcbiAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNvbHZlZCkgPT4gcmVzb2x2ZWQubWFwKChpdGVtKSA9PiBpdGVtLm5hbWUpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih2YWx1ZXMubWFwKChpdGVtKSA9PiBTdHJpbmcoaXRlbSkpKSksXG4gICAgICApO1xuICB9XG59XG4iXX0=
|