@firestitch/report 18.17.4 → 18.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/reports/api-error-message.d.ts +1 -0
- package/app/reports/data/report.data.d.ts +8 -0
- package/app/reports/dialogs/report-package-import/report-package-import.component.d.ts +37 -0
- package/app/reports/dialogs/report-settings/report-settings.component.d.ts +2 -0
- package/app/reports/interfaces/report-package-check.interface.d.ts +21 -0
- package/app/reports/interfaces/report-package-finding-severity.type.d.ts +1 -0
- package/app/reports/interfaces/report-package-finding.interface.d.ts +7 -0
- package/app/reports/interfaces/report-package-import-response.interface.d.ts +6 -0
- package/app/reports/interfaces/report-package-imported-report.interface.d.ts +4 -0
- package/app/reports/views/reports/fs-ai-reports.component.d.ts +4 -0
- package/esm2022/app/reports/api-error-message.mjs +8 -0
- package/esm2022/app/reports/data/report.data.mjs +37 -1
- package/esm2022/app/reports/dialogs/report-package-import/report-package-import.component.mjs +144 -0
- package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +13 -11
- package/esm2022/app/reports/interfaces/report-package-check.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-package-finding-severity.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-package-finding.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-package-import-response.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-package-imported-report.interface.mjs +2 -0
- package/esm2022/app/reports/tile-loads.mjs +6 -9
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +2 -2
- package/esm2022/app/reports/views/reports/fs-ai-reports.component.mjs +56 -9
- package/esm2022/public_api.mjs +6 -1
- package/fesm2022/{firestitch-report-echarts-BxAcubsP.mjs → firestitch-report-echarts-qh_mqik9.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-BxAcubsP.mjs.map → firestitch-report-echarts-qh_mqik9.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-BtC-wiNZ.mjs → firestitch-report-firestitch-report-D-WG_G5d.mjs} +264 -59
- package/fesm2022/firestitch-report-firestitch-report-D-WG_G5d.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +5 -0
- package/fesm2022/firestitch-report-firestitch-report-BtC-wiNZ.mjs.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBhY2thZ2UtY2hlY2suaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2ludGVyZmFjZXMvcmVwb3J0LXBhY2thZ2UtY2hlY2suaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBvcnRQYWNrYWdlRmluZGluZyB9IGZyb20gJy4vcmVwb3J0LXBhY2thZ2UtZmluZGluZy5pbnRlcmZhY2UnO1xuXG5cbi8vIFdoYXQgdGhlIHNlcnZlciBmb3VuZCBpbiBhIHJlcG9ydCBwYWNrYWdlIGJlZm9yZSBhbnl0aGluZyBpcyB3cml0dGVuLCBhbmRcbi8vIGFnYWluIG9uIHRoZSBpbXBvcnQuIGB2YWxpZGAgaXMgdHJ1ZSB3aGVuIG5vIGZpbmRpbmcgaXMgYW4gZXJyb3IuIGBuYW1lYCxcbi8vIGBmb2xkZXJQYXRoYCwgYHNvdXJjZWAgYW5kIGBjb3VudHNgIGFyZSBudWxsIChvciBlbXB0eSkgd2hlbiB0aGUgYXJjaGl2ZVxuLy8gY291bGQgbm90IGJlIHJlYWQuXG4vL1xuLy8gYGZvbGRlclBhdGhgIGlzIHRoZSBmb2xkZXIgdGhlIHJlcG9ydCB3YXMgZmlsZWQgaW4gd2hlcmUgaXQgd2FzIGV4cG9ydGVkLFxuLy8gZnJvbSB0aGUgdG9wLiBgcmVwb3J0Rm9sZGVySWRgIGlzIHdoZXJlIHRoZSBpbXBvcnQgcHV0cyBpdCBoZXJlOiB0aGUgZm9sZGVyXG4vLyBvbiB0aGlzIHNlcnZlciBhdCB0aGF0IHBhdGgsIG9yIG51bGwgZm9yIHRoZSB0b3AgbGV2ZWwgd2hlbiBhbnkgbGV2ZWwgb2YgaXRcbi8vIGlzIG1pc3NpbmcgKGFuIGluZm8gZmluZGluZyB0aGVuIHNheXMgc28pLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRQYWNrYWdlQ2hlY2sge1xuICB2YWxpZDogYm9vbGVhbjtcbiAgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgZm9sZGVyUGF0aDogc3RyaW5nW10gfCBudWxsO1xuICByZXBvcnRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbDtcbiAgLy8gVGhlIHNlcnZlciB0aGUgcGFja2FnZSB3YXMgZXhwb3J0ZWQgZnJvbS4gZXhwb3J0ZWRBdCBpcyBJU08gODYwMSBhbmRcbiAgLy8gZXhwb3J0ZWRCeSBpcyB0aGUgYWNjb3VudCdzIGRpc3BsYXkgbmFtZS5cbiAgc291cmNlOiB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgICBleHBvcnRlZEF0OiBzdHJpbmc7XG4gICAgZXhwb3J0ZWRCeTogc3RyaW5nO1xuICB9IHwgbnVsbDtcbiAgY291bnRzOiB7XG4gICAgcGFnZXM6IG51bWJlcjtcbiAgICBjb21wb25lbnRzOiBudW1iZXI7XG4gICAgZmlsdGVyR3JvdXBzOiBudW1iZXI7XG4gICAgZmlsdGVyczogbnVtYmVyO1xuICAgIGFzc2V0czogbnVtYmVyO1xuICB9IHwgbnVsbDtcbiAgZmluZGluZ3M6IFJlcG9ydFBhY2thZ2VGaW5kaW5nW107XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBhY2thZ2UtZmluZGluZy1zZXZlcml0eS50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2ludGVyZmFjZXMvcmVwb3J0LXBhY2thZ2UtZmluZGluZy1zZXZlcml0eS50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBIb3cgbXVjaCBhIHJlcG9ydCBwYWNrYWdlIGNoZWNrIGZpbmRpbmcgbWF0dGVyczogYW4gJ2Vycm9yJyBibG9ja3MgdGhlXG4vLyBpbXBvcnQsIGEgJ3dhcm5pbmcnIGhhcyB0byBiZSBhY2NlcHRlZCBiZWZvcmUgaXQsIGFuZCAnaW5mbycgaXMgb25seSBzaG93bi5cbmV4cG9ydCB0eXBlIFJlcG9ydFBhY2thZ2VGaW5kaW5nU2V2ZXJpdHkgPSAnZXJyb3InIHwgJ3dhcm5pbmcnIHwgJ2luZm8nO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBhY2thZ2UtZmluZGluZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtcGFja2FnZS1maW5kaW5nLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwb3J0UGFja2FnZUZpbmRpbmdTZXZlcml0eSB9IGZyb20gJy4vcmVwb3J0LXBhY2thZ2UtZmluZGluZy1zZXZlcml0eS50eXBlJztcblxuXG4vLyBPbmUgdGhpbmcgYSByZXBvcnQgcGFja2FnZSBjaGVjayBmb3VuZC4gYGNvZGVgIGlzIGEgc3RhYmxlIGRvdHRlZCBuYW1lXG4vLyAoJ2NvbXBvbmVudC5jb25maWdfaW52YWxpZCcpLCBgbG9jYXRpb25gIHNheXMgd2hlcmUgaW4gdGhlIHJlcG9ydCBpdCBpc1xuLy8gKCdQYWdlIDIg4oC6IFJldmVudWUgYnkgbW9udGgnLCBvciBudWxsIGZvciB0aGUgcGFja2FnZSBhcyBhIHdob2xlKSBhbmRcbi8vIGBtZXNzYWdlYCBzYXlzIHdoYXQgaXMgd3JvbmcgaW4gcGxhaW4gbGFuZ3VhZ2UuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFBhY2thZ2VGaW5kaW5nIHtcbiAgc2V2ZXJpdHk6IFJlcG9ydFBhY2thZ2VGaW5kaW5nU2V2ZXJpdHk7XG4gIGNvZGU6IHN0cmluZztcbiAgbG9jYXRpb246IHN0cmluZyB8IG51bGw7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBhY2thZ2UtaW1wb3J0LXJlc3BvbnNlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC1wYWNrYWdlLWltcG9ydC1yZXNwb25zZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcG9ydFBhY2thZ2VDaGVjayB9IGZyb20gJy4vcmVwb3J0LXBhY2thZ2UtY2hlY2suaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydFBhY2thZ2VJbXBvcnRlZFJlcG9ydCB9IGZyb20gJy4vcmVwb3J0LXBhY2thZ2UtaW1wb3J0ZWQtcmVwb3J0LmludGVyZmFjZSc7XG5cblxuLy8gV2hhdCBhbiBpbXBvcnQgYW5zd2VyczogdGhlIHJlcG9ydCBpdCBjcmVhdGVkLCBhbmQgdGhlIGNoZWNrIGl0IHJlcGVhdGVkXG4vLyBiZWZvcmUgd3JpdGluZyBhbnl0aGluZy5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0UGFja2FnZUltcG9ydFJlc3BvbnNlIHtcbiAgcmVwb3J0OiBSZXBvcnRQYWNrYWdlSW1wb3J0ZWRSZXBvcnQ7XG4gIGNoZWNrOiBSZXBvcnRQYWNrYWdlQ2hlY2s7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBhY2thZ2UtaW1wb3J0ZWQtcmVwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC1wYWNrYWdlLWltcG9ydGVkLXJlcG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBuZXcgcmVwb3J0IGFuIGltcG9ydCBjcmVhdGVkLiBBbiBpbXBvcnQgbmV2ZXIgdXBkYXRlcyBvciByZXBsYWNlcyBhXG4vLyByZXBvcnQsIHNvIHRoaXMgaXMgYWx3YXlzIGEgcmVwb3J0IHRoYXQgZGlkIG5vdCBleGlzdCBiZWZvcmUuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFBhY2thZ2VJbXBvcnRlZFJlcG9ydCB7XG4gIHJlcG9ydElkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { catchError, filter, map, merge, of, switchMap, timer } from 'rxjs';
|
|
2
|
+
import { apiErrorMessage } from './api-error-message';
|
|
2
3
|
// A sweep of changes (a few filters set in a row, every value of a picked
|
|
3
4
|
// saved filter) settles for this long before a tile refetches, so the sweep costs one
|
|
4
5
|
// request, not one per change.
|
|
@@ -25,13 +26,9 @@ export function tileLoads(refresh$, load, version) {
|
|
|
25
26
|
function oneLoad(load, version) {
|
|
26
27
|
const sentAt = version();
|
|
27
28
|
return load()
|
|
28
|
-
.pipe(map((data) => ({ data, error: null })), catchError((error) => of({
|
|
29
|
+
.pipe(map((data) => ({ data, error: null })), catchError((error) => of({
|
|
30
|
+
data: null,
|
|
31
|
+
error: apiErrorMessage(error, 'Failed to load data'),
|
|
32
|
+
})), filter(() => version() === sentAt));
|
|
29
33
|
}
|
|
30
|
-
|
|
31
|
-
// else a plain fallback.
|
|
32
|
-
function loadErrorMessage(error) {
|
|
33
|
-
const failure = error;
|
|
34
|
-
const message = failure?.error?.message ?? failure?.message;
|
|
35
|
-
return typeof message === 'string' && message ? message : 'Failed to load data';
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1sb2Fkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy90aWxlLWxvYWRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLeEYsMEVBQTBFO0FBQzFFLHNGQUFzRjtBQUN0RiwrQkFBK0I7QUFDL0IsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0FBRTVDLHlFQUF5RTtBQUN6RSxxQ0FBcUM7QUFDckMsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSw2RUFBNkU7QUFDN0UsMEVBQTBFO0FBQzFFLDJFQUEyRTtBQUMzRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLGlIQUFpSDtBQUNqSCw2RUFBNkU7QUFDN0Usc0NBQXNDO0FBQ3RDLE1BQU0sVUFBVSxTQUFTLENBQ3ZCLFFBQTZCLEVBQzdCLElBQXlCLEVBQ3pCLE9BQXFCO0lBRXJCLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7U0FDcEUsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdDLElBQUksQ0FDSCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUN4QyxDQUFDLENBQ0wsQ0FBQztBQUNOLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsd0NBQXdDO0FBQ3hDLFNBQVMsT0FBTyxDQUFJLElBQXlCLEVBQUUsT0FBcUI7SUFDbEUsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFFekIsT0FBTyxJQUFJLEVBQUU7U0FDVixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFxQixFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUN6RCxVQUFVLENBQUMsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBb0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDckcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUNuQyxDQUFDO0FBQ04sQ0FBQztBQUVELDBFQUEwRTtBQUMxRSx5QkFBeUI7QUFDekIsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFjO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLEtBQW9FLENBQUM7SUFDckYsTUFBTSxPQUFPLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksT0FBTyxFQUFFLE9BQU8sQ0FBQztJQUU1RCxPQUFPLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7QUFDbEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBtZXJnZSwgb2YsIHN3aXRjaE1hcCwgdGltZXIgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVGlsZUxvYWRSZXN1bHQgfSBmcm9tICcuL2ludGVyZmFjZXMvdGlsZS1sb2FkLXJlc3VsdC5pbnRlcmZhY2UnO1xuXG5cbi8vIEEgc3dlZXAgb2YgY2hhbmdlcyAoYSBmZXcgZmlsdGVycyBzZXQgaW4gYSByb3csIGV2ZXJ5IHZhbHVlIG9mIGEgcGlja2VkXG4vLyBzYXZlZCBmaWx0ZXIpIHNldHRsZXMgZm9yIHRoaXMgbG9uZyBiZWZvcmUgYSB0aWxlIHJlZmV0Y2hlcywgc28gdGhlIHN3ZWVwIGNvc3RzIG9uZVxuLy8gcmVxdWVzdCwgbm90IG9uZSBwZXIgY2hhbmdlLlxuZXhwb3J0IGNvbnN0IFRJTEVfUkVGUkVTSF9ERUJPVU5DRV9NUyA9IDMwMDtcblxuLy8gQSB0aWxlJ3MgZGF0YSBhcyBvbmUgc3RyZWFtOiB0aGUgZmlyc3QgbG9hZCBhdCBvbmNlLCB0aGVuIG9uZSBsb2FkIHBlclxuLy8gc2V0dGxlZCBidXJzdCBvZiByZWZyZXNoIHRyaWdnZXJzLlxuLy9cbi8vIC0gRWFjaCB0cmlnZ2VyIHN0YXJ0cyBvdmVyIChzd2l0Y2hNYXApOiBpdCBjYW5jZWxzIHRoZSB3YWl0IGZvciB0aGUgb25lXG4vLyAgIGJlZm9yZSBpdCBhbmQgdGhlIHJlcXVlc3QgaW4gZmxpZ2h0LCB0aGVuIHdhaXRzIGZvciB0aGUgc3dlZXAgdG8gc2V0dGxlLlxuLy8gICBTbyBhbiBhbnN3ZXIgdG8gYW4gb2xkZXIgcmVxdWVzdCBuZXZlciBsYW5kcywgbm90IGV2ZW4gd2hpbGUgdGhlIG5leHRcbi8vICAgbG9hZCBzdGlsbCB3YWl0cywgYW5kIHRoZSBiYXIgc3RheXMgb24gdW50aWwgdGhlIHNldHRsZWQgbG9hZCBhbnN3ZXJzLlxuLy8gLSBFYWNoIGxvYWQgbm90ZXMgdGhlIHN0YXRlIHZlcnNpb24gaXQgd2FzIHNlbnQgdW5kZXIgKHN0YXRlVmVyc2lvbiksIGFuZFxuLy8gICBpdHMgYW5zd2VyIGlzIGRyb3BwZWQgd2hlbiB0aGUgdmVyc2lvbiBoYXMgbW92ZWQgc2luY2UuIHJlc2V0VG9EZWZhdWx0cygpXG4vLyAgIG1vdmVzIHRoZSB2ZXJzaW9uIGFuZCBhbm5vdW5jZXMgYSBmdWxsIGNoYW5nZSB0b2dldGhlciwgc28gdGhlIGxvYWQgZm9yIHRoZSBuZXcgc3RhdGUgaXMgYWxyZWFkeSBvbiBpdHMgd2F5LlxuLy8gLSBBIGZhaWxlZCBsb2FkIGVuZHMgb25seSBpdHNlbGY6IGl0cyBtZXNzYWdlIGNvbWVzIHRocm91Z2ggYXMgdGhlIGFuc3dlcixcbi8vICAgYW5kIHRoZSBuZXh0IHRyaWdnZXIgbG9hZHMgYWdhaW4uXG5leHBvcnQgZnVuY3Rpb24gdGlsZUxvYWRzPFQ+KFxuICByZWZyZXNoJDogT2JzZXJ2YWJsZTx1bmtub3duPixcbiAgbG9hZDogKCkgPT4gT2JzZXJ2YWJsZTxUPixcbiAgdmVyc2lvbjogKCkgPT4gbnVtYmVyLFxuKTogT2JzZXJ2YWJsZTxUaWxlTG9hZFJlc3VsdDxUPj4ge1xuICByZXR1cm4gbWVyZ2Uob2YoMCksIHJlZnJlc2gkLnBpcGUobWFwKCgpID0+IFRJTEVfUkVGUkVTSF9ERUJPVU5DRV9NUykpKVxuICAgIC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh3YWl0KSA9PiAod2FpdCA/IHRpbWVyKHdhaXQpIDogb2YoMCkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBvbmVMb2FkKGxvYWQsIHZlcnNpb24pKSxcbiAgICAgICAgKSksXG4gICAgKTtcbn1cblxuLy8gT25lIHJlcXVlc3Q6IGl0cyBhbnN3ZXIsIG9yIGl0cyBmYWlsdXJlIGFzIGEgbWVzc2FnZSwgZHJvcHBlZCB3aGVuIHRoZVxuLy8gc3RhdGUgdmVyc2lvbiBtb3ZlZCB3aGlsZSBpdCB3YXMgb3V0LlxuZnVuY3Rpb24gb25lTG9hZDxUPihsb2FkOiAoKSA9PiBPYnNlcnZhYmxlPFQ+LCB2ZXJzaW9uOiAoKSA9PiBudW1iZXIpOiBPYnNlcnZhYmxlPFRpbGVMb2FkUmVzdWx0PFQ+PiB7XG4gIGNvbnN0IHNlbnRBdCA9IHZlcnNpb24oKTtcblxuICByZXR1cm4gbG9hZCgpXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKGRhdGEpOiBUaWxlTG9hZFJlc3VsdDxUPiA9PiAoeyBkYXRhLCBlcnJvcjogbnVsbCB9KSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4gb2Y8VGlsZUxvYWRSZXN1bHQ8VD4+KHsgZGF0YTogbnVsbCwgZXJyb3I6IGxvYWRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pKSxcbiAgICAgIGZpbHRlcigoKSA9PiB2ZXJzaW9uKCkgPT09IHNlbnRBdCksXG4gICAgKTtcbn1cblxuLy8gV2hhdCBhIGZhaWxlZCByZXF1ZXN0IHNheXM6IHRoZSBzZXJ2ZXIncyBtZXNzYWdlLCBlbHNlIHRoZSBlcnJvcidzIG93bixcbi8vIGVsc2UgYSBwbGFpbiBmYWxsYmFjay5cbmZ1bmN0aW9uIGxvYWRFcnJvck1lc3NhZ2UoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCBmYWlsdXJlID0gZXJyb3IgYXMgeyBlcnJvcj86IHsgbWVzc2FnZT86IHVua25vd24gfTsgbWVzc2FnZT86IHVua25vd24gfSB8IG51bGw7XG4gIGNvbnN0IG1lc3NhZ2UgPSBmYWlsdXJlPy5lcnJvcj8ubWVzc2FnZSA/PyBmYWlsdXJlPy5tZXNzYWdlO1xuXG4gIHJldHVybiB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZSA/IG1lc3NhZ2UgOiAnRmFpbGVkIHRvIGxvYWQgZGF0YSc7XG59XG4iXX0=
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1sb2Fkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy90aWxlLWxvYWRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXRELDBFQUEwRTtBQUMxRSxzRkFBc0Y7QUFDdEYsK0JBQStCO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUU1Qyx5RUFBeUU7QUFDekUscUNBQXFDO0FBQ3JDLEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsNkVBQTZFO0FBQzdFLDBFQUEwRTtBQUMxRSwyRUFBMkU7QUFDM0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSxpSEFBaUg7QUFDakgsNkVBQTZFO0FBQzdFLHNDQUFzQztBQUN0QyxNQUFNLFVBQVUsU0FBUyxDQUN2QixRQUE2QixFQUM3QixJQUF5QixFQUN6QixPQUFxQjtJQUVyQixPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1NBQ3BFLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QyxJQUFJLENBQ0gsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FDeEMsQ0FBQyxDQUNMLENBQUM7QUFDTixDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLHdDQUF3QztBQUN4QyxTQUFTLE9BQU8sQ0FBSSxJQUF5QixFQUFFLE9BQXFCO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBRXpCLE9BQU8sSUFBSSxFQUFFO1NBQ1YsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBcUIsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFDekQsVUFBVSxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQW9CO1FBQ25ELElBQUksRUFBRSxJQUFJO1FBQ1YsS0FBSyxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUUscUJBQXFCLENBQUM7S0FDckQsQ0FBQyxDQUFDLEVBQ0gsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUNuQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBtZXJnZSwgb2YsIHN3aXRjaE1hcCwgdGltZXIgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgYXBpRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi9hcGktZXJyb3ItbWVzc2FnZSc7XG5pbXBvcnQgeyBUaWxlTG9hZFJlc3VsdCB9IGZyb20gJy4vaW50ZXJmYWNlcy90aWxlLWxvYWQtcmVzdWx0LmludGVyZmFjZSc7XG5cblxuLy8gQSBzd2VlcCBvZiBjaGFuZ2VzIChhIGZldyBmaWx0ZXJzIHNldCBpbiBhIHJvdywgZXZlcnkgdmFsdWUgb2YgYSBwaWNrZWRcbi8vIHNhdmVkIGZpbHRlcikgc2V0dGxlcyBmb3IgdGhpcyBsb25nIGJlZm9yZSBhIHRpbGUgcmVmZXRjaGVzLCBzbyB0aGUgc3dlZXAgY29zdHMgb25lXG4vLyByZXF1ZXN0LCBub3Qgb25lIHBlciBjaGFuZ2UuXG5leHBvcnQgY29uc3QgVElMRV9SRUZSRVNIX0RFQk9VTkNFX01TID0gMzAwO1xuXG4vLyBBIHRpbGUncyBkYXRhIGFzIG9uZSBzdHJlYW06IHRoZSBmaXJzdCBsb2FkIGF0IG9uY2UsIHRoZW4gb25lIGxvYWQgcGVyXG4vLyBzZXR0bGVkIGJ1cnN0IG9mIHJlZnJlc2ggdHJpZ2dlcnMuXG4vL1xuLy8gLSBFYWNoIHRyaWdnZXIgc3RhcnRzIG92ZXIgKHN3aXRjaE1hcCk6IGl0IGNhbmNlbHMgdGhlIHdhaXQgZm9yIHRoZSBvbmVcbi8vICAgYmVmb3JlIGl0IGFuZCB0aGUgcmVxdWVzdCBpbiBmbGlnaHQsIHRoZW4gd2FpdHMgZm9yIHRoZSBzd2VlcCB0byBzZXR0bGUuXG4vLyAgIFNvIGFuIGFuc3dlciB0byBhbiBvbGRlciByZXF1ZXN0IG5ldmVyIGxhbmRzLCBub3QgZXZlbiB3aGlsZSB0aGUgbmV4dFxuLy8gICBsb2FkIHN0aWxsIHdhaXRzLCBhbmQgdGhlIGJhciBzdGF5cyBvbiB1bnRpbCB0aGUgc2V0dGxlZCBsb2FkIGFuc3dlcnMuXG4vLyAtIEVhY2ggbG9hZCBub3RlcyB0aGUgc3RhdGUgdmVyc2lvbiBpdCB3YXMgc2VudCB1bmRlciAoc3RhdGVWZXJzaW9uKSwgYW5kXG4vLyAgIGl0cyBhbnN3ZXIgaXMgZHJvcHBlZCB3aGVuIHRoZSB2ZXJzaW9uIGhhcyBtb3ZlZCBzaW5jZS4gcmVzZXRUb0RlZmF1bHRzKClcbi8vICAgbW92ZXMgdGhlIHZlcnNpb24gYW5kIGFubm91bmNlcyBhIGZ1bGwgY2hhbmdlIHRvZ2V0aGVyLCBzbyB0aGUgbG9hZCBmb3IgdGhlIG5ldyBzdGF0ZSBpcyBhbHJlYWR5IG9uIGl0cyB3YXkuXG4vLyAtIEEgZmFpbGVkIGxvYWQgZW5kcyBvbmx5IGl0c2VsZjogaXRzIG1lc3NhZ2UgY29tZXMgdGhyb3VnaCBhcyB0aGUgYW5zd2VyLFxuLy8gICBhbmQgdGhlIG5leHQgdHJpZ2dlciBsb2FkcyBhZ2Fpbi5cbmV4cG9ydCBmdW5jdGlvbiB0aWxlTG9hZHM8VD4oXG4gIHJlZnJlc2gkOiBPYnNlcnZhYmxlPHVua25vd24+LFxuICBsb2FkOiAoKSA9PiBPYnNlcnZhYmxlPFQ+LFxuICB2ZXJzaW9uOiAoKSA9PiBudW1iZXIsXG4pOiBPYnNlcnZhYmxlPFRpbGVMb2FkUmVzdWx0PFQ+PiB7XG4gIHJldHVybiBtZXJnZShvZigwKSwgcmVmcmVzaCQucGlwZShtYXAoKCkgPT4gVElMRV9SRUZSRVNIX0RFQk9VTkNFX01TKSkpXG4gICAgLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHdhaXQpID0+ICh3YWl0ID8gdGltZXIod2FpdCkgOiBvZigwKSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IG9uZUxvYWQobG9hZCwgdmVyc2lvbikpLFxuICAgICAgICApKSxcbiAgICApO1xufVxuXG4vLyBPbmUgcmVxdWVzdDogaXRzIGFuc3dlciwgb3IgaXRzIGZhaWx1cmUgYXMgYSBtZXNzYWdlLCBkcm9wcGVkIHdoZW4gdGhlXG4vLyBzdGF0ZSB2ZXJzaW9uIG1vdmVkIHdoaWxlIGl0IHdhcyBvdXQuXG5mdW5jdGlvbiBvbmVMb2FkPFQ+KGxvYWQ6ICgpID0+IE9ic2VydmFibGU8VD4sIHZlcnNpb246ICgpID0+IG51bWJlcik6IE9ic2VydmFibGU8VGlsZUxvYWRSZXN1bHQ8VD4+IHtcbiAgY29uc3Qgc2VudEF0ID0gdmVyc2lvbigpO1xuXG4gIHJldHVybiBsb2FkKClcbiAgICAucGlwZShcbiAgICAgIG1hcCgoZGF0YSk6IFRpbGVMb2FkUmVzdWx0PFQ+ID0+ICh7IGRhdGEsIGVycm9yOiBudWxsIH0pKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiBvZjxUaWxlTG9hZFJlc3VsdDxUPj4oe1xuICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICBlcnJvcjogYXBpRXJyb3JNZXNzYWdlKGVycm9yLCAnRmFpbGVkIHRvIGxvYWQgZGF0YScpLFxuICAgICAgfSkpLFxuICAgICAgZmlsdGVyKCgpID0+IHZlcnNpb24oKSA9PT0gc2VudEF0KSxcbiAgICApO1xufVxuIl19
|
|
@@ -214,7 +214,7 @@ export class FsAiReportComponent {
|
|
|
214
214
|
toggleMasterMode() {
|
|
215
215
|
this._canvas?.toggleMasterMode();
|
|
216
216
|
}
|
|
217
|
-
// Report settings — name, page size, delete. The
|
|
217
|
+
// Report settings — name, page size, export as a package, delete. The
|
|
218
218
|
// dialog performs the delete itself; we react to what it reports back.
|
|
219
219
|
reportSettings() {
|
|
220
220
|
const report = this.report();
|
|
@@ -714,4 +714,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
714
714
|
type: ViewChild,
|
|
715
715
|
args: [FilterComponent]
|
|
716
716
|
}] } });
|
|
717
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtYWktcmVwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvZnMtYWktcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvZnMtYWktcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQzFELFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQ3RHLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQ0ssZUFBZSxFQUFnQixjQUFjLEdBQ3hELE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxT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Q3RCO3dEQW9HTyxNQUFNO3NCQURiLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFLNUIsVUFBVTtzQkFEakIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQU1wQyxPQUFPO3NCQURkLFNBQVM7dUJBQUMscUJBQXFCO2dCQU14QixVQUFVO3NCQURqQixTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LFxuICBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBOZ1pvbmUsIFZpZXdDaGlsZCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgRGlzcGxheUFwaUVycm9yIH0gZnJvbSAnQGZpcmVzdGl0Y2gvYXBpJztcbmltcG9ydCB7XG4gIEJhc2VJdGVtLCBGaWx0ZXJDb21wb25lbnQsIEZpbHRlckNvbmZpZywgRnNGaWx0ZXJNb2R1bGUsIElGaWx0ZXJDb25maWdJdGVtLCBJRmlsdGVyU2F2ZWRGaWx0ZXIsIElGaWx0ZXJTYXZlZEZpbHRlcnNDb25maWcsXG59IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc01lbnVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9tZW51JztcbmltcG9ydCB7IEZzUHJvY2VzcyB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb2Nlc3MnO1xuXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBwcm92aWRlRWNoYXJ0c0NvcmUgfSBmcm9tICduZ3gtZWNoYXJ0cyc7XG5cbmltcG9ydCB7IEZzQWlDaGF0Q29tcG9uZW50LCBGc0FpQ2hhdERhdGEsIEZzQWlDaGF0UmVzcG9uc2UgfSBmcm9tICdAZmlyZXN0aXRjaC9haSc7XG5cbmltcG9ydCB7IFJlcG9ydENhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVwb3J0LWNhbnZhcy9yZXBvcnQtY2FudmFzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRBaUNoYXREYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS9yZXBvcnQtYWktY2hhdC5kYXRhJztcbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7XG4gIENvbXBvbmVudFNldHRpbmdzQ29tcG9uZW50LCBDb21wb25lbnRTZXR0aW5nc0RpYWxvZ0RhdGEsIENvbXBvbmVudFNldHRpbmdzUmVzdWx0LFxufSBmcm9tICcuLi8uLi9kaWFsb2dzL2NvbXBvbmVudC1zZXR0aW5ncy9jb21wb25lbnQtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydFNldHRpbmdzQ29tcG9uZW50LCBSZXBvcnRTZXR0aW5nc1Jlc3VsdCB9IGZyb20gJy4uLy4uL2RpYWxvZ3MvcmVwb3J0LXNldHRpbmdzL3JlcG9ydC1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL2V4cG9ydC9yZXBvcnQtZXhwb3J0LWNvbGxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFBkZlNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LXBkZi5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFBwdHhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXhwb3J0L3JlcG9ydC1wcHR4LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0VGV4dExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LXRleHQtbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0Q2hhdFZpZXdlclN0YXRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtY2hhdC12aWV3ZXItc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydFNhdmVkRmlsdGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtc2F2ZWQtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBDaGFydEdyYW51bGFyaXR5LCBSZXBvcnQsIFJlcG9ydENoYXRSZXNwb25zZSxcbiAgUmVwb3J0Q29tcG9uZW50IGFzIFJlcG9ydENvbXBvbmVudE1vZGVsLCBSZXBvcnRGaWx0ZXJHcm91cCxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydEZvcm1hdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LWV4cG9ydC1mb3JtYXQudHlwZSc7XG5pbXBvcnQgeyBjaGF0Vmlld2VyRHJpbGxzLCBjaGF0Vmlld2VyTWF0Y2gsIGNoYXRWaWV3ZXJUaWxlcyB9IGZyb20gJy4uLy4uL3JlcG9ydC1jaGF0LXZpZXdlci1zdGF0ZSc7XG5pbXBvcnQgeyBwcm92aWRlUmVwb3J0RGF0ZVBpY2tlciB9IGZyb20gJy4uLy4uL3JlcG9ydC1kYXRlLXByZXNldHMnO1xuaW1wb3J0IHtcbiAgR1JPVVBfQllfSVRFTSwgZmlsdGVySXRlbUZvckdyb3VwLCBncm91cEJ5RmlsdGVySXRlbSwgZ3JvdXBCeVNpZ25hdHVyZSwgZ3JvdXBJdGVtTmFtZSwgZ3JvdXBWYWx1ZXNGcm9tUXVlcnksXG4gIGhhc1BhZ2VHcm91cCwgaXNHcmFudWxhcml0eU9mZmVyZWQsIG1hdGNoRmlsdGVySXRlbSwgbWF0Y2hGcm9tUXVlcnksIHJlcG9ydEJhckdyb3Vwcyxcbn0gZnJvbSAnLi4vLi4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5pbXBvcnQgeyBzYXZlZEZpbHRlckdyb3Vwcywgc2F2ZWRGaWx0ZXJWYWx1ZXMgfSBmcm9tICcuLi8uLi9yZXBvcnQtc2F2ZWQtZmlsdGVycyc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJPcHRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC1maWx0ZXItb3B0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSwgZGVmYXVsdFNpZ25hdHVyZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC1maWx0ZXItc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyB6aXBFeHBvcnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90aWxlLWRhdGEtc3RhdGUnO1xuXG5cbi8vIEEgc2luZ2xlIHJlcG9ydDogdGhlIEFJIGNoYXQgb24gdGhlIGxlZnQgKHVubGVzcyB0aGUgc2VydmVyIHR1cm5zIGl0IG9mZiksXG4vLyB0aGUgcmVwb3J0IGNhbnZhcyBvbiB0aGUgcmlnaHQsIHVuZGVyIGFuIEgyIHRpdGxlICsgc2V0dGluZ3MgZ2Vhci4gVGhlIGhvc3Rcbi8vIHN1cHBsaWVzIFtyZXBvcnRJZF0gKGZyb20gaXRzIHJvdXRlKSBhbmQgc3dpdGNoZXMgcmVwb3J0cyB0aHJvdWdoIGl0cyBvd25cbi8vIHJvdXRlcyDigJQgdGhpcyBjb21wb25lbnQgbmV2ZXIgcGlja3Mgb25lLlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtYWktcmVwb3J0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZzLWFpLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZzLWFpLXJlcG9ydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICBwcm92aWRlcnM6IFtcbiAgICAvLyBTZXNzaW9uIGZpbHRlciBzdGF0ZSBpcyBwZXItb3Blbi1yZXBvcnQsIG5vdCBhcHAtZ2xvYmFsOyB0aGUgZXhwb3J0XG4gICAgLy8gc2VydmljZXMgcmVzb2x2ZSBmaWx0ZXJzIHRocm91Z2ggaXQsIHNvIHRoZXkgbGl2ZSBhdCB0aGUgc2FtZSBsZXZlbC5cbiAgICBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UsXG4gICAgLy8gVGhlIGJhcnMnIHNlbGVjdCBsaXN0cywgbmFycm93ZWQgYnkgdGhlIG90aGVyIGZpbHRlcnM7IHBlciBvcGVuIHJlcG9ydC5cbiAgICBSZXBvcnRGaWx0ZXJPcHRpb25zU2VydmljZSxcbiAgICBSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlLFxuICAgIFJlcG9ydFBwdHhTZXJ2aWNlLFxuICAgIFJlcG9ydFBkZlNlcnZpY2UsXG4gICAgUmVwb3J0VGV4dExheW91dFNlcnZpY2UsXG4gICAgUmVwb3J0RXhwb3J0U2VydmljZSxcbiAgICAvLyBmcy1haS1jaGF0IHNpdHMgaW4gdGhpcyB0ZW1wbGF0ZSwgc28gaXQgcmVzb2x2ZXMgaXRzIGdhdGV3YXkgaGVyZTogdGhlXG4gICAgLy8gcmVwb3J0IG9uZSwgd2hpY2ggYWRkcyB0aGUgdmlld2VyJ3Mgc3RhdGUgdG8gZWFjaCB0dXJuIGl0IHNlbmRzLlxuICAgIFJlcG9ydEFpQ2hhdERhdGEsXG4gICAgeyBwcm92aWRlOiBGc0FpQ2hhdERhdGEsIHVzZUV4aXN0aW5nOiBSZXBvcnRBaUNoYXREYXRhIH0sXG4gICAgLy8gVHJlZS1zaGFrZW4gRUNoYXJ0cyBjb3JlICsgdGhlICdyZXBvcnQnIGhvdXNlIHRoZW1lLCBsb2FkZWQgbGF6aWx5LlxuICAgIHByb3ZpZGVFY2hhcnRzQ29yZSh7IGVjaGFydHM6ICgpID0+IGltcG9ydCgnLi4vLi4vdGhlbWUvZWNoYXJ0cycpLnRoZW4oKG1vZHVsZSkgPT4gbW9kdWxlLmRlZmF1bHQpIH0pLFxuICAgIC8vIFRoZSBiYXIncyBkYXRlIHBpY2tlcnMgc3RhcnQgdGhlaXIgd2Vla3Mgb24gTW9uZGF5IGFuZCBsaXN0IHRoZSBidWlsdC1pblxuICAgIC8vIHByZXNldHM7IGEgcHJlc2V0IG9ubHkgc2V0cyB0aGUgZGF5cy5cbiAgICBwcm92aWRlUmVwb3J0RGF0ZVBpY2tlcigpLFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgRnNGaWx0ZXJNb2R1bGUsXG4gICAgRnNNZW51TW9kdWxlLFxuICAgIEZzQWlDaGF0Q29tcG9uZW50LFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgUmVwb3J0Q2FudmFzQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0FpUmVwb3J0Q29tcG9uZW50IHtcblxuICAvLyBUaGUgcmVwb3J0IHRoaXMgdmlldyBpcyBmb2N1c2VkIG9uIOKAlCBzdXBwbGllZCBieSB0aGUgaG9zdCBmcm9tIHRoZSByb3V0ZS5cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydElkID0gaW5wdXQ8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gQVBJIGJhc2UgZm9yIHRoZSByZXBvcnRzICsgY2hhdCBlbmRwb2ludHM7IG92ZXJyaWRlIHRvIG1vdW50IGVsc2V3aGVyZS5cbiAgcHVibGljIHJlYWRvbmx5IGJhc2VQYXRoID0gaW5wdXQ8c3RyaW5nPigncmVwb3J0cycpO1xuXG4gIC8vIFRoZSBxdWVyeSBwYXJhbSB0aGF0IGNhcnJpZXMgdGhlIHBhZ2Ugb24gc2NyZWVuICg/cGFnZT03KS4gQSByZXBvcnQgb3BlbnNcbiAgLy8gb24gdGhlIHBhZ2UgaXQgbmFtZXMsIGFuZCBlYWNoIG1vdmUgdG8gYW5vdGhlciBwYWdlIHdyaXRlcyBpdCwgaW4gcGxhY2UsXG4gIC8vIHNvIGEgcmVmcmVzaCBvciBhIHNoYXJlZCBsaW5rIGNvbWVzIGJhY2sgdG8gdGhlIHNhbWUgcGFnZS4gSXQgaXMgdGhlIG9ubHlcbiAgLy8gc3RhdGUgYSByZXBvcnQga2VlcHMgaW4gdGhlIFVSTDogaXRzIGZpbHRlcnMgYW5kIHRoZSByZXN0IGxpdmUgaW4gdGhlXG4gIC8vIHJlcG9ydCdzIHN0YXRlIChSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UpLiBBIGhvc3QgdGhhdCBtb3VudHMgc2V2ZXJhbFxuICAvLyByZXBvcnRzIG9uIG9uZSByb3V0ZSwgb3Igd2FudHMgbm8gVVJMIHdyaXRlcywgc2V0cyB0aGlzIHRvIG51bGwuXG4gIHB1YmxpYyByZWFkb25seSBwYWdlUXVlcnlQYXJhbSA9IGlucHV0PHN0cmluZyB8IG51bGw+KCdwYWdlJyk7XG5cbiAgLy8gVGhlIHJlcG9ydCB3YXMgZGVsZXRlZCBmcm9tIGl0cyBzZXR0aW5ncyBkaWFsb2cg4oCUIHRoZSBob3N0IHJvdXRlcyBiYWNrIHRvXG4gIC8vIHRoZSBsaXN0aW5nLlxuICBwdWJsaWMgcmVhZG9ubHkgZGVsZXRlZCA9IG91dHB1dDxudW1iZXI+KCk7XG5cbiAgLy8gVGhlIHJlcG9ydCB3YXMgcmVuYW1lZCAoc2V0dGluZ3MsIG9yIHRoZSBhZ2VudCkg4oCUIHRoZSBob3N0IGNhbiByZWZyZXNoIGFcbiAgLy8gYnJlYWRjcnVtYiAvIGRvY3VtZW50IHRpdGxlLlxuICBwdWJsaWMgcmVhZG9ubHkgcmVuYW1lZCA9IG91dHB1dDxSZXBvcnQ+KCk7XG5cbiAgLy8gVGhlIHZpZXdlciBtb3ZlZCB0byBhbm90aGVyIHBhZ2Ug4oCUIGZvciBob3N0cyB0aGF0IHRyYWNrIHRoZSBvcGVuIHBhZ2UgZm9yXG4gIC8vIHRoZWlyIG93biByZWFzb25zLiBOb3RoaW5nIGlzIHdyaXR0ZW4gdG8gdGhlIFVSTC5cbiAgcHVibGljIHJlYWRvbmx5IHBhZ2VDaGFuZ2VkID0gb3V0cHV0PG51bWJlciB8IG51bGw+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydCA9IHNpZ25hbDxSZXBvcnQgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGVkaXRNb2RlID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBUaGUgcGFnZSB0aGUgY2FudmFzIHNob3VsZCBvcGVuIG9uOiB0aGUgP3BhZ2U9IHRoZSByZXBvcnQgb3BlbmVkIHdpdGhcbiAgLy8gKHJlYWQgb25jZSBwZXIgcmVwb3J0KS4gQ2xlYXJlZCBhcyBzb29uIGFzIHRoZSBjYW52YXMgcmVwb3J0cyBiYWNrLCBzbyBhXG4gIC8vIGxhdGVyIGluLWFwcCBwYWdlIGNoYW5nZSBpcyBuZXZlciBmb3VnaHQgYnkgYSBzdGFsZSB2YWx1ZS5cbiAgcHVibGljIHJlYWRvbmx5IHBhZ2VJZCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICAvLyBUaGUgcGFnZSB0aGUgY2hhdCBpcyBib3VuZCB0bzogdGhlIG9uZSBvbiBzY3JlZW4uIEEgcmVwb3J0IGNvbnZlcnNhdGlvblxuICAvLyBiZWxvbmdzIHRvIGV4YWN0bHkgb25lIHBhZ2UsIHNvIHRoaXMgYm90aCBzY29wZXMgdGhlIGNvbnZlcnNhdGlvbiBsaXN0IGFuZFxuICAvLyBiZWNvbWVzIHRoZSBuZXcgY29udmVyc2F0aW9uJ3MgcGFnZS4gQSBzaWduYWwgYmVjYXVzZSBpdCBmZWVkc1xuICAvLyBjaGF0QmFzZVBhdGgg4oCUIGNoYW5naW5nIGl0IGlzIHdoYXQgcmVsb2FkcyB0aGUgcGFuZWwgb250byB0aGUgbmV3IHBhZ2Unc1xuICAvLyBjb252ZXJzYXRpb25zLiBOdWxsIHVudGlsIHRoZSBjYW52YXMgcmVwb3J0cyB3aGljaCBwYWdlIGl0IG9wZW5lZCBvbiwgd2hpY2hcbiAgLy8ga2VlcHMgdGhlIGNoYXQgZnJvbSBsaXN0aW5nIGFnYWluc3QgYSBwYWdlIGd1ZXNzLlxuICBwdWJsaWMgcmVhZG9ubHkgY2hhdFBhZ2VJZCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICAvLyBXaGVyZSB0aGUgY2hhdCdzIGNhbGxzIGdvOiBiZW5lYXRoIHRoZSBwYWdlIGl0IGlzIGJvdW5kIHRvXG4gIC8vICh7YmFzZVBhdGh9L3tyZXBvcnRJZH0vcGFnZXMve3BhZ2VJZH0vY2hhdCwg4oCmL2NvbnZlcnNhdGlvbnMsIOKApikuIEV2ZXJ5XG4gIC8vIGNvbnZlcnNhdGlvbiBpcyByZWFjaGVkIHRocm91Z2ggaXRzIHBhZ2UsIHNvIHRoZSBwYXRoIGNhcnJpZXMgdGhlIHJlcG9ydFxuICAvLyBhbmQgdGhlIHBhZ2UgYW5kIG5vdGhpbmcgcmlkZXMgaW4gdGhlIGNoYXQncyByZXF1ZXN0RGF0YS5cbiAgLy9cbiAgLy8gVGhlIGNoYXQgaXMgaGVsZCBjbG9zZWQgKFtyZWFkeV0gaW4gdGhlIHRlbXBsYXRlKSB1bnRpbCB0aGUgcGFnZSBpcyBrbm93bixcbiAgLy8gc28gdGhlIHBhdGggaXMgbmV2ZXIgY2FsbGVkIHdoaWxlIGNoYXRQYWdlSWQgaXMgbnVsbDogb24gYSBmcmVzaCBsb2FkIHRoZVxuICAvLyByZXBvcnQgaGFzIHRvIGFycml2ZSBhbmQgdGhlIGNhbnZhcyBoYXMgdG8gcmVuZGVyIGJlZm9yZSBhbnkgcGFnZSBleGlzdHMuXG4gIHB1YmxpYyByZWFkb25seSBjaGF0QmFzZVBhdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGAke3RoaXMuYmFzZVBhdGgoKX0vJHt0aGlzLnJlcG9ydElkKCl9L3BhZ2VzLyR7dGhpcy5jaGF0UGFnZUlkKCl9YDtcbiAgfSk7XG5cbiAgLy8gVGhlIGNoYXQgYW5kIGl0cyByZXNpemVyIHNob3cgb25jZSB0aGUgcmVwb3J0IHNheXMgdGhlIHNlcnZlciBrZWVwcyB0aGVcbiAgLy8gY2hhdCBvbiwgc28gYSByZXBvcnQgd2hvc2UgY2hhdCBpcyBvZmYgbmV2ZXIgZmxhc2hlcyBvbmUuIEEgc2VydmVyIHRvb1xuICAvLyBvbGQgdG8gc2VuZCBjaGF0RW5hYmxlZCBrZWVwcyBpdC5cbiAgcHVibGljIHJlYWRvbmx5IGNoYXRFbmFibGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XG5cbiAgICByZXR1cm4gISFyZXBvcnQgJiYgcmVwb3J0LmNoYXRFbmFibGVkICE9PSBmYWxzZTtcbiAgfSk7XG5cbiAgLy8gVGhlIHJlcG9ydC1sZXZlbCBmaWx0ZXIgdG9vbGJhciAoZnMtZmlsdGVyKS4gUmVidWlsdCB3aGVuZXZlciB0aGUgbG9hZGVkXG4gIC8vIHJlcG9ydCAoYW5kIHRodXMgaXRzIGdyb3VwcykgY2hhbmdlcy5cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydEZpbHRlckNvbmZpZyA9IHNpZ25hbDxGaWx0ZXJDb25maWcgfCBudWxsPihudWxsKTtcblxuICAvLyBHYXRlcyB0aGUgdG9vbGJhciBmcy1maWx0ZXIgc28gaXQgaXNuJ3QgcmVuZGVyZWQgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvXG4gIC8vIHB1dCBpbiBpdCDigJQgbm8gcmVwb3J0LWxldmVsIGZpbHRlcnMgYW5kIG5vIGdyb3VwLWJ5IGNvbnRyb2wuXG4gIHB1YmxpYyByZWFkb25seSByZXBvcnRIYXNGaWx0ZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLl9yZXBvcnRHcm91cHMoKS5sZW5ndGggPiAwIHx8ICEhdGhpcy5fZ3JvdXBCeUl0ZW0oKTtcbiAgfSk7XG5cbiAgLy8gZnMtZmlsdGVyIHJlYWRzIGl0cyBjb25maWcgb25seSBvbmNlIChhdCBpbml0KS4gVGhlIHRlbXBsYXRlIGtleXMgdGhlXG4gIC8vIHRvb2xiYXIgZnMtZmlsdGVyIG9uIHRoaXMgc2lnbmF0dXJlIHNvIGl0J3MgcmVjcmVhdGVkIChhbmQgcmUtcmVhZHMgdGhlXG4gIC8vIHJlYnVpbHQgY29uZmlnKSB3aGVuZXZlciB0aGUgcmVwb3J0LWxldmVsIGZpbHRlciBzZXQgY2hhbmdlcy5cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydEZpbHRlcktleSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAgLy8gVGhlIHN0YXRlIHZlcnNpb24gdGhlIGJhciB3YXMgYnVpbHQgZm9yOiBhIHJlc2V0IHRvIHRoZSBkZWZhdWx0c1xuICAgICAgLy8gcmVwbGFjZXMgZXZlcnkgdmFsdWUgYXQgb25jZS5cbiAgICAgIHRoaXMuX2JhclZlcnNpb24oKSxcbiAgICAgIC8vIFRoZSBlZmZlY3RpdmUgem9uZSBpcyBwYXJ0IG9mIGl0IHRvbzogYSB6b25lIGNoYW5nZSByZS1yZXNvbHZlcyByZWxhdGl2ZVxuICAgICAgLy8gcHJlc2V0cywgYW5kIHRoZSBiYXIgbXVzdCBiZSByZWNyZWF0ZWQgdG8gc2hvdyB0aGUgbmV3IGRheXMuXG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS50aW1lem9uZSgpLFxuICAgICAgLy8gVGhlIHN0b3JlZCBkZWZhdWx0IGlzIHBhcnQgb2YgdGhlIHNpZ25hdHVyZTogc2F2aW5nIGEgbmV3IGRlZmF1bHQgaW4gcmVwb3J0XG4gICAgICAvLyBzZXR0aW5ncyByZWJ1aWxkcyB0aGUgY29uZmlnLCBidXQgd2l0aG91dCBhIGtleSBjaGFuZ2UgZnMtZmlsdGVyIGtlZXBzXG4gICAgICAvLyByZW5kZXJpbmcgdGhlIHZhbHVlcyBpdCB3YXMgY3JlYXRlZCB3aXRoIHVudGlsIGEgZnVsbCBwYWdlIHJlbG9hZC5cbiAgICAgIGdyb3VwQnlTaWduYXR1cmUodGhpcy5yZXBvcnQoKSksXG4gICAgICAuLi50aGlzLl9yZXBvcnRHcm91cHMoKS5tYXAoKGdyb3VwKSA9PiBgJHtncm91cC5pZH06JHtncm91cC5sZXZlbH06JHtncm91cC5sYWJlbH06JHtkZWZhdWx0U2lnbmF0dXJlKGdyb3VwKX1gKSxcbiAgICAgIC8vIEEgcGFnZSBncm91cCBzaG93cyBvbiBpdHMgb3duIHBhZ2Ugb25seSwgc28gc3VjaCBhIGJhciBpcyByZWNyZWF0ZWRcbiAgICAgIC8vIHdoZW4gdGhlIHBhZ2Ugb24gc2NyZWVuIGNoYW5nZXMuXG4gICAgICAuLi4oaGFzUGFnZUdyb3VwKHRoaXMucmVwb3J0KCkpID8gW2BwYWdlOiR7dGhpcy5jaGF0UGFnZUlkKCl9YF0gOiBbXSksXG4gICAgXS5qb2luKCd8Jyk7XG4gIH0pO1xuXG4gIEBWaWV3Q2hpbGQoJ3NwbGl0JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBfc3BsaXQhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvLyBPbmx5IHdoaWxlIHRoZSBjaGF0IGlzIG9uIChjaGF0RW5hYmxlZCkuXG4gIEBWaWV3Q2hpbGQoJ2NoYXRQYW5lbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIF9jaGF0UGFuZWw/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAvLyBPbmx5IHRoZSBjYW52YXMga25vd3Mgd2hpY2ggcGFnZSBpcyBvbiBzY3JlZW4sIGFuZCBhIHBhZ2Utc2NvcGVkIGV4cG9ydFxuICAvLyBoYXMgdG8gYXNrIGl0LlxuICBAVmlld0NoaWxkKFJlcG9ydENhbnZhc0NvbXBvbmVudClcbiAgcHJpdmF0ZSBfY2FudmFzPzogUmVwb3J0Q2FudmFzQ29tcG9uZW50O1xuXG4gIC8vIFRoZSByZXBvcnQtbGV2ZWwgZmlsdGVyIGJhciwgd2hpbGUgaXQgaXMgZHJhd24uIEEgc2F2ZWQgZmlsdGVyIGJlaW5nXG4gIC8vIHBpY2tlZCByZWFkcyB0aGUgYmFyJ3MgdmFsdWVzIG9mZiBpdCAoX2tlZXBCYXJPblBpY2spLlxuICBAVmlld0NoaWxkKEZpbHRlckNvbXBvbmVudClcbiAgcHJpdmF0ZSBfcmVwb3J0QmFyPzogRmlsdGVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX3JlcG9ydERhdGEgPSBpbmplY3QoUmVwb3J0RGF0YSk7XG4gIHByaXZhdGUgX3JlcG9ydEFpQ2hhdERhdGEgPSBpbmplY3QoUmVwb3J0QWlDaGF0RGF0YSk7XG4gIHByaXZhdGUgX3JvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgX2ZpbHRlclN0YXRlID0gaW5qZWN0KFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSk7XG4gIHByaXZhdGUgX2ZpbHRlck9wdGlvbnMgPSBpbmplY3QoUmVwb3J0RmlsdGVyT3B0aW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIF9leHBvcnRTZXJ2aWNlID0gaW5qZWN0KFJlcG9ydEV4cG9ydFNlcnZpY2UpO1xuICBwcml2YXRlIF9jb2xsZWN0b3IgPSBpbmplY3QoUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSk7XG4gIHByaXZhdGUgX3Byb2Nlc3MgPSBpbmplY3QoRnNQcm9jZXNzKTtcbiAgcHJpdmF0ZSBfZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gIHByaXZhdGUgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgX3pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICAvLyBUaGUgc3RhdGUgdmVyc2lvbiB0aGUgYmFyIHdhcyBsYXN0IGJ1aWx0IGZvciAocmVwb3J0RmlsdGVyS2V5KS5cbiAgcHJpdmF0ZSByZWFkb25seSBfYmFyVmVyc2lvbiA9IHNpZ25hbCgwKTtcblxuICAvLyBUaGUgcmVwb3J0IGJhcidzIHZhbHVlcyBhcyB0aGV5IHdlcmUgdGhlIG1vbWVudCBmcy1maWx0ZXIgcmVhZCBhIHNhdmVkXG4gIC8vIGZpbHRlcidzIHZhbHVlcywgb3IgbnVsbCBvdXRzaWRlIHRoYXQgbW9tZW50LiBBIHBpY2sgc2V0cyBldmVyeSBpdGVtIG9mXG4gIC8vIHRoZSBiYXIgZnJvbSB0aGUgc2F2ZWQgZmlsdGVyJ3MgdmFsdWVzOyBlYWNoIGl0ZW0gYSBzYXZlZCBmaWx0ZXIgbmV2ZXJcbiAgLy8gaG9sZHMgKHRoZSBncm91cC1ieSBncmFpbiwgdGhlIG1hdGNoLCBhIHBhZ2UncyBvd24gZmlsdGVycykgaXMgcHV0IGJhY2tcbiAgLy8gdG8gaXRzIG5vdGVkIHZhbHVlIGFzIGl0IGlzIHNldCAoX2tlZXBJdGVtT25QaWNrKS5cbiAgcHJpdmF0ZSBfYmFyVmFsdWVzQXRQaWNrOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFRoZSByZXBvcnQgdGhlIHNjcmVlbiB3YXMgb3BlbmVkIG9uIGl0cyBmaXJzdCBzYXZlZCBmaWx0ZXIgZm9yXG4gIC8vIChfb3Blbk9uRmlyc3RTYXZlZEZpbHRlciksIG9yIG51bGwgYmVmb3JlIHRoYXQuXG4gIHByaXZhdGUgX29wZW5lZE9uU2F2ZWRGaWx0ZXJSZXBvcnRJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRWFjaCBjaGF0IHR1cm4gY2FycmllcyB3aGF0IHRoZSB2aWV3ZXIgaGFzIG9uIHNjcmVlbi4gT25seSB0aGUgZnVuY3Rpb25cbiAgICAvLyBpcyBzZXQgaGVyZTsgaXQgaXMgY2FsbGVkIHdoZW4gYSB0dXJuIGlzIHNlbnQuXG4gICAgdGhpcy5fcmVwb3J0QWlDaGF0RGF0YS50dXJuRGF0YSA9ICgpID0+ICh7IHZpZXdlclN0YXRlOiB0aGlzLl9jaGF0Vmlld2VyU3RhdGUoKSB9KTtcblxuICAgIC8vIFBvaW50IHRoZSBzaGFyZWQgZGF0YSBnYXRld2F5IGF0IHRoZSBjb25maWd1cmVkIGJhc2UgZmlyc3QgKGJlZm9yZSBhbnlcbiAgICAvLyBsb2FkIGJlbG93IHJlYWRzIGl0KS5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVwb3J0RGF0YS5iYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGgoKTtcbiAgICB9KTtcblxuICAgIC8vIChSZSlsb2FkIHdoZW5ldmVyIHRoZSBob3N0IHN3aXRjaGVzIHRoZSByZXBvcnQgaWQuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHJlcG9ydElkID0gdGhpcy5yZXBvcnRJZCgpO1xuXG4gICAgICAvLyBUaGUgcGFnZSB0aGlzIHJlcG9ydCBvcGVucyBvbiwgZnJvbSB0aGUgP3BhZ2U9IHRoZSBVUkwgYWxyZWFkeSBob2xkcy5cbiAgICAgIC8vIFJlYWQgcGVyIHJlcG9ydCByYXRoZXIgdGhhbiBvbmNlIGF0IGNvbnN0cnVjdGlvbjogdGhlIGhvc3QgbWF5IHN3YXBcbiAgICAgIC8vIHJlcG9ydHMgb24gdGhlIHNhbWUgcm91dGUsIGFuZCBlYWNoIGFycml2YWwgY2FycmllcyBpdHMgb3duID9wYWdlPS5cbiAgICAgIGNvbnN0IHBhZ2VJZCA9IHRoaXMuX3BhZ2VJZEZyb21VcmwoKTtcblxuICAgICAgLy8gT25seSB0aGUgcmVwb3J0IGlkIGFuZCB0aGUgcGFnZSBwYXJhbSByZS1ydW4gdGhpcy4gVGhlIHZpZXcgc3RhdGUgYmVsb3dcbiAgICAgIC8vIGlzIHdyaXR0ZW4gaGVyZSBhbmQgcmVhZCBieSB0aGUgY29uZmlnIGJ1aWxkLCBzbyBpdCBzdGF5cyB1bnRyYWNrZWQuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLmVkaXRNb2RlLnNldChmYWxzZSk7XG5cbiAgICAgICAgLy8gQSBuZXcgcmVwb3J0J3MgcGFnZXMgYXJlIG5vdCB0aGlzIHJlcG9ydCdzIHBhZ2VzIOKAlCBkcm9wIHRoZSBiaW5kaW5nXG4gICAgICAgIC8vIHVudGlsIGl0cyBjYW52YXMgc2F5cyB3aGljaCBwYWdlIGl0IGxhbmRlZCBvbi5cbiAgICAgICAgdGhpcy5jaGF0UGFnZUlkLnNldChudWxsKTtcbiAgICAgICAgdGhpcy5wYWdlSWQuc2V0KHBhZ2VJZCk7XG5cbiAgICAgICAgaWYgKHJlcG9ydElkICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9sb2FkUmVwb3J0KHJlcG9ydElkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlcG9ydC5zZXQobnVsbCk7XG4gICAgICAgICAgdGhpcy5fYnVpbGRSZXBvcnRDb25maWcoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyByZXNldFRvRGVmYXVsdHMoKSBtb3ZlcyB0aGUgc3RhdGUgdmVyc2lvbi4gVGhlIGJhciBpcyBidWlsdCBhZ2FpbiBmb3JcbiAgICAvLyBpdCwgYW5kIHJlcG9ydEZpbHRlcktleSwgd2hpY2ggY2FycmllcyBpdCwgcmVjcmVhdGVzIGZzLWZpbHRlcjogaXQgcmVhZHNcbiAgICAvLyBpdHMgY29uZmlnIG9uY2UuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLl9maWx0ZXJTdGF0ZS5zdGF0ZVZlcnNpb24oKTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKHZlcnNpb24gIT09IHRoaXMuX2JhclZlcnNpb24oKSkge1xuICAgICAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fYnVpbGRSZXBvcnRDb25maWcoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVFZGl0TW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRNb2RlLnVwZGF0ZSgoZWRpdE1vZGUpID0+ICFlZGl0TW9kZSk7XG4gIH1cblxuICAvLyBUaGUgZWRpdCB0b29scyBsaXZlIGluIHRoaXMgdG9vbGJhciwgYnV0IHRoZSBjYW52YXMgb3ducyB3aGF0IHRoZXkgYWN0IG9uXG4gIC8vICh0aGUgYWN0aXZlIHBhZ2UsIHRoZSBoZWFkZXIvZm9vdGVyIGJhbmRzLCB3aGljaCBsYXllciBpcyBsaXZlKS5cbiAgcHVibGljIGdldCBpc01hc3Rlck1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbnZhcz8ubWFzdGVyTW9kZSgpID8/IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFkZFRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2FudmFzPy5hZGRUZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlTWFzdGVyTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9jYW52YXM/LnRvZ2dsZU1hc3Rlck1vZGUoKTtcbiAgfVxuXG4gIC8vIFJlcG9ydCBzZXR0aW5ncyDigJQgbmFtZSwgcGFnZSBzaXplLCBkZWxldGUuIFRoZVxuICAvLyBkaWFsb2cgcGVyZm9ybXMgdGhlIGRlbGV0ZSBpdHNlbGY7IHdlIHJlYWN0IHRvIHdoYXQgaXQgcmVwb3J0cyBiYWNrLlxuICBwdWJsaWMgcmVwb3J0U2V0dGluZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcbiAgICBpZiAoIXJlcG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcG9ydElkID0gcmVwb3J0LmlkO1xuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nLm9wZW48UmVwb3J0U2V0dGluZ3NDb21wb25lbnQsIHVua25vd24sIFJlcG9ydFNldHRpbmdzUmVzdWx0PihSZXBvcnRTZXR0aW5nc0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogeyByZXBvcnQgfSxcbiAgICAgIHdpZHRoOiAnNDYwcHgnLFxuICAgIH0pO1xuICAgIGNvbnN0IHNldHRpbmdzID0gZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09ICdkZWxldGVkJykge1xuICAgICAgICAgIHRoaXMuZGVsZXRlZC5lbWl0KHJlcG9ydElkKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEEgc2F2ZSB0aGF0IGZhaWxlZCBwYXJ0IHdheSAoYSByZWZ1c2VkIG5hbWUpIG1heSBzdGlsbCBoYXZlIHN0b3JlZFxuICAgICAgICAvLyB0aGUgZmlsdGVycyBiZWZvcmUgaXQsIHNvIGEgZGlzbWlzc2VkIGRpYWxvZyB0aGF0IHdyb3RlIHJlbG9hZHMgdG9vLlxuICAgICAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09ICdzYXZlZCcgfHwgc2V0dGluZ3Mud3JvdGUoKSkge1xuICAgICAgICAgIHRoaXMuX2xvYWRSZXBvcnQocmVwb3J0SWQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBzZXR0aW5ncyDigJQgdGl0bGUsIGV4YWN0IGdlb21ldHJ5LCBhbmQgdGhlIGRpYWdub3N0aWMgdmlld3NcbiAgLy8gKFNRTCwgY29uZmlnLCBmaWx0ZXIgd2lyaW5nKS5cbiAgcHVibGljIGNvbXBvbmVudFNldHRpbmdzKGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50TW9kZWwpOiB2b2lkIHtcbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLnJlcG9ydCgpO1xuICAgIGlmICghcmVwb3J0IHx8ICF0aGlzLl9jYW52YXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXBvcnRJZCA9IHJlcG9ydC5pZDtcblxuICAgIC8vIFRoZSBkaWFsb2cgZ2V0cyB3aGF0IHRoZSBjb21wb25lbnQncyB0aXRsZSB0b2tlbnMgZmlsbCB3aXRoIHdoZXJlIGl0IGlzXG4gICAgLy8gZHJhd24sIGZvciB0aGUgdGl0bGUncyBJbnNlcnQgZmllbGQgbWVudSBhbmQgdGhlIGxpbmUgc2F5aW5nIGhvdyBpdCByZWFkcy5cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2cub3BlbjxDb21wb25lbnRTZXR0aW5nc0NvbXBvbmVudCwgQ29tcG9uZW50U2V0dGluZ3NEaWFsb2dEYXRhLCBDb21wb25lbnRTZXR0aW5nc1Jlc3VsdD4oXG4gICAgICBDb21wb25lbnRTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgIHtcbiAgICAgICAgZGF0YTogeyByZXBvcnQsIGNvbXBvbmVudCwgdG9rZW5zOiB0aGlzLl9jYW52YXMuY29tcG9uZW50VG9rZW5zKGNvbXBvbmVudCkgfSxcbiAgICAgICAgd2lkdGg6ICc2NDBweCcsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBGaWx0ZXIgYWRkL3JlbW92ZS9sZXZlbCBjaGFuZ2VzIHBlcnNpc3QgaW1tZWRpYXRlbHkgaW5zaWRlIHRoZSBkaWFsb2cgKG5vXG4gICAgLy8gXCJzYXZlXCIpIGFuZCBjYW4gbGVhdmUgaXQgYnkgYW4gZXhpdCB0aGF0IGNhcnJpZXMgbm8gcmVzdWx0LCBzbyB0aGV5IGFyZVxuICAgIC8vIGFubm91bmNlZCBhcyB0aGV5IGxhbmQuIFRoZSByZWxvYWQgd2FpdHMgZm9yIHRoZSBjbG9zZSBzbyB0aGUgY2FudmFzIGlzbid0XG4gICAgLy8gcmUtcmVuZGVyaW5nIHVuZGVybmVhdGggYW4gb3BlbiBkaWFsb2cuXG4gICAgbGV0IGZpbHRlcnNDaGFuZ2VkID0gZmFsc2U7XG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmZpbHRlcnNDaGFuZ2VkXG4gICAgICAucGlwZSh0YWtlVW50aWwoZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiBmaWx0ZXJzQ2hhbmdlZCA9IHRydWUpO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAvLyBUaGUgZGlhbG9nIGNvbmZpcm1zICsgcGVyZm9ybXMgdGhlIGRlbGV0ZSBpdHNlbGYuIFRoZSBjb21wb25lbnQgaXNcbiAgICAgICAgLy8gZ29uZSBmcm9tIHRoZSByZXBvcnQsIHNvIHJlbG9hZCByYXRoZXIgdGhhbiBwYXRjaGluZyBpdCBvdXQgbG9jYWxseSDigJRcbiAgICAgICAgLy8gaXRzIGZpbHRlcnMgd2VudCB3aXRoIGl0LCB3aGljaCB0aGUgcmVwb3J0IGJhciBoYXMgdG8gYmUgcmVidWlsdCBmb3IuXG4gICAgICAgIGlmIChyZXN1bHQ/LmRlbGV0ZWQpIHtcbiAgICAgICAgICB0aGlzLl9sb2FkUmVwb3J0KHJlcG9ydElkKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXBvcnQncyBmaWx0ZXIgZ3JvdXBzIGNoYW5nZWQsIHNvIHRoZSByZXBvcnQgYmFyIGFuZCB0aGVcbiAgICAgICAgLy8gb24tY29tcG9uZW50IHN0cmlwcyBoYXZlIHRvIGJlIHJlYnVpbHQgZnJvbSBhIGZyZXNoIHJlcG9ydC5cbiAgICAgICAgaWYgKGZpbHRlcnNDaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5fbG9hZFJlcG9ydChyZXBvcnRJZCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3RoaW5nIGVsc2UgaW4gdGhlIGRpYWxvZyB0b3VjaGVzIHRoZSBxdWVyeSDigJQgdGl0bGUgYW5kIHBhZGRpbmcgYXJlXG4gICAgICAgIC8vIHByZXNlbnRhdGlvbi4gUmVwYWludCB0aGUgb25lIGNvbXBvbmVudCBpdCB3YXMgb3BlbmVkIGZvciBhbmQgbGVhdmVcbiAgICAgICAgLy8gZXZlcnkgb3RoZXIgY29tcG9uZW50J3MgZGF0YSwgYW5kIGl0cyBxdWVyeSwgYWxvbmUuXG4gICAgICAgIGlmIChyZXN1bHQ/LnNldHRpbmdzKSB7XG4gICAgICAgICAgdGhpcy5fY2FudmFzPy5hcHBseUNvbXBvbmVudFNldHRpbmdzKGNvbXBvbmVudC5pZCwgcmVzdWx0LnNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBUaGUgY2FudmFzIG1vdmVkIHRvIGFub3RoZXIgcGFnZS4gVGhlIHJlcG9ydC1sZXZlbCBmaWx0ZXJzIHN0YXkgYXMgdGhleVxuICAvLyBhcmUgKHRoZXkgbGl2ZSBpbiB0aGUgc3RhdGUgc2VydmljZSk7IHRoZSBwYWdlIGdvZXMgaW50byB0aGUgVVJMLlxuICBwdWJsaWMgb25DYW52YXNQYWdlQ2hhbmdlZChwYWdlSWQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICAvLyBUaGUgYXNrZWQtZm9yIHBhZ2UgaGFzIGJlZW4gY29uc3VtZWQ7IGZyb20gaGVyZSB0aGUgY2FudmFzIG93bnMgdGhlIHBhZ2UuXG4gICAgdGhpcy5wYWdlSWQuc2V0KG51bGwpO1xuICAgIHRoaXMuY2hhdFBhZ2VJZC5zZXQocGFnZUlkKTtcbiAgICAvLyBUaGUgb3BlbiBwYWdlIGlzIHBhcnQgb2YgdGhlIHN0YXRlIHRoZSB0aWxlcyBhbmQgZXhwb3J0cyByZWFkLlxuICAgIHRoaXMuX2ZpbHRlclN0YXRlLnNldFBhZ2UocGFnZUlkKTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2VkLmVtaXQocGFnZUlkKTtcbiAgICB0aGlzLl93cml0ZVBhZ2VUb1VybChwYWdlSWQpO1xuXG4gICAgLy8gVGhlIGJhciBzaG93cyB0aGUgcGFnZSBncm91cHMgb2YgdGhlIHBhZ2Ugb24gc2NyZWVuLlxuICAgIGlmIChoYXNQYWdlR3JvdXAodGhpcy5yZXBvcnQoKSkpIHtcbiAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGNhbnZhcyBjaGFuZ2VkIHRoZSByZXBvcnQncyBzdHJ1Y3R1cmUgKGFkZGVkIGEgcGFnZSkg4oCUIHJlLWZldGNoIHNvIHRoZVxuICAvLyBuZXcgcGFnZSByZW5kZXJzOyB0aGUgY2FudmFzIGxhbmRzIHRoZSB2aWV3IG9uIGl0LlxuICBwdWJsaWMgb25DYW52YXNSZXBvcnRDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XG4gICAgaWYgKHJlcG9ydCkge1xuICAgICAgdGhpcy5fbG9hZFJlcG9ydChyZXBvcnQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEV4cG9ydCB0aGUgcmVwb3J0IHRvIFBvd2VyUG9pbnQsIGVudGlyZWx5IGNsaWVudC1zaWRlIChuYXRpdmUgZWRpdGFibGVcbiAgLy8gY2hhcnRzOyBwYWdlID0gc2xpZGUpLiBUaGUgZG9jayBzaG93cyBwcm9ncmVzcyB1bnRpbCB0aGUgZmlsZSBzYXZlcy5cbiAgcHVibGljIGV4cG9ydFBvd2VycG9pbnQoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcbiAgICBpZiAoIXJlcG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3Byb2Nlc3MucnVuKFxuICAgICAgJ0V4cG9ydGluZyBQb3dlclBvaW50JyxcbiAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UucG93ZXJwb2ludChyZXBvcnQpLFxuICAgICk7XG4gIH1cblxuICAvLyBFeHBvcnQgdG8gUERGLCBlbnRpcmVseSBjbGllbnQtc2lkZSAob2Zmc2NyZWVuIEVDaGFydHMgYXQgM8OXOyBwYWdlID0gUERGIHBhZ2UpLlxuICBwdWJsaWMgZXhwb3J0UGRmKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XG4gICAgaWYgKCFyZXBvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wcm9jZXNzLnJ1bihcbiAgICAgICdFeHBvcnRpbmcgUERGJyxcbiAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UucGRmKHJlcG9ydCksXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSB3aG9sZSByZXBvcnQgYXMgZmlsZXMgaW4gb25lIGFjdGlvbjogdGhlIHNlcnZlciB3cml0ZXMgb25lIENTViBwZXJcbiAgLy8gY29tcG9uZW50LCBlYWNoIHdoYXQgdGhlIHNjcmVlbiBzaG93cyAoYSBjaGFydCBvciBLUEkgYXMgZHJhd24sIGF0IHRoZVxuICAvLyB2aWV3ZXIncyBncm91cC1ieSBncmFpbjsgYSBsaXN0IGluIGZ1bGwpLCBhbmQgemlwcyB0aGVtIGZvbGRlcmVkIGJ5IHBhZ2VcbiAgLy8gd2l0aCBhbiBFeHBvcnQgTm90ZXMudHh0IHRoYXQgcmVjb3JkcyB0aGUgZmlsdGVycyBhcyB0aGUgYmFyIHJlYWRzIHRoZW0uXG4gIC8vIEVhY2ggZmlsZSBjYXJyaWVzIGl0cyB0aWxlJ3Mgb3duIHN0YXRlICh6aXBFeHBvcnRTdGF0ZXMpOiBhIGxpc3QncyBzb3J0LFxuICAvLyBzZWFyY2ggYW5kIGhpZGRlbiBjb2x1bW5zLCBhIGNoYXJ0J3MgZHJpbGwgcGF0aCBhbmQgdGhlIGdyb3VwcyB0aGF0IG1hdGNoXG4gIC8vICdhbnknOyBhIHNlcnZlciB0aGF0IGRvZXMgbm90IHJlYWQgaXQgdXNlcyBlYWNoIGxpc3QncyBzYXZlZCBzb3J0LiBUaGVcbiAgLy8gbm90ZXMgZ2V0IHRoZSBmaWx0ZXIgbGluZXMgYXMgdGhlIGNvdmVyIHdvcmRzIHRoZW0gKGV4cG9ydExpbmVzOyBhIFRoaXNcbiAgLy8gUGFnZSB6aXAgbmFtZXMgb25seSB0aGUgZ3JvdXBzIHRoYXQgcmVhY2ggdGhlIHBhZ2UpLCBhbmQgZWFjaCBmaWxlIGlzXG4gIC8vIG5hbWVkIGFmdGVyIGl0cyB0aWxlJ3MgdGl0bGUgYXMgdGhlIGNhbnZhcyBoZWFkZXIgcmVhZHMgaXQgKHRpdGxlcykuIEFsbFxuICAvLyBvZiBpdCBpcyByZWFkIG9uY2UsIHdoZW4gdGhlIGV4cG9ydCBzdGFydHMgKGV4cG9ydFdvcmRpbmcpLiBgdGhpc1BhZ2VgXG4gIC8vIG5hcnJvd3MgaXQgdG8gdGhlIHBhZ2UgdGhlIGNhbnZhcyBpcyBzaG93aW5nLiBVbmxpa2UgdGhlIFBERi9Qb3dlclBvaW50XG4gIC8vIGV4cG9ydHMgdGhlIGZpbGVzIGFyZSB3cml0dGVuIHNlcnZlci1zaWRlLCBzbyB0aGV5IGFyZSBub3QgY2FwcGVkIGJ5XG4gIC8vIHdoYXQgYSBzbGlkZSBjYW4gaG9sZC5cbiAgcHVibGljIGV4cG9ydERhdGEodGhpc1BhZ2UgPSBmYWxzZSwgZm9ybWF0OiBSZXBvcnRFeHBvcnRGb3JtYXQgPSAnY3N2Jyk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XG4gICAgaWYgKCFyZXBvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlSWQgPSB0aGlzUGFnZSA/IHRoaXMuX2NhbnZhcz8uYWN0aXZlUGFnZT8uaWQgPz8gbnVsbCA6IG51bGw7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuX2ZpbHRlclN0YXRlLnJlc29sdmVGb3JSZXBvcnQocmVwb3J0LCBwYWdlSWQpO1xuICAgIGNvbnN0IGZyZXF1ZW5jeSA9IHRoaXMuX2ZpbHRlclN0YXRlLmZyZXF1ZW5jeSgpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5fY29sbGVjdG9yLnNuYXBzaG90KHJlcG9ydCk7XG4gICAgY29uc3Qgc3RhdGVzID0gemlwRXhwb3J0U3RhdGVzKHJlcG9ydCwgc25hcHNob3Quc3RhdGUsIHBhZ2VJZCwgKGNvbXBvbmVudCkgPT4gdGhpcy5fZmlsdGVyU3RhdGUuZ3JpZFNlc3Npb25MYXlvdXQoY29tcG9uZW50KSk7XG5cbiAgICB0aGlzLl9wcm9jZXNzLmRvd25sb2FkKFxuICAgICAgZm9ybWF0ID09PSAneGxzeCcgPyAnRXhwb3J0aW5nIEV4Y2VsJyA6ICdFeHBvcnRpbmcgZGF0YScsXG4gICAgICB0aGlzLl9jb2xsZWN0b3IuZXhwb3J0V29yZGluZyhyZXBvcnQsIHNuYXBzaG90LCBwYWdlSWQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoeyBsaW5lcywgdGl0bGVzIH0pID0+IHRoaXMuX3JlcG9ydERhdGEuZXhwb3J0UmVwb3J0KFxuICAgICAgICAgICAgcmVwb3J0LmlkLFxuICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgIHBhZ2VJZCxcbiAgICAgICAgICAgIGZyZXF1ZW5jeSxcbiAgICAgICAgICAgIGxpbmVzLFxuICAgICAgICAgICAgc3RhdGVzLFxuICAgICAgICAgICAgdGl0bGVzLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgKSksXG4gICAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlYWN0IHRvIGVhY2ggY2hhdCB0dXJuIChmcy1jaGF0IGhhbmRsZXMgdGhlIHJlcXVlc3QgKyBwZXJzaXN0ZW5jZSk7IHdlXG4gIC8vIG9ubHkgY2FyZSBhYm91dCB0aGUgcmVwb3J0IHNpZGUgZWZmZWN0cyB0aGlzIGNvbnRleHQncyBiYWNrZW5kIGZsYWdzLlxuICBwdWJsaWMgb25DaGF0UmVzcG9uc2UocmVzcG9uc2U6IEZzQWlDaGF0UmVzcG9uc2UpOiB2b2lkIHtcbiAgICBjb25zdCByZXBvcnRJZCA9IHRoaXMucmVwb3J0SWQoKTtcbiAgICBpZiAocmVwb3J0SWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcG9ydFJlc3BvbnNlID0gcmVzcG9uc2UgYXMgRnNBaUNoYXRSZXNwb25zZSAmIFJlcG9ydENoYXRSZXNwb25zZTtcblxuICAgIC8vIEEgc3RydWN0dXJhbCBjaGFuZ2Ugb3IgYSByZW5hbWUgYm90aCByZS1mZXRjaCB0aGUgcmVwb3J0IChzZXNzaW9uIGZpbHRlclxuICAgIC8vIHZhbHVlcyBzdXJ2aXZlKTsgYSByZW5hbWUgYWRkaXRpb25hbGx5IG5vdGlmaWVzIHRoZSBob3N0IHNvIGl0IGNhblxuICAgIC8vIHJlZnJlc2ggYSBicmVhZGNydW1iIC8gdGl0bGUuXG4gICAgaWYgKHJlcG9ydFJlc3BvbnNlLnJlcG9ydENoYW5nZWQgfHwgcmVwb3J0UmVzcG9uc2UucmVwb3J0UmVuYW1lZCkge1xuICAgICAgdGhpcy5fbG9hZFJlcG9ydChyZXBvcnRJZCwgISFyZXBvcnRSZXNwb25zZS5yZXBvcnRSZW5hbWVkKTtcbiAgICB9XG4gIH1cblxuICAvLyBEcmFnIHRoZSBkaXZpZGVyIGJldHdlZW4gdGhlIGNoYXQgYW5kIGNhbnZhcyBwYW5lcyAocG9pbnRlci1jYXB0dXJlIGxvb3BcbiAgLy8gb3V0c2lkZSBBbmd1bGFyKS5cbiAgcHVibGljIG9uUmVzaXplU3RhcnQoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBoYW5kbGUgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaGFuZGxlLnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgdGhpcy5fc3BsaXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdyZXNpemluZycpO1xuXG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBtb3ZlID0gKGU6IFBvaW50ZXJFdmVudCkgPT4gdGhpcy5fcmVzaXplVG8oZS5jbGllbnRYKTtcbiAgICAgIGNvbnN0IGVuZCA9ICgpID0+IHtcbiAgICAgICAgaGFuZGxlLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xuICAgICAgICBoYW5kbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgICAgaGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIGVuZCk7XG4gICAgICAgIGhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgZW5kKTtcbiAgICAgICAgdGhpcy5fc3BsaXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZycpO1xuICAgICAgfTtcblxuICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgbW92ZSk7XG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgZW5kKTtcbiAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgZW5kKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFdoYXQgdGhlIHZpZXdlciBoYXMgb24gc2NyZWVuIGFzIGEgY2hhdCB0dXJuIHNlbmRzIGl0LiBUaGUgY2FudmFzXG4gIC8vIHNlbGVjdGlvbiBjb3VudHMgb25seSBpbiBlZGl0IG1vZGU6IGl0IGlzIGRyYXduIG9ubHkgdGhlbiwgYW5kIGl0IGlzIGtlcHRcbiAgLy8gKG5vdCBjbGVhcmVkKSB3aGVuIGVkaXQgbW9kZSBpcyBsZWZ0LiBUaGUgbWF0Y2ggaXMgc2VudCBvbmx5IHdoaWxlIGl0IGlzXG4gIC8vICdhbnknLCB0aGUgZHJpbGxlZCBjaGFydHMgb25seSB3aGVuIG9uZSBpcyBkcmlsbGVkLCBhbmQgdGhlIHRhYmxlcyBvbmx5XG4gIC8vIHdoZW4gdGhlIGJvdW5kIHBhZ2Ugc2hvd3Mgb25lLCBlYWNoIHdpdGggdGhlIGxheW91dCB0aGUgdmlld2VyIGhhcyBpdCBpblxuICAvLyB3aGlsZSB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgc3RvcmVkIG9uZS5cbiAgcHJpdmF0ZSBfY2hhdFZpZXdlclN0YXRlKCk6IFJlcG9ydENoYXRWaWV3ZXJTdGF0ZSB7XG4gICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLl9maWx0ZXJTdGF0ZS5zbmFwc2hvdCgpO1xuICAgIGNvbnN0IGRyaWxscyA9IGNoYXRWaWV3ZXJEcmlsbHMoc25hcHNob3QsIHRoaXMuX2ZpbHRlclN0YXRlLmZvcm1hdENvbnRleHQoKS5sb2NhbGUpO1xuICAgIGNvbnN0IHRpbGVzID0gY2hhdFZpZXdlclRpbGVzKFxuICAgICAgdGhpcy5fZmlsdGVyU3RhdGUucmVwb3J0KCksXG4gICAgICB0aGlzLmNoYXRQYWdlSWQoKSxcbiAgICAgIChjb21wb25lbnQpID0+IHRoaXMuX2ZpbHRlclN0YXRlLmdyaWRTZXNzaW9uTGF5b3V0KGNvbXBvbmVudCksXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBncmFudWxhcml0eTogdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCksXG4gICAgICBzZWxlY3RlZENvbXBvbmVudElkOiB0aGlzLmVkaXRNb2RlKCkgPyB0aGlzLl9jYW52YXM/LnNlbGVjdGVkQ29tcG9uZW50SWQoKSA/PyBudWxsIDogbnVsbCxcbiAgICAgIGZpbHRlcnM6IHRoaXMuX2ZpbHRlclN0YXRlLnZpZXdlckZpbHRlcnMoKSxcbiAgICAgIC4uLmNoYXRWaWV3ZXJNYXRjaChzbmFwc2hvdCksXG4gICAgICAuLi4oZHJpbGxzLmxlbmd0aCA/IHsgZHJpbGxzIH0gOiB7fSksXG4gICAgICAuLi4odGlsZXMubGVuZ3RoID8geyB0aWxlcyB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9yZXNpemVUbyhjbGllbnRYOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5fc3BsaXQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAocmVjdC53aWR0aCA9PT0gMCB8fCAhdGhpcy5fY2hhdFBhbmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmF0aW8gPSAoY2xpZW50WCAtIHJlY3QubGVmdCkgLyByZWN0LndpZHRoO1xuICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1pbigwLjgsIE1hdGgubWF4KDAuMiwgcmF0aW8pKTtcbiAgICB0aGlzLl9jaGF0UGFuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5mbGV4QmFzaXMgPSBgJHtjbGFtcGVkICogMTAwfSVgO1xuICB9XG5cbiAgLy8gVGhlIHBhZ2Ugb24gc2NyZWVuIGludG8gdGhlIFVSTCAoP3BhZ2U9KSwgcmVwbGFjaW5nIHRoZSBjdXJyZW50IGhpc3RvcnlcbiAgLy8gZW50cnkgcmF0aGVyIHRoYW4gYWRkaW5nIG9uZSwgc28gQmFjayBsZWF2ZXMgdGhlIHJlcG9ydCBpbnN0ZWFkIG9mXG4gIC8vIHN0ZXBwaW5nIHRocm91Z2ggaXRzIHBhZ2VzLiBPbmx5IHRoZSBwYWdlIHBhcmFtIGlzIHRvdWNoZWQ7IHRoZSBob3N0J3NcbiAgLy8gb3duIHF1ZXJ5IHBhcmFtcyBzdGF5LiBOb3RoaW5nIGlzIHdyaXR0ZW4gd2hlbiB0aGUgcGFyYW0gaXMgb2ZmLCBvciB3aGVuXG4gIC8vIHRoZSBVUkwgYWxyZWFkeSBuYW1lcyB0aGUgcGFnZS5cbiAgcHJpdmF0ZSBfd3JpdGVQYWdlVG9VcmwocGFnZUlkOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLnBhZ2VRdWVyeVBhcmFtKCk7XG4gICAgaWYgKCFwYXJhbSB8fCAhcGFnZUlkIHx8IHRoaXMuX3BhZ2VJZEZyb21VcmwoKSA9PT0gcGFnZUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLl9yb3V0ZSxcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IFtwYXJhbV06IHBhZ2VJZCB9LFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBUaGUgcGFnZSBpZCB0aGUgVVJMIGhvbGRzIHJpZ2h0IG5vdyAoP3BhZ2U9KSwgb3IgbnVsbCB3aGVuIHRoZSBwYWdlIHBhcmFtXG4gIC8vIGlzIG9mZiBvciB0aGUgdmFsdWUgaXMgbm90IGEgdXNhYmxlIGlkLlxuICBwcml2YXRlIF9wYWdlSWRGcm9tVXJsKCk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IHBhcmFtID0gdGhpcy5wYWdlUXVlcnlQYXJhbSgpO1xuICAgIGlmICghcGFyYW0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VJZCA9IE51bWJlcih0aGlzLl9yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldChwYXJhbSkpO1xuXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYWdlSWQpICYmIHBhZ2VJZCA+IDAgPyBwYWdlSWQgOiBudWxsO1xuICB9XG5cbiAgLy8gRXZlcnkgbG9hZCBzZXRzIHRoZSB2aWV3ZXIgc3RhdGUgdXAgZm9yIHRoZSByZXBvcnQgKGluaXQpOiBpdHMgZmlyc3RcbiAgLy8gbG9hZCBvcGVucyBpdCBvbiBpdHMgYXV0aG9yZWQgZGVmYXVsdHMsIGFuZCBhIGxhdGVyIG9uZSAoYSBjaGF0IGVkaXQsIGFcbiAgLy8gc2V0dGluZ3Mgc2F2ZSkga2VlcHMgdGhlIHN0YXRlIGluIG1lbW9yeS5cbiAgcHJpdmF0ZSBfbG9hZFJlcG9ydChyZXBvcnRJZDogbnVtYmVyLCBlbWl0UmVuYW1lZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5fcmVwb3J0RGF0YS5nZXQocmVwb3J0SWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChyZXBvcnQ6IFJlcG9ydCkgPT4gdGhpcy5fZmlsdGVyU3RhdGUuaW5pdChyZXBvcnQpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVwb3J0OiBSZXBvcnQpID0+IHtcbiAgICAgICAgdGhpcy5yZXBvcnQuc2V0KHJlcG9ydCk7XG4gICAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG5cbiAgICAgICAgaWYgKGVtaXRSZW5hbWVkKSB7XG4gICAgICAgICAgdGhpcy5yZW5hbWVkLmVtaXQocmVwb3J0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBSZXBvcnQtbGV2ZWwgZmlsdGVyIGdyb3VwcyBpbiB0aGVpciBzYXZlZCBvcmRlciDigJQgdGhlIG9uZXMgdGhhdCByZW5kZXIgaW5cbiAgLy8gdGhlIHRvb2xiYXIgKGNvbXBvbmVudC1sZXZlbCBncm91cHMgcmVuZGVyIG9uIHRoZWlyIGNvbXBvbmVudHMpLCB3aXRoXG4gIC8vIHRoZSBwYWdlIGdyb3VwcyBvZiB0aGUgcGFnZSBvbiBzY3JlZW4uXG4gIHByaXZhdGUgX3JlcG9ydEdyb3VwcygpOiBSZXBvcnRGaWx0ZXJHcm91cFtdIHtcbiAgICByZXR1cm4gcmVwb3J0QmFyR3JvdXBzKHRoaXMucmVwb3J0KCksIHRoaXMuY2hhdFBhZ2VJZCgpKTtcbiAgfVxuXG4gIC8vIChSZSlidWlsZCB0aGUgdG9vbGJhciBmcy1maWx0ZXIgY29uZmlnIOKAlCB0aGUgcmVwb3J0LWxldmVsIGZpbHRlciBpdGVtcyBhbmRcbiAgLy8gdGhlbiB0aGUgZ3JvdXAtYnkgY29udHJvbC5cbiAgcHJpdmF0ZSBfYnVpbGRSZXBvcnRDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcbiAgICBjb25zdCByZXBvcnRJZCA9IHJlcG9ydD8uaWQgPz8gbnVsbDtcblxuICAgIC8vIERyb3AgYSBncmFpbiB0aGUgY29udHJvbCBubyBsb25nZXIgb2ZmZXJzIOKAlCB0aGUgYWdlbnQgY2FuIG5hcnJvdyB0aGUgbGlzdFxuICAgIC8vIG1pZC1zZXNzaW9uLCBhbmQgYW4gb3ZlcnJpZGUgdGhlIHZpZXdlciBjYW4ndCBzZWUgaXMgd29yc2UgdGhhbiBub25lLlxuICAgIGlmIChyZXBvcnQgJiYgIWlzR3JhbnVsYXJpdHlPZmZlcmVkKHJlcG9ydCwgdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCkpKSB7XG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5zZXRGcmVxdWVuY3kobnVsbCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmVhdHVyZXMgPSByZXBvcnQ/LnZpZXdlckZlYXR1cmVzID8/IFtdO1xuICAgIGNvbnN0IGl0ZW1zID0gcmVwb3J0SWRcbiAgICAgID8gdGhpcy5fcmVwb3J0R3JvdXBzKCkubWFwKChncm91cCkgPT5cbiAgICAgICAgZmlsdGVySXRlbUZvckdyb3VwKGdyb3VwLCB0aGlzLl9maWx0ZXJPcHRpb25zLCByZXBvcnQsIHRoaXMuX2ZpbHRlclN0YXRlLnZhbHVlKGdyb3VwLmlkKSwgZmVhdHVyZXMpKVxuICAgICAgOiBbXTtcblxuICAgIC8vIFRoZSBncm91cC1ieSBjb250cm9sIGxlYWRzIHRoZSBiYXIsIGFoZWFkIG9mIGV2ZXJ5IGZpbHRlcjogaXQgc2V0cyB0aGVcbiAgICAvLyBncmFpbiB0aGUgd2hvbGUgcmVwb3J0IGlzIHJlYWQgYXQsIHNvIGl0IGlzIHRoZSBmaXJzdCB0aGluZyBhIHZpZXdlclxuICAgIC8vIGRlY2lkZXMuIEl0IGlzIG5vdCBhIGZpbHRlciBncm91cCDigJQgaXQgcmUtYnVja2V0cyByb3dzIHJhdGhlciB0aGFuXG4gICAgLy8gbmFycm93aW5nIHRoZW0g4oCUIHNvIGl0IGlzIHBsYWNlZCBoZXJlIHJhdGhlciB0aGFuIG9yZGVyZWQgYW1vbmcgdGhlbS5cbiAgICBjb25zdCBncm91cEJ5SXRlbSA9IHRoaXMuX2dyb3VwQnlJdGVtKCk7XG4gICAgaWYgKGdyb3VwQnlJdGVtKSB7XG4gICAgICBpdGVtcy51bnNoaWZ0KGdyb3VwQnlJdGVtKTtcbiAgICB9XG5cbiAgICAvLyBIb3cgdGhlIGdyb3VwcyBjb21iaW5lIGNsb3NlcyB0aGUgYmFyLlxuICAgIGNvbnN0IG1hdGNoSXRlbSA9IHRoaXMuX21hdGNoSXRlbSgpO1xuICAgIGlmIChtYXRjaEl0ZW0pIHtcbiAgICAgIGl0ZW1zLnB1c2gobWF0Y2hJdGVtKTtcbiAgICB9XG5cbiAgICBjb25zdCBzYXZlZEZpbHRlcnMgPSB0aGlzLl9zYXZlZEZpbHRlcnNDb25maWcoKTtcblxuICAgIHRoaXMuX2JhclZlcnNpb24uc2V0KHRoaXMuX2ZpbHRlclN0YXRlLnN0YXRlVmVyc2lvbigpKTtcbiAgICB0aGlzLnJlcG9ydEZpbHRlckNvbmZpZy5zZXQoe1xuICAgICAgLy8gZnMtZmlsdGVyIG5ldmVyIHRvdWNoZXMgdGhlIFVSTCBvciBwZXJzaXN0cyBmaWx0ZXIgc3RhdGU6IGEgcmVwb3J0XG4gICAgICAvLyBrZWVwcyBubyBzdGF0ZSBpbiB0aGUgVVJMLiBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2Ugb3ducyB0aGUgdmFsdWVzLlxuICAgICAgcXVlcnlQYXJhbTogZmFsc2UsXG4gICAgICBwZXJzaXN0OiBmYWxzZSxcbiAgICAgIGl0ZW1zOiBzYXZlZEZpbHRlcnMgPyB0aGlzLl9rZWVwT25QaWNrKGl0ZW1zKSA6IGl0ZW1zLFxuICAgICAgY2hhbmdlOiAocXVlcnkpID0+IHRoaXMuX2JhckNoYW5nZWQocXVlcnkgPz8ge30sICEhbWF0Y2hJdGVtKSxcbiAgICAgIC8vICdDbGVhciBmaWx0ZXJzJyBwdXRzIHRoZSBzY3JlZW4gYmFjayBvbiB0aGUgcmVwb3J0J3MgYXV0aG9yZWRcbiAgICAgIC8vIGRlZmF1bHRzIGFuZCBkcm9wcyB0aGUgdGVtcG9yYXJ5IGxheWVyLiBmcy1maWx0ZXIgcmVwb3J0cyBpdHMgb3duXG4gICAgICAvLyBjbGVhcmVkIGl0ZW1zIChjaGFuZ2UpIGp1c3QgYmVmb3JlIHRoaXMsIHNvIHRoZSByZXNldCB3aW5zLlxuICAgICAgY2xlYXI6ICgpID0+IHRoaXMuX2ZpbHRlclN0YXRlLnJlc2V0VG9EZWZhdWx0cygpLFxuICAgICAgLy8gVGhlIGNoaXAgc2hvd3MgZXhhY3RseSB3aGlsZSB0aGUgc2NyZWVuIGRpZmZlcnMgZnJvbSB3aGF0IGEgY2xlYXJcbiAgICAgIC8vIHJldHVybnMgdG8gKEM1KS5cbiAgICAgIGNsZWFyVmlzaWJsZTogKCkgPT4gdGhpcy5fZmlsdGVyU3RhdGUuZGlmZmVyc0Zyb21EZWZhdWx0cygpLFxuICAgICAgc2F2ZWRGaWx0ZXJzLFxuICAgICAgLy8gZnMtZmlsdGVyIGNhbGxzIGluaXQgb25jZSBpdHMgc2F2ZWQgZmlsdGVycyBhcmUgbG9hZGVkLlxuICAgICAgLi4uKHNhdmVkRmlsdGVycyAmJiByZXBvcnRJZCA/IHsgaW5pdDogKCkgPT4gdGhpcy5fb3Blbk9uRmlyc3RTYXZlZEZpbHRlcihyZXBvcnRJZCkgfSA6IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgcmVwb3J0IG9wZW5zIG9uIGl0cyBmaXJzdCBzYXZlZCBmaWx0ZXI6IG9uY2UgaXRzIHNhdmVkIGZpbHRlcnMgYXJlXG4gIC8vIGZpcnN0IGxvYWRlZCwgdGhlIGZpcnN0IG9uZSBpcyBwaWNrZWQgYXMgYSB2aWV3ZXIgd291bGQgcGljayBpdCwgc28gaXRcbiAgLy8gYXBwbGllcyBvbiBldmVyeSBwYWdlIHRocm91Z2ggdGhlIHNhbWUgY2hhbmdlIChfYmFyQ2hhbmdlZCkuIE9uY2UgcGVyXG4gIC8vIHJlcG9ydCBvcGVuZWQ6IHRoZSBiYXIgaXMgcmVjcmVhdGVkIGFzIHRoZSBzY3JlZW4gY2hhbmdlcywgYW5kIGEgbGF0ZXJcbiAgLy8gYnVpbGQgbXVzdCBub3QgcGljayBpdCBhZ2FpbiBvdmVyIHRoZSB2aWV3ZXIncyBvd24gZWRpdHMuIFJlb3JkZXJpbmcgdGhlXG4gIC8vIHNhdmVkIGZpbHRlcnMgY2hhbmdlcyB3aGljaCBvbmUgYSByZXBvcnQgb3BlbnMgb24sIGZvciBldmVyeW9uZS5cbiAgcHJpdmF0ZSBfb3Blbk9uRmlyc3RTYXZlZEZpbHRlcihyZXBvcnRJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc2F2ZWRGaWx0ZXJDb250cm9sbGVyID0gdGhpcy5fcmVwb3J0QmFyPy5zYXZlZEZpbHRlckNvbnRyb2xsZXI7XG5cbiAgICBpZiAodGhpcy5fb3BlbmVkT25TYXZlZEZpbHRlclJlcG9ydElkID09PSByZXBvcnRJZCB8fCAhc2F2ZWRGaWx0ZXJDb250cm9sbGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fb3BlbmVkT25TYXZlZEZpbHRlclJlcG9ydElkID0gcmVwb3J0SWQ7XG5cbiAgICBjb25zdCBbZmlyc3RdID0gc2F2ZWRGaWx0ZXJDb250cm9sbGVyLnNhdmVkRmlsdGVycztcbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIHNhdmVkRmlsdGVyQ29udHJvbGxlci5zZXRBY3RpdmVGaWx0ZXIoZmlyc3QpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBiYXIncyBzYXZlZCBmaWx0ZXJzLCBzaGFyZWQgYnkgZXZlcnlvbmUgd2hvIG1heSBvcGVuIHRoZSByZXBvcnQsIG9yXG4gIC8vIHVuZGVmaW5lZCB3aGVuIHRoZSBiYXIgaGFzIG5vbmUgdG8gb2ZmZXI6IGEgcmVwb3J0IG5vdCB5ZXQgc2F2ZWQgaGFzIG5vXG4gIC8vIGlkIHRvIGtlZXAgdGhlbSB1bmRlciwgYW5kIGEgYmFyIHdpdGggbm8gcmVwb3J0LXdpZGUgZmlsdGVyIGhhcyBub3RoaW5nXG4gIC8vIGEgc2F2ZWQgZmlsdGVyIGhvbGRzLiBmcy1maWx0ZXIncyBvd24gU2F2ZWQgZmlsdGVycyBtZW51IGxpc3RzIHRoZW0sXG4gIC8vIHNhdmVzIHRoZSBiYXIncyB2YWx1ZXMgYXMgYSBuZXcgb25lIG9yIG92ZXIgdGhlIHBpY2tlZCBvbmUsIG9yZGVycyBhbmRcbiAgLy8gZGVsZXRlcyB0aGVtLiBXaGF0IGl0IHNhdmVzIGlzIGtlcHQgdG8gdGhlIHJlcG9ydC13aWRlIGZpbHRlcnNcbiAgLy8gKHNhdmVkRmlsdGVyVmFsdWVzKTogYSBwYWdlJ3Mgb3duIGZpbHRlcnMsIHRoZSBncmFpbiBhbmQgdGhlIG1hdGNoIGFyZVxuICAvLyBsZWZ0IG91dC4gVGhlIGxpc3QgaXMgcmVhZCBldmVyeSB0aW1lIHRoZSBiYXIgaXMgYnVpbHQ7IG9uZSB0aGF0IGNhbm5vdFxuICAvLyBiZSByZWFkIHNob3dzIGFzIGVtcHR5IHJhdGhlciB0aGFuIGtlZXBpbmcgdGhlIGJhciBmcm9tIGRyYXdpbmcuXG4gIHByaXZhdGUgX3NhdmVkRmlsdGVyc0NvbmZpZygpOiBJRmlsdGVyU2F2ZWRGaWx0ZXJzQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZXBvcnRJZCA9IHRoaXMucmVwb3J0KCk/LmlkID8/IG51bGw7XG5cbiAgICBpZiAoIXJlcG9ydElkIHx8ICFzYXZlZEZpbHRlckdyb3Vwcyh0aGlzLl9yZXBvcnRHcm91cHMoKSkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsb2FkOiAoKSA9PiB0aGlzLl9yZXBvcnREYXRhXG4gICAgICAgIC5zYXZlZEZpbHRlcnMocmVwb3J0SWQsIHsgY29udGV4dDogbmV3IEh0dHBDb250ZXh0KCkuc2V0KERpc3BsYXlBcGlFcnJvciwgZmFsc2UpIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoW10gYXMgUmVwb3J0U2F2ZWRGaWx0ZXJbXSkpLFxuICAgICAgICAgIG1hcCgoc2F2ZWRGaWx0ZXJzKSA9PiAoc2F2ZWRGaWx0ZXJzID8/IFtdKS5tYXAoKHNhdmVkRmlsdGVyKSA9PiB0aGlzLl9iYXJTYXZlZEZpbHRlcihzYXZlZEZpbHRlcikpKSxcbiAgICAgICAgKSxcbiAgICAgIHNhdmU6IChzYXZlZEZpbHRlcikgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gc2F2ZWRGaWx0ZXJWYWx1ZXMoc2F2ZWRGaWx0ZXIuZmlsdGVycywgdGhpcy5fc2F2ZWRGaWx0ZXJHcm91cHMoKSk7XG4gICAgICAgIGNvbnN0IHNhdmUkID0gc2F2ZWRGaWx0ZXIuaWRcbiAgICAgICAgICA/IHRoaXMuX3JlcG9ydERhdGEudXBkYXRlU2F2ZWRGaWx0ZXIocmVwb3J0SWQsIE51bWJlcihzYXZlZEZpbHRlci5pZCksIHtcbiAgICAgICAgICAgIC4uLihzYXZlZEZpbHRlci5uYW1lID8geyBuYW1lOiBzYXZlZEZpbHRlci5uYW1lIH0gOiB7fSksXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgOiB0aGlzLl9yZXBvcnREYXRhLmNyZWF0ZVNhdmVkRmlsdGVyKHJlcG9ydElkLCB7IG5hbWU6IHNhdmVkRmlsdGVyLm5hbWUgPz8gJycsIGZpbHRlcnMgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNhdmUkLnBpcGUobWFwKChzYXZlZCkgPT4gdGhpcy5fYmFyU2F2ZWRGaWx0ZXIoc2F2ZWQpKSk7XG4gICAgICB9LFxuICAgICAgb3JkZXI6IChzYXZlZEZpbHRlcnMpID0+IHRoaXMuX3JlcG9ydERhdGFcbiAgICAgICAgLnNhdmVTYXZlZEZpbHRlclBvc2l0aW9ucyhyZXBvcnRJZCwgc2F2ZWRGaWx0ZXJzLm1hcCgoc2F2ZWRGaWx0ZXIpID0+IE51bWJlcihzYXZlZEZpbHRlci5pZCkpKVxuICAgICAgICAucGlwZShtYXAoKG9yZGVyZWQpID0+IChvcmRlcmVkID8/IFtdKS5tYXAoKHNhdmVkRmlsdGVyKSA9PiB0aGlzLl9iYXJTYXZlZEZpbHRlcihzYXZlZEZpbHRlcikpKSksXG4gICAgICBkZWxldGU6IChzYXZlZEZpbHRlcikgPT4gdGhpcy5fcmVwb3J0RGF0YVxuICAgICAgICAuZGVsZXRlU2F2ZWRGaWx0ZXIocmVwb3J0SWQsIE51bWJlcihzYXZlZEZpbHRlci5pZCkpXG4gICAgICAgIC5waXBlKG1hcCgoKSA9PiBzYXZlZEZpbHRlcikpLFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgcmVwb3J0J3MgcmVwb3J0LXdpZGUgZmlsdGVyIGdyb3VwczogdGhlIG9uZXMgYSBzYXZlZCBmaWx0ZXIgaG9sZHMuXG4gIHByaXZhdGUgX3NhdmVkRmlsdGVyR3JvdXBzKCk6IFJlcG9ydEZpbHRlckdyb3VwW10ge1xuICAgIHJldHVybiBzYXZlZEZpbHRlckdyb3Vwcyh0aGlzLnJlcG9ydCgpPy5maWx0ZXJHcm91cHMpO1xuICB9XG5cbiAgLy8gQSBzYXZlZCBmaWx0ZXIgYXMgdGhlIGJhcidzIG1lbnUgaG9sZHMgaXQuIEl0cyB2YWx1ZXMgYXJlIGtlcHQgdG8gdGhlXG4gIC8vIHJlcG9ydC13aWRlIGZpbHRlcnMgdGhlIHJlcG9ydCBoYXMgbm93IChhIGtleSBpdCBubyBsb25nZXIgaGFzLCBvciBhXG4gIC8vIHZhbHVlIGl0cyBmaWx0ZXIgY2FuIG5vIGxvbmdlciB0YWtlLCBpcyBkcm9wcGVkIHJhdGhlciB0aGFuIGFwcGxpZWQpLCBhbmRcbiAgLy8gZWFjaCByZWFkIG9mIHRoZW0gaGFuZHMgb3V0IGEgY29weSwgc28gbm90aGluZyB0aGUgYmFyIGRvZXMgdG8gdGhlIHZhbHVlc1xuICAvLyBpdCBzZXQgY2hhbmdlcyB0aGUgc2F2ZWQgZmlsdGVyLiBBIHJlYWQgYWxzbyBub3RlcyB0aGUgYmFyJ3MgdmFsdWVzXG4gIC8vIChfa2VlcEJhck9uUGljayk6IHBpY2tpbmcgYSBzYXZlZCBmaWx0ZXIgcmVhZHMgaXRzIHZhbHVlcyBhbmQgc2V0cyB0aGVcbiAgLy8gYmFyIGZyb20gdGhlbSBpbiBvbmUgZ28sIGFuZCB0aGUgaXRlbXMgaXQgZG9lcyBub3QgaG9sZCBhcmUgcHV0IGJhY2suXG4gIHByaXZhdGUgX2JhclNhdmVkRmlsdGVyKHNhdmVkRmlsdGVyOiBSZXBvcnRTYXZlZEZpbHRlcik6IElGaWx0ZXJTYXZlZEZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVycyA9IHNhdmVkRmlsdGVyVmFsdWVzKHNhdmVkRmlsdGVyLmZpbHRlcnMsIHRoaXMuX3NhdmVkRmlsdGVyR3JvdXBzKCkpO1xuICAgIGNvbnN0IGtlZXBCYXIgPSAoKSA9PiB0aGlzLl9rZWVwQmFyT25QaWNrKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNhdmVkRmlsdGVyLmlkLFxuICAgICAgbmFtZTogc2F2ZWRGaWx0ZXIubmFtZSxcbiAgICAgIGdldCBmaWx0ZXJzKCkge1xuICAgICAgICBrZWVwQmFyKCk7XG5cbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmlsdGVycykpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gTm90ZXMgdGhlIGJhcidzIHZhbHVlcyBmb3IgYSBwaWNrIG9mIGEgc2F2ZWQgZmlsdGVyIChfYmFyVmFsdWVzQXRQaWNrKS5cbiAgLy8gZnMtZmlsdGVyIHNldHMgdGhlIGJhciBmcm9tIHRoZSBzYXZlZCBmaWx0ZXIncyB2YWx1ZXMgaW4gdGhlIHNhbWUgdGFza1xuICAvLyBhcyBpdCByZWFkcyB0aGVtLCBzbyB0aGUgbm90ZSBpcyBkcm9wcGVkIG9uY2UgdGhpcyB0YXNrIGlzIGRvbmU6IGFueVxuICAvLyBvdGhlciByZWFkIG9mIGEgc2F2ZWQgZmlsdGVyJ3MgdmFsdWVzIChpdHMgcm93IGluIFZpZXcgYWxsLCBhIHNhdmUpIHNldHNcbiAgLy8gbm90aGluZy5cbiAgcHJpdmF0ZSBfa2VlcEJhck9uUGljaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3JlcG9ydEJhcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2JhclZhbHVlc0F0UGljayA9IHsgLi4udGhpcy5fcmVwb3J0QmFyLnZhbHVlcyB9O1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMuX2JhclZhbHVlc0F0UGljayA9IG51bGwpO1xuICB9XG5cbiAgLy8gVGhlIGJhcidzIGl0ZW1zLCBlYWNoIG9uZSBhIHNhdmVkIGZpbHRlciBkb2VzIG5vdCBob2xkICh0aGUgZ3JvdXAtYnlcbiAgLy8gZ3JhaW4sIHRoZSBtYXRjaCwgYSBwYWdlJ3Mgb3duIGZpbHRlcnMpIHNldCBiYWNrIHRvIGl0cyB2YWx1ZSB3aGVuIGEgcGlja1xuICAvLyBvZiBhIHNhdmVkIGZpbHRlciBzZXRzIGl0LiBmcy1maWx0ZXIgc2V0cyBldmVyeSBpdGVtIGZyb20gYSBzYXZlZCBmaWx0ZXJcbiAgLy8gYW5kIGNhbGxzIGVhY2ggb25lJ3MgY2hhbmdlIGJlZm9yZSBpdCByZXBvcnRzIHRoZSBiYXIncyBjaGFuZ2UsIHNvIHRoZVxuICAvLyBjaGFuZ2UgdGhlIGJhciByZXBvcnRzIGNhcnJpZXMgdGhlc2UgaXRlbXMgYXMgdGhleSB3ZXJlOiB0aGUgcGljayBtb3Zlc1xuICAvLyB0aGUgcmVwb3J0LXdpZGUgZmlsdGVycyBvbmx5LCBvbiBldmVyeSBwYWdlLCB0aHJvdWdoIHRoZSBzYW1lIGNoYW5nZSBhc1xuICAvLyBhIHZpZXdlcidzIG93biBlZGl0IChfYmFyQ2hhbmdlZCkuIE9uIGFueSBvdGhlciBjaGFuZ2UgYW4gaXRlbSdzIGNoYW5nZVxuICAvLyBjb21lcyBhZnRlciB0aGUgYmFyJ3MsIHdpdGggbm8gcGljayBub3RlZCwgYW5kIGRvZXMgbm90aGluZy5cbiAgcHJpdmF0ZSBfa2VlcE9uUGljayhpdGVtczogSUZpbHRlckNvbmZpZ0l0ZW1bXSk6IElGaWx0ZXJDb25maWdJdGVtW10ge1xuICAgIGNvbnN0IGhlbGQgPSBuZXcgU2V0KHRoaXMuX3NhdmVkRmlsdGVyR3JvdXBzKCkubWFwKChncm91cCkgPT4gZ3JvdXBJdGVtTmFtZShncm91cCkpKTtcblxuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0pID0+IChoZWxkLmhhcyhpdGVtLm5hbWUpXG4gICAgICA/IGl0ZW1cbiAgICAgIDogeyAuLi5pdGVtLCBjaGFuZ2U6IChiYXJJdGVtOiBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT4pID0+IHRoaXMuX2tlZXBJdGVtT25QaWNrKGJhckl0ZW0pIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX2tlZXBJdGVtT25QaWNrKGl0ZW06IEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9iYXJWYWx1ZXNBdFBpY2spIHtcbiAgICAgIGl0ZW0uc2V0VmFsdWUodGhpcy5fYmFyVmFsdWVzQXRQaWNrW2l0ZW0ubmFtZV0sIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgYmFyJ3MgdmFsdWVzIGludG8gdGhlIHN0YXRlOiBldmVyeSBncm91cCBpdCBzaG93cywgdGhlIGdyYWluIGFuZCxcbiAgLy8gd2hlbiB0aGUgYmFyIGhhcyB0aGUgY29udHJvbCwgdGhlIG1hdGNoLlxuICBwcml2YXRlIF9iYXJDaGFuZ2VkKHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgaGFzTWF0Y2g6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHsgZ3JvdXBJZCwgdmFsdWUgfSBvZiBncm91cFZhbHVlc0Zyb21RdWVyeShxdWVyeSwgdGhpcy5fcmVwb3J0R3JvdXBzKCkpKSB7XG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5zZXRWYWx1ZShncm91cElkLCB2YWx1ZSk7XG4gICAgfVxuICAgIC8vIE5vdCBhIGZpbHRlciBncm91cCDigJQgdGhlIGdyYWluIGlzIHJlYWQgc3RyYWlnaHQgb2ZmIHRoZSBxdWVyeS5cbiAgICB0aGlzLl9maWx0ZXJTdGF0ZS5zZXRGcmVxdWVuY3koKHF1ZXJ5W0dST1VQX0JZX0lURU1dIGFzIENoYXJ0R3JhbnVsYXJpdHkpIHx8IG51bGwpO1xuICAgIC8vIE5vciBpcyB0aGUgbWF0Y2g7IGEgYmFyIHdpdGhvdXQgdGhlIGNvbnRyb2wgbGVhdmVzIGl0IGFzIGl0IGlzLlxuICAgIGlmIChoYXNNYXRjaCkge1xuICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuc2V0TWF0Y2gobWF0Y2hGcm9tUXVlcnkocXVlcnkpKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbCBhcyBhbiBmcy1maWx0ZXIgaXRlbSwgb3IgbnVsbCB3aGVuIHRoZSByZXBvcnRcbiAgLy8gaGFzIG5vbmUgdG8gc2hvdy4gU2VlZGVkIGZyb20gdGhlIHNlc3Npb24gc3RhdGUgc28gdGhlIGdyYWluIHRoZSB2aWV3ZXJcbiAgLy8gcGlja2VkIHN1cnZpdmVzIHRoZSByZXBvcnQgYmVpbmcgcmUtZmV0Y2hlZCBhZnRlciBhIGNoYXQgZWRpdC5cbiAgcHJpdmF0ZSBfZ3JvdXBCeUl0ZW0oKTogSUZpbHRlckNvbmZpZ0l0ZW0gfCBudWxsIHtcbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLnJlcG9ydCgpO1xuXG4gICAgcmV0dXJuIHJlcG9ydFxuICAgICAgPyBncm91cEJ5RmlsdGVySXRlbShyZXBvcnQsIHRoaXMuX2ZpbHRlclN0YXRlLmZyZXF1ZW5jeSgpKVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgLy8gVGhlIGJhcidzIE1hdGNoIGNvbnRyb2wsIHNlZWRlZCB3aXRoIHRoZSBtYXRjaCBvbiBzY3JlZW4sIG9yIG51bGwgd2hlblxuICAvLyB0aGUgYmFyIGhvbGRzIGZld2VyIHRoYW4gdHdvIGdyb3VwcyB0aGF0IGNvbWJpbmUuXG4gIHByaXZhdGUgX21hdGNoSXRlbSgpOiBJRmlsdGVyQ29uZmlnSXRlbSB8IG51bGwge1xuICAgIHJldHVybiBtYXRjaEZpbHRlckl0ZW0odGhpcy5yZXBvcnQoKSwgdGhpcy5fcmVwb3J0R3JvdXBzKCksIHRoaXMuY2hhdFBhZ2VJZCgpLCB0aGlzLl9maWx0ZXJTdGF0ZS5tYXRjaCgpKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZzLWFpLXJlcG9ydCBmcy1jb2x1bW5cIj5cblxuICA8ZGl2IGNsYXNzPVwiZnMtYWktcmVwb3J0X19oZWFkZXIgZnMtcm93LmFsaWduLWNlbnRlclwiPlxuICAgIDxoMiBjbGFzcz1cImZzLWFpLXJlcG9ydF9fdGl0bGUgZnMtZmxleFwiPnt7IHJlcG9ydCgpPy5uYW1lIH19PC9oMj5cblxuICAgIEBpZiAocmVwb3J0KCkpIHtcbiAgICAgIDwhLS0gUmVwb3J0LWxldmVsIGZpbHRlcnMsIGlubGluZSB3aXRoIHRoZSB0b29sYmFyIGFjdGlvbnMsIHdpdGggdGhlXG4gICAgICAgICAgIHJlcG9ydCdzIHNhdmVkIGZpbHRlcnMgaW4gZnMtZmlsdGVyJ3Mgb3duIFNhdmVkIGZpbHRlcnMgbWVudS5cbiAgICAgICAgICAgZnMtZmlsdGVyIHJlYWRzIGl0cyBjb25maWcgb25jZSBhdCBpbml0LCBzbyBpdCdzIGtleWVkIG9uIHRoZVxuICAgICAgICAgICBmaWx0ZXIgc2lnbmF0dXJlOiB3aGVuIHRoZSByZXBvcnQtbGV2ZWwgZmlsdGVyIHNldCBjaGFuZ2VzIHRoZVxuICAgICAgICAgICBibG9jayBpcyByZWNyZWF0ZWQgYW5kIHJlLXJlYWRzIHRoZSByZWJ1aWx0IGNvbmZpZy4gLS0+XG4gICAgICBAaWYgKHJlcG9ydEhhc0ZpbHRlcnMoKSkge1xuICAgICAgICBAZm9yIChrZXkgb2YgW3JlcG9ydEZpbHRlcktleSgpXTsgdHJhY2sga2V5KSB7XG4gICAgICAgICAgPGZzLWZpbHRlclxuICAgICAgICAgICAgICBjbGFzcz1cImZzLWFpLXJlcG9ydF9fZmlsdGVyc1wiXG4gICAgICAgICAgICAgIFtjb25maWddPVwicmVwb3J0RmlsdGVyQ29uZmlnKClcIj5cbiAgICAgICAgICA8L2ZzLWZpbHRlcj5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA8IS0tIFdoYXQgbGF5b3V0IGVkaXRpbmcgY2FuIGFkZCBvciBzd2l0Y2ggdG8sIGFuZCB0aGUgd2F5IG91dCBvZiBpdC5cbiAgICAgICAgICAgT25lIHN0eWxlIGZvciBhbGwgdGhyZWUg4oCUIG91dGxpbmVkLCBpY29uIGFuZCB0ZXh0LiBcIkhlYWRlciAmIGZvb3RlclwiXG4gICAgICAgICAgIGlzIGEgdG9nZ2xlOiBpdCBrZWVwcyBpdHMgbGFiZWwgYW5kIHR1cm5zIGdyYXkgd2hpbGUgaXQgaXMgb24uIC0tPlxuICAgICAgQGlmIChlZGl0TW9kZSgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmcy1haS1yZXBvcnRfX2VkaXQtdG9vbHMgZnMtcm93LmFsaWduLWNlbnRlci5nYXAteHNcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFkZCBhIGJsb2NrIG9mIHRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkVGV4dCgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+dGl0bGU8L21hdC1pY29uPlxuICAgICAgICAgICAgQWRkIHRleHRcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmcy1haS1yZXBvcnRfX21hc3RlclwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNNYXN0ZXJNb2RlXCJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaXNNYXN0ZXJNb2RlID8gJ0JhY2sgdG8gZWRpdGluZyB0aGlzIHBhZ2UnIDogJ0VkaXQgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHNob3duIG9uIGV2ZXJ5IHBhZ2UnXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1hc3Rlck1vZGUoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPndlYl9hc3NldDwvbWF0LWljb24+XG4gICAgICAgICAgICBIZWFkZXIgJiBmb290ZXJcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXRNb2RlKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jaGVjazwvbWF0LWljb24+XG4gICAgICAgICAgICBEb25lIGVkaXRpbmdcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gT25lIGljb24gZm9yIGJvdGggc3RhdGVzOiBpdCByZWFkcyBhcyBwcmVzc2VkIHdoaWxlIGVkaXRpbmcgcmF0aGVyXG4gICAgICAgICAgIHRoYW4gc3dhcHBpbmcgdG8gc29tZXRoaW5nIGVsc2UuIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiZnMtYWktcmVwb3J0X190b2dnbGVcIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiZWRpdE1vZGUoKVwiXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiZWRpdE1vZGUoKSA/ICdEb25lIGVkaXRpbmcnIDogJ0VkaXQgbGF5b3V0J1wiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXRNb2RlKClcIj5cbiAgICAgICAgPG1hdC1pY29uPmRhc2hib2FyZF9jdXN0b21pemU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBtYXRUb29sdGlwPVwiRXhwb3J0XCJcbiAgICAgICAgICBbZnNNZW51VHJpZ2dlckZvcl09XCJleHBvcnRNZW51XCI+XG4gICAgICAgIDxtYXQtaWNvbj5kb3dubG9hZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxmcy1tZW51ICNleHBvcnRNZW51PlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydFBvd2VycG9pbnQoKVwiPlxuICAgICAgICAgIEV4cG9ydCBQb3dlclBvaW50XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0UGRmKClcIj5cbiAgICAgICAgICBFeHBvcnQgUERGXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0RGF0YSgpXCI+XG4gICAgICAgICAgRXhwb3J0IFJhdyBEYXRhXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIEBpZiAoKHJlcG9ydCgpPy5wYWdlcz8ubGVuZ3RoID8/IDApID4gMSkge1xuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydERhdGEodHJ1ZSlcIj5cbiAgICAgICAgICAgIEV4cG9ydCBSYXcgRGF0YSAoVGhpcyBQYWdlKVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgIChjbGljayk9XCJleHBvcnREYXRhKGZhbHNlLCAneGxzeCcpXCI+XG4gICAgICAgICAgRXhwb3J0IEV4Y2VsXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIEBpZiAoKHJlcG9ydCgpPy5wYWdlcz8ubGVuZ3RoID8/IDApID4gMSkge1xuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydERhdGEodHJ1ZSwgJ3hsc3gnKVwiPlxuICAgICAgICAgICAgRXhwb3J0IEV4Y2VsIChUaGlzIFBhZ2UpXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgICAgPC9mcy1tZW51PlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgbWF0VG9vbHRpcD1cIlJlcG9ydCBzZXR0aW5nc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInJlcG9ydFNldHRpbmdzKClcIj5cbiAgICAgICAgPG1hdC1pY29uPnNldHRpbmdzPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgICAgI3NwbGl0XG4gICAgICBjbGFzcz1cImZzLWFpLXJlcG9ydF9fc3BsaXQgZnMtcm93LmFsaWduLXN0YXJ0XCI+XG4gICAgQGlmIChjaGF0RW5hYmxlZCgpKSB7XG4gICAgICA8ZnMtYWktY2hhdFxuICAgICAgICAgICNjaGF0UGFuZWxcbiAgICAgICAgICBjbGFzcz1cImNoYXRcIlxuICAgICAgICAgIFtiYXNlUGF0aF09XCJjaGF0QmFzZVBhdGgoKVwiXG4gICAgICAgICAgW3JlYWR5XT1cImNoYXRQYWdlSWQoKSAhPT0gbnVsbFwiXG4gICAgICAgICAgKHJlc3BvbnNlKT1cIm9uQ2hhdFJlc3BvbnNlKCRldmVudClcIj5cbiAgICAgIDwvZnMtYWktY2hhdD5cblxuICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicmVzaXplclwiXG4gICAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uUmVzaXplU3RhcnQoJGV2ZW50KVwiPlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cInZpZXdlciBmcy1mbGV4IGZzLWNvbHVtblwiPlxuICAgICAgQGlmIChyZXBvcnQoKSkge1xuICAgICAgICA8YXBwLXJlcG9ydC1jYW52YXNcbiAgICAgICAgICAgIFtyZXBvcnRdPVwicmVwb3J0KClcIlxuICAgICAgICAgICAgW2VkaXRNb2RlXT1cImVkaXRNb2RlKClcIlxuICAgICAgICAgICAgW3BhZ2VJZF09XCJwYWdlSWQoKVwiXG4gICAgICAgICAgICAoY29tcG9uZW50U2V0dGluZ3MpPVwiY29tcG9uZW50U2V0dGluZ3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAocmVwb3J0Q2hhbmdlZCk9XCJvbkNhbnZhc1JlcG9ydENoYW5nZWQoKVwiXG4gICAgICAgICAgICAocGFnZUNoYW5nZWQpPVwib25DYW52YXNQYWdlQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgIDwvYXBwLXJlcG9ydC1jYW52YXM+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
717
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtYWktcmVwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvZnMtYWktcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvZnMtYWktcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQzFELFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQ3RHLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQ0ssZUFBZSxFQUFnQixjQUFjLEdBQ3hELE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxT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Q3RCO3dEQW9HTyxNQUFNO3NCQURiLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFLNUIsVUFBVTtzQkFEakIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQU1wQyxPQUFPO3NCQURkLFNBQVM7dUJBQUMscUJBQXFCO2dCQU14QixVQUFVO3NCQURqQixTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LFxuICBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBOZ1pvbmUsIFZpZXdDaGlsZCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgRGlzcGxheUFwaUVycm9yIH0gZnJvbSAnQGZpcmVzdGl0Y2gvYXBpJztcbmltcG9ydCB7XG4gIEJhc2VJdGVtLCBGaWx0ZXJDb21wb25lbnQsIEZpbHRlckNvbmZpZywgRnNGaWx0ZXJNb2R1bGUsIElGaWx0ZXJDb25maWdJdGVtLCBJRmlsdGVyU2F2ZWRGaWx0ZXIsIElGaWx0ZXJTYXZlZEZpbHRlcnNDb25maWcsXG59IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc01lbnVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9tZW51JztcbmltcG9ydCB7IEZzUHJvY2VzcyB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb2Nlc3MnO1xuXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBwcm92aWRlRWNoYXJ0c0NvcmUgfSBmcm9tICduZ3gtZWNoYXJ0cyc7XG5cbmltcG9ydCB7IEZzQWlDaGF0Q29tcG9uZW50LCBGc0FpQ2hhdERhdGEsIEZzQWlDaGF0UmVzcG9uc2UgfSBmcm9tICdAZmlyZXN0aXRjaC9haSc7XG5cbmltcG9ydCB7IFJlcG9ydENhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVwb3J0LWNhbnZhcy9yZXBvcnQtY2FudmFzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRBaUNoYXREYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS9yZXBvcnQtYWktY2hhdC5kYXRhJztcbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7XG4gIENvbXBvbmVudFNldHRpbmdzQ29tcG9uZW50LCBDb21wb25lbnRTZXR0aW5nc0RpYWxvZ0RhdGEsIENvbXBvbmVudFNldHRpbmdzUmVzdWx0LFxufSBmcm9tICcuLi8uLi9kaWFsb2dzL2NvbXBvbmVudC1zZXR0aW5ncy9jb21wb25lbnQtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydFNldHRpbmdzQ29tcG9uZW50LCBSZXBvcnRTZXR0aW5nc1Jlc3VsdCB9IGZyb20gJy4uLy4uL2RpYWxvZ3MvcmVwb3J0LXNldHRpbmdzL3JlcG9ydC1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL2V4cG9ydC9yZXBvcnQtZXhwb3J0LWNvbGxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFBkZlNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LXBkZi5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFBwdHhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXhwb3J0L3JlcG9ydC1wcHR4LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0VGV4dExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LXRleHQtbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0Q2hhdFZpZXdlclN0YXRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtY2hhdC12aWV3ZXItc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydFNhdmVkRmlsdGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtc2F2ZWQtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBDaGFydEdyYW51bGFyaXR5LCBSZXBvcnQsIFJlcG9ydENoYXRSZXNwb25zZSxcbiAgUmVwb3J0Q29tcG9uZW50IGFzIFJlcG9ydENvbXBvbmVudE1vZGVsLCBSZXBvcnRGaWx0ZXJHcm91cCxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydEZvcm1hdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LWV4cG9ydC1mb3JtYXQudHlwZSc7XG5pbXBvcnQgeyBjaGF0Vmlld2VyRHJpbGxzLCBjaGF0Vmlld2VyTWF0Y2gsIGNoYXRWaWV3ZXJUaWxlcyB9IGZyb20gJy4uLy4uL3JlcG9ydC1jaGF0LXZpZXdlci1zdGF0ZSc7XG5pbXBvcnQgeyBwcm92aWRlUmVwb3J0RGF0ZVBpY2tlciB9IGZyb20gJy4uLy4uL3JlcG9ydC1kYXRlLXByZXNldHMnO1xuaW1wb3J0IHtcbiAgR1JPVVBfQllfSVRFTSwgZmlsdGVySXRlbUZvckdyb3VwLCBncm91cEJ5RmlsdGVySXRlbSwgZ3JvdXBCeVNpZ25hdHVyZSwgZ3JvdXBJdGVtTmFtZSwgZ3JvdXBWYWx1ZXNGcm9tUXVlcnksXG4gIGhhc1BhZ2VHcm91cCwgaXNHcmFudWxhcml0eU9mZmVyZWQsIG1hdGNoRmlsdGVySXRlbSwgbWF0Y2hGcm9tUXVlcnksIHJlcG9ydEJhckdyb3Vwcyxcbn0gZnJvbSAnLi4vLi4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5pbXBvcnQgeyBzYXZlZEZpbHRlckdyb3Vwcywgc2F2ZWRGaWx0ZXJWYWx1ZXMgfSBmcm9tICcuLi8uLi9yZXBvcnQtc2F2ZWQtZmlsdGVycyc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJPcHRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC1maWx0ZXItb3B0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSwgZGVmYXVsdFNpZ25hdHVyZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC1maWx0ZXItc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyB6aXBFeHBvcnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90aWxlLWRhdGEtc3RhdGUnO1xuXG5cbi8vIEEgc2luZ2xlIHJlcG9ydDogdGhlIEFJIGNoYXQgb24gdGhlIGxlZnQgKHVubGVzcyB0aGUgc2VydmVyIHR1cm5zIGl0IG9mZiksXG4vLyB0aGUgcmVwb3J0IGNhbnZhcyBvbiB0aGUgcmlnaHQsIHVuZGVyIGFuIEgyIHRpdGxlICsgc2V0dGluZ3MgZ2Vhci4gVGhlIGhvc3Rcbi8vIHN1cHBsaWVzIFtyZXBvcnRJZF0gKGZyb20gaXRzIHJvdXRlKSBhbmQgc3dpdGNoZXMgcmVwb3J0cyB0aHJvdWdoIGl0cyBvd25cbi8vIHJvdXRlcyDigJQgdGhpcyBjb21wb25lbnQgbmV2ZXIgcGlja3Mgb25lLlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtYWktcmVwb3J0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZzLWFpLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZzLWFpLXJlcG9ydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICBwcm92aWRlcnM6IFtcbiAgICAvLyBTZXNzaW9uIGZpbHRlciBzdGF0ZSBpcyBwZXItb3Blbi1yZXBvcnQsIG5vdCBhcHAtZ2xvYmFsOyB0aGUgZXhwb3J0XG4gICAgLy8gc2VydmljZXMgcmVzb2x2ZSBmaWx0ZXJzIHRocm91Z2ggaXQsIHNvIHRoZXkgbGl2ZSBhdCB0aGUgc2FtZSBsZXZlbC5cbiAgICBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UsXG4gICAgLy8gVGhlIGJhcnMnIHNlbGVjdCBsaXN0cywgbmFycm93ZWQgYnkgdGhlIG90aGVyIGZpbHRlcnM7IHBlciBvcGVuIHJlcG9ydC5cbiAgICBSZXBvcnRGaWx0ZXJPcHRpb25zU2VydmljZSxcbiAgICBSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlLFxuICAgIFJlcG9ydFBwdHhTZXJ2aWNlLFxuICAgIFJlcG9ydFBkZlNlcnZpY2UsXG4gICAgUmVwb3J0VGV4dExheW91dFNlcnZpY2UsXG4gICAgUmVwb3J0RXhwb3J0U2VydmljZSxcbiAgICAvLyBmcy1haS1jaGF0IHNpdHMgaW4gdGhpcyB0ZW1wbGF0ZSwgc28gaXQgcmVzb2x2ZXMgaXRzIGdhdGV3YXkgaGVyZTogdGhlXG4gICAgLy8gcmVwb3J0IG9uZSwgd2hpY2ggYWRkcyB0aGUgdmlld2VyJ3Mgc3RhdGUgdG8gZWFjaCB0dXJuIGl0IHNlbmRzLlxuICAgIFJlcG9ydEFpQ2hhdERhdGEsXG4gICAgeyBwcm92aWRlOiBGc0FpQ2hhdERhdGEsIHVzZUV4aXN0aW5nOiBSZXBvcnRBaUNoYXREYXRhIH0sXG4gICAgLy8gVHJlZS1zaGFrZW4gRUNoYXJ0cyBjb3JlICsgdGhlICdyZXBvcnQnIGhvdXNlIHRoZW1lLCBsb2FkZWQgbGF6aWx5LlxuICAgIHByb3ZpZGVFY2hhcnRzQ29yZSh7IGVjaGFydHM6ICgpID0+IGltcG9ydCgnLi4vLi4vdGhlbWUvZWNoYXJ0cycpLnRoZW4oKG1vZHVsZSkgPT4gbW9kdWxlLmRlZmF1bHQpIH0pLFxuICAgIC8vIFRoZSBiYXIncyBkYXRlIHBpY2tlcnMgc3RhcnQgdGhlaXIgd2Vla3Mgb24gTW9uZGF5IGFuZCBsaXN0IHRoZSBidWlsdC1pblxuICAgIC8vIHByZXNldHM7IGEgcHJlc2V0IG9ubHkgc2V0cyB0aGUgZGF5cy5cbiAgICBwcm92aWRlUmVwb3J0RGF0ZVBpY2tlcigpLFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgRnNGaWx0ZXJNb2R1bGUsXG4gICAgRnNNZW51TW9kdWxlLFxuICAgIEZzQWlDaGF0Q29tcG9uZW50LFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgUmVwb3J0Q2FudmFzQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0FpUmVwb3J0Q29tcG9uZW50IHtcblxuICAvLyBUaGUgcmVwb3J0IHRoaXMgdmlldyBpcyBmb2N1c2VkIG9uIOKAlCBzdXBwbGllZCBieSB0aGUgaG9zdCBmcm9tIHRoZSByb3V0ZS5cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydElkID0gaW5wdXQ8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gQVBJIGJhc2UgZm9yIHRoZSByZXBvcnRzICsgY2hhdCBlbmRwb2ludHM7IG92ZXJyaWRlIHRvIG1vdW50IGVsc2V3aGVyZS5cbiAgcHVibGljIHJlYWRvbmx5IGJhc2VQYXRoID0gaW5wdXQ8c3RyaW5nPigncmVwb3J0cycpO1xuXG4gIC8vIFRoZSBxdWVyeSBwYXJhbSB0aGF0IGNhcnJpZXMgdGhlIHBhZ2Ugb24gc2NyZWVuICg/cGFnZT03KS4gQSByZXBvcnQgb3BlbnNcbiAgLy8gb24gdGhlIHBhZ2UgaXQgbmFtZXMsIGFuZCBlYWNoIG1vdmUgdG8gYW5vdGhlciBwYWdlIHdyaXRlcyBpdCwgaW4gcGxhY2UsXG4gIC8vIHNvIGEgcmVmcmVzaCBvciBhIHNoYXJlZCBsaW5rIGNvbWVzIGJhY2sgdG8gdGhlIHNhbWUgcGFnZS4gSXQgaXMgdGhlIG9ubHlcbiAgLy8gc3RhdGUgYSByZXBvcnQga2VlcHMgaW4gdGhlIFVSTDogaXRzIGZpbHRlcnMgYW5kIHRoZSByZXN0IGxpdmUgaW4gdGhlXG4gIC8vIHJlcG9ydCdzIHN0YXRlIChSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UpLiBBIGhvc3QgdGhhdCBtb3VudHMgc2V2ZXJhbFxuICAvLyByZXBvcnRzIG9uIG9uZSByb3V0ZSwgb3Igd2FudHMgbm8gVVJMIHdyaXRlcywgc2V0cyB0aGlzIHRvIG51bGwuXG4gIHB1YmxpYyByZWFkb25seSBwYWdlUXVlcnlQYXJhbSA9IGlucHV0PHN0cmluZyB8IG51bGw+KCdwYWdlJyk7XG5cbiAgLy8gVGhlIHJlcG9ydCB3YXMgZGVsZXRlZCBmcm9tIGl0cyBzZXR0aW5ncyBkaWFsb2cg4oCUIHRoZSBob3N0IHJvdXRlcyBiYWNrIHRvXG4gIC8vIHRoZSBsaXN0aW5nLlxuICBwdWJsaWMgcmVhZG9ubHkgZGVsZXRlZCA9IG91dHB1dDxudW1iZXI+KCk7XG5cbiAgLy8gVGhlIHJlcG9ydCB3YXMgcmVuYW1lZCAoc2V0dGluZ3MsIG9yIHRoZSBhZ2VudCkg4oCUIHRoZSBob3N0IGNhbiByZWZyZXNoIGFcbiAgLy8gYnJlYWRjcnVtYiAvIGRvY3VtZW50IHRpdGxlLlxuICBwdWJsaWMgcmVhZG9ubHkgcmVuYW1lZCA9IG91dHB1dDxSZXBvcnQ+KCk7XG5cbiAgLy8gVGhlIHZpZXdlciBtb3ZlZCB0byBhbm90aGVyIHBhZ2Ug4oCUIGZvciBob3N0cyB0aGF0IHRyYWNrIHRoZSBvcGVuIHBhZ2UgZm9yXG4gIC8vIHRoZWlyIG93biByZWFzb25zLiBOb3RoaW5nIGlzIHdyaXR0ZW4gdG8gdGhlIFVSTC5cbiAgcHVibGljIHJlYWRvbmx5IHBhZ2VDaGFuZ2VkID0gb3V0cHV0PG51bWJlciB8IG51bGw+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydCA9IHNpZ25hbDxSZXBvcnQgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGVkaXRNb2RlID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBUaGUgcGFnZSB0aGUgY2FudmFzIHNob3VsZCBvcGVuIG9uOiB0aGUgP3BhZ2U9IHRoZSByZXBvcnQgb3BlbmVkIHdpdGhcbiAgLy8gKHJlYWQgb25jZSBwZXIgcmVwb3J0KS4gQ2xlYXJlZCBhcyBzb29uIGFzIHRoZSBjYW52YXMgcmVwb3J0cyBiYWNrLCBzbyBhXG4gIC8vIGxhdGVyIGluLWFwcCBwYWdlIGNoYW5nZSBpcyBuZXZlciBmb3VnaHQgYnkgYSBzdGFsZSB2YWx1ZS5cbiAgcHVibGljIHJlYWRvbmx5IHBhZ2VJZCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICAvLyBUaGUgcGFnZSB0aGUgY2hhdCBpcyBib3VuZCB0bzogdGhlIG9uZSBvbiBzY3JlZW4uIEEgcmVwb3J0IGNvbnZlcnNhdGlvblxuICAvLyBiZWxvbmdzIHRvIGV4YWN0bHkgb25lIHBhZ2UsIHNvIHRoaXMgYm90aCBzY29wZXMgdGhlIGNvbnZlcnNhdGlvbiBsaXN0IGFuZFxuICAvLyBiZWNvbWVzIHRoZSBuZXcgY29udmVyc2F0aW9uJ3MgcGFnZS4gQSBzaWduYWwgYmVjYXVzZSBpdCBmZWVkc1xuICAvLyBjaGF0QmFzZVBhdGgg4oCUIGNoYW5naW5nIGl0IGlzIHdoYXQgcmVsb2FkcyB0aGUgcGFuZWwgb250byB0aGUgbmV3IHBhZ2Unc1xuICAvLyBjb252ZXJzYXRpb25zLiBOdWxsIHVudGlsIHRoZSBjYW52YXMgcmVwb3J0cyB3aGljaCBwYWdlIGl0IG9wZW5lZCBvbiwgd2hpY2hcbiAgLy8ga2VlcHMgdGhlIGNoYXQgZnJvbSBsaXN0aW5nIGFnYWluc3QgYSBwYWdlIGd1ZXNzLlxuICBwdWJsaWMgcmVhZG9ubHkgY2hhdFBhZ2VJZCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICAvLyBXaGVyZSB0aGUgY2hhdCdzIGNhbGxzIGdvOiBiZW5lYXRoIHRoZSBwYWdlIGl0IGlzIGJvdW5kIHRvXG4gIC8vICh7YmFzZVBhdGh9L3tyZXBvcnRJZH0vcGFnZXMve3BhZ2VJZH0vY2hhdCwg4oCmL2NvbnZlcnNhdGlvbnMsIOKApikuIEV2ZXJ5XG4gIC8vIGNvbnZlcnNhdGlvbiBpcyByZWFjaGVkIHRocm91Z2ggaXRzIHBhZ2UsIHNvIHRoZSBwYXRoIGNhcnJpZXMgdGhlIHJlcG9ydFxuICAvLyBhbmQgdGhlIHBhZ2UgYW5kIG5vdGhpbmcgcmlkZXMgaW4gdGhlIGNoYXQncyByZXF1ZXN0RGF0YS5cbiAgLy9cbiAgLy8gVGhlIGNoYXQgaXMgaGVsZCBjbG9zZWQgKFtyZWFkeV0gaW4gdGhlIHRlbXBsYXRlKSB1bnRpbCB0aGUgcGFnZSBpcyBrbm93bixcbiAgLy8gc28gdGhlIHBhdGggaXMgbmV2ZXIgY2FsbGVkIHdoaWxlIGNoYXRQYWdlSWQgaXMgbnVsbDogb24gYSBmcmVzaCBsb2FkIHRoZVxuICAvLyByZXBvcnQgaGFzIHRvIGFycml2ZSBhbmQgdGhlIGNhbnZhcyBoYXMgdG8gcmVuZGVyIGJlZm9yZSBhbnkgcGFnZSBleGlzdHMuXG4gIHB1YmxpYyByZWFkb25seSBjaGF0QmFzZVBhdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGAke3RoaXMuYmFzZVBhdGgoKX0vJHt0aGlzLnJlcG9ydElkKCl9L3BhZ2VzLyR7dGhpcy5jaGF0UGFnZUlkKCl9YDtcbiAgfSk7XG5cbiAgLy8gVGhlIGNoYXQgYW5kIGl0cyByZXNpemVyIHNob3cgb25jZSB0aGUgcmVwb3J0IHNheXMgdGhlIHNlcnZlciBrZWVwcyB0aGVcbiAgLy8gY2hhdCBvbiwgc28gYSByZXBvcnQgd2hvc2UgY2hhdCBpcyBvZmYgbmV2ZXIgZmxhc2hlcyBvbmUuIEEgc2VydmVyIHRvb1xuICAvLyBvbGQgdG8gc2VuZCBjaGF0RW5hYmxlZCBrZWVwcyBpdC5cbiAgcHVibGljIHJlYWRvbmx5IGNoYXRFbmFibGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XG5cbiAgICByZXR1cm4gISFyZXBvcnQgJiYgcmVwb3J0LmNoYXRFbmFibGVkICE9PSBmYWxzZTtcbiAgfSk7XG5cbiAgLy8gVGhlIHJlcG9ydC1sZXZlbCBmaWx0ZXIgdG9vbGJhciAoZnMtZmlsdGVyKS4gUmVidWlsdCB3aGVuZXZlciB0aGUgbG9hZGVkXG4gIC8vIHJlcG9ydCAoYW5kIHRodXMgaXRzIGdyb3VwcykgY2hhbmdlcy5cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydEZpbHRlckNvbmZpZyA9IHNpZ25hbDxGaWx0ZXJDb25maWcgfCBudWxsPihudWxsKTtcblxuICAvLyBHYXRlcyB0aGUgdG9vbGJhciBmcy1maWx0ZXIgc28gaXQgaXNuJ3QgcmVuZGVyZWQgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvXG4gIC8vIHB1dCBpbiBpdCDigJQgbm8gcmVwb3J0LWxldmVsIGZpbHRlcnMgYW5kIG5vIGdyb3VwLWJ5IGNvbnRyb2wuXG4gIHB1YmxpYyByZWFkb25seSByZXBvcnRIYXNGaWx0ZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLl9yZXBvcnRHcm91cHMoKS5sZW5ndGggPiAwIHx8ICEhdGhpcy5fZ3JvdXBCeUl0ZW0oKTtcbiAgfSk7XG5cbiAgLy8gZnMtZmlsdGVyIHJlYWRzIGl0cyBjb25maWcgb25seSBvbmNlIChhdCBpbml0KS4gVGhlIHRlbXBsYXRlIGtleXMgdGhlXG4gIC8vIHRvb2xiYXIgZnMtZmlsdGVyIG9uIHRoaXMgc2lnbmF0dXJlIHNvIGl0J3MgcmVjcmVhdGVkIChhbmQgcmUtcmVhZHMgdGhlXG4gIC8vIHJlYnVpbHQgY29uZmlnKSB3aGVuZXZlciB0aGUgcmVwb3J0LWxldmVsIGZpbHRlciBzZXQgY2hhbmdlcy5cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydEZpbHRlcktleSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAgLy8gVGhlIHN0YXRlIHZlcnNpb24gdGhlIGJhciB3YXMgYnVpbHQgZm9yOiBhIHJlc2V0IHRvIHRoZSBkZWZhdWx0c1xuICAgICAgLy8gcmVwbGFjZXMgZXZlcnkgdmFsdWUgYXQgb25jZS5cbiAgICAgIHRoaXMuX2JhclZlcnNpb24oKSxcbiAgICAgIC8vIFRoZSBlZmZlY3RpdmUgem9uZSBpcyBwYXJ0IG9mIGl0IHRvbzogYSB6b25lIGNoYW5nZSByZS1yZXNvbHZlcyByZWxhdGl2ZVxuICAgICAgLy8gcHJlc2V0cywgYW5kIHRoZSBiYXIgbXVzdCBiZSByZWNyZWF0ZWQgdG8gc2hvdyB0aGUgbmV3IGRheXMuXG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS50aW1lem9uZSgpLFxuICAgICAgLy8gVGhlIHN0b3JlZCBkZWZhdWx0IGlzIHBhcnQgb2YgdGhlIHNpZ25hdHVyZTogc2F2aW5nIGEgbmV3IGRlZmF1bHQgaW4gcmVwb3J0XG4gICAgICAvLyBzZXR0aW5ncyByZWJ1aWxkcyB0aGUgY29uZmlnLCBidXQgd2l0aG91dCBhIGtleSBjaGFuZ2UgZnMtZmlsdGVyIGtlZXBzXG4gICAgICAvLyByZW5kZXJpbmcgdGhlIHZhbHVlcyBpdCB3YXMgY3JlYXRlZCB3aXRoIHVudGlsIGEgZnVsbCBwYWdlIHJlbG9hZC5cbiAgICAgIGdyb3VwQnlTaWduYXR1cmUodGhpcy5yZXBvcnQoKSksXG4gICAgICAuLi50aGlzLl9yZXBvcnRHcm91cHMoKS5tYXAoKGdyb3VwKSA9PiBgJHtncm91cC5pZH06JHtncm91cC5sZXZlbH06JHtncm91cC5sYWJlbH06JHtkZWZhdWx0U2lnbmF0dXJlKGdyb3VwKX1gKSxcbiAgICAgIC8vIEEgcGFnZSBncm91cCBzaG93cyBvbiBpdHMgb3duIHBhZ2Ugb25seSwgc28gc3VjaCBhIGJhciBpcyByZWNyZWF0ZWRcbiAgICAgIC8vIHdoZW4gdGhlIHBhZ2Ugb24gc2NyZWVuIGNoYW5nZXMuXG4gICAgICAuLi4oaGFzUGFnZUdyb3VwKHRoaXMucmVwb3J0KCkpID8gW2BwYWdlOiR7dGhpcy5jaGF0UGFnZUlkKCl9YF0gOiBbXSksXG4gICAgXS5qb2luKCd8Jyk7XG4gIH0pO1xuXG4gIEBWaWV3Q2hpbGQoJ3NwbGl0JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBfc3BsaXQhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvLyBPbmx5IHdoaWxlIHRoZSBjaGF0IGlzIG9uIChjaGF0RW5hYmxlZCkuXG4gIEBWaWV3Q2hpbGQoJ2NoYXRQYW5lbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIF9jaGF0UGFuZWw/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAvLyBPbmx5IHRoZSBjYW52YXMga25vd3Mgd2hpY2ggcGFnZSBpcyBvbiBzY3JlZW4sIGFuZCBhIHBhZ2Utc2NvcGVkIGV4cG9ydFxuICAvLyBoYXMgdG8gYXNrIGl0LlxuICBAVmlld0NoaWxkKFJlcG9ydENhbnZhc0NvbXBvbmVudClcbiAgcHJpdmF0ZSBfY2FudmFzPzogUmVwb3J0Q2FudmFzQ29tcG9uZW50O1xuXG4gIC8vIFRoZSByZXBvcnQtbGV2ZWwgZmlsdGVyIGJhciwgd2hpbGUgaXQgaXMgZHJhd24uIEEgc2F2ZWQgZmlsdGVyIGJlaW5nXG4gIC8vIHBpY2tlZCByZWFkcyB0aGUgYmFyJ3MgdmFsdWVzIG9mZiBpdCAoX2tlZXBCYXJPblBpY2spLlxuICBAVmlld0NoaWxkKEZpbHRlckNvbXBvbmVudClcbiAgcHJpdmF0ZSBfcmVwb3J0QmFyPzogRmlsdGVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX3JlcG9ydERhdGEgPSBpbmplY3QoUmVwb3J0RGF0YSk7XG4gIHByaXZhdGUgX3JlcG9ydEFpQ2hhdERhdGEgPSBpbmplY3QoUmVwb3J0QWlDaGF0RGF0YSk7XG4gIHByaXZhdGUgX3JvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgX2ZpbHRlclN0YXRlID0gaW5qZWN0KFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSk7XG4gIHByaXZhdGUgX2ZpbHRlck9wdGlvbnMgPSBpbmplY3QoUmVwb3J0RmlsdGVyT3B0aW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIF9leHBvcnRTZXJ2aWNlID0gaW5qZWN0KFJlcG9ydEV4cG9ydFNlcnZpY2UpO1xuICBwcml2YXRlIF9jb2xsZWN0b3IgPSBpbmplY3QoUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSk7XG4gIHByaXZhdGUgX3Byb2Nlc3MgPSBpbmplY3QoRnNQcm9jZXNzKTtcbiAgcHJpdmF0ZSBfZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gIHByaXZhdGUgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgX3pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICAvLyBUaGUgc3RhdGUgdmVyc2lvbiB0aGUgYmFyIHdhcyBsYXN0IGJ1aWx0IGZvciAocmVwb3J0RmlsdGVyS2V5KS5cbiAgcHJpdmF0ZSByZWFkb25seSBfYmFyVmVyc2lvbiA9IHNpZ25hbCgwKTtcblxuICAvLyBUaGUgcmVwb3J0IGJhcidzIHZhbHVlcyBhcyB0aGV5IHdlcmUgdGhlIG1vbWVudCBmcy1maWx0ZXIgcmVhZCBhIHNhdmVkXG4gIC8vIGZpbHRlcidzIHZhbHVlcywgb3IgbnVsbCBvdXRzaWRlIHRoYXQgbW9tZW50LiBBIHBpY2sgc2V0cyBldmVyeSBpdGVtIG9mXG4gIC8vIHRoZSBiYXIgZnJvbSB0aGUgc2F2ZWQgZmlsdGVyJ3MgdmFsdWVzOyBlYWNoIGl0ZW0gYSBzYXZlZCBmaWx0ZXIgbmV2ZXJcbiAgLy8gaG9sZHMgKHRoZSBncm91cC1ieSBncmFpbiwgdGhlIG1hdGNoLCBhIHBhZ2UncyBvd24gZmlsdGVycykgaXMgcHV0IGJhY2tcbiAgLy8gdG8gaXRzIG5vdGVkIHZhbHVlIGFzIGl0IGlzIHNldCAoX2tlZXBJdGVtT25QaWNrKS5cbiAgcHJpdmF0ZSBfYmFyVmFsdWVzQXRQaWNrOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFRoZSByZXBvcnQgdGhlIHNjcmVlbiB3YXMgb3BlbmVkIG9uIGl0cyBmaXJzdCBzYXZlZCBmaWx0ZXIgZm9yXG4gIC8vIChfb3Blbk9uRmlyc3RTYXZlZEZpbHRlciksIG9yIG51bGwgYmVmb3JlIHRoYXQuXG4gIHByaXZhdGUgX29wZW5lZE9uU2F2ZWRGaWx0ZXJSZXBvcnRJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRWFjaCBjaGF0IHR1cm4gY2FycmllcyB3aGF0IHRoZSB2aWV3ZXIgaGFzIG9uIHNjcmVlbi4gT25seSB0aGUgZnVuY3Rpb25cbiAgICAvLyBpcyBzZXQgaGVyZTsgaXQgaXMgY2FsbGVkIHdoZW4gYSB0dXJuIGlzIHNlbnQuXG4gICAgdGhpcy5fcmVwb3J0QWlDaGF0RGF0YS50dXJuRGF0YSA9ICgpID0+ICh7IHZpZXdlclN0YXRlOiB0aGlzLl9jaGF0Vmlld2VyU3RhdGUoKSB9KTtcblxuICAgIC8vIFBvaW50IHRoZSBzaGFyZWQgZGF0YSBnYXRld2F5IGF0IHRoZSBjb25maWd1cmVkIGJhc2UgZmlyc3QgKGJlZm9yZSBhbnlcbiAgICAvLyBsb2FkIGJlbG93IHJlYWRzIGl0KS5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVwb3J0RGF0YS5iYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGgoKTtcbiAgICB9KTtcblxuICAgIC8vIChSZSlsb2FkIHdoZW5ldmVyIHRoZSBob3N0IHN3aXRjaGVzIHRoZSByZXBvcnQgaWQuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHJlcG9ydElkID0gdGhpcy5yZXBvcnRJZCgpO1xuXG4gICAgICAvLyBUaGUgcGFnZSB0aGlzIHJlcG9ydCBvcGVucyBvbiwgZnJvbSB0aGUgP3BhZ2U9IHRoZSBVUkwgYWxyZWFkeSBob2xkcy5cbiAgICAgIC8vIFJlYWQgcGVyIHJlcG9ydCByYXRoZXIgdGhhbiBvbmNlIGF0IGNvbnN0cnVjdGlvbjogdGhlIGhvc3QgbWF5IHN3YXBcbiAgICAgIC8vIHJlcG9ydHMgb24gdGhlIHNhbWUgcm91dGUsIGFuZCBlYWNoIGFycml2YWwgY2FycmllcyBpdHMgb3duID9wYWdlPS5cbiAgICAgIGNvbnN0IHBhZ2VJZCA9IHRoaXMuX3BhZ2VJZEZyb21VcmwoKTtcblxuICAgICAgLy8gT25seSB0aGUgcmVwb3J0IGlkIGFuZCB0aGUgcGFnZSBwYXJhbSByZS1ydW4gdGhpcy4gVGhlIHZpZXcgc3RhdGUgYmVsb3dcbiAgICAgIC8vIGlzIHdyaXR0ZW4gaGVyZSBhbmQgcmVhZCBieSB0aGUgY29uZmlnIGJ1aWxkLCBzbyBpdCBzdGF5cyB1bnRyYWNrZWQuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLmVkaXRNb2RlLnNldChmYWxzZSk7XG5cbiAgICAgICAgLy8gQSBuZXcgcmVwb3J0J3MgcGFnZXMgYXJlIG5vdCB0aGlzIHJlcG9ydCdzIHBhZ2VzIOKAlCBkcm9wIHRoZSBiaW5kaW5nXG4gICAgICAgIC8vIHVudGlsIGl0cyBjYW52YXMgc2F5cyB3aGljaCBwYWdlIGl0IGxhbmRlZCBvbi5cbiAgICAgICAgdGhpcy5jaGF0UGFnZUlkLnNldChudWxsKTtcbiAgICAgICAgdGhpcy5wYWdlSWQuc2V0KHBhZ2VJZCk7XG5cbiAgICAgICAgaWYgKHJlcG9ydElkICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9sb2FkUmVwb3J0KHJlcG9ydElkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlcG9ydC5zZXQobnVsbCk7XG4gICAgICAgICAgdGhpcy5fYnVpbGRSZXBvcnRDb25maWcoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyByZXNldFRvRGVmYXVsdHMoKSBtb3ZlcyB0aGUgc3RhdGUgdmVyc2lvbi4gVGhlIGJhciBpcyBidWlsdCBhZ2FpbiBmb3JcbiAgICAvLyBpdCwgYW5kIHJlcG9ydEZpbHRlcktleSwgd2hpY2ggY2FycmllcyBpdCwgcmVjcmVhdGVzIGZzLWZpbHRlcjogaXQgcmVhZHNcbiAgICAvLyBpdHMgY29uZmlnIG9uY2UuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLl9maWx0ZXJTdGF0ZS5zdGF0ZVZlcnNpb24oKTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKHZlcnNpb24gIT09IHRoaXMuX2JhclZlcnNpb24oKSkge1xuICAgICAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fYnVpbGRSZXBvcnRDb25maWcoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVFZGl0TW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRNb2RlLnVwZGF0ZSgoZWRpdE1vZGUpID0+ICFlZGl0TW9kZSk7XG4gIH1cblxuICAvLyBUaGUgZWRpdCB0b29scyBsaXZlIGluIHRoaXMgdG9vbGJhciwgYnV0IHRoZSBjYW52YXMgb3ducyB3aGF0IHRoZXkgYWN0IG9uXG4gIC8vICh0aGUgYWN0aXZlIHBhZ2UsIHRoZSBoZWFkZXIvZm9vdGVyIGJhbmRzLCB3aGljaCBsYXllciBpcyBsaXZlKS5cbiAgcHVibGljIGdldCBpc01hc3Rlck1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbnZhcz8ubWFzdGVyTW9kZSgpID8/IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFkZFRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2FudmFzPy5hZGRUZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlTWFzdGVyTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9jYW52YXM/LnRvZ2dsZU1hc3Rlck1vZGUoKTtcbiAgfVxuXG4gIC8vIFJlcG9ydCBzZXR0aW5ncyDigJQgbmFtZSwgcGFnZSBzaXplLCBleHBvcnQgYXMgYSBwYWNrYWdlLCBkZWxldGUuIFRoZVxuICAvLyBkaWFsb2cgcGVyZm9ybXMgdGhlIGRlbGV0ZSBpdHNlbGY7IHdlIHJlYWN0IHRvIHdoYXQgaXQgcmVwb3J0cyBiYWNrLlxuICBwdWJsaWMgcmVwb3J0U2V0dGluZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcbiAgICBpZiAoIXJlcG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcG9ydElkID0gcmVwb3J0LmlkO1xuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nLm9wZW48UmVwb3J0U2V0dGluZ3NDb21wb25lbnQsIHVua25vd24sIFJlcG9ydFNldHRpbmdzUmVzdWx0PihSZXBvcnRTZXR0aW5nc0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogeyByZXBvcnQgfSxcbiAgICAgIHdpZHRoOiAnNDYwcHgnLFxuICAgIH0pO1xuICAgIGNvbnN0IHNldHRpbmdzID0gZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09ICdkZWxldGVkJykge1xuICAgICAgICAgIHRoaXMuZGVsZXRlZC5lbWl0KHJlcG9ydElkKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEEgc2F2ZSB0aGF0IGZhaWxlZCBwYXJ0IHdheSAoYSByZWZ1c2VkIG5hbWUpIG1heSBzdGlsbCBoYXZlIHN0b3JlZFxuICAgICAgICAvLyB0aGUgZmlsdGVycyBiZWZvcmUgaXQsIHNvIGEgZGlzbWlzc2VkIGRpYWxvZyB0aGF0IHdyb3RlIHJlbG9hZHMgdG9vLlxuICAgICAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09ICdzYXZlZCcgfHwgc2V0dGluZ3Mud3JvdGUoKSkge1xuICAgICAgICAgIHRoaXMuX2xvYWRSZXBvcnQocmVwb3J0SWQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBzZXR0aW5ncyDigJQgdGl0bGUsIGV4YWN0IGdlb21ldHJ5LCBhbmQgdGhlIGRpYWdub3N0aWMgdmlld3NcbiAgLy8gKFNRTCwgY29uZmlnLCBmaWx0ZXIgd2lyaW5nKS5cbiAgcHVibGljIGNvbXBvbmVudFNldHRpbmdzKGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50TW9kZWwpOiB2b2lkIHtcbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLnJlcG9ydCgpO1xuICAgIGlmICghcmVwb3J0IHx8ICF0aGlzLl9jYW52YXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXBvcnRJZCA9IHJlcG9ydC5pZDtcblxuICAgIC8vIFRoZSBkaWFsb2cgZ2V0cyB3aGF0IHRoZSBjb21wb25lbnQncyB0aXRsZSB0b2tlbnMgZmlsbCB3aXRoIHdoZXJlIGl0IGlzXG4gICAgLy8gZHJhd24sIGZvciB0aGUgdGl0bGUncyBJbnNlcnQgZmllbGQgbWVudSBhbmQgdGhlIGxpbmUgc2F5aW5nIGhvdyBpdCByZWFkcy5cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2cub3BlbjxDb21wb25lbnRTZXR0aW5nc0NvbXBvbmVudCwgQ29tcG9uZW50U2V0dGluZ3NEaWFsb2dEYXRhLCBDb21wb25lbnRTZXR0aW5nc1Jlc3VsdD4oXG4gICAgICBDb21wb25lbnRTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgIHtcbiAgICAgICAgZGF0YTogeyByZXBvcnQsIGNvbXBvbmVudCwgdG9rZW5zOiB0aGlzLl9jYW52YXMuY29tcG9uZW50VG9rZW5zKGNvbXBvbmVudCkgfSxcbiAgICAgICAgd2lkdGg6ICc2NDBweCcsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBGaWx0ZXIgYWRkL3JlbW92ZS9sZXZlbCBjaGFuZ2VzIHBlcnNpc3QgaW1tZWRpYXRlbHkgaW5zaWRlIHRoZSBkaWFsb2cgKG5vXG4gICAgLy8gXCJzYXZlXCIpIGFuZCBjYW4gbGVhdmUgaXQgYnkgYW4gZXhpdCB0aGF0IGNhcnJpZXMgbm8gcmVzdWx0LCBzbyB0aGV5IGFyZVxuICAgIC8vIGFubm91bmNlZCBhcyB0aGV5IGxhbmQuIFRoZSByZWxvYWQgd2FpdHMgZm9yIHRoZSBjbG9zZSBzbyB0aGUgY2FudmFzIGlzbid0XG4gICAgLy8gcmUtcmVuZGVyaW5nIHVuZGVybmVhdGggYW4gb3BlbiBkaWFsb2cuXG4gICAgbGV0IGZpbHRlcnNDaGFuZ2VkID0gZmFsc2U7XG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmZpbHRlcnNDaGFuZ2VkXG4gICAgICAucGlwZSh0YWtlVW50aWwoZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiBmaWx0ZXJzQ2hhbmdlZCA9IHRydWUpO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAvLyBUaGUgZGlhbG9nIGNvbmZpcm1zICsgcGVyZm9ybXMgdGhlIGRlbGV0ZSBpdHNlbGYuIFRoZSBjb21wb25lbnQgaXNcbiAgICAgICAgLy8gZ29uZSBmcm9tIHRoZSByZXBvcnQsIHNvIHJlbG9hZCByYXRoZXIgdGhhbiBwYXRjaGluZyBpdCBvdXQgbG9jYWxseSDigJRcbiAgICAgICAgLy8gaXRzIGZpbHRlcnMgd2VudCB3aXRoIGl0LCB3aGljaCB0aGUgcmVwb3J0IGJhciBoYXMgdG8gYmUgcmVidWlsdCBmb3IuXG4gICAgICAgIGlmIChyZXN1bHQ/LmRlbGV0ZWQpIHtcbiAgICAgICAgICB0aGlzLl9sb2FkUmVwb3J0KHJlcG9ydElkKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXBvcnQncyBmaWx0ZXIgZ3JvdXBzIGNoYW5nZWQsIHNvIHRoZSByZXBvcnQgYmFyIGFuZCB0aGVcbiAgICAgICAgLy8gb24tY29tcG9uZW50IHN0cmlwcyBoYXZlIHRvIGJlIHJlYnVpbHQgZnJvbSBhIGZyZXNoIHJlcG9ydC5cbiAgICAgICAgaWYgKGZpbHRlcnNDaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5fbG9hZFJlcG9ydChyZXBvcnRJZCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3RoaW5nIGVsc2UgaW4gdGhlIGRpYWxvZyB0b3VjaGVzIHRoZSBxdWVyeSDigJQgdGl0bGUgYW5kIHBhZGRpbmcgYXJlXG4gICAgICAgIC8vIHByZXNlbnRhdGlvbi4gUmVwYWludCB0aGUgb25lIGNvbXBvbmVudCBpdCB3YXMgb3BlbmVkIGZvciBhbmQgbGVhdmVcbiAgICAgICAgLy8gZXZlcnkgb3RoZXIgY29tcG9uZW50J3MgZGF0YSwgYW5kIGl0cyBxdWVyeSwgYWxvbmUuXG4gICAgICAgIGlmIChyZXN1bHQ/LnNldHRpbmdzKSB7XG4gICAgICAgICAgdGhpcy5fY2FudmFzPy5hcHBseUNvbXBvbmVudFNldHRpbmdzKGNvbXBvbmVudC5pZCwgcmVzdWx0LnNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBUaGUgY2FudmFzIG1vdmVkIHRvIGFub3RoZXIgcGFnZS4gVGhlIHJlcG9ydC1sZXZlbCBmaWx0ZXJzIHN0YXkgYXMgdGhleVxuICAvLyBhcmUgKHRoZXkgbGl2ZSBpbiB0aGUgc3RhdGUgc2VydmljZSk7IHRoZSBwYWdlIGdvZXMgaW50byB0aGUgVVJMLlxuICBwdWJsaWMgb25DYW52YXNQYWdlQ2hhbmdlZChwYWdlSWQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICAvLyBUaGUgYXNrZWQtZm9yIHBhZ2UgaGFzIGJlZW4gY29uc3VtZWQ7IGZyb20gaGVyZSB0aGUgY2FudmFzIG93bnMgdGhlIHBhZ2UuXG4gICAgdGhpcy5wYWdlSWQuc2V0KG51bGwpO1xuICAgIHRoaXMuY2hhdFBhZ2VJZC5zZXQocGFnZUlkKTtcbiAgICAvLyBUaGUgb3BlbiBwYWdlIGlzIHBhcnQgb2YgdGhlIHN0YXRlIHRoZSB0aWxlcyBhbmQgZXhwb3J0cyByZWFkLlxuICAgIHRoaXMuX2ZpbHRlclN0YXRlLnNldFBhZ2UocGFnZUlkKTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2VkLmVtaXQocGFnZUlkKTtcbiAgICB0aGlzLl93cml0ZVBhZ2VUb1VybChwYWdlSWQpO1xuXG4gICAgLy8gVGhlIGJhciBzaG93cyB0aGUgcGFnZSBncm91cHMgb2YgdGhlIHBhZ2Ugb24gc2NyZWVuLlxuICAgIGlmIChoYXNQYWdlR3JvdXAodGhpcy5yZXBvcnQoKSkpIHtcbiAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGNhbnZhcyBjaGFuZ2VkIHRoZSByZXBvcnQncyBzdHJ1Y3R1cmUgKGFkZGVkIGEgcGFnZSkg4oCUIHJlLWZldGNoIHNvIHRoZVxuICAvLyBuZXcgcGFnZSByZW5kZXJzOyB0aGUgY2FudmFzIGxhbmRzIHRoZSB2aWV3IG9uIGl0LlxuICBwdWJsaWMgb25DYW52YXNSZXBvcnRDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XG4gICAgaWYgKHJlcG9ydCkge1xuICAgICAgdGhpcy5fbG9hZFJlcG9ydChyZXBvcnQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEV4cG9ydCB0aGUgcmVwb3J0IHRvIFBvd2VyUG9pbnQsIGVudGlyZWx5IGNsaWVudC1zaWRlIChuYXRpdmUgZWRpdGFibGVcbiAgLy8gY2hhcnRzOyBwYWdlID0gc2xpZGUpLiBUaGUgZG9jayBzaG93cyBwcm9ncmVzcyB1bnRpbCB0aGUgZmlsZSBzYXZlcy5cbiAgcHVibGljIGV4cG9ydFBvd2VycG9pbnQoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcbiAgICBpZiAoIXJlcG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3Byb2Nlc3MucnVuKFxuICAgICAgJ0V4cG9ydGluZyBQb3dlclBvaW50JyxcbiAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UucG93ZXJwb2ludChyZXBvcnQpLFxuICAgICk7XG4gIH1cblxuICAvLyBFeHBvcnQgdG8gUERGLCBlbnRpcmVseSBjbGllbnQtc2lkZSAob2Zmc2NyZWVuIEVDaGFydHMgYXQgM8OXOyBwYWdlID0gUERGIHBhZ2UpLlxuICBwdWJsaWMgZXhwb3J0UGRmKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XG4gICAgaWYgKCFyZXBvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wcm9jZXNzLnJ1bihcbiAgICAgICdFeHBvcnRpbmcgUERGJyxcbiAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UucGRmKHJlcG9ydCksXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSB3aG9sZSByZXBvcnQgYXMgZmlsZXMgaW4gb25lIGFjdGlvbjogdGhlIHNlcnZlciB3cml0ZXMgb25lIENTViBwZXJcbiAgLy8gY29tcG9uZW50LCBlYWNoIHdoYXQgdGhlIHNjcmVlbiBzaG93cyAoYSBjaGFydCBvciBLUEkgYXMgZHJhd24sIGF0IHRoZVxuICAvLyB2aWV3ZXIncyBncm91cC1ieSBncmFpbjsgYSBsaXN0IGluIGZ1bGwpLCBhbmQgemlwcyB0aGVtIGZvbGRlcmVkIGJ5IHBhZ2VcbiAgLy8gd2l0aCBhbiBFeHBvcnQgTm90ZXMudHh0IHRoYXQgcmVjb3JkcyB0aGUgZmlsdGVycyBhcyB0aGUgYmFyIHJlYWRzIHRoZW0uXG4gIC8vIEVhY2ggZmlsZSBjYXJyaWVzIGl0cyB0aWxlJ3Mgb3duIHN0YXRlICh6aXBFeHBvcnRTdGF0ZXMpOiBhIGxpc3QncyBzb3J0LFxuICAvLyBzZWFyY2ggYW5kIGhpZGRlbiBjb2x1bW5zLCBhIGNoYXJ0J3MgZHJpbGwgcGF0aCBhbmQgdGhlIGdyb3VwcyB0aGF0IG1hdGNoXG4gIC8vICdhbnknOyBhIHNlcnZlciB0aGF0IGRvZXMgbm90IHJlYWQgaXQgdXNlcyBlYWNoIGxpc3QncyBzYXZlZCBzb3J0LiBUaGVcbiAgLy8gbm90ZXMgZ2V0IHRoZSBmaWx0ZXIgbGluZXMgYXMgdGhlIGNvdmVyIHdvcmRzIHRoZW0gKGV4cG9ydExpbmVzOyBhIFRoaXNcbiAgLy8gUGFnZSB6aXAgbmFtZXMgb25seSB0aGUgZ3JvdXBzIHRoYXQgcmVhY2ggdGhlIHBhZ2UpLCBhbmQgZWFjaCBmaWxlIGlzXG4gIC8vIG5hbWVkIGFmdGVyIGl0cyB0aWxlJ3MgdGl0bGUgYXMgdGhlIGNhbnZhcyBoZWFkZXIgcmVhZHMgaXQgKHRpdGxlcykuIEFsbFxuICAvLyBvZiBpdCBpcyByZWFkIG9uY2UsIHdoZW4gdGhlIGV4cG9ydCBzdGFydHMgKGV4cG9ydFdvcmRpbmcpLiBgdGhpc1BhZ2VgXG4gIC8vIG5hcnJvd3MgaXQgdG8gdGhlIHBhZ2UgdGhlIGNhbnZhcyBpcyBzaG93aW5nLiBVbmxpa2UgdGhlIFBERi9Qb3dlclBvaW50XG4gIC8vIGV4cG9ydHMgdGhlIGZpbGVzIGFyZSB3cml0dGVuIHNlcnZlci1zaWRlLCBzbyB0aGV5IGFyZSBub3QgY2FwcGVkIGJ5XG4gIC8vIHdoYXQgYSBzbGlkZSBjYW4gaG9sZC5cbiAgcHVibGljIGV4cG9ydERhdGEodGhpc1BhZ2UgPSBmYWxzZSwgZm9ybWF0OiBSZXBvcnRFeHBvcnRGb3JtYXQgPSAnY3N2Jyk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XG4gICAgaWYgKCFyZXBvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlSWQgPSB0aGlzUGFnZSA/IHRoaXMuX2NhbnZhcz8uYWN0aXZlUGFnZT8uaWQgPz8gbnVsbCA6IG51bGw7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuX2ZpbHRlclN0YXRlLnJlc29sdmVGb3JSZXBvcnQocmVwb3J0LCBwYWdlSWQpO1xuICAgIGNvbnN0IGZyZXF1ZW5jeSA9IHRoaXMuX2ZpbHRlclN0YXRlLmZyZXF1ZW5jeSgpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5fY29sbGVjdG9yLnNuYXBzaG90KHJlcG9ydCk7XG4gICAgY29uc3Qgc3RhdGVzID0gemlwRXhwb3J0U3RhdGVzKHJlcG9ydCwgc25hcHNob3Quc3RhdGUsIHBhZ2VJZCwgKGNvbXBvbmVudCkgPT4gdGhpcy5fZmlsdGVyU3RhdGUuZ3JpZFNlc3Npb25MYXlvdXQoY29tcG9uZW50KSk7XG5cbiAgICB0aGlzLl9wcm9jZXNzLmRvd25sb2FkKFxuICAgICAgZm9ybWF0ID09PSAneGxzeCcgPyAnRXhwb3J0aW5nIEV4Y2VsJyA6ICdFeHBvcnRpbmcgZGF0YScsXG4gICAgICB0aGlzLl9jb2xsZWN0b3IuZXhwb3J0V29yZGluZyhyZXBvcnQsIHNuYXBzaG90LCBwYWdlSWQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoeyBsaW5lcywgdGl0bGVzIH0pID0+IHRoaXMuX3JlcG9ydERhdGEuZXhwb3J0UmVwb3J0KFxuICAgICAgICAgICAgcmVwb3J0LmlkLFxuICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgIHBhZ2VJZCxcbiAgICAgICAgICAgIGZyZXF1ZW5jeSxcbiAgICAgICAgICAgIGxpbmVzLFxuICAgICAgICAgICAgc3RhdGVzLFxuICAgICAgICAgICAgdGl0bGVzLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgKSksXG4gICAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlYWN0IHRvIGVhY2ggY2hhdCB0dXJuIChmcy1jaGF0IGhhbmRsZXMgdGhlIHJlcXVlc3QgKyBwZXJzaXN0ZW5jZSk7IHdlXG4gIC8vIG9ubHkgY2FyZSBhYm91dCB0aGUgcmVwb3J0IHNpZGUgZWZmZWN0cyB0aGlzIGNvbnRleHQncyBiYWNrZW5kIGZsYWdzLlxuICBwdWJsaWMgb25DaGF0UmVzcG9uc2UocmVzcG9uc2U6IEZzQWlDaGF0UmVzcG9uc2UpOiB2b2lkIHtcbiAgICBjb25zdCByZXBvcnRJZCA9IHRoaXMucmVwb3J0SWQoKTtcbiAgICBpZiAocmVwb3J0SWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcG9ydFJlc3BvbnNlID0gcmVzcG9uc2UgYXMgRnNBaUNoYXRSZXNwb25zZSAmIFJlcG9ydENoYXRSZXNwb25zZTtcblxuICAgIC8vIEEgc3RydWN0dXJhbCBjaGFuZ2Ugb3IgYSByZW5hbWUgYm90aCByZS1mZXRjaCB0aGUgcmVwb3J0IChzZXNzaW9uIGZpbHRlclxuICAgIC8vIHZhbHVlcyBzdXJ2aXZlKTsgYSByZW5hbWUgYWRkaXRpb25hbGx5IG5vdGlmaWVzIHRoZSBob3N0IHNvIGl0IGNhblxuICAgIC8vIHJlZnJlc2ggYSBicmVhZGNydW1iIC8gdGl0bGUuXG4gICAgaWYgKHJlcG9ydFJlc3BvbnNlLnJlcG9ydENoYW5nZWQgfHwgcmVwb3J0UmVzcG9uc2UucmVwb3J0UmVuYW1lZCkge1xuICAgICAgdGhpcy5fbG9hZFJlcG9ydChyZXBvcnRJZCwgISFyZXBvcnRSZXNwb25zZS5yZXBvcnRSZW5hbWVkKTtcbiAgICB9XG4gIH1cblxuICAvLyBEcmFnIHRoZSBkaXZpZGVyIGJldHdlZW4gdGhlIGNoYXQgYW5kIGNhbnZhcyBwYW5lcyAocG9pbnRlci1jYXB0dXJlIGxvb3BcbiAgLy8gb3V0c2lkZSBBbmd1bGFyKS5cbiAgcHVibGljIG9uUmVzaXplU3RhcnQoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBoYW5kbGUgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaGFuZGxlLnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgdGhpcy5fc3BsaXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdyZXNpemluZycpO1xuXG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBtb3ZlID0gKGU6IFBvaW50ZXJFdmVudCkgPT4gdGhpcy5fcmVzaXplVG8oZS5jbGllbnRYKTtcbiAgICAgIGNvbnN0IGVuZCA9ICgpID0+IHtcbiAgICAgICAgaGFuZGxlLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xuICAgICAgICBoYW5kbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgICAgaGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIGVuZCk7XG4gICAgICAgIGhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgZW5kKTtcbiAgICAgICAgdGhpcy5fc3BsaXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZycpO1xuICAgICAgfTtcblxuICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgbW92ZSk7XG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgZW5kKTtcbiAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgZW5kKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFdoYXQgdGhlIHZpZXdlciBoYXMgb24gc2NyZWVuIGFzIGEgY2hhdCB0dXJuIHNlbmRzIGl0LiBUaGUgY2FudmFzXG4gIC8vIHNlbGVjdGlvbiBjb3VudHMgb25seSBpbiBlZGl0IG1vZGU6IGl0IGlzIGRyYXduIG9ubHkgdGhlbiwgYW5kIGl0IGlzIGtlcHRcbiAgLy8gKG5vdCBjbGVhcmVkKSB3aGVuIGVkaXQgbW9kZSBpcyBsZWZ0LiBUaGUgbWF0Y2ggaXMgc2VudCBvbmx5IHdoaWxlIGl0IGlzXG4gIC8vICdhbnknLCB0aGUgZHJpbGxlZCBjaGFydHMgb25seSB3aGVuIG9uZSBpcyBkcmlsbGVkLCBhbmQgdGhlIHRhYmxlcyBvbmx5XG4gIC8vIHdoZW4gdGhlIGJvdW5kIHBhZ2Ugc2hvd3Mgb25lLCBlYWNoIHdpdGggdGhlIGxheW91dCB0aGUgdmlld2VyIGhhcyBpdCBpblxuICAvLyB3aGlsZSB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgc3RvcmVkIG9uZS5cbiAgcHJpdmF0ZSBfY2hhdFZpZXdlclN0YXRlKCk6IFJlcG9ydENoYXRWaWV3ZXJTdGF0ZSB7XG4gICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLl9maWx0ZXJTdGF0ZS5zbmFwc2hvdCgpO1xuICAgIGNvbnN0IGRyaWxscyA9IGNoYXRWaWV3ZXJEcmlsbHMoc25hcHNob3QsIHRoaXMuX2ZpbHRlclN0YXRlLmZvcm1hdENvbnRleHQoKS5sb2NhbGUpO1xuICAgIGNvbnN0IHRpbGVzID0gY2hhdFZpZXdlclRpbGVzKFxuICAgICAgdGhpcy5fZmlsdGVyU3RhdGUucmVwb3J0KCksXG4gICAgICB0aGlzLmNoYXRQYWdlSWQoKSxcbiAgICAgIChjb21wb25lbnQpID0+IHRoaXMuX2ZpbHRlclN0YXRlLmdyaWRTZXNzaW9uTGF5b3V0KGNvbXBvbmVudCksXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBncmFudWxhcml0eTogdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCksXG4gICAgICBzZWxlY3RlZENvbXBvbmVudElkOiB0aGlzLmVkaXRNb2RlKCkgPyB0aGlzLl9jYW52YXM/LnNlbGVjdGVkQ29tcG9uZW50SWQoKSA/PyBudWxsIDogbnVsbCxcbiAgICAgIGZpbHRlcnM6IHRoaXMuX2ZpbHRlclN0YXRlLnZpZXdlckZpbHRlcnMoKSxcbiAgICAgIC4uLmNoYXRWaWV3ZXJNYXRjaChzbmFwc2hvdCksXG4gICAgICAuLi4oZHJpbGxzLmxlbmd0aCA/IHsgZHJpbGxzIH0gOiB7fSksXG4gICAgICAuLi4odGlsZXMubGVuZ3RoID8geyB0aWxlcyB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9yZXNpemVUbyhjbGllbnRYOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5fc3BsaXQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAocmVjdC53aWR0aCA9PT0gMCB8fCAhdGhpcy5fY2hhdFBhbmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmF0aW8gPSAoY2xpZW50WCAtIHJlY3QubGVmdCkgLyByZWN0LndpZHRoO1xuICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1pbigwLjgsIE1hdGgubWF4KDAuMiwgcmF0aW8pKTtcbiAgICB0aGlzLl9jaGF0UGFuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5mbGV4QmFzaXMgPSBgJHtjbGFtcGVkICogMTAwfSVgO1xuICB9XG5cbiAgLy8gVGhlIHBhZ2Ugb24gc2NyZWVuIGludG8gdGhlIFVSTCAoP3BhZ2U9KSwgcmVwbGFjaW5nIHRoZSBjdXJyZW50IGhpc3RvcnlcbiAgLy8gZW50cnkgcmF0aGVyIHRoYW4gYWRkaW5nIG9uZSwgc28gQmFjayBsZWF2ZXMgdGhlIHJlcG9ydCBpbnN0ZWFkIG9mXG4gIC8vIHN0ZXBwaW5nIHRocm91Z2ggaXRzIHBhZ2VzLiBPbmx5IHRoZSBwYWdlIHBhcmFtIGlzIHRvdWNoZWQ7IHRoZSBob3N0J3NcbiAgLy8gb3duIHF1ZXJ5IHBhcmFtcyBzdGF5LiBOb3RoaW5nIGlzIHdyaXR0ZW4gd2hlbiB0aGUgcGFyYW0gaXMgb2ZmLCBvciB3aGVuXG4gIC8vIHRoZSBVUkwgYWxyZWFkeSBuYW1lcyB0aGUgcGFnZS5cbiAgcHJpdmF0ZSBfd3JpdGVQYWdlVG9VcmwocGFnZUlkOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLnBhZ2VRdWVyeVBhcmFtKCk7XG4gICAgaWYgKCFwYXJhbSB8fCAhcGFnZUlkIHx8IHRoaXMuX3BhZ2VJZEZyb21VcmwoKSA9PT0gcGFnZUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLl9yb3V0ZSxcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IFtwYXJhbV06IHBhZ2VJZCB9LFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBUaGUgcGFnZSBpZCB0aGUgVVJMIGhvbGRzIHJpZ2h0IG5vdyAoP3BhZ2U9KSwgb3IgbnVsbCB3aGVuIHRoZSBwYWdlIHBhcmFtXG4gIC8vIGlzIG9mZiBvciB0aGUgdmFsdWUgaXMgbm90IGEgdXNhYmxlIGlkLlxuICBwcml2YXRlIF9wYWdlSWRGcm9tVXJsKCk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IHBhcmFtID0gdGhpcy5wYWdlUXVlcnlQYXJhbSgpO1xuICAgIGlmICghcGFyYW0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VJZCA9IE51bWJlcih0aGlzLl9yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldChwYXJhbSkpO1xuXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYWdlSWQpICYmIHBhZ2VJZCA+IDAgPyBwYWdlSWQgOiBudWxsO1xuICB9XG5cbiAgLy8gRXZlcnkgbG9hZCBzZXRzIHRoZSB2aWV3ZXIgc3RhdGUgdXAgZm9yIHRoZSByZXBvcnQgKGluaXQpOiBpdHMgZmlyc3RcbiAgLy8gbG9hZCBvcGVucyBpdCBvbiBpdHMgYXV0aG9yZWQgZGVmYXVsdHMsIGFuZCBhIGxhdGVyIG9uZSAoYSBjaGF0IGVkaXQsIGFcbiAgLy8gc2V0dGluZ3Mgc2F2ZSkga2VlcHMgdGhlIHN0YXRlIGluIG1lbW9yeS5cbiAgcHJpdmF0ZSBfbG9hZFJlcG9ydChyZXBvcnRJZDogbnVtYmVyLCBlbWl0UmVuYW1lZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5fcmVwb3J0RGF0YS5nZXQocmVwb3J0SWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChyZXBvcnQ6IFJlcG9ydCkgPT4gdGhpcy5fZmlsdGVyU3RhdGUuaW5pdChyZXBvcnQpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVwb3J0OiBSZXBvcnQpID0+IHtcbiAgICAgICAgdGhpcy5yZXBvcnQuc2V0KHJlcG9ydCk7XG4gICAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG5cbiAgICAgICAgaWYgKGVtaXRSZW5hbWVkKSB7XG4gICAgICAgICAgdGhpcy5yZW5hbWVkLmVtaXQocmVwb3J0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBSZXBvcnQtbGV2ZWwgZmlsdGVyIGdyb3VwcyBpbiB0aGVpciBzYXZlZCBvcmRlciDigJQgdGhlIG9uZXMgdGhhdCByZW5kZXIgaW5cbiAgLy8gdGhlIHRvb2xiYXIgKGNvbXBvbmVudC1sZXZlbCBncm91cHMgcmVuZGVyIG9uIHRoZWlyIGNvbXBvbmVudHMpLCB3aXRoXG4gIC8vIHRoZSBwYWdlIGdyb3VwcyBvZiB0aGUgcGFnZSBvbiBzY3JlZW4uXG4gIHByaXZhdGUgX3JlcG9ydEdyb3VwcygpOiBSZXBvcnRGaWx0ZXJHcm91cFtdIHtcbiAgICByZXR1cm4gcmVwb3J0QmFyR3JvdXBzKHRoaXMucmVwb3J0KCksIHRoaXMuY2hhdFBhZ2VJZCgpKTtcbiAgfVxuXG4gIC8vIChSZSlidWlsZCB0aGUgdG9vbGJhciBmcy1maWx0ZXIgY29uZmlnIOKAlCB0aGUgcmVwb3J0LWxldmVsIGZpbHRlciBpdGVtcyBhbmRcbiAgLy8gdGhlbiB0aGUgZ3JvdXAtYnkgY29udHJvbC5cbiAgcHJpdmF0ZSBfYnVpbGRSZXBvcnRDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcbiAgICBjb25zdCByZXBvcnRJZCA9IHJlcG9ydD8uaWQgPz8gbnVsbDtcblxuICAgIC8vIERyb3AgYSBncmFpbiB0aGUgY29udHJvbCBubyBsb25nZXIgb2ZmZXJzIOKAlCB0aGUgYWdlbnQgY2FuIG5hcnJvdyB0aGUgbGlzdFxuICAgIC8vIG1pZC1zZXNzaW9uLCBhbmQgYW4gb3ZlcnJpZGUgdGhlIHZpZXdlciBjYW4ndCBzZWUgaXMgd29yc2UgdGhhbiBub25lLlxuICAgIGlmIChyZXBvcnQgJiYgIWlzR3JhbnVsYXJpdHlPZmZlcmVkKHJlcG9ydCwgdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCkpKSB7XG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5zZXRGcmVxdWVuY3kobnVsbCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmVhdHVyZXMgPSByZXBvcnQ/LnZpZXdlckZlYXR1cmVzID8/IFtdO1xuICAgIGNvbnN0IGl0ZW1zID0gcmVwb3J0SWRcbiAgICAgID8gdGhpcy5fcmVwb3J0R3JvdXBzKCkubWFwKChncm91cCkgPT5cbiAgICAgICAgZmlsdGVySXRlbUZvckdyb3VwKGdyb3VwLCB0aGlzLl9maWx0ZXJPcHRpb25zLCByZXBvcnQsIHRoaXMuX2ZpbHRlclN0YXRlLnZhbHVlKGdyb3VwLmlkKSwgZmVhdHVyZXMpKVxuICAgICAgOiBbXTtcblxuICAgIC8vIFRoZSBncm91cC1ieSBjb250cm9sIGxlYWRzIHRoZSBiYXIsIGFoZWFkIG9mIGV2ZXJ5IGZpbHRlcjogaXQgc2V0cyB0aGVcbiAgICAvLyBncmFpbiB0aGUgd2hvbGUgcmVwb3J0IGlzIHJlYWQgYXQsIHNvIGl0IGlzIHRoZSBmaXJzdCB0aGluZyBhIHZpZXdlclxuICAgIC8vIGRlY2lkZXMuIEl0IGlzIG5vdCBhIGZpbHRlciBncm91cCDigJQgaXQgcmUtYnVja2V0cyByb3dzIHJhdGhlciB0aGFuXG4gICAgLy8gbmFycm93aW5nIHRoZW0g4oCUIHNvIGl0IGlzIHBsYWNlZCBoZXJlIHJhdGhlciB0aGFuIG9yZGVyZWQgYW1vbmcgdGhlbS5cbiAgICBjb25zdCBncm91cEJ5SXRlbSA9IHRoaXMuX2dyb3VwQnlJdGVtKCk7XG4gICAgaWYgKGdyb3VwQnlJdGVtKSB7XG4gICAgICBpdGVtcy51bnNoaWZ0KGdyb3VwQnlJdGVtKTtcbiAgICB9XG5cbiAgICAvLyBIb3cgdGhlIGdyb3VwcyBjb21iaW5lIGNsb3NlcyB0aGUgYmFyLlxuICAgIGNvbnN0IG1hdGNoSXRlbSA9IHRoaXMuX21hdGNoSXRlbSgpO1xuICAgIGlmIChtYXRjaEl0ZW0pIHtcbiAgICAgIGl0ZW1zLnB1c2gobWF0Y2hJdGVtKTtcbiAgICB9XG5cbiAgICBjb25zdCBzYXZlZEZpbHRlcnMgPSB0aGlzLl9zYXZlZEZpbHRlcnNDb25maWcoKTtcblxuICAgIHRoaXMuX2JhclZlcnNpb24uc2V0KHRoaXMuX2ZpbHRlclN0YXRlLnN0YXRlVmVyc2lvbigpKTtcbiAgICB0aGlzLnJlcG9ydEZpbHRlckNvbmZpZy5zZXQoe1xuICAgICAgLy8gZnMtZmlsdGVyIG5ldmVyIHRvdWNoZXMgdGhlIFVSTCBvciBwZXJzaXN0cyBmaWx0ZXIgc3RhdGU6IGEgcmVwb3J0XG4gICAgICAvLyBrZWVwcyBubyBzdGF0ZSBpbiB0aGUgVVJMLiBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2Ugb3ducyB0aGUgdmFsdWVzLlxuICAgICAgcXVlcnlQYXJhbTogZmFsc2UsXG4gICAgICBwZXJzaXN0OiBmYWxzZSxcbiAgICAgIGl0ZW1zOiBzYXZlZEZpbHRlcnMgPyB0aGlzLl9rZWVwT25QaWNrKGl0ZW1zKSA6IGl0ZW1zLFxuICAgICAgY2hhbmdlOiAocXVlcnkpID0+IHRoaXMuX2JhckNoYW5nZWQocXVlcnkgPz8ge30sICEhbWF0Y2hJdGVtKSxcbiAgICAgIC8vICdDbGVhciBmaWx0ZXJzJyBwdXRzIHRoZSBzY3JlZW4gYmFjayBvbiB0aGUgcmVwb3J0J3MgYXV0aG9yZWRcbiAgICAgIC8vIGRlZmF1bHRzIGFuZCBkcm9wcyB0aGUgdGVtcG9yYXJ5IGxheWVyLiBmcy1maWx0ZXIgcmVwb3J0cyBpdHMgb3duXG4gICAgICAvLyBjbGVhcmVkIGl0ZW1zIChjaGFuZ2UpIGp1c3QgYmVmb3JlIHRoaXMsIHNvIHRoZSByZXNldCB3aW5zLlxuICAgICAgY2xlYXI6ICgpID0+IHRoaXMuX2ZpbHRlclN0YXRlLnJlc2V0VG9EZWZhdWx0cygpLFxuICAgICAgLy8gVGhlIGNoaXAgc2hvd3MgZXhhY3RseSB3aGlsZSB0aGUgc2NyZWVuIGRpZmZlcnMgZnJvbSB3aGF0IGEgY2xlYXJcbiAgICAgIC8vIHJldHVybnMgdG8gKEM1KS5cbiAgICAgIGNsZWFyVmlzaWJsZTogKCkgPT4gdGhpcy5fZmlsdGVyU3RhdGUuZGlmZmVyc0Zyb21EZWZhdWx0cygpLFxuICAgICAgc2F2ZWRGaWx0ZXJzLFxuICAgICAgLy8gZnMtZmlsdGVyIGNhbGxzIGluaXQgb25jZSBpdHMgc2F2ZWQgZmlsdGVycyBhcmUgbG9hZGVkLlxuICAgICAgLi4uKHNhdmVkRmlsdGVycyAmJiByZXBvcnRJZCA/IHsgaW5pdDogKCkgPT4gdGhpcy5fb3Blbk9uRmlyc3RTYXZlZEZpbHRlcihyZXBvcnRJZCkgfSA6IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgcmVwb3J0IG9wZW5zIG9uIGl0cyBmaXJzdCBzYXZlZCBmaWx0ZXI6IG9uY2UgaXRzIHNhdmVkIGZpbHRlcnMgYXJlXG4gIC8vIGZpcnN0IGxvYWRlZCwgdGhlIGZpcnN0IG9uZSBpcyBwaWNrZWQgYXMgYSB2aWV3ZXIgd291bGQgcGljayBpdCwgc28gaXRcbiAgLy8gYXBwbGllcyBvbiBldmVyeSBwYWdlIHRocm91Z2ggdGhlIHNhbWUgY2hhbmdlIChfYmFyQ2hhbmdlZCkuIE9uY2UgcGVyXG4gIC8vIHJlcG9ydCBvcGVuZWQ6IHRoZSBiYXIgaXMgcmVjcmVhdGVkIGFzIHRoZSBzY3JlZW4gY2hhbmdlcywgYW5kIGEgbGF0ZXJcbiAgLy8gYnVpbGQgbXVzdCBub3QgcGljayBpdCBhZ2FpbiBvdmVyIHRoZSB2aWV3ZXIncyBvd24gZWRpdHMuIFJlb3JkZXJpbmcgdGhlXG4gIC8vIHNhdmVkIGZpbHRlcnMgY2hhbmdlcyB3aGljaCBvbmUgYSByZXBvcnQgb3BlbnMgb24sIGZvciBldmVyeW9uZS5cbiAgcHJpdmF0ZSBfb3Blbk9uRmlyc3RTYXZlZEZpbHRlcihyZXBvcnRJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc2F2ZWRGaWx0ZXJDb250cm9sbGVyID0gdGhpcy5fcmVwb3J0QmFyPy5zYXZlZEZpbHRlckNvbnRyb2xsZXI7XG5cbiAgICBpZiAodGhpcy5fb3BlbmVkT25TYXZlZEZpbHRlclJlcG9ydElkID09PSByZXBvcnRJZCB8fCAhc2F2ZWRGaWx0ZXJDb250cm9sbGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fb3BlbmVkT25TYXZlZEZpbHRlclJlcG9ydElkID0gcmVwb3J0SWQ7XG5cbiAgICBjb25zdCBbZmlyc3RdID0gc2F2ZWRGaWx0ZXJDb250cm9sbGVyLnNhdmVkRmlsdGVycztcbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIHNhdmVkRmlsdGVyQ29udHJvbGxlci5zZXRBY3RpdmVGaWx0ZXIoZmlyc3QpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBiYXIncyBzYXZlZCBmaWx0ZXJzLCBzaGFyZWQgYnkgZXZlcnlvbmUgd2hvIG1heSBvcGVuIHRoZSByZXBvcnQsIG9yXG4gIC8vIHVuZGVmaW5lZCB3aGVuIHRoZSBiYXIgaGFzIG5vbmUgdG8gb2ZmZXI6IGEgcmVwb3J0IG5vdCB5ZXQgc2F2ZWQgaGFzIG5vXG4gIC8vIGlkIHRvIGtlZXAgdGhlbSB1bmRlciwgYW5kIGEgYmFyIHdpdGggbm8gcmVwb3J0LXdpZGUgZmlsdGVyIGhhcyBub3RoaW5nXG4gIC8vIGEgc2F2ZWQgZmlsdGVyIGhvbGRzLiBmcy1maWx0ZXIncyBvd24gU2F2ZWQgZmlsdGVycyBtZW51IGxpc3RzIHRoZW0sXG4gIC8vIHNhdmVzIHRoZSBiYXIncyB2YWx1ZXMgYXMgYSBuZXcgb25lIG9yIG92ZXIgdGhlIHBpY2tlZCBvbmUsIG9yZGVycyBhbmRcbiAgLy8gZGVsZXRlcyB0aGVtLiBXaGF0IGl0IHNhdmVzIGlzIGtlcHQgdG8gdGhlIHJlcG9ydC13aWRlIGZpbHRlcnNcbiAgLy8gKHNhdmVkRmlsdGVyVmFsdWVzKTogYSBwYWdlJ3Mgb3duIGZpbHRlcnMsIHRoZSBncmFpbiBhbmQgdGhlIG1hdGNoIGFyZVxuICAvLyBsZWZ0IG91dC4gVGhlIGxpc3QgaXMgcmVhZCBldmVyeSB0aW1lIHRoZSBiYXIgaXMgYnVpbHQ7IG9uZSB0aGF0IGNhbm5vdFxuICAvLyBiZSByZWFkIHNob3dzIGFzIGVtcHR5IHJhdGhlciB0aGFuIGtlZXBpbmcgdGhlIGJhciBmcm9tIGRyYXdpbmcuXG4gIHByaXZhdGUgX3NhdmVkRmlsdGVyc0NvbmZpZygpOiBJRmlsdGVyU2F2ZWRGaWx0ZXJzQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZXBvcnRJZCA9IHRoaXMucmVwb3J0KCk/LmlkID8/IG51bGw7XG5cbiAgICBpZiAoIXJlcG9ydElkIHx8ICFzYXZlZEZpbHRlckdyb3Vwcyh0aGlzLl9yZXBvcnRHcm91cHMoKSkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsb2FkOiAoKSA9PiB0aGlzLl9yZXBvcnREYXRhXG4gICAgICAgIC5zYXZlZEZpbHRlcnMocmVwb3J0SWQsIHsgY29udGV4dDogbmV3IEh0dHBDb250ZXh0KCkuc2V0KERpc3BsYXlBcGlFcnJvciwgZmFsc2UpIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoW10gYXMgUmVwb3J0U2F2ZWRGaWx0ZXJbXSkpLFxuICAgICAgICAgIG1hcCgoc2F2ZWRGaWx0ZXJzKSA9PiAoc2F2ZWRGaWx0ZXJzID8/IFtdKS5tYXAoKHNhdmVkRmlsdGVyKSA9PiB0aGlzLl9iYXJTYXZlZEZpbHRlcihzYXZlZEZpbHRlcikpKSxcbiAgICAgICAgKSxcbiAgICAgIHNhdmU6IChzYXZlZEZpbHRlcikgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gc2F2ZWRGaWx0ZXJWYWx1ZXMoc2F2ZWRGaWx0ZXIuZmlsdGVycywgdGhpcy5fc2F2ZWRGaWx0ZXJHcm91cHMoKSk7XG4gICAgICAgIGNvbnN0IHNhdmUkID0gc2F2ZWRGaWx0ZXIuaWRcbiAgICAgICAgICA/IHRoaXMuX3JlcG9ydERhdGEudXBkYXRlU2F2ZWRGaWx0ZXIocmVwb3J0SWQsIE51bWJlcihzYXZlZEZpbHRlci5pZCksIHtcbiAgICAgICAgICAgIC4uLihzYXZlZEZpbHRlci5uYW1lID8geyBuYW1lOiBzYXZlZEZpbHRlci5uYW1lIH0gOiB7fSksXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgOiB0aGlzLl9yZXBvcnREYXRhLmNyZWF0ZVNhdmVkRmlsdGVyKHJlcG9ydElkLCB7IG5hbWU6IHNhdmVkRmlsdGVyLm5hbWUgPz8gJycsIGZpbHRlcnMgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNhdmUkLnBpcGUobWFwKChzYXZlZCkgPT4gdGhpcy5fYmFyU2F2ZWRGaWx0ZXIoc2F2ZWQpKSk7XG4gICAgICB9LFxuICAgICAgb3JkZXI6IChzYXZlZEZpbHRlcnMpID0+IHRoaXMuX3JlcG9ydERhdGFcbiAgICAgICAgLnNhdmVTYXZlZEZpbHRlclBvc2l0aW9ucyhyZXBvcnRJZCwgc2F2ZWRGaWx0ZXJzLm1hcCgoc2F2ZWRGaWx0ZXIpID0+IE51bWJlcihzYXZlZEZpbHRlci5pZCkpKVxuICAgICAgICAucGlwZShtYXAoKG9yZGVyZWQpID0+IChvcmRlcmVkID8/IFtdKS5tYXAoKHNhdmVkRmlsdGVyKSA9PiB0aGlzLl9iYXJTYXZlZEZpbHRlcihzYXZlZEZpbHRlcikpKSksXG4gICAgICBkZWxldGU6IChzYXZlZEZpbHRlcikgPT4gdGhpcy5fcmVwb3J0RGF0YVxuICAgICAgICAuZGVsZXRlU2F2ZWRGaWx0ZXIocmVwb3J0SWQsIE51bWJlcihzYXZlZEZpbHRlci5pZCkpXG4gICAgICAgIC5waXBlKG1hcCgoKSA9PiBzYXZlZEZpbHRlcikpLFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgcmVwb3J0J3MgcmVwb3J0LXdpZGUgZmlsdGVyIGdyb3VwczogdGhlIG9uZXMgYSBzYXZlZCBmaWx0ZXIgaG9sZHMuXG4gIHByaXZhdGUgX3NhdmVkRmlsdGVyR3JvdXBzKCk6IFJlcG9ydEZpbHRlckdyb3VwW10ge1xuICAgIHJldHVybiBzYXZlZEZpbHRlckdyb3Vwcyh0aGlzLnJlcG9ydCgpPy5maWx0ZXJHcm91cHMpO1xuICB9XG5cbiAgLy8gQSBzYXZlZCBmaWx0ZXIgYXMgdGhlIGJhcidzIG1lbnUgaG9sZHMgaXQuIEl0cyB2YWx1ZXMgYXJlIGtlcHQgdG8gdGhlXG4gIC8vIHJlcG9ydC13aWRlIGZpbHRlcnMgdGhlIHJlcG9ydCBoYXMgbm93IChhIGtleSBpdCBubyBsb25nZXIgaGFzLCBvciBhXG4gIC8vIHZhbHVlIGl0cyBmaWx0ZXIgY2FuIG5vIGxvbmdlciB0YWtlLCBpcyBkcm9wcGVkIHJhdGhlciB0aGFuIGFwcGxpZWQpLCBhbmRcbiAgLy8gZWFjaCByZWFkIG9mIHRoZW0gaGFuZHMgb3V0IGEgY29weSwgc28gbm90aGluZyB0aGUgYmFyIGRvZXMgdG8gdGhlIHZhbHVlc1xuICAvLyBpdCBzZXQgY2hhbmdlcyB0aGUgc2F2ZWQgZmlsdGVyLiBBIHJlYWQgYWxzbyBub3RlcyB0aGUgYmFyJ3MgdmFsdWVzXG4gIC8vIChfa2VlcEJhck9uUGljayk6IHBpY2tpbmcgYSBzYXZlZCBmaWx0ZXIgcmVhZHMgaXRzIHZhbHVlcyBhbmQgc2V0cyB0aGVcbiAgLy8gYmFyIGZyb20gdGhlbSBpbiBvbmUgZ28sIGFuZCB0aGUgaXRlbXMgaXQgZG9lcyBub3QgaG9sZCBhcmUgcHV0IGJhY2suXG4gIHByaXZhdGUgX2JhclNhdmVkRmlsdGVyKHNhdmVkRmlsdGVyOiBSZXBvcnRTYXZlZEZpbHRlcik6IElGaWx0ZXJTYXZlZEZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVycyA9IHNhdmVkRmlsdGVyVmFsdWVzKHNhdmVkRmlsdGVyLmZpbHRlcnMsIHRoaXMuX3NhdmVkRmlsdGVyR3JvdXBzKCkpO1xuICAgIGNvbnN0IGtlZXBCYXIgPSAoKSA9PiB0aGlzLl9rZWVwQmFyT25QaWNrKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNhdmVkRmlsdGVyLmlkLFxuICAgICAgbmFtZTogc2F2ZWRGaWx0ZXIubmFtZSxcbiAgICAgIGdldCBmaWx0ZXJzKCkge1xuICAgICAgICBrZWVwQmFyKCk7XG5cbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmlsdGVycykpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gTm90ZXMgdGhlIGJhcidzIHZhbHVlcyBmb3IgYSBwaWNrIG9mIGEgc2F2ZWQgZmlsdGVyIChfYmFyVmFsdWVzQXRQaWNrKS5cbiAgLy8gZnMtZmlsdGVyIHNldHMgdGhlIGJhciBmcm9tIHRoZSBzYXZlZCBmaWx0ZXIncyB2YWx1ZXMgaW4gdGhlIHNhbWUgdGFza1xuICAvLyBhcyBpdCByZWFkcyB0aGVtLCBzbyB0aGUgbm90ZSBpcyBkcm9wcGVkIG9uY2UgdGhpcyB0YXNrIGlzIGRvbmU6IGFueVxuICAvLyBvdGhlciByZWFkIG9mIGEgc2F2ZWQgZmlsdGVyJ3MgdmFsdWVzIChpdHMgcm93IGluIFZpZXcgYWxsLCBhIHNhdmUpIHNldHNcbiAgLy8gbm90aGluZy5cbiAgcHJpdmF0ZSBfa2VlcEJhck9uUGljaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3JlcG9ydEJhcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2JhclZhbHVlc0F0UGljayA9IHsgLi4udGhpcy5fcmVwb3J0QmFyLnZhbHVlcyB9O1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMuX2JhclZhbHVlc0F0UGljayA9IG51bGwpO1xuICB9XG5cbiAgLy8gVGhlIGJhcidzIGl0ZW1zLCBlYWNoIG9uZSBhIHNhdmVkIGZpbHRlciBkb2VzIG5vdCBob2xkICh0aGUgZ3JvdXAtYnlcbiAgLy8gZ3JhaW4sIHRoZSBtYXRjaCwgYSBwYWdlJ3Mgb3duIGZpbHRlcnMpIHNldCBiYWNrIHRvIGl0cyB2YWx1ZSB3aGVuIGEgcGlja1xuICAvLyBvZiBhIHNhdmVkIGZpbHRlciBzZXRzIGl0LiBmcy1maWx0ZXIgc2V0cyBldmVyeSBpdGVtIGZyb20gYSBzYXZlZCBmaWx0ZXJcbiAgLy8gYW5kIGNhbGxzIGVhY2ggb25lJ3MgY2hhbmdlIGJlZm9yZSBpdCByZXBvcnRzIHRoZSBiYXIncyBjaGFuZ2UsIHNvIHRoZVxuICAvLyBjaGFuZ2UgdGhlIGJhciByZXBvcnRzIGNhcnJpZXMgdGhlc2UgaXRlbXMgYXMgdGhleSB3ZXJlOiB0aGUgcGljayBtb3Zlc1xuICAvLyB0aGUgcmVwb3J0LXdpZGUgZmlsdGVycyBvbmx5LCBvbiBldmVyeSBwYWdlLCB0aHJvdWdoIHRoZSBzYW1lIGNoYW5nZSBhc1xuICAvLyBhIHZpZXdlcidzIG93biBlZGl0IChfYmFyQ2hhbmdlZCkuIE9uIGFueSBvdGhlciBjaGFuZ2UgYW4gaXRlbSdzIGNoYW5nZVxuICAvLyBjb21lcyBhZnRlciB0aGUgYmFyJ3MsIHdpdGggbm8gcGljayBub3RlZCwgYW5kIGRvZXMgbm90aGluZy5cbiAgcHJpdmF0ZSBfa2VlcE9uUGljayhpdGVtczogSUZpbHRlckNvbmZpZ0l0ZW1bXSk6IElGaWx0ZXJDb25maWdJdGVtW10ge1xuICAgIGNvbnN0IGhlbGQgPSBuZXcgU2V0KHRoaXMuX3NhdmVkRmlsdGVyR3JvdXBzKCkubWFwKChncm91cCkgPT4gZ3JvdXBJdGVtTmFtZShncm91cCkpKTtcblxuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0pID0+IChoZWxkLmhhcyhpdGVtLm5hbWUpXG4gICAgICA/IGl0ZW1cbiAgICAgIDogeyAuLi5pdGVtLCBjaGFuZ2U6IChiYXJJdGVtOiBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT4pID0+IHRoaXMuX2tlZXBJdGVtT25QaWNrKGJhckl0ZW0pIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX2tlZXBJdGVtT25QaWNrKGl0ZW06IEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9iYXJWYWx1ZXNBdFBpY2spIHtcbiAgICAgIGl0ZW0uc2V0VmFsdWUodGhpcy5fYmFyVmFsdWVzQXRQaWNrW2l0ZW0ubmFtZV0sIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgYmFyJ3MgdmFsdWVzIGludG8gdGhlIHN0YXRlOiBldmVyeSBncm91cCBpdCBzaG93cywgdGhlIGdyYWluIGFuZCxcbiAgLy8gd2hlbiB0aGUgYmFyIGhhcyB0aGUgY29udHJvbCwgdGhlIG1hdGNoLlxuICBwcml2YXRlIF9iYXJDaGFuZ2VkKHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgaGFzTWF0Y2g6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHsgZ3JvdXBJZCwgdmFsdWUgfSBvZiBncm91cFZhbHVlc0Zyb21RdWVyeShxdWVyeSwgdGhpcy5fcmVwb3J0R3JvdXBzKCkpKSB7XG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5zZXRWYWx1ZShncm91cElkLCB2YWx1ZSk7XG4gICAgfVxuICAgIC8vIE5vdCBhIGZpbHRlciBncm91cCDigJQgdGhlIGdyYWluIGlzIHJlYWQgc3RyYWlnaHQgb2ZmIHRoZSBxdWVyeS5cbiAgICB0aGlzLl9maWx0ZXJTdGF0ZS5zZXRGcmVxdWVuY3koKHF1ZXJ5W0dST1VQX0JZX0lURU1dIGFzIENoYXJ0R3JhbnVsYXJpdHkpIHx8IG51bGwpO1xuICAgIC8vIE5vciBpcyB0aGUgbWF0Y2g7IGEgYmFyIHdpdGhvdXQgdGhlIGNvbnRyb2wgbGVhdmVzIGl0IGFzIGl0IGlzLlxuICAgIGlmIChoYXNNYXRjaCkge1xuICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuc2V0TWF0Y2gobWF0Y2hGcm9tUXVlcnkocXVlcnkpKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbCBhcyBhbiBmcy1maWx0ZXIgaXRlbSwgb3IgbnVsbCB3aGVuIHRoZSByZXBvcnRcbiAgLy8gaGFzIG5vbmUgdG8gc2hvdy4gU2VlZGVkIGZyb20gdGhlIHNlc3Npb24gc3RhdGUgc28gdGhlIGdyYWluIHRoZSB2aWV3ZXJcbiAgLy8gcGlja2VkIHN1cnZpdmVzIHRoZSByZXBvcnQgYmVpbmcgcmUtZmV0Y2hlZCBhZnRlciBhIGNoYXQgZWRpdC5cbiAgcHJpdmF0ZSBfZ3JvdXBCeUl0ZW0oKTogSUZpbHRlckNvbmZpZ0l0ZW0gfCBudWxsIHtcbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLnJlcG9ydCgpO1xuXG4gICAgcmV0dXJuIHJlcG9ydFxuICAgICAgPyBncm91cEJ5RmlsdGVySXRlbShyZXBvcnQsIHRoaXMuX2ZpbHRlclN0YXRlLmZyZXF1ZW5jeSgpKVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgLy8gVGhlIGJhcidzIE1hdGNoIGNvbnRyb2wsIHNlZWRlZCB3aXRoIHRoZSBtYXRjaCBvbiBzY3JlZW4sIG9yIG51bGwgd2hlblxuICAvLyB0aGUgYmFyIGhvbGRzIGZld2VyIHRoYW4gdHdvIGdyb3VwcyB0aGF0IGNvbWJpbmUuXG4gIHByaXZhdGUgX21hdGNoSXRlbSgpOiBJRmlsdGVyQ29uZmlnSXRlbSB8IG51bGwge1xuICAgIHJldHVybiBtYXRjaEZpbHRlckl0ZW0odGhpcy5yZXBvcnQoKSwgdGhpcy5fcmVwb3J0R3JvdXBzKCksIHRoaXMuY2hhdFBhZ2VJZCgpLCB0aGlzLl9maWx0ZXJTdGF0ZS5tYXRjaCgpKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZzLWFpLXJlcG9ydCBmcy1jb2x1bW5cIj5cblxuICA8ZGl2IGNsYXNzPVwiZnMtYWktcmVwb3J0X19oZWFkZXIgZnMtcm93LmFsaWduLWNlbnRlclwiPlxuICAgIDxoMiBjbGFzcz1cImZzLWFpLXJlcG9ydF9fdGl0bGUgZnMtZmxleFwiPnt7IHJlcG9ydCgpPy5uYW1lIH19PC9oMj5cblxuICAgIEBpZiAocmVwb3J0KCkpIHtcbiAgICAgIDwhLS0gUmVwb3J0LWxldmVsIGZpbHRlcnMsIGlubGluZSB3aXRoIHRoZSB0b29sYmFyIGFjdGlvbnMsIHdpdGggdGhlXG4gICAgICAgICAgIHJlcG9ydCdzIHNhdmVkIGZpbHRlcnMgaW4gZnMtZmlsdGVyJ3Mgb3duIFNhdmVkIGZpbHRlcnMgbWVudS5cbiAgICAgICAgICAgZnMtZmlsdGVyIHJlYWRzIGl0cyBjb25maWcgb25jZSBhdCBpbml0LCBzbyBpdCdzIGtleWVkIG9uIHRoZVxuICAgICAgICAgICBmaWx0ZXIgc2lnbmF0dXJlOiB3aGVuIHRoZSByZXBvcnQtbGV2ZWwgZmlsdGVyIHNldCBjaGFuZ2VzIHRoZVxuICAgICAgICAgICBibG9jayBpcyByZWNyZWF0ZWQgYW5kIHJlLXJlYWRzIHRoZSByZWJ1aWx0IGNvbmZpZy4gLS0+XG4gICAgICBAaWYgKHJlcG9ydEhhc0ZpbHRlcnMoKSkge1xuICAgICAgICBAZm9yIChrZXkgb2YgW3JlcG9ydEZpbHRlcktleSgpXTsgdHJhY2sga2V5KSB7XG4gICAgICAgICAgPGZzLWZpbHRlclxuICAgICAgICAgICAgICBjbGFzcz1cImZzLWFpLXJlcG9ydF9fZmlsdGVyc1wiXG4gICAgICAgICAgICAgIFtjb25maWddPVwicmVwb3J0RmlsdGVyQ29uZmlnKClcIj5cbiAgICAgICAgICA8L2ZzLWZpbHRlcj5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA8IS0tIFdoYXQgbGF5b3V0IGVkaXRpbmcgY2FuIGFkZCBvciBzd2l0Y2ggdG8sIGFuZCB0aGUgd2F5IG91dCBvZiBpdC5cbiAgICAgICAgICAgT25lIHN0eWxlIGZvciBhbGwgdGhyZWUg4oCUIG91dGxpbmVkLCBpY29uIGFuZCB0ZXh0LiBcIkhlYWRlciAmIGZvb3RlclwiXG4gICAgICAgICAgIGlzIGEgdG9nZ2xlOiBpdCBrZWVwcyBpdHMgbGFiZWwgYW5kIHR1cm5zIGdyYXkgd2hpbGUgaXQgaXMgb24uIC0tPlxuICAgICAgQGlmIChlZGl0TW9kZSgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmcy1haS1yZXBvcnRfX2VkaXQtdG9vbHMgZnMtcm93LmFsaWduLWNlbnRlci5nYXAteHNcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFkZCBhIGJsb2NrIG9mIHRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkVGV4dCgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+dGl0bGU8L21hdC1pY29uPlxuICAgICAgICAgICAgQWRkIHRleHRcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmcy1haS1yZXBvcnRfX21hc3RlclwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNNYXN0ZXJNb2RlXCJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaXNNYXN0ZXJNb2RlID8gJ0JhY2sgdG8gZWRpdGluZyB0aGlzIHBhZ2UnIDogJ0VkaXQgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHNob3duIG9uIGV2ZXJ5IHBhZ2UnXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1hc3Rlck1vZGUoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPndlYl9hc3NldDwvbWF0LWljb24+XG4gICAgICAgICAgICBIZWFkZXIgJiBmb290ZXJcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXRNb2RlKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jaGVjazwvbWF0LWljb24+XG4gICAgICAgICAgICBEb25lIGVkaXRpbmdcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gT25lIGljb24gZm9yIGJvdGggc3RhdGVzOiBpdCByZWFkcyBhcyBwcmVzc2VkIHdoaWxlIGVkaXRpbmcgcmF0aGVyXG4gICAgICAgICAgIHRoYW4gc3dhcHBpbmcgdG8gc29tZXRoaW5nIGVsc2UuIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiZnMtYWktcmVwb3J0X190b2dnbGVcIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiZWRpdE1vZGUoKVwiXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiZWRpdE1vZGUoKSA/ICdEb25lIGVkaXRpbmcnIDogJ0VkaXQgbGF5b3V0J1wiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXRNb2RlKClcIj5cbiAgICAgICAgPG1hdC1pY29uPmRhc2hib2FyZF9jdXN0b21pemU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBtYXRUb29sdGlwPVwiRXhwb3J0XCJcbiAgICAgICAgICBbZnNNZW51VHJpZ2dlckZvcl09XCJleHBvcnRNZW51XCI+XG4gICAgICAgIDxtYXQtaWNvbj5kb3dubG9hZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxmcy1tZW51ICNleHBvcnRNZW51PlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydFBvd2VycG9pbnQoKVwiPlxuICAgICAgICAgIEV4cG9ydCBQb3dlclBvaW50XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0UGRmKClcIj5cbiAgICAgICAgICBFeHBvcnQgUERGXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0RGF0YSgpXCI+XG4gICAgICAgICAgRXhwb3J0IFJhdyBEYXRhXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIEBpZiAoKHJlcG9ydCgpPy5wYWdlcz8ubGVuZ3RoID8/IDApID4gMSkge1xuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydERhdGEodHJ1ZSlcIj5cbiAgICAgICAgICAgIEV4cG9ydCBSYXcgRGF0YSAoVGhpcyBQYWdlKVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgIChjbGljayk9XCJleHBvcnREYXRhKGZhbHNlLCAneGxzeCcpXCI+XG4gICAgICAgICAgRXhwb3J0IEV4Y2VsXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIEBpZiAoKHJlcG9ydCgpPy5wYWdlcz8ubGVuZ3RoID8/IDApID4gMSkge1xuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydERhdGEodHJ1ZSwgJ3hsc3gnKVwiPlxuICAgICAgICAgICAgRXhwb3J0IEV4Y2VsIChUaGlzIFBhZ2UpXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgICAgPC9mcy1tZW51PlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgbWF0VG9vbHRpcD1cIlJlcG9ydCBzZXR0aW5nc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInJlcG9ydFNldHRpbmdzKClcIj5cbiAgICAgICAgPG1hdC1pY29uPnNldHRpbmdzPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgICAgI3NwbGl0XG4gICAgICBjbGFzcz1cImZzLWFpLXJlcG9ydF9fc3BsaXQgZnMtcm93LmFsaWduLXN0YXJ0XCI+XG4gICAgQGlmIChjaGF0RW5hYmxlZCgpKSB7XG4gICAgICA8ZnMtYWktY2hhdFxuICAgICAgICAgICNjaGF0UGFuZWxcbiAgICAgICAgICBjbGFzcz1cImNoYXRcIlxuICAgICAgICAgIFtiYXNlUGF0aF09XCJjaGF0QmFzZVBhdGgoKVwiXG4gICAgICAgICAgW3JlYWR5XT1cImNoYXRQYWdlSWQoKSAhPT0gbnVsbFwiXG4gICAgICAgICAgKHJlc3BvbnNlKT1cIm9uQ2hhdFJlc3BvbnNlKCRldmVudClcIj5cbiAgICAgIDwvZnMtYWktY2hhdD5cblxuICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicmVzaXplclwiXG4gICAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uUmVzaXplU3RhcnQoJGV2ZW50KVwiPlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cInZpZXdlciBmcy1mbGV4IGZzLWNvbHVtblwiPlxuICAgICAgQGlmIChyZXBvcnQoKSkge1xuICAgICAgICA8YXBwLXJlcG9ydC1jYW52YXNcbiAgICAgICAgICAgIFtyZXBvcnRdPVwicmVwb3J0KClcIlxuICAgICAgICAgICAgW2VkaXRNb2RlXT1cImVkaXRNb2RlKClcIlxuICAgICAgICAgICAgW3BhZ2VJZF09XCJwYWdlSWQoKVwiXG4gICAgICAgICAgICAoY29tcG9uZW50U2V0dGluZ3MpPVwiY29tcG9uZW50U2V0dGluZ3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAocmVwb3J0Q2hhbmdlZCk9XCJvbkNhbnZhc1JlcG9ydENoYW5nZWQoKVwiXG4gICAgICAgICAgICAocGFnZUNoYW5nZWQpPVwib25DYW52YXNQYWdlQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgIDwvYXBwLXJlcG9ydC1jYW52YXM+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|