@cqa-lib/cqa-ui 1.1.537 → 1.1.539
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/esm2020/lib/table/dynamic-table/dynamic-table.component.mjs +1 -2
- package/esm2020/lib/templates/modular-table-template/folder-sidebar/folder-sidebar.component.mjs +3 -3
- package/esm2020/lib/templates/modular-table-template/modular-table-template.component.mjs +109 -10
- package/esm2020/lib/templates/modular-table-template/modular-table-template.models.mjs +10 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +120 -12
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +119 -12
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/templates/modular-table-template/modular-table-template.component.d.ts +9 -0
- package/lib/templates/modular-table-template/modular-table-template.models.d.ts +17 -0
- package/package.json +1 -1
|
@@ -449,7 +449,6 @@ export class DynamicTableComponent {
|
|
|
449
449
|
? `max(${c.minWidth}px, ${dynamicWidth})`
|
|
450
450
|
: dynamicWidth;
|
|
451
451
|
});
|
|
452
|
-
console.log('computedColumnWidths', this.computedColumnWidths);
|
|
453
452
|
if (this.gridTemplateColumns) {
|
|
454
453
|
this.computedGridTemplate = this.gridTemplateColumns;
|
|
455
454
|
}
|
|
@@ -643,4 +642,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
643
642
|
type: ContentChild,
|
|
644
643
|
args: ['emptyTableTpl', { read: TemplateRef }]
|
|
645
644
|
}] } });
|
|
646
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFhLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUEyRyx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdoUSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7QUFLeEcsTUFBTSw0QkFBNEIsR0FBRzs7Ozs7Ozs7O0NBU3BDLENBQUM7QUFnQ0YsTUFBTSxPQUFPLHFCQUFxQjtJQWtGaEMsWUFDVSxTQUF1QixFQUN2QixHQUFzQjtRQUR0QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBbkZ2QixTQUFJLEdBQVUsRUFBRSxDQUFDO1FBQ2pCLFlBQU8sR0FBeUIsRUFBRSxDQUFDO1FBUzVDLDhEQUE4RDtRQUNyRCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUl6QyxzRkFBc0Y7UUFDN0Usb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFPekMsc0VBQXNFO1FBQzVELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBOEUsQ0FBQztRQVF0SDs7OztXQUlHO1FBQ00scUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQzNDLHdDQUF3QztRQUMvQix5QkFBb0IsR0FBVyxpQkFBaUIsQ0FBQztRQUMxRDs7OztXQUlHO1FBQ08sZUFBVSxHQUFHLElBQUksWUFBWSxFQUF1RSxDQUFDO1FBRS9H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QUE4QjtnQkFHTyxhQUFhO3NCQUFsRSxZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLCBJbnB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgQ29tcG9uZW50UmVmLCBUeXBlLCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdG9yUmVmLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuaW1wb3J0IHsgRG5kRHJvcEV2ZW50IH0gZnJvbSBcIm5neC1kcmFnLWRyb3BcIjtcbmltcG9ydCB7IER5bmFtaWNDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIER5bmFtaWNIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gXCIuL2R5bmFtaWMtY2VsbC5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IENvbXBvbmVudFJlbmRlckNvbmZpZyB9IGZyb20gXCIuL2NvbXBvbmVudC1yZW5kZXItY29uZmlnLmludGVyZmFjZVwiO1xuXG5leHBvcnQgeyBDb21wb25lbnRSZW5kZXJDb25maWcgfSBmcm9tIFwiLi9jb21wb25lbnQtcmVuZGVyLWNvbmZpZy5pbnRlcmZhY2VcIjtcblxuY29uc3QgRFlOQU1JQ19UQUJMRV9SRU9SREVSX1NUWUxFUyA9IGBcbiAgLnJlb3JkZXItaGFuZGxlLWNlbGwgeyB3aWR0aDogNDRweDsgfVxuICAucmVvcmRlci1oYW5kbGUtaWNvbiB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgY29sb3I6ICM2QjcyODA7IH1cbiAgLmNxYS1yb3ctZHJhZ2dhYmxlIHsgY3Vyc29yOiBncmFiOyB9XG4gIC5jcWEtcm93LWRyYWdnYWJsZTphY3RpdmUgeyBjdXJzb3I6IGdyYWJiaW5nOyB9XG4gIC5jcWEtcm93LWRyYWdnYWJsZS5kbmREcmFnZ2luZyB7IG9wYWNpdHk6IDAuNTsgfVxuICAuY3FhLXJvdy1kcmFnZ2FibGUuZG5kRHJhZ2dpbmdTb3VyY2UgeyBvcGFjaXR5OiAwLjM7IH1cbiAgdHIuY3FhLXJvdy1kcm9wLWFib3ZlID4gdGQgeyBib3gtc2hhZG93OiBpbnNldCAwIDNweCAwIDAgIzNGNDNFRTsgfVxuICB0ci5jcWEtcm93LWRyb3AtYmVsb3cgPiB0ZCB7IGJveC1zaGFkb3c6IGluc2V0IDAgLTNweCAwIDAgIzNGNDNFRTsgfVxuYDtcblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljVGFibGVDb2x1bW4ge1xuICBmaWVsZElkOiBzdHJpbmc7XG4gIGZpZWxkTmFtZT86IHN0cmluZztcbiAgZmllbGRWYWx1ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSByZW5kZXJlciBpbnZva2VkIHdoZW4gbm8gcHJvamVjdGVkIGNlbGwgdGVtcGxhdGUgaXMgcHJvdmlkZWQuXG4gICAqIFJldHVybnMgdGhlIHN0cmluZy9udW1iZXIvSFRNTCBzdHJpbmcvQ29tcG9uZW50IGNsYXNzL0NvbXBvbmVudFJlbmRlckNvbmZpZyB0byBkaXNwbGF5IGZvciB0aGUgZ2l2ZW4gcm93LlxuICAgKiBIVE1MIHN0cmluZ3Mgd2lsbCBiZSBzYW5pdGl6ZWQgYW5kIHJlbmRlcmVkIHNhZmVseS5cbiAgICogQ29tcG9uZW50IGNsYXNzZXMgd2lsbCBiZSBkeW5hbWljYWxseSBpbnN0YW50aWF0ZWQuXG4gICAqL1xuICByZW5kZXI/OiAocm93OiBhbnksIGNvbHVtbjogRHluYW1pY1RhYmxlQ29sdW1uKSA9PiBzdHJpbmcgfCBudW1iZXIgfCBTYWZlSHRtbCB8IFR5cGU8YW55PiB8IENvbXBvbmVudFJlbmRlckNvbmZpZztcbiAgaXNEZWZhdWx0PzogYm9vbGVhbjtcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBpc1Nob3c/OiBib29sZWFuO1xuICAvLyBOZXcgY29uZmlndXJhdGlvbiBmaWVsZHMgdG8gdW5pZnkgbGF5b3V0IGxvZ2ljXG4gIHdlaWdodD86IG51bWJlcjsgLy8gcmVsYXRpdmUgd2VpZ2h0IGZvciBkeW5hbWljIHNoYXJlXG4gIGZpeGVkUHg/OiBudW1iZXI7IC8vIGZpeGVkIHdpZHRoIGluIHB4IChlLmcuIGNoZWNrYm94L2FjdGlvbnMpXG4gIC8qKiBNaW5pbXVtIHdpZHRoIGluIHB4IOKAlCBhcHBsaWVkIHRvIGJvdGggdGhlIGhlYWRlciBjZWxsIGFuZCBldmVyeSBib2R5IGNlbGwgb2YgdGhpcyBjb2x1bW4uICovXG4gIG1pbldpZHRoPzogbnVtYmVyO1xuICByZXNwb25zaXZlPzogeyB4cz86IGJvb2xlYW47IHNtPzogYm9vbGVhbjsgbWQ/OiBib29sZWFuIH07IC8vIGhpZGUgYXQgc3BlY2lmaWMgYnJlYWtwb2ludHNcbiAgYWxpZ24/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHAtZHluYW1pYy10YWJsZVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2R5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVzOiBbRFlOQU1JQ19UQUJMRV9SRU9SREVSX1NUWUxFU10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBkYXRhOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zOiBEeW5hbWljVGFibGVDb2x1bW5bXSA9IFtdO1xuICAvKipcbiAgICogT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QgdXNlZCB3aGVuIG5vIGN1c3RvbSBlbXB0eSB0ZW1wbGF0ZSBpcyBwcm92aWRlZC5cbiAgICovXG4gIEBJbnB1dCgpIGVtcHR5U3RhdGU/OiB7IHRpdGxlPzogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZzsgaW1hZ2VVcmw/OiBzdHJpbmc7IGFjdGlvbnM/OiBhbnlbXSB9O1xuICAvLyBPcHRpb25hbCBvdmVycmlkZTsgaWYgb21pdHRlZCB3ZSBjb21wdXRlIGZyb20gY29sdW1uc1xuICBASW5wdXQoKSBncmlkVGVtcGxhdGVDb2x1bW5zPzogc3RyaW5nO1xuICAvLyBCcmVha3BvaW50LWF3YXJlIHNpemluZzsgcHJvdmlkZSBmcm9tIHBhcmVudCB0byBhdm9pZCBleHRyYSBsaXN0ZW5lcnNcbiAgQElucHV0KCkgc2NyZWVuV2lkdGg/OiBudW1iZXI7XG4gIC8vIEVuYWJsZSBidWlsdC1pbiBzZWxlY3QtYWxsIGJlaGF2aW9yIGZvciBhICdjaGVja2JveCcgY29sdW1uXG4gIEBJbnB1dCgpIGVuYWJsZVNlbGVjdEFsbDogYm9vbGVhbiA9IHRydWU7XG4gIC8vIE9wdGlvbmFsIHByZWRpY2F0ZSB0byBjb250cm9sIHdoZXRoZXIgYSByb3cgaXMgc2VsZWN0YWJsZS5cbiAgLy8gSWYgbm90IHByb3ZpZGVkLCBhbGwgcm93cyBhcmUgc2VsZWN0YWJsZSAoYmFja3dhcmQgY29tcGF0aWJsZSBiZWhhdmlvcikuXG4gIEBJbnB1dCgpIHJvd1NlbGVjdGFibGU/OiAocm93OiBhbnkpID0+IGJvb2xlYW47XG4gIC8vIEVuYWJsZSBzaW1wbGUgY2xpZW50LXNpZGUgc29ydGluZyB3aGVuIGNsaWNraW5nIHNvcnRhYmxlIGhlYWRlcnMgKG5vIGN1c3RvbSBoZWFkZXIpXG4gIEBJbnB1dCgpIGVuYWJsZUxvY2FsU29ydDogYm9vbGVhbiA9IHRydWU7XG4gIC8vIEJhY2t3YXJkLWNvbXBhdCBsb2FkaW5nIGZsYWcgKGFwcGxpZXMgdG8gYm90aCBsb2FkZXJzIGlmIHNwZWNpZmljIGZsYWdzIG5vdCBwcm92aWRlZClcbiAgXG4gIC8vIE5ldzogY29udHJvbHMgdGhlIGZ1bGwgdGFibGUgb3ZlcmxheSBsb2FkZXJcbiAgQElucHV0KCkgaXNUYWJsZUxvYWRpbmc/OiBib29sZWFuO1xuICAvLyBOZXc6IGNvbnRyb2xzIHRoZSBpbmxpbmUgZGF0YSBsb2FkZXIgYWJvdmUgdGhlIHRhYmxlXG4gIEBJbnB1dCgpIGlzVGFibGVEYXRhTG9hZGluZz86IGJvb2xlYW47XG4gIC8vIEVtaXQgc29ydCBjaGFuZ2VzIHNvIHBhcmVudCBjYW4gcGVyZm9ybSBzZXJ2ZXItc2lkZSBzb3J0IGlmIGRlc2lyZWRcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZmllbGRJZDogc3RyaW5nOyBmaWVsZFZhbHVlPzogc3RyaW5nOyBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgbnVsbCB9PigpO1xuXG4gIC8vIE9wdGlvbmFsIGdldHRlciBmb3IgSlNPTiBwYXRoIHBlciBjZWxsLiBXaGVuIHByb3ZpZGVkLCBkb3VibGUtY2xpY2tpbmcgYSBjZWxsIGNvcGllcyB0aGUgcGF0aC5cbiAgQElucHV0KCkgY2VsbEpzb25QYXRoR2V0dGVyPzogKHJvd0luZGV4OiBudW1iZXIsIGNvbElkOiBzdHJpbmcsIHJvdzogYW55KSA9PiBzdHJpbmc7XG5cbiAgLy8gT3B0aW9uYWwgaGFuZGxlciBjYWxsZWQgd2hlbiBhIEpTT04gcGF0aCBpcyBjb3BpZWQgZnJvbSBhIHRhYmxlIGNlbGxcbiAgQElucHV0KCkgb25Kc29uUGF0aENvcGllZEhhbmRsZXI/OiAoZXZlbnQ6IHsgcGF0aDogc3RyaW5nOyBzb3VyY2U6IHN0cmluZyB9KSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHJlbmRlcnMgYSBkcmFnLWhhbmRsZSBjb2x1bW4gYXMgdGhlIGxlZnRtb3N0IGNlbGwgYW5kIGVuYWJsZXNcbiAgICogcm93IGRyYWctYW5kLWRyb3AgcmVvcmRlcmluZyB2aWEgbmd4LWRyYWctZHJvcC4gT2ZmIGJ5IGRlZmF1bHQgc28gZXhpc3RpbmdcbiAgICogY29uc3VtZXJzIGFyZSB1bmFmZmVjdGVkLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlUm93UmVvcmRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogVG9vbHRpcCBmb3IgdGhlIGRyYWcgaGFuZGxlIGljb24uICovXG4gIEBJbnB1dCgpIHJlb3JkZXJIYW5kbGVUb29sdGlwOiBzdHJpbmcgPSAnRHJhZyB0byByZW9yZGVyJztcbiAgLyoqXG4gICAqIEVtaXR0ZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJvdyBkcm9wLiBgb3JkZXJlZERhdGFgIGlzIGEgZnJlc2hseSBhbGxvY2F0ZWRcbiAgICogYXJyYXkgcmVmbGVjdGluZyB0aGUgbmV3IG9yZGVyIOKAlCBwYXJlbnRzIHNob3VsZCBhc3NpZ24gaXQgYmFjayB0byBgW2RhdGFdYFxuICAgKiByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGluLXBsYWNlIG11dGF0aW9uLlxuICAgKi9cbiAgQE91dHB1dCgpIHJvd1Jlb3JkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcHJldmlvdXNJbmRleDogbnVtYmVyOyBjdXJyZW50SW5kZXg6IG51bWJlcjsgb3JkZXJlZERhdGE6IGFueVtdIH0+KCk7XG5cbiAgLyoqIEluZGV4IG9mIHRoZSByb3cgdGhlIGN1cnNvciBpcyBjdXJyZW50bHkgaG92ZXJpbmcgZHVyaW5nIGEgcmVvcmRlciBkcmFnLiAqL1xuICBkcm9wSG92ZXJJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBXaGV0aGVyIHRoZSBjdXJzb3IgaXMgaW4gdGhlIHRvcCBvciBib3R0b20gaGFsZiBvZiB0aGUgaG92ZXJlZCByb3cuICovXG4gIGRyb3BQb3NpdGlvbjogJ2Fib3ZlJyB8ICdiZWxvdycgfCBudWxsID0gbnVsbDtcbiAgLyoqIFRoZSByb3cgY3VycmVudGx5IGJlaW5nIGRyYWdnZWQg4oCUIHVzZWQgdG8gc3VwcHJlc3MgdGhlIGluZGljYXRvciBvbiB0aGUgc291cmNlIHJvdy4gKi9cbiAgcHJpdmF0ZSBkcmFnZ2VkUm93OiBhbnkgPSBudWxsO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oRHluYW1pY0NlbGxUZW1wbGF0ZURpcmVjdGl2ZSkgY2VsbFRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxEeW5hbWljQ2VsbFRlbXBsYXRlRGlyZWN0aXZlPjtcbiAgQENvbnRlbnRDaGlsZHJlbihEeW5hbWljSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpIGhlYWRlclRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxEeW5hbWljSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU+O1xuICAvLyBBbGxvdyBjb25zdW1lcnMgdG8gcHJvamVjdCBhIGN1c3RvbSBlbXB0eS1zdGF0ZSB0ZW1wbGF0ZSB1c2luZyBhIHRlbXBsYXRlIHJlZiBuYW1lXG4gIC8vIGUuZy4gPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlVHBsPkN1c3RvbSBlbXB0eSBVSTwvbmctdGVtcGxhdGU+XG4gIEBDb250ZW50Q2hpbGQoJ2VtcHR5VGFibGVUcGwnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGVtcHR5VGFibGVUcGw/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vIE1hcCB0byBzdG9yZSBjb21wb25lbnQgcmVmZXJlbmNlcyBmb3IgY2xlYW51cDogcm93SW5kZXhfY29sSWQgLT4gQ29tcG9uZW50UmVmXG4gIHByaXZhdGUgY29tcG9uZW50UmVmcyA9IG5ldyBNYXA8c3RyaW5nLCBDb21wb25lbnRSZWY8YW55Pj4oKTtcblxuICAvLyBDYWNoZXMgZm9yIGV4cGVuc2l2ZSBnZXR0ZXJzXG4gIHZpc2libGVDb2x1bW5zOiBEeW5hbWljVGFibGVDb2x1bW5bXSA9IFtdO1xuICBjb21wdXRlZERhdGE6IGFueVtdID0gW107XG4gIGNvbXB1dGVkR3JpZFRlbXBsYXRlOiBzdHJpbmcgPSAnJztcbiAgY29tcHV0ZWRDb2x1bW5XaWR0aHM6IHN0cmluZ1tdID0gW107XG4gIC8qKlxuICAgKiBIYXJkIGZsb29yIG9uIHRoZSBgPHRhYmxlPmAgd2lkdGggPSBzdW0gb2YgZXZlcnkgdmlzaWJsZSBjb2x1bW4ncyBtaW5pbXVtIChmaXhlZFxuICAgKiB3aWR0aHMgKyBkeW5hbWljIGNvbHVtbnMnIGBtaW5XaWR0aGApLiBXaXRoIGB0YWJsZS1sYXlvdXQ6IGZpeGVkOyB3aWR0aDogMTAwJTtgIHNldFxuICAgKiBieSBjb25zdW1lcnMsIGA8Y29sPmAgd2lkdGhzIGJlY29tZSBhZHZpc29yeSBvbmNlIHRoZSBjb250YWluZXIgaXMgbmFycm93ZXIgdGhhblxuICAgKiB0aGUgY29sdW1uLXdpZHRoIHN1bSDigJQgdGhlIGJyb3dzZXIgc2lsZW50bHkgc2hyaW5rcyB0aGVtLiBQaW5uaW5nIGBtaW4td2lkdGhgIG9uXG4gICAqIHRoZSB0YWJsZSBpdHNlbGYgcHJldmVudHMgdGhhdCBjb21wYWN0aW9uOyB0aGUgY29uc3VtZXIncyBgb3ZlcmZsb3cteDogYXV0b2BcbiAgICogd3JhcHBlciB0aGVuIHNjcm9sbHMgaG9yaXpvbnRhbGx5IGluc3RlYWQgb2Ygc3F1aXNoaW5nIGNvbHVtbnMgdG8gemVybyB3aWR0aC5cbiAgICovXG4gIGNvbXB1dGVkVGFibGVNaW5XaWR0aCA9IDA7XG5cbiAgLy8gQ2FjaGUgZm9yIHNhbml0aXplZCBIVE1MIHRvIGF2b2lkIHJlZHVuZGFudCBpbm5lckhUTUwgcmVuZGVyc1xuICBwcml2YXRlIGh0bWxDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBTYWZlSHRtbD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10gfHwgY2hhbmdlc1snc2NyZWVuV2lkdGgnXSkge1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlQ29sdW1ucygpO1xuICAgICAgdGhpcy51cGRhdGVHcmlkVGVtcGxhdGUoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSB8fCBjaGFuZ2VzWydjb2x1bW5zJ10gfHwgY2hhbmdlc1snZW5hYmxlTG9jYWxTb3J0J10pIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tcHV0ZWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gQ2xlYW4gdXAgYWxsIGR5bmFtaWNhbGx5IGNyZWF0ZWQgY29tcG9uZW50c1xuICAgIHRoaXMuY29tcG9uZW50UmVmcy5mb3JFYWNoKHJlZiA9PiByZWYuZGVzdHJveSgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMuY2xlYXIoKTtcbiAgICB0aGlzLmh0bWxDYWNoZS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNYcygpOiBib29sZWFuIHtcbiAgICBjb25zdCB3ID0gdGhpcy5zY3JlZW5XaWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICByZXR1cm4gdyA8PSA0ODA7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNTbSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB3ID0gdGhpcy5zY3JlZW5XaWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICByZXR1cm4gdyA8PSA3Njg7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNNZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB3ID0gdGhpcy5zY3JlZW5XaWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICByZXR1cm4gdyA8PSA5OTI7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZpc2libGVDb2x1bW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3BvbnNpdmVGaWx0ZXIgPSAoYzogRHluYW1pY1RhYmxlQ29sdW1uKSA9PiB7XG4gICAgICBjb25zdCByID0gYz8ucmVzcG9uc2l2ZSB8fCB7fTtcbiAgICAgIGlmIChyLnhzICYmIHRoaXMuaXNYcykgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHIuc20gJiYgdGhpcy5pc1NtKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoci5tZCAmJiB0aGlzLmlzTWQpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9ICh0aGlzLmNvbHVtbnMgfHwgW10pLmZpbHRlcihjID0+IGMuaXNTaG93ICE9PSBmYWxzZSkuZmlsdGVyKHJlc3BvbnNpdmVGaWx0ZXIpO1xuICB9XG5cbiAgZ2V0SGVhZGVyVGVtcGxhdGUoY29sSWQ6IHN0cmluZyk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcbiAgICBjb25zdCB0cGwgPSB0aGlzLmhlYWRlclRlbXBsYXRlcz8uZmluZCh0ID0+IHQubmFtZSA9PT0gY29sSWQpO1xuICAgIHJldHVybiB0cGwgPyB0cGwudGVtcGxhdGUgOiBudWxsO1xuICB9XG5cbiAgZ2V0Q2VsbFRlbXBsYXRlKGNvbElkOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgY29uc3QgdHBsID0gdGhpcy5jZWxsVGVtcGxhdGVzPy5maW5kKHQgPT4gdC5uYW1lID09PSBjb2xJZCk7XG4gICAgcmV0dXJuIHRwbCA/IHRwbC50ZW1wbGF0ZSA6IG51bGw7XG4gIH1cblxuICBnZXRSZW5kZXJlZFZhbHVlKHJvdzogYW55LCBjb2x1bW46IER5bmFtaWNUYWJsZUNvbHVtbik6IGFueSB7XG4gICAgaWYgKGNvbHVtbj8ucmVuZGVyICYmIHR5cGVvZiBjb2x1bW4ucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY29sdW1uLnJlbmRlcihyb3csIGNvbHVtbik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdEeW5hbWljVGFibGUgcmVuZGVyIGZ1bmN0aW9uIHRocmV3IGFuIGVycm9yIGZvciBjb2x1bW4nLCBjb2x1bW4/LmZpZWxkSWQsIGVycik7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2VsbFZhbHVlKHJvdywgY29sdW1uPy5maWVsZFZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHJlbmRlcmVkIHZhbHVlIGlzIGEgY29tcG9uZW50IGNsYXNzIG9yIGNvbXBvbmVudCBjb25maWdcbiAgICovXG4gIGlzQ29tcG9uZW50KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIGNvbXBvbmVudCBjbGFzcyAoaGFzIEBDb21wb25lbnQgZGVjb3JhdG9yIG1ldGFkYXRhKVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUucHJvdG90eXBlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIENvbXBvbmVudFJlbmRlckNvbmZpZ1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbXBvbmVudCAmJiB0eXBlb2YgdmFsdWUuY29tcG9uZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNvbXBvbmVudCBjbGFzcyBmcm9tIGEgcmVuZGVyIHZhbHVlIChjb3VsZCBiZSBjbGFzcyBvciBjb25maWcpXG4gICAqL1xuICBnZXRDb21wb25lbnRDbGFzcyh2YWx1ZTogVHlwZTxhbnk+IHwgQ29tcG9uZW50UmVuZGVyQ29uZmlnKTogVHlwZTxhbnk+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHZhbHVlLmNvbXBvbmVudDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbXBvbmVudCB2YWx1ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29tcG9uZW50IGlucHV0cyBmcm9tIGEgcmVuZGVyIHZhbHVlXG4gICAqL1xuICBnZXRDb21wb25lbnRJbnB1dHModmFsdWU6IFR5cGU8YW55PiB8IENvbXBvbmVudFJlbmRlckNvbmZpZyk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmlucHV0cykge1xuICAgICAgcmV0dXJuIHZhbHVlLmlucHV0cztcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29tcG9uZW50IG91dHB1dHMgZnJvbSBhIHJlbmRlciB2YWx1ZVxuICAgKi9cbiAgZ2V0Q29tcG9uZW50T3V0cHV0cyh2YWx1ZTogVHlwZTxhbnk+IHwgQ29tcG9uZW50UmVuZGVyQ29uZmlnKTogeyBba2V5OiBzdHJpbmddOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCB9IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5vdXRwdXRzKSB7XG4gICAgICByZXR1cm4gdmFsdWUub3V0cHV0cztcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGEgY29tcG9uZW50IGluIGEgVmlld0NvbnRhaW5lclJlZiAoY2FsbGVkIGZyb20gdGVtcGxhdGUpXG4gICAqL1xuICBpbml0Q29tcG9uZW50KFxuICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICByZW5kZXJlZFZhbHVlOiBUeXBlPGFueT4gfCBDb21wb25lbnRSZW5kZXJDb25maWcsXG4gICAgcm93OiBhbnksXG4gICAgY29sdW1uOiBEeW5hbWljVGFibGVDb2x1bW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2xJZDogc3RyaW5nXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghdmNyKSByZXR1cm4gZmFsc2U7XG4gICAgXG4gICAgY29uc3Qga2V5ID0gYCR7cm93SW5kZXh9XyR7Y29sSWR9YDtcbiAgICBcbiAgICAvLyBJZiBjb21wb25lbnQgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgY2VsbCwgZG9uJ3QgcmVjcmVhdGVcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWZzLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29tcG9uZW50Q2xhc3MgPSB0aGlzLmdldENvbXBvbmVudENsYXNzKHJlbmRlcmVkVmFsdWUpO1xuICAgICAgY29uc3QgaW5wdXRzID0gdGhpcy5nZXRDb21wb25lbnRJbnB1dHMocmVuZGVyZWRWYWx1ZSk7XG4gICAgICBjb25zdCBvdXRwdXRzID0gdGhpcy5nZXRDb21wb25lbnRPdXRwdXRzKHJlbmRlcmVkVmFsdWUpO1xuXG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbXBvbmVudFxuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdmNyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRDbGFzcyk7XG4gICAgICBcbiAgICAgIC8vIFNldCBpbnB1dHNcbiAgICAgIE9iamVjdC5rZXlzKGlucHV0cykuZm9yRWFjaChpbnB1dEtleSA9PiB7XG4gICAgICAgIGlmIChjb21wb25lbnRSZWYuaW5zdGFuY2UgJiYgaW5wdXRLZXkgaW4gY29tcG9uZW50UmVmLmluc3RhbmNlKSB7XG4gICAgICAgICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpW2lucHV0S2V5XSA9IGlucHV0c1tpbnB1dEtleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gb3V0cHV0c1xuICAgICAgT2JqZWN0LmtleXMob3V0cHV0cykuZm9yRWFjaChvdXRwdXRLZXkgPT4ge1xuICAgICAgICBpZiAoY29tcG9uZW50UmVmLmluc3RhbmNlICYmIG91dHB1dEtleSBpbiBjb21wb25lbnRSZWYuaW5zdGFuY2UpIHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIGFueSlbb3V0cHV0S2V5XTtcbiAgICAgICAgICBpZiAob3V0cHV0ICYmIHR5cGVvZiBvdXRwdXQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvdXRwdXQuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBvdXRwdXRzW291dHB1dEtleV07XG4gICAgICAgICAgICAgIGlmIChoYW5kbGVyKSBoYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3V0cHV0ICYmIHR5cGVvZiBvdXRwdXQuZW1pdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gRm9yIEV2ZW50RW1pdHRlciwgd3JhcCB0aGUgZW1pdCB0byBjYWxsIHRoZSBoYW5kbGVyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEVtaXQgPSBvdXRwdXQuZW1pdC5iaW5kKG91dHB1dCk7XG4gICAgICAgICAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIGFueSlbb3V0cHV0S2V5XSA9IHtcbiAgICAgICAgICAgICAgZW1pdDogKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBvdXRwdXRzW291dHB1dEtleV07XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIGhhbmRsZXIoZXZlbnQpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzdWJzY3JpYmU6IG91dHB1dC5zdWJzY3JpYmUuYmluZChvdXRwdXQpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE1hcmsgZm9yIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIFxuICAgICAgLy8gU3RvcmUgcmVmZXJlbmNlIGZvciBjbGVhbnVwXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZnMuc2V0KGtleSwgY29tcG9uZW50UmVmKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBjb21wb25lbnQgaW4gdGFibGUgY2VsbDonLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHJlbmRlcmVkIHZhbHVlIGlzIGFuIEhUTUwgc3RyaW5nIHRoYXQgc2hvdWxkIGJlIHJlbmRlcmVkIHdpdGggaW5uZXJIVE1MXG4gICAqL1xuICBpc0h0bWxTdHJpbmcodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gRmFzdGVyIGNoZWNrOiBpZiBpdCBjb250YWlucyBhbiBvcGVuaW5nIHRhZyBwYXR0ZXJuIG5lYXIgdGhlIHN0YXJ0XG4gICAgLy8gb3IganVzdCBoYXMgYW55IGJyYWNrZXRzLiBXcmFwcGluZyBpbiBhIHJlZ2V4IHdpdGggW1xcc1xcU10qIGlzIHZlcnkgc2xvdy5cbiAgICByZXR1cm4gdmFsdWUuaW5jbHVkZXMoJzwnKSAmJiAvPFthLXovXVtePl0qPi9pLnRlc3QodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbml0aXplcyBIVE1MIHN0cmluZyBmb3Igc2FmZSByZW5kZXJpbmcgd2l0aCBjYWNoaW5nXG4gICAqL1xuICBnZXRTYW5pdGl6ZWRIdG1sKHZhbHVlOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgbGV0IGNhY2hlZCA9IHRoaXMuaHRtbENhY2hlLmdldCh2YWx1ZSk7XG4gICAgaWYgKCFjYWNoZWQpIHtcbiAgICAgIGNhY2hlZCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHZhbHVlKTtcbiAgICAgIHRoaXMuaHRtbENhY2hlLnNldCh2YWx1ZSwgY2FjaGVkKTtcbiAgICAgIFxuICAgICAgLy8gU2ltcGxlIGNhY2hlIGV2aWN0aW9uXG4gICAgICBpZiAodGhpcy5odG1sQ2FjaGUuc2l6ZSA+IDEwMDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RLZXkgPSB0aGlzLmh0bWxDYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgICBpZiAoZmlyc3RLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaHRtbENhY2hlLmRlbGV0ZShmaXJzdEtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuXG4gIGdldENlbGxWYWx1ZShyb3c6IGFueSwgcGF0aD86IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCFyb3cgfHwgIXBhdGgpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi5cIik7XG4gICAgbGV0IGN1cnJlbnQgPSByb3c7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBpZiAoY3VycmVudCA9PSBudWxsKSByZXR1cm4gXCJcIjtcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhcnRdO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudCA/PyBcIlwiO1xuICB9XG5cbiAgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIG9uUm93RHJhZ1N0YXJ0KHJvdzogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZVJvd1Jlb3JkZXIpIHJldHVybjtcbiAgICB0aGlzLmRyYWdnZWRSb3cgPSByb3c7XG4gIH1cblxuICBvblJvd0RyYWdFbmQoKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnZ2VkUm93ID0gbnVsbDtcbiAgICB0aGlzLmNsZWFyRHJvcEluZGljYXRvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVzIGNvbnRpbnVvdXNseSB3aGlsZSBhIGRyYWcgaXMgb3ZlciBhIHJvdy4gQ29tcHV0ZXMgd2hldGhlciB0aGUgY3Vyc29yXG4gICAqIGlzIGluIHRoZSB0b3Agb3IgYm90dG9tIGhhbGYgb2YgdGhlIHJvdyBhbmQgdXBkYXRlcyB0aGUgaW5kaWNhdG9yIHN0YXRlLlxuICAgKiBTdXBwcmVzc2VzIHRoZSBpbmRpY2F0b3Igb24gdGhlIGRyYWdnZWQgcm93IGl0c2VsZi5cbiAgICovXG4gIG9uUm93RHJhZ092ZXIoZXZlbnQ6IEV2ZW50LCByb3dJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZVJvd1Jlb3JkZXIpIHJldHVybjtcbiAgICBjb25zdCBkcmFnID0gZXZlbnQgYXMgRHJhZ0V2ZW50O1xuICAgIGRyYWcucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCByb3cgPSB0aGlzLmNvbXB1dGVkRGF0YT8uW3Jvd0luZGV4XTtcbiAgICBpZiAodGhpcy5kcmFnZ2VkUm93ICYmIHJvdyA9PT0gdGhpcy5kcmFnZ2VkUm93KSB7XG4gICAgICBpZiAodGhpcy5kcm9wSG92ZXJJbmRleCAhPT0gbnVsbCB8fCB0aGlzLmRyb3BQb3NpdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmRyb3BIb3ZlckluZGV4ID0gbnVsbDtcbiAgICAgICAgdGhpcy5kcm9wUG9zaXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWwgPSBkcmFnLmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbWlkWSA9IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyO1xuICAgIGNvbnN0IHBvczogJ2Fib3ZlJyB8ICdiZWxvdycgPSBkcmFnLmNsaWVudFkgPCBtaWRZID8gJ2Fib3ZlJyA6ICdiZWxvdyc7XG4gICAgaWYgKHRoaXMuZHJvcEhvdmVySW5kZXggIT09IHJvd0luZGV4IHx8IHRoaXMuZHJvcFBvc2l0aW9uICE9PSBwb3MpIHtcbiAgICAgIHRoaXMuZHJvcEhvdmVySW5kZXggPSByb3dJbmRleDtcbiAgICAgIHRoaXMuZHJvcFBvc2l0aW9uID0gcG9zO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsZWFycyB0aGUgaW5kaWNhdG9yIHdoZW4gdGhlIGN1cnNvciBsZWF2ZXMgdGhlIHRib2R5IGVudGlyZWx5LiAqL1xuICBvblRib2R5RHJhZ0xlYXZlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVSb3dSZW9yZGVyKSByZXR1cm47XG4gICAgY29uc3QgZHJhZyA9IGV2ZW50IGFzIERyYWdFdmVudDtcbiAgICBjb25zdCB0Ym9keSA9IGRyYWcuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgY29uc3QgcmVsYXRlZCA9IGRyYWcucmVsYXRlZFRhcmdldCBhcyBOb2RlIHwgbnVsbDtcbiAgICBpZiAoIXRib2R5IHx8ICFyZWxhdGVkIHx8ICF0Ym9keS5jb250YWlucyhyZWxhdGVkKSkge1xuICAgICAgdGhpcy5jbGVhckRyb3BJbmRpY2F0b3IoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRHJvcEluZGljYXRvcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kcm9wSG92ZXJJbmRleCAhPT0gbnVsbCB8fCB0aGlzLmRyb3BQb3NpdGlvbiAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5kcm9wSG92ZXJJbmRleCA9IG51bGw7XG4gICAgICB0aGlzLmRyb3BQb3NpdGlvbiA9IG51bGw7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBhIHJvdyBkcm9wIGZyb20gbmd4LWRyYWctZHJvcC4gUHJlZmVycyB0aGUgdHJhY2tlZCBkcmFnb3ZlciBwb3NpdGlvblxuICAgKiAod2hpY2ggdGhlIHVzZXIgY2FuIHNlZSBsaXZlIHZpYSB0aGUgaW5zZXJ0aW9uIGxpbmUpIG92ZXIgYGV2ZW50LmluZGV4YCB3aGVuXG4gICAqIGNvbXB1dGluZyB0aGUgZmluYWwgaW5zZXJ0IHNsb3QuIEVtaXRzIGEgZnJlc2ggYXJyYXkg4oCUIGRvZXMgbm90IG11dGF0ZSBgZGF0YWAuXG4gICAqL1xuICBvblJvd0RuZERyb3AoZXZlbnQ6IERuZERyb3BFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVSb3dSZW9yZGVyKSByZXR1cm47XG4gICAgY29uc3QgZHJhZ2dlZCA9IGV2ZW50Py5kYXRhO1xuICAgIGlmIChkcmFnZ2VkID09IG51bGwpIHtcbiAgICAgIHRoaXMuY2xlYXJEcm9wSW5kaWNhdG9yKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY29tcHV0ZWREYXRhIHx8IFtdO1xuICAgIGxldCBwcmV2aW91c0luZGV4ID0gc291cmNlLmluZGV4T2YoZHJhZ2dlZCk7XG4gICAgaWYgKHByZXZpb3VzSW5kZXggPCAwICYmIGRyYWdnZWQgJiYgZHJhZ2dlZC5pZCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c0luZGV4ID0gc291cmNlLmZpbmRJbmRleChyID0+IHIgJiYgci5pZCA9PT0gZHJhZ2dlZC5pZCk7XG4gICAgfVxuICAgIGlmIChwcmV2aW91c0luZGV4IDwgMCkge1xuICAgICAgdGhpcy5jbGVhckRyb3BJbmRpY2F0b3IoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmVmZXIgdGhlIGluZGljYXRvciBwb3NpdGlvbiAod2hhdCB0aGUgdXNlciBqdXN0IHNhdykgb3ZlciBldmVudC5pbmRleC5cbiAgICBsZXQgaW5zZXJ0SW5kZXg6IG51bWJlcjtcbiAgICBpZiAodGhpcy5kcm9wSG92ZXJJbmRleCAhPSBudWxsICYmIHRoaXMuZHJvcFBvc2l0aW9uKSB7XG4gICAgICBpbnNlcnRJbmRleCA9IHRoaXMuZHJvcFBvc2l0aW9uID09PSAnYWJvdmUnID8gdGhpcy5kcm9wSG92ZXJJbmRleCA6IHRoaXMuZHJvcEhvdmVySW5kZXggKyAxO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgaW5zZXJ0SW5kZXggPSBldmVudC5pbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zZXJ0SW5kZXggPSBzb3VyY2UubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHQgPSBbLi4uc291cmNlXTtcbiAgICBuZXh0LnNwbGljZShwcmV2aW91c0luZGV4LCAxKTtcbiAgICAvLyBSZW1vdmluZyB0aGUgc291cmNlIGFib3ZlIHRoZSB0YXJnZXQgc2hpZnRzIGxhdGVyIGl0ZW1zIHVwIGJ5IG9uZS5cbiAgICBpZiAocHJldmlvdXNJbmRleCA8IGluc2VydEluZGV4KSBpbnNlcnRJbmRleCAtPSAxO1xuICAgIGlmIChpbnNlcnRJbmRleCA8IDApIGluc2VydEluZGV4ID0gMDtcbiAgICBpZiAoaW5zZXJ0SW5kZXggPiBuZXh0Lmxlbmd0aCkgaW5zZXJ0SW5kZXggPSBuZXh0Lmxlbmd0aDtcblxuICAgIHRoaXMuY2xlYXJEcm9wSW5kaWNhdG9yKCk7XG4gICAgdGhpcy5kcmFnZ2VkUm93ID0gbnVsbDtcblxuICAgIGlmIChpbnNlcnRJbmRleCA9PT0gcHJldmlvdXNJbmRleCkgcmV0dXJuO1xuICAgIG5leHQuc3BsaWNlKGluc2VydEluZGV4LCAwLCBkcmFnZ2VkKTtcbiAgICB0aGlzLnJvd1Jlb3JkZXIuZW1pdCh7IHByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleDogaW5zZXJ0SW5kZXgsIG9yZGVyZWREYXRhOiBuZXh0IH0pO1xuICB9XG5cbiAgY29weUNlbGxKc29uUGF0aChwYXRoOiBzdHJpbmcsIGV2ZW50OiBFdmVudCwgc291cmNlOiBzdHJpbmcgPSAnZGJRdWVyeVJlc3BvbnNlJyk6IHZvaWQge1xuICAgIGlmICghcGF0aCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQocGF0aCkudGhlbigoKSA9PiB7XG4gICAgICAvLyBDYWxsIHRoZSBoYW5kbGVyIGlmIHByb3ZpZGVkXG4gICAgICBpZiAodGhpcy5vbkpzb25QYXRoQ29waWVkSGFuZGxlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub25Kc29uUGF0aENvcGllZEhhbmRsZXIoeyBwYXRoLCBzb3VyY2UgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGhhbmRsZXJFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIG9uSnNvblBhdGhDb3BpZWRIYW5kbGVyOicsIGhhbmRsZXJFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNvcHkganNvblBhdGg6JywgZXJyKTtcbiAgICAgIC8vIFN0aWxsIGNhbGwgdGhlIGhhbmRsZXIgZXZlbiBvbiBmYWlsdXJlIChzaW1pbGFyIHRvIGFwaS1zdGVwIHBhdHRlcm4pXG4gICAgICBpZiAodGhpcy5vbkpzb25QYXRoQ29waWVkSGFuZGxlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub25Kc29uUGF0aENvcGllZEhhbmRsZXIoeyBwYXRoLCBzb3VyY2UgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGhhbmRsZXJFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIG9uSnNvblBhdGhDb3BpZWRIYW5kbGVyOicsIGhhbmRsZXJFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIENvbXB1dGUgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIHN0cmluZyBmcm9tIGNvbHVtbiBjb25maWdcbiAgcHJpdmF0ZSB1cGRhdGVHcmlkVGVtcGxhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgY29scyA9IHRoaXMudmlzaWJsZUNvbHVtbnM7XG4gICAgaWYgKCFjb2xzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29tcHV0ZWRHcmlkVGVtcGxhdGUgPSAnJztcbiAgICAgIHRoaXMuY29tcHV0ZWRDb2x1bW5XaWR0aHMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZml4ZWRQeCA9IGNvbHMucmVkdWNlKChzdW0sIGMpID0+IHN1bSArIChjLmZpeGVkUHggfHwgMCksIDApO1xuICAgIGNvbnN0IGR5bmFtaWNDb2xzID0gY29scy5maWx0ZXIoYyA9PiAhYy5maXhlZFB4KTtcbiAgICBjb25zdCB0b3RhbFdlaWdodCA9IGR5bmFtaWNDb2xzLnJlZHVjZSgoc3VtLCBjKSA9PiBzdW0gKyAoYy53ZWlnaHQgfHwgMSksIDApIHx8IDE7XG5cbiAgICAvLyBGbG9vciBvbiB0aGUgdGFibGUgaXRzZWxmID0gZXZlcnkgY29sdW1uJ3MgbWluaW11bSB3aWR0aCBjb250cmlidXRpb24uIEZpeGVkXG4gICAgLy8gY29sdW1ucyBjb250cmlidXRlIGBmaXhlZFB4YDsgZHluYW1pYyBjb2x1bW5zIGNvbnRyaWJ1dGUgYG1pbldpZHRoYCAob3IgMCB3aGVuXG4gICAgLy8gdW5zZXQpLiBUaGUgdGVtcGxhdGUgYmluZHMgdGhpcyB2aWEgYFtzdHlsZS5taW4td2lkdGgucHhdYCBvbiB0aGUgPHRhYmxlPiBzb1xuICAgIC8vIG5hcnJvdyBjb250YWluZXJzIGZvcmNlIGhvcml6b250YWwgc2Nyb2xsIGluc3RlYWQgb2Ygc3F1aXNoaW5nIGNvbHVtbnMgdG8gMC5cbiAgICB0aGlzLmNvbXB1dGVkVGFibGVNaW5XaWR0aCA9IGNvbHMucmVkdWNlKFxuICAgICAgKHN1bSwgYykgPT4gc3VtICsgKGMuZml4ZWRQeCAmJiBjLmZpeGVkUHggPiAwID8gYy5maXhlZFB4IDogKGMubWluV2lkdGggfHwgMCkpLFxuICAgICAgMCxcbiAgICApO1xuXG4gICAgdGhpcy5jb21wdXRlZENvbHVtbldpZHRocyA9IGNvbHMubWFwKGMgPT4ge1xuICAgICAgaWYgKGMuZml4ZWRQeCAmJiBjLmZpeGVkUHggPiAwKSB7XG4gICAgICAgIC8vIEZpeGVkLXdpZHRoIGNvbHVtbnMgc3RpbGwgcmVzcGVjdCBtaW5XaWR0aCBpbiB0aGUgKHJhcmUpIGNhc2UgdGhlIGNvbnN1bWVyXG4gICAgICAgIC8vIGNvbmZpZ3VyZWQgYm90aCDigJQgYG1heChmaXhlZCwgbWluKWAgcGlja3Mgd2hpY2hldmVyIGlzIGxhcmdlci5cbiAgICAgICAgcmV0dXJuIGMubWluV2lkdGggJiYgYy5taW5XaWR0aCA+IGMuZml4ZWRQeFxuICAgICAgICAgID8gYG1heCgke2MuZml4ZWRQeH1weCwgJHtjLm1pbldpZHRofXB4KWBcbiAgICAgICAgICA6IGAke2MuZml4ZWRQeH1weGA7XG4gICAgICB9XG4gICAgICBjb25zdCBzaGFyZSA9IChjLndlaWdodCB8fCAxKSAvIHRvdGFsV2VpZ2h0O1xuICAgICAgY29uc3QgZHluYW1pY1dpZHRoID0gYGNhbGMoKDEwMCUgLSAke2ZpeGVkUHh9cHgpICogJHtzaGFyZS50b0ZpeGVkKDQpfSlgO1xuICAgICAgLy8gRHluYW1pYy1zaGFyZSBjb2x1bW5zIGNhbiBjb2xsYXBzZSB0byB+MCB3aGVuIHRoZSB0YWJsZSBpcyBuYXJyb3dlciB0aGFuXG4gICAgICAvLyAoc3VtIG9mIGZpeGVkIHdpZHRocykgKyB0aGUgc2hhcmUgdGhleSdkIGNvbXB1dGUgdG8uIFVzaW5nIENTUyBgbWF4KClgIGZsb29yc1xuICAgICAgLy8gdGhlIGNvbHVtbiBhdCBgbWluV2lkdGhgIHNvIGl0IGdyb3dzIG5hdHVyYWxseSBhcyB0aGUgdGFibGUgd2lkZW5zIGJ1dCBuZXZlclxuICAgICAgLy8gc2hyaW5rcyBiZWxvdyB0aGUgY29uZmlndXJlZCBwaXhlbCBtaW5pbXVtLiBXaXRoIGB0YWJsZS1sYXlvdXQ6IGZpeGVkYCwgdGhlXG4gICAgICAvLyA8Y29sPiB3aWR0aCBpcyBhdXRob3JpdGF0aXZlIOKAlCB3aXRob3V0IG1heCgpIGhlcmUgdGhlIGNlbGwtbGV2ZWwgYG1pbi13aWR0aGBcbiAgICAgIC8vIHdlIHNldCBvbiA8dGg+Lzx0ZD4gaXMgaWdub3JlZCBhbmQgY29sdW1ucyB2aXN1YWxseSBkaXNhcHBlYXIgYXQgbmFycm93IHdpZHRocy5cbiAgICAgIHJldHVybiBjLm1pbldpZHRoICYmIGMubWluV2lkdGggPiAwXG4gICAgICAgID8gYG1heCgke2MubWluV2lkdGh9cHgsICR7ZHluYW1pY1dpZHRofSlgXG4gICAgICAgIDogZHluYW1pY1dpZHRoO1xuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coJ2NvbXB1dGVkQ29sdW1uV2lkdGhzJywgdGhpcy5jb21wdXRlZENvbHVtbldpZHRocyk7XG4gICAgXG4gICAgaWYgKHRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1ucykge1xuICAgICAgdGhpcy5jb21wdXRlZEdyaWRUZW1wbGF0ZSA9IHRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb21wdXRlZEdyaWRUZW1wbGF0ZSA9IHRoaXMuY29tcHV0ZWRDb2x1bW5XaWR0aHMuam9pbignICcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNlbGVjdGlvbiBoZWxwZXJzXG4gIGlzUm93U2VsZWN0YWJsZShyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghcm93KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnJvd1NlbGVjdGFibGUgIT09ICdmdW5jdGlvbicpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gISF0aGlzLnJvd1NlbGVjdGFibGUocm93KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBhbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCByb3dzID0gKHRoaXMuZGF0YSB8fCBbXSkuZmlsdGVyKChyKSA9PiB0aGlzLmlzUm93U2VsZWN0YWJsZShyKSk7XG4gICAgaWYgKCFyb3dzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiByb3dzLmV2ZXJ5KHIgPT4gISFyPy5pc1NlbGVjdGVkKTtcbiAgfVxuXG4gIGdldCBzb21lU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm93cyA9ICh0aGlzLmRhdGEgfHwgW10pLmZpbHRlcigocikgPT4gdGhpcy5pc1Jvd1NlbGVjdGFibGUocikpO1xuICAgIGlmICghcm93cy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBhbnlTZWxlY3RlZCA9IHJvd3Muc29tZShyID0+ICEhcj8uaXNTZWxlY3RlZCk7XG4gICAgcmV0dXJuIGFueVNlbGVjdGVkICYmICF0aGlzLmFsbFNlbGVjdGVkO1xuICB9XG5cbiAgb25TZWxlY3RBbGxDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgdGhpcy50b2dnbGVTZWxlY3RBbGwodGFyZ2V0LmNoZWNrZWQpO1xuICB9XG5cbiAgb25Sb3dTZWxlY3RDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jvd1NlbGVjdGFibGUocm93KSkge1xuICAgICAgcm93LmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgcm93LmlzU2VsZWN0ZWQgPSB0YXJnZXQuY2hlY2tlZDtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEFsbChjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuZGF0YSB8fCBbXTtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICBpZiAocm93KSB7XG4gICAgICAgIHJvdy5pc1NlbGVjdGVkID0gdGhpcy5pc1Jvd1NlbGVjdGFibGUocm93KSA/IGNoZWNrZWQgOiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyA9PT09PSBTb3J0aW5nIHN1cHBvcnQgPT09PT1cbiAgcHJpdmF0ZSBfc29ydEFjdGl2ZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfc29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHVwZGF0ZUNvbXB1dGVkRGF0YSgpOiB2b2lkIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmRhdGEgfHwgW107XG4gICAgaWYgKCF0aGlzLmVuYWJsZUxvY2FsU29ydCB8fCAhdGhpcy5fc29ydEFjdGl2ZSB8fCAhdGhpcy5fc29ydERpcmVjdGlvbikge1xuICAgICAgdGhpcy5jb21wdXRlZERhdGEgPSBzb3VyY2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbCA9IHRoaXMudmlzaWJsZUNvbHVtbnMuZmluZChjID0+IGMuZmllbGRJZCA9PT0gdGhpcy5fc29ydEFjdGl2ZSk7XG4gICAgaWYgKCFjb2wgfHwgIWNvbC5maWVsZFZhbHVlKSB7XG4gICAgICB0aGlzLmNvbXB1dGVkRGF0YSA9IHNvdXJjZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlyID0gdGhpcy5fc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTE7XG4gICAgY29uc3QgZmllbGRQYXRoID0gY29sLmZpZWxkVmFsdWU7XG4gICAgY29uc3Qgb3V0ID0gWy4uLnNvdXJjZV07XG4gICAgb3V0LnNvcnQoKGEsIGIpID0+IGRpciAqIHRoaXMuY29tcGFyZVZhbHVlcyh0aGlzLmdldENlbGxWYWx1ZShhLCBmaWVsZFBhdGgpLCB0aGlzLmdldENlbGxWYWx1ZShiLCBmaWVsZFBhdGgpKSk7XG4gICAgdGhpcy5jb21wdXRlZERhdGEgPSBvdXQ7XG4gIH1cblxuICAvLyBDb21wdXRlZCBsb2FkaW5nIGZsYWdzIHRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICBnZXQgc2hvd1RhYmxlTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1RhYmxlTG9hZGluZyA/PyBmYWxzZTtcbiAgfVxuXG4gIGdldCBzaG93VGFibGVEYXRhTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1RhYmxlRGF0YUxvYWRpbmcgPz8gZmFsc2U7XG4gIH1cblxuICAvLyBUcnVlIHdoZW4gdGFibGUgaGFzIG5vIGRhdGEgYW5kIGlzIG5vdCBjdXJyZW50bHkgbG9hZGluZyDigJQgdXNlZCB0byBzaG93IGFuIGVtcHR5IHN0YXRlXG4gIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFueUxvYWRpbmcgPSB0aGlzLnNob3dUYWJsZUxvYWRpbmcgfHwgdGhpcy5zaG93VGFibGVEYXRhTG9hZGluZztcbiAgICByZXR1cm4gIWFueUxvYWRpbmcgJiYgKCEodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5sZW5ndGgpIHx8IHRoaXMuZGF0YS5sZW5ndGggPT09IDApO1xuICB9XG5cbiAgaXNTb3J0ZWRBc2MoY29sSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zb3J0QWN0aXZlID09PSBjb2xJZCAmJiB0aGlzLl9zb3J0RGlyZWN0aW9uID09PSAnYXNjJztcbiAgfVxuXG4gIGlzU29ydGVkRGVzYyhjb2xJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBY3RpdmUgPT09IGNvbElkICYmIHRoaXMuX3NvcnREaXJlY3Rpb24gPT09ICdkZXNjJztcbiAgfVxuXG4gIHRvZ2dsZVNvcnQoY29sOiBEeW5hbWljVGFibGVDb2x1bW4pOiB2b2lkIHtcbiAgICBpZiAoIWNvbD8uc29ydGFibGUpIHJldHVybjtcbiAgICBjb25zdCBjb2xJZCA9IGNvbC5maWVsZElkO1xuICAgIGlmICh0aGlzLl9zb3J0QWN0aXZlICE9PSBjb2xJZCkge1xuICAgICAgdGhpcy5fc29ydEFjdGl2ZSA9IGNvbElkO1xuICAgICAgdGhpcy5fc29ydERpcmVjdGlvbiA9ICdhc2MnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjeWNsZSBhc2MgLT4gZGVzYyAtPiBudWxsIC0+IGFzY1xuICAgICAgaWYgKHRoaXMuX3NvcnREaXJlY3Rpb24gPT09ICdhc2MnKSB0aGlzLl9zb3J0RGlyZWN0aW9uID0gJ2Rlc2MnO1xuICAgICAgZWxzZSBpZiAodGhpcy5fc29ydERpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB0aGlzLl9zb3J0RGlyZWN0aW9uID0gbnVsbDtcbiAgICAgIGVsc2UgdGhpcy5fc29ydERpcmVjdGlvbiA9ICdhc2MnO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkRGF0YSgpO1xuICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KHsgZmllbGRJZDogdGhpcy5fc29ydEFjdGl2ZSwgZmllbGRWYWx1ZTogY29sLmZpZWxkVmFsdWUsIGRpcmVjdGlvbjogdGhpcy5fc29ydERpcmVjdGlvbiB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZVZhbHVlcyhhOiBhbnksIGI6IGFueSk6IG51bWJlciB7XG4gICAgaWYgKGEgPT0gbnVsbCAmJiBiID09IG51bGwpIHJldHVybiAwO1xuICAgIGlmIChhID09IG51bGwpIHJldHVybiAxOyAvLyBudWxscyBsYXN0IGluIGFzYyAoaGFuZGxlZCBieSBkaXIgbXVsdGlwbGllcilcbiAgICBpZiAoYiA9PSBudWxsKSByZXR1cm4gLTE7XG5cbiAgICBjb25zdCBudW1BID0gdHlwZW9mIGEgPT09ICdudW1iZXInID8gYSA6IE51bWJlcihhKTtcbiAgICBjb25zdCBudW1CID0gdHlwZW9mIGIgPT09ICdudW1iZXInID8gYiA6IE51bWJlcihiKTtcbiAgICBjb25zdCBhSXNOdW0gPSAhaXNOYU4obnVtQSkgJiYgYSAhPT0gJycgJiYgYSAhPT0gbnVsbCAmJiBhICE9PSBmYWxzZTtcbiAgICBjb25zdCBiSXNOdW0gPSAhaXNOYU4obnVtQikgJiYgYiAhPT0gJycgJiYgYiAhPT0gbnVsbCAmJiBiICE9PSBmYWxzZTtcbiAgICBpZiAoYUlzTnVtICYmIGJJc051bSkge1xuICAgICAgaWYgKG51bUEgPCBudW1CKSByZXR1cm4gLTE7XG4gICAgICBpZiAobnVtQSA+IG51bUIpIHJldHVybiAxO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLy8gRGF0ZSBkZXRlY3Rpb246IGF0dGVtcHQgcGFyc2Ugd2hlbiBib3RoIHZhbHVlcyBhcmUgc3RyaW5ncyBhbmQgcGFyc2VhYmxlXG4gICAgaWYgKHR5cGVvZiBhID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgYiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHRzQSA9IERhdGUucGFyc2UoYSk7XG4gICAgICBjb25zdCB0c0IgPSBEYXRlLnBhcnNlKGIpO1xuICAgICAgaWYgKCFpc05hTih0c0EpICYmICFpc05hTih0c0IpKSB7XG4gICAgICAgIGlmICh0c0EgPCB0c0IpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKHRzQSA+IHRzQikgcmV0dXJuIDE7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgICAgLy8gbG9jYWxlQ29tcGFyZSwgY2FzZS1pbnNlbnNpdGl2ZVxuICAgICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiLCB1bmRlZmluZWQsIHsgc2Vuc2l0aXZpdHk6ICdiYXNlJywgbnVtZXJpYzogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byBzdHJpbmcgY29tcGFyaXNvblxuICAgIGNvbnN0IHNhID0gU3RyaW5nKGEpO1xuICAgIGNvbnN0IHNiID0gU3RyaW5nKGIpO1xuICAgIHJldHVybiBzYS5sb2NhbGVDb21wYXJlKHNiLCB1bmRlZmluZWQsIHsgc2Vuc2l0aXZpdHk6ICdiYXNlJywgbnVtZXJpYzogdHJ1ZSB9KTtcbiAgfVxufVxuXG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtdWktcm9vdFwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXJlbGF0aXZlXCIgW2NsYXNzLmNxYS1tYXgtaC1bMTAwcHhdXT1cInNob3dUYWJsZUxvYWRpbmdcIj5cbiAgICA8Y3FhLWZ1bGwtdGFibGUtbG9hZGVyICpuZ0lmPVwic2hvd1RhYmxlTG9hZGluZ1wiPjwvY3FhLWZ1bGwtdGFibGUtbG9hZGVyPlxuICAgIDxjcWEtdGFibGUtZGF0YS1sb2FkZXIgKm5nSWY9XCJzaG93VGFibGVEYXRhTG9hZGluZ1wiPjwvY3FhLXRhYmxlLWRhdGEtbG9hZGVyPlxuICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlLWlubmVyIGNxYS13LWZ1bGwgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItZ3JheS0yMDBcIlxuICAgICAgICAgICBbY2xhc3MuaXMtbG9hZGluZ109XCJ0cnVlXCJcbiAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb21wdXRlZFRhYmxlTWluV2lkdGggfHwgbnVsbFwiXG4gICAgICAgICAgICpuZ0lmPVwiIXNob3dUYWJsZUxvYWRpbmdcIj5cbiAgICAgIDxjb2xncm91cD5cbiAgICAgICAgPGNvbCAqbmdJZj1cImVuYWJsZVJvd1Jlb3JkZXJcIiBzdHlsZT1cIndpZHRoOiA0NHB4XCIgLz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgd2lkdGggb2YgY29tcHV0ZWRDb2x1bW5XaWR0aHM7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiPlxuICAgICAgICAgIDxjb2wgW3N0eWxlLndpZHRoXT1cIndpZHRoXCIgLz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2NvbGdyb3VwPlxuXG4gICAgICA8dGhlYWQgKm5nSWY9XCJkYXRhPy5sZW5ndGhcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwidGFibGUtaGVhZGVyIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgICpuZ0lmPVwiZW5hYmxlUm93UmVvcmRlclwiXG4gICAgICAgICAgICBjbGFzcz1cImhlYWRlci1jZWxsIHJlb3JkZXItaGFuZGxlLWNlbGwgY3FhLXB5LVsxMy4yNXB4XSBjcWEtcHgtWzEwLjVweF0gY3FhLXRleHQteHMgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMzNzQxNTFdIGNxYS1iZy1bI2VmZjBmN10gY3FhLXRleHQtY2VudGVyXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZW9yZGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1zci1vbmx5XCI+UmVvcmRlcjwvc3Bhbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiB2aXNpYmxlQ29sdW1uczsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCI+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCBjcWEtcHktWzEzLjI1cHhdIGNxYS1weC1bMTAuNXB4XSBjcWEtdGV4dC14cyBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzM3NDE1MV0gY3FhLWJnLVsjZWZmMGY3XVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLm1pbldpZHRoXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiW1xuICAgICAgICAgICAgICAgIGNvbC5maWVsZElkICsgJy1jZWxsJyxcbiAgICAgICAgICAgICAgICBjb2wuYWxpZ24gPT09ICdjZW50ZXInID8gJ2NxYS10ZXh0LWNlbnRlcicgOiBjb2wuYWxpZ24gPT09ICdyaWdodCcgPyAnY3FhLXRleHQtcmlnaHQnIDogJ2NxYS10ZXh0LWxlZnQnXG4gICAgICAgICAgICAgIF1cIj5cbiAgICAgICAgICAgICAgPCEtLSBCdWlsdC1pbiBzZWxlY3QtYWxsIGZvciBjaGVja2JveCBjb2x1bW4gd2hlbiBlbmFibGVkIGFuZCBubyBjdXN0b20gaGVhZGVyIHRlbXBsYXRlIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuZmllbGRJZCA9PT0gJ2NoZWNrYm94JyAmJiBlbmFibGVTZWxlY3RBbGwgJiYgIWdldEhlYWRlclRlbXBsYXRlKGNvbC5maWVsZElkKTsgZWxzZSBoZWFkZXJUcGxPckRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJjaGVja2JveFwiIGFyaWEtbGFiZWw9XCJTZWxlY3QgYWxsIHJvd3NcIiBbY2hlY2tlZF09XCJhbGxTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzb21lU2VsZWN0ZWRcIiAoY2hhbmdlKT1cIm9uU2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIiBjbGFzcz1cImhpZGRlbi1jaGVja2JveFwiIC8+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY2hlY2tib3hcIiBjbGFzcz1cImN1c3RvbS1jaGVja2JveC1sYWJlbFwiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2hlYWRlclRwbE9yRGVmYXVsdD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0SGVhZGVyVGVtcGxhdGUoY29sLmZpZWxkSWQpIGFzIGhlYWRlclRwbDsgZWxzZSBkZWZhdWx0SGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVHBsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5zb3J0YWJsZTsgZWxzZSBwbGFpbkhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImhlYWRlci10ZXh0IGNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtcHgtMFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQoY29sKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NvcnQgYnkgJyArIChjb2wuZmllbGROYW1lIHx8IGNvbC5maWVsZElkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEyLjNweF0gY3FhLWxlYWRpbmctWzE3LjVweF0gY3FhLXRleHQtWyMwQTBBMEFdIGNxYS1mb250LW1lZGl1bVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wuZmllbGROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNTb3J0ZWRBc2MoY29sLmZpZWxkSWQpXCI+4payPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNTb3J0ZWREZXNjKGNvbC5maWVsZElkKVwiPuKWvDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhaW5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGVyLXRleHRcIj57eyBjb2wuZmllbGROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG5cbiAgICAgIDx0Ym9keSBjbGFzcz1cInRhYmxlLWJvZHkgY3FhLXctZnVsbFwiXG4gICAgICAgIFtkbmREcm9wem9uZV09XCJbJ2NxYS1yb3cnXVwiXG4gICAgICAgIFtkbmREaXNhYmxlSWZdPVwiIWVuYWJsZVJvd1Jlb3JkZXJcIlxuICAgICAgICBkbmRFZmZlY3RBbGxvd2VkPVwibW92ZVwiXG4gICAgICAgIChkcmFnbGVhdmUpPVwib25UYm9keURyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICAgICAgKGRuZERyb3ApPVwib25Sb3dEbmREcm9wKCRldmVudClcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwidGFibGUtcm93IGNxYS1iZy1zdXJmYWNlLWRlZmF1bHQgaG92ZXI6Y3FhLWJnLXN1cmZhY2UtaG92ZXJcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2YgY29tcHV0ZWREYXRhOyBsZXQgcm93SW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCJcbiAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwicm93Py5pc1NlbGVjdGVkXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLXJvdy1kcmFnZ2FibGVdPVwiZW5hYmxlUm93UmVvcmRlclwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1yb3ctZHJvcC1hYm92ZV09XCJkcm9wSG92ZXJJbmRleCA9PT0gcm93SW5kZXggJiYgZHJvcFBvc2l0aW9uID09PSAnYWJvdmUnXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLXJvdy1kcm9wLWJlbG93XT1cImRyb3BIb3ZlckluZGV4ID09PSByb3dJbmRleCAmJiBkcm9wUG9zaXRpb24gPT09ICdiZWxvdydcIlxuICAgICAgICAgIFtkbmREcmFnZ2FibGVdPVwicm93XCJcbiAgICAgICAgICBbZG5kRGlzYWJsZUlmXT1cIiFlbmFibGVSb3dSZW9yZGVyXCJcbiAgICAgICAgICBkbmRFZmZlY3RBbGxvd2VkPVwibW92ZVwiXG4gICAgICAgICAgZG5kVHlwZT1cImNxYS1yb3dcIlxuICAgICAgICAgIChkbmRTdGFydCk9XCJvblJvd0RyYWdTdGFydChyb3cpXCJcbiAgICAgICAgICAoZG5kRW5kKT1cIm9uUm93RHJhZ0VuZCgpXCJcbiAgICAgICAgICAoZHJhZ292ZXIpPVwib25Sb3dEcmFnT3ZlcigkZXZlbnQsIHJvd0luZGV4KVwiPlxuICAgICAgICAgIDx0ZCAqbmdJZj1cImVuYWJsZVJvd1Jlb3JkZXJcIiBjbGFzcz1cImNlbGwgcmVvcmRlci1oYW5kbGUtY2VsbCBjcWEtcHgtWzEwLjVweF0gY3FhLXB5LVsxMXB4XSBjcWEtdGV4dC1jZW50ZXJcIiBbYXR0ci50aXRsZV09XCJyZW9yZGVySGFuZGxlVG9vbHRpcFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZW9yZGVyLWhhbmRsZS1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI2XCIgY3k9XCIzXCIgcj1cIjEuMjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIzXCIgcj1cIjEuMjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjZcIiBjeT1cIjhcIiByPVwiMS4yNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L2NpcmNsZT5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjhcIiByPVwiMS4yNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L2NpcmNsZT5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNlwiIGN5PVwiMTNcIiByPVwiMS4yNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L2NpcmNsZT5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjEzXCIgcj1cIjEuMjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIHZpc2libGVDb2x1bW5zOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNlbGwgY3FhLXB4LVsxMC41cHhdIGNxYS1weS1bMTFweF1cIlxuICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC5taW5XaWR0aFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICAgICBjb2wuZmllbGRJZCArICctY2VsbCcsXG4gICAgICAgICAgICAgICAgY29sLmFsaWduID09PSAnY2VudGVyJyA/ICdjcWEtdGV4dC1jZW50ZXInIDogY29sLmFsaWduID09PSAncmlnaHQnID8gJ2NxYS10ZXh0LXJpZ2h0JyA6ICdjcWEtdGV4dC1sZWZ0JyxcbiAgICAgICAgICAgICAgICBjZWxsSnNvblBhdGhHZXR0ZXIgJiYgY29sLmZpZWxkSWQgIT09ICdjaGVja2JveCcgJiYgY29sLmZpZWxkSWQgIT09ICdhY3Rpb25zJyA/ICdjcWEtY3Vyc29yLXBvaW50ZXInIDogJydcbiAgICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICAgIChkYmxjbGljayk9XCJjZWxsSnNvblBhdGhHZXR0ZXIgJiYgY29sPy5maWVsZElkICE9PSAnY2hlY2tib3gnICYmIGNvbD8uZmllbGRJZCAhPT0gJ2FjdGlvbnMnICYmIGNvcHlDZWxsSnNvblBhdGgoY2VsbEpzb25QYXRoR2V0dGVyKHJvd0luZGV4LCBjb2w/LmZpZWxkSWQsIHJvdyksICRldmVudCwgJ2RiUXVlcnlSZXNwb25zZScpXCI+XG4gICAgICAgICAgICAgIDwhLS0gQnVpbHQtaW4gY2hlY2tib3ggY2VsbCB3aGVuIG5vIGN1c3RvbSB0ZW1wbGF0ZSBpcyBwcm92aWRlZCAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5maWVsZElkID09PSAnY2hlY2tib3gnICYmICFnZXRDZWxsVGVtcGxhdGUoY29sLmZpZWxkSWQpOyBlbHNlIHJlZ3VsYXJDZWxsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jaGVja2JveFwiIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICAgICAgIGNvbC5hbGlnbiA9PT0gJ2NlbnRlcicgPyAnY3FhLWZsZXggY3FhLWp1c3RpZnktY2VudGVyJyA6IGNvbC5hbGlnbiA9PT0gJ3JpZ2h0JyA/ICdjcWEtZmxleCBjcWEtanVzdGlmeS1lbmQnIDogJydcbiAgICAgICAgICAgICAgICBdXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW4tY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCIncm93LWNoZWNrYm94LScgKyByb3dJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWxlY3Qgcm93XCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwicm93Py5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc1Jvd1NlbGVjdGFibGUocm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Sb3dTZWxlY3RDaGFuZ2UoJGV2ZW50LCByb3cpXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1jaGVja2JveC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5vcGFjaXR5XT1cIiFpc1Jvd1NlbGVjdGFibGUocm93KSA/ICcwLjQ1JyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY3Vyc29yXT1cIiFpc1Jvd1NlbGVjdGFibGUocm93KSA/ICdub3QtYWxsb3dlZCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnBvaW50ZXItZXZlbnRzXT1cIiFpc1Jvd1NlbGVjdGFibGUocm93KSA/ICdub25lJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5mb3JdPVwiJ3Jvdy1jaGVja2JveC0nICsgcm93SW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlZ3VsYXJDZWxsPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRDZWxsVGVtcGxhdGUoY29sLmZpZWxkSWQpIGFzIGNlbGxUcGw7IGVsc2UgZGVmYXVsdENlbGxcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsVHBsOyBjb250ZXh0OiB7JGltcGxpY2l0OiByb3csIHJvdzogcm93LCB2YWx1ZTogZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmZpZWxkVmFsdWUpfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENlbGw+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0UmVuZGVyZWRWYWx1ZShyb3csIGNvbCkgYXMgcmVuZGVyZWRWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDb21wb25lbnQocmVuZGVyZWRWYWx1ZSk7IGVsc2Ugbm9uQ29tcG9uZW50Q2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgXG4gICAgICAgICAgICAgICAgICAgICAgICBjcWFDZWxsQ29udGFpbmVyIFxuICAgICAgICAgICAgICAgICAgICAgICAgI2NlbGxDb250YWluZXI9XCJjcWFDZWxsQ29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRDb25maWddPVwicmVuZGVyZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcm93SW5kZXhdPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbElkXT1cImNvbC5maWVsZElkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vbkNvbXBvbmVudENlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSHRtbFN0cmluZyhyZW5kZXJlZFZhbHVlKTsgZWxzZSB0ZXh0Q2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS1sZWFkaW5nLVsxN3B4XVwiIFtpbm5lckhUTUxdPVwiZ2V0U2FuaXRpemVkSHRtbChyZW5kZXJlZFZhbHVlKVwiIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5hbGlnbiA9PT0gJ2NlbnRlcicgPyAnY3FhLWZsZXggY3FhLWp1c3RpZnktY2VudGVyJyA6IGNvbC5hbGlnbiA9PT0gJ3JpZ2h0JyA/ICdjcWEtZmxleCBjcWEtanVzdGlmeS1lbmQnIDogJydcbiAgICAgICAgICAgICAgICAgICAgICBdXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZXh0Q2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyMzNzQxNTFdXCIgW25nQ2xhc3NdPVwiW1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sLmFsaWduID09PSAnY2VudGVyJyA/ICdjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXInIDogY29sLmFsaWduID09PSAncmlnaHQnID8gJ2NxYS1mbGV4IGNxYS1qdXN0aWZ5LWVuZCcgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgIF1cIj57eyByZW5kZXJlZFZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
|
|
645
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFhLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUEyRyx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdoUSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7QUFLeEcsTUFBTSw0QkFBNEIsR0FBRzs7Ozs7Ozs7O0NBU3BDLENBQUM7QUFnQ0YsTUFBTSxPQUFPLHFCQUFxQjtJQWtGaEMsWUFDVSxTQUF1QixFQUN2QixHQUFzQjtRQUR0QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBbkZ2QixTQUFJLEdBQVUsRUFBRSxDQUFDO1FBQ2pCLFlBQU8sR0FBeUIsRUFBRSxDQUFDO1FBUzVDLDhEQUE4RDtRQUNyRCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUl6QyxzRkFBc0Y7UUFDN0Usb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFPekMsc0VBQXNFO1FBQzVELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBOEUsQ0FBQztRQVF0SDs7OztXQUlHO1FBQ00scUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQzNDLHdDQUF3QztRQUMvQix5QkFBb0IsR0FBVyxpQkFBaUIsQ0FBQztRQUMxRDs7OztXQUlHO1FBQ08sZUFBVSxHQUFHLElBQUksWUFBWSxFQUF1RSxDQUFDO1FBRS9H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QUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIENvbnRlbnRDaGlsZHJlbiwgSW5wdXQsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIENvbXBvbmVudFJlZiwgVHlwZSwgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7IERuZERyb3BFdmVudCB9IGZyb20gXCJuZ3gtZHJhZy1kcm9wXCI7XG5pbXBvcnQgeyBEeW5hbWljQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLCBEeW5hbWljSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tIFwiLi9keW5hbWljLWNlbGwuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBDb21wb25lbnRSZW5kZXJDb25maWcgfSBmcm9tIFwiLi9jb21wb25lbnQtcmVuZGVyLWNvbmZpZy5pbnRlcmZhY2VcIjtcblxuZXhwb3J0IHsgQ29tcG9uZW50UmVuZGVyQ29uZmlnIH0gZnJvbSBcIi4vY29tcG9uZW50LXJlbmRlci1jb25maWcuaW50ZXJmYWNlXCI7XG5cbmNvbnN0IERZTkFNSUNfVEFCTEVfUkVPUkRFUl9TVFlMRVMgPSBgXG4gIC5yZW9yZGVyLWhhbmRsZS1jZWxsIHsgd2lkdGg6IDQ0cHg7IH1cbiAgLnJlb3JkZXItaGFuZGxlLWljb24geyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGNvbG9yOiAjNkI3MjgwOyB9XG4gIC5jcWEtcm93LWRyYWdnYWJsZSB7IGN1cnNvcjogZ3JhYjsgfVxuICAuY3FhLXJvdy1kcmFnZ2FibGU6YWN0aXZlIHsgY3Vyc29yOiBncmFiYmluZzsgfVxuICAuY3FhLXJvdy1kcmFnZ2FibGUuZG5kRHJhZ2dpbmcgeyBvcGFjaXR5OiAwLjU7IH1cbiAgLmNxYS1yb3ctZHJhZ2dhYmxlLmRuZERyYWdnaW5nU291cmNlIHsgb3BhY2l0eTogMC4zOyB9XG4gIHRyLmNxYS1yb3ctZHJvcC1hYm92ZSA+IHRkIHsgYm94LXNoYWRvdzogaW5zZXQgMCAzcHggMCAwICMzRjQzRUU7IH1cbiAgdHIuY3FhLXJvdy1kcm9wLWJlbG93ID4gdGQgeyBib3gtc2hhZG93OiBpbnNldCAwIC0zcHggMCAwICMzRjQzRUU7IH1cbmA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY1RhYmxlQ29sdW1uIHtcbiAgZmllbGRJZDogc3RyaW5nO1xuICBmaWVsZE5hbWU/OiBzdHJpbmc7XG4gIGZpZWxkVmFsdWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gcmVuZGVyZXIgaW52b2tlZCB3aGVuIG5vIHByb2plY3RlZCBjZWxsIHRlbXBsYXRlIGlzIHByb3ZpZGVkLlxuICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcvbnVtYmVyL0hUTUwgc3RyaW5nL0NvbXBvbmVudCBjbGFzcy9Db21wb25lbnRSZW5kZXJDb25maWcgdG8gZGlzcGxheSBmb3IgdGhlIGdpdmVuIHJvdy5cbiAgICogSFRNTCBzdHJpbmdzIHdpbGwgYmUgc2FuaXRpemVkIGFuZCByZW5kZXJlZCBzYWZlbHkuXG4gICAqIENvbXBvbmVudCBjbGFzc2VzIHdpbGwgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkLlxuICAgKi9cbiAgcmVuZGVyPzogKHJvdzogYW55LCBjb2x1bW46IER5bmFtaWNUYWJsZUNvbHVtbikgPT4gc3RyaW5nIHwgbnVtYmVyIHwgU2FmZUh0bWwgfCBUeXBlPGFueT4gfCBDb21wb25lbnRSZW5kZXJDb25maWc7XG4gIGlzRGVmYXVsdD86IGJvb2xlYW47XG4gIHNvcnRhYmxlPzogYm9vbGVhbjtcbiAgaXNTaG93PzogYm9vbGVhbjtcbiAgLy8gTmV3IGNvbmZpZ3VyYXRpb24gZmllbGRzIHRvIHVuaWZ5IGxheW91dCBsb2dpY1xuICB3ZWlnaHQ/OiBudW1iZXI7IC8vIHJlbGF0aXZlIHdlaWdodCBmb3IgZHluYW1pYyBzaGFyZVxuICBmaXhlZFB4PzogbnVtYmVyOyAvLyBmaXhlZCB3aWR0aCBpbiBweCAoZS5nLiBjaGVja2JveC9hY3Rpb25zKVxuICAvKiogTWluaW11bSB3aWR0aCBpbiBweCDigJQgYXBwbGllZCB0byBib3RoIHRoZSBoZWFkZXIgY2VsbCBhbmQgZXZlcnkgYm9keSBjZWxsIG9mIHRoaXMgY29sdW1uLiAqL1xuICBtaW5XaWR0aD86IG51bWJlcjtcbiAgcmVzcG9uc2l2ZT86IHsgeHM/OiBib29sZWFuOyBzbT86IGJvb2xlYW47IG1kPzogYm9vbGVhbiB9OyAvLyBoaWRlIGF0IHNwZWNpZmljIGJyZWFrcG9pbnRzXG4gIGFsaWduPzogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXBwLWR5bmFtaWMtdGFibGVcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9keW5hbWljLXRhYmxlLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlczogW0RZTkFNSUNfVEFCTEVfUkVPUkRFUl9TVFlMRVNdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uczogRHluYW1pY1RhYmxlQ29sdW1uW10gPSBbXTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHVzZWQgd2hlbiBubyBjdXN0b20gZW1wdHkgdGVtcGxhdGUgaXMgcHJvdmlkZWQuXG4gICAqL1xuICBASW5wdXQoKSBlbXB0eVN0YXRlPzogeyB0aXRsZT86IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmc7IGltYWdlVXJsPzogc3RyaW5nOyBhY3Rpb25zPzogYW55W10gfTtcbiAgLy8gT3B0aW9uYWwgb3ZlcnJpZGU7IGlmIG9taXR0ZWQgd2UgY29tcHV0ZSBmcm9tIGNvbHVtbnNcbiAgQElucHV0KCkgZ3JpZFRlbXBsYXRlQ29sdW1ucz86IHN0cmluZztcbiAgLy8gQnJlYWtwb2ludC1hd2FyZSBzaXppbmc7IHByb3ZpZGUgZnJvbSBwYXJlbnQgdG8gYXZvaWQgZXh0cmEgbGlzdGVuZXJzXG4gIEBJbnB1dCgpIHNjcmVlbldpZHRoPzogbnVtYmVyO1xuICAvLyBFbmFibGUgYnVpbHQtaW4gc2VsZWN0LWFsbCBiZWhhdmlvciBmb3IgYSAnY2hlY2tib3gnIGNvbHVtblxuICBASW5wdXQoKSBlbmFibGVTZWxlY3RBbGw6IGJvb2xlYW4gPSB0cnVlO1xuICAvLyBPcHRpb25hbCBwcmVkaWNhdGUgdG8gY29udHJvbCB3aGV0aGVyIGEgcm93IGlzIHNlbGVjdGFibGUuXG4gIC8vIElmIG5vdCBwcm92aWRlZCwgYWxsIHJvd3MgYXJlIHNlbGVjdGFibGUgKGJhY2t3YXJkIGNvbXBhdGlibGUgYmVoYXZpb3IpLlxuICBASW5wdXQoKSByb3dTZWxlY3RhYmxlPzogKHJvdzogYW55KSA9PiBib29sZWFuO1xuICAvLyBFbmFibGUgc2ltcGxlIGNsaWVudC1zaWRlIHNvcnRpbmcgd2hlbiBjbGlja2luZyBzb3J0YWJsZSBoZWFkZXJzIChubyBjdXN0b20gaGVhZGVyKVxuICBASW5wdXQoKSBlbmFibGVMb2NhbFNvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuICAvLyBCYWNrd2FyZC1jb21wYXQgbG9hZGluZyBmbGFnIChhcHBsaWVzIHRvIGJvdGggbG9hZGVycyBpZiBzcGVjaWZpYyBmbGFncyBub3QgcHJvdmlkZWQpXG4gIFxuICAvLyBOZXc6IGNvbnRyb2xzIHRoZSBmdWxsIHRhYmxlIG92ZXJsYXkgbG9hZGVyXG4gIEBJbnB1dCgpIGlzVGFibGVMb2FkaW5nPzogYm9vbGVhbjtcbiAgLy8gTmV3OiBjb250cm9scyB0aGUgaW5saW5lIGRhdGEgbG9hZGVyIGFib3ZlIHRoZSB0YWJsZVxuICBASW5wdXQoKSBpc1RhYmxlRGF0YUxvYWRpbmc/OiBib29sZWFuO1xuICAvLyBFbWl0IHNvcnQgY2hhbmdlcyBzbyBwYXJlbnQgY2FuIHBlcmZvcm0gc2VydmVyLXNpZGUgc29ydCBpZiBkZXNpcmVkXG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZpZWxkSWQ6IHN0cmluZzsgZmllbGRWYWx1ZT86IHN0cmluZzsgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyB8IG51bGwgfT4oKTtcblxuICAvLyBPcHRpb25hbCBnZXR0ZXIgZm9yIEpTT04gcGF0aCBwZXIgY2VsbC4gV2hlbiBwcm92aWRlZCwgZG91YmxlLWNsaWNraW5nIGEgY2VsbCBjb3BpZXMgdGhlIHBhdGguXG4gIEBJbnB1dCgpIGNlbGxKc29uUGF0aEdldHRlcj86IChyb3dJbmRleDogbnVtYmVyLCBjb2xJZDogc3RyaW5nLCByb3c6IGFueSkgPT4gc3RyaW5nO1xuXG4gIC8vIE9wdGlvbmFsIGhhbmRsZXIgY2FsbGVkIHdoZW4gYSBKU09OIHBhdGggaXMgY29waWVkIGZyb20gYSB0YWJsZSBjZWxsXG4gIEBJbnB1dCgpIG9uSnNvblBhdGhDb3BpZWRIYW5kbGVyPzogKGV2ZW50OiB7IHBhdGg6IHN0cmluZzsgc291cmNlOiBzdHJpbmcgfSkgPT4gdm9pZDtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCByZW5kZXJzIGEgZHJhZy1oYW5kbGUgY29sdW1uIGFzIHRoZSBsZWZ0bW9zdCBjZWxsIGFuZCBlbmFibGVzXG4gICAqIHJvdyBkcmFnLWFuZC1kcm9wIHJlb3JkZXJpbmcgdmlhIG5neC1kcmFnLWRyb3AuIE9mZiBieSBkZWZhdWx0IHNvIGV4aXN0aW5nXG4gICAqIGNvbnN1bWVycyBhcmUgdW5hZmZlY3RlZC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVJvd1Jlb3JkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFRvb2x0aXAgZm9yIHRoZSBkcmFnIGhhbmRsZSBpY29uLiAqL1xuICBASW5wdXQoKSByZW9yZGVySGFuZGxlVG9vbHRpcDogc3RyaW5nID0gJ0RyYWcgdG8gcmVvcmRlcic7XG4gIC8qKlxuICAgKiBFbWl0dGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCByb3cgZHJvcC4gYG9yZGVyZWREYXRhYCBpcyBhIGZyZXNobHkgYWxsb2NhdGVkXG4gICAqIGFycmF5IHJlZmxlY3RpbmcgdGhlIG5ldyBvcmRlciDigJQgcGFyZW50cyBzaG91bGQgYXNzaWduIGl0IGJhY2sgdG8gYFtkYXRhXWBcbiAgICogcmF0aGVyIHRoYW4gcmVseWluZyBvbiBpbi1wbGFjZSBtdXRhdGlvbi5cbiAgICovXG4gIEBPdXRwdXQoKSByb3dSZW9yZGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7IHByZXZpb3VzSW5kZXg6IG51bWJlcjsgY3VycmVudEluZGV4OiBudW1iZXI7IG9yZGVyZWREYXRhOiBhbnlbXSB9PigpO1xuXG4gIC8qKiBJbmRleCBvZiB0aGUgcm93IHRoZSBjdXJzb3IgaXMgY3VycmVudGx5IGhvdmVyaW5nIGR1cmluZyBhIHJlb3JkZXIgZHJhZy4gKi9cbiAgZHJvcEhvdmVySW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAvKiogV2hldGhlciB0aGUgY3Vyc29yIGlzIGluIHRoZSB0b3Agb3IgYm90dG9tIGhhbGYgb2YgdGhlIGhvdmVyZWQgcm93LiAqL1xuICBkcm9wUG9zaXRpb246ICdhYm92ZScgfCAnYmVsb3cnIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBUaGUgcm93IGN1cnJlbnRseSBiZWluZyBkcmFnZ2VkIOKAlCB1c2VkIHRvIHN1cHByZXNzIHRoZSBpbmRpY2F0b3Igb24gdGhlIHNvdXJjZSByb3cuICovXG4gIHByaXZhdGUgZHJhZ2dlZFJvdzogYW55ID0gbnVsbDtcblxuICBAQ29udGVudENoaWxkcmVuKER5bmFtaWNDZWxsVGVtcGxhdGVEaXJlY3RpdmUpIGNlbGxUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8RHluYW1pY0NlbGxUZW1wbGF0ZURpcmVjdGl2ZT47XG4gIEBDb250ZW50Q2hpbGRyZW4oRHluYW1pY0hlYWRlclRlbXBsYXRlRGlyZWN0aXZlKSBoZWFkZXJUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8RHluYW1pY0hlYWRlclRlbXBsYXRlRGlyZWN0aXZlPjtcbiAgLy8gQWxsb3cgY29uc3VtZXJzIHRvIHByb2plY3QgYSBjdXN0b20gZW1wdHktc3RhdGUgdGVtcGxhdGUgdXNpbmcgYSB0ZW1wbGF0ZSByZWYgbmFtZVxuICAvLyBlLmcuIDxuZy10ZW1wbGF0ZSAjZW1wdHlUYWJsZVRwbD5DdXN0b20gZW1wdHkgVUk8L25nLXRlbXBsYXRlPlxuICBAQ29udGVudENoaWxkKCdlbXB0eVRhYmxlVHBsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBlbXB0eVRhYmxlVHBsPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvLyBNYXAgdG8gc3RvcmUgY29tcG9uZW50IHJlZmVyZW5jZXMgZm9yIGNsZWFudXA6IHJvd0luZGV4X2NvbElkIC0+IENvbXBvbmVudFJlZlxuICBwcml2YXRlIGNvbXBvbmVudFJlZnMgPSBuZXcgTWFwPHN0cmluZywgQ29tcG9uZW50UmVmPGFueT4+KCk7XG5cbiAgLy8gQ2FjaGVzIGZvciBleHBlbnNpdmUgZ2V0dGVyc1xuICB2aXNpYmxlQ29sdW1uczogRHluYW1pY1RhYmxlQ29sdW1uW10gPSBbXTtcbiAgY29tcHV0ZWREYXRhOiBhbnlbXSA9IFtdO1xuICBjb21wdXRlZEdyaWRUZW1wbGF0ZTogc3RyaW5nID0gJyc7XG4gIGNvbXB1dGVkQ29sdW1uV2lkdGhzOiBzdHJpbmdbXSA9IFtdO1xuICAvKipcbiAgICogSGFyZCBmbG9vciBvbiB0aGUgYDx0YWJsZT5gIHdpZHRoID0gc3VtIG9mIGV2ZXJ5IHZpc2libGUgY29sdW1uJ3MgbWluaW11bSAoZml4ZWRcbiAgICogd2lkdGhzICsgZHluYW1pYyBjb2x1bW5zJyBgbWluV2lkdGhgKS4gV2l0aCBgdGFibGUtbGF5b3V0OiBmaXhlZDsgd2lkdGg6IDEwMCU7YCBzZXRcbiAgICogYnkgY29uc3VtZXJzLCBgPGNvbD5gIHdpZHRocyBiZWNvbWUgYWR2aXNvcnkgb25jZSB0aGUgY29udGFpbmVyIGlzIG5hcnJvd2VyIHRoYW5cbiAgICogdGhlIGNvbHVtbi13aWR0aCBzdW0g4oCUIHRoZSBicm93c2VyIHNpbGVudGx5IHNocmlua3MgdGhlbS4gUGlubmluZyBgbWluLXdpZHRoYCBvblxuICAgKiB0aGUgdGFibGUgaXRzZWxmIHByZXZlbnRzIHRoYXQgY29tcGFjdGlvbjsgdGhlIGNvbnN1bWVyJ3MgYG92ZXJmbG93LXg6IGF1dG9gXG4gICAqIHdyYXBwZXIgdGhlbiBzY3JvbGxzIGhvcml6b250YWxseSBpbnN0ZWFkIG9mIHNxdWlzaGluZyBjb2x1bW5zIHRvIHplcm8gd2lkdGguXG4gICAqL1xuICBjb21wdXRlZFRhYmxlTWluV2lkdGggPSAwO1xuXG4gIC8vIENhY2hlIGZvciBzYW5pdGl6ZWQgSFRNTCB0byBhdm9pZCByZWR1bmRhbnQgaW5uZXJIVE1MIHJlbmRlcnNcbiAgcHJpdmF0ZSBodG1sQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgU2FmZUh0bWw+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddIHx8IGNoYW5nZXNbJ3NjcmVlbldpZHRoJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUNvbHVtbnMoKTtcbiAgICAgIHRoaXMudXBkYXRlR3JpZFRlbXBsYXRlKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gfHwgY2hhbmdlc1snY29sdW1ucyddIHx8IGNoYW5nZXNbJ2VuYWJsZUxvY2FsU29ydCddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIENsZWFuIHVwIGFsbCBkeW5hbWljYWxseSBjcmVhdGVkIGNvbXBvbmVudHNcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMuZm9yRWFjaChyZWYgPT4gcmVmLmRlc3Ryb3koKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLmNsZWFyKCk7XG4gICAgdGhpcy5odG1sQ2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzWHMoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdyA9IHRoaXMuc2NyZWVuV2lkdGggfHwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgcmV0dXJuIHcgPD0gNDgwO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzU20oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdyA9IHRoaXMuc2NyZWVuV2lkdGggfHwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgcmV0dXJuIHcgPD0gNzY4O1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzTWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdyA9IHRoaXMuc2NyZWVuV2lkdGggfHwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgcmV0dXJuIHcgPD0gOTkyO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlQ29sdW1ucygpOiB2b2lkIHtcbiAgICBjb25zdCByZXNwb25zaXZlRmlsdGVyID0gKGM6IER5bmFtaWNUYWJsZUNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgciA9IGM/LnJlc3BvbnNpdmUgfHwge307XG4gICAgICBpZiAoci54cyAmJiB0aGlzLmlzWHMpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChyLnNtICYmIHRoaXMuaXNTbSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHIubWQgJiYgdGhpcy5pc01kKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSAodGhpcy5jb2x1bW5zIHx8IFtdKS5maWx0ZXIoYyA9PiBjLmlzU2hvdyAhPT0gZmFsc2UpLmZpbHRlcihyZXNwb25zaXZlRmlsdGVyKTtcbiAgfVxuXG4gIGdldEhlYWRlclRlbXBsYXRlKGNvbElkOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgY29uc3QgdHBsID0gdGhpcy5oZWFkZXJUZW1wbGF0ZXM/LmZpbmQodCA9PiB0Lm5hbWUgPT09IGNvbElkKTtcbiAgICByZXR1cm4gdHBsID8gdHBsLnRlbXBsYXRlIDogbnVsbDtcbiAgfVxuXG4gIGdldENlbGxUZW1wbGF0ZShjb2xJZDogc3RyaW5nKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xuICAgIGNvbnN0IHRwbCA9IHRoaXMuY2VsbFRlbXBsYXRlcz8uZmluZCh0ID0+IHQubmFtZSA9PT0gY29sSWQpO1xuICAgIHJldHVybiB0cGwgPyB0cGwudGVtcGxhdGUgOiBudWxsO1xuICB9XG5cbiAgZ2V0UmVuZGVyZWRWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBEeW5hbWljVGFibGVDb2x1bW4pOiBhbnkge1xuICAgIGlmIChjb2x1bW4/LnJlbmRlciAmJiB0eXBlb2YgY29sdW1uLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5yZW5kZXIocm93LCBjb2x1bW4pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRHluYW1pY1RhYmxlIHJlbmRlciBmdW5jdGlvbiB0aHJldyBhbiBlcnJvciBmb3IgY29sdW1uJywgY29sdW1uPy5maWVsZElkLCBlcnIpO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldENlbGxWYWx1ZShyb3csIGNvbHVtbj8uZmllbGRWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSByZW5kZXJlZCB2YWx1ZSBpcyBhIGNvbXBvbmVudCBjbGFzcyBvciBjb21wb25lbnQgY29uZmlnXG4gICAqL1xuICBpc0NvbXBvbmVudCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIENoZWNrIGlmIGl0J3MgYSBjb21wb25lbnQgY2xhc3MgKGhhcyBAQ29tcG9uZW50IGRlY29yYXRvciBtZXRhZGF0YSlcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLnByb3RvdHlwZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIENoZWNrIGlmIGl0J3MgYSBDb21wb25lbnRSZW5kZXJDb25maWdcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb21wb25lbnQgJiYgdHlwZW9mIHZhbHVlLmNvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjb21wb25lbnQgY2xhc3MgZnJvbSBhIHJlbmRlciB2YWx1ZSAoY291bGQgYmUgY2xhc3Mgb3IgY29uZmlnKVxuICAgKi9cbiAgZ2V0Q29tcG9uZW50Q2xhc3ModmFsdWU6IFR5cGU8YW55PiB8IENvbXBvbmVudFJlbmRlckNvbmZpZyk6IFR5cGU8YW55PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5jb21wb25lbnQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb21wb25lbnQgdmFsdWUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvbXBvbmVudCBpbnB1dHMgZnJvbSBhIHJlbmRlciB2YWx1ZVxuICAgKi9cbiAgZ2V0Q29tcG9uZW50SW5wdXRzKHZhbHVlOiBUeXBlPGFueT4gfCBDb21wb25lbnRSZW5kZXJDb25maWcpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5pbnB1dHMpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5pbnB1dHM7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvbXBvbmVudCBvdXRwdXRzIGZyb20gYSByZW5kZXIgdmFsdWVcbiAgICovXG4gIGdldENvbXBvbmVudE91dHB1dHModmFsdWU6IFR5cGU8YW55PiB8IENvbXBvbmVudFJlbmRlckNvbmZpZyk6IHsgW2tleTogc3RyaW5nXTogKGV2ZW50OiBhbnkpID0+IHZvaWQgfSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUub3V0cHV0cykge1xuICAgICAgcmV0dXJuIHZhbHVlLm91dHB1dHM7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBhIGNvbXBvbmVudCBpbiBhIFZpZXdDb250YWluZXJSZWYgKGNhbGxlZCBmcm9tIHRlbXBsYXRlKVxuICAgKi9cbiAgaW5pdENvbXBvbmVudChcbiAgICB2Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcmVuZGVyZWRWYWx1ZTogVHlwZTxhbnk+IHwgQ29tcG9uZW50UmVuZGVyQ29uZmlnLFxuICAgIHJvdzogYW55LFxuICAgIGNvbHVtbjogRHluYW1pY1RhYmxlQ29sdW1uLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgY29sSWQ6IHN0cmluZ1xuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXZjcikgcmV0dXJuIGZhbHNlO1xuICAgIFxuICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fV8ke2NvbElkfWA7XG4gICAgXG4gICAgLy8gSWYgY29tcG9uZW50IGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIGNlbGwsIGRvbid0IHJlY3JlYXRlXG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmcy5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudENsYXNzID0gdGhpcy5nZXRDb21wb25lbnRDbGFzcyhyZW5kZXJlZFZhbHVlKTtcbiAgICAgIGNvbnN0IGlucHV0cyA9IHRoaXMuZ2V0Q29tcG9uZW50SW5wdXRzKHJlbmRlcmVkVmFsdWUpO1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IHRoaXMuZ2V0Q29tcG9uZW50T3V0cHV0cyhyZW5kZXJlZFZhbHVlKTtcblxuICAgICAgLy8gQ3JlYXRlIHRoZSBjb21wb25lbnRcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZjci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50Q2xhc3MpO1xuICAgICAgXG4gICAgICAvLyBTZXQgaW5wdXRzXG4gICAgICBPYmplY3Qua2V5cyhpbnB1dHMpLmZvckVhY2goaW5wdXRLZXkgPT4ge1xuICAgICAgICBpZiAoY29tcG9uZW50UmVmLmluc3RhbmNlICYmIGlucHV0S2V5IGluIGNvbXBvbmVudFJlZi5pbnN0YW5jZSkge1xuICAgICAgICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KVtpbnB1dEtleV0gPSBpbnB1dHNbaW5wdXRLZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gU3Vic2NyaWJlIHRvIG91dHB1dHNcbiAgICAgIE9iamVjdC5rZXlzKG91dHB1dHMpLmZvckVhY2gob3V0cHV0S2V5ID0+IHtcbiAgICAgICAgaWYgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSAmJiBvdXRwdXRLZXkgaW4gY29tcG9uZW50UmVmLmluc3RhbmNlKSB7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpW291dHB1dEtleV07XG4gICAgICAgICAgaWYgKG91dHB1dCAmJiB0eXBlb2Ygb3V0cHV0LnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgb3V0cHV0LnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gb3V0cHV0c1tvdXRwdXRLZXldO1xuICAgICAgICAgICAgICBpZiAoaGFuZGxlcikgaGFuZGxlcihldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG91dHB1dCAmJiB0eXBlb2Ygb3V0cHV0LmVtaXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIEZvciBFdmVudEVtaXR0ZXIsIHdyYXAgdGhlIGVtaXQgdG8gY2FsbCB0aGUgaGFuZGxlclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxFbWl0ID0gb3V0cHV0LmVtaXQuYmluZChvdXRwdXQpO1xuICAgICAgICAgICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpW291dHB1dEtleV0gPSB7XG4gICAgICAgICAgICAgIGVtaXQ6IChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gb3V0cHV0c1tvdXRwdXRLZXldO1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyKSBoYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3Vic2NyaWJlOiBvdXRwdXQuc3Vic2NyaWJlLmJpbmQob3V0cHV0KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBNYXJrIGZvciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICBcbiAgICAgIC8vIFN0b3JlIHJlZmVyZW5jZSBmb3IgY2xlYW51cFxuICAgICAgdGhpcy5jb21wb25lbnRSZWZzLnNldChrZXksIGNvbXBvbmVudFJlZik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgY29tcG9uZW50IGluIHRhYmxlIGNlbGw6JywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSByZW5kZXJlZCB2YWx1ZSBpcyBhbiBIVE1MIHN0cmluZyB0aGF0IHNob3VsZCBiZSByZW5kZXJlZCB3aXRoIGlubmVySFRNTFxuICAgKi9cbiAgaXNIdG1sU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICAgIC8vIEZhc3RlciBjaGVjazogaWYgaXQgY29udGFpbnMgYW4gb3BlbmluZyB0YWcgcGF0dGVybiBuZWFyIHRoZSBzdGFydFxuICAgIC8vIG9yIGp1c3QgaGFzIGFueSBicmFja2V0cy4gV3JhcHBpbmcgaW4gYSByZWdleCB3aXRoIFtcXHNcXFNdKiBpcyB2ZXJ5IHNsb3cuXG4gICAgcmV0dXJuIHZhbHVlLmluY2x1ZGVzKCc8JykgJiYgLzxbYS16L11bXj5dKj4vaS50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZXMgSFRNTCBzdHJpbmcgZm9yIHNhZmUgcmVuZGVyaW5nIHdpdGggY2FjaGluZ1xuICAgKi9cbiAgZ2V0U2FuaXRpemVkSHRtbCh2YWx1ZTogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIGxldCBjYWNoZWQgPSB0aGlzLmh0bWxDYWNoZS5nZXQodmFsdWUpO1xuICAgIGlmICghY2FjaGVkKSB7XG4gICAgICBjYWNoZWQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh2YWx1ZSk7XG4gICAgICB0aGlzLmh0bWxDYWNoZS5zZXQodmFsdWUsIGNhY2hlZCk7XG4gICAgICBcbiAgICAgIC8vIFNpbXBsZSBjYWNoZSBldmljdGlvblxuICAgICAgaWYgKHRoaXMuaHRtbENhY2hlLnNpemUgPiAxMDAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0S2V5ID0gdGhpcy5odG1sQ2FjaGUua2V5cygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgaWYgKGZpcnN0S2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmh0bWxDYWNoZS5kZWxldGUoZmlyc3RLZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cblxuICBnZXRDZWxsVmFsdWUocm93OiBhbnksIHBhdGg/OiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghcm93IHx8ICFwYXRoKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICAgIGxldCBjdXJyZW50ID0gcm93O1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgcmV0dXJuIFwiXCI7XG4gICAgICBjdXJyZW50ID0gY3VycmVudFtwYXJ0XTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnQgPz8gXCJcIjtcbiAgfVxuXG4gIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBvblJvd0RyYWdTdGFydChyb3c6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVSb3dSZW9yZGVyKSByZXR1cm47XG4gICAgdGhpcy5kcmFnZ2VkUm93ID0gcm93O1xuICB9XG5cbiAgb25Sb3dEcmFnRW5kKCk6IHZvaWQge1xuICAgIHRoaXMuZHJhZ2dlZFJvdyA9IG51bGw7XG4gICAgdGhpcy5jbGVhckRyb3BJbmRpY2F0b3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyBjb250aW51b3VzbHkgd2hpbGUgYSBkcmFnIGlzIG92ZXIgYSByb3cuIENvbXB1dGVzIHdoZXRoZXIgdGhlIGN1cnNvclxuICAgKiBpcyBpbiB0aGUgdG9wIG9yIGJvdHRvbSBoYWxmIG9mIHRoZSByb3cgYW5kIHVwZGF0ZXMgdGhlIGluZGljYXRvciBzdGF0ZS5cbiAgICogU3VwcHJlc3NlcyB0aGUgaW5kaWNhdG9yIG9uIHRoZSBkcmFnZ2VkIHJvdyBpdHNlbGYuXG4gICAqL1xuICBvblJvd0RyYWdPdmVyKGV2ZW50OiBFdmVudCwgcm93SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVSb3dSZW9yZGVyKSByZXR1cm47XG4gICAgY29uc3QgZHJhZyA9IGV2ZW50IGFzIERyYWdFdmVudDtcbiAgICBkcmFnLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5jb21wdXRlZERhdGE/Lltyb3dJbmRleF07XG4gICAgaWYgKHRoaXMuZHJhZ2dlZFJvdyAmJiByb3cgPT09IHRoaXMuZHJhZ2dlZFJvdykge1xuICAgICAgaWYgKHRoaXMuZHJvcEhvdmVySW5kZXggIT09IG51bGwgfHwgdGhpcy5kcm9wUG9zaXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5kcm9wSG92ZXJJbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMuZHJvcFBvc2l0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsID0gZHJhZy5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG1pZFkgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjtcbiAgICBjb25zdCBwb3M6ICdhYm92ZScgfCAnYmVsb3cnID0gZHJhZy5jbGllbnRZIDwgbWlkWSA/ICdhYm92ZScgOiAnYmVsb3cnO1xuICAgIGlmICh0aGlzLmRyb3BIb3ZlckluZGV4ICE9PSByb3dJbmRleCB8fCB0aGlzLmRyb3BQb3NpdGlvbiAhPT0gcG9zKSB7XG4gICAgICB0aGlzLmRyb3BIb3ZlckluZGV4ID0gcm93SW5kZXg7XG4gICAgICB0aGlzLmRyb3BQb3NpdGlvbiA9IHBvcztcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbGVhcnMgdGhlIGluZGljYXRvciB3aGVuIHRoZSBjdXJzb3IgbGVhdmVzIHRoZSB0Ym9keSBlbnRpcmVseS4gKi9cbiAgb25UYm9keURyYWdMZWF2ZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlUm93UmVvcmRlcikgcmV0dXJuO1xuICAgIGNvbnN0IGRyYWcgPSBldmVudCBhcyBEcmFnRXZlbnQ7XG4gICAgY29uc3QgdGJvZHkgPSBkcmFnLmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IHJlbGF0ZWQgPSBkcmFnLnJlbGF0ZWRUYXJnZXQgYXMgTm9kZSB8IG51bGw7XG4gICAgaWYgKCF0Ym9keSB8fCAhcmVsYXRlZCB8fCAhdGJvZHkuY29udGFpbnMocmVsYXRlZCkpIHtcbiAgICAgIHRoaXMuY2xlYXJEcm9wSW5kaWNhdG9yKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckRyb3BJbmRpY2F0b3IoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHJvcEhvdmVySW5kZXggIT09IG51bGwgfHwgdGhpcy5kcm9wUG9zaXRpb24gIT09IG51bGwpIHtcbiAgICAgIHRoaXMuZHJvcEhvdmVySW5kZXggPSBudWxsO1xuICAgICAgdGhpcy5kcm9wUG9zaXRpb24gPSBudWxsO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgYSByb3cgZHJvcCBmcm9tIG5neC1kcmFnLWRyb3AuIFByZWZlcnMgdGhlIHRyYWNrZWQgZHJhZ292ZXIgcG9zaXRpb25cbiAgICogKHdoaWNoIHRoZSB1c2VyIGNhbiBzZWUgbGl2ZSB2aWEgdGhlIGluc2VydGlvbiBsaW5lKSBvdmVyIGBldmVudC5pbmRleGAgd2hlblxuICAgKiBjb21wdXRpbmcgdGhlIGZpbmFsIGluc2VydCBzbG90LiBFbWl0cyBhIGZyZXNoIGFycmF5IOKAlCBkb2VzIG5vdCBtdXRhdGUgYGRhdGFgLlxuICAgKi9cbiAgb25Sb3dEbmREcm9wKGV2ZW50OiBEbmREcm9wRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlUm93UmVvcmRlcikgcmV0dXJuO1xuICAgIGNvbnN0IGRyYWdnZWQgPSBldmVudD8uZGF0YTtcbiAgICBpZiAoZHJhZ2dlZCA9PSBudWxsKSB7XG4gICAgICB0aGlzLmNsZWFyRHJvcEluZGljYXRvcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmNvbXB1dGVkRGF0YSB8fCBbXTtcbiAgICBsZXQgcHJldmlvdXNJbmRleCA9IHNvdXJjZS5pbmRleE9mKGRyYWdnZWQpO1xuICAgIGlmIChwcmV2aW91c0luZGV4IDwgMCAmJiBkcmFnZ2VkICYmIGRyYWdnZWQuaWQgIT0gbnVsbCkge1xuICAgICAgcHJldmlvdXNJbmRleCA9IHNvdXJjZS5maW5kSW5kZXgociA9PiByICYmIHIuaWQgPT09IGRyYWdnZWQuaWQpO1xuICAgIH1cbiAgICBpZiAocHJldmlvdXNJbmRleCA8IDApIHtcbiAgICAgIHRoaXMuY2xlYXJEcm9wSW5kaWNhdG9yKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUHJlZmVyIHRoZSBpbmRpY2F0b3IgcG9zaXRpb24gKHdoYXQgdGhlIHVzZXIganVzdCBzYXcpIG92ZXIgZXZlbnQuaW5kZXguXG4gICAgbGV0IGluc2VydEluZGV4OiBudW1iZXI7XG4gICAgaWYgKHRoaXMuZHJvcEhvdmVySW5kZXggIT0gbnVsbCAmJiB0aGlzLmRyb3BQb3NpdGlvbikge1xuICAgICAgaW5zZXJ0SW5kZXggPSB0aGlzLmRyb3BQb3NpdGlvbiA9PT0gJ2Fib3ZlJyA/IHRoaXMuZHJvcEhvdmVySW5kZXggOiB0aGlzLmRyb3BIb3ZlckluZGV4ICsgMTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5pbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGluc2VydEluZGV4ID0gZXZlbnQuaW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc2VydEluZGV4ID0gc291cmNlLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0ID0gWy4uLnNvdXJjZV07XG4gICAgbmV4dC5zcGxpY2UocHJldmlvdXNJbmRleCwgMSk7XG4gICAgLy8gUmVtb3ZpbmcgdGhlIHNvdXJjZSBhYm92ZSB0aGUgdGFyZ2V0IHNoaWZ0cyBsYXRlciBpdGVtcyB1cCBieSBvbmUuXG4gICAgaWYgKHByZXZpb3VzSW5kZXggPCBpbnNlcnRJbmRleCkgaW5zZXJ0SW5kZXggLT0gMTtcbiAgICBpZiAoaW5zZXJ0SW5kZXggPCAwKSBpbnNlcnRJbmRleCA9IDA7XG4gICAgaWYgKGluc2VydEluZGV4ID4gbmV4dC5sZW5ndGgpIGluc2VydEluZGV4ID0gbmV4dC5sZW5ndGg7XG5cbiAgICB0aGlzLmNsZWFyRHJvcEluZGljYXRvcigpO1xuICAgIHRoaXMuZHJhZ2dlZFJvdyA9IG51bGw7XG5cbiAgICBpZiAoaW5zZXJ0SW5kZXggPT09IHByZXZpb3VzSW5kZXgpIHJldHVybjtcbiAgICBuZXh0LnNwbGljZShpbnNlcnRJbmRleCwgMCwgZHJhZ2dlZCk7XG4gICAgdGhpcy5yb3dSZW9yZGVyLmVtaXQoeyBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXg6IGluc2VydEluZGV4LCBvcmRlcmVkRGF0YTogbmV4dCB9KTtcbiAgfVxuXG4gIGNvcHlDZWxsSnNvblBhdGgocGF0aDogc3RyaW5nLCBldmVudDogRXZlbnQsIHNvdXJjZTogc3RyaW5nID0gJ2RiUXVlcnlSZXNwb25zZScpOiB2b2lkIHtcbiAgICBpZiAoIXBhdGgpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHBhdGgpLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gQ2FsbCB0aGUgaGFuZGxlciBpZiBwcm92aWRlZFxuICAgICAgaWYgKHRoaXMub25Kc29uUGF0aENvcGllZEhhbmRsZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLm9uSnNvblBhdGhDb3BpZWRIYW5kbGVyKHsgcGF0aCwgc291cmNlIH0pO1xuICAgICAgICB9IGNhdGNoIChoYW5kbGVyRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBvbkpzb25QYXRoQ29waWVkSGFuZGxlcjonLCBoYW5kbGVyRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjb3B5IGpzb25QYXRoOicsIGVycik7XG4gICAgICAvLyBTdGlsbCBjYWxsIHRoZSBoYW5kbGVyIGV2ZW4gb24gZmFpbHVyZSAoc2ltaWxhciB0byBhcGktc3RlcCBwYXR0ZXJuKVxuICAgICAgaWYgKHRoaXMub25Kc29uUGF0aENvcGllZEhhbmRsZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLm9uSnNvblBhdGhDb3BpZWRIYW5kbGVyKHsgcGF0aCwgc291cmNlIH0pO1xuICAgICAgICB9IGNhdGNoIChoYW5kbGVyRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBvbkpzb25QYXRoQ29waWVkSGFuZGxlcjonLCBoYW5kbGVyRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBDb21wdXRlIGdyaWQtdGVtcGxhdGUtY29sdW1ucyBzdHJpbmcgZnJvbSBjb2x1bW4gY29uZmlnXG4gIHByaXZhdGUgdXBkYXRlR3JpZFRlbXBsYXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHMgPSB0aGlzLnZpc2libGVDb2x1bW5zO1xuICAgIGlmICghY29scz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbXB1dGVkR3JpZFRlbXBsYXRlID0gJyc7XG4gICAgICB0aGlzLmNvbXB1dGVkQ29sdW1uV2lkdGhzID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGZpeGVkUHggPSBjb2xzLnJlZHVjZSgoc3VtLCBjKSA9PiBzdW0gKyAoYy5maXhlZFB4IHx8IDApLCAwKTtcbiAgICBjb25zdCBkeW5hbWljQ29scyA9IGNvbHMuZmlsdGVyKGMgPT4gIWMuZml4ZWRQeCk7XG4gICAgY29uc3QgdG90YWxXZWlnaHQgPSBkeW5hbWljQ29scy5yZWR1Y2UoKHN1bSwgYykgPT4gc3VtICsgKGMud2VpZ2h0IHx8IDEpLCAwKSB8fCAxO1xuXG4gICAgLy8gRmxvb3Igb24gdGhlIHRhYmxlIGl0c2VsZiA9IGV2ZXJ5IGNvbHVtbidzIG1pbmltdW0gd2lkdGggY29udHJpYnV0aW9uLiBGaXhlZFxuICAgIC8vIGNvbHVtbnMgY29udHJpYnV0ZSBgZml4ZWRQeGA7IGR5bmFtaWMgY29sdW1ucyBjb250cmlidXRlIGBtaW5XaWR0aGAgKG9yIDAgd2hlblxuICAgIC8vIHVuc2V0KS4gVGhlIHRlbXBsYXRlIGJpbmRzIHRoaXMgdmlhIGBbc3R5bGUubWluLXdpZHRoLnB4XWAgb24gdGhlIDx0YWJsZT4gc29cbiAgICAvLyBuYXJyb3cgY29udGFpbmVycyBmb3JjZSBob3Jpem9udGFsIHNjcm9sbCBpbnN0ZWFkIG9mIHNxdWlzaGluZyBjb2x1bW5zIHRvIDAuXG4gICAgdGhpcy5jb21wdXRlZFRhYmxlTWluV2lkdGggPSBjb2xzLnJlZHVjZShcbiAgICAgIChzdW0sIGMpID0+IHN1bSArIChjLmZpeGVkUHggJiYgYy5maXhlZFB4ID4gMCA/IGMuZml4ZWRQeCA6IChjLm1pbldpZHRoIHx8IDApKSxcbiAgICAgIDAsXG4gICAgKTtcblxuICAgIHRoaXMuY29tcHV0ZWRDb2x1bW5XaWR0aHMgPSBjb2xzLm1hcChjID0+IHtcbiAgICAgIGlmIChjLmZpeGVkUHggJiYgYy5maXhlZFB4ID4gMCkge1xuICAgICAgICAvLyBGaXhlZC13aWR0aCBjb2x1bW5zIHN0aWxsIHJlc3BlY3QgbWluV2lkdGggaW4gdGhlIChyYXJlKSBjYXNlIHRoZSBjb25zdW1lclxuICAgICAgICAvLyBjb25maWd1cmVkIGJvdGgg4oCUIGBtYXgoZml4ZWQsIG1pbilgIHBpY2tzIHdoaWNoZXZlciBpcyBsYXJnZXIuXG4gICAgICAgIHJldHVybiBjLm1pbldpZHRoICYmIGMubWluV2lkdGggPiBjLmZpeGVkUHhcbiAgICAgICAgICA/IGBtYXgoJHtjLmZpeGVkUHh9cHgsICR7Yy5taW5XaWR0aH1weClgXG4gICAgICAgICAgOiBgJHtjLmZpeGVkUHh9cHhgO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2hhcmUgPSAoYy53ZWlnaHQgfHwgMSkgLyB0b3RhbFdlaWdodDtcbiAgICAgIGNvbnN0IGR5bmFtaWNXaWR0aCA9IGBjYWxjKCgxMDAlIC0gJHtmaXhlZFB4fXB4KSAqICR7c2hhcmUudG9GaXhlZCg0KX0pYDtcbiAgICAgIC8vIER5bmFtaWMtc2hhcmUgY29sdW1ucyBjYW4gY29sbGFwc2UgdG8gfjAgd2hlbiB0aGUgdGFibGUgaXMgbmFycm93ZXIgdGhhblxuICAgICAgLy8gKHN1bSBvZiBmaXhlZCB3aWR0aHMpICsgdGhlIHNoYXJlIHRoZXknZCBjb21wdXRlIHRvLiBVc2luZyBDU1MgYG1heCgpYCBmbG9vcnNcbiAgICAgIC8vIHRoZSBjb2x1bW4gYXQgYG1pbldpZHRoYCBzbyBpdCBncm93cyBuYXR1cmFsbHkgYXMgdGhlIHRhYmxlIHdpZGVucyBidXQgbmV2ZXJcbiAgICAgIC8vIHNocmlua3MgYmVsb3cgdGhlIGNvbmZpZ3VyZWQgcGl4ZWwgbWluaW11bS4gV2l0aCBgdGFibGUtbGF5b3V0OiBmaXhlZGAsIHRoZVxuICAgICAgLy8gPGNvbD4gd2lkdGggaXMgYXV0aG9yaXRhdGl2ZSDigJQgd2l0aG91dCBtYXgoKSBoZXJlIHRoZSBjZWxsLWxldmVsIGBtaW4td2lkdGhgXG4gICAgICAvLyB3ZSBzZXQgb24gPHRoPi88dGQ+IGlzIGlnbm9yZWQgYW5kIGNvbHVtbnMgdmlzdWFsbHkgZGlzYXBwZWFyIGF0IG5hcnJvdyB3aWR0aHMuXG4gICAgICByZXR1cm4gYy5taW5XaWR0aCAmJiBjLm1pbldpZHRoID4gMFxuICAgICAgICA/IGBtYXgoJHtjLm1pbldpZHRofXB4LCAke2R5bmFtaWNXaWR0aH0pYFxuICAgICAgICA6IGR5bmFtaWNXaWR0aDtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbnMpIHtcbiAgICAgIHRoaXMuY29tcHV0ZWRHcmlkVGVtcGxhdGUgPSB0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29tcHV0ZWRHcmlkVGVtcGxhdGUgPSB0aGlzLmNvbXB1dGVkQ29sdW1uV2lkdGhzLmpvaW4oJyAnKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZWxlY3Rpb24gaGVscGVyc1xuICBpc1Jvd1NlbGVjdGFibGUocm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXJvdykgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgdGhpcy5yb3dTZWxlY3RhYmxlICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICEhdGhpcy5yb3dTZWxlY3RhYmxlKHJvdyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgYWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm93cyA9ICh0aGlzLmRhdGEgfHwgW10pLmZpbHRlcigocikgPT4gdGhpcy5pc1Jvd1NlbGVjdGFibGUocikpO1xuICAgIGlmICghcm93cy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gcm93cy5ldmVyeShyID0+ICEhcj8uaXNTZWxlY3RlZCk7XG4gIH1cblxuICBnZXQgc29tZVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJvd3MgPSAodGhpcy5kYXRhIHx8IFtdKS5maWx0ZXIoKHIpID0+IHRoaXMuaXNSb3dTZWxlY3RhYmxlKHIpKTtcbiAgICBpZiAoIXJvd3MubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgYW55U2VsZWN0ZWQgPSByb3dzLnNvbWUociA9PiAhIXI/LmlzU2VsZWN0ZWQpO1xuICAgIHJldHVybiBhbnlTZWxlY3RlZCAmJiAhdGhpcy5hbGxTZWxlY3RlZDtcbiAgfVxuXG4gIG9uU2VsZWN0QWxsQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHRoaXMudG9nZ2xlU2VsZWN0QWxsKHRhcmdldC5jaGVja2VkKTtcbiAgfVxuXG4gIG9uUm93U2VsZWN0Q2hhbmdlKGV2ZW50OiBFdmVudCwgcm93OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSb3dTZWxlY3RhYmxlKHJvdykpIHtcbiAgICAgIHJvdy5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHJvdy5pc1NlbGVjdGVkID0gdGFyZ2V0LmNoZWNrZWQ7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGwoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLmRhdGEgfHwgW107XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgaWYgKHJvdykge1xuICAgICAgICByb3cuaXNTZWxlY3RlZCA9IHRoaXMuaXNSb3dTZWxlY3RhYmxlKHJvdykgPyBjaGVja2VkIDogZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT0gU29ydGluZyBzdXBwb3J0ID09PT09XG4gIHByaXZhdGUgX3NvcnRBY3RpdmU/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3NvcnREaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb21wdXRlZERhdGEoKTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5kYXRhIHx8IFtdO1xuICAgIGlmICghdGhpcy5lbmFibGVMb2NhbFNvcnQgfHwgIXRoaXMuX3NvcnRBY3RpdmUgfHwgIXRoaXMuX3NvcnREaXJlY3Rpb24pIHtcbiAgICAgIHRoaXMuY29tcHV0ZWREYXRhID0gc291cmNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2wgPSB0aGlzLnZpc2libGVDb2x1bW5zLmZpbmQoYyA9PiBjLmZpZWxkSWQgPT09IHRoaXMuX3NvcnRBY3RpdmUpO1xuICAgIGlmICghY29sIHx8ICFjb2wuZmllbGRWYWx1ZSkge1xuICAgICAgdGhpcy5jb21wdXRlZERhdGEgPSBzb3VyY2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpciA9IHRoaXMuX3NvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xuICAgIGNvbnN0IGZpZWxkUGF0aCA9IGNvbC5maWVsZFZhbHVlO1xuICAgIGNvbnN0IG91dCA9IFsuLi5zb3VyY2VdO1xuICAgIG91dC5zb3J0KChhLCBiKSA9PiBkaXIgKiB0aGlzLmNvbXBhcmVWYWx1ZXModGhpcy5nZXRDZWxsVmFsdWUoYSwgZmllbGRQYXRoKSwgdGhpcy5nZXRDZWxsVmFsdWUoYiwgZmllbGRQYXRoKSkpO1xuICAgIHRoaXMuY29tcHV0ZWREYXRhID0gb3V0O1xuICB9XG5cbiAgLy8gQ29tcHV0ZWQgbG9hZGluZyBmbGFncyB0byBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgZ2V0IHNob3dUYWJsZUxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNUYWJsZUxvYWRpbmcgPz8gZmFsc2U7XG4gIH1cblxuICBnZXQgc2hvd1RhYmxlRGF0YUxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNUYWJsZURhdGFMb2FkaW5nID8/IGZhbHNlO1xuICB9XG5cbiAgLy8gVHJ1ZSB3aGVuIHRhYmxlIGhhcyBubyBkYXRhIGFuZCBpcyBub3QgY3VycmVudGx5IGxvYWRpbmcg4oCUIHVzZWQgdG8gc2hvdyBhbiBlbXB0eSBzdGF0ZVxuICBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBhbnlMb2FkaW5nID0gdGhpcy5zaG93VGFibGVMb2FkaW5nIHx8IHRoaXMuc2hvd1RhYmxlRGF0YUxvYWRpbmc7XG4gICAgcmV0dXJuICFhbnlMb2FkaW5nICYmICghKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEubGVuZ3RoKSB8fCB0aGlzLmRhdGEubGVuZ3RoID09PSAwKTtcbiAgfVxuXG4gIGlzU29ydGVkQXNjKGNvbElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydEFjdGl2ZSA9PT0gY29sSWQgJiYgdGhpcy5fc29ydERpcmVjdGlvbiA9PT0gJ2FzYyc7XG4gIH1cblxuICBpc1NvcnRlZERlc2MoY29sSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zb3J0QWN0aXZlID09PSBjb2xJZCAmJiB0aGlzLl9zb3J0RGlyZWN0aW9uID09PSAnZGVzYyc7XG4gIH1cblxuICB0b2dnbGVTb3J0KGNvbDogRHluYW1pY1RhYmxlQ29sdW1uKTogdm9pZCB7XG4gICAgaWYgKCFjb2w/LnNvcnRhYmxlKSByZXR1cm47XG4gICAgY29uc3QgY29sSWQgPSBjb2wuZmllbGRJZDtcbiAgICBpZiAodGhpcy5fc29ydEFjdGl2ZSAhPT0gY29sSWQpIHtcbiAgICAgIHRoaXMuX3NvcnRBY3RpdmUgPSBjb2xJZDtcbiAgICAgIHRoaXMuX3NvcnREaXJlY3Rpb24gPSAnYXNjJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY3ljbGUgYXNjIC0+IGRlc2MgLT4gbnVsbCAtPiBhc2NcbiAgICAgIGlmICh0aGlzLl9zb3J0RGlyZWN0aW9uID09PSAnYXNjJykgdGhpcy5fc29ydERpcmVjdGlvbiA9ICdkZXNjJztcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3NvcnREaXJlY3Rpb24gPT09ICdkZXNjJykgdGhpcy5fc29ydERpcmVjdGlvbiA9IG51bGw7XG4gICAgICBlbHNlIHRoaXMuX3NvcnREaXJlY3Rpb24gPSAnYXNjJztcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb21wdXRlZERhdGEoKTtcbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdCh7IGZpZWxkSWQ6IHRoaXMuX3NvcnRBY3RpdmUsIGZpZWxkVmFsdWU6IGNvbC5maWVsZFZhbHVlLCBkaXJlY3Rpb246IHRoaXMuX3NvcnREaXJlY3Rpb24gfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbXBhcmVWYWx1ZXMoYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xuICAgIGlmIChhID09IG51bGwgJiYgYiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICBpZiAoYSA9PSBudWxsKSByZXR1cm4gMTsgLy8gbnVsbHMgbGFzdCBpbiBhc2MgKGhhbmRsZWQgYnkgZGlyIG11bHRpcGxpZXIpXG4gICAgaWYgKGIgPT0gbnVsbCkgcmV0dXJuIC0xO1xuXG4gICAgY29uc3QgbnVtQSA9IHR5cGVvZiBhID09PSAnbnVtYmVyJyA/IGEgOiBOdW1iZXIoYSk7XG4gICAgY29uc3QgbnVtQiA9IHR5cGVvZiBiID09PSAnbnVtYmVyJyA/IGIgOiBOdW1iZXIoYik7XG4gICAgY29uc3QgYUlzTnVtID0gIWlzTmFOKG51bUEpICYmIGEgIT09ICcnICYmIGEgIT09IG51bGwgJiYgYSAhPT0gZmFsc2U7XG4gICAgY29uc3QgYklzTnVtID0gIWlzTmFOKG51bUIpICYmIGIgIT09ICcnICYmIGIgIT09IG51bGwgJiYgYiAhPT0gZmFsc2U7XG4gICAgaWYgKGFJc051bSAmJiBiSXNOdW0pIHtcbiAgICAgIGlmIChudW1BIDwgbnVtQikgcmV0dXJuIC0xO1xuICAgICAgaWYgKG51bUEgPiBudW1CKSByZXR1cm4gMTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIERhdGUgZGV0ZWN0aW9uOiBhdHRlbXB0IHBhcnNlIHdoZW4gYm90aCB2YWx1ZXMgYXJlIHN0cmluZ3MgYW5kIHBhcnNlYWJsZVxuICAgIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGIgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB0c0EgPSBEYXRlLnBhcnNlKGEpO1xuICAgICAgY29uc3QgdHNCID0gRGF0ZS5wYXJzZShiKTtcbiAgICAgIGlmICghaXNOYU4odHNBKSAmJiAhaXNOYU4odHNCKSkge1xuICAgICAgICBpZiAodHNBIDwgdHNCKSByZXR1cm4gLTE7XG4gICAgICAgIGlmICh0c0EgPiB0c0IpIHJldHVybiAxO1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIC8vIGxvY2FsZUNvbXBhcmUsIGNhc2UtaW5zZW5zaXRpdmVcbiAgICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYiwgdW5kZWZpbmVkLCB7IHNlbnNpdGl2aXR5OiAnYmFzZScsIG51bWVyaWM6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgdG8gc3RyaW5nIGNvbXBhcmlzb25cbiAgICBjb25zdCBzYSA9IFN0cmluZyhhKTtcbiAgICBjb25zdCBzYiA9IFN0cmluZyhiKTtcbiAgICByZXR1cm4gc2EubG9jYWxlQ29tcGFyZShzYiwgdW5kZWZpbmVkLCB7IHNlbnNpdGl2aXR5OiAnYmFzZScsIG51bWVyaWM6IHRydWUgfSk7XG4gIH1cbn1cblxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXVpLXJvb3RcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1yZWxhdGl2ZVwiIFtjbGFzcy5jcWEtbWF4LWgtWzEwMHB4XV09XCJzaG93VGFibGVMb2FkaW5nXCI+XG4gICAgPGNxYS1mdWxsLXRhYmxlLWxvYWRlciAqbmdJZj1cInNob3dUYWJsZUxvYWRpbmdcIj48L2NxYS1mdWxsLXRhYmxlLWxvYWRlcj5cbiAgICA8Y3FhLXRhYmxlLWRhdGEtbG9hZGVyICpuZ0lmPVwic2hvd1RhYmxlRGF0YUxvYWRpbmdcIj48L2NxYS10YWJsZS1kYXRhLWxvYWRlcj5cbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZS1pbm5lciBjcWEtdy1mdWxsIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLWdyYXktMjAwXCJcbiAgICAgICAgICAgW2NsYXNzLmlzLWxvYWRpbmddPVwidHJ1ZVwiXG4gICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29tcHV0ZWRUYWJsZU1pbldpZHRoIHx8IG51bGxcIlxuICAgICAgICAgICAqbmdJZj1cIiFzaG93VGFibGVMb2FkaW5nXCI+XG4gICAgICA8Y29sZ3JvdXA+XG4gICAgICAgIDxjb2wgKm5nSWY9XCJlbmFibGVSb3dSZW9yZGVyXCIgc3R5bGU9XCJ3aWR0aDogNDRweFwiIC8+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHdpZHRoIG9mIGNvbXB1dGVkQ29sdW1uV2lkdGhzOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIj5cbiAgICAgICAgICA8Y29sIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiIC8+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9jb2xncm91cD5cblxuICAgICAgPHRoZWFkICpuZ0lmPVwiZGF0YT8ubGVuZ3RoXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cInRhYmxlLWhlYWRlciBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZVJvd1Jlb3JkZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCByZW9yZGVyLWhhbmRsZS1jZWxsIGNxYS1weS1bMTMuMjVweF0gY3FhLXB4LVsxMC41cHhdIGNxYS10ZXh0LXhzIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtYmctWyNlZmYwZjddIGNxYS10ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVvcmRlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtc3Itb25seVwiPlJlb3JkZXI8L3NwYW4+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiPlxuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgY3FhLXB5LVsxMy4yNXB4XSBjcWEtcHgtWzEwLjVweF0gY3FhLXRleHQteHMgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMzNzQxNTFdIGNxYS1iZy1bI2VmZjBmN11cIlxuICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC5taW5XaWR0aFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICAgICBjb2wuZmllbGRJZCArICctY2VsbCcsXG4gICAgICAgICAgICAgICAgY29sLmFsaWduID09PSAnY2VudGVyJyA/ICdjcWEtdGV4dC1jZW50ZXInIDogY29sLmFsaWduID09PSAncmlnaHQnID8gJ2NxYS10ZXh0LXJpZ2h0JyA6ICdjcWEtdGV4dC1sZWZ0J1xuICAgICAgICAgICAgICBdXCI+XG4gICAgICAgICAgICAgIDwhLS0gQnVpbHQtaW4gc2VsZWN0LWFsbCBmb3IgY2hlY2tib3ggY29sdW1uIHdoZW4gZW5hYmxlZCBhbmQgbm8gY3VzdG9tIGhlYWRlciB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmZpZWxkSWQgPT09ICdjaGVja2JveCcgJiYgZW5hYmxlU2VsZWN0QWxsICYmICFnZXRIZWFkZXJUZW1wbGF0ZShjb2wuZmllbGRJZCk7IGVsc2UgaGVhZGVyVHBsT3JEZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiY2hlY2tib3hcIiBhcmlhLWxhYmVsPVwiU2VsZWN0IGFsbCByb3dzXCIgW2NoZWNrZWRdPVwiYWxsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic29tZVNlbGVjdGVkXCIgKGNoYW5nZSk9XCJvblNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCIgY2xhc3M9XCJoaWRkZW4tY2hlY2tib3hcIiAvPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY2hlY2tib3gtbGFiZWxcIj48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNoZWFkZXJUcGxPckRlZmF1bHQ+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEhlYWRlclRlbXBsYXRlKGNvbC5maWVsZElkKSBhcyBoZWFkZXJUcGw7IGVsc2UgZGVmYXVsdEhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRwbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuc29ydGFibGU7IGVsc2UgcGxhaW5IZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJoZWFkZXItdGV4dCBjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEgY3FhLXB4LTBcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTb3J0KGNvbClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidTb3J0IGJ5ICcgKyAoY29sLmZpZWxkTmFtZSB8fCBjb2wuZmllbGRJZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMi4zcHhdIGNxYS1sZWFkaW5nLVsxNy41cHhdIGNxYS10ZXh0LVsjMEEwQTBBXSBjcWEtZm9udC1tZWRpdW1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sLmZpZWxkTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzU29ydGVkQXNjKGNvbC5maWVsZElkKVwiPuKWsjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzU29ydGVkRGVzYyhjb2wuZmllbGRJZClcIj7ilrw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWluSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlci10ZXh0XCI+e3sgY29sLmZpZWxkTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuXG4gICAgICA8dGJvZHkgY2xhc3M9XCJ0YWJsZS1ib2R5IGNxYS13LWZ1bGxcIlxuICAgICAgICBbZG5kRHJvcHpvbmVdPVwiWydjcWEtcm93J11cIlxuICAgICAgICBbZG5kRGlzYWJsZUlmXT1cIiFlbmFibGVSb3dSZW9yZGVyXCJcbiAgICAgICAgZG5kRWZmZWN0QWxsb3dlZD1cIm1vdmVcIlxuICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uVGJvZHlEcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgICAgIChkbmREcm9wKT1cIm9uUm93RG5kRHJvcCgkZXZlbnQpXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cInRhYmxlLXJvdyBjcWEtYmctc3VyZmFjZS1kZWZhdWx0IGhvdmVyOmNxYS1iZy1zdXJmYWNlLWhvdmVyXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcm93IG9mIGNvbXB1dGVkRGF0YTsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInJvdz8uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1yb3ctZHJhZ2dhYmxlXT1cImVuYWJsZVJvd1Jlb3JkZXJcIlxuICAgICAgICAgIFtjbGFzcy5jcWEtcm93LWRyb3AtYWJvdmVdPVwiZHJvcEhvdmVySW5kZXggPT09IHJvd0luZGV4ICYmIGRyb3BQb3NpdGlvbiA9PT0gJ2Fib3ZlJ1wiXG4gICAgICAgICAgW2NsYXNzLmNxYS1yb3ctZHJvcC1iZWxvd109XCJkcm9wSG92ZXJJbmRleCA9PT0gcm93SW5kZXggJiYgZHJvcFBvc2l0aW9uID09PSAnYmVsb3cnXCJcbiAgICAgICAgICBbZG5kRHJhZ2dhYmxlXT1cInJvd1wiXG4gICAgICAgICAgW2RuZERpc2FibGVJZl09XCIhZW5hYmxlUm93UmVvcmRlclwiXG4gICAgICAgICAgZG5kRWZmZWN0QWxsb3dlZD1cIm1vdmVcIlxuICAgICAgICAgIGRuZFR5cGU9XCJjcWEtcm93XCJcbiAgICAgICAgICAoZG5kU3RhcnQpPVwib25Sb3dEcmFnU3RhcnQocm93KVwiXG4gICAgICAgICAgKGRuZEVuZCk9XCJvblJvd0RyYWdFbmQoKVwiXG4gICAgICAgICAgKGRyYWdvdmVyKT1cIm9uUm93RHJhZ092ZXIoJGV2ZW50LCByb3dJbmRleClcIj5cbiAgICAgICAgICA8dGQgKm5nSWY9XCJlbmFibGVSb3dSZW9yZGVyXCIgY2xhc3M9XCJjZWxsIHJlb3JkZXItaGFuZGxlLWNlbGwgY3FhLXB4LVsxMC41cHhdIGNxYS1weS1bMTFweF0gY3FhLXRleHQtY2VudGVyXCIgW2F0dHIudGl0bGVdPVwicmVvcmRlckhhbmRsZVRvb2x0aXBcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVvcmRlci1oYW5kbGUtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNlwiIGN5PVwiM1wiIHI9XCIxLjI1XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvY2lyY2xlPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiM1wiIHI9XCIxLjI1XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvY2lyY2xlPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI2XCIgY3k9XCI4XCIgcj1cIjEuMjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCI4XCIgcj1cIjEuMjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjZcIiBjeT1cIjEzXCIgcj1cIjEuMjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIxM1wiIHI9XCIxLjI1XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvY2lyY2xlPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiB2aXNpYmxlQ29sdW1uczsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJjZWxsIGNxYS1weC1bMTAuNXB4XSBjcWEtcHktWzExcHhdXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wubWluV2lkdGhcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAgICAgY29sLmZpZWxkSWQgKyAnLWNlbGwnLFxuICAgICAgICAgICAgICAgIGNvbC5hbGlnbiA9PT0gJ2NlbnRlcicgPyAnY3FhLXRleHQtY2VudGVyJyA6IGNvbC5hbGlnbiA9PT0gJ3JpZ2h0JyA/ICdjcWEtdGV4dC1yaWdodCcgOiAnY3FhLXRleHQtbGVmdCcsXG4gICAgICAgICAgICAgICAgY2VsbEpzb25QYXRoR2V0dGVyICYmIGNvbC5maWVsZElkICE9PSAnY2hlY2tib3gnICYmIGNvbC5maWVsZElkICE9PSAnYWN0aW9ucycgPyAnY3FhLWN1cnNvci1wb2ludGVyJyA6ICcnXG4gICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiY2VsbEpzb25QYXRoR2V0dGVyICYmIGNvbD8uZmllbGRJZCAhPT0gJ2NoZWNrYm94JyAmJiBjb2w/LmZpZWxkSWQgIT09ICdhY3Rpb25zJyAmJiBjb3B5Q2VsbEpzb25QYXRoKGNlbGxKc29uUGF0aEdldHRlcihyb3dJbmRleCwgY29sPy5maWVsZElkLCByb3cpLCAkZXZlbnQsICdkYlF1ZXJ5UmVzcG9uc2UnKVwiPlxuICAgICAgICAgICAgICA8IS0tIEJ1aWx0LWluIGNoZWNrYm94IGNlbGwgd2hlbiBubyBjdXN0b20gdGVtcGxhdGUgaXMgcHJvdmlkZWQgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuZmllbGRJZCA9PT0gJ2NoZWNrYm94JyAmJiAhZ2V0Q2VsbFRlbXBsYXRlKGNvbC5maWVsZElkKTsgZWxzZSByZWd1bGFyQ2VsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY2hlY2tib3hcIiBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAgICAgICBjb2wuYWxpZ24gPT09ICdjZW50ZXInID8gJ2NxYS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlcicgOiBjb2wuYWxpZ24gPT09ICdyaWdodCcgPyAnY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kJyA6ICcnXG4gICAgICAgICAgICAgICAgXVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ3Jvdy1jaGVja2JveC0nICsgcm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2VsZWN0IHJvd1wiXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJvdz8uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNSb3dTZWxlY3RhYmxlKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUm93U2VsZWN0Q2hhbmdlKCRldmVudCwgcm93KVwiIC8+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tY2hlY2tib3gtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUub3BhY2l0eV09XCIhaXNSb3dTZWxlY3RhYmxlKHJvdykgPyAnMC40NScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmN1cnNvcl09XCIhaXNSb3dTZWxlY3RhYmxlKHJvdykgPyAnbm90LWFsbG93ZWQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5wb2ludGVyLWV2ZW50c109XCIhaXNSb3dTZWxlY3RhYmxlKHJvdykgPyAnbm9uZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZm9yXT1cIidyb3ctY2hlY2tib3gtJyArIHJvd0luZGV4XCI+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyZWd1bGFyQ2VsbD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q2VsbFRlbXBsYXRlKGNvbC5maWVsZElkKSBhcyBjZWxsVHBsOyBlbHNlIGRlZmF1bHRDZWxsXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFRwbDsgY29udGV4dDogeyRpbXBsaWNpdDogcm93LCByb3c6IHJvdywgdmFsdWU6IGdldENlbGxWYWx1ZShyb3csIGNvbC5maWVsZFZhbHVlKX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFJlbmRlcmVkVmFsdWUocm93LCBjb2wpIGFzIHJlbmRlcmVkVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ29tcG9uZW50KHJlbmRlcmVkVmFsdWUpOyBlbHNlIG5vbkNvbXBvbmVudENlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFxuICAgICAgICAgICAgICAgICAgICAgICAgY3FhQ2VsbENvbnRhaW5lciBcbiAgICAgICAgICAgICAgICAgICAgICAgICNjZWxsQ29udGFpbmVyPVwiY3FhQ2VsbENvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50Q29uZmlnXT1cInJlbmRlcmVkVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xJZF09XCJjb2wuZmllbGRJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub25Db21wb25lbnRDZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0h0bWxTdHJpbmcocmVuZGVyZWRWYWx1ZSk7IGVsc2UgdGV4dENlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtbGVhZGluZy1bMTdweF1cIiBbaW5uZXJIVE1MXT1cImdldFNhbml0aXplZEh0bWwocmVuZGVyZWRWYWx1ZSlcIiBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wuYWxpZ24gPT09ICdjZW50ZXInID8gJ2NxYS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlcicgOiBjb2wuYWxpZ24gPT09ICdyaWdodCcgPyAnY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgXVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGV4dENlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMzc0MTUxXVwiIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5hbGlnbiA9PT0gJ2NlbnRlcicgPyAnY3FhLWZsZXggY3FhLWp1c3RpZnktY2VudGVyJyA6IGNvbC5hbGlnbiA9PT0gJ3JpZ2h0JyA/ICdjcWEtZmxleCBjcWEtanVzdGlmeS1lbmQnIDogJydcbiAgICAgICAgICAgICAgICAgICAgICBdXCI+e3sgcmVuZGVyZWRWYWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|