@firestitch/report 18.6.0 → 18.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/reports/components/component-kpi/component-kpi.component.d.ts +2 -1
- package/app/reports/components/component-list/component-list.component.d.ts +0 -1
- package/app/reports/components/report-canvas/report-canvas.component.d.ts +1 -0
- package/app/reports/components/report-component/report-component.component.d.ts +2 -1
- package/app/reports/format.d.ts +2 -2
- package/app/reports/interfaces/report.interface.d.ts +1 -0
- package/app/reports/option-builder.d.ts +2 -1
- package/app/reports/report-url-state.d.ts +1 -0
- package/app/reports/services/report-filter-state.service.d.ts +3 -0
- package/esm2022/app/reports/components/component-kpi/component-kpi.component.mjs +7 -4
- package/esm2022/app/reports/components/component-list/component-list.component.mjs +6 -28
- package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +8 -3
- package/esm2022/app/reports/components/report-component/report-component.component.mjs +5 -3
- package/esm2022/app/reports/dialogs/global-settings/global-settings.component.mjs +2 -2
- package/esm2022/app/reports/export/report-export-collector.service.mjs +8 -6
- package/esm2022/app/reports/export/report-pdf.service.mjs +7 -6
- package/esm2022/app/reports/export/report-pptx.service.mjs +7 -6
- package/esm2022/app/reports/format.mjs +13 -7
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/option-builder.mjs +16 -1
- package/esm2022/app/reports/report-url-state.mjs +5 -1
- package/esm2022/app/reports/services/report-filter-state.service.mjs +43 -12
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +11 -4
- package/esm2022/app/reports/views/report/report.component.mjs +6 -2
- package/fesm2022/{firestitch-report-echarts-B9nl9XKM.mjs → firestitch-report-echarts-Djtmaxj1.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-B9nl9XKM.mjs.map → firestitch-report-echarts-Djtmaxj1.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-Bb65HEYB.mjs → firestitch-report-firestitch-report-D3zseBZc.mjs} +130 -91
- package/fesm2022/firestitch-report-firestitch-report-D3zseBZc.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/fesm2022/firestitch-report-firestitch-report-Bb65HEYB.mjs.map +0 -1
|
@@ -532,6 +532,21 @@ export function formatPeriodLabel(value, granularity, multiYear) {
|
|
|
532
532
|
}
|
|
533
533
|
return multiYear && granularity !== 'year' ? `${parts.primary} ${parts.year}` : parts.primary;
|
|
534
534
|
}
|
|
535
|
+
// A cross-tab's column headings, the one rule the grid and the PDF/PowerPoint
|
|
536
|
+
// exports share. The first is the row key and keeps its authored label; the
|
|
537
|
+
// rest are pivot VALUES. When the pivot axis is a time dimension the server
|
|
538
|
+
// sends the grain it bucketed at, so a period-start like "2026-01-01" reads
|
|
539
|
+
// "January 2026", as the chart's x-axis labels it.
|
|
540
|
+
export function pivotHeadings(config, data) {
|
|
541
|
+
const columns = data.columns ?? [];
|
|
542
|
+
const multiYear = spansMultipleYears(columns);
|
|
543
|
+
return columns.map((column, index) => {
|
|
544
|
+
if (index === 0) {
|
|
545
|
+
return config.rowBy?.label || column;
|
|
546
|
+
}
|
|
547
|
+
return data.granularity ? formatPeriodLabel(column, data.granularity, multiYear) : column;
|
|
548
|
+
});
|
|
549
|
+
}
|
|
535
550
|
// ECharts category-axis label config for a time bucket: the primary label on
|
|
536
551
|
// line one, and — only when the data spans multiple years — the year on a small
|
|
537
552
|
// gray second line, centered under the tick (year granularity needs no second
|
|
@@ -556,4 +571,4 @@ function periodAxisLabel(granularity, categories) {
|
|
|
556
571
|
},
|
|
557
572
|
};
|
|
558
573
|
}
|
|
559
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvb3B0aW9uLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXJELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM5QyxPQUFPLEVBS0wsbUJBQW1CLEdBSXBCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUczRiw4RUFBOEU7QUFDOUUsMkVBQTJFO0FBQzNFLG1FQUFtRTtBQUNuRSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIsc0VBQXNFO0FBQ3RFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLDRFQUE0RTtBQUM1RSxpQ0FBaUM7QUFDakMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsMkVBQTJFO0FBQzNFLDhFQUE4RTtBQUM5RSx5QkFBeUI7QUFDekIsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLENBQUM7QUFDckMsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQzNCLCtFQUErRTtBQUMvRSxzRUFBc0U7QUFDdEUsa0VBQWtFO0FBQ2xFLE1BQU0sZUFBZSxHQUFHLEdBQUcsMkJBQTJCLE1BQU0sd0JBQXdCLEVBQUUsQ0FBQztBQWdCdkYsNkVBQTZFO0FBQzdFLGdGQUFnRjtBQUNoRixzRUFBc0U7QUFDdEUsRUFBRTtBQUNGLGlGQUFpRjtBQUNqRiw4RUFBOEU7QUFDOUUsZ0ZBQWdGO0FBQ2hGLDRF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a0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVqRCxPQUFPO1FBQ0wsU0FBUyxFQUFFO1lBQ1QsU0FBUyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNYLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBRUQsT0FBTyxTQUFTLElBQUksV0FBVyxLQUFLLE1BQU07b0JBQ3hDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLFNBQVMsS0FBSyxDQUFDLElBQUksR0FBRztvQkFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDcEIsQ0FBQztZQUNELElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUU7U0FDakU7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRUNoYXJ0c09wdGlvbiwgTGVnZW5kQ29tcG9uZW50T3B0aW9uLCBTZXJpZXNPcHRpb24sIFRvb2x0aXBDb21wb25lbnRGb3JtYXR0ZXJDYWxsYmFja1BhcmFtcyB9IGZyb20gJ2VjaGFydHMnO1xuXG5pbXBvcnQgeyBmb3JtYXQsIGlzVmFsaWQsIHBhcnNlSVNPIH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG5pbXBvcnQgeyBmb3JtYXRNZWFzdXJlVmFsdWUgfSBmcm9tICcuL2Zvcm1hdCc7XG5pbXBvcnQge1xuICBBeGlzQ2hhcnRUeXBlLFxuICBDaGFydENvbmZpZyxcbiAgQ2hhcnRHcmFudWxhcml0eSxcbiAgQ29tcG9uZW50RGF0YSxcbiAgR1JBTlVMQVJJVFlfT1BUSU9OUyxcbiAgTGVnZW5kUG9zaXRpb24sXG4gIFJlcG9ydENvbXBvbmVudCxcbiAgV2F0ZXJmYWxsU3RlcEtpbmQsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICcuL3RleHQnO1xuaW1wb3J0IHsgUkVQT1JUX1dBVEVSRkFMTF9DT0xPUlMgfSBmcm9tICcuL3RoZW1lL3BhbGV0dGUnO1xuaW1wb3J0IHsgUkVQT1JUX0FYSVNfTEFCRUxfRk9OVF9TSVpFLCBSRVBPUlRfQ0hBUlRfRk9OVF9GQU1JTFkgfSBmcm9tICcuL3RoZW1lL3R5cG9ncmFwaHknO1xuXG5cbi8vIFJvb20gZm9yIHRoZSBjYXRlZ29yeSBheGlzJ3MgdGl0bGUuIEVDaGFydHMgNSdzIGNvbnRhaW5MYWJlbCBrZWVwcyB0aGUgVElDS1xuLy8gbGFiZWxzIGluc2lkZSB0aGUgZ3JpZCBidXQgbm90IHRoZSBheGlzIG5hbWUsIHNvIHdpdGhvdXQgdGhpcyBhIHZlcnRpY2FsXG4vLyBjaGFydCdzIHRpdGxlIHJ1bnMgb2ZmIHRoZSBib3R0b20gZWRnZSBvciB1bmRlciBhIGJvdHRvbSBsZWdlbmQuXG5jb25zdCBBWElTX05BTUVfUk9PTSA9IDIwO1xuLy8gRUNoYXJ0cycgb3duIGRlZmF1bHQgZ2FwIGJldHdlZW4gdGhlIGF4aXMgbGluZSBhbmQgaXRzIHRpY2sgbGFiZWxzLlxuY29uc3QgQVhJU19MQUJFTF9NQVJHSU4gPSA4O1xuLy8gQ2xlYXJhbmNlIGJldHdlZW4gdGhlIGxvbmdlc3QgdGljayBsYWJlbCBhbmQgYSBob3Jpem9udGFsIGNoYXJ0J3Mgcm90YXRlZFxuLy8gdGl0bGUsIHNvIHRoZSB0d28gbmV2ZXIgdG91Y2guXG5jb25zdCBBWElTX05BTUVfQ0xFQVJBTkNFID0gNjtcbi8vIEEgaG9yaXpvbnRhbCBjaGFydCdzIGNhdGVnb3J5IGxhYmVscyBhcmUgY3V0IHNob3J0IHdpdGggYW4gZWxsaXBzaXMgcGFzdFxuLy8gdGhpcyB3aWR0aCAodGhlIHRvb2x0aXAgc3RpbGwgc2hvd3MgdGhlbSBpbiBmdWxsKSwgc28gb25lIGxvbmcgbGFiZWwgY2Fubm90XG4vLyBzcXVlZXplIHRoZSBwbG90IGF3YXkuXG5jb25zdCBDQVRFR09SWV9MQUJFTF9NQVhfV0lEVEggPSAxNjA7XG5jb25zdCBMQUJFTF9FTExJUFNJUyA9ICfigKYnO1xuLy8gVGhlIGZvbnQgdGhlIHRoZW1lIGRyYXdzIGF4aXMgbGFiZWxzIGluLCBhcyBhIGNhbnZhcyBmb250IHN0cmluZy4gTGFiZWxzIGFyZVxuLy8gbWVhc3VyZWQgaW4gaXQgdGhlIHdheSBFQ2hhcnRzIG1lYXN1cmVzIHRoZW0gZm9yIGNvbnRhaW5MYWJlbCwgc28gYVxuLy8gaG9yaXpvbnRhbCBjaGFydCdzIHRpdGxlIGxhbmRzIGV4YWN0bHkgYmV5b25kIHRoZSB3aWRlc3QgbGFiZWwuXG5jb25zdCBBWElTX0xBQkVMX0ZPTlQgPSBgJHtSRVBPUlRfQVhJU19MQUJFTF9GT05UX1NJWkV9cHggJHtSRVBPUlRfQ0hBUlRfRk9OVF9GQU1JTFl9YDtcblxuLy8gV2hpY2ggZWRnZSBvZiB0aGUgcGxvdCB0aGUgY2F0ZWdvcnkgYXhpcydzIHRpdGxlIHNpdHMgb246IGJlbG93IGEgdmVydGljYWxcbi8vIGNoYXJ0LCB0byB0aGUgbGVmdCBvZiBhIGhvcml6b250YWwgb25lLlxudHlwZSBBeGlzVGl0bGVTaWRlID0gJ2JvdHRvbScgfCAnbGVmdCc7XG5cbi8vIFRoZSBwbG90J3MgZGlzdGFuY2UgZnJvbSBlYWNoIGVkZ2Ugb2YgdGhlIGNoYXJ0LCBpbiBwaXhlbHMuXG5pbnRlcmZhY2UgQXhpc0dyaWRSb29tIHtcbiAgbGVmdDogbnVtYmVyO1xuICByaWdodDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG4gIGNvbnRhaW5MYWJlbDogYm9vbGVhbjtcbn1cblxuXG4vLyBjb2xvckJ5IGFwcGxpZXMgb25seSB0byBzaW5nbGUtZGltZW5zaW9uIGJhciBjaGFydHMsIGFuZCBvbmx5IHdoZW4gc3BsaXRCeVxuLy8gaXNuJ3QgYWxyZWFkeSBkcml2aW5nIG11bHRpcGxlIHNlcmllczogaXQgY29sb3JzIGVhY2ggYmFyIGJ5IGl0cyBjYXRlZ29yeSBhbmRcbi8vIHNob3dzIGEgbGVnZW5kIChvbmUgc2VyaWVzIHBlciBjYXRlZ29yeSwgb3ZlcmxhcHBlZCB0byBmdWxsIHdpZHRoKS5cbi8vXG4vLyBJdCBpcyB0aGUgREVGQVVMVCBmb3IgYSBjYXRlZ29yaWNhbCBiYXIgY2hhcnQgcmF0aGVyIHRoYW4gc29tZXRoaW5nIHRoZSBjb25maWdcbi8vIGhhcyB0byBhc2sgZm9yLiBBIGJhciBjaGFydCB3aG9zZSB4LWF4aXMgaXMgYSBjYXRlZ29yeSDigJQgcmVnaW9ucywgc3RhdHVzZXMsXG4vLyBzdG9yZXMg4oCUIGlzIGNvbXBhcmluZyB0aG9zZSBjYXRlZ29yaWVzIHRvIGVhY2ggb3RoZXIsIGFuZCBvbmUgZmxhdCBjb2xvciB3aXRoXG4vLyBubyBsZWdlbmQgaXMgdGhlIHdyb25nIHJlYWRpbmcgb2YgaXQgaW4gZXNzZW50aWFsbHkgZXZlcnkgY2FzZS4gUmVxdWlyaW5nXG4vLyBjb2xvckJ5IHRvIG9wdCBpbiBtZWFudCBldmVyeSBzdWNoIGNoYXJ0IHJlbmRlcmVkIG1vbm9jaHJvbWUgdW5sZXNzIHdob2V2ZXJcbi8vIHdyb3RlIHRoZSBjb25maWcgcmVtZW1iZXJlZCBhbiBvcHRpb25hbCBwcm9wZXJ0eSwgd2hpY2ggaXMgYSBkZWZhdWx0IHNldCB0aGVcbi8vIHdyb25nIHdheSByb3VuZDogdGhlIGNvbW1vbiBjYXNlIHNob3VsZCBub3QgbmVlZCB0aGUgZmxhZy5cbi8vXG4vLyBBIFRJTUUgYXhpcyBpcyBleGNsdWRlZDogY29uc2VjdXRpdmUgcGVyaW9kcyBhcmUgb25lIHNlcmllcyBtb3ZpbmcsIG5vdFxuLy8gY2F0ZWdvcmllcyBiZWluZyBjb21wYXJlZCwgYW5kIGNvbG9yaW5nIGVhY2ggbW9udGggZGlmZmVyZW50bHkgcmVhZHMgYXNcbi8vIHVucmVsYXRlZCBncm91cHMuIEV4cGxpY2l0bHkgb3B0aW5nIG91dCDigJQgY29sb3JCeToge2NvbHVtbjogJyd9IG9yIGFcbi8vIGNvbmZpZy5sZWdlbmQgb2YgJ2hpZGRlbicg4oCUIHN0aWxsIHdpbnMsIHNvIGEgY2FsbGVyIHRoYXQgd2FudHMgb25lIGZsYXQgY29sb3Jcbi8vIGNhbiBzYXkgc28uXG4vL1xuLy8gXCJCYXIgY2hhcnRcIiBpcyB0aGUgdHlwZSB0aGUgbG9uZSBtZWFzdXJlIGlzIGFjdHVhbGx5IERSQVdOIGFzOiBpdHMgb3duIHR5cGVcbi8vIHdoZW4gaXQgbmFtZXMgb25lLCB3aGljaCBjYW4gdHVybiBhIGxpbmUgY2hhcnQncyBzaW5nbGUgc2VyaWVzIGludG8gYmFycyBvclxuLy8gYSBiYXIgY2hhcnQncyBpbnRvIGEgbGluZS5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbG9yQnkoY29uZmlnOiBDaGFydENvbmZpZyk6IGJvb2xlYW4ge1xuICBpZiAoY29uZmlnLnNwbGl0Qnk/LmNvbHVtbiB8fCAoY29uZmlnLm1lYXN1cmVzPy5bMF0/LnR5cGUgPz8gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJykgIT09ICdiYXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5jb2xvckJ5KSB7XG4gICAgcmV0dXJuICEhY29uZmlnLmNvbG9yQnkuY29sdW1uO1xuICB9XG5cbiAgcmV0dXJuIChjb25maWcueEF4aXM/LmtpbmQgPz8gJ2NhdGVnb3J5JykgPT09ICdjYXRlZ29yeSdcbiAgICAmJiAhY29uZmlnLnhBeGlzPy5ncmFudWxhcml0eVxuICAgICYmIChjb25maWcubWVhc3VyZXM/Lmxlbmd0aCA/PyAxKSA8PSAxO1xufVxuXG5cbi8vIFRoZSBjb2x1bW4gY29sb3JCeSBncm91cHMgYnkg4oCUIGl0cyBvd24gd2hlbiB0aGUgY29uZmlnIG5hbWVkIG9uZSwgb3RoZXJ3aXNlXG4vLyB0aGUgeC1heGlzIGl0IGRlZmF1bHRzIHRvIGNvbG9yaW5nLlxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yQnlDb2x1bW4oY29uZmlnOiBDaGFydENvbmZpZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpc0NvbG9yQnkoY29uZmlnKVxuICAgID8gKGNvbmZpZy5jb2xvckJ5Py5jb2x1bW4gfHwgY29uZmlnLnhBeGlzPy5jb2x1bW4pXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cblxuLy8gQ2F0ZWdvcmllcyArIG5hbWVkIHNlcmllcyBleHRyYWN0ZWQgZnJvbSBhIGNoYXJ0IGNvbXBvbmVudCdzIGNvbmZpZyArIHJvd3Mg4oCUXG4vLyB0aGUgb25lIHBpdm90IChzcGxpdEJ5IOKGkiBzZXJpZXMsIG1lYXN1cmVzIOKGkiBzZXJpZXMpIHNoYXJlZCBieSB0aGUgb24tc2NyZWVuXG4vLyBFQ2hhcnRzIG9wdGlvbiBiZWxvdyBBTkQgdGhlIFBvd2VyUG9pbnQgZXhwb3J0J3MgbmF0aXZlIGNoYXJ0IGRhdGEsIHNvIGJvdGhcbi8vIG1lZGlhIHBsb3QgaWRlbnRpY2FsIG51bWJlcnMuXG4vL1xuLy8gQSBzZXJpZXMnIGB0eXBlYCBpcyB0aGUgdHlwZSBpdHMgbWVhc3VyZSBhc2tzIHRvIGJlIGRyYXduIGFzLCBhbmQgaXMgYWJzZW50XG4vLyB3aGVuIHRoZSBtZWFzdXJlIGxlYXZlcyBpdCB0byB0aGUgY2hhcnQncyBjaGFydFR5cGUgKHNlZSBzZXJpZXNUeXBlcykuXG5leHBvcnQgaW50ZXJmYWNlIEV4dHJhY3RlZENoYXJ0U2VyaWVzIHtcbiAgY2F0ZWdvcmllczogc3RyaW5nW107XG4gIHNlcmllczogeyBuYW1lOiBzdHJpbmc7IHZhbHVlczogKG51bWJlciB8IG51bGwpW107IHR5cGU/OiBBeGlzQ2hhcnRUeXBlIH1bXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDaGFydFNlcmllcyhjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgZGF0YTogQ29tcG9uZW50RGF0YSk6IEV4dHJhY3RlZENoYXJ0U2VyaWVzIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgeENvbHVtbiA9IGNvbmZpZy54QXhpcz8uY29sdW1uID8/IGRhdGEuY29sdW1uc1swXTtcbiAgY29uc3Qgc3BsaXRDb2x1bW4gPSBjb25maWcuc3BsaXRCeT8uY29sdW1uO1xuICAvLyBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyIGNhdGVnb3J5IHRvbyAoc28gZWFjaCBiYXIgY2FycmllcyBpdHMgb3duXG4gIC8vIGNvbG9yICsgbGVnZW5kIGVudHJ5KSwgYnV0IHRoZSBiYXJzIGFyZSBvdmVybGFwcGVkIHRvIGZ1bGwgd2lkdGggaW5cbiAgLy8gYnVpbGRBeGlzT3B0aW9uIHJhdGhlciB0aGFuIGxhaWQgc2lkZS1ieS1zaWRlLiBzcGxpdEJ5IHdpbnMgaWYgYm90aCBhcmUgc2V0LlxuICBjb25zdCBncm91cENvbHVtbiA9IHNwbGl0Q29sdW1uIHx8IGNvbG9yQnlDb2x1bW4oY29uZmlnKTtcbiAgY29uc3QgbWVhc3VyZXMgPSBjb25maWcubWVhc3VyZXM/Lmxlbmd0aFxuICAgID8gY29uZmlnLm1lYXN1cmVzXG4gICAgOiBbeyBjb2x1bW46IGRhdGEuY29sdW1uc1tkYXRhLmNvbHVtbnMubGVuZ3RoIC0gMV0gfV07XG5cbiAgY29uc3QgcmF3Q2F0ZWdvcmllcyA9IHVuaXF1ZVZhbHVlcyhkYXRhLnJvd3MsIHhDb2x1bW4pO1xuICBjb25zdCBjYXRlZ29yaWVzID0gcmF3Q2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBTdHJpbmcoY2F0ZWdvcnkgPz8gJ+KAlCcpKTtcbiAgY29uc3Qgc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc1snc2VyaWVzJ10gPSBbXTtcblxuICBpZiAoZ3JvdXBDb2x1bW4pIHtcbiAgICAvLyBPbmUgc2VyaWVzIHBlciBncm91cCB2YWx1ZSAoc3BsaXRCeS9jb2xvckJ5KSwgcGl2b3RlZCBvdmVyIHRoZSBmaXJzdCBtZWFzdXJlLlxuICAgIGNvbnN0IG1lYXN1cmUgPSBtZWFzdXJlc1swXTtcbiAgICBmb3IgKGNvbnN0IGdyb3VwVmFsdWUgb2YgdW5pcXVlVmFsdWVzKGRhdGEucm93cywgZ3JvdXBDb2x1bW4pKSB7XG4gICAgICBjb25zdCBieUNhdGVnb3J5ID0gbmV3IE1hcDx1bmtub3duLCB1bmtub3duPigpO1xuICAgICAgZm9yIChjb25zdCByb3cgb2YgZGF0YS5yb3dzKSB7XG4gICAgICAgIGlmIChyb3dbZ3JvdXBDb2x1bW5dID09PSBncm91cFZhbHVlKSB7XG4gICAgICAgICAgYnlDYXRlZ29yeS5zZXQocm93W3hDb2x1bW5dLCByb3dbbWVhc3VyZS5jb2x1bW5dKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXJpZXMucHVzaCh7XG4gICAgICAgIG5hbWU6IFN0cmluZyhncm91cFZhbHVlID8/ICfigJQnKSxcbiAgICAgICAgdmFsdWVzOiByYXdDYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IG51bWVyaWMoYnlDYXRlZ29yeS5nZXQoY2F0ZWdvcnkpKSksXG4gICAgICAgIHR5cGU6IG1lYXN1cmUudHlwZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IG1lYXN1cmUgb2YgbWVhc3VyZXMpIHtcbiAgICAgIGNvbnN0IGJ5Q2F0ZWdvcnkgPSBuZXcgTWFwPHVua25vd24sIHVua25vd24+KCk7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhLnJvd3MpIHtcbiAgICAgICAgYnlDYXRlZ29yeS5zZXQocm93W3hDb2x1bW5dLCByb3dbbWVhc3VyZS5jb2x1bW5dKTtcbiAgICAgIH1cblxuICAgICAgc2VyaWVzLnB1c2goe1xuICAgICAgICBuYW1lOiBtZWFzdXJlLmxhYmVsID8/IG1lYXN1cmUuY29sdW1uLFxuICAgICAgICB2YWx1ZXM6IHJhd0NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gbnVtZXJpYyhieUNhdGVnb3J5LmdldChjYXRlZ29yeSkpKSxcbiAgICAgICAgdHlwZTogbWVhc3VyZS50eXBlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgY2F0ZWdvcmllcywgc2VyaWVzIH07XG59XG5cbi8vIFRoZSB0eXBlIGVhY2ggZXh0cmFjdGVkIHNlcmllcyBpcyBkcmF3biBhczogaXRzIG1lYXN1cmUncyBvd24gdHlwZSB3aGVuIGl0XG4vLyBuYW1lcyBvbmUsIHRoZSBjaGFydCdzIGNoYXJ0VHlwZSBvdGhlcndpc2UuIE1vcmUgdGhhbiBvbmUgZGlzdGluY3QgdHlwZSBpcyBhXG4vLyBjb21ibyBjaGFydC4gU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnQgZXhwb3J0IHNvIGJvdGggbWVkaWEgZHJhdyBlYWNoIHNlcmllc1xuLy8gdGhlIHNhbWUgd2F5LlxuZXhwb3J0IGZ1bmN0aW9uIHNlcmllc1R5cGVzKGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsIGNoYXJ0VHlwZTogQXhpc0NoYXJ0VHlwZSk6IEF4aXNDaGFydFR5cGVbXSB7XG4gIHJldHVybiBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMudHlwZSA/PyBjaGFydFR5cGUpO1xufVxuXG4vLyBPbmUgYmFyIG9mIGEgd2F0ZXJmYWxsLiBgc3RhcnRgIGlzIHRoZSBydW5uaW5nIHRvdGFsIGJlZm9yZSBpdCwgd2hlcmUgdGhlIGJhclxuLy8gc3RhcnRzLCBhbmQgYGNoYW5nZWAgaXRzIHNpZ25lZCBoZWlnaHQsIHNvIGl0IGVuZHMgYXQgc3RhcnQgKyBjaGFuZ2UuIFRoZVxuLy8gY2xvc2luZyB0b3RhbCBzdGFydHMgYXQgemVybyBhbmQgaXRzIGNoYW5nZSBpcyB0aGUgd2hvbGUgcnVubmluZyB0b3RhbC5cbmV4cG9ydCBpbnRlcmZhY2UgV2F0ZXJmYWxsU3RlcCB7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGNoYW5nZTogbnVtYmVyIHwgbnVsbDtcbiAga2luZDogV2F0ZXJmYWxsU3RlcEtpbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFjdGVkV2F0ZXJmYWxsIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzdGVwczogV2F0ZXJmYWxsU3RlcFtdO1xufVxuXG5leHBvcnQgY29uc3QgV0FURVJGQUxMX1RPVEFMX0xBQkVMID0gJ1RvdGFsJztcblxuLy8gQSB3YXRlcmZhbGwncyBiYXJzIGZyb20gaXRzIG9uZSBtZWFzdXJlOiBlYWNoIGNhdGVnb3J5J3MgdmFsdWUgaXMgaG93IGZhciB0aGVcbi8vIHJ1bm5pbmcgdG90YWwgbW92ZXMgdGhlcmUsIGFuZCBhIGxhc3QgVG90YWwgYmFyIHNob3dzIHdoZXJlIGl0IGVuZGVkLiBBXG4vLyBjYXRlZ29yeSB3aXRoIG5vIHZhbHVlIG1vdmVzIG5vdGhpbmcgYW5kIGRyYXdzIG5vIGJhci4gU2hhcmVkIHdpdGggdGhlXG4vLyBQb3dlclBvaW50IGV4cG9ydCBzbyBib3RoIG1lZGlhIGRyYXcgdGhlIHNhbWUgc3RlcHMuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFdhdGVyZmFsbChjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgZGF0YTogQ29tcG9uZW50RGF0YSk6IEV4dHJhY3RlZFdhdGVyZmFsbCB7XG4gIGNvbnN0IGV4dHJhY3RlZCA9IGV4dHJhY3RDaGFydFNlcmllcyhjb21wb25lbnQsIGRhdGEpO1xuICBjb25zdCB2YWx1ZXMgPSBleHRyYWN0ZWQuc2VyaWVzWzBdPy52YWx1ZXMgPz8gW107XG4gIGNvbnN0IHN0ZXBzOiBXYXRlcmZhbGxTdGVwW10gPSBbXTtcbiAgbGV0IHRvdGFsID0gMDtcblxuICBleHRyYWN0ZWQuY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBjaGFuZ2UgPSB2YWx1ZXNbaW5kZXhdID8/IG51bGw7XG4gICAgc3RlcHMucHVzaCh7IGNhdGVnb3J5LCBzdGFydDogdG90YWwsIGNoYW5nZSwga2luZDogKGNoYW5nZSA/PyAwKSA8IDAgPyAnZmFsbCcgOiAncmlzZScgfSk7XG4gICAgdG90YWwgKz0gY2hhbmdlID8/IDA7XG4gIH0pO1xuXG4gIHN0ZXBzLnB1c2goeyBjYXRlZ29yeTogV0FURVJGQUxMX1RPVEFMX0xBQkVMLCBzdGFydDogMCwgY2hhbmdlOiB0b3RhbCwga2luZDogJ3RvdGFsJyB9KTtcblxuICByZXR1cm4geyBuYW1lOiBleHRyYWN0ZWQuc2VyaWVzWzBdPy5uYW1lID8/ICcnLCBzdGVwcyB9O1xufVxuXG4vLyBUaGUgb25lIHB1cmUgbWFwcGluZyBmcm9tIG91ciBzdGFuZGFyZCBjYW1lbENhc2UgY2hhcnQgY29uZmlnICsgdGhlIGRhdGFcbi8vIGVuZHBvaW50J3Mgcm93cyB0byBhbiBFQ2hhcnRzIG9wdGlvbi4gRXZlcnl0aGluZyB2aXN1YWwgdGhhdCBpc24ndCBpbiB0aGVcbi8vIHJlZ2lzdGVyZWQgJ3JlcG9ydCcgdGhlbWUgaXMgZGVjaWRlZCBoZXJlLCBzbyByZXBvcnQgc3RhbmRhcmRzIGhhdmUgZXhhY3RseVxuLy8gdHdvIGhvbWVzLlxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2hhcnRPcHRpb24oY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIGRhdGE6IENvbXBvbmVudERhdGEpOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcblxuICBpZiAoY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcpIHtcbiAgICByZXR1cm4gYnVpbGRQaWVPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjaGFydFR5cGUgPT09ICdkb251dCcpO1xuICB9XG5cbiAgaWYgKGNoYXJ0VHlwZSA9PT0gJ3dhdGVyZmFsbCcpIHtcbiAgICByZXR1cm4gYnVpbGRXYXRlcmZhbGxPcHRpb24oY29tcG9uZW50LCBkYXRhKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEF4aXNPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjaGFydFR5cGUpO1xufVxuXG5mdW5jdGlvbiBidWlsZEF4aXNPcHRpb24oXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBjaGFydFR5cGU6IEF4aXNDaGFydFR5cGUsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IGhvcml6b250YWwgPSBjb25maWcub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgY29uc3QgY29sb3JCeSA9IGlzQ29sb3JCeShjb25maWcpO1xuICBjb25zdCB0eXBlcyA9IHNlcmllc1R5cGVzKGV4dHJhY3RlZCwgY2hhcnRUeXBlKTtcbiAgY29uc3QgY29tYm8gPSBuZXcgU2V0KHR5cGVzKS5zaXplID4gMTtcblxuICAvLyBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyIGNhdGVnb3J5OyBvdmVybGFwcGluZyB0aGVtIChiYXJHYXAgLTEwMCUpIG1ha2VzXG4gIC8vIGVhY2ggcmVuZGVyIGF0IHRoZSBmdWxsIGNhdGVnb3J5LWJhbmQgd2lkdGgg4oCUIG9uZSBmdWxsLXdpZHRoLCBkaXN0aW5jdGx5XG4gIC8vIGNvbG9yZWQgYmFyIHBlciBjYXRlZ29yeSDigJQgaW5zdGVhZCBvZiBzaWRlLWJ5LXNpZGUgc2xpdmVycy4gVGhlIGxheW91dCBwcm9wc1xuICAvLyBhcmUgcmVhZCBmcm9tIHRoZSBmaXJzdCBzZXJpZXMgb2YgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLlxuICAvL1xuICAvLyBTdGFja2luZyBzdW1zIGV2ZXJ5IHNlcmllcyB0aGF0IHNoYXJlcyBhIHN0YWNrIG5hbWUsIHdoYXRldmVyIGl0cyB0eXBlLiBJblxuICAvLyBhIGNvbWJvIGVhY2ggdHlwZSBzdGFja3Mgb25seSB3aXRoIGl0cyBvd24ga2luZCwgc28gYSBsaW5lIG9mIGEgcmF0ZSBuZXZlclxuICAvLyBzaXRzIG9uIHRvcCBvZiB0aGUgYmFycycgdG90YWwuXG4gIGNvbnN0IHNlcmllczogU2VyaWVzT3B0aW9uW10gPSBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoZXh0cmFjdGVkU2VyaWVzLCBpbmRleCkgPT4gYnVpbGRTZXJpZXMoXG4gICAgZXh0cmFjdGVkU2VyaWVzLm5hbWUsXG4gICAgZXh0cmFjdGVkU2VyaWVzLnZhbHVlcyxcbiAgICB0eXBlc1tpbmRleF0sXG4gICAgY29uZmlnLnN0YWNrZWQgPyAoY29tYm8gPyBgdG90YWwtJHt0eXBlc1tpbmRleF19YCA6ICd0b3RhbCcpIDogdW5kZWZpbmVkLFxuICAgIGNvbG9yQnkgJiYgaW5kZXggPT09IDAsXG4gICAgY29tYm8sXG4gICkpO1xuXG4gIGNvbnN0IGNhdGVnb3J5QXhpcyA9IGNhdGVnb3J5QXhpc09wdGlvbihjb25maWcsIGRhdGEsIGV4dHJhY3RlZC5jYXRlZ29yaWVzLCBob3Jpem9udGFsKTtcbiAgY29uc3QgdmFsdWVBeGlzID0geyB0eXBlOiAndmFsdWUnIGFzIGNvbnN0IH07XG5cbiAgY29uc3QgbGVnZW5kUG9zaXRpb24gPSByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnLCBzZXJpZXMubGVuZ3RoLCBjb2xvckJ5KTtcblxuICByZXR1cm4ge1xuICAgIGdyaWQ6IGF4aXNHcmlkKGxlZ2VuZFBvc2l0aW9uLCBjYXRlZ29yeVRpdGxlU2lkZShjb25maWcsIGhvcml6b250YWwpKSxcbiAgICBsZWdlbmQ6IGxlZ2VuZE9wdGlvbihsZWdlbmRQb3NpdGlvbiksXG4gICAgLy8gY29sb3JCeSBjaGFydHMgb3ZlcmxhcCBOIG1vc3RseS1udWxsIHNlcmllcywgc28gYW4gYXhpcyB0b29sdGlwIHdvdWxkIGxpc3RcbiAgICAvLyBldmVyeSBjYXRlZ29yeTsgYW4gaXRlbSB0b29sdGlwIHNob3dzIGp1c3QgdGhlIGhvdmVyZWQgYmFyLlxuICAgIHRvb2x0aXA6IHsgdHJpZ2dlcjogY29sb3JCeSA/ICdpdGVtJyA6ICdheGlzJyB9LFxuICAgIHhBeGlzOiBob3Jpem9udGFsID8gdmFsdWVBeGlzIDogY2F0ZWdvcnlBeGlzLFxuICAgIHlBeGlzOiBob3Jpem9udGFsID8gY2F0ZWdvcnlBeGlzIDogdmFsdWVBeGlzLFxuICAgIHNlcmllcyxcbiAgfTtcbn1cblxuLy8gVGhlIGNhdGVnb3J5IGF4aXMgb2YgYW4gYXhpcyBjaGFydCBvciBhIHdhdGVyZmFsbDogdGhlIGNhdGVnb3JpZXMgaW4gcm93XG4vLyBvcmRlciwgbGFiZWxlZCBhcyBwZXJpb2RzIHdoZW4gdGhlIHJvd3Mgd2VyZSBidWNrZXRlZCBieSB0aW1lLlxuLy9cbi8vIEhvcml6b250YWwgYmFycyByZWFkIHRvcC1kb3duOiBFQ2hhcnRzIGRyYXdzIGNhdGVnb3J5IDAgYXQgdGhlIGJvdHRvbSwgc28gdGhlXG4vLyBheGlzIGlzIGludmVydGVkIHRvIHB1dCB0aGUgZmlyc3Qgcm93ICh0aGUgbGFyZ2VzdCBvZiBhIHRvcC1OLCBhIHdhdGVyZmFsbCdzXG4vLyBmaXJzdCBzdGVwKSBhdCB0aGUgdG9wLiBUaGUgcm90YXRlZCB0aXRsZSBzaXRzIGp1c3QgYmV5b25kIHRoZSBsb25nZXN0IGxhYmVsXG4vLyByYXRoZXIgdGhhbiBhdCBhIGZpeGVkIGdhcCB0aGF0IHdvdWxkIHB1dCBpdCBvbiB0b3Agb2YgdGhlIGxhYmVscy5cbmZ1bmN0aW9uIGNhdGVnb3J5QXhpc09wdGlvbihjb25maWc6IENoYXJ0Q29uZmlnLCBkYXRhOiBDb21wb25lbnREYXRhLCBjYXRlZ29yaWVzOiBzdHJpbmdbXSwgaG9yaXpvbnRhbDogYm9vbGVhbikge1xuICBjb25zdCBncmFudWxhcml0eSA9IGJ1Y2tldEdyYW51bGFyaXR5KGRhdGEpO1xuICBjb25zdCBwZXJpb2RMYWJlbCA9IHBlcmlvZEF4aXNMYWJlbChncmFudWxhcml0eSwgY2F0ZWdvcmllcyk7XG4gIGNvbnN0IGF4aXMgPSB7XG4gICAgdHlwZTogJ2NhdGVnb3J5JyBhcyBjb25zdCxcbiAgICBkYXRhOiBjYXRlZ29yaWVzLFxuICAgIGludmVyc2U6IGhvcml6b250YWwsXG4gICAgbmFtZTogY29uZmlnLnhBeGlzPy5sYWJlbCxcbiAgICBuYW1lTG9jYXRpb246ICdtaWRkbGUnIGFzIGNvbnN0LFxuICB9O1xuXG4gIGlmICghaG9yaXpvbnRhbCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5heGlzLFxuICAgICAgbmFtZUdhcDogZ3JhbnVsYXJpdHkgJiYgc3BhbnNNdWx0aXBsZVllYXJzKGNhdGVnb3JpZXMpID8gNDAgOiAyOCxcbiAgICAgIC4uLnBlcmlvZExhYmVsLFxuICAgIH07XG4gIH1cblxuICAvLyBBIHBlcmlvZCBsYWJlbCAoJ01heScsICdRMicpIGlzIGFsd2F5cyBzaG9ydCwgc28gb25seSBhIHBsYWluIGNhdGVnb3J5IGlzXG4gIC8vIGN1dCBzaG9ydC4gVGhlIGxhYmVscyBhcmUgY3V0IGhlcmUgcmF0aGVyIHRoYW4gYnkgRUNoYXJ0cycgb3duIHRydW5jYXRpb24sXG4gIC8vIHNvIHRoZSB0aXRsZSdzIGdhcCBpcyBtZWFzdXJlZCBvbiBleGFjdGx5IHRoZSB0ZXh0IHRoZSBheGlzIGRyYXdzLlxuICBjb25zdCBzaG93biA9IGdyYW51bGFyaXR5XG4gICAgPyBudWxsXG4gICAgOiBuZXcgTWFwKGNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gW2NhdGVnb3J5LCB0cnVuY2F0ZUF4aXNMYWJlbChjYXRlZ29yeSldKSk7XG4gIGNvbnN0IGxhYmVscyA9IHNob3duID8gWy4uLnNob3duLnZhbHVlcygpXSA6IGRpc3BsYXllZENhdGVnb3J5TGFiZWxzKGNhdGVnb3JpZXMsIGdyYW51bGFyaXR5KTtcblxuICByZXR1cm4ge1xuICAgIC4uLmF4aXMsXG4gICAgbmFtZUdhcDogd2lkZXN0QXhpc0xhYmVsKGxhYmVscykgKyBBWElTX0xBQkVMX01BUkdJTiArIEFYSVNfTkFNRV9DTEVBUkFOQ0UsXG4gICAgLi4uKHNob3duID8geyBheGlzTGFiZWw6IHsgZm9ybWF0dGVyOiAodmFsdWU6IHN0cmluZykgPT4gc2hvd24uZ2V0KHZhbHVlKSA/PyB2YWx1ZSB9IH0gOiBwZXJpb2RMYWJlbCksXG4gIH07XG59XG5cbi8vIFRoZSBjYXRlZ29yeSBheGlzJ3MgdGl0bGUgc2lkZSwgb3IgbnVsbCB3aGVuIHRoZSBheGlzIGhhcyBubyB0aXRsZSB0byBtYWtlXG4vLyByb29tIGZvci5cbmZ1bmN0aW9uIGNhdGVnb3J5VGl0bGVTaWRlKGNvbmZpZzogQ2hhcnRDb25maWcsIGhvcml6b250YWw6IGJvb2xlYW4pOiBBeGlzVGl0bGVTaWRlIHwgbnVsbCB7XG4gIGlmICghY29uZmlnLnhBeGlzPy5sYWJlbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGhvcml6b250YWwgPyAnbGVmdCcgOiAnYm90dG9tJztcbn1cblxuLy8gVGhlIHRpY2sgbGFiZWxzIGFzIHRoZSBheGlzIHNob3dzIHRoZW06IGEgYnVja2V0J3MgcHJpbWFyeSBwZXJpb2QgbGFiZWxcbi8vICgnTWF5JywgJ1EyJyksIG90aGVyd2lzZSB0aGUgY2F0ZWdvcnkgaXRzZWxmLiBUaGUgeWVhciBhIG11bHRpLXllYXIgYXhpc1xuLy8gcHJpbnRzIHVuZGVyIGEgcGVyaW9kIGlzIGxlZnQgb3V0LCBhcyBpdCBpcyBuZXZlciB0aGUgd2lkZXIgbGluZS5cbmZ1bmN0aW9uIGRpc3BsYXllZENhdGVnb3J5TGFiZWxzKGNhdGVnb3JpZXM6IHN0cmluZ1tdLCBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBncmFudWxhcml0eVxuICAgID8gY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBwZXJpb2RMYWJlbFBhcnRzKGNhdGVnb3J5LCBncmFudWxhcml0eSk/LnByaW1hcnkgPz8gY2F0ZWdvcnkpXG4gICAgOiBjYXRlZ29yaWVzO1xufVxuXG4vLyBUaGUgcGl4ZWwgd2lkdGggb2YgdGhlIHdpZGVzdCBsYWJlbC4gQSBsYWJlbCB0aGF0IGJyZWFrcyBvdmVyIHNldmVyYWwgbGluZXNcbi8vIGlzIGFzIHdpZGUgYXMgaXRzIGxvbmdlc3QgbGluZS5cbmZ1bmN0aW9uIHdpZGVzdEF4aXNMYWJlbChsYWJlbHM6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgcmV0dXJuIGxhYmVscy5yZWR1Y2UoKHdpZGVzdCwgbGFiZWwpID0+IGxhYmVsLnNwbGl0KCdcXG4nKS5yZWR1Y2UoXG4gICAgKGxpbmVXaWRlc3QsIGxpbmUpID0+IE1hdGgubWF4KGxpbmVXaWRlc3QsIGF4aXNMYWJlbFdpZHRoKGxpbmUpKSxcbiAgICB3aWRlc3QsXG4gICksIDApO1xufVxuXG4vLyBBIGNhdGVnb3J5IGxhYmVsIGN1dCB0byBDQVRFR09SWV9MQUJFTF9NQVhfV0lEVEgsIGxpbmUgYnkgbGluZTogdGhlIGxvbmdlc3Rcbi8vIHN0YXJ0IG9mIGVhY2ggbGluZSB0aGF0IHN0aWxsIGZpdHMgd2l0aCB0aGUgZWxsaXBzaXMgYWZ0ZXIgaXQuXG5mdW5jdGlvbiB0cnVuY2F0ZUF4aXNMYWJlbChsYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxhYmVsLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IHtcbiAgICBpZiAoYXhpc0xhYmVsV2lkdGgobGluZSkgPD0gQ0FURUdPUllfTEFCRUxfTUFYX1dJRFRIKSB7XG4gICAgICByZXR1cm4gbGluZTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIHBvaW50cywgc28gYW4gZW1vamkgb3Igb3RoZXIgc3Vycm9nYXRlIHBhaXIgaXMgbmV2ZXIgc3BsaXQuXG4gICAgY29uc3QgY2hhcmFjdGVycyA9IEFycmF5LmZyb20obGluZSk7XG4gICAgY29uc3QgY3V0ID0gKGxlbmd0aDogbnVtYmVyKSA9PiBgJHtjaGFyYWN0ZXJzLnNsaWNlKDAsIGxlbmd0aCkuam9pbignJykudHJpbUVuZCgpfSR7TEFCRUxfRUxMSVBTSVN9YDtcbiAgICBsZXQgZml0cyA9IDA7XG4gICAgbGV0IHRvb0xvbmcgPSBjaGFyYWN0ZXJzLmxlbmd0aDtcbiAgICB3aGlsZSAodG9vTG9uZyAtIGZpdHMgPiAxKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLmZsb29yKChmaXRzICsgdG9vTG9uZykgLyAyKTtcbiAgICAgIGlmIChheGlzTGFiZWxXaWR0aChjdXQobGVuZ3RoKSkgPD0gQ0FURUdPUllfTEFCRUxfTUFYX1dJRFRIKSB7XG4gICAgICAgIGZpdHMgPSBsZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b29Mb25nID0gbGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdXQoZml0cyk7XG4gIH0pLmpvaW4oJ1xcbicpO1xufVxuXG4vLyBPbmUgbGluZSdzIHdpZHRoIGluIHRoZSBheGlzLWxhYmVsIGZvbnQsIG1lYXN1cmVkIG9uIGEgY2FudmFzIHRoZSB3YXlcbi8vIEVDaGFydHMgbWVhc3VyZXMgaXQgZm9yIGNvbnRhaW5MYWJlbC4gT3V0c2lkZSBhIGJyb3dzZXIgdGhlcmUgaXMgbm8gY2FudmFzXG4vLyB0byBtZWFzdXJlIHdpdGgsIHNvIHRoZSBsaW5lIGNvdW50cyBhcyB6ZXJvIHdpZHRoLlxubGV0IGF4aXNMYWJlbENvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBheGlzTGFiZWxXaWR0aChsaW5lOiBzdHJpbmcpOiBudW1iZXIge1xuICBpZiAoIWF4aXNMYWJlbENvbnRleHQgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGF4aXNMYWJlbENvbnRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpO1xuICB9XG5cbiAgaWYgKCFheGlzTGFiZWxDb250ZXh0KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBheGlzTGFiZWxDb250ZXh0LmZvbnQgPSBBWElTX0xBQkVMX0ZPTlQ7XG5cbiAgcmV0dXJuIGF4aXNMYWJlbENvbnRleHQubWVhc3VyZVRleHQobGluZSkud2lkdGg7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkV2F0ZXJmYWxsT3B0aW9uKGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCBkYXRhOiBDb21wb25lbnREYXRhKTogRUNoYXJ0c09wdGlvbiB7XG4gIGNvbnN0IGNvbmZpZyA9IGNvbXBvbmVudC5jb25maWcgYXMgQ2hhcnRDb25maWc7XG4gIGNvbnN0IHdhdGVyZmFsbCA9IGV4dHJhY3RXYXRlcmZhbGwoY29tcG9uZW50LCBkYXRhKTtcbiAgY29uc3QgaG9yaXpvbnRhbCA9IGNvbmZpZy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnO1xuICBjb25zdCBjYXRlZ29yeUF4aXMgPSBjYXRlZ29yeUF4aXNPcHRpb24oY29uZmlnLCBkYXRhLCB3YXRlcmZhbGwuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLmNhdGVnb3J5KSwgaG9yaXpvbnRhbCk7XG4gIGNvbnN0IHZhbHVlQXhpcyA9IHsgdHlwZTogJ3ZhbHVlJyBhcyBjb25zdCB9O1xuICAvLyBPbmUgdmlzaWJsZSBzZXJpZXMsIHNvIHRoZSBsZWdlbmQgaXMgaGlkZGVuIHVubGVzcyB0aGUgY29uZmlnIHBpbnMgaXQuXG4gIGNvbnN0IGxlZ2VuZFBvc2l0aW9uID0gcmVzb2x2ZUxlZ2VuZFBvc2l0aW9uKGNvbmZpZywgMSk7XG4gIGNvbnN0IGdyYW51bGFyaXR5ID0gYnVja2V0R3JhbnVsYXJpdHkoZGF0YSk7XG5cbiAgcmV0dXJuIHtcbiAgICBncmlkOiBheGlzR3JpZChsZWdlbmRQb3NpdGlvbiwgY2F0ZWdvcnlUaXRsZVNpZGUoY29uZmlnLCBob3Jpem9udGFsKSksXG4gICAgbGVnZW5kOiB7IC4uLmxlZ2VuZE9wdGlvbihsZWdlbmRQb3NpdGlvbiksIGRhdGE6IFt3YXRlcmZhbGwubmFtZV0gfSxcbiAgICAvLyBQZXIgYmFyOiB0aGUgaW52aXNpYmxlIGJhc2UgaXMgc2lsZW50LCBzbyBvbmx5IGEgc3RlcCBhbnN3ZXJzIHRoZSBob3Zlci5cbiAgICB0b29sdGlwOiB7XG4gICAgICB0cmlnZ2VyOiAnaXRlbScsXG4gICAgICBmb3JtYXR0ZXI6IChwYXJhbXM6IFRvb2x0aXBDb21wb25lbnRGb3JtYXR0ZXJDYWxsYmFja1BhcmFtcykgPT4gd2F0ZXJmYWxsVG9vbHRpcChcbiAgICAgICAgd2F0ZXJmYWxsLFxuICAgICAgICAoQXJyYXkuaXNBcnJheShwYXJhbXMpID8gcGFyYW1zWzBdIDogcGFyYW1zKS5kYXRhSW5kZXgsXG4gICAgICAgIGdyYW51bGFyaXR5LFxuICAgICAgKSxcbiAgICB9LFxuICAgIHhBeGlzOiBob3Jpem9udGFsID8gdmFsdWVBeGlzIDogY2F0ZWdvcnlBeGlzLFxuICAgIHlBeGlzOiBob3Jpem9udGFsID8gY2F0ZWdvcnlBeGlzIDogdmFsdWVBeGlzLFxuICAgIHNlcmllczogd2F0ZXJmYWxsU2VyaWVzKHdhdGVyZmFsbCksXG4gIH07XG59XG5cbi8vIEFuIGludmlzaWJsZSBiYXNlIHNlcmllcyBsaWZ0cyBlYWNoIHZpc2libGUgYmFyIHRvIHdoZXJlIGl0cyBzdGVwIHN0YXJ0cy5cbi8vIEJvdGggc3RhY2sgd2l0aCB0aGUgJ2FsbCcgc3RyYXRlZ3ksIHdoaWNoIGFkZHMgc2lnbmVkIHZhbHVlcyBpbiBzZXJpZXMgb3JkZXIsXG4vLyBzbyBhIGZhbGwgZHJhd3MgRE9XTiBmcm9tIHRoZSB0b3RhbCBiZWZvcmUgaXQsIGV2ZW4gYWNyb3NzIHplcm8uIFRoZSBkZWZhdWx0XG4vLyBzYW1lLXNpZ24gc3RhY2tpbmcgd291bGQgaGFuZyBhIG5lZ2F0aXZlIGJhciBiZWxvdyB0aGUgYXhpcyBpbnN0ZWFkLlxuZnVuY3Rpb24gd2F0ZXJmYWxsU2VyaWVzKHdhdGVyZmFsbDogRXh0cmFjdGVkV2F0ZXJmYWxsKTogU2VyaWVzT3B0aW9uW10ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHR5cGU6ICdiYXInLFxuICAgICAgc3RhY2s6ICd3YXRlcmZhbGwnLFxuICAgICAgc3RhY2tTdHJhdGVneTogJ2FsbCcsXG4gICAgICBkYXRhOiB3YXRlcmZhbGwuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLnN0YXJ0KSxcbiAgICAgIGJhck1heFdpZHRoOiA0OCxcbiAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogJ3RyYW5zcGFyZW50JyB9LFxuICAgICAgc2lsZW50OiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogd2F0ZXJmYWxsLm5hbWUsXG4gICAgICB0eXBlOiAnYmFyJyxcbiAgICAgIHN0YWNrOiAnd2F0ZXJmYWxsJyxcbiAgICAgIHN0YWNrU3RyYXRlZ3k6ICdhbGwnLFxuICAgICAgYmFyTWF4V2lkdGg6IDQ4LFxuICAgICAgLy8gVGhlIHNlcmllcyBjb2xvciBpcyB0aGUgcmlzZSBjb2xvciBzbyBhIHBpbm5lZCBsZWdlbmQgc2hvd3MgaXQ7IGVhY2hcbiAgICAgIC8vIGJhciBpcyB0aGVuIGNvbG9yZWQgYnkgd2hhdCBpdCBkb2VzIHRvIHRoZSB0b3RhbC5cbiAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogYCMke1JFUE9SVF9XQVRFUkZBTExfQ09MT1JTLnJpc2V9YCB9LFxuICAgICAgZGF0YTogd2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gKHtcbiAgICAgICAgdmFsdWU6IHN0ZXAuY2hhbmdlLFxuICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGAjJHtSRVBPUlRfV0FURVJGQUxMX0NPTE9SU1tzdGVwLmtpbmRdfWAgfSxcbiAgICAgIH0pKSxcbiAgICB9LFxuICBdO1xufVxuXG4vLyBBIHN0ZXAncyB0b29sdGlwOiBpdHMgcGVyaW9kLCBob3cgZmFyIGl0IG1vdmVkIHRoZSBydW5uaW5nIHRvdGFsIGFuZCB3aGVyZVxuLy8gdGhhdCBsZWZ0IGl0LiBUaGUgY2xvc2luZyBUb3RhbCBzaG93cyB0aGUgdG90YWwgYWxvbmUuIFRoZSBjYXRlZ29yeSBhbmQgdGhlXG4vLyBtZWFzdXJlIG5hbWUgY29tZSBmcm9tIHRoZSBkYXRhIGFuZCB0aGUgY29uZmlnLCBhbmQgRUNoYXJ0cyBzZXRzIHRoZSB0b29sdGlwXG4vLyBhcyBIVE1MLCBzbyBib3RoIGFyZSBlc2NhcGVkLlxuZnVuY3Rpb24gd2F0ZXJmYWxsVG9vbHRpcCh3YXRlcmZhbGw6IEV4dHJhY3RlZFdhdGVyZmFsbCwgaW5kZXg6IG51bWJlciwgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RlcCA9IHdhdGVyZmFsbC5zdGVwc1tpbmRleF07XG4gIGNvbnN0IGNhdGVnb3J5ID0gZXNjYXBlSHRtbChncmFudWxhcml0eSA/IGZvcm1hdFBlcmlvZExhYmVsKHN0ZXAuY2F0ZWdvcnksIGdyYW51bGFyaXR5LCB0cnVlKSA6IHN0ZXAuY2F0ZWdvcnkpO1xuICBjb25zdCBuYW1lID0gZXNjYXBlSHRtbCh3YXRlcmZhbGwubmFtZSk7XG5cbiAgaWYgKHN0ZXAua2luZCA9PT0gJ3RvdGFsJykge1xuICAgIHJldHVybiBgJHtjYXRlZ29yeX08YnIvPiR7bmFtZX06ICR7Zm9ybWF0TWVhc3VyZVZhbHVlKHN0ZXAuY2hhbmdlKX1gO1xuICB9XG5cbiAgY29uc3Qgc2lnbiA9IChzdGVwLmNoYW5nZSA/PyAwKSA+IDAgPyAnKycgOiAnJztcblxuICByZXR1cm4gYCR7Y2F0ZWdvcnl9PGJyLz4ke25hbWV9OiAke3NpZ259JHtmb3JtYXRNZWFzdXJlVmFsdWUoc3RlcC5jaGFuZ2UpfWBcbiAgICArIGA8YnIvPlJ1bm5pbmcgdG90YWw6ICR7Zm9ybWF0TWVhc3VyZVZhbHVlKHN0ZXAuc3RhcnQgKyAoc3RlcC5jaGFuZ2UgPz8gMCkpfWA7XG59XG5cbi8vIERlZmF1bHQgbGVnZW5kIHBsYWNlbWVudCB3aGVuIHRoZSBjb25maWcgZG9lc24ndCBwaW4gb25lOiBwaWUgY2hhcnRzIHJlYWRcbi8vIGJlc3Qgd2l0aCB0aGUgc2xpY2Uga2V5IGJlc2lkZSB0aGVtIChyaWdodCk7IGF4aXMgY2hhcnRzIG9ubHkgbmVlZCBhIGxlZ2VuZFxuLy8gdG8gdGVsbCBtdWx0aXBsZSBzZXJpZXMgYXBhcnQsIHNvIGEgc2luZ2xlLXNlcmllcyBjaGFydCBoaWRlcyBpdC4gQW4gZXhwbGljaXRcbi8vIGNvbmZpZy5sZWdlbmQgKGluY2x1ZGluZyAnaGlkZGVuJykgYWx3YXlzIHdpbnMuIFNoYXJlZCB3aXRoIHRoZSBQb3dlclBvaW50XG4vLyBleHBvcnQgc28gYm90aCBtZWRpYSBwbGFjZSB0aGUgbGVnZW5kIGlkZW50aWNhbGx5LlxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMZWdlbmRQb3NpdGlvbihjb25maWc6IENoYXJ0Q29uZmlnLCBzZXJpZXNDb3VudDogbnVtYmVyLCBjb2xvckJ5ID0gZmFsc2UpOiBMZWdlbmRQb3NpdGlvbiB7XG4gIGlmIChjb25maWcubGVnZW5kKSB7XG4gICAgcmV0dXJuIGNvbmZpZy5sZWdlbmQ7XG4gIH1cblxuICBjb25zdCBwaWUgPSBjb25maWcuY2hhcnRUeXBlID09PSAncGllJyB8fCBjb25maWcuY2hhcnRUeXBlID09PSAnZG9udXQnO1xuXG4gIC8vIGNvbG9yQnkgbWFwcyBlYWNoIGJhcidzIGNvbG9yIHRvIGl0cyBjYXRlZ29yeSwgc28gaXQgbmVlZHMgYSBsZWdlbmQgZXZlblxuICAvLyB0aG91Z2ggaXQncyBhIHNpbmdsZSBtZWFzdXJlLlxuICByZXR1cm4gcGllIHx8IGNvbG9yQnkgfHwgc2VyaWVzQ291bnQgPiAxID8gKHBpZSA/ICdyaWdodCcgOiAndG9wJykgOiAnaGlkZGVuJztcbn1cblxuZnVuY3Rpb24gbGVnZW5kT3B0aW9uKHBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbik6IExlZ2VuZENvbXBvbmVudE9wdGlvbiB7XG4gIGlmIChwb3NpdGlvbiA9PT0gJ2hpZGRlbicpIHtcbiAgICByZXR1cm4geyBzaG93OiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgYmFzZTogTGVnZW5kQ29tcG9uZW50T3B0aW9uID0geyB0eXBlOiAnc2Nyb2xsJyB9O1xuXG4gIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiAwIH07XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBvcmllbnQ6ICd2ZXJ0aWNhbCcsIGxlZnQ6IDAsIHRvcDogJ21pZGRsZScgfTtcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBvcmllbnQ6ICd2ZXJ0aWNhbCcsIHJpZ2h0OiAwLCB0b3A6ICdtaWRkbGUnIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogMCB9O1xuICB9XG59XG5cbi8vIFRoZSBwbG90J3MgZ3JpZDogcm9vbSBvbiB0aGUgbGVnZW5kJ3Mgc2lkZSBzbyBpdCBuZXZlciBvdmVybGFwcyB0aGVcbi8vIGJhcnMvbGluZXMsIHBsdXMgcm9vbSBmb3IgdGhlIGNhdGVnb3J5IGF4aXMncyB0aXRsZSBvbiBpdHMgc2lkZSwgd2hpY2hcbi8vIGNvbnRhaW5MYWJlbCBkb2VzIG5vdCByZXNlcnZlIChpdCBjb3ZlcnMgdGhlIHRpY2sgbGFiZWxzIG9ubHkpLlxuZnVuY3Rpb24gYXhpc0dyaWQocG9zaXRpb246IExlZ2VuZFBvc2l0aW9uLCB0aXRsZVNpZGU6IEF4aXNUaXRsZVNpZGUgfCBudWxsKTogRUNoYXJ0c09wdGlvblsnZ3JpZCddIHtcbiAgY29uc3QgZ3JpZCA9IGxlZ2VuZEdyaWQocG9zaXRpb24pO1xuXG4gIHN3aXRjaCAodGl0bGVTaWRlKSB7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiB7IC4uLmdyaWQsIGJvdHRvbTogZ3JpZC5ib3R0b20gKyBBWElTX05BTUVfUk9PTSB9O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgcmV0dXJuIHsgLi4uZ3JpZCwgbGVmdDogZ3JpZC5sZWZ0ICsgQVhJU19OQU1FX1JPT00gfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGdyaWQ7XG4gIH1cbn1cblxuLy8gUGxvdC1lZGdlIHJvb20gb24gd2hpY2hldmVyIHNpZGUgdGhlIGxlZ2VuZCBvY2N1cGllczsgY29udGFpbkxhYmVsIGtlZXBzIHRoZVxuLy8gdGljayBsYWJlbHMgaW5zaWRlIHdoYXQgaXMgbGVmdC5cbmZ1bmN0aW9uIGxlZ2VuZEdyaWQocG9zaXRpb246IExlZ2VuZFBvc2l0aW9uKTogQXhpc0dyaWRSb29tIHtcbiAgY29uc3QgYmFzZTogQXhpc0dyaWRSb29tID0geyBsZWZ0OiA4LCByaWdodDogMTYsIHRvcDogOCwgYm90dG9tOiA4LCBjb250YWluTGFiZWw6IHRydWUgfTtcblxuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogMzIgfTtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGxlZnQ6IDk2IH07XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgcmlnaHQ6IDk2IH07XG4gICAgY2FzZSAnaGlkZGVuJzpcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IDMyIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRTZXJpZXMoXG4gIG5hbWU6IHN0cmluZyxcbiAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXSxcbiAgdHlwZTogQXhpc0NoYXJ0VHlwZSxcbiAgc3RhY2s6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgb3ZlcmxhcDogYm9vbGVhbixcbiAgY29tYm86IGJvb2xlYW4sXG4pOiBTZXJpZXNPcHRpb24ge1xuICBpZiAodHlwZSA9PT0gJ2JhcicpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIHR5cGU6ICdiYXInLFxuICAgICAgZGF0YTogdmFsdWVzLFxuICAgICAgc3RhY2ssXG4gICAgICBiYXJNYXhXaWR0aDogNDgsXG4gICAgICAvLyBjb2xvckJ5OiBvdmVybGFwIHRoZSBwZXItY2F0ZWdvcnkgc2VyaWVzIHNvIGVhY2ggYmFyIHJlbmRlcnMgZnVsbC13aWR0aC5cbiAgICAgIC4uLihvdmVybGFwID8geyBiYXJHYXA6ICctMTAwJScsIGJhckNhdGVnb3J5R2FwOiAnMjAlJyB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgdHlwZTogJ2xpbmUnLFxuICAgIGRhdGE6IHZhbHVlcyxcbiAgICBzdGFjayxcbiAgICBzbW9vdGg6IHRydWUsXG4gICAgc3ltYm9sU2l6ZTogNixcbiAgICBhcmVhU3R5bGU6IHR5cGUgPT09ICdhcmVhJyA/IHsgb3BhY2l0eTogMC4yNSB9IDogdW5kZWZpbmVkLFxuICAgIC8vIEluIGEgY29tYm8gdGhlIGxpbmUgaXMgZHJhd24gb3ZlciB0aGUgYmFycyB3aGF0ZXZlciBvcmRlciB0aGUgbWVhc3VyZXNcbiAgICAvLyBjb21lIGluOyBhdCB0aGUgc2FtZSB6IGEgbGF0ZXIgYmFyIHNlcmllcyB3b3VsZCBwYWludCBhY3Jvc3MgaXQuXG4gICAgLi4uKGNvbWJvID8geyB6OiAzIH0gOiB7fSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUGllT3B0aW9uKGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCBkYXRhOiBDb21wb25lbnREYXRhLCBkb251dDogYm9vbGVhbik6IEVDaGFydHNPcHRpb24ge1xuICBjb25zdCBjb25maWcgPSBjb21wb25lbnQuY29uZmlnIGFzIENoYXJ0Q29uZmlnO1xuICBjb25zdCBleHRyYWN0ZWQgPSBleHRyYWN0Q2hhcnRTZXJpZXMoY29tcG9uZW50LCBkYXRhKTtcbiAgY29uc3QgdmFsdWVzID0gZXh0cmFjdGVkLnNlcmllc1swXT8udmFsdWVzID8/IFtdO1xuICBjb25zdCBsZWdlbmRQb3NpdGlvbiA9IHJlc29sdmVMZWdlbmRQb3NpdGlvbihjb25maWcsIGV4dHJhY3RlZC5zZXJpZXMubGVuZ3RoKTtcblxuICByZXR1cm4ge1xuICAgIHRvb2x0aXA6IHsgdHJpZ2dlcjogJ2l0ZW0nIH0sXG4gICAgbGVnZW5kOiBsZWdlbmRPcHRpb24obGVnZW5kUG9zaXRpb24pLFxuICAgIHNlcmllczogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAncGllJyxcbiAgICAgICAgcmFkaXVzOiBkb251dCA/IFsnNDUlJywgJzcyJSddIDogJzcyJScsXG4gICAgICAgIGNlbnRlcjogcGllQ2VudGVyKGxlZ2VuZFBvc2l0aW9uKSxcbiAgICAgICAgbGFiZWw6IHsgc2hvdzogZmFsc2UgfSxcbiAgICAgICAgZGF0YTogZXh0cmFjdGVkLmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgbmFtZTogY2F0ZWdvcnksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlc1tpbmRleF0gPz8gMCxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xufVxuXG4vLyBOdWRnZSB0aGUgcGllIG9mZi1jZW50ZXIgdG93YXJkIHRoZSBvcHBvc2l0ZSBlZGdlIGZyb20gaXRzIGxlZ2VuZCBzbyB0aGUgdHdvXG4vLyBkb24ndCBjb2xsaWRlOyBjZW50ZXJlZCB3aGVuIHRoZSBsZWdlbmQgaXMgaGlkZGVuLlxuZnVuY3Rpb24gcGllQ2VudGVyKHBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbik6IFtzdHJpbmcsIHN0cmluZ10ge1xuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICByZXR1cm4gWyc2MCUnLCAnNTAlJ107XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIFsnNDAlJywgJzUwJSddO1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICByZXR1cm4gWyc1MCUnLCAnNTglJ107XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiBbJzUwJScsICc0NiUnXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFsnNTAlJywgJzUwJSddO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuaXF1ZVZhbHVlcyhyb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCBjb2x1bW46IHN0cmluZyk6IHVua25vd25bXSB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHVua25vd24+KCk7XG4gIGNvbnN0IHZhbHVlczogdW5rbm93bltdID0gW107XG4gIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJvd1tjb2x1bW5dO1xuICAgIGlmICghc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZnVuY3Rpb24gbnVtZXJpYyh2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IG51bGwge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSk7XG5cbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbDtcbn1cblxuLy8gVGhlIGVmZmVjdGl2ZSB0aW1lIGJ1Y2tldCB0aGUgcm93cyB3ZXJlIGdyb3VwZWQgaW50byAoZnJvbSB0aGUgZGF0YSBlbmRwb2ludCksXG4vLyBvciBudWxsIHdoZW4gdGhlIHgtYXhpcyBpc24ndCBhIHRpbWUgYXhpcyDigJQgZ2F0ZXMgdGhlIGNvbXBhY3QgcGVyaW9kIGxhYmVscy5cbmZ1bmN0aW9uIGJ1Y2tldEdyYW51bGFyaXR5KGRhdGE6IENvbXBvbmVudERhdGEpOiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCB7XG4gIHJldHVybiBkYXRhLmdyYW51bGFyaXR5ICYmIEdSQU5VTEFSSVRZX09QVElPTlMuc29tZSgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IGRhdGEuZ3JhbnVsYXJpdHkpXG4gICAgPyBkYXRhLmdyYW51bGFyaXR5XG4gICAgOiBudWxsO1xufVxuXG4vLyBXaGV0aGVyIHRoZSBwZXJpb2Qtc3RhcnQgY2F0ZWdvcmllcyBjcm9zcyBhIHllYXIgYm91bmRhcnkuIFdoZW4gdGhleSBkb24ndCxcbi8vIHRoZSB5ZWFyIGlzIHB1cmUgbm9pc2Ugb24gZXZlcnkgbGFiZWwsIHNvIGl0J3MgZHJvcHBlZCBlbnRpcmVseS5cbmV4cG9ydCBmdW5jdGlvbiBzcGFuc011bHRpcGxlWWVhcnMoY2F0ZWdvcmllczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3QgeWVhcnMgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzKSB7XG4gICAgY29uc3QgZGF0ZSA9IHBhcnNlSVNPKGNhdGVnb3J5KTtcbiAgICBpZiAoaXNWYWxpZChkYXRlKSkge1xuICAgICAgeWVhcnMuYWRkKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHllYXJzLnNpemUgPiAxO1xufVxuXG4vLyBBIGJ1Y2tldCdzIHBlcmlvZC1zdGFydCBzcGxpdCBpbnRvIGl0cyBwcmltYXJ5IGxhYmVsIGFuZCBpdHMgeWVhci4gRGF5L3dlZWtcbi8vIHJlYWQgYXMgXCJNYXkgMVwiLCBtb250aCBhcyBcIk1heVwiLCBxdWFydGVyIGFzIFwiUTJcIiwgeWVhciBhcyBcIjIwMjVcIi4gUmV0dXJucyBudWxsXG4vLyBmb3IgYSB2YWx1ZSB0aGF0IGlzbid0IGEgcGFyc2VhYmxlIGRhdGUgKGxlZnQgYXMtaXMgYnkgY2FsbGVycykuXG5mdW5jdGlvbiBwZXJpb2RMYWJlbFBhcnRzKHZhbHVlOiBzdHJpbmcsIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5KTogeyBwcmltYXJ5OiBzdHJpbmc7IHllYXI6IHN0cmluZyB9IHwgbnVsbCB7XG4gIGNvbnN0IGRhdGUgPSBwYXJzZUlTTyh2YWx1ZSk7XG4gIGlmICghaXNWYWxpZChkYXRlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeWVhciA9IFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7XG4gICAgY2FzZSAneWVhcic6XG4gICAgICByZXR1cm4geyBwcmltYXJ5OiB5ZWFyLCB5ZWFyIH07XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4geyBwcmltYXJ5OiBgUSR7TWF0aC5mbG9vcihkYXRlLmdldE1vbnRoKCkgLyAzKSArIDF9YCwgeWVhciB9O1xuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiB7IHByaW1hcnk6IGZvcm1hdChkYXRlLCAnTU1NTScpLCB5ZWFyIH07XG4gICAgZGVmYXVsdDogLy8gZGF5LCB3ZWVrIOKAlCB0aGUgYnVja2V0IHN0YXJ0IGFzIGEgY29tcGFjdCBcIk1NTSBkXCJcbiAgICAgIHJldHVybiB7IHByaW1hcnk6IGZvcm1hdChkYXRlLCAnTU1NIGQnKSwgeWVhciB9O1xuICB9XG59XG5cbi8vIEEgY29tcGFjdCBzaW5nbGUtbGluZSBwZXJpb2QgbGFiZWwgKHllYXIgYXBwZW5kZWQgb25seSB3aGVuIHRoZSBkYXRhIHNwYW5zXG4vLyB5ZWFycykg4oCUIGZvciBtZWRpYSB0aGF0IGNhbid0IGRvIGEgc3R5bGVkIHNlY29uZCBsaW5lLCBlLmcuIFBvd2VyUG9pbnQuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGVyaW9kTGFiZWwodmFsdWU6IHN0cmluZywgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHksIG11bHRpWWVhcjogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gcGVyaW9kTGFiZWxQYXJ0cyh2YWx1ZSwgZ3JhbnVsYXJpdHkpO1xuICBpZiAoIXBhcnRzKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG11bHRpWWVhciAmJiBncmFudWxhcml0eSAhPT0gJ3llYXInID8gYCR7cGFydHMucHJpbWFyeX0gJHtwYXJ0cy55ZWFyfWAgOiBwYXJ0cy5wcmltYXJ5O1xufVxuXG4vLyBFQ2hhcnRzIGNhdGVnb3J5LWF4aXMgbGFiZWwgY29uZmlnIGZvciBhIHRpbWUgYnVja2V0OiB0aGUgcHJpbWFyeSBsYWJlbCBvblxuLy8gbGluZSBvbmUsIGFuZCDigJQgb25seSB3aGVuIHRoZSBkYXRhIHNwYW5zIG11bHRpcGxlIHllYXJzIOKAlCB0aGUgeWVhciBvbiBhIHNtYWxsXG4vLyBncmF5IHNlY29uZCBsaW5lLCBjZW50ZXJlZCB1bmRlciB0aGUgdGljayAoeWVhciBncmFudWxhcml0eSBuZWVkcyBubyBzZWNvbmRcbi8vIGxpbmUsIGl0IGFscmVhZHkgaXMgdGhlIHllYXIpLiBFbXB0eSBmb3IgYSBub24tdGltZSBheGlzIChsYWJlbHMgYXMtaXMpLlxuZnVuY3Rpb24gcGVyaW9kQXhpc0xhYmVsKGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCwgY2F0ZWdvcmllczogc3RyaW5nW10pOiB7IGF4aXNMYWJlbD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0ge1xuICBpZiAoIWdyYW51bGFyaXR5KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgbXVsdGlZZWFyID0gc3BhbnNNdWx0aXBsZVllYXJzKGNhdGVnb3JpZXMpO1xuXG4gIHJldHVybiB7XG4gICAgYXhpc0xhYmVsOiB7XG4gICAgICBmb3JtYXR0ZXI6ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gcGVyaW9kTGFiZWxQYXJ0cyh2YWx1ZSwgZ3JhbnVsYXJpdHkpO1xuICAgICAgICBpZiAoIXBhcnRzKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG11bHRpWWVhciAmJiBncmFudWxhcml0eSAhPT0gJ3llYXInXG4gICAgICAgICAgPyBgJHtwYXJ0cy5wcmltYXJ5fVxcbnt5cnwke3BhcnRzLnllYXJ9fWBcbiAgICAgICAgICA6IHBhcnRzLnByaW1hcnk7XG4gICAgICB9LFxuICAgICAgcmljaDogeyB5cjogeyBmb250U2l6ZTogMTAsIGNvbG9yOiAnIzlhYTBhNicsIGxpbmVIZWlnaHQ6IDE0IH0gfSxcbiAgICB9LFxuICB9O1xufVxuIl19
|
|
574
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvb3B0aW9uLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXJELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM5QyxPQUFPLEVBS0wsbUJBQW1CLEdBS3BCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUczRiw4RUFBOEU7QUFDOUUsMkVBQTJFO0FBQzNFLG1FQUFtRTtBQUNuRSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIsc0VBQXNFO0FBQ3RFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLDRFQUE0RTtBQUM1RSxpQ0FBaUM7QUFDakMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsMkVBQTJFO0FBQzNFLDhFQUE4RTtBQUM5RSx5QkFBeUI7QUFDekIsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLENBQUM7QUFDckMsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQzNCLCtFQUErRTtBQUMvRSxzRUFBc0U7QUFDdEUsa0VBQWtFO0FBQ2xFLE1BQU0sZUFBZSxHQUFHLEdBQUcsMkJBQTJCLE1BQU0sd0JBQXdCLEVBQUUsQ0FBQztBQWdCdkYsNkVBQTZFO0FBQzdFLGdGQUFnRjtBQUNoRixzRUFBc0U7QUFDdEUsRUFBRTtBQUNGLGlGQUFpRjtBQUNqRiw4RUFBOEU7QUFDOUUsZ0ZBQWdGO0FBQ2hGLDRF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LFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUU7U0FDakU7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRUNoYXJ0c09wdGlvbiwgTGVnZW5kQ29tcG9uZW50T3B0aW9uLCBTZXJpZXNPcHRpb24sIFRvb2x0aXBDb21wb25lbnRGb3JtYXR0ZXJDYWxsYmFja1BhcmFtcyB9IGZyb20gJ2VjaGFydHMnO1xuXG5pbXBvcnQgeyBmb3JtYXQsIGlzVmFsaWQsIHBhcnNlSVNPIH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG5pbXBvcnQgeyBmb3JtYXRNZWFzdXJlVmFsdWUgfSBmcm9tICcuL2Zvcm1hdCc7XG5pbXBvcnQge1xuICBBeGlzQ2hhcnRUeXBlLFxuICBDaGFydENvbmZpZyxcbiAgQ2hhcnRHcmFudWxhcml0eSxcbiAgQ29tcG9uZW50RGF0YSxcbiAgR1JBTlVMQVJJVFlfT1BUSU9OUyxcbiAgTGVnZW5kUG9zaXRpb24sXG4gIExpc3RDb25maWcsXG4gIFJlcG9ydENvbXBvbmVudCxcbiAgV2F0ZXJmYWxsU3RlcEtpbmQsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICcuL3RleHQnO1xuaW1wb3J0IHsgUkVQT1JUX1dBVEVSRkFMTF9DT0xPUlMgfSBmcm9tICcuL3RoZW1lL3BhbGV0dGUnO1xuaW1wb3J0IHsgUkVQT1JUX0FYSVNfTEFCRUxfRk9OVF9TSVpFLCBSRVBPUlRfQ0hBUlRfRk9OVF9GQU1JTFkgfSBmcm9tICcuL3RoZW1lL3R5cG9ncmFwaHknO1xuXG5cbi8vIFJvb20gZm9yIHRoZSBjYXRlZ29yeSBheGlzJ3MgdGl0bGUuIEVDaGFydHMgNSdzIGNvbnRhaW5MYWJlbCBrZWVwcyB0aGUgVElDS1xuLy8gbGFiZWxzIGluc2lkZSB0aGUgZ3JpZCBidXQgbm90IHRoZSBheGlzIG5hbWUsIHNvIHdpdGhvdXQgdGhpcyBhIHZlcnRpY2FsXG4vLyBjaGFydCdzIHRpdGxlIHJ1bnMgb2ZmIHRoZSBib3R0b20gZWRnZSBvciB1bmRlciBhIGJvdHRvbSBsZWdlbmQuXG5jb25zdCBBWElTX05BTUVfUk9PTSA9IDIwO1xuLy8gRUNoYXJ0cycgb3duIGRlZmF1bHQgZ2FwIGJldHdlZW4gdGhlIGF4aXMgbGluZSBhbmQgaXRzIHRpY2sgbGFiZWxzLlxuY29uc3QgQVhJU19MQUJFTF9NQVJHSU4gPSA4O1xuLy8gQ2xlYXJhbmNlIGJldHdlZW4gdGhlIGxvbmdlc3QgdGljayBsYWJlbCBhbmQgYSBob3Jpem9udGFsIGNoYXJ0J3Mgcm90YXRlZFxuLy8gdGl0bGUsIHNvIHRoZSB0d28gbmV2ZXIgdG91Y2guXG5jb25zdCBBWElTX05BTUVfQ0xFQVJBTkNFID0gNjtcbi8vIEEgaG9yaXpvbnRhbCBjaGFydCdzIGNhdGVnb3J5IGxhYmVscyBhcmUgY3V0IHNob3J0IHdpdGggYW4gZWxsaXBzaXMgcGFzdFxuLy8gdGhpcyB3aWR0aCAodGhlIHRvb2x0aXAgc3RpbGwgc2hvd3MgdGhlbSBpbiBmdWxsKSwgc28gb25lIGxvbmcgbGFiZWwgY2Fubm90XG4vLyBzcXVlZXplIHRoZSBwbG90IGF3YXkuXG5jb25zdCBDQVRFR09SWV9MQUJFTF9NQVhfV0lEVEggPSAxNjA7XG5jb25zdCBMQUJFTF9FTExJUFNJUyA9ICfigKYnO1xuLy8gVGhlIGZvbnQgdGhlIHRoZW1lIGRyYXdzIGF4aXMgbGFiZWxzIGluLCBhcyBhIGNhbnZhcyBmb250IHN0cmluZy4gTGFiZWxzIGFyZVxuLy8gbWVhc3VyZWQgaW4gaXQgdGhlIHdheSBFQ2hhcnRzIG1lYXN1cmVzIHRoZW0gZm9yIGNvbnRhaW5MYWJlbCwgc28gYVxuLy8gaG9yaXpvbnRhbCBjaGFydCdzIHRpdGxlIGxhbmRzIGV4YWN0bHkgYmV5b25kIHRoZSB3aWRlc3QgbGFiZWwuXG5jb25zdCBBWElTX0xBQkVMX0ZPTlQgPSBgJHtSRVBPUlRfQVhJU19MQUJFTF9GT05UX1NJWkV9cHggJHtSRVBPUlRfQ0hBUlRfRk9OVF9GQU1JTFl9YDtcblxuLy8gV2hpY2ggZWRnZSBvZiB0aGUgcGxvdCB0aGUgY2F0ZWdvcnkgYXhpcydzIHRpdGxlIHNpdHMgb246IGJlbG93IGEgdmVydGljYWxcbi8vIGNoYXJ0LCB0byB0aGUgbGVmdCBvZiBhIGhvcml6b250YWwgb25lLlxudHlwZSBBeGlzVGl0bGVTaWRlID0gJ2JvdHRvbScgfCAnbGVmdCc7XG5cbi8vIFRoZSBwbG90J3MgZGlzdGFuY2UgZnJvbSBlYWNoIGVkZ2Ugb2YgdGhlIGNoYXJ0LCBpbiBwaXhlbHMuXG5pbnRlcmZhY2UgQXhpc0dyaWRSb29tIHtcbiAgbGVmdDogbnVtYmVyO1xuICByaWdodDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG4gIGNvbnRhaW5MYWJlbDogYm9vbGVhbjtcbn1cblxuXG4vLyBjb2xvckJ5IGFwcGxpZXMgb25seSB0byBzaW5nbGUtZGltZW5zaW9uIGJhciBjaGFydHMsIGFuZCBvbmx5IHdoZW4gc3BsaXRCeVxuLy8gaXNuJ3QgYWxyZWFkeSBkcml2aW5nIG11bHRpcGxlIHNlcmllczogaXQgY29sb3JzIGVhY2ggYmFyIGJ5IGl0cyBjYXRlZ29yeSBhbmRcbi8vIHNob3dzIGEgbGVnZW5kIChvbmUgc2VyaWVzIHBlciBjYXRlZ29yeSwgb3ZlcmxhcHBlZCB0byBmdWxsIHdpZHRoKS5cbi8vXG4vLyBJdCBpcyB0aGUgREVGQVVMVCBmb3IgYSBjYXRlZ29yaWNhbCBiYXIgY2hhcnQgcmF0aGVyIHRoYW4gc29tZXRoaW5nIHRoZSBjb25maWdcbi8vIGhhcyB0byBhc2sgZm9yLiBBIGJhciBjaGFydCB3aG9zZSB4LWF4aXMgaXMgYSBjYXRlZ29yeSDigJQgcmVnaW9ucywgc3RhdHVzZXMsXG4vLyBzdG9yZXMg4oCUIGlzIGNvbXBhcmluZyB0aG9zZSBjYXRlZ29yaWVzIHRvIGVhY2ggb3RoZXIsIGFuZCBvbmUgZmxhdCBjb2xvciB3aXRoXG4vLyBubyBsZWdlbmQgaXMgdGhlIHdyb25nIHJlYWRpbmcgb2YgaXQgaW4gZXNzZW50aWFsbHkgZXZlcnkgY2FzZS4gUmVxdWlyaW5nXG4vLyBjb2xvckJ5IHRvIG9wdCBpbiBtZWFudCBldmVyeSBzdWNoIGNoYXJ0IHJlbmRlcmVkIG1vbm9jaHJvbWUgdW5sZXNzIHdob2V2ZXJcbi8vIHdyb3RlIHRoZSBjb25maWcgcmVtZW1iZXJlZCBhbiBvcHRpb25hbCBwcm9wZXJ0eSwgd2hpY2ggaXMgYSBkZWZhdWx0IHNldCB0aGVcbi8vIHdyb25nIHdheSByb3VuZDogdGhlIGNvbW1vbiBjYXNlIHNob3VsZCBub3QgbmVlZCB0aGUgZmxhZy5cbi8vXG4vLyBBIFRJTUUgYXhpcyBpcyBleGNsdWRlZDogY29uc2VjdXRpdmUgcGVyaW9kcyBhcmUgb25lIHNlcmllcyBtb3ZpbmcsIG5vdFxuLy8gY2F0ZWdvcmllcyBiZWluZyBjb21wYXJlZCwgYW5kIGNvbG9yaW5nIGVhY2ggbW9udGggZGlmZmVyZW50bHkgcmVhZHMgYXNcbi8vIHVucmVsYXRlZCBncm91cHMuIEV4cGxpY2l0bHkgb3B0aW5nIG91dCDigJQgY29sb3JCeToge2NvbHVtbjogJyd9IG9yIGFcbi8vIGNvbmZpZy5sZWdlbmQgb2YgJ2hpZGRlbicg4oCUIHN0aWxsIHdpbnMsIHNvIGEgY2FsbGVyIHRoYXQgd2FudHMgb25lIGZsYXQgY29sb3Jcbi8vIGNhbiBzYXkgc28uXG4vL1xuLy8gXCJCYXIgY2hhcnRcIiBpcyB0aGUgdHlwZSB0aGUgbG9uZSBtZWFzdXJlIGlzIGFjdHVhbGx5IERSQVdOIGFzOiBpdHMgb3duIHR5cGVcbi8vIHdoZW4gaXQgbmFtZXMgb25lLCB3aGljaCBjYW4gdHVybiBhIGxpbmUgY2hhcnQncyBzaW5nbGUgc2VyaWVzIGludG8gYmFycyBvclxuLy8gYSBiYXIgY2hhcnQncyBpbnRvIGEgbGluZS5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbG9yQnkoY29uZmlnOiBDaGFydENvbmZpZyk6IGJvb2xlYW4ge1xuICBpZiAoY29uZmlnLnNwbGl0Qnk/LmNvbHVtbiB8fCAoY29uZmlnLm1lYXN1cmVzPy5bMF0/LnR5cGUgPz8gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJykgIT09ICdiYXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5jb2xvckJ5KSB7XG4gICAgcmV0dXJuICEhY29uZmlnLmNvbG9yQnkuY29sdW1uO1xuICB9XG5cbiAgcmV0dXJuIChjb25maWcueEF4aXM/LmtpbmQgPz8gJ2NhdGVnb3J5JykgPT09ICdjYXRlZ29yeSdcbiAgICAmJiAhY29uZmlnLnhBeGlzPy5ncmFudWxhcml0eVxuICAgICYmIChjb25maWcubWVhc3VyZXM/Lmxlbmd0aCA/PyAxKSA8PSAxO1xufVxuXG5cbi8vIFRoZSBjb2x1bW4gY29sb3JCeSBncm91cHMgYnkg4oCUIGl0cyBvd24gd2hlbiB0aGUgY29uZmlnIG5hbWVkIG9uZSwgb3RoZXJ3aXNlXG4vLyB0aGUgeC1heGlzIGl0IGRlZmF1bHRzIHRvIGNvbG9yaW5nLlxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yQnlDb2x1bW4oY29uZmlnOiBDaGFydENvbmZpZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpc0NvbG9yQnkoY29uZmlnKVxuICAgID8gKGNvbmZpZy5jb2xvckJ5Py5jb2x1bW4gfHwgY29uZmlnLnhBeGlzPy5jb2x1bW4pXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cblxuLy8gQ2F0ZWdvcmllcyArIG5hbWVkIHNlcmllcyBleHRyYWN0ZWQgZnJvbSBhIGNoYXJ0IGNvbXBvbmVudCdzIGNvbmZpZyArIHJvd3Mg4oCUXG4vLyB0aGUgb25lIHBpdm90IChzcGxpdEJ5IOKGkiBzZXJpZXMsIG1lYXN1cmVzIOKGkiBzZXJpZXMpIHNoYXJlZCBieSB0aGUgb24tc2NyZWVuXG4vLyBFQ2hhcnRzIG9wdGlvbiBiZWxvdyBBTkQgdGhlIFBvd2VyUG9pbnQgZXhwb3J0J3MgbmF0aXZlIGNoYXJ0IGRhdGEsIHNvIGJvdGhcbi8vIG1lZGlhIHBsb3QgaWRlbnRpY2FsIG51bWJlcnMuXG4vL1xuLy8gQSBzZXJpZXMnIGB0eXBlYCBpcyB0aGUgdHlwZSBpdHMgbWVhc3VyZSBhc2tzIHRvIGJlIGRyYXduIGFzLCBhbmQgaXMgYWJzZW50XG4vLyB3aGVuIHRoZSBtZWFzdXJlIGxlYXZlcyBpdCB0byB0aGUgY2hhcnQncyBjaGFydFR5cGUgKHNlZSBzZXJpZXNUeXBlcykuXG5leHBvcnQgaW50ZXJmYWNlIEV4dHJhY3RlZENoYXJ0U2VyaWVzIHtcbiAgY2F0ZWdvcmllczogc3RyaW5nW107XG4gIHNlcmllczogeyBuYW1lOiBzdHJpbmc7IHZhbHVlczogKG51bWJlciB8IG51bGwpW107IHR5cGU/OiBBeGlzQ2hhcnRUeXBlIH1bXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDaGFydFNlcmllcyhjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgZGF0YTogQ29tcG9uZW50RGF0YSk6IEV4dHJhY3RlZENoYXJ0U2VyaWVzIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgeENvbHVtbiA9IGNvbmZpZy54QXhpcz8uY29sdW1uID8/IGRhdGEuY29sdW1uc1swXTtcbiAgY29uc3Qgc3BsaXRDb2x1bW4gPSBjb25maWcuc3BsaXRCeT8uY29sdW1uO1xuICAvLyBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyIGNhdGVnb3J5IHRvbyAoc28gZWFjaCBiYXIgY2FycmllcyBpdHMgb3duXG4gIC8vIGNvbG9yICsgbGVnZW5kIGVudHJ5KSwgYnV0IHRoZSBiYXJzIGFyZSBvdmVybGFwcGVkIHRvIGZ1bGwgd2lkdGggaW5cbiAgLy8gYnVpbGRBeGlzT3B0aW9uIHJhdGhlciB0aGFuIGxhaWQgc2lkZS1ieS1zaWRlLiBzcGxpdEJ5IHdpbnMgaWYgYm90aCBhcmUgc2V0LlxuICBjb25zdCBncm91cENvbHVtbiA9IHNwbGl0Q29sdW1uIHx8IGNvbG9yQnlDb2x1bW4oY29uZmlnKTtcbiAgY29uc3QgbWVhc3VyZXMgPSBjb25maWcubWVhc3VyZXM/Lmxlbmd0aFxuICAgID8gY29uZmlnLm1lYXN1cmVzXG4gICAgOiBbeyBjb2x1bW46IGRhdGEuY29sdW1uc1tkYXRhLmNvbHVtbnMubGVuZ3RoIC0gMV0gfV07XG5cbiAgY29uc3QgcmF3Q2F0ZWdvcmllcyA9IHVuaXF1ZVZhbHVlcyhkYXRhLnJvd3MsIHhDb2x1bW4pO1xuICBjb25zdCBjYXRlZ29yaWVzID0gcmF3Q2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBTdHJpbmcoY2F0ZWdvcnkgPz8gJ+KAlCcpKTtcbiAgY29uc3Qgc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc1snc2VyaWVzJ10gPSBbXTtcblxuICBpZiAoZ3JvdXBDb2x1bW4pIHtcbiAgICAvLyBPbmUgc2VyaWVzIHBlciBncm91cCB2YWx1ZSAoc3BsaXRCeS9jb2xvckJ5KSwgcGl2b3RlZCBvdmVyIHRoZSBmaXJzdCBtZWFzdXJlLlxuICAgIGNvbnN0IG1lYXN1cmUgPSBtZWFzdXJlc1swXTtcbiAgICBmb3IgKGNvbnN0IGdyb3VwVmFsdWUgb2YgdW5pcXVlVmFsdWVzKGRhdGEucm93cywgZ3JvdXBDb2x1bW4pKSB7XG4gICAgICBjb25zdCBieUNhdGVnb3J5ID0gbmV3IE1hcDx1bmtub3duLCB1bmtub3duPigpO1xuICAgICAgZm9yIChjb25zdCByb3cgb2YgZGF0YS5yb3dzKSB7XG4gICAgICAgIGlmIChyb3dbZ3JvdXBDb2x1bW5dID09PSBncm91cFZhbHVlKSB7XG4gICAgICAgICAgYnlDYXRlZ29yeS5zZXQocm93W3hDb2x1bW5dLCByb3dbbWVhc3VyZS5jb2x1bW5dKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXJpZXMucHVzaCh7XG4gICAgICAgIG5hbWU6IFN0cmluZyhncm91cFZhbHVlID8/ICfigJQnKSxcbiAgICAgICAgdmFsdWVzOiByYXdDYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IG51bWVyaWMoYnlDYXRlZ29yeS5nZXQoY2F0ZWdvcnkpKSksXG4gICAgICAgIHR5cGU6IG1lYXN1cmUudHlwZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IG1lYXN1cmUgb2YgbWVhc3VyZXMpIHtcbiAgICAgIGNvbnN0IGJ5Q2F0ZWdvcnkgPSBuZXcgTWFwPHVua25vd24sIHVua25vd24+KCk7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhLnJvd3MpIHtcbiAgICAgICAgYnlDYXRlZ29yeS5zZXQocm93W3hDb2x1bW5dLCByb3dbbWVhc3VyZS5jb2x1bW5dKTtcbiAgICAgIH1cblxuICAgICAgc2VyaWVzLnB1c2goe1xuICAgICAgICBuYW1lOiBtZWFzdXJlLmxhYmVsID8/IG1lYXN1cmUuY29sdW1uLFxuICAgICAgICB2YWx1ZXM6IHJhd0NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gbnVtZXJpYyhieUNhdGVnb3J5LmdldChjYXRlZ29yeSkpKSxcbiAgICAgICAgdHlwZTogbWVhc3VyZS50eXBlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgY2F0ZWdvcmllcywgc2VyaWVzIH07XG59XG5cbi8vIFRoZSB0eXBlIGVhY2ggZXh0cmFjdGVkIHNlcmllcyBpcyBkcmF3biBhczogaXRzIG1lYXN1cmUncyBvd24gdHlwZSB3aGVuIGl0XG4vLyBuYW1lcyBvbmUsIHRoZSBjaGFydCdzIGNoYXJ0VHlwZSBvdGhlcndpc2UuIE1vcmUgdGhhbiBvbmUgZGlzdGluY3QgdHlwZSBpcyBhXG4vLyBjb21ibyBjaGFydC4gU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnQgZXhwb3J0IHNvIGJvdGggbWVkaWEgZHJhdyBlYWNoIHNlcmllc1xuLy8gdGhlIHNhbWUgd2F5LlxuZXhwb3J0IGZ1bmN0aW9uIHNlcmllc1R5cGVzKGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsIGNoYXJ0VHlwZTogQXhpc0NoYXJ0VHlwZSk6IEF4aXNDaGFydFR5cGVbXSB7XG4gIHJldHVybiBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMudHlwZSA/PyBjaGFydFR5cGUpO1xufVxuXG4vLyBPbmUgYmFyIG9mIGEgd2F0ZXJmYWxsLiBgc3RhcnRgIGlzIHRoZSBydW5uaW5nIHRvdGFsIGJlZm9yZSBpdCwgd2hlcmUgdGhlIGJhclxuLy8gc3RhcnRzLCBhbmQgYGNoYW5nZWAgaXRzIHNpZ25lZCBoZWlnaHQsIHNvIGl0IGVuZHMgYXQgc3RhcnQgKyBjaGFuZ2UuIFRoZVxuLy8gY2xvc2luZyB0b3RhbCBzdGFydHMgYXQgemVybyBhbmQgaXRzIGNoYW5nZSBpcyB0aGUgd2hvbGUgcnVubmluZyB0b3RhbC5cbmV4cG9ydCBpbnRlcmZhY2UgV2F0ZXJmYWxsU3RlcCB7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGNoYW5nZTogbnVtYmVyIHwgbnVsbDtcbiAga2luZDogV2F0ZXJmYWxsU3RlcEtpbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFjdGVkV2F0ZXJmYWxsIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzdGVwczogV2F0ZXJmYWxsU3RlcFtdO1xufVxuXG5leHBvcnQgY29uc3QgV0FURVJGQUxMX1RPVEFMX0xBQkVMID0gJ1RvdGFsJztcblxuLy8gQSB3YXRlcmZhbGwncyBiYXJzIGZyb20gaXRzIG9uZSBtZWFzdXJlOiBlYWNoIGNhdGVnb3J5J3MgdmFsdWUgaXMgaG93IGZhciB0aGVcbi8vIHJ1bm5pbmcgdG90YWwgbW92ZXMgdGhlcmUsIGFuZCBhIGxhc3QgVG90YWwgYmFyIHNob3dzIHdoZXJlIGl0IGVuZGVkLiBBXG4vLyBjYXRlZ29yeSB3aXRoIG5vIHZhbHVlIG1vdmVzIG5vdGhpbmcgYW5kIGRyYXdzIG5vIGJhci4gU2hhcmVkIHdpdGggdGhlXG4vLyBQb3dlclBvaW50IGV4cG9ydCBzbyBib3RoIG1lZGlhIGRyYXcgdGhlIHNhbWUgc3RlcHMuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFdhdGVyZmFsbChjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgZGF0YTogQ29tcG9uZW50RGF0YSk6IEV4dHJhY3RlZFdhdGVyZmFsbCB7XG4gIGNvbnN0IGV4dHJhY3RlZCA9IGV4dHJhY3RDaGFydFNlcmllcyhjb21wb25lbnQsIGRhdGEpO1xuICBjb25zdCB2YWx1ZXMgPSBleHRyYWN0ZWQuc2VyaWVzWzBdPy52YWx1ZXMgPz8gW107XG4gIGNvbnN0IHN0ZXBzOiBXYXRlcmZhbGxTdGVwW10gPSBbXTtcbiAgbGV0IHRvdGFsID0gMDtcblxuICBleHRyYWN0ZWQuY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBjaGFuZ2UgPSB2YWx1ZXNbaW5kZXhdID8/IG51bGw7XG4gICAgc3RlcHMucHVzaCh7IGNhdGVnb3J5LCBzdGFydDogdG90YWwsIGNoYW5nZSwga2luZDogKGNoYW5nZSA/PyAwKSA8IDAgPyAnZmFsbCcgOiAncmlzZScgfSk7XG4gICAgdG90YWwgKz0gY2hhbmdlID8/IDA7XG4gIH0pO1xuXG4gIHN0ZXBzLnB1c2goeyBjYXRlZ29yeTogV0FURVJGQUxMX1RPVEFMX0xBQkVMLCBzdGFydDogMCwgY2hhbmdlOiB0b3RhbCwga2luZDogJ3RvdGFsJyB9KTtcblxuICByZXR1cm4geyBuYW1lOiBleHRyYWN0ZWQuc2VyaWVzWzBdPy5uYW1lID8/ICcnLCBzdGVwcyB9O1xufVxuXG4vLyBUaGUgb25lIHB1cmUgbWFwcGluZyBmcm9tIG91ciBzdGFuZGFyZCBjYW1lbENhc2UgY2hhcnQgY29uZmlnICsgdGhlIGRhdGFcbi8vIGVuZHBvaW50J3Mgcm93cyB0byBhbiBFQ2hhcnRzIG9wdGlvbi4gRXZlcnl0aGluZyB2aXN1YWwgdGhhdCBpc24ndCBpbiB0aGVcbi8vIHJlZ2lzdGVyZWQgJ3JlcG9ydCcgdGhlbWUgaXMgZGVjaWRlZCBoZXJlLCBzbyByZXBvcnQgc3RhbmRhcmRzIGhhdmUgZXhhY3RseVxuLy8gdHdvIGhvbWVzLlxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2hhcnRPcHRpb24oY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIGRhdGE6IENvbXBvbmVudERhdGEpOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcblxuICBpZiAoY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcpIHtcbiAgICByZXR1cm4gYnVpbGRQaWVPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjaGFydFR5cGUgPT09ICdkb251dCcpO1xuICB9XG5cbiAgaWYgKGNoYXJ0VHlwZSA9PT0gJ3dhdGVyZmFsbCcpIHtcbiAgICByZXR1cm4gYnVpbGRXYXRlcmZhbGxPcHRpb24oY29tcG9uZW50LCBkYXRhKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEF4aXNPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjaGFydFR5cGUpO1xufVxuXG5mdW5jdGlvbiBidWlsZEF4aXNPcHRpb24oXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBjaGFydFR5cGU6IEF4aXNDaGFydFR5cGUsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IGhvcml6b250YWwgPSBjb25maWcub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgY29uc3QgY29sb3JCeSA9IGlzQ29sb3JCeShjb25maWcpO1xuICBjb25zdCB0eXBlcyA9IHNlcmllc1R5cGVzKGV4dHJhY3RlZCwgY2hhcnRUeXBlKTtcbiAgY29uc3QgY29tYm8gPSBuZXcgU2V0KHR5cGVzKS5zaXplID4gMTtcblxuICAvLyBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyIGNhdGVnb3J5OyBvdmVybGFwcGluZyB0aGVtIChiYXJHYXAgLTEwMCUpIG1ha2VzXG4gIC8vIGVhY2ggcmVuZGVyIGF0IHRoZSBmdWxsIGNhdGVnb3J5LWJhbmQgd2lkdGgg4oCUIG9uZSBmdWxsLXdpZHRoLCBkaXN0aW5jdGx5XG4gIC8vIGNvbG9yZWQgYmFyIHBlciBjYXRlZ29yeSDigJQgaW5zdGVhZCBvZiBzaWRlLWJ5LXNpZGUgc2xpdmVycy4gVGhlIGxheW91dCBwcm9wc1xuICAvLyBhcmUgcmVhZCBmcm9tIHRoZSBmaXJzdCBzZXJpZXMgb2YgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLlxuICAvL1xuICAvLyBTdGFja2luZyBzdW1zIGV2ZXJ5IHNlcmllcyB0aGF0IHNoYXJlcyBhIHN0YWNrIG5hbWUsIHdoYXRldmVyIGl0cyB0eXBlLiBJblxuICAvLyBhIGNvbWJvIGVhY2ggdHlwZSBzdGFja3Mgb25seSB3aXRoIGl0cyBvd24ga2luZCwgc28gYSBsaW5lIG9mIGEgcmF0ZSBuZXZlclxuICAvLyBzaXRzIG9uIHRvcCBvZiB0aGUgYmFycycgdG90YWwuXG4gIGNvbnN0IHNlcmllczogU2VyaWVzT3B0aW9uW10gPSBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoZXh0cmFjdGVkU2VyaWVzLCBpbmRleCkgPT4gYnVpbGRTZXJpZXMoXG4gICAgZXh0cmFjdGVkU2VyaWVzLm5hbWUsXG4gICAgZXh0cmFjdGVkU2VyaWVzLnZhbHVlcyxcbiAgICB0eXBlc1tpbmRleF0sXG4gICAgY29uZmlnLnN0YWNrZWQgPyAoY29tYm8gPyBgdG90YWwtJHt0eXBlc1tpbmRleF19YCA6ICd0b3RhbCcpIDogdW5kZWZpbmVkLFxuICAgIGNvbG9yQnkgJiYgaW5kZXggPT09IDAsXG4gICAgY29tYm8sXG4gICkpO1xuXG4gIGNvbnN0IGNhdGVnb3J5QXhpcyA9IGNhdGVnb3J5QXhpc09wdGlvbihjb25maWcsIGRhdGEsIGV4dHJhY3RlZC5jYXRlZ29yaWVzLCBob3Jpem9udGFsKTtcbiAgY29uc3QgdmFsdWVBeGlzID0geyB0eXBlOiAndmFsdWUnIGFzIGNvbnN0IH07XG5cbiAgY29uc3QgbGVnZW5kUG9zaXRpb24gPSByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnLCBzZXJpZXMubGVuZ3RoLCBjb2xvckJ5KTtcblxuICByZXR1cm4ge1xuICAgIGdyaWQ6IGF4aXNHcmlkKGxlZ2VuZFBvc2l0aW9uLCBjYXRlZ29yeVRpdGxlU2lkZShjb25maWcsIGhvcml6b250YWwpKSxcbiAgICBsZWdlbmQ6IGxlZ2VuZE9wdGlvbihsZWdlbmRQb3NpdGlvbiksXG4gICAgLy8gY29sb3JCeSBjaGFydHMgb3ZlcmxhcCBOIG1vc3RseS1udWxsIHNlcmllcywgc28gYW4gYXhpcyB0b29sdGlwIHdvdWxkIGxpc3RcbiAgICAvLyBldmVyeSBjYXRlZ29yeTsgYW4gaXRlbSB0b29sdGlwIHNob3dzIGp1c3QgdGhlIGhvdmVyZWQgYmFyLlxuICAgIHRvb2x0aXA6IHsgdHJpZ2dlcjogY29sb3JCeSA/ICdpdGVtJyA6ICdheGlzJyB9LFxuICAgIHhBeGlzOiBob3Jpem9udGFsID8gdmFsdWVBeGlzIDogY2F0ZWdvcnlBeGlzLFxuICAgIHlBeGlzOiBob3Jpem9udGFsID8gY2F0ZWdvcnlBeGlzIDogdmFsdWVBeGlzLFxuICAgIHNlcmllcyxcbiAgfTtcbn1cblxuLy8gVGhlIGNhdGVnb3J5IGF4aXMgb2YgYW4gYXhpcyBjaGFydCBvciBhIHdhdGVyZmFsbDogdGhlIGNhdGVnb3JpZXMgaW4gcm93XG4vLyBvcmRlciwgbGFiZWxlZCBhcyBwZXJpb2RzIHdoZW4gdGhlIHJvd3Mgd2VyZSBidWNrZXRlZCBieSB0aW1lLlxuLy9cbi8vIEhvcml6b250YWwgYmFycyByZWFkIHRvcC1kb3duOiBFQ2hhcnRzIGRyYXdzIGNhdGVnb3J5IDAgYXQgdGhlIGJvdHRvbSwgc28gdGhlXG4vLyBheGlzIGlzIGludmVydGVkIHRvIHB1dCB0aGUgZmlyc3Qgcm93ICh0aGUgbGFyZ2VzdCBvZiBhIHRvcC1OLCBhIHdhdGVyZmFsbCdzXG4vLyBmaXJzdCBzdGVwKSBhdCB0aGUgdG9wLiBUaGUgcm90YXRlZCB0aXRsZSBzaXRzIGp1c3QgYmV5b25kIHRoZSBsb25nZXN0IGxhYmVsXG4vLyByYXRoZXIgdGhhbiBhdCBhIGZpeGVkIGdhcCB0aGF0IHdvdWxkIHB1dCBpdCBvbiB0b3Agb2YgdGhlIGxhYmVscy5cbmZ1bmN0aW9uIGNhdGVnb3J5QXhpc09wdGlvbihjb25maWc6IENoYXJ0Q29uZmlnLCBkYXRhOiBDb21wb25lbnREYXRhLCBjYXRlZ29yaWVzOiBzdHJpbmdbXSwgaG9yaXpvbnRhbDogYm9vbGVhbikge1xuICBjb25zdCBncmFudWxhcml0eSA9IGJ1Y2tldEdyYW51bGFyaXR5KGRhdGEpO1xuICBjb25zdCBwZXJpb2RMYWJlbCA9IHBlcmlvZEF4aXNMYWJlbChncmFudWxhcml0eSwgY2F0ZWdvcmllcyk7XG4gIGNvbnN0IGF4aXMgPSB7XG4gICAgdHlwZTogJ2NhdGVnb3J5JyBhcyBjb25zdCxcbiAgICBkYXRhOiBjYXRlZ29yaWVzLFxuICAgIGludmVyc2U6IGhvcml6b250YWwsXG4gICAgbmFtZTogY29uZmlnLnhBeGlzPy5sYWJlbCxcbiAgICBuYW1lTG9jYXRpb246ICdtaWRkbGUnIGFzIGNvbnN0LFxuICB9O1xuXG4gIGlmICghaG9yaXpvbnRhbCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5heGlzLFxuICAgICAgbmFtZUdhcDogZ3JhbnVsYXJpdHkgJiYgc3BhbnNNdWx0aXBsZVllYXJzKGNhdGVnb3JpZXMpID8gNDAgOiAyOCxcbiAgICAgIC4uLnBlcmlvZExhYmVsLFxuICAgIH07XG4gIH1cblxuICAvLyBBIHBlcmlvZCBsYWJlbCAoJ01heScsICdRMicpIGlzIGFsd2F5cyBzaG9ydCwgc28gb25seSBhIHBsYWluIGNhdGVnb3J5IGlzXG4gIC8vIGN1dCBzaG9ydC4gVGhlIGxhYmVscyBhcmUgY3V0IGhlcmUgcmF0aGVyIHRoYW4gYnkgRUNoYXJ0cycgb3duIHRydW5jYXRpb24sXG4gIC8vIHNvIHRoZSB0aXRsZSdzIGdhcCBpcyBtZWFzdXJlZCBvbiBleGFjdGx5IHRoZSB0ZXh0IHRoZSBheGlzIGRyYXdzLlxuICBjb25zdCBzaG93biA9IGdyYW51bGFyaXR5XG4gICAgPyBudWxsXG4gICAgOiBuZXcgTWFwKGNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gW2NhdGVnb3J5LCB0cnVuY2F0ZUF4aXNMYWJlbChjYXRlZ29yeSldKSk7XG4gIGNvbnN0IGxhYmVscyA9IHNob3duID8gWy4uLnNob3duLnZhbHVlcygpXSA6IGRpc3BsYXllZENhdGVnb3J5TGFiZWxzKGNhdGVnb3JpZXMsIGdyYW51bGFyaXR5KTtcblxuICByZXR1cm4ge1xuICAgIC4uLmF4aXMsXG4gICAgbmFtZUdhcDogd2lkZXN0QXhpc0xhYmVsKGxhYmVscykgKyBBWElTX0xBQkVMX01BUkdJTiArIEFYSVNfTkFNRV9DTEVBUkFOQ0UsXG4gICAgLi4uKHNob3duID8geyBheGlzTGFiZWw6IHsgZm9ybWF0dGVyOiAodmFsdWU6IHN0cmluZykgPT4gc2hvd24uZ2V0KHZhbHVlKSA/PyB2YWx1ZSB9IH0gOiBwZXJpb2RMYWJlbCksXG4gIH07XG59XG5cbi8vIFRoZSBjYXRlZ29yeSBheGlzJ3MgdGl0bGUgc2lkZSwgb3IgbnVsbCB3aGVuIHRoZSBheGlzIGhhcyBubyB0aXRsZSB0byBtYWtlXG4vLyByb29tIGZvci5cbmZ1bmN0aW9uIGNhdGVnb3J5VGl0bGVTaWRlKGNvbmZpZzogQ2hhcnRDb25maWcsIGhvcml6b250YWw6IGJvb2xlYW4pOiBBeGlzVGl0bGVTaWRlIHwgbnVsbCB7XG4gIGlmICghY29uZmlnLnhBeGlzPy5sYWJlbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGhvcml6b250YWwgPyAnbGVmdCcgOiAnYm90dG9tJztcbn1cblxuLy8gVGhlIHRpY2sgbGFiZWxzIGFzIHRoZSBheGlzIHNob3dzIHRoZW06IGEgYnVja2V0J3MgcHJpbWFyeSBwZXJpb2QgbGFiZWxcbi8vICgnTWF5JywgJ1EyJyksIG90aGVyd2lzZSB0aGUgY2F0ZWdvcnkgaXRzZWxmLiBUaGUgeWVhciBhIG11bHRpLXllYXIgYXhpc1xuLy8gcHJpbnRzIHVuZGVyIGEgcGVyaW9kIGlzIGxlZnQgb3V0LCBhcyBpdCBpcyBuZXZlciB0aGUgd2lkZXIgbGluZS5cbmZ1bmN0aW9uIGRpc3BsYXllZENhdGVnb3J5TGFiZWxzKGNhdGVnb3JpZXM6IHN0cmluZ1tdLCBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBncmFudWxhcml0eVxuICAgID8gY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBwZXJpb2RMYWJlbFBhcnRzKGNhdGVnb3J5LCBncmFudWxhcml0eSk/LnByaW1hcnkgPz8gY2F0ZWdvcnkpXG4gICAgOiBjYXRlZ29yaWVzO1xufVxuXG4vLyBUaGUgcGl4ZWwgd2lkdGggb2YgdGhlIHdpZGVzdCBsYWJlbC4gQSBsYWJlbCB0aGF0IGJyZWFrcyBvdmVyIHNldmVyYWwgbGluZXNcbi8vIGlzIGFzIHdpZGUgYXMgaXRzIGxvbmdlc3QgbGluZS5cbmZ1bmN0aW9uIHdpZGVzdEF4aXNMYWJlbChsYWJlbHM6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgcmV0dXJuIGxhYmVscy5yZWR1Y2UoKHdpZGVzdCwgbGFiZWwpID0+IGxhYmVsLnNwbGl0KCdcXG4nKS5yZWR1Y2UoXG4gICAgKGxpbmVXaWRlc3QsIGxpbmUpID0+IE1hdGgubWF4KGxpbmVXaWRlc3QsIGF4aXNMYWJlbFdpZHRoKGxpbmUpKSxcbiAgICB3aWRlc3QsXG4gICksIDApO1xufVxuXG4vLyBBIGNhdGVnb3J5IGxhYmVsIGN1dCB0byBDQVRFR09SWV9MQUJFTF9NQVhfV0lEVEgsIGxpbmUgYnkgbGluZTogdGhlIGxvbmdlc3Rcbi8vIHN0YXJ0IG9mIGVhY2ggbGluZSB0aGF0IHN0aWxsIGZpdHMgd2l0aCB0aGUgZWxsaXBzaXMgYWZ0ZXIgaXQuXG5mdW5jdGlvbiB0cnVuY2F0ZUF4aXNMYWJlbChsYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxhYmVsLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IHtcbiAgICBpZiAoYXhpc0xhYmVsV2lkdGgobGluZSkgPD0gQ0FURUdPUllfTEFCRUxfTUFYX1dJRFRIKSB7XG4gICAgICByZXR1cm4gbGluZTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIHBvaW50cywgc28gYW4gZW1vamkgb3Igb3RoZXIgc3Vycm9nYXRlIHBhaXIgaXMgbmV2ZXIgc3BsaXQuXG4gICAgY29uc3QgY2hhcmFjdGVycyA9IEFycmF5LmZyb20obGluZSk7XG4gICAgY29uc3QgY3V0ID0gKGxlbmd0aDogbnVtYmVyKSA9PiBgJHtjaGFyYWN0ZXJzLnNsaWNlKDAsIGxlbmd0aCkuam9pbignJykudHJpbUVuZCgpfSR7TEFCRUxfRUxMSVBTSVN9YDtcbiAgICBsZXQgZml0cyA9IDA7XG4gICAgbGV0IHRvb0xvbmcgPSBjaGFyYWN0ZXJzLmxlbmd0aDtcbiAgICB3aGlsZSAodG9vTG9uZyAtIGZpdHMgPiAxKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLmZsb29yKChmaXRzICsgdG9vTG9uZykgLyAyKTtcbiAgICAgIGlmIChheGlzTGFiZWxXaWR0aChjdXQobGVuZ3RoKSkgPD0gQ0FURUdPUllfTEFCRUxfTUFYX1dJRFRIKSB7XG4gICAgICAgIGZpdHMgPSBsZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b29Mb25nID0gbGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdXQoZml0cyk7XG4gIH0pLmpvaW4oJ1xcbicpO1xufVxuXG4vLyBPbmUgbGluZSdzIHdpZHRoIGluIHRoZSBheGlzLWxhYmVsIGZvbnQsIG1lYXN1cmVkIG9uIGEgY2FudmFzIHRoZSB3YXlcbi8vIEVDaGFydHMgbWVhc3VyZXMgaXQgZm9yIGNvbnRhaW5MYWJlbC4gT3V0c2lkZSBhIGJyb3dzZXIgdGhlcmUgaXMgbm8gY2FudmFzXG4vLyB0byBtZWFzdXJlIHdpdGgsIHNvIHRoZSBsaW5lIGNvdW50cyBhcyB6ZXJvIHdpZHRoLlxubGV0IGF4aXNMYWJlbENvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBheGlzTGFiZWxXaWR0aChsaW5lOiBzdHJpbmcpOiBudW1iZXIge1xuICBpZiAoIWF4aXNMYWJlbENvbnRleHQgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGF4aXNMYWJlbENvbnRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpO1xuICB9XG5cbiAgaWYgKCFheGlzTGFiZWxDb250ZXh0KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBheGlzTGFiZWxDb250ZXh0LmZvbnQgPSBBWElTX0xBQkVMX0ZPTlQ7XG5cbiAgcmV0dXJuIGF4aXNMYWJlbENvbnRleHQubWVhc3VyZVRleHQobGluZSkud2lkdGg7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkV2F0ZXJmYWxsT3B0aW9uKGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCBkYXRhOiBDb21wb25lbnREYXRhKTogRUNoYXJ0c09wdGlvbiB7XG4gIGNvbnN0IGNvbmZpZyA9IGNvbXBvbmVudC5jb25maWcgYXMgQ2hhcnRDb25maWc7XG4gIGNvbnN0IHdhdGVyZmFsbCA9IGV4dHJhY3RXYXRlcmZhbGwoY29tcG9uZW50LCBkYXRhKTtcbiAgY29uc3QgaG9yaXpvbnRhbCA9IGNvbmZpZy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnO1xuICBjb25zdCBjYXRlZ29yeUF4aXMgPSBjYXRlZ29yeUF4aXNPcHRpb24oY29uZmlnLCBkYXRhLCB3YXRlcmZhbGwuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLmNhdGVnb3J5KSwgaG9yaXpvbnRhbCk7XG4gIGNvbnN0IHZhbHVlQXhpcyA9IHsgdHlwZTogJ3ZhbHVlJyBhcyBjb25zdCB9O1xuICAvLyBPbmUgdmlzaWJsZSBzZXJpZXMsIHNvIHRoZSBsZWdlbmQgaXMgaGlkZGVuIHVubGVzcyB0aGUgY29uZmlnIHBpbnMgaXQuXG4gIGNvbnN0IGxlZ2VuZFBvc2l0aW9uID0gcmVzb2x2ZUxlZ2VuZFBvc2l0aW9uKGNvbmZpZywgMSk7XG4gIGNvbnN0IGdyYW51bGFyaXR5ID0gYnVja2V0R3JhbnVsYXJpdHkoZGF0YSk7XG5cbiAgcmV0dXJuIHtcbiAgICBncmlkOiBheGlzR3JpZChsZWdlbmRQb3NpdGlvbiwgY2F0ZWdvcnlUaXRsZVNpZGUoY29uZmlnLCBob3Jpem9udGFsKSksXG4gICAgbGVnZW5kOiB7IC4uLmxlZ2VuZE9wdGlvbihsZWdlbmRQb3NpdGlvbiksIGRhdGE6IFt3YXRlcmZhbGwubmFtZV0gfSxcbiAgICAvLyBQZXIgYmFyOiB0aGUgaW52aXNpYmxlIGJhc2UgaXMgc2lsZW50LCBzbyBvbmx5IGEgc3RlcCBhbnN3ZXJzIHRoZSBob3Zlci5cbiAgICB0b29sdGlwOiB7XG4gICAgICB0cmlnZ2VyOiAnaXRlbScsXG4gICAgICBmb3JtYXR0ZXI6IChwYXJhbXM6IFRvb2x0aXBDb21wb25lbnRGb3JtYXR0ZXJDYWxsYmFja1BhcmFtcykgPT4gd2F0ZXJmYWxsVG9vbHRpcChcbiAgICAgICAgd2F0ZXJmYWxsLFxuICAgICAgICAoQXJyYXkuaXNBcnJheShwYXJhbXMpID8gcGFyYW1zWzBdIDogcGFyYW1zKS5kYXRhSW5kZXgsXG4gICAgICAgIGdyYW51bGFyaXR5LFxuICAgICAgKSxcbiAgICB9LFxuICAgIHhBeGlzOiBob3Jpem9udGFsID8gdmFsdWVBeGlzIDogY2F0ZWdvcnlBeGlzLFxuICAgIHlBeGlzOiBob3Jpem9udGFsID8gY2F0ZWdvcnlBeGlzIDogdmFsdWVBeGlzLFxuICAgIHNlcmllczogd2F0ZXJmYWxsU2VyaWVzKHdhdGVyZmFsbCksXG4gIH07XG59XG5cbi8vIEFuIGludmlzaWJsZSBiYXNlIHNlcmllcyBsaWZ0cyBlYWNoIHZpc2libGUgYmFyIHRvIHdoZXJlIGl0cyBzdGVwIHN0YXJ0cy5cbi8vIEJvdGggc3RhY2sgd2l0aCB0aGUgJ2FsbCcgc3RyYXRlZ3ksIHdoaWNoIGFkZHMgc2lnbmVkIHZhbHVlcyBpbiBzZXJpZXMgb3JkZXIsXG4vLyBzbyBhIGZhbGwgZHJhd3MgRE9XTiBmcm9tIHRoZSB0b3RhbCBiZWZvcmUgaXQsIGV2ZW4gYWNyb3NzIHplcm8uIFRoZSBkZWZhdWx0XG4vLyBzYW1lLXNpZ24gc3RhY2tpbmcgd291bGQgaGFuZyBhIG5lZ2F0aXZlIGJhciBiZWxvdyB0aGUgYXhpcyBpbnN0ZWFkLlxuZnVuY3Rpb24gd2F0ZXJmYWxsU2VyaWVzKHdhdGVyZmFsbDogRXh0cmFjdGVkV2F0ZXJmYWxsKTogU2VyaWVzT3B0aW9uW10ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHR5cGU6ICdiYXInLFxuICAgICAgc3RhY2s6ICd3YXRlcmZhbGwnLFxuICAgICAgc3RhY2tTdHJhdGVneTogJ2FsbCcsXG4gICAgICBkYXRhOiB3YXRlcmZhbGwuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLnN0YXJ0KSxcbiAgICAgIGJhck1heFdpZHRoOiA0OCxcbiAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogJ3RyYW5zcGFyZW50JyB9LFxuICAgICAgc2lsZW50OiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogd2F0ZXJmYWxsLm5hbWUsXG4gICAgICB0eXBlOiAnYmFyJyxcbiAgICAgIHN0YWNrOiAnd2F0ZXJmYWxsJyxcbiAgICAgIHN0YWNrU3RyYXRlZ3k6ICdhbGwnLFxuICAgICAgYmFyTWF4V2lkdGg6IDQ4LFxuICAgICAgLy8gVGhlIHNlcmllcyBjb2xvciBpcyB0aGUgcmlzZSBjb2xvciBzbyBhIHBpbm5lZCBsZWdlbmQgc2hvd3MgaXQ7IGVhY2hcbiAgICAgIC8vIGJhciBpcyB0aGVuIGNvbG9yZWQgYnkgd2hhdCBpdCBkb2VzIHRvIHRoZSB0b3RhbC5cbiAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogYCMke1JFUE9SVF9XQVRFUkZBTExfQ09MT1JTLnJpc2V9YCB9LFxuICAgICAgZGF0YTogd2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gKHtcbiAgICAgICAgdmFsdWU6IHN0ZXAuY2hhbmdlLFxuICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGAjJHtSRVBPUlRfV0FURVJGQUxMX0NPTE9SU1tzdGVwLmtpbmRdfWAgfSxcbiAgICAgIH0pKSxcbiAgICB9LFxuICBdO1xufVxuXG4vLyBBIHN0ZXAncyB0b29sdGlwOiBpdHMgcGVyaW9kLCBob3cgZmFyIGl0IG1vdmVkIHRoZSBydW5uaW5nIHRvdGFsIGFuZCB3aGVyZVxuLy8gdGhhdCBsZWZ0IGl0LiBUaGUgY2xvc2luZyBUb3RhbCBzaG93cyB0aGUgdG90YWwgYWxvbmUuIFRoZSBjYXRlZ29yeSBhbmQgdGhlXG4vLyBtZWFzdXJlIG5hbWUgY29tZSBmcm9tIHRoZSBkYXRhIGFuZCB0aGUgY29uZmlnLCBhbmQgRUNoYXJ0cyBzZXRzIHRoZSB0b29sdGlwXG4vLyBhcyBIVE1MLCBzbyBib3RoIGFyZSBlc2NhcGVkLlxuZnVuY3Rpb24gd2F0ZXJmYWxsVG9vbHRpcCh3YXRlcmZhbGw6IEV4dHJhY3RlZFdhdGVyZmFsbCwgaW5kZXg6IG51bWJlciwgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RlcCA9IHdhdGVyZmFsbC5zdGVwc1tpbmRleF07XG4gIGNvbnN0IGNhdGVnb3J5ID0gZXNjYXBlSHRtbChncmFudWxhcml0eSA/IGZvcm1hdFBlcmlvZExhYmVsKHN0ZXAuY2F0ZWdvcnksIGdyYW51bGFyaXR5LCB0cnVlKSA6IHN0ZXAuY2F0ZWdvcnkpO1xuICBjb25zdCBuYW1lID0gZXNjYXBlSHRtbCh3YXRlcmZhbGwubmFtZSk7XG5cbiAgaWYgKHN0ZXAua2luZCA9PT0gJ3RvdGFsJykge1xuICAgIHJldHVybiBgJHtjYXRlZ29yeX08YnIvPiR7bmFtZX06ICR7Zm9ybWF0TWVhc3VyZVZhbHVlKHN0ZXAuY2hhbmdlKX1gO1xuICB9XG5cbiAgY29uc3Qgc2lnbiA9IChzdGVwLmNoYW5nZSA/PyAwKSA+IDAgPyAnKycgOiAnJztcblxuICByZXR1cm4gYCR7Y2F0ZWdvcnl9PGJyLz4ke25hbWV9OiAke3NpZ259JHtmb3JtYXRNZWFzdXJlVmFsdWUoc3RlcC5jaGFuZ2UpfWBcbiAgICArIGA8YnIvPlJ1bm5pbmcgdG90YWw6ICR7Zm9ybWF0TWVhc3VyZVZhbHVlKHN0ZXAuc3RhcnQgKyAoc3RlcC5jaGFuZ2UgPz8gMCkpfWA7XG59XG5cbi8vIERlZmF1bHQgbGVnZW5kIHBsYWNlbWVudCB3aGVuIHRoZSBjb25maWcgZG9lc24ndCBwaW4gb25lOiBwaWUgY2hhcnRzIHJlYWRcbi8vIGJlc3Qgd2l0aCB0aGUgc2xpY2Uga2V5IGJlc2lkZSB0aGVtIChyaWdodCk7IGF4aXMgY2hhcnRzIG9ubHkgbmVlZCBhIGxlZ2VuZFxuLy8gdG8gdGVsbCBtdWx0aXBsZSBzZXJpZXMgYXBhcnQsIHNvIGEgc2luZ2xlLXNlcmllcyBjaGFydCBoaWRlcyBpdC4gQW4gZXhwbGljaXRcbi8vIGNvbmZpZy5sZWdlbmQgKGluY2x1ZGluZyAnaGlkZGVuJykgYWx3YXlzIHdpbnMuIFNoYXJlZCB3aXRoIHRoZSBQb3dlclBvaW50XG4vLyBleHBvcnQgc28gYm90aCBtZWRpYSBwbGFjZSB0aGUgbGVnZW5kIGlkZW50aWNhbGx5LlxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMZWdlbmRQb3NpdGlvbihjb25maWc6IENoYXJ0Q29uZmlnLCBzZXJpZXNDb3VudDogbnVtYmVyLCBjb2xvckJ5ID0gZmFsc2UpOiBMZWdlbmRQb3NpdGlvbiB7XG4gIGlmIChjb25maWcubGVnZW5kKSB7XG4gICAgcmV0dXJuIGNvbmZpZy5sZWdlbmQ7XG4gIH1cblxuICBjb25zdCBwaWUgPSBjb25maWcuY2hhcnRUeXBlID09PSAncGllJyB8fCBjb25maWcuY2hhcnRUeXBlID09PSAnZG9udXQnO1xuXG4gIC8vIGNvbG9yQnkgbWFwcyBlYWNoIGJhcidzIGNvbG9yIHRvIGl0cyBjYXRlZ29yeSwgc28gaXQgbmVlZHMgYSBsZWdlbmQgZXZlblxuICAvLyB0aG91Z2ggaXQncyBhIHNpbmdsZSBtZWFzdXJlLlxuICByZXR1cm4gcGllIHx8IGNvbG9yQnkgfHwgc2VyaWVzQ291bnQgPiAxID8gKHBpZSA/ICdyaWdodCcgOiAndG9wJykgOiAnaGlkZGVuJztcbn1cblxuZnVuY3Rpb24gbGVnZW5kT3B0aW9uKHBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbik6IExlZ2VuZENvbXBvbmVudE9wdGlvbiB7XG4gIGlmIChwb3NpdGlvbiA9PT0gJ2hpZGRlbicpIHtcbiAgICByZXR1cm4geyBzaG93OiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgYmFzZTogTGVnZW5kQ29tcG9uZW50T3B0aW9uID0geyB0eXBlOiAnc2Nyb2xsJyB9O1xuXG4gIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiAwIH07XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBvcmllbnQ6ICd2ZXJ0aWNhbCcsIGxlZnQ6IDAsIHRvcDogJ21pZGRsZScgfTtcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBvcmllbnQ6ICd2ZXJ0aWNhbCcsIHJpZ2h0OiAwLCB0b3A6ICdtaWRkbGUnIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogMCB9O1xuICB9XG59XG5cbi8vIFRoZSBwbG90J3MgZ3JpZDogcm9vbSBvbiB0aGUgbGVnZW5kJ3Mgc2lkZSBzbyBpdCBuZXZlciBvdmVybGFwcyB0aGVcbi8vIGJhcnMvbGluZXMsIHBsdXMgcm9vbSBmb3IgdGhlIGNhdGVnb3J5IGF4aXMncyB0aXRsZSBvbiBpdHMgc2lkZSwgd2hpY2hcbi8vIGNvbnRhaW5MYWJlbCBkb2VzIG5vdCByZXNlcnZlIChpdCBjb3ZlcnMgdGhlIHRpY2sgbGFiZWxzIG9ubHkpLlxuZnVuY3Rpb24gYXhpc0dyaWQocG9zaXRpb246IExlZ2VuZFBvc2l0aW9uLCB0aXRsZVNpZGU6IEF4aXNUaXRsZVNpZGUgfCBudWxsKTogRUNoYXJ0c09wdGlvblsnZ3JpZCddIHtcbiAgY29uc3QgZ3JpZCA9IGxlZ2VuZEdyaWQocG9zaXRpb24pO1xuXG4gIHN3aXRjaCAodGl0bGVTaWRlKSB7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiB7IC4uLmdyaWQsIGJvdHRvbTogZ3JpZC5ib3R0b20gKyBBWElTX05BTUVfUk9PTSB9O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgcmV0dXJuIHsgLi4uZ3JpZCwgbGVmdDogZ3JpZC5sZWZ0ICsgQVhJU19OQU1FX1JPT00gfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGdyaWQ7XG4gIH1cbn1cblxuLy8gUGxvdC1lZGdlIHJvb20gb24gd2hpY2hldmVyIHNpZGUgdGhlIGxlZ2VuZCBvY2N1cGllczsgY29udGFpbkxhYmVsIGtlZXBzIHRoZVxuLy8gdGljayBsYWJlbHMgaW5zaWRlIHdoYXQgaXMgbGVmdC5cbmZ1bmN0aW9uIGxlZ2VuZEdyaWQocG9zaXRpb246IExlZ2VuZFBvc2l0aW9uKTogQXhpc0dyaWRSb29tIHtcbiAgY29uc3QgYmFzZTogQXhpc0dyaWRSb29tID0geyBsZWZ0OiA4LCByaWdodDogMTYsIHRvcDogOCwgYm90dG9tOiA4LCBjb250YWluTGFiZWw6IHRydWUgfTtcblxuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogMzIgfTtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGxlZnQ6IDk2IH07XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgcmlnaHQ6IDk2IH07XG4gICAgY2FzZSAnaGlkZGVuJzpcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IDMyIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRTZXJpZXMoXG4gIG5hbWU6IHN0cmluZyxcbiAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXSxcbiAgdHlwZTogQXhpc0NoYXJ0VHlwZSxcbiAgc3RhY2s6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgb3ZlcmxhcDogYm9vbGVhbixcbiAgY29tYm86IGJvb2xlYW4sXG4pOiBTZXJpZXNPcHRpb24ge1xuICBpZiAodHlwZSA9PT0gJ2JhcicpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIHR5cGU6ICdiYXInLFxuICAgICAgZGF0YTogdmFsdWVzLFxuICAgICAgc3RhY2ssXG4gICAgICBiYXJNYXhXaWR0aDogNDgsXG4gICAgICAvLyBjb2xvckJ5OiBvdmVybGFwIHRoZSBwZXItY2F0ZWdvcnkgc2VyaWVzIHNvIGVhY2ggYmFyIHJlbmRlcnMgZnVsbC13aWR0aC5cbiAgICAgIC4uLihvdmVybGFwID8geyBiYXJHYXA6ICctMTAwJScsIGJhckNhdGVnb3J5R2FwOiAnMjAlJyB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgdHlwZTogJ2xpbmUnLFxuICAgIGRhdGE6IHZhbHVlcyxcbiAgICBzdGFjayxcbiAgICBzbW9vdGg6IHRydWUsXG4gICAgc3ltYm9sU2l6ZTogNixcbiAgICBhcmVhU3R5bGU6IHR5cGUgPT09ICdhcmVhJyA/IHsgb3BhY2l0eTogMC4yNSB9IDogdW5kZWZpbmVkLFxuICAgIC8vIEluIGEgY29tYm8gdGhlIGxpbmUgaXMgZHJhd24gb3ZlciB0aGUgYmFycyB3aGF0ZXZlciBvcmRlciB0aGUgbWVhc3VyZXNcbiAgICAvLyBjb21lIGluOyBhdCB0aGUgc2FtZSB6IGEgbGF0ZXIgYmFyIHNlcmllcyB3b3VsZCBwYWludCBhY3Jvc3MgaXQuXG4gICAgLi4uKGNvbWJvID8geyB6OiAzIH0gOiB7fSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUGllT3B0aW9uKGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCBkYXRhOiBDb21wb25lbnREYXRhLCBkb251dDogYm9vbGVhbik6IEVDaGFydHNPcHRpb24ge1xuICBjb25zdCBjb25maWcgPSBjb21wb25lbnQuY29uZmlnIGFzIENoYXJ0Q29uZmlnO1xuICBjb25zdCBleHRyYWN0ZWQgPSBleHRyYWN0Q2hhcnRTZXJpZXMoY29tcG9uZW50LCBkYXRhKTtcbiAgY29uc3QgdmFsdWVzID0gZXh0cmFjdGVkLnNlcmllc1swXT8udmFsdWVzID8/IFtdO1xuICBjb25zdCBsZWdlbmRQb3NpdGlvbiA9IHJlc29sdmVMZWdlbmRQb3NpdGlvbihjb25maWcsIGV4dHJhY3RlZC5zZXJpZXMubGVuZ3RoKTtcblxuICByZXR1cm4ge1xuICAgIHRvb2x0aXA6IHsgdHJpZ2dlcjogJ2l0ZW0nIH0sXG4gICAgbGVnZW5kOiBsZWdlbmRPcHRpb24obGVnZW5kUG9zaXRpb24pLFxuICAgIHNlcmllczogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAncGllJyxcbiAgICAgICAgcmFkaXVzOiBkb251dCA/IFsnNDUlJywgJzcyJSddIDogJzcyJScsXG4gICAgICAgIGNlbnRlcjogcGllQ2VudGVyKGxlZ2VuZFBvc2l0aW9uKSxcbiAgICAgICAgbGFiZWw6IHsgc2hvdzogZmFsc2UgfSxcbiAgICAgICAgZGF0YTogZXh0cmFjdGVkLmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgbmFtZTogY2F0ZWdvcnksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlc1tpbmRleF0gPz8gMCxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xufVxuXG4vLyBOdWRnZSB0aGUgcGllIG9mZi1jZW50ZXIgdG93YXJkIHRoZSBvcHBvc2l0ZSBlZGdlIGZyb20gaXRzIGxlZ2VuZCBzbyB0aGUgdHdvXG4vLyBkb24ndCBjb2xsaWRlOyBjZW50ZXJlZCB3aGVuIHRoZSBsZWdlbmQgaXMgaGlkZGVuLlxuZnVuY3Rpb24gcGllQ2VudGVyKHBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbik6IFtzdHJpbmcsIHN0cmluZ10ge1xuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICByZXR1cm4gWyc2MCUnLCAnNTAlJ107XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIFsnNDAlJywgJzUwJSddO1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICByZXR1cm4gWyc1MCUnLCAnNTglJ107XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiBbJzUwJScsICc0NiUnXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFsnNTAlJywgJzUwJSddO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuaXF1ZVZhbHVlcyhyb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCBjb2x1bW46IHN0cmluZyk6IHVua25vd25bXSB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHVua25vd24+KCk7XG4gIGNvbnN0IHZhbHVlczogdW5rbm93bltdID0gW107XG4gIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJvd1tjb2x1bW5dO1xuICAgIGlmICghc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZnVuY3Rpb24gbnVtZXJpYyh2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IG51bGwge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSk7XG5cbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbDtcbn1cblxuLy8gVGhlIGVmZmVjdGl2ZSB0aW1lIGJ1Y2tldCB0aGUgcm93cyB3ZXJlIGdyb3VwZWQgaW50byAoZnJvbSB0aGUgZGF0YSBlbmRwb2ludCksXG4vLyBvciBudWxsIHdoZW4gdGhlIHgtYXhpcyBpc24ndCBhIHRpbWUgYXhpcyDigJQgZ2F0ZXMgdGhlIGNvbXBhY3QgcGVyaW9kIGxhYmVscy5cbmZ1bmN0aW9uIGJ1Y2tldEdyYW51bGFyaXR5KGRhdGE6IENvbXBvbmVudERhdGEpOiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCB7XG4gIHJldHVybiBkYXRhLmdyYW51bGFyaXR5ICYmIEdSQU5VTEFSSVRZX09QVElPTlMuc29tZSgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IGRhdGEuZ3JhbnVsYXJpdHkpXG4gICAgPyBkYXRhLmdyYW51bGFyaXR5XG4gICAgOiBudWxsO1xufVxuXG4vLyBXaGV0aGVyIHRoZSBwZXJpb2Qtc3RhcnQgY2F0ZWdvcmllcyBjcm9zcyBhIHllYXIgYm91bmRhcnkuIFdoZW4gdGhleSBkb24ndCxcbi8vIHRoZSB5ZWFyIGlzIHB1cmUgbm9pc2Ugb24gZXZlcnkgbGFiZWwsIHNvIGl0J3MgZHJvcHBlZCBlbnRpcmVseS5cbmV4cG9ydCBmdW5jdGlvbiBzcGFuc011bHRpcGxlWWVhcnMoY2F0ZWdvcmllczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3QgeWVhcnMgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzKSB7XG4gICAgY29uc3QgZGF0ZSA9IHBhcnNlSVNPKGNhdGVnb3J5KTtcbiAgICBpZiAoaXNWYWxpZChkYXRlKSkge1xuICAgICAgeWVhcnMuYWRkKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHllYXJzLnNpemUgPiAxO1xufVxuXG4vLyBBIGJ1Y2tldCdzIHBlcmlvZC1zdGFydCBzcGxpdCBpbnRvIGl0cyBwcmltYXJ5IGxhYmVsIGFuZCBpdHMgeWVhci4gRGF5L3dlZWtcbi8vIHJlYWQgYXMgXCJNYXkgMVwiLCBtb250aCBhcyBcIk1heVwiLCBxdWFydGVyIGFzIFwiUTJcIiwgeWVhciBhcyBcIjIwMjVcIi4gUmV0dXJucyBudWxsXG4vLyBmb3IgYSB2YWx1ZSB0aGF0IGlzbid0IGEgcGFyc2VhYmxlIGRhdGUgKGxlZnQgYXMtaXMgYnkgY2FsbGVycykuXG5mdW5jdGlvbiBwZXJpb2RMYWJlbFBhcnRzKHZhbHVlOiBzdHJpbmcsIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5KTogeyBwcmltYXJ5OiBzdHJpbmc7IHllYXI6IHN0cmluZyB9IHwgbnVsbCB7XG4gIGNvbnN0IGRhdGUgPSBwYXJzZUlTTyh2YWx1ZSk7XG4gIGlmICghaXNWYWxpZChkYXRlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeWVhciA9IFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7XG4gICAgY2FzZSAneWVhcic6XG4gICAgICByZXR1cm4geyBwcmltYXJ5OiB5ZWFyLCB5ZWFyIH07XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4geyBwcmltYXJ5OiBgUSR7TWF0aC5mbG9vcihkYXRlLmdldE1vbnRoKCkgLyAzKSArIDF9YCwgeWVhciB9O1xuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiB7IHByaW1hcnk6IGZvcm1hdChkYXRlLCAnTU1NTScpLCB5ZWFyIH07XG4gICAgZGVmYXVsdDogLy8gZGF5LCB3ZWVrIOKAlCB0aGUgYnVja2V0IHN0YXJ0IGFzIGEgY29tcGFjdCBcIk1NTSBkXCJcbiAgICAgIHJldHVybiB7IHByaW1hcnk6IGZvcm1hdChkYXRlLCAnTU1NIGQnKSwgeWVhciB9O1xuICB9XG59XG5cbi8vIEEgY29tcGFjdCBzaW5nbGUtbGluZSBwZXJpb2QgbGFiZWwgKHllYXIgYXBwZW5kZWQgb25seSB3aGVuIHRoZSBkYXRhIHNwYW5zXG4vLyB5ZWFycykg4oCUIGZvciBtZWRpYSB0aGF0IGNhbid0IGRvIGEgc3R5bGVkIHNlY29uZCBsaW5lLCBlLmcuIFBvd2VyUG9pbnQuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGVyaW9kTGFiZWwodmFsdWU6IHN0cmluZywgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHksIG11bHRpWWVhcjogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gcGVyaW9kTGFiZWxQYXJ0cyh2YWx1ZSwgZ3JhbnVsYXJpdHkpO1xuICBpZiAoIXBhcnRzKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG11bHRpWWVhciAmJiBncmFudWxhcml0eSAhPT0gJ3llYXInID8gYCR7cGFydHMucHJpbWFyeX0gJHtwYXJ0cy55ZWFyfWAgOiBwYXJ0cy5wcmltYXJ5O1xufVxuXG4vLyBBIGNyb3NzLXRhYidzIGNvbHVtbiBoZWFkaW5ncywgdGhlIG9uZSBydWxlIHRoZSBncmlkIGFuZCB0aGUgUERGL1Bvd2VyUG9pbnRcbi8vIGV4cG9ydHMgc2hhcmUuIFRoZSBmaXJzdCBpcyB0aGUgcm93IGtleSBhbmQga2VlcHMgaXRzIGF1dGhvcmVkIGxhYmVsOyB0aGVcbi8vIHJlc3QgYXJlIHBpdm90IFZBTFVFUy4gV2hlbiB0aGUgcGl2b3QgYXhpcyBpcyBhIHRpbWUgZGltZW5zaW9uIHRoZSBzZXJ2ZXJcbi8vIHNlbmRzIHRoZSBncmFpbiBpdCBidWNrZXRlZCBhdCwgc28gYSBwZXJpb2Qtc3RhcnQgbGlrZSBcIjIwMjYtMDEtMDFcIiByZWFkc1xuLy8gXCJKYW51YXJ5IDIwMjZcIiwgYXMgdGhlIGNoYXJ0J3MgeC1heGlzIGxhYmVscyBpdC5cbmV4cG9ydCBmdW5jdGlvbiBwaXZvdEhlYWRpbmdzKGNvbmZpZzogTGlzdENvbmZpZywgZGF0YTogQ29tcG9uZW50RGF0YSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgY29sdW1ucyA9IGRhdGEuY29sdW1ucyA/PyBbXTtcbiAgY29uc3QgbXVsdGlZZWFyID0gc3BhbnNNdWx0aXBsZVllYXJzKGNvbHVtbnMpO1xuXG4gIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5yb3dCeT8ubGFiZWwgfHwgY29sdW1uO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhLmdyYW51bGFyaXR5ID8gZm9ybWF0UGVyaW9kTGFiZWwoY29sdW1uLCBkYXRhLmdyYW51bGFyaXR5LCBtdWx0aVllYXIpIDogY29sdW1uO1xuICB9KTtcbn1cblxuLy8gRUNoYXJ0cyBjYXRlZ29yeS1heGlzIGxhYmVsIGNvbmZpZyBmb3IgYSB0aW1lIGJ1Y2tldDogdGhlIHByaW1hcnkgbGFiZWwgb25cbi8vIGxpbmUgb25lLCBhbmQg4oCUIG9ubHkgd2hlbiB0aGUgZGF0YSBzcGFucyBtdWx0aXBsZSB5ZWFycyDigJQgdGhlIHllYXIgb24gYSBzbWFsbFxuLy8gZ3JheSBzZWNvbmQgbGluZSwgY2VudGVyZWQgdW5kZXIgdGhlIHRpY2sgKHllYXIgZ3JhbnVsYXJpdHkgbmVlZHMgbm8gc2Vjb25kXG4vLyBsaW5lLCBpdCBhbHJlYWR5IGlzIHRoZSB5ZWFyKS4gRW1wdHkgZm9yIGEgbm9uLXRpbWUgYXhpcyAobGFiZWxzIGFzLWlzKS5cbmZ1bmN0aW9uIHBlcmlvZEF4aXNMYWJlbChncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwsIGNhdGVnb3JpZXM6IHN0cmluZ1tdKTogeyBheGlzTGFiZWw/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgaWYgKCFncmFudWxhcml0eSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IG11bHRpWWVhciA9IHNwYW5zTXVsdGlwbGVZZWFycyhjYXRlZ29yaWVzKTtcblxuICByZXR1cm4ge1xuICAgIGF4aXNMYWJlbDoge1xuICAgICAgZm9ybWF0dGVyOiAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBlcmlvZExhYmVsUGFydHModmFsdWUsIGdyYW51bGFyaXR5KTtcbiAgICAgICAgaWYgKCFwYXJ0cykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtdWx0aVllYXIgJiYgZ3JhbnVsYXJpdHkgIT09ICd5ZWFyJ1xuICAgICAgICAgID8gYCR7cGFydHMucHJpbWFyeX1cXG57eXJ8JHtwYXJ0cy55ZWFyfX1gXG4gICAgICAgICAgOiBwYXJ0cy5wcmltYXJ5O1xuICAgICAgfSxcbiAgICAgIHJpY2g6IHsgeXI6IHsgZm9udFNpemU6IDEwLCBjb2xvcjogJyM5YWEwYTYnLCBsaW5lSGVpZ2h0OiAxNCB9IH0sXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -14,6 +14,10 @@ import { GROUP_BY_ITEM, GROUP_PARAM_PREFIX, dateBoundString, dateFromBound, grou
|
|
|
14
14
|
// - groupBy: the group-by grain (GROUP_BY_ITEM).
|
|
15
15
|
// The page key is the host's (FsAiReportComponent.pageQueryParam) and is
|
|
16
16
|
// written beside these, never by this codec.
|
|
17
|
+
// The prefix of a group's value key. Declared beside the filter items, which
|
|
18
|
+
// read it too (declaring it here would make the two files import each other);
|
|
19
|
+
// re-exported so every codec constant can be imported from the codec.
|
|
20
|
+
export { GROUP_PARAM_PREFIX } from './report-filter-items';
|
|
17
21
|
// The prefix of a list's sort key.
|
|
18
22
|
export const LIST_SORT_PARAM_PREFIX = 's';
|
|
19
23
|
// Between the two days of an encoded fixed date range.
|
|
@@ -141,4 +145,4 @@ function decodePreset(name, resolveRelative) {
|
|
|
141
145
|
const range = resolveRelative(name);
|
|
142
146
|
return range ? { start: range.start, end: range.end, preset: name } : undefined;
|
|
143
147
|
}
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXVybC1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9yZXBvcnQtdXJsLXN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFDTCxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEdBQ2pGLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSwrRUFBK0U7QUFDL0Usc0VBQXNFO0FBQ3RFLEVBQUU7QUFDRixrRkFBa0Y7QUFDbEYsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSxnRkFBZ0Y7QUFDaEYsNEVBQTRFO0FBQzVFLG9FQUFvRTtBQUNwRSx3RUFBd0U7QUFDeEUsaURBQWlEO0FBQ2pELHlFQUF5RTtBQUN6RSw2Q0FBNkM7QUFFN0MsbUNBQW1DO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUUxQyx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBRXpDLHdFQUF3RTtBQUN4RSxzREFBc0Q7QUFDdEQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssa0JBQWtCLEdBQUcsc0JBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBRWhHLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDO0FBRTFDLDRFQUE0RTtBQUM1RSxtQkFBbUI7QUFDbkIsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE1BQWdCO0lBQ2xELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBRTVDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxD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LFNBQVMsRUFBRSxDQUFDO1FBQzdDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFFRCwyRUFBMkU7QUFDM0Usa0JBQWtCO0FBQ2xCLFNBQVMsU0FBUyxDQUFDLElBQVk7SUFDN0IsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pGLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FDbkIsSUFBWSxFQUNaLGVBQW9FO0lBRXBFLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVwQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNsRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyYW1NYXAsIFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7XG4gIEZpbHRlckdyb3VwVmFsdWUsIFJlcG9ydEZpbHRlclR5cGUsIFJlcG9ydFNvcnQsIFJlcG9ydFVybFBhcmFtcywgUmVwb3J0VXJsU25hcHNob3QsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEdST1VQX0JZX0lURU0sIEdST1VQX1BBUkFNX1BSRUZJWCwgZGF0ZUJvdW5kU3RyaW5nLCBkYXRlRnJvbUJvdW5kLCBncm91cEl0ZW1OYW1lLFxufSBmcm9tICcuL3JlcG9ydC1maWx0ZXItaXRlbXMnO1xuXG5cbi8vIFRoZSByZXBvcnQgdmlld2VyJ3Mgc3RhdGUgaW4gaXRzIFVSTDogYSBwdXJlIGNvZGVjLCB3aXRoIG5vIGtub3dsZWRnZSBvZiBhXG4vLyBsb2FkZWQgcmVwb3J0LiBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UgZGVjaWRlcyBXSEFUIGlzIGNhcnJpZWQgKG9ubHkgdmFsdWVzXG4vLyB0aGF0IGRpZmZlciBmcm9tIHRoZSBhdXRob3JlZCBkZWZhdWx0cykgYW5kIGNoZWNrcyB3aGF0IGlzIHJlYWQgYmFjayBhZ2FpbnN0XG4vLyB0aGUgcmVwb3J0OyB0aGlzIGZpbGUgb25seSB0dXJucyB2YWx1ZXMgaW50byBxdWVyeSBwYXJhbXMgYW5kIGJhY2suXG4vL1xuLy8gICA/cGFnZT03Jmdyb3VwQnk9d2VlayZnMTI9bGFzdDMwRGF5cyZnMTU9Myw1JmcxNj0yMDI2LTAxLTAxLi4mczMxPS1jcmVhdGVfZGF0ZVxuLy9cbi8vIC0gZzxncm91cElkPjogb25lIGtleSBwZXIgZmlsdGVyIGdyb3VwLiBBIGRhdGVSYW5nZSBpcyBpdHMgcmVsYXRpdmUgcHJlc2V0XG4vLyAgIG5hbWUgd2hlbiBpdCBjYXJyaWVzIG9uZSwgZWxzZSAnWVlZWS1NTS1ERC4uWVlZWS1NTS1ERCcgKGVpdGhlciBzaWRlIG1heSBiZVxuLy8gICBlbXB0eSk7IGEgc2VsZWN0IGlzIGl0cyB2YWx1ZXMgam9pbmVkIGJ5ICcsJzsgYSBrZXl3b3JkIGlzIGl0cyB0ZXh0LiBBblxuLy8gICBlbXB0eSB2YWx1ZSBpcyBhbiBleHBsaWNpdCBjbGVhciBvZiBhIGdyb3VwIHRoYXQgaGFzIGEgZGVmYXVsdC5cbi8vIC0gczxjb21wb25lbnRJZD46IGEgbGlzdCdzIHNvcnQgY29sdW1uLCAnLScgcHJlZml4ZWQgd2hlbiBkZXNjZW5kaW5nLlxuLy8gLSBncm91cEJ5OiB0aGUgZ3JvdXAtYnkgZ3JhaW4gKEdST1VQX0JZX0lURU0pLlxuLy8gVGhlIHBhZ2Uga2V5IGlzIHRoZSBob3N0J3MgKEZzQWlSZXBvcnRDb21wb25lbnQucGFnZVF1ZXJ5UGFyYW0pIGFuZCBpc1xuLy8gd3JpdHRlbiBiZXNpZGUgdGhlc2UsIG5ldmVyIGJ5IHRoaXMgY29kZWMuXG5cbi8vIFRoZSBwcmVmaXggb2YgYSBsaXN0J3Mgc29ydCBrZXkuXG5leHBvcnQgY29uc3QgTElTVF9TT1JUX1BBUkFNX1BSRUZJWCA9ICdzJztcblxuLy8gQmV0d2VlbiB0aGUgdHdvIGRheXMgb2YgYW4gZW5jb2RlZCBmaXhlZCBkYXRlIHJhbmdlLlxuZXhwb3J0IGNvbnN0IERBVEVfUkFOR0VfU0VQQVJBVE9SID0gJy4uJztcblxuLy8gQSBrZXkgdGhpcyBjb2RlYyBvd25zOiBhIGdyb3VwIHZhbHVlIG9yIGEgbGlzdCBzb3J0LiBBbnkgc3VjaCBrZXkgdGhlXG4vLyBzbmFwc2hvdCBubyBsb25nZXIgY2FycmllcyBpcyByZW1vdmVkIGZyb20gdGhlIFVSTC5cbmV4cG9ydCBjb25zdCBPV05FRF9QQVJBTSA9IG5ldyBSZWdFeHAoYF5bJHtHUk9VUF9QQVJBTV9QUkVGSVh9JHtMSVNUX1NPUlRfUEFSQU1fUFJFRklYfV1cXFxcZCskYCk7XG5cbmNvbnN0IERBWV9QQVRURVJOID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvO1xuXG4vLyBUaGUgdmlld2VyLXN0YXRlIHBhcmFtcyBvZiBhIFVSTCBhcyByYXcgc3RyaW5ncy4gS2V5cyB0aGlzIGNvZGVjIGRvZXMgbm90XG4vLyBvd24gYXJlIGlnbm9yZWQuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlcG9ydFVybFBhcmFtcyhwYXJhbXM6IFBhcmFtTWFwKTogUmVwb3J0VXJsUGFyYW1zIHtcbiAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcbiAgY29uc3QgbGlzdFNvcnRzID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBwYXJhbXMua2V5cykge1xuICAgIGlmICghT1dORURfUEFSQU0udGVzdChrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IE51bWJlcihrZXkuc2xpY2UoMSkpO1xuICAgIGNvbnN0IHJhdyA9IHBhcmFtcy5nZXQoa2V5KSA/PyAnJztcblxuICAgIGlmIChrZXkuc3RhcnRzV2l0aChHUk9VUF9QQVJBTV9QUkVGSVgpKSB7XG4gICAgICBncm91cHMuc2V0KGlkLCByYXcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0U29ydHMuc2V0KGlkLCByYXcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGdyb3VwcywgbGlzdFNvcnRzLCBncm91cEJ5OiBwYXJhbXMuZ2V0KEdST1VQX0JZX0lURU0pIH07XG59XG5cbi8vIEEgZ3JvdXAgdmFsdWUgcmVhZCBiYWNrIGZyb20gaXRzIFVSTCBwYXJhbS4gbnVsbCBpcyBhbiBleHBsaWNpdCBjbGVhciAoYW5cbi8vIGVtcHR5IHBhcmFtKS4gdW5kZWZpbmVkIG1lYW5zIHRoZSBwYXJhbSBpcyB1bnVzYWJsZSBmb3IgYSBncm91cCBvZiB0aGlzIHR5cGVcbi8vIChhbiB1bmtub3duIHByZXNldCBuYW1lLCBhIG1hbGZvcm1lZCBkYXksIGEgd3Jvbmcgc2hhcGUpIGFuZCBpcyBpZ25vcmVkLlxuLy8gYHJlc29sdmVSZWxhdGl2ZWAgdHVybnMgYSBwcmVzZXQgbmFtZSBpbnRvIHRvZGF5J3MgcmFuZ2UgZm9yIGl0LCBvciBudWxsIGZvclxuLy8gYSBuYW1lIGl0IGRvZXMgbm90IGtub3cuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRmlsdGVyVmFsdWUoXG4gIHR5cGU6IFJlcG9ydEZpbHRlclR5cGUsXG4gIHJhdzogc3RyaW5nLFxuICByZXNvbHZlUmVsYXRpdmU6IChuYW1lOiBzdHJpbmcpID0+IHsgc3RhcnQ6IERhdGU7IGVuZDogRGF0ZSB9IHwgbnVsbCxcbik6IEZpbHRlckdyb3VwVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHJhdyA9PT0gJycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2RhdGVSYW5nZSc6XG4gICAgICByZXR1cm4gcmF3LmluY2x1ZGVzKERBVEVfUkFOR0VfU0VQQVJBVE9SKVxuICAgICAgICA/IGRlY29kZUZpeGVkUmFuZ2UocmF3KVxuICAgICAgICA6IGRlY29kZVByZXNldChyYXcsIHJlc29sdmVSZWxhdGl2ZSk7XG5cbiAgICBjYXNlICdzZWxlY3QnOiB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSByYXcuc3BsaXQoJywnKS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gJycpO1xuXG4gICAgICByZXR1cm4gdmFsdWVzLmxlbmd0aCA/IHsgdmFsdWVzIH0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY2FzZSAna2V5d29yZCc6XG4gICAgICByZXR1cm4gcmF3LnRyaW0oKSA/IHsgdmFsdWU6IHJhdyB9IDogdW5kZWZpbmVkO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLy8gQSBncm91cCB2YWx1ZSBhcyBpdHMgVVJMIHBhcmFtLiBUaGUgc2hhcGUgc2F5cyBob3c6IGEgcHJlc2V0IG5hbWUsIHRoZW4gYVxuLy8gZGF0ZSByYW5nZSwgdGhlbiBzZWxlY3QgdmFsdWVzLCB0aGVuIGtleXdvcmQgdGV4dC4gbnVsbCAoYSBjbGVhcmVkIGdyb3VwKVxuLy8gaXMgdGhlIGVtcHR5IHBhcmFtLlxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUZpbHRlclZhbHVlKHZhbHVlOiBGaWx0ZXJHcm91cFZhbHVlIHwgbnVsbCk6IHN0cmluZyB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodmFsdWUucHJlc2V0KSB7XG4gICAgcmV0dXJuIHZhbHVlLnByZXNldDtcbiAgfVxuXG4gIGlmICh2YWx1ZS5zdGFydCB8fCB2YWx1ZS5lbmQpIHtcbiAgICByZXR1cm4gW2RhdGVCb3VuZFN0cmluZyh2YWx1ZS5zdGFydCkgPz8gJycsIGRhdGVCb3VuZFN0cmluZyh2YWx1ZS5lbmQpID8/ICcnXVxuICAgICAgLmpvaW4oREFURV9SQU5HRV9TRVBBUkFUT1IpO1xuICB9XG5cbiAgaWYgKHZhbHVlLnZhbHVlcykge1xuICAgIHJldHVybiB2YWx1ZS52YWx1ZXMubWFwKChpdGVtKSA9PiBTdHJpbmcoaXRlbSkpLmpvaW4oJywnKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZS52YWx1ZSA/PyAnJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVNvcnQoc29ydDogUmVwb3J0U29ydCk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtzb3J0LmRpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gJy0nIDogJyd9JHtzb3J0LmNvbHVtbn1gO1xufVxuXG4vLyBBIGxpc3Qgc29ydCByZWFkIGJhY2sgZnJvbSBpdHMgVVJMIHBhcmFtLCBvciBudWxsIHdoZW4gaXQgbmFtZXMgbm8gY29sdW1uLlxuLy8gV2hldGhlciB0aGUgY29sdW1uIGlzIG9uZSB0aGUgbGlzdCBjYW4gc29ydCBieSBpcyB0aGUgY2FsbGVyJ3MgY2hlY2suXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU29ydChyYXc6IHN0cmluZyk6IFJlcG9ydFNvcnQgfCBudWxsIHtcbiAgY29uc3QgZGVzY2VuZGluZyA9IHJhdy5zdGFydHNXaXRoKCctJyk7XG4gIGNvbnN0IGNvbHVtbiA9IGRlc2NlbmRpbmcgPyByYXcuc2xpY2UoMSkgOiByYXc7XG5cbiAgcmV0dXJuIGNvbHVtblxuICAgID8geyBjb2x1bW4sIGRpcmVjdGlvbjogZGVzY2VuZGluZyA/ICdkZXNjJyA6ICdhc2MnIH1cbiAgICA6IG51bGw7XG59XG5cbi8vIFRoZSBxdWVyeSBwYXJhbXMgdGhhdCBtYWtlIHRoZSBVUkwgY2FycnkgYHNuYXBzaG90YDogZXZlcnkgc25hcHNob3Qga2V5IGlzXG4vLyBzZXQsIGFuZCBlYWNoIG93bmVkIGtleSAob3IgdGhlIGdyYWluKSB0aGF0IGBjdXJyZW50YCBjYXJyaWVzIGJ1dCB0aGVcbi8vIHNuYXBzaG90IGRvZXMgbm90IGlzIHNldCB0byBudWxsLCB3aGljaCByZW1vdmVzIGl0IHVuZGVyIHRoZSByb3V0ZXInc1xuLy8gJ21lcmdlJyBoYW5kbGluZy4gS2V5cyB0aGlzIGNvZGVjIGRvZXMgbm90IG93biBhcmUgbGVmdCBhbG9uZS5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJlcG9ydFVybFBhcmFtcyhzbmFwc2hvdDogUmVwb3J0VXJsU25hcHNob3QsIGN1cnJlbnQ6IFBhcmFtTWFwKTogUGFyYW1zIHtcbiAgY29uc3QgcGFyYW1zOiBQYXJhbXMgPSB7fTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBjdXJyZW50LmtleXMpIHtcbiAgICBpZiAoT1dORURfUEFSQU0udGVzdChrZXkpIHx8IGtleSA9PT0gR1JPVVBfQllfSVRFTSkge1xuICAgICAgcGFyYW1zW2tleV0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHNuYXBzaG90Lmdyb3Vwcy5mb3JFYWNoKCh2YWx1ZSwgZ3JvdXBJZCkgPT4ge1xuICAgIHBhcmFtc1tncm91cEl0ZW1OYW1lKHsgaWQ6IGdyb3VwSWQgfSldID0gZW5jb2RlRmlsdGVyVmFsdWUodmFsdWUpO1xuICB9KTtcblxuICBzbmFwc2hvdC5saXN0U29ydHMuZm9yRWFjaCgoc29ydCwgY29tcG9uZW50SWQpID0+IHtcbiAgICBwYXJhbXNbYCR7TElTVF9TT1JUX1BBUkFNX1BSRUZJWH0ke2NvbXBvbmVudElkfWBdID0gZW5jb2RlU29ydChzb3J0KTtcbiAgfSk7XG5cbiAgaWYgKHNuYXBzaG90LmZyZXF1ZW5jeSkge1xuICAgIHBhcmFtc1tHUk9VUF9CWV9JVEVNXSA9IHNuYXBzaG90LmZyZXF1ZW5jeTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbXM7XG59XG5cbi8vICdZWVlZLU1NLURELi5ZWVlZLU1NLUREJywgZWl0aGVyIHNpZGUgb3B0aW9uYWwgYnV0IG5vdCBib3RoLiBFYWNoIHNpZGUgbXVzdFxuLy8gYmUgYSByZWFsIGNhbGVuZGFyIGRheS5cbmZ1bmN0aW9uIGRlY29kZUZpeGVkUmFuZ2UocmF3OiBzdHJpbmcpOiBGaWx0ZXJHcm91cFZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2lkZXMgPSByYXcuc3BsaXQoREFURV9SQU5HRV9TRVBBUkFUT1IpO1xuICBpZiAoc2lkZXMubGVuZ3RoICE9PSAyIHx8ICghc2lkZXNbMF0gJiYgIXNpZGVzWzFdKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBbc3RhcnQsIGVuZF0gPSBzaWRlcy5tYXAoKHNpZGUpID0+IHNpZGUgPyBkZWNvZGVEYXkoc2lkZSkgOiBudWxsKTtcbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHsgc3RhcnQsIGVuZCB9O1xufVxuXG4vLyBPbmUgc2lkZSBvZiBhIGZpeGVkIHJhbmdlIGFzIGEgbG9jYWwgRGF0ZSwgb3IgdW5kZWZpbmVkIHdoZW4gaXQgaXMgbm90IGFcbi8vIHJlYWwgWS1NLUQgZGF5LlxuZnVuY3Rpb24gZGVjb2RlRGF5KHNpZGU6IHN0cmluZyk6IERhdGUgfCB1bmRlZmluZWQge1xuICByZXR1cm4gREFZX1BBVFRFUk4udGVzdChzaWRlKSA/IChkYXRlRnJvbUJvdW5kKHNpZGUpID8/IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlY29kZVByZXNldChcbiAgbmFtZTogc3RyaW5nLFxuICByZXNvbHZlUmVsYXRpdmU6IChuYW1lOiBzdHJpbmcpID0+IHsgc3RhcnQ6IERhdGU7IGVuZDogRGF0ZSB9IHwgbnVsbCxcbik6IEZpbHRlckdyb3VwVmFsdWUgfCB1bmRlZmluZWQge1xuICBjb25zdCByYW5nZSA9IHJlc29sdmVSZWxhdGl2ZShuYW1lKTtcblxuICByZXR1cm4gcmFuZ2UgPyB7IHN0YXJ0OiByYW5nZS5zdGFydCwgZW5kOiByYW5nZS5lbmQsIHByZXNldDogbmFtZSB9IDogdW5kZWZpbmVkO1xufVxuIl19
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXVybC1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9yZXBvcnQtdXJsLXN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFDTCxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEdBQ2pGLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSwrRUFBK0U7QUFDL0Usc0VBQXNFO0FBQ3RFLEVBQUU7QUFDRixrRkFBa0Y7QUFDbEYsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSxnRkFBZ0Y7QUFDaEYsNEVBQTRFO0FBQzVFLG9FQUFvRTtBQUNwRSx3RUFBd0U7QUFDeEUsaURBQWlEO0FBQ2pELHlFQUF5RTtBQUN6RSw2Q0FBNkM7QUFFN0MsNkVBQTZFO0FBQzdFLDhFQUE4RTtBQUM5RSxzRUFBc0U7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0QsbUNBQW1DO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUUxQyx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBRXpDLHdFQUF3RTtBQUN4RSxzREFBc0Q7QUFDdEQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssa0JBQWtCLEdBQUcsc0JBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBRWhHLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDO0FBRTFDLDRFQUE0RTtBQUM1RSxtQkFBbUI7QUFDbkIsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE1BQWdCO0lBQ2xELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFD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QUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzdDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFFRCwyRUFBMkU7QUFDM0Usa0JBQWtCO0FBQ2xCLFNBQVMsU0FBUyxDQUFDLElBQVk7SUFDN0IsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pGLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FDbkIsSUFBWSxFQUNaLGVBQW9FO0lBRXBFLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVwQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNsRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyYW1NYXAsIFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7XG4gIEZpbHRlckdyb3VwVmFsdWUsIFJlcG9ydEZpbHRlclR5cGUsIFJlcG9ydFNvcnQsIFJlcG9ydFVybFBhcmFtcywgUmVwb3J0VXJsU25hcHNob3QsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEdST1VQX0JZX0lURU0sIEdST1VQX1BBUkFNX1BSRUZJWCwgZGF0ZUJvdW5kU3RyaW5nLCBkYXRlRnJvbUJvdW5kLCBncm91cEl0ZW1OYW1lLFxufSBmcm9tICcuL3JlcG9ydC1maWx0ZXItaXRlbXMnO1xuXG5cbi8vIFRoZSByZXBvcnQgdmlld2VyJ3Mgc3RhdGUgaW4gaXRzIFVSTDogYSBwdXJlIGNvZGVjLCB3aXRoIG5vIGtub3dsZWRnZSBvZiBhXG4vLyBsb2FkZWQgcmVwb3J0LiBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UgZGVjaWRlcyBXSEFUIGlzIGNhcnJpZWQgKG9ubHkgdmFsdWVzXG4vLyB0aGF0IGRpZmZlciBmcm9tIHRoZSBhdXRob3JlZCBkZWZhdWx0cykgYW5kIGNoZWNrcyB3aGF0IGlzIHJlYWQgYmFjayBhZ2FpbnN0XG4vLyB0aGUgcmVwb3J0OyB0aGlzIGZpbGUgb25seSB0dXJucyB2YWx1ZXMgaW50byBxdWVyeSBwYXJhbXMgYW5kIGJhY2suXG4vL1xuLy8gICA/cGFnZT03Jmdyb3VwQnk9d2VlayZnMTI9bGFzdDMwRGF5cyZnMTU9Myw1JmcxNj0yMDI2LTAxLTAxLi4mczMxPS1jcmVhdGVfZGF0ZVxuLy9cbi8vIC0gZzxncm91cElkPjogb25lIGtleSBwZXIgZmlsdGVyIGdyb3VwLiBBIGRhdGVSYW5nZSBpcyBpdHMgcmVsYXRpdmUgcHJlc2V0XG4vLyAgIG5hbWUgd2hlbiBpdCBjYXJyaWVzIG9uZSwgZWxzZSAnWVlZWS1NTS1ERC4uWVlZWS1NTS1ERCcgKGVpdGhlciBzaWRlIG1heSBiZVxuLy8gICBlbXB0eSk7IGEgc2VsZWN0IGlzIGl0cyB2YWx1ZXMgam9pbmVkIGJ5ICcsJzsgYSBrZXl3b3JkIGlzIGl0cyB0ZXh0LiBBblxuLy8gICBlbXB0eSB2YWx1ZSBpcyBhbiBleHBsaWNpdCBjbGVhciBvZiBhIGdyb3VwIHRoYXQgaGFzIGEgZGVmYXVsdC5cbi8vIC0gczxjb21wb25lbnRJZD46IGEgbGlzdCdzIHNvcnQgY29sdW1uLCAnLScgcHJlZml4ZWQgd2hlbiBkZXNjZW5kaW5nLlxuLy8gLSBncm91cEJ5OiB0aGUgZ3JvdXAtYnkgZ3JhaW4gKEdST1VQX0JZX0lURU0pLlxuLy8gVGhlIHBhZ2Uga2V5IGlzIHRoZSBob3N0J3MgKEZzQWlSZXBvcnRDb21wb25lbnQucGFnZVF1ZXJ5UGFyYW0pIGFuZCBpc1xuLy8gd3JpdHRlbiBiZXNpZGUgdGhlc2UsIG5ldmVyIGJ5IHRoaXMgY29kZWMuXG5cbi8vIFRoZSBwcmVmaXggb2YgYSBncm91cCdzIHZhbHVlIGtleS4gRGVjbGFyZWQgYmVzaWRlIHRoZSBmaWx0ZXIgaXRlbXMsIHdoaWNoXG4vLyByZWFkIGl0IHRvbyAoZGVjbGFyaW5nIGl0IGhlcmUgd291bGQgbWFrZSB0aGUgdHdvIGZpbGVzIGltcG9ydCBlYWNoIG90aGVyKTtcbi8vIHJlLWV4cG9ydGVkIHNvIGV2ZXJ5IGNvZGVjIGNvbnN0YW50IGNhbiBiZSBpbXBvcnRlZCBmcm9tIHRoZSBjb2RlYy5cbmV4cG9ydCB7IEdST1VQX1BBUkFNX1BSRUZJWCB9IGZyb20gJy4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5cbi8vIFRoZSBwcmVmaXggb2YgYSBsaXN0J3Mgc29ydCBrZXkuXG5leHBvcnQgY29uc3QgTElTVF9TT1JUX1BBUkFNX1BSRUZJWCA9ICdzJztcblxuLy8gQmV0d2VlbiB0aGUgdHdvIGRheXMgb2YgYW4gZW5jb2RlZCBmaXhlZCBkYXRlIHJhbmdlLlxuZXhwb3J0IGNvbnN0IERBVEVfUkFOR0VfU0VQQVJBVE9SID0gJy4uJztcblxuLy8gQSBrZXkgdGhpcyBjb2RlYyBvd25zOiBhIGdyb3VwIHZhbHVlIG9yIGEgbGlzdCBzb3J0LiBBbnkgc3VjaCBrZXkgdGhlXG4vLyBzbmFwc2hvdCBubyBsb25nZXIgY2FycmllcyBpcyByZW1vdmVkIGZyb20gdGhlIFVSTC5cbmV4cG9ydCBjb25zdCBPV05FRF9QQVJBTSA9IG5ldyBSZWdFeHAoYF5bJHtHUk9VUF9QQVJBTV9QUkVGSVh9JHtMSVNUX1NPUlRfUEFSQU1fUFJFRklYfV1cXFxcZCskYCk7XG5cbmNvbnN0IERBWV9QQVRURVJOID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvO1xuXG4vLyBUaGUgdmlld2VyLXN0YXRlIHBhcmFtcyBvZiBhIFVSTCBhcyByYXcgc3RyaW5ncy4gS2V5cyB0aGlzIGNvZGVjIGRvZXMgbm90XG4vLyBvd24gYXJlIGlnbm9yZWQuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlcG9ydFVybFBhcmFtcyhwYXJhbXM6IFBhcmFtTWFwKTogUmVwb3J0VXJsUGFyYW1zIHtcbiAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcbiAgY29uc3QgbGlzdFNvcnRzID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBwYXJhbXMua2V5cykge1xuICAgIGlmICghT1dORURfUEFSQU0udGVzdChrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IE51bWJlcihrZXkuc2xpY2UoMSkpO1xuICAgIGNvbnN0IHJhdyA9IHBhcmFtcy5nZXQoa2V5KSA/PyAnJztcblxuICAgIGlmIChrZXkuc3RhcnRzV2l0aChHUk9VUF9QQVJBTV9QUkVGSVgpKSB7XG4gICAgICBncm91cHMuc2V0KGlkLCByYXcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0U29ydHMuc2V0KGlkLCByYXcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGdyb3VwcywgbGlzdFNvcnRzLCBncm91cEJ5OiBwYXJhbXMuZ2V0KEdST1VQX0JZX0lURU0pIH07XG59XG5cbi8vIEEgZ3JvdXAgdmFsdWUgcmVhZCBiYWNrIGZyb20gaXRzIFVSTCBwYXJhbS4gbnVsbCBpcyBhbiBleHBsaWNpdCBjbGVhciAoYW5cbi8vIGVtcHR5IHBhcmFtKS4gdW5kZWZpbmVkIG1lYW5zIHRoZSBwYXJhbSBpcyB1bnVzYWJsZSBmb3IgYSBncm91cCBvZiB0aGlzIHR5cGVcbi8vIChhbiB1bmtub3duIHByZXNldCBuYW1lLCBhIG1hbGZvcm1lZCBkYXksIGEgd3Jvbmcgc2hhcGUpIGFuZCBpcyBpZ25vcmVkLlxuLy8gYHJlc29sdmVSZWxhdGl2ZWAgdHVybnMgYSBwcmVzZXQgbmFtZSBpbnRvIHRvZGF5J3MgcmFuZ2UgZm9yIGl0LCBvciBudWxsIGZvclxuLy8gYSBuYW1lIGl0IGRvZXMgbm90IGtub3cuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRmlsdGVyVmFsdWUoXG4gIHR5cGU6IFJlcG9ydEZpbHRlclR5cGUsXG4gIHJhdzogc3RyaW5nLFxuICByZXNvbHZlUmVsYXRpdmU6IChuYW1lOiBzdHJpbmcpID0+IHsgc3RhcnQ6IERhdGU7IGVuZDogRGF0ZSB9IHwgbnVsbCxcbik6IEZpbHRlckdyb3VwVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHJhdyA9PT0gJycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2RhdGVSYW5nZSc6XG4gICAgICByZXR1cm4gcmF3LmluY2x1ZGVzKERBVEVfUkFOR0VfU0VQQVJBVE9SKVxuICAgICAgICA/IGRlY29kZUZpeGVkUmFuZ2UocmF3KVxuICAgICAgICA6IGRlY29kZVByZXNldChyYXcsIHJlc29sdmVSZWxhdGl2ZSk7XG5cbiAgICBjYXNlICdzZWxlY3QnOiB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSByYXcuc3BsaXQoJywnKS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gJycpO1xuXG4gICAgICByZXR1cm4gdmFsdWVzLmxlbmd0aCA/IHsgdmFsdWVzIH0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY2FzZSAna2V5d29yZCc6XG4gICAgICByZXR1cm4gcmF3LnRyaW0oKSA/IHsgdmFsdWU6IHJhdyB9IDogdW5kZWZpbmVkO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLy8gQSBncm91cCB2YWx1ZSBhcyBpdHMgVVJMIHBhcmFtLiBUaGUgc2hhcGUgc2F5cyBob3c6IGEgcHJlc2V0IG5hbWUsIHRoZW4gYVxuLy8gZGF0ZSByYW5nZSwgdGhlbiBzZWxlY3QgdmFsdWVzLCB0aGVuIGtleXdvcmQgdGV4dC4gbnVsbCAoYSBjbGVhcmVkIGdyb3VwKVxuLy8gaXMgdGhlIGVtcHR5IHBhcmFtLlxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUZpbHRlclZhbHVlKHZhbHVlOiBGaWx0ZXJHcm91cFZhbHVlIHwgbnVsbCk6IHN0cmluZyB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodmFsdWUucHJlc2V0KSB7XG4gICAgcmV0dXJuIHZhbHVlLnByZXNldDtcbiAgfVxuXG4gIGlmICh2YWx1ZS5zdGFydCB8fCB2YWx1ZS5lbmQpIHtcbiAgICByZXR1cm4gW2RhdGVCb3VuZFN0cmluZyh2YWx1ZS5zdGFydCkgPz8gJycsIGRhdGVCb3VuZFN0cmluZyh2YWx1ZS5lbmQpID8/ICcnXVxuICAgICAgLmpvaW4oREFURV9SQU5HRV9TRVBBUkFUT1IpO1xuICB9XG5cbiAgaWYgKHZhbHVlLnZhbHVlcykge1xuICAgIHJldHVybiB2YWx1ZS52YWx1ZXMubWFwKChpdGVtKSA9PiBTdHJpbmcoaXRlbSkpLmpvaW4oJywnKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZS52YWx1ZSA/PyAnJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVNvcnQoc29ydDogUmVwb3J0U29ydCk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtzb3J0LmRpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gJy0nIDogJyd9JHtzb3J0LmNvbHVtbn1gO1xufVxuXG4vLyBBIGxpc3Qgc29ydCByZWFkIGJhY2sgZnJvbSBpdHMgVVJMIHBhcmFtLCBvciBudWxsIHdoZW4gaXQgbmFtZXMgbm8gY29sdW1uLlxuLy8gV2hldGhlciB0aGUgY29sdW1uIGlzIG9uZSB0aGUgbGlzdCBjYW4gc29ydCBieSBpcyB0aGUgY2FsbGVyJ3MgY2hlY2suXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU29ydChyYXc6IHN0cmluZyk6IFJlcG9ydFNvcnQgfCBudWxsIHtcbiAgY29uc3QgZGVzY2VuZGluZyA9IHJhdy5zdGFydHNXaXRoKCctJyk7XG4gIGNvbnN0IGNvbHVtbiA9IGRlc2NlbmRpbmcgPyByYXcuc2xpY2UoMSkgOiByYXc7XG5cbiAgcmV0dXJuIGNvbHVtblxuICAgID8geyBjb2x1bW4sIGRpcmVjdGlvbjogZGVzY2VuZGluZyA/ICdkZXNjJyA6ICdhc2MnIH1cbiAgICA6IG51bGw7XG59XG5cbi8vIFRoZSBxdWVyeSBwYXJhbXMgdGhhdCBtYWtlIHRoZSBVUkwgY2FycnkgYHNuYXBzaG90YDogZXZlcnkgc25hcHNob3Qga2V5IGlzXG4vLyBzZXQsIGFuZCBlYWNoIG93bmVkIGtleSAob3IgdGhlIGdyYWluKSB0aGF0IGBjdXJyZW50YCBjYXJyaWVzIGJ1dCB0aGVcbi8vIHNuYXBzaG90IGRvZXMgbm90IGlzIHNldCB0byBudWxsLCB3aGljaCByZW1vdmVzIGl0IHVuZGVyIHRoZSByb3V0ZXInc1xuLy8gJ21lcmdlJyBoYW5kbGluZy4gS2V5cyB0aGlzIGNvZGVjIGRvZXMgbm90IG93biBhcmUgbGVmdCBhbG9uZS5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJlcG9ydFVybFBhcmFtcyhzbmFwc2hvdDogUmVwb3J0VXJsU25hcHNob3QsIGN1cnJlbnQ6IFBhcmFtTWFwKTogUGFyYW1zIHtcbiAgY29uc3QgcGFyYW1zOiBQYXJhbXMgPSB7fTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBjdXJyZW50LmtleXMpIHtcbiAgICBpZiAoT1dORURfUEFSQU0udGVzdChrZXkpIHx8IGtleSA9PT0gR1JPVVBfQllfSVRFTSkge1xuICAgICAgcGFyYW1zW2tleV0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHNuYXBzaG90Lmdyb3Vwcy5mb3JFYWNoKCh2YWx1ZSwgZ3JvdXBJZCkgPT4ge1xuICAgIHBhcmFtc1tncm91cEl0ZW1OYW1lKHsgaWQ6IGdyb3VwSWQgfSldID0gZW5jb2RlRmlsdGVyVmFsdWUodmFsdWUpO1xuICB9KTtcblxuICBzbmFwc2hvdC5saXN0U29ydHMuZm9yRWFjaCgoc29ydCwgY29tcG9uZW50SWQpID0+IHtcbiAgICBwYXJhbXNbYCR7TElTVF9TT1JUX1BBUkFNX1BSRUZJWH0ke2NvbXBvbmVudElkfWBdID0gZW5jb2RlU29ydChzb3J0KTtcbiAgfSk7XG5cbiAgaWYgKHNuYXBzaG90LmZyZXF1ZW5jeSkge1xuICAgIHBhcmFtc1tHUk9VUF9CWV9JVEVNXSA9IHNuYXBzaG90LmZyZXF1ZW5jeTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbXM7XG59XG5cbi8vICdZWVlZLU1NLURELi5ZWVlZLU1NLUREJywgZWl0aGVyIHNpZGUgb3B0aW9uYWwgYnV0IG5vdCBib3RoLiBFYWNoIHNpZGUgbXVzdFxuLy8gYmUgYSByZWFsIGNhbGVuZGFyIGRheS5cbmZ1bmN0aW9uIGRlY29kZUZpeGVkUmFuZ2UocmF3OiBzdHJpbmcpOiBGaWx0ZXJHcm91cFZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2lkZXMgPSByYXcuc3BsaXQoREFURV9SQU5HRV9TRVBBUkFUT1IpO1xuICBpZiAoc2lkZXMubGVuZ3RoICE9PSAyIHx8ICghc2lkZXNbMF0gJiYgIXNpZGVzWzFdKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBbc3RhcnQsIGVuZF0gPSBzaWRlcy5tYXAoKHNpZGUpID0+IHNpZGUgPyBkZWNvZGVEYXkoc2lkZSkgOiBudWxsKTtcbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHsgc3RhcnQsIGVuZCB9O1xufVxuXG4vLyBPbmUgc2lkZSBvZiBhIGZpeGVkIHJhbmdlIGFzIGEgbG9jYWwgRGF0ZSwgb3IgdW5kZWZpbmVkIHdoZW4gaXQgaXMgbm90IGFcbi8vIHJlYWwgWS1NLUQgZGF5LlxuZnVuY3Rpb24gZGVjb2RlRGF5KHNpZGU6IHN0cmluZyk6IERhdGUgfCB1bmRlZmluZWQge1xuICByZXR1cm4gREFZX1BBVFRFUk4udGVzdChzaWRlKSA/IChkYXRlRnJvbUJvdW5kKHNpZGUpID8/IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlY29kZVByZXNldChcbiAgbmFtZTogc3RyaW5nLFxuICByZXNvbHZlUmVsYXRpdmU6IChuYW1lOiBzdHJpbmcpID0+IHsgc3RhcnQ6IERhdGU7IGVuZDogRGF0ZSB9IHwgbnVsbCxcbik6IEZpbHRlckdyb3VwVmFsdWUgfCB1bmRlZmluZWQge1xuICBjb25zdCByYW5nZSA9IHJlc29sdmVSZWxhdGl2ZShuYW1lKTtcblxuICByZXR1cm4gcmFuZ2UgPyB7IHN0YXJ0OiByYW5nZS5zdGFydCwgZW5kOiByYW5nZS5lbmQsIHByZXNldDogbmFtZSB9IDogdW5kZWZpbmVkO1xufVxuIl19
|