@wavemaker/app-ng-runtime 11.6.0-next.24748 → 11.6.0-next.52051
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.
- app-ng-runtime/components/base/bundles/index.umd.js +1 -0
- app-ng-runtime/components/base/esm2020/widgets/common/partial/partial.directive.mjs +2 -1
- app-ng-runtime/components/base/fesm2015/index.mjs +1 -0
- app-ng-runtime/components/base/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/base/fesm2020/index.mjs +1 -0
- app-ng-runtime/components/base/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/chart/bundles/index.umd.js +3 -1
- app-ng-runtime/components/chart/esm2020/chart.component.mjs +4 -2
- app-ng-runtime/components/chart/fesm2015/index.mjs +3 -1
- app-ng-runtime/components/chart/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/chart/fesm2020/index.mjs +3 -1
- app-ng-runtime/components/chart/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/bundles/index.umd.js +3 -2
- app-ng-runtime/components/data/table/esm2020/table.component.mjs +4 -3
- app-ng-runtime/components/data/table/fesm2015/index.mjs +3 -2
- app-ng-runtime/components/data/table/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/fesm2020/index.mjs +3 -2
- app-ng-runtime/components/data/table/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/table.component.d.ts +1 -1
- app-ng-runtime/components/navigation/popover/bundles/index.umd.js +2 -1
- app-ng-runtime/components/navigation/popover/esm2020/popover.component.mjs +3 -2
- app-ng-runtime/components/navigation/popover/fesm2015/index.mjs +2 -1
- app-ng-runtime/components/navigation/popover/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/popover/fesm2020/index.mjs +2 -1
- app-ng-runtime/components/navigation/popover/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/prefab/bundles/index.umd.js +1 -0
- app-ng-runtime/components/prefab/esm2020/prefab-container/prefab-container.directive.mjs +2 -1
- app-ng-runtime/components/prefab/fesm2015/index.mjs +1 -0
- app-ng-runtime/components/prefab/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/prefab/fesm2020/index.mjs +1 -0
- app-ng-runtime/components/prefab/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/scripts/datatable/datatable.js +3 -3
|
@@ -884,7 +884,9 @@
|
|
|
884
884
|
// Applying the font related styles for the chart
|
|
885
885
|
const setTextStyle = (properties, id) => {
|
|
886
886
|
const charttext = d3.select('#wmChart' + id + ' svg').selectAll('text');
|
|
887
|
-
charttext.
|
|
887
|
+
if (!charttext.empty()) {
|
|
888
|
+
charttext.style(properties);
|
|
889
|
+
}
|
|
888
890
|
};
|
|
889
891
|
const angle = d => {
|
|
890
892
|
const a = (d.startAngle + d.endAngle) * 90 / Math.PI - 90;
|
|
@@ -105,7 +105,9 @@ const getValidAliasName = aliasName => aliasName ? aliasName.replace(/\./g, '$')
|
|
|
105
105
|
// Applying the font related styles for the chart
|
|
106
106
|
const setTextStyle = (properties, id) => {
|
|
107
107
|
const charttext = d3.select('#wmChart' + id + ' svg').selectAll('text');
|
|
108
|
-
charttext.
|
|
108
|
+
if (!charttext.empty()) {
|
|
109
|
+
charttext.style(properties);
|
|
110
|
+
}
|
|
109
111
|
};
|
|
110
112
|
const angle = d => {
|
|
111
113
|
const a = (d.startAngle + d.endAngle) * 90 / Math.PI - 90;
|
|
@@ -997,4 +999,4 @@ ChartComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ChartCompone
|
|
|
997
999
|
type: HostBinding,
|
|
998
1000
|
args: ['class.panel']
|
|
999
1001
|
}] }); })();
|
|
1000
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0L3NyYy9jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnQvc3JjL2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQVcsTUFBTSxlQUFlLENBQUM7QUFFdEgsT0FBTyxFQUNILEdBQUcsRUFDSCxVQUFVLEVBQ1YsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGNBQWMsRUFDZCxVQUFVLEVBQ1YsU0FBUyxFQUdaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0Isa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxHQUFJLE1BQU0scUJBQXFCLENBQUM7QUFFL0gsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0lDZHpOLHlCQUEyRTs7O0lBQS9CLGdFQUF3Qjs7O0lBSjVFLDhCQUF5QyxZQUFBLGFBQUE7SUFFVixvQkFBOEU7SUFBQSxpQkFBTTtJQUMzRyx5QkFBK0M7SUFDL0MscUVBQTJFO0lBQy9FLGlCQUFLLEVBQUE7OztJQUh5QixlQUF5QztJQUF6Qyx1RUFBeUM7SUFBQyw0Q0FBNEI7SUFDM0UsZUFBbUI7SUFB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QUMsSUFBSTs2RUFxRFQsS0FBSztrQkFBaEMsV0FBVzttQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIEluamVjdG9yLCBWaWV3RW5jYXBzdWxhdGlvbiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICAgIEFwcCxcbiAgICBEYXRhU291cmNlLFxuICAgIGdldENsb25lZE9iamVjdCxcbiAgICBpc0RhdGFTb3VyY2VFcXVhbCxcbiAgICBpc0VtcHR5T2JqZWN0LFxuICAgIGlzTnVtYmVyVHlwZSxcbiAgICBwcmV0dGlmeUxhYmVscyxcbiAgICByZW1vdmVBdHRyLFxuICAgIHRyaWdnZXJGbixcbiAgICBpc01vYmlsZUFwcCxcbiAgICBub29wXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IEFQUExZX1NUWUxFU19UWVBFLCBJUmVkcmF3YWJsZUNvbXBvbmVudCwgcHJvdmlkZUFzV2lkZ2V0UmVmLCBTdHlsYWJsZUNvbXBvbmVudCwgc3R5bGVyLCAgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vY2hhcnQucHJvcHMnO1xuaW1wb3J0IHsgYWxsU2hhcGVzLCBnZXREYXRlTGlzdCwgZ2V0U2FtcGxlRGF0YSwgaW5pdENoYXJ0LCBpc0FyZWFDaGFydCwgaXNBeGlzRG9tYWluVmFsaWQsIGlzQmFyQ2hhcnQsIGlzQnViYmxlQ2hhcnQsIGlzQ2hhcnREYXRhQXJyYXksIGlzQ2hhcnREYXRhSlNPTiwgaXNMaW5lVHlwZUNoYXJ0LCBpc1BpZVR5cGUsIHBvc3RQbG90Q2hhcnRQcm9jZXNzIH0gZnJvbSAnLi9jaGFydC51dGlscyc7XG5cbmRlY2xhcmUgY29uc3QgJCwgXywgZDMsIG52O1xuXG5jb25zdCBXSURHRVRfQ09ORklHID0ge3dpZGdldFR5cGU6ICd3bS1jaGFydCcsIGhvc3RDbGFzczogJ2FwcC1jaGFydCd9O1xuXG5jb25zdCBvcHRpb25zID0ge1xuICAgICAgICAnQnViYmxlJyA6IFsnYnViYmxlc2l6ZScsICdzaGFwZSddXG4gICAgfSxcbiAgICBOT05FID0gJ25vbmUnLFxuICAgIGFkdmFuY2VEYXRhUHJvcHMgPSBbJ2FnZ3JlZ2F0aW9uJywgJ2FnZ3JlZ2F0aW9uY29sdW1uJywgJ2dyb3VwYnknLCAnb3JkZXJieSddLFxuICAgIC8vIFhQYXRocyB0byBnZXQgYWN0dWFsIGRhdGEgb2YgZGF0YSBwb2ludHMgaW4gY2hhcnRzXG4gICAgY2hhcnREYXRhUG9pbnRYcGF0aCA9IHtcbiAgICAgICAgJ0NvbHVtbicgICAgICAgICA6ICdyZWN0Lm52LWJhcicsXG4gICAgICAgICdCYXInICAgICAgICAgICAgOiAnZy5udi1iYXInLFxuICAgICAgICAnQXJlYScgICAgICAgICAgIDogJy5udi1zdGFja2VkYXJlYSAubnYtcG9pbnQnLFxuICAgICAgICAnQ3VtdWxhdGl2ZSBMaW5lJzogJy5udi1jdW11bGF0aXZlTGluZSAubnYtc2NhdHRlcldyYXAgcGF0aC5udi1wb2ludCcsXG4gICAgICAgICdMaW5lJyAgICAgICAgICAgOiAnLm52LWxpbmVDaGFydCAubnYtc2NhdHRlcldyYXAgcGF0aC5udi1wb2ludCcsXG4gICAgICAgICdQaWUnICAgICAgICAgICAgOiAnLm52LXBpZUNoYXJ0IC5udi1zbGljZSBwYXRoJyxcbiAgICAgICAgJ0RvbnV0JyAgICAgICAgICA6ICcubnYtcGllQ2hhcnQgLm52LXNsaWNlIHBhdGgnLFxuICAgICAgICAnQnViYmxlJyAgICAgICAgIDogJy5udi1zY2F0dGVyQ2hhcnQgLm52LXBvaW50LXBhdGhzIHBhdGgnXG4gICAgfSxcbiAgICAvLyBhbGwgcHJvcGVydGllcyBvZiB0aGUgY2hhcnRcbiAgICBhbGxPcHRpb25zID0gWydidWJibGVzaXplJywgJ3NoYXBlJ10sXG4gICAgc3R5bGVQcm9wcyA9IHtcbiAgICAgICAgJ2ZvbnR1bml0JyAgICAgIDogJ2ZvbnQtc2l6ZScsXG4gICAgICAgICdmb250c2l6ZScgICAgICA6ICdmb250LXNpemUnLFxuICAgICAgICAnY29sb3InICAgICAgICAgOiAnZmlsbCcsXG4gICAgICAgICdmb250ZmFtaWx5JyAgICA6ICdmb250LWZhbWlseScsXG4gICAgICAgICdmb250d2VpZ2h0JyAgICA6ICdmb250LXdlaWdodCcsXG4gICAgICAgICdmb250c3R5bGUnICAgICA6ICdmb250LXN0eWxlJyxcbiAgICAgICAgJ3RleHRkZWNvcmF0aW9uJzogJ3RleHQtZGVjb3JhdGlvbidcbiAgICB9LFxuICAgIC8vIEdldHRpbmcgdGhlIHJlbGV2YW50IGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBvcHRpb25cbiAgICBhZ2dyZWdhdGlvbkZuTWFwID0ge1xuICAgICAgICAnYXZlcmFnZScgOiAnQVZHJyxcbiAgICAgICAgJ2NvdW50JyAgIDogJ0NPVU5UJyxcbiAgICAgICAgJ21heGltdW0nIDogJ01BWCcsXG4gICAgICAgICdtaW5pbXVtJyA6ICdNSU4nLFxuICAgICAgICAnc3VtJyAgICAgOiAnU1VNJ1xuICAgIH07XG5cbmNvbnN0IGdldEJvb2xlYW5WYWx1ZSA9IHZhbCA9PiB7XG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09ICd0cnVlJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHZhbCA9PT0gZmFsc2UgfHwgdmFsID09PSAnZmFsc2UnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIHJldHVybnMgb3JkZXJieSBjb2x1bW5zIGFuZCB0aGVpciBvcmRlcnMgaW4gdHdvIHNlcGFyYXRlIGFycmF5c1xuY29uc3QgZ2V0TG9kYXNoT3JkZXJCeUZvcm1hdCA9IG9yZGVyYnkgPT4ge1xuICAgIGxldCBjb2x1bW5zO1xuICAgIGNvbnN0IG9yZGVyQnlDb2x1bW5zID0gW10sXG4gICAgICAgIG9yZGVycyA9IFtdO1xuXG4gICAgXy5mb3JFYWNoKF8uc3BsaXQob3JkZXJieSwgJywnKSwgZnVuY3Rpb24gKGNvbCkge1xuICAgICAgICBjb2x1bW5zID0gXy5zcGxpdChjb2wsICc6Jyk7XG4gICAgICAgIG9yZGVyQnlDb2x1bW5zLnB1c2goY29sdW1uc1swXSk7XG4gICAgICAgIG9yZGVycy5wdXNoKGNvbHVtbnNbMV0pO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgICdjb2x1bW5zJyA6IG9yZGVyQnlDb2x1bW5zLFxuICAgICAgICAnb3JkZXJzJyAgOiBvcmRlcnNcbiAgICB9O1xufTtcblxuLy8gUmVwbGFjaW5nIHRoZSAnLicgYnkgdGhlICckJyBiZWNhdXNlICcuJyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBhbGlhcyBuYW1lc1xuY29uc3QgZ2V0VmFsaWRBbGlhc05hbWUgPSBhbGlhc05hbWUgPT4gYWxpYXNOYW1lID8gYWxpYXNOYW1lLnJlcGxhY2UoL1xcLi9nLCAnJCcpIDogbnVsbDtcblxuLy8gQXBwbHlpbmcgdGhlIGZvbnQgcmVsYXRlZCBzdHlsZXMgZm9yIHRoZSBjaGFydFxuY29uc3Qgc2V0VGV4dFN0eWxlID0gKHByb3BlcnRpZXMsIGlkKSA9PiB7XG4gICAgY29uc3QgY2hhcnR0ZXh0ID0gZDMuc2VsZWN0KCcjd21DaGFydCcgKyBpZCArICcgc3ZnJykuc2VsZWN0QWxsKCd0ZXh0Jyk7XG4gICAgY2hhcnR0ZXh0LnN0eWxlKHByb3BlcnRpZXMpO1xufTtcblxuY29uc3QgYW5nbGUgPSBkID0+IHtcbiAgICBjb25zdCBhID0gKGQuc3RhcnRBbmdsZSArIGQuZW5kQW5nbGUpICogOTAgLyBNYXRoLlBJIC0gOTA7XG4gICAgcmV0dXJuIGEgPiA5MCA/IGEgLSAxODAgOiBhO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkaXZbd21DaGFydF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Ad2F2ZW1ha2VyL252ZDMvYnVpbGQvbnYuZDMubWluLmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoQ2hhcnRDb21wb25lbnQpXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0Q29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElSZWRyYXdhYmxlQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgeGF4aXNkYXRha2V5O1xuICAgIHlheGlzZGF0YWtleTtcbiAgICBncm91cGJ5O1xuICAgIGFnZ3JlZ2F0aW9uO1xuICAgIGFnZ3JlZ2F0aW9uY29sdW1uO1xuICAgIGlzVmlzdWFsbHlHcm91cGVkO1xuICAgIG9yZGVyYnk7XG4gICAgaWNvbmNsYXNzID0gJyc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHNob3dDb250ZW50TG9hZEVycm9yO1xuICAgIGludmFsaWRDb25maWc7XG4gICAgZXJyTXNnO1xuICAgIHNoYXBlOiBzdHJpbmc7XG4gICAgZGF0YXNvdXJjZTogYW55O1xuICAgIGZvbnRzaXplOiBzdHJpbmc7XG4gICAgc2VsZWN0ZWRpdGVtOiBhbnk7XG4gICAgZm9udHVuaXQ6IHN0cmluZztcbiAgICBvZmZzZXR0b3A6IG51bWJlcjtcbiAgICBvZmZzZXRsZWZ0OiBudW1iZXI7XG4gICAgb2Zmc2V0cmlnaHQ6IG51bWJlcjtcbiAgICBvZmZzZXRib3R0b206IG51bWJlcjtcbiAgICBzaG93bGFiZWxzOiBhbnk7XG4gICAgdGhlbWU6IHN0cmluZztcblxuICAgIHByaXZhdGUgJGlkO1xuICAgIHByaXZhdGUgc2NvcGVkYXRhc2V0OiBhbnk7XG4gICAgcHJpdmF0ZSBiaW5kZGF0YXNldDogYW55O1xuICAgIHByaXZhdGUgc2hvd2xhYmVsc291dHNpZGU6IGFueTtcbiAgICBwcml2YXRlIF9yZXNpemVGbjogYW55O1xuICAgIHByaXZhdGUgY2hhcnQ6IGFueTtcbiAgICBwcml2YXRlIGNsZWFyQ2FudmFzOiBib29sZWFuO1xuICAgIHB1YmxpYyBpc0xvYWRJblByb2dyZXNzOiBib29sZWFuO1xuICAgIHByaXZhdGUgZmlsdGVyRmllbGRzOiBib29sZWFuIHwgYW55O1xuICAgIHByaXZhdGUgZGF0YXNldDogYW55O1xuICAgIHByaXZhdGUgYXhpc29wdGlvbnM6IGFueTtcbiAgICBwcml2YXRlIG51bWVyaWNDb2x1bW5zOiBhbnk7XG4gICAgcHJpdmF0ZSBub25QcmltYXJ5Q29sdW1uczogYW55ID0gW107XG4gICAgcHJpdmF0ZSB2YXJpYWJsZUluZmxpZ2h0OiBhbnk7XG4gICAgcHJpdmF0ZSBjaGFydFJlYWR5OiBib29sZWFuO1xuICAgIHByaXZhdGUgeERhdGFLZXlBcnI6IGFueSA9IFtdO1xuICAgIHByaXZhdGUgeEF4aXNEYXRhVHlwZTogc3RyaW5nO1xuICAgIHByaXZhdGUgYnViYmxlc2l6ZTogYW55O1xuICAgIHB1YmxpYyBzaG93Tm9EYXRhTXNnOiBhbnk7XG4gICAgcHJpdmF0ZSBzYW1wbGVEYXRhOiBhbnlbXTtcbiAgICBwcml2YXRlIGNoYXJ0RGF0YTogYW55W10gPSBbXTtcbiAgICBwcml2YXRlIF9wcm9jZXNzZWREYXRhOiBhbnlbXSA9IFtdO1xuICAgIHByaXZhdGUgX3N1YnNjaXB0aW9uczogYW55ID0gW107XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBhbmVsJykgdGl0bGU7XG5cbiAgICBpc0dyb3VwQnlFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISEodGhpcy5ncm91cGJ5ICYmIHRoaXMuZ3JvdXBieSAhPT0gTk9ORSk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgeCBhbmQgeSBheGlzIHRoYXQgYXJlIGNob3NlbiBhcmUgdmFsaWQgdG8gcGxvdCBjaGFydFxuICAgIGlzVmFsaWRBeGlzKCkge1xuICAgICAgICAvLyBDaGVjayBpZiB4IGF4aXMgYW5kIHkgYXhpcyBhcmUgY2hvc2VuIGFuZCBhcmUgbm90IGVxdWFsXG4gICAgICAgIHJldHVybiB0aGlzLmJpbmRkYXRhc2V0ID8gKHRoaXMueGF4aXNkYXRha2V5ICYmIHRoaXMueWF4aXNkYXRha2V5KSA6IHRydWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYWdncmVnYXRpb24gaXMgY2hvc2VuXG4gICAgaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhISgodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkgJiYgdGhpcy5hZ2dyZWdhdGlvbiAhPT0gTk9ORSAmJiB0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKSk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgZWl0aGVyIGdyb3VwYnksIGFnZ3JlZ2F0aW9uIG9yIG9yZGVyYnkgaXMgY2hvc2VuXG4gICAgaXNEYXRhRmlsdGVyaW5nRW5hYmxlZCgpIHtcbiAgICAgICAgLypRdWVyeSBuZWVkIHRvIGJlIHRyaWdnZXJlZCBpZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjYXNlcyBzYXRpc2Z5XG4gICAgICAgICogMS4gR3JvdXAgQnkgYW5kIGFnZ3JlZ2F0aW9uIGJvdGggY2hvc2VuXG4gICAgICAgICogMi4gT25seSBPcmRlciBCeSBpcyBjaG9zZW5cbiAgICAgICAgKiAqL1xuXG4gICAgICAgIHJldHVybiB0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkgfHwgKCF0aGlzLmlzVmlzdWFsbHlHcm91cGVkICYmIHRoaXMub3JkZXJieSk7XG4gICAgfVxuXG4gICAgLypDaGFydHMgbGlrZSBMaW5lLEFyZWEsQ3VtdWxhdGl2ZSBMaW5lIGRvZXMgbm90IHN1cHBvcnQgYW55IG90aGVyIGRhdGF0eXBlXG4gICAgICAgIG90aGVyIHRoYW4gaW50ZWdlciB1bmxpa2UgdGhlIGNvbHVtbiBhbmQgYmFyLkl0IGlzIGEgbnZkMyBpc3N1ZS4gSW5vcmRlciB0b1xuICAgICAgICBzdXBwb3J0IHRoYXQgdGhpcyBpcyBhIGZpeCovXG4gICAgZ2V0eEF4aXNWYWwoZGF0YU9iaiwgeEtleSwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBfLmdldChkYXRhT2JqLCB4S2V5KTtcbiAgICAgICAgLy8gSWYgeCBheGlzIGlzIG90aGVyIHRoYW4gbnVtYmVyIHR5cGUgdGhlbiBhZGQgaW5kZXhlc1xuICAgICAgICBpZiAoaXNMaW5lVHlwZUNoYXJ0KHRoaXMudHlwZSkgJiYgIWlzTnVtYmVyVHlwZSh0aGlzLnhBeGlzRGF0YVR5cGUpKSB7XG4gICAgICAgICAgICAvLyBWZXJpZmljYXRpb24gdG8gZ2V0IHRoZSB1bmlxdWUgZGF0YSBrZXlzXG4gICAgICAgICAgICB0aGlzLnhEYXRhS2V5QXJyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgb2YgdHlwZSBEYXRlXG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8vIEdldHRpbmcgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBhbW9uZyBhbGwgdGhlIHggdmFsdWVzXG4gICAgZ2V0WE1pbk1heFZhbHVlcyhkYXR1bSkge1xuICAgICAgICBpZiAoIWRhdHVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeFZhbHVlczogYW55ID0ge307XG4gICAgICAgIC8qXG4gICAgICAgICBjb21wdXRlIHRoZSBtaW4geCB2YWx1ZVxuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgb2JqZWN0c1xuICAgICAgICAgICAgaW5wdXQ6IFt7eDoxLCB5OjJ9LCB7eDoyLCB5OjN9LCB7eDozLCB5OjR9XVxuICAgICAgICAgICAgbWluIHg6IDFcbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIGFycmF5c1xuICAgICAgICAgICAgaW5wdXQ6IFtbMTAsIDIwXSwgWzIwLCAzMF0sIFszMCwgNDBdXTtcbiAgICAgICAgICAgIG1pbiB4OiAxMFxuICAgICAgICAqL1xuICAgICAgICB4VmFsdWVzLm1pbiA9IF8ubWluQnkoZGF0dW0udmFsdWVzLCBkYXRhT2JqZWN0ID0+IGRhdGFPYmplY3QueCB8fCBkYXRhT2JqZWN0WzBdKTtcbiAgICAgICAgLypcbiAgICAgICAgIGNvbXB1dGUgdGhlIG1heCB4IHZhbHVlXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBvYmplY3RzXG4gICAgICAgICAgICBpbnB1dDogW3t4OjEsIHk6Mn0sIHt4OjIsIHk6M30sIHt4OjMsIHk6NH1dXG4gICAgICAgICAgICBtYXggeDogM1xuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgYXJyYXlzXG4gICAgICAgICAgICBpbnB1dDogW1sxMCwgMjBdLCBbMjAsIDMwXSwgWzMwLCA0MF1dO1xuICAgICAgICAgICAgbWF4IHg6IDMwXG4gICAgICAgICAqL1xuICAgICAgICB4VmFsdWVzLm1heCA9IF8ubWF4QnkoZGF0dW0udmFsdWVzLCBkYXRhT2JqZWN0ID0+IGRhdGFPYmplY3QueCB8fCBkYXRhT2JqZWN0WzBdKTtcbiAgICAgICAgcmV0dXJuIHhWYWx1ZXM7XG4gICAgfVxuXG4gICAgLy8gR2V0dGluZyB0aGUgbWluIGFuZCBtYXggdmFsdWVzIGFtb25nIGFsbCB0aGUgeSB2YWx1ZXNcbiAgICBnZXRZTWluTWF4VmFsdWVzKGRhdHVtKSB7XG4gICAgICAgIGNvbnN0IHlWYWx1ZXM6IGFueSA9IHt9LFxuICAgICAgICAgICAgbWluVmFsdWVzID0gW10sXG4gICAgICAgICAgICBtYXhWYWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKCFkYXR1bSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgIEdldHRpbmcgdGhlIG1pbiBhbmQgbWF4IHkgdmFsdWVzIGFtb25nIGFsbCB0aGUgc2VyaWVzIG9mIGRhdGFcbiAgICAgICAgIGNvbXB1dGUgdGhlIG1pbiB5IHZhbHVlXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBvYmplY3RzXG4gICAgICAgICAgICBpbnB1dDogW1t7eDoxLCB5OjJ9LCB7eDoyLCB5OjN9LCB7eDozLCB5OjR9XSwgW3t4OjIsIHk6M30sIHt4OjMsIHk6NH0sIHt4OjQsIHk6NX1dXVxuICAgICAgICAgICAgbWluIHkgdmFsdWVzIDogJzInKGFtb25nIGZpcnN0IHNldCkgJiAnMycoYW1vbmcgc2Vjb25kIHNldClcbiAgICAgICAgICAgIG1heCB5IHZhbHVlcyA6ICc0JyhhbW9uZyBmaXJzdCBzZXQpICYgJzUnKGFtb25nIHNlY29uZCBzZXQpXG5cbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIGFycmF5c1xuICAgICAgICAgICAgaW5wdXQ6IFtbWzEwLCAyMF0sIFsyMCwgMzBdLCBbMzAsIDQwXV0sIFtbMjAsIDMwXSwgWzMwLCA0MF0sIFs0MCwgNTBdXV1cbiAgICAgICAgICAgIG1pbiB5IHZhbHVlcyA6ICcyMCcoYW1vbmcgZmlyc3Qgc2V0KSAmICczMCcoYW1vbmcgc2Vjb25kIHNldClcbiAgICAgICAgICAgIG1heCB5IHZhbHVlcyA6ICc0MCcoYW1vbmcgZmlyc3Qgc2V0KSAmICc1MCcoYW1vbmcgc2Vjb25kIHNldClcbiAgICAgICAgICovXG5cbiAgICAgICAgXy5mb3JFYWNoKGRhdHVtLCBkYXRhID0+IHtcbiAgICAgICAgICAgIG1pblZhbHVlcy5wdXNoKF8ubWluQnkoZGF0YS52YWx1ZXMsIGZ1bmN0aW9uIChkYXRhT2JqZWN0KSB7IHJldHVybiBkYXRhT2JqZWN0LnkgfHwgZGF0YU9iamVjdFsxXTsgfSkpO1xuICAgICAgICAgICAgbWF4VmFsdWVzLnB1c2goXy5tYXhCeShkYXRhLnZhbHVlcywgZnVuY3Rpb24gKGRhdGFPYmplY3QpIHsgcmV0dXJuIGRhdGFPYmplY3QueSB8fCBkYXRhT2JqZWN0WzFdOyB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBHZXRzIHRoZSBsZWFzdCBhbmQgaGlnaGVzdCB2YWx1ZXMgYW1vbmcgYWxsIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgb2YgcmVzcGVjdGl2ZSBzZXJpZXMgb2YgZGF0YVxuICAgICAgICB5VmFsdWVzLm1pbiA9IF8ubWluQnkobWluVmFsdWVzLCBkYXRhT2JqZWN0ID0+IGRhdGFPYmplY3QueSB8fCBkYXRhT2JqZWN0WzFdKTtcbiAgICAgICAgeVZhbHVlcy5tYXggPSBfLm1heEJ5KG1heFZhbHVlcywgZGF0YU9iamVjdCA9PiBkYXRhT2JqZWN0LnkgfHwgZGF0YU9iamVjdFsxXSk7XG4gICAgICAgIHJldHVybiB5VmFsdWVzO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSB4LWF4aXMgdmFsdWVzIGFyZSB1bmRlZmluZWQsIHdlIHJldHVybiBlbXB0eSBhcnJheSBlbHNlIHdlIHJldHVybiB0aGUgdmFsdWVzXG4gICAgZ2V0VmFsaWREYXRhKHZhbHVlcykge1xuICAgICAgICByZXR1cm4gKHZhbHVlcy5sZW5ndGggPT09IDEgJiYgdmFsdWVzWzBdID09PSB1bmRlZmluZWQpID8gW10gOiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgc2luZ2xlIGRhdGEgcG9pbnQgYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIGRhdGEgY2hhcnQgYWNjZXB0c1xuICAgIHZhbHVlRmluZGVyKGRhdGFPYmosIHhLZXksIHlLZXksIGluZGV4Pywgc2hhcGU/KSB7XG4gICAgICAgIGNvbnN0IHhWYWwgPSB0aGlzLmdldHhBeGlzVmFsKGRhdGFPYmosIHhLZXksIGluZGV4KSxcbiAgICAgICAgICAgIHZhbHVlID0gXy5nZXQoZGF0YU9iaiwgeUtleSksXG4gICAgICAgICAgICB5VmFsID0gcGFyc2VGbG9hdCh2YWx1ZSkgfHwgdmFsdWUsXG4gICAgICAgICAgICBzaXplID0gcGFyc2VGbG9hdChkYXRhT2JqW3RoaXMuYnViYmxlc2l6ZV0pIHx8IDI7XG4gICAgICAgIGxldCBkYXRhUG9pbnQ6IGFueSA9IHt9O1xuXG4gICAgICAgIGlmIChpc0NoYXJ0RGF0YUpTT04odGhpcy50eXBlKSkge1xuICAgICAgICAgICAgZGF0YVBvaW50LnggPSB4VmFsO1xuICAgICAgICAgICAgZGF0YVBvaW50LnkgPSB5VmFsO1xuICAgICAgICAgICAgLy8gb25seSBCdWJibGUgY2hhcnQgaGFzIHRoZSB0aGlyZCBkaW1lbnNpb25cbiAgICAgICAgICAgIGlmIChpc0J1YmJsZUNoYXJ0KHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnQuc2l6ZSA9IHNpemU7XG4gICAgICAgICAgICAgICAgZGF0YVBvaW50LnNoYXBlID0gc2hhcGUgfHwgJ2NpcmNsZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDaGFydERhdGFBcnJheSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICBkYXRhUG9pbnQgPSBbeFZhbCwgeVZhbF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRkaW5nIGFjdHVhbCB1bndyYXBwZWQgZGF0YSB0byBjaGFydCBkYXRhIHRvIHVzZSBhdCB0aGUgdGltZSBvZiBzZWxlY3RlZCBkYXRhIHBvaW50IG9mIGNoYXJ0IGV2ZW50XG4gICAgICAgIGRhdGFQb2ludC5fZGF0YU9iaiA9IGRhdGFPYmo7XG4gICAgICAgIHJldHVybiBkYXRhUG9pbnQ7XG4gICAgfVxuXG4gICAgLy8gU2V0dGluZyBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlc1xuICAgIHNldEVyck1zZyhtZXNzYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dOb0RhdGFNc2cpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbnRlbnRMb2FkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkQ29uZmlnID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIFRPRE86IFNldCB0aGUgbG9jYWxlIGZyb20gdGhlIG1lc3NhZ2VcbiAgICAgICAgICAgIHRoaXMuZXJyTXNnID0gJyc7IC8vICRyb290U2NvcGUubG9jYWxlW21lc3NhZ2VdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc0NoYXJ0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5zYW1wbGVEYXRhID0gZ2V0U2FtcGxlRGF0YSh0aGlzKTtcbiAgICAgICAgLy8gc2NvcGUgdmFyaWFibGVzIHVzZWQgdG8ga2VlcCB0aGUgYWN0dWFsIGtleSB2YWx1ZXMgZm9yIHgtYXhpc1xuICAgICAgICB0aGlzLnhEYXRhS2V5QXJyID0gW107XG4gICAgICAgIC8vIFBsb3R0aW5nIHRoZSBjaGFydCB3aXRoIHNhbXBsZSBkYXRhIHdoZW4gdGhlIGNoYXJ0IGRhdGFzZXQgaXMgbm90IGJvdW5kXG4gICAgICAgIGlmICghdGhpcy5iaW5kZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy54RGF0YUtleUFyciA9IGdldERhdGVMaXN0KCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zYW1wbGVEYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0RGF0YSB8fCAhdGhpcy5jaGFydERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGF0dW0gPSBbXSxcbiAgICAgICAgICAgIHlBeGlzS2V5LFxuICAgICAgICAgICAgc2hhcGVzOiBhbnkgPSBbXSxcbiAgICAgICAgICAgIHZhbHVlczogYW55ID0gW107XG4gICAgICAgIGNvbnN0IHhBeGlzS2V5ID0gdGhpcy54YXhpc2RhdGFrZXksXG4gICAgICAgICAgICB5QXhpc0tleXMgPSB0aGlzLnlheGlzZGF0YWtleSA/IHRoaXMueWF4aXNkYXRha2V5LnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgIGRhdGFTZXQgPSB0aGlzLmNoYXJ0RGF0YTtcblxuICAgICAgICBpZiAoXy5pc0FycmF5KGRhdGFTZXQpKSB7XG4gICAgICAgICAgICBpZiAoaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICB5QXhpc0tleSA9IHlBeGlzS2V5c1swXTtcbiAgICAgICAgICAgICAgICBkYXR1bSA9IF8ubWFwKGRhdGFTZXQsIChkYXRhT2JqLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHlPYmplY3QoZGF0YVNldFtpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUZpbmRlcihkYXRhU2V0W2luZGV4XSwgeEF4aXNLZXksIHlBeGlzS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRhdHVtID0gdGhpcy5nZXRWYWxpZERhdGEoZGF0dW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCdWJibGVDaGFydCh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYXBlcyA9IHRoaXMuc2hhcGUgPT09ICdyYW5kb20nID8gYWxsU2hhcGVzIDogdGhpcy5zaGFwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeUF4aXNLZXlzLmZvckVhY2goKHlBeGlzS2V5LCBzZXJpZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gIF8ubWFwKGRhdGFTZXQsIChkYXRhT2JqLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5T2JqZWN0KGRhdGFTZXRbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlRmluZGVyKGRhdGFTZXRbaW5kZXhdLCB4QXhpc0tleSwgeUF4aXNLZXksIGluZGV4LCAoXy5pc0FycmF5KHNoYXBlcykgJiYgc2hhcGVzW3Nlcmllc10pIHx8IHRoaXMuc2hhcGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5nZXRWYWxpZERhdGEodmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0dW0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogcHJldHRpZnlMYWJlbHMoeUF4aXNLZXkpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXR1bTtcbiAgICB9XG5cbiAgICBzZXRDaGFydERhdGEoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc2VkRGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDaGFydERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzZWREYXRhO1xuICAgIH1cblxuICAgIC8vIGNvbnN0cnVjdGluZyB0aGUgZ3JvdXBlZCBkYXRhIGJhc2VkIG9uIHRoZSBzZWxlY3Rpb24gb2Ygb3JkZXJieSwgeCAmIHkgYXhpc1xuICAgIGdldFZpc3VhbGx5R3JvdXBlZERhdGEocXVlcnlSZXNwb25zZSwgZ3JvdXBpbmdDb2x1bW4pIHtcbiAgICAgICAgbGV0IGdyb3VwRGF0YTogYW55ID0ge30sXG4gICAgICAgICAgICBncm91cFZhbHVlczogYW55ID0gW10sXG4gICAgICAgICAgICBvcmRlckJ5RGV0YWlscyxcbiAgICAgICAgICAgIG1heExlbmd0aDtcbiAgICAgICAgY29uc3QgY2hhcnREYXRhOiBhbnkgPSBbXSxcbiAgICAgICAgICAgIF9pc0FyZWFDaGFydCA9IGlzQXJlYUNoYXJ0KHRoaXMudHlwZSksXG4gICAgICAgICAgICB5QXhpc0tleSA9IF8uZmlyc3QoXy5zcGxpdCh0aGlzLnlheGlzZGF0YWtleSwgJywnKSk7XG4gICAgICAgIHRoaXMueERhdGFLZXlBcnIgPSBbXTtcbiAgICAgICAgcXVlcnlSZXNwb25zZSA9IF8ub3JkZXJCeShxdWVyeVJlc3BvbnNlLCBfLnNwbGl0KHRoaXMuZ3JvdXBieSwgJywnKSk7XG4gICAgICAgIGlmICh0aGlzLm9yZGVyYnkpIHtcbiAgICAgICAgICAgIG9yZGVyQnlEZXRhaWxzID0gZ2V0TG9kYXNoT3JkZXJCeUZvcm1hdCh0aGlzLm9yZGVyYnkpO1xuICAgICAgICAgICAgcXVlcnlSZXNwb25zZSA9IF8ub3JkZXJCeShxdWVyeVJlc3BvbnNlLCBvcmRlckJ5RGV0YWlscy5jb2x1bW5zLCBvcmRlckJ5RGV0YWlscy5vcmRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5UmVzcG9uc2UgPSBfLmdyb3VwQnkocXVlcnlSZXNwb25zZSwgZ3JvdXBpbmdDb2x1bW4pO1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGFyZWEgY2hhcnQgYWxsIHRoZSBzZXJpZXMgZGF0YSBzaG91bGQgYmUgb2Ygc2FtZSBsZW5ndGhcbiAgICAgICAgaWYgKF9pc0FyZWFDaGFydCkge1xuICAgICAgICAgICAgbWF4TGVuZ3RoID0gXy5tYXgoXy5tYXAocXVlcnlSZXNwb25zZSwgb2JqID0+IG9iai5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBfLmZvckVhY2gocXVlcnlSZXNwb25zZSwgKHZhbHVlcywgZ3JvdXBLZXkpID0+IHtcbiAgICAgICAgICAgIGdyb3VwVmFsdWVzID0gaXNBcmVhQ2hhcnQgPyBfLmZpbGwobmV3IEFycmF5KG1heExlbmd0aCksIFswLCAwXSkgOiBbXTtcbiAgICAgICAgICAgIF8uZm9yRWFjaFJpZ2h0KHZhbHVlcywgKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGdyb3VwVmFsdWVzW2luZGV4XSA9IHRoaXMudmFsdWVGaW5kZXIodmFsdWUsIHRoaXMueGF4aXNkYXRha2V5LCB5QXhpc0tleSwgaW5kZXgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBncm91cERhdGEgPSB7XG4gICAgICAgICAgICAgICAga2V5IDogZ3JvdXBLZXksXG4gICAgICAgICAgICAgICAgdmFsdWVzIDogZ3JvdXBWYWx1ZXNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjaGFydERhdGEucHVzaChncm91cERhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNoYXJ0RGF0YTtcbiAgICB9XG5cbiAgICAvKkRlY2lkZXMgd2hldGhlciB0aGUgZGF0YSBzaG91bGQgYmUgdmlzdWFsbHkgZ3JvdXBlZCBvciBub3RcbiAgICAgICAgICAgIFZpc3VhbGx5IGdyb3VwZWQgd2hlbiBhIGRpZmZlcmVudCBjb2x1bW4gaXMgY2hvb3NlbiBpbiB0aGUgZ3JvdXAgYnkgb3RoZXIgdGhhbiB4IGFuZCB5IGF4aXMgYW5kIGFnZ3JlZ2F0aW9uIGlzIG5vdCBjaG9zZW4qL1xuICAgIGdldEdyb3VwaW5nRGV0YWlscygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpICYmICF0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIGxldCBpc1Zpc3VhbGx5R3JvdXBlZCA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZpc3VhbEdyb3VwaW5nQ29sdW1uLFxuICAgICAgICAgICAgICAgIGdyb3VwaW5nRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiBhbnkgPSBbXSxcbiAgICAgICAgICAgICAgICBncm91cGluZ0NvbHVtbkluZGV4O1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBieUNvbHVtbnMgPSB0aGlzLmdyb3VwYnkgJiYgdGhpcy5ncm91cGJ5ICE9PSBOT05FID8gdGhpcy5ncm91cGJ5LnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgICAgICB5QXhpc0tleXMgPSB0aGlzLnlheGlzZGF0YWtleSA/IHRoaXMueWF4aXNkYXRha2V5LnNwbGl0KCcsJykgOiBbXTtcblxuICAgICAgICAgICAgaWYgKGdyb3VwYnlDb2x1bW5zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAvKkdldHRpbmcgdGhlIGdyb3VwIGJ5IGNvbHVtbiB3aGljaCBpcyBub3Qgc2VsZWN0ZWQgZWl0aGVyIGluIHggb3IgeSBheGlzKi9cbiAgICAgICAgICAgICAgICBncm91cGJ5Q29sdW1ucy5ldmVyeSgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy54YXhpc2RhdGFrZXkgIT09IGNvbHVtbiAmJiAkLmluQXJyYXkoY29sdW1uLCB5QXhpc0tleXMpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNWaXN1YWxseUdyb3VwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzdWFsR3JvdXBpbmdDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGluZ0NvbHVtbkluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGJ5Q29sdW1ucy5zcGxpY2UoZ3JvdXBpbmdDb2x1bW5JbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0aW5nIHRoZSBncm91cGJ5IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBpZiAodmlzdWFsR3JvdXBpbmdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHZpc3VhbEdyb3VwaW5nQ29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBieUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBfLmNvbmNhdChjb2x1bW5zLCBncm91cGJ5Q29sdW1ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgeCBhbmQgeSBheGlzIGFyZSBub3QgaW5jbHVkZWQgaW4gYWdncmVnYXRpb24gbmVlZCB0byBiZSBpbmNsdWRlZCBpbiBncm91cGJ5XG4gICAgICAgICAgICBpZiAodGhpcy54YXhpc2RhdGFrZXkgIT09IHRoaXMuYWdncmVnYXRpb25jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2godGhpcy54YXhpc2RhdGFrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXy5mb3JFYWNoKHlBeGlzS2V5cywga2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSB0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZ3JvdXBpbmdFeHByZXNzaW9uID0gIGNvbHVtbnMuam9pbignLCcpO1xuICAgICAgICAgICAgLy8gc2V0IGlzVmlzdWFsbHlHcm91cGVkIGZsYWcgaW4gc2NvcGUgZm9yIGxhdGVyIHVzZVxuICAgICAgICAgICAgdGhpcy5pc1Zpc3VhbGx5R3JvdXBlZCA9IGlzVmlzdWFsbHlHcm91cGVkO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGdyb3VwaW5nRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBpc1Zpc3VhbGx5R3JvdXBlZDogaXNWaXN1YWxseUdyb3VwZWQsXG4gICAgICAgICAgICAgICAgdmlzdWFsR3JvdXBpbmdDb2x1bW46IHZpc3VhbEdyb3VwaW5nQ29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleHByZXNzaW9uOiAnJyxcbiAgICAgICAgICAgIGlzVmlzdWFsbHlHcm91cGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHZpc3VhbEdyb3VwaW5nQ29sdW1uOiAnJ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIGdldCB0aGUgYWdncmVnYXRlZCBkYXRhIGFmdGVyIGFwcGx5aW5nIHRoZSBhZ2dyZWdhdGlvbiAmIGdyb3VwIGJ5IG9yIG9yZGVyIGJ5IG9wZXJhdGlvbnMuXG4gICAgZ2V0QWdncmVnYXRlZERhdGEoY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGU6IGFueSA9IHRoaXMuZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIHlBeGlzS2V5cyA9IHRoaXMueWF4aXNkYXRha2V5ID8gdGhpcy55YXhpc2RhdGFrZXkuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgZGF0YTogYW55ID0ge307XG4gICAgICAgIGxldCBzb3J0RXhwcixcbiAgICAgICAgICAgIGNvbHVtbnM6IGFueSA9IFtdLFxuICAgICAgICAgICAgY29sQWxpYXMsXG4gICAgICAgICAgICBvcmRlckJ5Q29sdW1ucyxcbiAgICAgICAgICAgIGdyb3VwQnlGaWVsZHM6IGFueSA9IFtdO1xuXG4gICAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIGdyb3VwQnlGaWVsZHMgPSBfLnNwbGl0KHRoaXMuZ3JvdXBieSwgJywnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcmRlcmJ5KSB7XG4gICAgICAgICAgICBzb3J0RXhwciA9IF8ucmVwbGFjZSh0aGlzLm9yZGVyYnksIC86L2csICcgJyk7XG4gICAgICAgICAgICBjb2x1bW5zID0gXy51bmlxKF8uY29uY2F0KGNvbHVtbnMsIGdyb3VwQnlGaWVsZHMsIFt0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uXSkpO1xuICAgICAgICAgICAgb3JkZXJCeUNvbHVtbnMgPSBnZXRMb2Rhc2hPcmRlckJ5Rm9ybWF0KHRoaXMub3JkZXJieSkuY29sdW1ucztcbiAgICAgICAgICAgIC8vIElmIHRoZSBvcmRlcmJ5IGNvbHVtbiBpcyBjaG9zZW4gZWl0aGVyIGluIGdyb3VwYnkgb3Igb3JkZXJieSB0aGVuIHJlcGxhY2UgLiB3aXRoICQgZm9yIHRoYXQgY29sdW1uXG4gICAgICAgICAgICBfLmZvckVhY2goXy5pbnRlcnNlY3Rpb24oY29sdW1ucywgb3JkZXJCeUNvbHVtbnMpLCBjb2wgPT4ge1xuICAgICAgICAgICAgICAgIGNvbEFsaWFzID0gZ2V0VmFsaWRBbGlhc05hbWUoY29sKTtcbiAgICAgICAgICAgICAgICBzb3J0RXhwciA9IF8ucmVwbGFjZShzb3J0RXhwciwgY29sLCBjb2xBbGlhcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAvLyBTZW5kIHRoZSBncm91cCBieSBpbiB0aGUgYWdncmVnYXRpb25zIGFwaSBvbmx5IGlmIGFnZ3JlZ2F0aW9uIGlzIGFsc28gY2hvc2VuXG4gICAgICAgICAgICBkYXRhLmdyb3VwQnlGaWVsZHMgPSBncm91cEJ5RmllbGRzO1xuICAgICAgICAgICAgZGF0YS5hZ2dyZWdhdGlvbnMgPSAgW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZpZWxkJzogdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAgYWdncmVnYXRpb25Gbk1hcFt0aGlzLmFnZ3JlZ2F0aW9uXSxcbiAgICAgICAgICAgICAgICAgICAgJ2FsaWFzJzogZ2V0VmFsaWRBbGlhc05hbWUodGhpcy5hZ2dyZWdhdGlvbmNvbHVtbilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV4ZWN1dGUgdGhlIHF1ZXJ5LlxuICAgICAgICB2YXJpYWJsZS5leGVjdXRlKCdnZXRBZ2dyZWdhdGVkRGF0YScsIHtcbiAgICAgICAgICAgICdhZ2dyZWdhdGlvbnMnIDogZGF0YSxcbiAgICAgICAgICAgICdzb3J0JyAgICAgICAgIDogc29ydEV4cHJcbiAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIHJlc3VsdCBpbnRvIGEgZm9ybWF0IHN1cHBvcnRlZCBieSB0aGUgY2hhcnQuXG4gICAgICAgICAgICBjb25zdCBjaGFydERhdGE6IGFueSA9IFtdLFxuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uQWxpYXM6IGFueSA9IGdldFZhbGlkQWxpYXNOYW1lKHRoaXMuYWdncmVnYXRpb25jb2x1bW4pLFxuICAgICAgICAgICAgICAgIHhBeGlzQWxpYXNLZXkgPSBnZXRWYWxpZEFsaWFzTmFtZSh0aGlzLnhheGlzZGF0YWtleSksXG4gICAgICAgICAgICAgICAgeUF4aXNBbGlhc0tleXMgPSBbXTtcblxuICAgICAgICAgICAgeUF4aXNLZXlzLmZvckVhY2goeUF4aXNLZXkgPT4geUF4aXNBbGlhc0tleXMucHVzaChnZXRWYWxpZEFsaWFzTmFtZSh5QXhpc0tleSkpKTtcblxuICAgICAgICAgICAgXy5mb3JFYWNoKHJlc3BvbnNlLmJvZHkuY29udGVudCwgKHJlc3BvbnNlQ29udGVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgcmVzcG9uc2UgaW4gdGhlIGNoYXJ0RGF0YSBiYXNlZCBvbiAnYWdncmVnYXRpb25Db2x1bW4nLCAneEF4aXNEYXRhS2V5JyAmICd5QXhpc0RhdGFLZXknLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqW3RoaXMuYWdncmVnYXRpb25jb2x1bW5dID0gcmVzcG9uc2VDb250ZW50W2FnZ3JlZ2F0aW9uQWxpYXNdO1xuICAgICAgICAgICAgICAgICAgICBvYmpbdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbl0gPSBfLmdldChyZXNwb25zZUNvbnRlbnQsIGFnZ3JlZ2F0aW9uQWxpYXMpIHx8IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgb2JqW3RoaXMueGF4aXNkYXRha2V5XSA9IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgeEF4aXNBbGlhc0tleSkgfHwgXy5nZXQocmVzcG9uc2VDb250ZW50LCB0aGlzLnhheGlzZGF0YWtleSk7XG5cbiAgICAgICAgICAgICAgICB5QXhpc0tleXMuZm9yRWFjaCgoeUF4aXNLZXksIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ialt5QXhpc0tleV0gPSByZXNwb25zZUNvbnRlbnRbeUF4aXNBbGlhc0tleXNbaW5kZXhdXTtcbiAgICAgICAgICAgICAgICAgICAgb2JqW3lBeGlzS2V5XSA9IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgeUF4aXNBbGlhc0tleXNbaW5kZXhdKSB8fCBfLmdldChyZXNwb25zZUNvbnRlbnQsIHlBeGlzS2V5KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNoYXJ0RGF0YS5wdXNoKG9iaik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSBjaGFydERhdGE7XG5cbiAgICAgICAgICAgIHRyaWdnZXJGbihjYWxsYmFjayk7XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLnNldEVyck1zZygnTUVTU0FHRV9FUlJPUl9GRVRDSF9EQVRBJyk7XG4gICAgICAgICAgICB0cmlnZ2VyRm4oY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgbWF4aW11bSB3aWR0aCBmb3IgdGhlIGxhYmVscyB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQuVGhpcyB3aWxsIGhlbHBmdWwgd2hlbiB0aGV5IGFyZSBvdmVybGFwcGluZ1xuICAgIHNldExhYmVsc01heFdpZHRoKCkge1xuICAgICAgICBsZXQgeFRpY2tzLFxuICAgICAgICAgICAgdGlja1dpZHRoLFxuICAgICAgICAgICAgbWF4TGVuZ3RoLFxuICAgICAgICAgICAgeERpc3QsXG4gICAgICAgICAgICB5RGlzdCxcbiAgICAgICAgICAgIHRvdGFsSGVpZ2h0LFxuICAgICAgICAgICAgbWF4Tm9MYWJlbHMsXG4gICAgICAgICAgICBudGhFbGVtZW50LFxuICAgICAgICAgICAgbGFiZWxzQXZhaWxhYmxlV2lkdGgsXG4gICAgICAgICAgICBiYXJXcmFwcGVyLFxuICAgICAgICAgICAgeUF4aXNXcmFwcGVyLFxuICAgICAgICAgICAgc3ZnV3JhcHBlcjtcbiAgICAgICAgY29uc3QgZm9udHNpemUgPSBwYXJzZUludCh0aGlzLmZvbnRzaXplLCAxMCkgfHwgMTIsXG4gICAgICAgICAgICBpc0JhcmNoYXJ0ID0gaXNCYXJDaGFydCh0aGlzLnR5cGUpO1xuICAgICAgICAvLyBnZXR0aW5nIHRoZSB4IHRpY2tzIGluIHRoZSBjaGFydFxuICAgICAgICB4VGlja3MgPSAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJykuZmluZCgnZy5udi14JykuZmluZCgnZy50aWNrJykuZmluZCgndGV4dCcpO1xuXG4gICAgICAgIC8vIGdldHRpbmcgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byB2aXNpYmxlIHRpY2tzIGFzc29jaWF0ZWQgd2l0aCB2aXNpYmxlIHRleHRcbiAgICAgICAgeFRpY2tzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgeFRpY2sgPSAkKHRoaXMpO1xuICAgICAgICAgICAgbGV0IHhUcmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgdGlja0Rpc3Q7XG4gICAgICAgICAgICBpZiAoeFRpY2sudGV4dCgpICYmIHhUaWNrLmNzcygnb3BhY2l0eScpID09PSAnMScpIHtcbiAgICAgICAgICAgICAgICB4VHJhbnNmb3JtID0geFRpY2sucGFyZW50KCkuYXR0cigndHJhbnNmb3JtJykuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICB4RGlzdCA9IHBhcnNlRmxvYXQoeFRyYW5zZm9ybVswXS5zdWJzdHIoMTApKTtcbiAgICAgICAgICAgICAgICB5RGlzdCA9IHBhcnNlRmxvYXQoeFRyYW5zZm9ybVsxXSB8fCAnMCcpO1xuICAgICAgICAgICAgICAgIGlmICghaXNCYXJjaGFydCAmJiB4RGlzdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGlja0Rpc3QgPSB4RGlzdDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHlEaXN0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aWNrRGlzdCA9IHlEaXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGlja1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tXaWR0aCA9IHRpY2tEaXN0IC0gdGlja1dpZHRoO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRpY2tXaWR0aCA9IHRpY2tEaXN0O1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJbiBjYXNlIG9mIGJhciBjaGFydCBnZXR0aW5nIHRoZSBhdmFpbGFibGUgc3BhY2UgZm9yIHRoZSBsYWJlbHMgdG8gYmUgZGlzcGxheWVkXG4gICAgICAgIGlmIChpc0JhcmNoYXJ0KSB7XG4gICAgICAgICAgICBiYXJXcmFwcGVyID0gJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2Zz5nLm52LXdyYXA+Zz5nLm52LWJhcnNXcmFwJylbMF07XG4gICAgICAgICAgICB5QXhpc1dyYXBwZXIgPSAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnPmcubnYtd3JhcD5nPmcubnYteScpWzBdO1xuICAgICAgICAgICAgc3ZnV3JhcHBlciA9ICQoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKVswXTtcbiAgICAgICAgICAgIC8vIGdldHRpbmcgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgY2hhcnRcbiAgICAgICAgICAgIHRvdGFsSGVpZ2h0ID0gYmFyV3JhcHBlciA/IGJhcldyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IDogMDtcbiAgICAgICAgICAgIC8vIGdldHRpbmcgdGhlIGxhYmVscyBhdmFpbGFibGUgc3BhY2VcbiAgICAgICAgICAgIGxhYmVsc0F2YWlsYWJsZVdpZHRoID0geUF4aXNXcmFwcGVyID8gc3ZnV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIHlBeGlzV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCA6IHN2Z1dyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgICAvLyBTZXR0aW5nIHRoZSBtYXggbGVuZ3RoIGZvciB0aGUgbGFiZWxcbiAgICAgICAgICAgIG1heExlbmd0aCA9IE1hdGgucm91bmQobGFiZWxzQXZhaWxhYmxlV2lkdGggLyBmb250c2l6ZSk7XG4gICAgICAgICAgICAvLyBpZiBhdmFpbGFibGUgc3BhY2UgZm9yIGVhY2ggbGFiZWwgaXMgbGVzcyB0aGFuIHRoZSBmb250LXNpemVcbiAgICAgICAgICAgIC8vIHRoZW4gbGltaXRpbmcgdGhlIGxhYmVscyB0byBiZSBkaXNwbGF5ZWRcbiAgICAgICAgICAgIGlmICh0aWNrV2lkdGggPCBmb250c2l6ZSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgbWF4aW11bSBubyBvZiBsYWJlbHMgdG8gYmUgZml0dGVkXG4gICAgICAgICAgICAgICAgbWF4Tm9MYWJlbHMgPSB0b3RhbEhlaWdodCAvIGZvbnRzaXplO1xuICAgICAgICAgICAgICAgIC8vIHNob3dpbmcgb25seSB0aGUgbnRoIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBudGhFbGVtZW50ID0gTWF0aC5jZWlsKHRoaXMuY2hhcnREYXRhLmxlbmd0aCAvIG1heE5vTGFiZWxzKTtcbiAgICAgICAgICAgICAgICAvLyBzaG93aW5nIHVwIG9ubHkgc29tZSBsYWJlbHNcbiAgICAgICAgICAgICAgICBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKS5zZWxlY3QoJ2cubnYteCcpLnNlbGVjdEFsbCgnZy50aWNrJykuc2VsZWN0KCd0ZXh0JykuZWFjaChmdW5jdGlvbiAodGV4dCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBoaWRpbmcgZXZlcnkgbm9uIG50aCBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGlmIChpICUgbnRoRWxlbWVudCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoJ29wYWNpdHknLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gU2V0dGluZyB0aGUgbWF4IGxlbmd0aCBmb3IgdGhlIGxhYmVsXG4gICAgICAgICAgICBtYXhMZW5ndGggPSBNYXRoLnJvdW5kKHRpY2tXaWR0aCAvIGZvbnRzaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1heExlbmd0aCBzaG91bGQgYWx3YXlzIGJlIGEgcG9zaXRpdmUgbnVtYmVyXG4gICAgICAgIG1heExlbmd0aCA9IE1hdGguYWJzKG1heExlbmd0aCk7XG4gICAgICAgIC8vIFZhbGlkYXRpbmcgaWYgZXZlcnkgbGFiZWwgZXhjZWVkcyB0aGUgbWF4IGxlbmd0aCBhbmQgaWYgc28gbGltaXRpbmcgdGhlIGxlbmd0aCBhbmQgYWRkaW5nIGVsbGlwc2lzXG4gICAgICAgIHhUaWNrcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRleHRDb250ZW50Lmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dENvbnRlbnQgPSB0aGlzLnRleHRDb250ZW50LnN1YnN0cigwLCBtYXhMZW5ndGgpICsgJy4uLic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgdGhlIGNvbHVtbnMgb2YgdGhhdCBjYW4gYmUgY2hvb3NlbiBpbiB0aGUgeCBhbmQgeSBheGlzXG4gICAgZ2V0RGVmYXVsdENvbHVtbnMoKSB7XG4gICAgICAgIGxldCB0eXBlLFxuICAgICAgICAgICAgc3RyaW5nQ29sdW1uLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHRlbXA7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gW10sXG4gICAgICAgICAgICBjb2x1bW5zID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BST1BFUlRJRVNfTUFQKSB8fCBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGggJiYgZGVmYXVsdENvbHVtbnMubGVuZ3RoIDw9IDI7IGkgKz0gMSkge1xuICAgICAgICAgICAgdHlwZSA9IGNvbHVtbnNbaV0udHlwZTtcbiAgICAgICAgICAgIGlmICghY29sdW1uc1tpXS5pc1JlbGF0ZWQgJiYgKGlzTnVtYmVyVHlwZSh0eXBlKSkpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q29sdW1ucy5wdXNoKGNvbHVtbnNbaV0uZmllbGROYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgIXN0cmluZ0NvbHVtbikge1xuICAgICAgICAgICAgICAgIHN0cmluZ0NvbHVtbiA9IGNvbHVtbnNbaV0uZmllbGROYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyIHRoYW4gYnViYmxlIGNoYXJ0IHg6IHN0cmluZyB0eXBlIHk6IG51bWJlciB0eXBlXG4gICAgICAgIC8vIEJ1YmJsZSBjaGFydCB4OiBudW1iZXIgdHlwZSB5OiBudW1iZXIgdHlwZVxuICAgICAgICBpZiAoc3RyaW5nQ29sdW1uICYmIGRlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDAgJiYgIWlzQnViYmxlQ2hhcnQodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgdGVtcCA9IGRlZmF1bHRDb2x1bW5zWzBdO1xuICAgICAgICAgICAgZGVmYXVsdENvbHVtbnNbMF0gPSBzdHJpbmdDb2x1bW47XG4gICAgICAgICAgICBkZWZhdWx0Q29sdW1uc1sxXSA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmYXVsdENvbHVtbnM7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCB1c2VyIGRlZmluZWQgamF2YXNjcmlwdCBmdW5jdGlvbiB3aGVuIHVzZXIgbGlua3MgaXQgdG8gY2xpY2sgZXZlbnQgb2YgdGhlIHdpZGdldC5cbiAgICBhdHRhY2hDbGlja0V2ZW50KCkge1xuICAgICAgICBsZXQgZGF0YU9iajtcbiAgICAgICAgZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJykuc2VsZWN0QWxsKGNoYXJ0RGF0YVBvaW50WHBhdGhbdGhpcy50eXBlXSkuc3R5bGUoJ3BvaW50ZXItZXZlbnRzJywgJ2FsbCcpXG4gICAgICAgICAgICAub24oJ2NsaWNrJywgKGV2ZW50LCBkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NvbHVtbic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0Jhcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gZGF0YS5fZGF0YU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdQaWUnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdEb251dCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gZGF0YS5kYXRhLl9kYXRhT2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0FyZWEnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdDdW11bGF0aXZlIExpbmUnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdMaW5lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFPYmogPSBkYXRhWzBdLl9kYXRhT2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0J1YmJsZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkaXRlbSA9IGRhdGFPYmo7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3QnLCB7JGV2ZW50OiBkMy5ldmVudCwgc2VsZWN0ZWRDaGFydEl0ZW06IGRhdGEsIHNlbGVjdGVkSXRlbTogdGhpcy5zZWxlY3RlZGl0ZW19KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyogIFJldHVybnMgWSBTY2FsZSBtaW4gdmFsdWVcbiAgICAgICAgICAgRXg6IElucHV0ICAgOiA4Ljk3XG4gICAgICAgICAgICAgICBPdXRwdXQgIDogOC44N1xuXG4gICAgICAgICAgICAgICBJbnB1dCAgIDogOFxuICAgICAgICAgICAgICAgT3V0cHV0ICA6IDdcbiAgICAgICAqL1xuXG4gICAgcG9zdFBsb3RQcm9jZXNzKGNoYXJ0KSB7XG4gICAgICAgIGxldCBjaGFydFN2ZyxcbiAgICAgICAgICAgIHBpZUxhYmVscyxcbiAgICAgICAgICAgIHBpZUdyb3VwcyxcbiAgICAgICAgICAgIGFuZ2xlQXJyYXk7XG4gICAgICAgIGNvbnN0IHN0eWxlT2JqID0ge307XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiRlbGVtZW50O1xuXG4gICAgICAgIHBvc3RQbG90Q2hhcnRQcm9jZXNzKHRoaXMpO1xuXG4gICAgICAgIGlmICghaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TGFiZWxzTWF4V2lkdGgoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zaG93bGFiZWxzb3V0c2lkZSkge1xuICAgICAgICAgICAgLyoqIE52ZDMgaGFzIGEgaXNzdWUgaW4gcm90YXRpbmcgdGV4dC4gU28gd2Ugd2lsbCB1c2UgdGhpcyBhcyBhIHRlbXAgZml4LlxuICAgICAgICAgICAgICogSWYgdGhlIGlzc3VlIGlzIHJlc29sdmVkIHRoZXJlLCB3ZSBjYW4gcmVtb3ZlIHRoaXMuKi9cbiAgICAgICAgICAgIC8qIElmIGl0IGlzIGEgZG9udXQgY2hhcnQsIHRoZW4gcm90YXRlIHRoZSB0ZXh0IGFuZCBwb3NpdGlvbiB0aGVtKi9cbiAgICAgICAgICAgIGNoYXJ0U3ZnID0gZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJyk7XG4gICAgICAgICAgICBwaWVMYWJlbHMgPSBjaGFydFN2Zy5zZWxlY3QoJy5udi1waWVMYWJlbHMnKS5zZWxlY3RBbGwoJy5udi1sYWJlbCcpO1xuICAgICAgICAgICAgcGllR3JvdXBzID0gY2hhcnRTdmcuc2VsZWN0KCcubnYtcGllJykuc2VsZWN0QWxsKCcubnYtc2xpY2UnKTtcbiAgICAgICAgICAgIGFuZ2xlQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIGlmIChwaWVHcm91cHMgJiYgcGllR3JvdXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHBpZUdyb3Vwcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmdsZUFycmF5LnB1c2goYW5nbGUoZCkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwaWVMYWJlbHMuZWFjaChmdW5jdGlvbiAoZCwgaSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IGQzLnNlbGVjdCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgJChncm91cFswXVswXSkuZmluZCgndGV4dCcpLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoJyArIGFuZ2xlQXJyYXlbaV0gKyAnKScpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJlcGFyZSB0ZXh0IHN0eWxlIHByb3BzIG9iamVjdCBhbmQgc2V0XG4gICAgICAgIF8uZm9yRWFjaChzdHlsZVByb3BzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2ZvbnRzaXplJyB8fCBrZXkgPT09ICdmb250dW5pdCcpIHtcbiAgICAgICAgICAgICAgICBzdHlsZU9ialt2YWx1ZV0gPSB0aGlzLmZvbnRzaXplICsgdGhpcy5mb250dW5pdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGVPYmpbdmFsdWVdID0gdGhpc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGV4dFN0eWxlKHN0eWxlT2JqLCB0aGlzLiRpZCk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogYWxsb3cgd2luZG93LXJlc2l6ZSBmdW5jdGlvbmFsaXR5LCBmb3Igb25seS1ydW4gbW9kZSBhc1xuICAgICAgICAgKiB1cGRhdGluZyBjaGFydCBpcyBiZWluZyBoYW5kbGVkIGJ5IHdhdGNoZXJzIG9mIGhlaWdodCAmIHdpZHRoIGluIHN0dWRpby1tb2RlXG4gICAgICAgICAqICovXG4gICAgICAgIHRyaWdnZXJGbih0aGlzLl9yZXNpemVGbiAmJiB0aGlzLl9yZXNpemVGbi5jbGVhcik7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZUZuID0gbnYudXRpbHMud2luZG93UmVzaXplKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50WzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkge1xuICAgICAgICAgICAgICAgIGNoYXJ0LnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIHBvc3RQbG90Q2hhcnRQcm9jZXNzKHRoaXMpO1xuICAgICAgICAgICAgICAgIGlmICghaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMYWJlbHNNYXhXaWR0aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogZ2V0IHBhcmVudHMgb2YgYWNjb3JkaW9uIHR5cGVcbiAgICAgICAgICAgICAgICAvKmxldCBwYXJlbnQgPSBlbGVtZW50LmNsb3Nlc3QoJy5hcHAtYWNjb3JkaW9uLXBhbmVsLCAudGFiLXBhbmUnKS5pc29sYXRlU2NvcGUoKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0qL1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBwcmVwYXJlcyBhbmQgY29uZmlndXJlcyB0aGUgY2hhcnQgcHJvcGVydGllc1xuICAgIGNvbmZpZ3VyZUNoYXJ0KCkge1xuICAgICAgICAvLyBDb3B5IHRoZSBkYXRhIG9ubHkgaW4gY2FzZSBvZiBwaWUgY2hhcnQgd2l0aCBkZWZhdWx0IGRhdGFcbiAgICAgICAgLy8gUmVhc29uIDogd2hlbiBtdWx0aXBsZSBwaWUgY2hhcnRzIGFyZSBib3VuZCB0byBzYW1lIGRhdGEsIGZpcnN0IGNoYXJ0IHRoZW1lIHdpbGwgYmUgYXBwbGllZCB0byBhbGwgY2hhcnRzXG4gICAgICAgIGxldCB4RG9tYWluVmFsdWVzO1xuICAgICAgICBsZXQgeURvbWFpblZhbHVlcztcbiAgICAgICAgbGV0IGNoYXJ0O1xuICAgICAgICBsZXQgYmVmb3JlUmVuZGVyVmFsO1xuICAgICAgICBjb25zdCB5Zm9ybWF0T3B0aW9uczogYW55ID0ge307XG5cbiAgICAgICAgaWYgKHRoaXMuX3Byb2Nlc3NlZERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKGlzQXhpc0RvbWFpblZhbGlkKHRoaXMsICd4JykpIHtcbiAgICAgICAgICAgICAgICB4RG9tYWluVmFsdWVzID0gdGhpcy5iaW5kZGF0YXNldCA/IHRoaXMuZ2V0WE1pbk1heFZhbHVlcyh0aGlzLl9wcm9jZXNzZWREYXRhWzBdKSA6IHsgJ21pbicgOiB7J3gnOiAxfSwgICdtYXgnIDogeyd4JyA6IDV9fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0F4aXNEb21haW5WYWxpZCh0aGlzLCAneScpKSB7XG4gICAgICAgICAgICAgICAgeURvbWFpblZhbHVlcyA9IHRoaXMuYmluZGRhdGFzZXQgPyB0aGlzLmdldFlNaW5NYXhWYWx1ZXModGhpcy5fcHJvY2Vzc2VkRGF0YSkgOiB7ICdtaW4nIDogeyd5JyA6IDF9LCAnbWF4JyA6IHsneScgOiA1fX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQaWVUeXBlKHRoaXMudHlwZSkgJiYgKCF0aGlzLmJpbmRkYXRhc2V0IHx8ICF0aGlzLnNjb3BlZGF0YXNldCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5zY29wZWRhdGFzZXQgfHwgdGhpcy5fcHJvY2Vzc2VkRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgdGhlIGNoYXJ0IG9iamVjdFxuICAgICAgICBjaGFydCA9IGluaXRDaGFydCh0aGlzLCB4RG9tYWluVmFsdWVzLCB5RG9tYWluVmFsdWVzLCBudWxsLCAhdGhpcy5iaW5kZGF0YXNldCk7XG5cbiAgICAgICAgaWYgKF8uaXNBcnJheSh0aGlzLl9wcm9jZXNzZWREYXRhKSkge1xuICAgICAgICAgICAgLy8gV01TLTE5NDk5OiAgVG8gcmVtb3ZlIGNoYXJ0IFgtYXhpcyBvbGQgdGlja3Mgd2hlbiBjaGFydCBkYXRhIGxvYWRlZCBkeW5hbWljYWxseS5cbiAgICAgICAgICAgIGNvbnN0IG9sZGdUaWNrcyA9ICAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJykuZmluZCgnZy5udi14JykuZmluZCgnZy50aWNrJyk7XG4gICAgICAgICAgICBpZiAob2xkZ1RpY2tzICYmIG9sZGdUaWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBvbGRnVGlja3MucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiZWZvcmVSZW5kZXJWYWwgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJlbmRlcicsIHsgJ2NoYXJ0SW5zdGFuY2UnIDogY2hhcnR9KTtcbiAgICAgICAgICAgIGlmIChiZWZvcmVSZW5kZXJWYWwpIHtcbiAgICAgICAgICAgICAgICBjaGFydCA9IGJlZm9yZVJlbmRlclZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhcnQgPSBjaGFydDtcbiAgICAgICAgICAgIC8vIGNoYW5naW5nIHRoZSBkZWZhdWx0IG5vIGRhdGEgbWVzc2FnZVxuICAgICAgICAgICAgZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJylcbiAgICAgICAgICAgICAgICAuZGF0dW0odGhpcy5fcHJvY2Vzc2VkRGF0YSlcbiAgICAgICAgICAgICAgICAuY2FsbCh0aGlzLmNoYXJ0KTtcbiAgICAgICAgICAgIHRoaXMucG9zdFBsb3RQcm9jZXNzKGNoYXJ0KTtcbiAgICAgICAgICAgIHJldHVybiBjaGFydDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBsb3R0aW5nIHRoZSBjaGFydCB3aXRoIHNldCBvZiB0aGUgcHJvcGVydGllcyBzZXQgdG8gaXRcbiAgICBwbG90Q2hhcnQoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiRlbGVtZW50O1xuICAgICAgICAvLyBjYWxsIHVzZXItdHJhbnNmb3JtZWQgZnVuY3Rpb25cbiAgICAgICAgdGhpcy5jaGFydERhdGEgPSAodGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCd0cmFuc2Zvcm0nKSkgfHwgdGhpcy5jaGFydERhdGE7XG5cbiAgICAgICAgLy8gR2V0dGluZyB0aGUgb3JkZXIgYnkgZGF0YSBvbmx5IGluIHJ1biBtb2RlLiBUaGUgb3JkZXIgYnkgYXBwbGllcyBmb3IgYWxsIHRoZSBjaGFydHMgb3RoZXIgdGhhbiBwaWUgYW5kIGRvbnV0IGNoYXJ0c1xuICAgICAgICBpZiAodGhpcy5pc1Zpc3VhbGx5R3JvdXBlZCAmJiAhaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSB0aGlzLmNoYXJ0RGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSB0aGlzLnByb2Nlc3NDaGFydERhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVja2luZyB0aGUgcGFyZW50IGNvbnRhaW5lciBiZWZvcmUgcGxvdHRpbmcgdGhlIGNoYXJ0XG4gICAgICAgIGlmICghZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jbGVhckNhbnZhcykge1xuICAgICAgICAgICAgLy8gZW1wdHkgc3ZnIHRvIGFkZC1uZXcgY2hhcnRcbiAgICAgICAgICAgIGVsZW1lbnQuZmluZCgnc3ZnJykucmVwbGFjZVdpdGgoJzxzdmc+PC9zdmc+Jyk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQ2FudmFzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbiBjYXNlIG9mIGludmFsaWQgYXhpcyBzaG93IG5vIGRhdGEgYXZhaWxhYmxlIG1lc3NhZ2VcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRBeGlzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBudi5hZGRHcmFwaCgoKSA9PiB0aGlzLmNvbmZpZ3VyZUNoYXJ0KCksICAoKSA9PiB7XG4gICAgICAgICAgICAvKkJ1YmJsZSBjaGFydCBoYXMgYW4gdGltZSBvdXQgZGVsYXkgb2YgMzAwbXMgaW4gdGhlaXIgaW1wbGVtZW50YXRpb24gZHVlIHRvIHdoaWNoIHdlXG4gICAgICAgICAgICAqIHdvbid0IGJlIGdldHRpbmcgcmVxdWlyZWQgZGF0YSBwb2ludHMgb24gYXR0YWNoaW5nIGV2ZW50c1xuICAgICAgICAgICAgKiBoZW5jZSBkZWxheWluZyBpdCA2MDBtcyovXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hDbGlja0V2ZW50KCk7XG4gICAgICAgICAgICB9LCA2MDApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pc0xvYWRJblByb2dyZXNzID0gZmFsc2U7XG4gICAgfVxuICAgIC8vIFRPRE86IE5lZWQgd2F5IHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGRhdGFzb3VyY2UgaXMgYSBsaXZlIHNvdXJjZVxuICAgIGdldCBpc0xpdmVWYXJpYWJsZSgpIHtcbiAgICAgICAgLy8gc2V0dGluZyB0aGUgZmxhZyBmb3IgdGhlIGxpdmUgdmFyaWFibGUgaW4gdGhlIHNjb3BlIGZvciB0aGUgY2hlY2tzXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlT2JqID0gdGhpcy5kYXRhc291cmNlO1xuICAgICAgICByZXR1cm4gdmFyaWFibGVPYmogJiYgdmFyaWFibGVPYmouY2F0ZWdvcnkgPT09ICd3bS5MaXZlVmFyaWFibGUnO1xuICAgIH1cblxuICAgIHBsb3RDaGFydFByb3h5KCkge1xuICAgICAgICB0aGlzLnNob3dDb250ZW50TG9hZEVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW52YWxpZENvbmZpZyA9IGZhbHNlO1xuICAgICAgICAvLyBDaGVja2luZyBpZiB4IGFuZCB5IGF4aXMgYXJlIGNob3NlblxuICAgICAgICB0aGlzLmlzTG9hZEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICBjb25zdCBncm91cGluZ0RldGFpbHMgPSB0aGlzLmdldEdyb3VwaW5nRGV0YWlscygpO1xuICAgICAgICAvLyBJZiBhZ2dyZWdhdGlvbi9ncm91cCBieS9vcmRlciBieSBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBzZXQsIHRoZW4gZ2V0IHRoZSBhZ2dyZWdhdGVkIGRhdGEgYW5kIHBsb3QgdGhlIHJlc3VsdCBpbiB0aGUgY2hhcnQuXG4gICAgICAgIC8vIFRPRE86IGRhdGFzb3VyY2UgZm9yIGxpdmUgdmFyaWFibGUgZGV0ZWN0aW9uXG4gICAgICAgIGlmICh0aGlzLmJpbmRkYXRhc2V0ICYmIHRoaXMuaXNMaXZlVmFyaWFibGUgJiYgKHRoaXMuZmlsdGVyRmllbGRzIHx8IHRoaXMuaXNEYXRhRmlsdGVyaW5nRW5hYmxlZCgpKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRBZ2dyZWdhdGVkRGF0YSgoKSA9PiB0aGlzLnBsb3RDaGFydCgpKTtcbiAgICAgICAgfSBlbHNlIHsgLy8gRWxzZSwgc2ltcGx5IHBsb3QgdGhlIGNoYXJ0LlxuICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBsaXZlIHZhcmlhYmxlIHJlc2V0dGluZyB0aGUgYWdncmVnYXRlZCBkYXRhIHRvIHRoZSBub3JtYWwgZGF0YXNldCB3aGVuIHRoZSBhZ2dyZWdhdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhc2V0ICYmIHRoaXMuaXNMaXZlVmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IHRoaXMuZGF0YXNldDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkgJiYgZ3JvdXBpbmdEZXRhaWxzLmlzVmlzdWFsbHlHcm91cGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gdGhpcy5nZXRWaXN1YWxseUdyb3VwZWREYXRhKHRoaXMuY2hhcnREYXRhLCBncm91cGluZ0RldGFpbHMudmlzdWFsR3JvdXBpbmdDb2x1bW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wbG90Q2hhcnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGRlZmF1bHQgeCBhbmQgeSBheGlzIG9wdGlvbnNcbiAgICBzZXREZWZhdWx0QXhpc09wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gdGhpcy5nZXREZWZhdWx0Q29sdW1ucygpO1xuICAgICAgICAvLyBJZiB3ZSBnZXQgdGhlIHZhbGlkIGRlZmF1bHQgY29sdW1ucyB0aGVuIGFzc2lnbiB0aGVtIGFzIHRoZSB4IGFuZCB5IGF4aXNcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBzZXJ2aWNlIHZhcmlhYmxlIHdlIG1heSBub3QgZ2V0IHRoZSB2YWxpZCBjb2x1bW5zIGJlY2F1c2Ugd2UgY2Fubm90IGtub3cgdGhlIGRhdGF0eXBlc1xuICAgICAgICB0aGlzLnhheGlzZGF0YWtleSA9IGRlZmF1bHRDb2x1bW5zWzBdIHx8IG51bGw7XG4gICAgICAgIHRoaXMueWF4aXNkYXRha2V5ID0gZGVmYXVsdENvbHVtbnNbMV0gfHwgbnVsbDtcbiAgICB9XG5cbiAgICBnZXRDdXRvbWl6ZWRPcHRpb25zKHByb3AsIGZpZWxkcykge1xuICAgICAgICBjb25zdCBncm91cEJ5Q29sdW1ucyA9IF8uc3BsaXQodGhpcy5ncm91cGJ5LCAnLCcpLFxuICAgICAgICAgICAgYWdnQ29sdW1ucyA9IF8uc3BsaXQodGhpcy5hZ2dyZWdhdGlvbmNvbHVtbiwgJywnKTtcbiAgICAgICAgaWYgKCF0aGlzLmJpbmRkYXRhc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5heGlzb3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5heGlzb3B0aW9ucyA9IGZpZWxkcztcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3T3B0aW9ucztcbiAgICAgICAgc3dpdGNoIChwcm9wKSB7XG4gICAgICAgICAgICBjYXNlICd4YXhpc2RhdGFrZXknOlxuICAgICAgICAgICAgICAgIC8vIElmIGdyb3VwIGJ5IGVuYWJsZWQsIGNvbHVtbnMgY2hvc2VuIGluIGdyb3VwYnkgd2lsbCBiZSBwb3B1bGF0ZWQgaW4geCBheGlzIG9wdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IGdyb3VwQnlDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3lheGlzZGF0YWtleSc6XG4gICAgICAgICAgICAgICAgLy8gSWYgYWdncmVnYXRpb24gYnkgZW5hYmxlZCwgY29sdW1ucyBjaG9zZW4gaW4gYWdncmVnYXRpb24gd2lsbCBiZSBwb3B1bGF0ZWQgaW4geSBheGlzIG9wdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSBhZ2dDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0xpdmVWYXJpYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGxpdmUgdmFyaWFibGUgcG9wdWxhdGluZyBvbmx5IG51bWVyaWMgY29sdW1uc1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gdGhpcy5udW1lcmljQ29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncm91cGJ5JzpcbiAgICAgICAgICAgICAgICAvLyBGaWx0ZXJpbmcgb25seSBub24gcHJpbWFyeSBrZXkgY29sdW1uc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGl2ZVZhcmlhYmxlICYmIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMgJiYgdGhpcy5ub25QcmltYXJ5Q29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IHRoaXMubm9uUHJpbWFyeUNvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWdncmVnYXRpb25jb2x1bW4nOlxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgJ2FnZ3JlZ2F0aW9uQ29sdW1uJyB0byBzaG93IGFsbCBrZXlzIGluIGNhc2Ugb2YgYWdncmVnYXRpb24gZnVuY3Rpb24gaXMgY291bnQgb3IgdG8gbnVtZXJpYyBrZXlzIGluIGFsbCBvdGhlciBjYXNlcy5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpdmVWYXJpYWJsZSAmJiB0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkgJiYgdGhpcy5hZ2dyZWdhdGlvbiAhPT0gJ2NvdW50Jykge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gdGhpcy5udW1lcmljQ29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvcmRlcmJ5JzpcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlICdhZ2dyZWdhdGlvbkNvbHVtbicgdG8gc2hvdyBhbGwga2V5cyBpbiBjYXNlIG9mIGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uIGlzIGNvdW50IG9yIHRvIG51bWVyaWMga2V5cyBpbiBhbGwgb3RoZXIgY2FzZXMuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlVmFyaWFibGUgJiYgdGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSBfLnVuaXEoXy5jb25jYXQoZ3JvdXBCeUNvbHVtbnMsIGFnZ0NvbHVtbnMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdidWJibGVzaXplJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1lcmljQ29sdW1ucyAmJiB0aGlzLm51bWVyaWNDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gdGhpcy5udW1lcmljQ29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T3B0aW9ucyB8fCBmaWVsZHMgfHwgdGhpcy5heGlzb3B0aW9ucztcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0aGF0IGl0ZXJhdGVzIHRocm91Z2ggYWxsIHRoZSBjb2x1bW5zIGFuZCB0aGVuIGZldGNoaW5nIHRoZSBudW1lcmljIGFuZCBub24gcHJpbWFyeSBjb2x1bW5zIGFtb25nIHRoZW1cbiAgICBzZXROdW1lcmljYW5kTm9uUHJpbWFyeUNvbHVtbnMoKSB7XG4gICAgICAgIGxldCBjb2x1bW5zLFxuICAgICAgICAgICAgdHlwZTtcbiAgICAgICAgY29uc3QgcHJvcGVydGllc01hcCA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QUk9QRVJUSUVTX01BUCk7XG4gICAgICAgIHRoaXMubnVtZXJpY0NvbHVtbnMgPSBbXTtcbiAgICAgICAgdGhpcy5ub25QcmltYXJ5Q29sdW1ucyA9IFtdO1xuICAgICAgICAvLyBGZXRjaGluZyBhbGwgdGhlIGNvbHVtbnNcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNldCAmJiAhXy5pc0VtcHR5KHByb3BlcnRpZXNNYXApKSB7XG4gICAgICAgICAgICBjb2x1bW5zID0gW107IC8vIFRPRE86IGZldGNoUHJvcGVydGllc01hcENvbHVtbnMocHJvcGVydGllc01hcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sdW1ucykge1xuICAgICAgICAgICAgLy8gSXRlcmF0aW5nIHRocm91Z2ggYWxsIHRoZSBjb2x1bW5zIGFuZCBmZXRjaGluZyB0aGUgbnVtZXJpYyBhbmQgbm9uIHByaW1hcnkga2V5IGNvbHVtbnNcbiAgICAgICAgICAgIF8uZm9yRWFjaChPYmplY3Qua2V5cyhjb2x1bW5zKSwgKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHR5cGUgPSBjb2x1bW5zW2tleV0udHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJUeXBlKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubnVtZXJpY0NvbHVtbnMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBIaWRpbmcgb25seSB0YWJsZSdzIHByaW1hcnkga2V5XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbnNba2V5XS5pc1JlbGF0ZWRQayA9PT0gJ3RydWUnIHx8ICFjb2x1bW5zW2tleV0uaXNQcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5udW1lcmljQ29sdW1ucyA9IHRoaXMubnVtZXJpY0NvbHVtbnMuc29ydCgpO1xuICAgICAgICAgICAgdGhpcy5ub25QcmltYXJ5Q29sdW1ucyA9IHRoaXMubm9uUHJpbWFyeUNvbHVtbnMuc29ydCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcGxvdCB0aGUgY2hhcnRcbiAgICBoYW5kbGVEYXRhU2V0KG5ld1ZhbCkge1xuICAgICAgICB0aGlzLmVyck1zZyA9ICcnO1xuICAgICAgICAvLyBSZXNldHRpbmcgdGhlIGZsYWcgdG8gZmFsc2Ugd2hlbiB0aGUgYmluZGluZyB3YXMgcmVtb3ZlZFxuICAgICAgICBpZiAoIW5ld1ZhbCAmJiAhdGhpcy5iaW5kZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy5pc1Zpc3VhbGx5R3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5heGlzb3B0aW9ucyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsaXZlVmFyaWFibGVzIGNvbnRhaW4gZGF0YSBpbiAnZGF0YScgcHJvcGVydHknIG9mIHRoZSB2YXJpYWJsZVxuICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IHRoaXMuaXNMaXZlVmFyaWFibGUgPyBuZXdWYWwgfHwgJycgOiAobmV3VmFsICYmIG5ld1ZhbC5kYXRhVmFsdWUgPT09ICcnICYmIF8ua2V5cyhuZXdWYWwpLmxlbmd0aCA9PT0gMSkgPyAnJyA6IG5ld1ZhbDtcblxuICAgICAgICAvLyBpZiB0aGUgZGF0YSByZXR1cm5lZCBpcyBhbiBvYmplY3QgbWFrZSBpdCBhbiBhcnJheSBvZiBvYmplY3RcbiAgICAgICAgaWYgKCFfLmlzQXJyYXkodGhpcy5jaGFydERhdGEpICYmIF8uaXNPYmplY3QodGhpcy5jaGFydERhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IFt0aGlzLmNoYXJ0RGF0YV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3VmFsICYmIG5ld1ZhbC5maWx0ZXJGaWVsZHMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gbmV3VmFsLmZpbHRlckZpZWxkcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHBsb3RjaGFydCBmb3Igb25seSB2YWxpZCBkYXRhIGFuZCBvbmx5IGFmdGVyIGJvdW5kIHZhcmlhYmxlIHJldHVybnMgZGF0YVxuICAgICAgICBpZiAodGhpcy5jaGFydERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX3Bsb3RDaGFydFByb3h5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcGxvdENoYXJ0UHJveHkgPSBfLmRlYm91bmNlKHRoaXMucGxvdENoYXJ0UHJveHkuYmluZCh0aGlzKSwgMTAwKTtcblxuICAgIC8vIHNldHMgdGhlIGNlbnRlciBsYWJlbCBmb3IgZG9udXQgY2hhcnQgdHlwZVxuICAgIHNldERvbnV0Q2VudGVyTGFiZWwobGFiZWxWYWx1ZSkge1xuICAgICAgICBsZXQgY2hhcnRTdmcsIHBpZUdyb3VwcztcbiAgICAgICAgY2hhcnRTdmcgPSBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKTtcblxuICAgICAgICBwaWVHcm91cHMgPSBjaGFydFN2Zy5zZWxlY3QoJy5udi13cmFwLm52LXBpZScpLnNlbGVjdCgnLm52LXBpZScpO1xuICAgICAgICBwaWVHcm91cHMudGV4dCgnJyk7XG4gICAgICAgIHBpZUdyb3Vwcy5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgLmF0dHIoJ2R5JywgJy4zNWVtJylcbiAgICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ252LXBpZS10aXRsZScpXG4gICAgICAgICAgICAudGV4dChsYWJlbFZhbHVlKVxuICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZDN0ZXh0ID0gZDMuc2VsZWN0KHRoaXMpLFxuICAgICAgICAgICAgICAgIGNpcmMgPSBkMy5zZWxlY3QodGhpcy5wYXJlbnRFbGVtZW50KSxcbiAgICAgICAgICAgICAgICB0b3RhbFdpZHRoID0gTnVtYmVyKGNpcmMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKSxcbiAgICAgICAgICAgICAgICAvLyBtaW51cyB0aGUgcmluZyB3aWR0aCBmcm9tIHRvdGFsIHdpZHRoXG4gICAgICAgICAgICAgICAgYXZhaWxXaWR0aCA9IHRvdGFsV2lkdGggLSAzMCxcbiAgICAgICAgICAgICAgICB0ZXh0V2lkdGggPSB0aGlzLmdldENvbXB1dGVkVGV4dExlbmd0aCgpO1xuICAgICAgICAgICAgICAgIGQzdGV4dC5hdHRyKFwiZGF0YS1zY2FsZVwiLCBhdmFpbFdpZHRoIC8gdGV4dFdpZHRoKTtcbiAgICAgICAgICAgICAgfSkuc3R5bGUoXCJmb250LXNpemVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gMTYgaXMgdGhlIGRlZmF1bHQgZm9udCBzaXplIHRvIG11bHRpcGx5IHdpdGggdGhlIHNjYWxlZCB2YWx1ZSBhbmQgMjQgaXMgdGhlIG1heGltdW0gZm9udCBzaXplIHRoYXQgY2FuIGJlIGFwcGxpZWRcbiAgICAgICAgICAgICAgICB2YXIgZm9udFNpemUgPSAxNiAqIGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwiZGF0YS1zY2FsZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9udFNpemUgPiAyNCA/IDI0IDogZm9udFNpemUgKyBcInB4XCI7XG4gICAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBuZXdWYWwsIG9sZFZhbD8pIHtcbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG5ld1ZhbCwgb2xkVmFsKTtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzZXQnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0YVNldChuZXdWYWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2VudGVybGFiZWwnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQudGl0bGUobmV3VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREb251dENlbnRlckxhYmVsKG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgICAgICAgICAgLy8gQmFzZWQgb24gdGhlIGNoYW5nZSBpbiB0eXBlIGRlY2lkaW5nIHRoZSBkZWZhdWx0IG1hcmdpbnNcbiAgICAgICAgICAgICAgICBpZiAoaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXR0b3AgPSAyMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRyaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0Ym90dG9tID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRsZWZ0ID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9sZFZhbCA9PT0gJ1BpZScgfHwgb2xkVmFsID09PSAnRG9udXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0dG9wID0gMjU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0cmlnaHQgPSAyNTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRib3R0b20gPSA1NTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRsZWZ0ID0gNzU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG9sZFZhbCAhPT0gbmV3VmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJDYW52YXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJbiBzdHVkaW8gbW9kZSwgY29uZmlndXJlIHByb3BlcnRpZXMgZGVwZW5kZW50IG9uIGNoYXJ0IHR5cGVcbiAgICAgICAgICAgICAgICB0aGlzLl9wbG90Q2hhcnRQcm94eSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvLyBJbiBSdW5Nb2RlLCB0aGUgcGxvdGNoYXJ0IG1ldGhvZCB3aWxsIG5vdCBiZSBjYWxsZWQgZm9yIGFsbCBwcm9wZXJ0eSBjaGFuZ2VcbiAgICAgICAgICAgICAgICB0aGlzLl9wbG90Q2hhcnRQcm94eSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmluY2x1ZGVzKGFkdmFuY2VEYXRhUHJvcHMsIGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Bsb3RDaGFydFByb3h5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVMb2FkaW5nKGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHRoaXMuZGF0YXNvdXJjZTtcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSkgJiYgaXNEYXRhU291cmNlRXF1YWwoZGF0YS52YXJpYWJsZSwgZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGRhdGEuYWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRJblByb2dyZXNzID0gZGF0YS5hY3RpdmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoaWRlVG9vbHRpcCgpIHtcbiAgICAgICAgZDMuc2VsZWN0QWxsKCcubnZ0b29sdGlwJykuc3R5bGUoJ29wYWNpdHknLCAwKTtcbiAgICB9XG5cbiAgICBvblN0eWxlQ2hhbmdlKGtleSwgbmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgICAgY29uc3Qgc3R5bGVPYmogPSB7fTtcbiAgICAgICAgc3VwZXIub25TdHlsZUNoYW5nZShrZXksIG5ld1ZhbCwgb2xkVmFsKTtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2ZvbnRzaXplJzpcbiAgICAgICAgICAgIGNhc2UgJ2ZvbnR1bml0JzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzpcbiAgICAgICAgICAgIGNhc2UgJ2ZvbnRmYW1pbHknOlxuICAgICAgICAgICAgY2FzZSAnZm9udHdlaWdodCc6XG4gICAgICAgICAgICBjYXNlICdmb250c3R5bGUnOlxuICAgICAgICAgICAgY2FzZSAndGV4dGRlY29yYXRpb24nOlxuICAgICAgICAgICAgICAgIHN0eWxlT2JqW3N0eWxlUHJvcHNba2V5XV0gPSAoa2V5ID09PSAnZm9udHNpemUnIHx8IGtleSA9PT0gJ2ZvbnR1bml0JykgPyB0aGlzLmZvbnRzaXplICsgdGhpcy5mb250dW5pdCA6IG5ld1ZhbDtcbiAgICAgICAgICAgICAgICBzZXRUZXh0U3R5bGUoc3R5bGVPYmosIHRoaXMuJGlkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIHByaXZhdGUgYXBwOiBBcHApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHKTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcywgQVBQTFlfU1RZTEVTX1RZUEUuQ09OVEFJTkVSLCBbJ2ZvbnRzaXplJywgJ2ZvbnR1bml0JywgJ2NvbG9yJywgJ2ZvbnRmYW1pbHknLCAnZm9udHdlaWdodCcsICdmb250c3R5bGUnLCAndGV4dGRlY29yYXRpb24nXSk7XG5cbiAgICAgICAgLy8gZ2VuZXJhdGUgdW5pcXVlIGlkIGZvciB0aGUgY29tcG9uZW50XG4gICAgICAgIHRoaXMuJGlkID0gdGhpcy53aWRnZXRJZCB8fCBNYXRoLnJhbmRvbSgpO1xuICAgICAgICAvLyByZW1vdmUgdGl0bGUgYXR0cmlidXRlIGFzIHRoZSBlbGVtZW50IG9uIGhvdmVyIHNob3dzIHlvdSB0aGUgaGludCB0aHJvdWdoLW91dCB0aGUgZWxlbWVudFxuICAgICAgICByZW1vdmVBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ3RpdGxlJyk7XG4gICAgICAgIHRoaXMuY2hhcnRSZWFkeSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJpbmRkYXRhc2V0ID0gdGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJyk7XG4gICAgICAgIC8vIFNob3cgbG9hZGluZyBzdGF0dXMgYmFzZWQgb24gdGhlIHZhcmlhYmxlIGxpZmUgY3ljbGVcbiAgICAgICAgdGhpcy5fc3Vic2NpcHRpb25zLnB1c2godGhpcy5hcHAuc3Vic2NyaWJlKCd0b2dnbGUtdmFyaWFibGUtc3RhdGUnLCB0aGlzLmhhbmRsZUxvYWRpbmcuYmluZCh0aGlzKSkpO1xuICAgICAgICAvLyBXaWxsIGhpZGUgdG9sbHRpcCBvZiBhIGNoYXJ0IGluIG1vYmlsZSB3aGVuIHRoZSB1c2VyIHNjcm9sbHMuXG4gICAgICAgIHRoaXMuX3N1YnNjaXB0aW9ucy5wdXNoKHRoaXMuYXBwLnN1YnNjcmliZSgnaXNjcm9sbC1zdGFydCcsICgpID0+IHt0aGlzLmhpZGVUb29sdGlwKCk7fSkpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIC8vIEZvciBvbGQgcHJvamVjdHNcbiAgICAgICAgaWYgKCFfLmluY2x1ZGVzKFsnb3V0c2lkZScsICdpbnNpZGUnLCAnaGlkZSddLCB0aGlzLnNob3dsYWJlbHMpKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dsYWJlbHMgICAgICAgID0gZ2V0Qm9vbGVhblZhbHVlKHRoaXMuc2hvd2xhYmVscyk7XG4gICAgICAgICAgICB0aGlzLnNob3dsYWJlbHNvdXRzaWRlID0gZ2V0Qm9vbGVhblZhbHVlKHRoaXMuc2hvd2xhYmVsc291dHNpZGUpO1xuICAgICAgICAgICAgdGhpcy5zaG93bGFiZWxzICAgICAgICA9IHRoaXMuc2hvd2xhYmVscyA/ICh0aGlzLnNob3dsYWJlbHNvdXRzaWRlID8gJ291dHNpZGUnIDogJ2luc2lkZScpIDogJ2hpZGUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRoZW1lKSB7XG4gICAgICAgICAgICAvLyBEZWZhdWx0IHRoZW1lIGZvciBwaWUvZG9udXQgaXMgQXp1cmUgYW5kIGZvciBvdGhlciBpdCBpcyBUZXJyZXN0cmlhbFxuICAgICAgICAgICAgdGhpcy50aGVtZSA9IGlzUGllVHlwZSh0aGlzLnR5cGUpID8gJ0F6dXJlJyA6ICdUZXJyZXN0cmlhbCc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsICd3bUNoYXJ0JyArIHRoaXMuJGlkKTtcbiAgICAgICAgLy8gV2hlbiB0aGVyZSBpcyBub3QgdmFsdWUgYmluZGluZywgdGhlbiBwbG90IHRoZSBjaGFydCB3aXRoIHNhbXBsZSBkYXRhXG4gICAgICAgIGlmICghdGhpcy5iaW5kZGF0YXNldCAmJiAhdGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnc2NvcGVkYXRhc2V0JykpIHtcbiAgICAgICAgICAgIHRoaXMuX3Bsb3RDaGFydFByb3h5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gZGVzdHJveSBhbGwgc3Vic2NyaXB0aW9ucyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrLlxuICAgICAgICB0aGlzLmhpZGVUb29sdGlwKCk7XG4gICAgICAgIHRoaXMuX3N1YnNjaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb24pPT57XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuICAgIHJlZHJhdyA9IHRoaXMuX3Bsb3RDaGFydFByb3h5LmJpbmQodGhpcyk7XG59XG4iLCI8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiICpuZ0lmPVwidGl0bGVcIj5cbiAgICA8aDMgY2xhc3M9XCJwYW5lbC10aXRsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+PGkgY2xhc3M9XCJhcHAtaWNvbiBwYW5lbC1pY29uIHt7aWNvbmNsYXNzfX1cIiBbY2xhc3MubmctaGlkZV09XCIhaWNvbmNsYXNzXCI+PC9pPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCIgKm5nSWY9XCJzdWJoZWFkaW5nXCIgW2lubmVySFRNTF09XCJzdWJoZWFkaW5nXCI+PC9kaXY+XG4gICAgPC9oMz5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImFwcC1jaGFydC1pbm5lclwiIFtuZ0NsYXNzXT1cInsnbG9hZGluZyc6aXNMb2FkSW5Qcm9ncmVzcywgJ3BhbmVsLWJvZHknOiB0aXRsZX1cIj5cbiAgICA8c3ZnPjwvc3ZnPlxuICAgIDxkaXYgY2xhc3M9XCJ3bS1jb250ZW50LWluZm8gcmVhZG9ubHktd3JhcHBlclwiICpuZ0lmPVwic2hvd0NvbnRlbnRMb2FkRXJyb3IgJiYgc2hvd05vRGF0YU1zZ1wiPlxuICAgICAgICA8cCBjbGFzcz1cIndtLW1lc3NhZ2VcIiBbdGl0bGVdPVwiaGludE1zZ1wiIFtuZ0NsYXNzXT1cInsnZXJyb3InOiBpbnZhbGlkQ29uZmlnfVwiIFtpbm5lclRleHRdPVwiZXJyTXNnXCI+PC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgd21TcGlubmVyIHNob3cuYmluZD1cImlzTG9hZEluUHJvZ3Jlc3NcIiBjYXB0aW9uLmJpbmQ9XCJsb2FkaW5nZGF0YW1zZ1wiPjwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
1002
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0L3NyYy9jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnQvc3JjL2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQVcsTUFBTSxlQUFlLENBQUM7QUFFdEgsT0FBTyxFQUNILEdBQUcsRUFDSCxVQUFVLEVBQ1YsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGNBQWMsRUFDZCxVQUFVLEVBQ1YsU0FBUyxFQUdaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0Isa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxHQUFJLE1BQU0scUJBQXFCLENBQUM7QUFFL0gsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0lDZHpOLHlCQUEyRTs7O0lBQS9CLGdFQUF3Qjs7O0lBSjVFLDhCQUF5QyxZQUFBLGFBQUE7SUFFVixvQkFBOEU7SUFBQSxpQkFBTTtJQUMzRyx5QkFBK0M7SUFDL0MscUVBQTJFO0lBQy9FLGlCQUFLLEVBQUE7OztJQUh5QixlQUF5QztJQUF6Qyx1RUFBeUM7SUFBQyw0Q0FBNEI7SUFDM0UsZUFBbUI7SUFB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QUdiO29CQUNQLGtCQUFrQixnQkFBZ0I7aUJBQ3JDLGlCQUNjLGlCQUFpQixDQUFDLElBQUk7NkVBcURULEtBQUs7a0JBQWhDLFdBQVc7bUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbmplY3RvciwgVmlld0VuY2Fwc3VsYXRpb24sIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgICBBcHAsXG4gICAgRGF0YVNvdXJjZSxcbiAgICBnZXRDbG9uZWRPYmplY3QsXG4gICAgaXNEYXRhU291cmNlRXF1YWwsXG4gICAgaXNFbXB0eU9iamVjdCxcbiAgICBpc051bWJlclR5cGUsXG4gICAgcHJldHRpZnlMYWJlbHMsXG4gICAgcmVtb3ZlQXR0cixcbiAgICB0cmlnZ2VyRm4sXG4gICAgaXNNb2JpbGVBcHAsXG4gICAgbm9vcFxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBBUFBMWV9TVFlMRVNfVFlQRSwgSVJlZHJhd2FibGVDb21wb25lbnQsIHByb3ZpZGVBc1dpZGdldFJlZiwgU3R5bGFibGVDb21wb25lbnQsIHN0eWxlciwgIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL2NoYXJ0LnByb3BzJztcbmltcG9ydCB7IGFsbFNoYXBlcywgZ2V0RGF0ZUxpc3QsIGdldFNhbXBsZURhdGEsIGluaXRDaGFydCwgaXNBcmVhQ2hhcnQsIGlzQXhpc0RvbWFpblZhbGlkLCBpc0JhckNoYXJ0LCBpc0J1YmJsZUNoYXJ0LCBpc0NoYXJ0RGF0YUFycmF5LCBpc0NoYXJ0RGF0YUpTT04sIGlzTGluZVR5cGVDaGFydCwgaXNQaWVUeXBlLCBwb3N0UGxvdENoYXJ0UHJvY2VzcyB9IGZyb20gJy4vY2hhcnQudXRpbHMnO1xuXG5kZWNsYXJlIGNvbnN0ICQsIF8sIGQzLCBudjtcblxuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tY2hhcnQnLCBob3N0Q2xhc3M6ICdhcHAtY2hhcnQnfTtcblxuY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgJ0J1YmJsZScgOiBbJ2J1YmJsZXNpemUnLCAnc2hhcGUnXVxuICAgIH0sXG4gICAgTk9ORSA9ICdub25lJyxcbiAgICBhZHZhbmNlRGF0YVByb3BzID0gWydhZ2dyZWdhdGlvbicsICdhZ2dyZWdhdGlvbmNvbHVtbicsICdncm91cGJ5JywgJ29yZGVyYnknXSxcbiAgICAvLyBYUGF0aHMgdG8gZ2V0IGFjdHVhbCBkYXRhIG9mIGRhdGEgcG9pbnRzIGluIGNoYXJ0c1xuICAgIGNoYXJ0RGF0YVBvaW50WHBhdGggPSB7XG4gICAgICAgICdDb2x1bW4nICAgICAgICAgOiAncmVjdC5udi1iYXInLFxuICAgICAgICAnQmFyJyAgICAgICAgICAgIDogJ2cubnYtYmFyJyxcbiAgICAgICAgJ0FyZWEnICAgICAgICAgICA6ICcubnYtc3RhY2tlZGFyZWEgLm52LXBvaW50JyxcbiAgICAgICAgJ0N1bXVsYXRpdmUgTGluZSc6ICcubnYtY3VtdWxhdGl2ZUxpbmUgLm52LXNjYXR0ZXJXcmFwIHBhdGgubnYtcG9pbnQnLFxuICAgICAgICAnTGluZScgICAgICAgICAgIDogJy5udi1saW5lQ2hhcnQgLm52LXNjYXR0ZXJXcmFwIHBhdGgubnYtcG9pbnQnLFxuICAgICAgICAnUGllJyAgICAgICAgICAgIDogJy5udi1waWVDaGFydCAubnYtc2xpY2UgcGF0aCcsXG4gICAgICAgICdEb251dCcgICAgICAgICAgOiAnLm52LXBpZUNoYXJ0IC5udi1zbGljZSBwYXRoJyxcbiAgICAgICAgJ0J1YmJsZScgICAgICAgICA6ICcubnYtc2NhdHRlckNoYXJ0IC5udi1wb2ludC1wYXRocyBwYXRoJ1xuICAgIH0sXG4gICAgLy8gYWxsIHByb3BlcnRpZXMgb2YgdGhlIGNoYXJ0XG4gICAgYWxsT3B0aW9ucyA9IFsnYnViYmxlc2l6ZScsICdzaGFwZSddLFxuICAgIHN0eWxlUHJvcHMgPSB7XG4gICAgICAgICdmb250dW5pdCcgICAgICA6ICdmb250LXNpemUnLFxuICAgICAgICAnZm9udHNpemUnICAgICAgOiAnZm9udC1zaXplJyxcbiAgICAgICAgJ2NvbG9yJyAgICAgICAgIDogJ2ZpbGwnLFxuICAgICAgICAnZm9udGZhbWlseScgICAgOiAnZm9udC1mYW1pbHknLFxuICAgICAgICAnZm9udHdlaWdodCcgICAgOiAnZm9udC13ZWlnaHQnLFxuICAgICAgICAnZm9udHN0eWxlJyAgICAgOiAnZm9udC1zdHlsZScsXG4gICAgICAgICd0ZXh0ZGVjb3JhdGlvbic6ICd0ZXh0LWRlY29yYXRpb24nXG4gICAgfSxcbiAgICAvLyBHZXR0aW5nIHRoZSByZWxldmFudCBhZ2dyZWdhdGlvbiBmdW5jdGlvbiBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgb3B0aW9uXG4gICAgYWdncmVnYXRpb25Gbk1hcCA9IHtcbiAgICAgICAgJ2F2ZXJhZ2UnIDogJ0FWRycsXG4gICAgICAgICdjb3VudCcgICA6ICdDT1VOVCcsXG4gICAgICAgICdtYXhpbXVtJyA6ICdNQVgnLFxuICAgICAgICAnbWluaW11bScgOiAnTUlOJyxcbiAgICAgICAgJ3N1bScgICAgIDogJ1NVTSdcbiAgICB9O1xuXG5jb25zdCBnZXRCb29sZWFuVmFsdWUgPSB2YWwgPT4ge1xuICAgIGlmICh2YWwgPT09IHRydWUgfHwgdmFsID09PSAndHJ1ZScpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh2YWwgPT09IGZhbHNlIHx8IHZhbCA9PT0gJ2ZhbHNlJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vLyByZXR1cm5zIG9yZGVyYnkgY29sdW1ucyBhbmQgdGhlaXIgb3JkZXJzIGluIHR3byBzZXBhcmF0ZSBhcnJheXNcbmNvbnN0IGdldExvZGFzaE9yZGVyQnlGb3JtYXQgPSBvcmRlcmJ5ID0+IHtcbiAgICBsZXQgY29sdW1ucztcbiAgICBjb25zdCBvcmRlckJ5Q29sdW1ucyA9IFtdLFxuICAgICAgICBvcmRlcnMgPSBbXTtcblxuICAgIF8uZm9yRWFjaChfLnNwbGl0KG9yZGVyYnksICcsJyksIGZ1bmN0aW9uIChjb2wpIHtcbiAgICAgICAgY29sdW1ucyA9IF8uc3BsaXQoY29sLCAnOicpO1xuICAgICAgICBvcmRlckJ5Q29sdW1ucy5wdXNoKGNvbHVtbnNbMF0pO1xuICAgICAgICBvcmRlcnMucHVzaChjb2x1bW5zWzFdKTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICAnY29sdW1ucycgOiBvcmRlckJ5Q29sdW1ucyxcbiAgICAgICAgJ29yZGVycycgIDogb3JkZXJzXG4gICAgfTtcbn07XG5cbi8vIFJlcGxhY2luZyB0aGUgJy4nIGJ5IHRoZSAnJCcgYmVjYXVzZSAnLicgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgYWxpYXMgbmFtZXNcbmNvbnN0IGdldFZhbGlkQWxpYXNOYW1lID0gYWxpYXNOYW1lID0+IGFsaWFzTmFtZSA/IGFsaWFzTmFtZS5yZXBsYWNlKC9cXC4vZywgJyQnKSA6IG51bGw7XG5cbi8vIEFwcGx5aW5nIHRoZSBmb250IHJlbGF0ZWQgc3R5bGVzIGZvciB0aGUgY2hhcnRcbmNvbnN0IHNldFRleHRTdHlsZSA9IChwcm9wZXJ0aWVzLCBpZCkgPT4ge1xuICAgIGNvbnN0IGNoYXJ0dGV4dCA9IGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgaWQgKyAnIHN2ZycpLnNlbGVjdEFsbCgndGV4dCcpO1xuICAgIGlmICghY2hhcnR0ZXh0LmVtcHR5KCkpIHtcbiAgICAgICAgY2hhcnR0ZXh0LnN0eWxlKHByb3BlcnRpZXMpO1xuICAgIH1cbn07XG5cbmNvbnN0IGFuZ2xlID0gZCA9PiB7XG4gICAgY29uc3QgYSA9IChkLnN0YXJ0QW5nbGUgKyBkLmVuZEFuZ2xlKSAqIDkwIC8gTWF0aC5QSSAtIDkwO1xuICAgIHJldHVybiBhID4gOTAgPyBhIC0gMTgwIDogYTtcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZGl2W3dtQ2hhcnRdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQHdhdmVtYWtlci9udmQzL2J1aWxkL252LmQzLm1pbi5jc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKENoYXJ0Q29tcG9uZW50KVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBJUmVkcmF3YWJsZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIHhheGlzZGF0YWtleTtcbiAgICB5YXhpc2RhdGFrZXk7XG4gICAgZ3JvdXBieTtcbiAgICBhZ2dyZWdhdGlvbjtcbiAgICBhZ2dyZWdhdGlvbmNvbHVtbjtcbiAgICBpc1Zpc3VhbGx5R3JvdXBlZDtcbiAgICBvcmRlcmJ5O1xuICAgIGljb25jbGFzcyA9ICcnO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBzaG93Q29udGVudExvYWRFcnJvcjtcbiAgICBpbnZhbGlkQ29uZmlnO1xuICAgIGVyck1zZztcbiAgICBzaGFwZTogc3RyaW5nO1xuICAgIGRhdGFzb3VyY2U6IGFueTtcbiAgICBmb250c2l6ZTogc3RyaW5nO1xuICAgIHNlbGVjdGVkaXRlbTogYW55O1xuICAgIGZvbnR1bml0OiBzdHJpbmc7XG4gICAgb2Zmc2V0dG9wOiBudW1iZXI7XG4gICAgb2Zmc2V0bGVmdDogbnVtYmVyO1xuICAgIG9mZnNldHJpZ2h0OiBudW1iZXI7XG4gICAgb2Zmc2V0Ym90dG9tOiBudW1iZXI7XG4gICAgc2hvd2xhYmVsczogYW55O1xuICAgIHRoZW1lOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlICRpZDtcbiAgICBwcml2YXRlIHNjb3BlZGF0YXNldDogYW55O1xuICAgIHByaXZhdGUgYmluZGRhdGFzZXQ6IGFueTtcbiAgICBwcml2YXRlIHNob3dsYWJlbHNvdXRzaWRlOiBhbnk7XG4gICAgcHJpdmF0ZSBfcmVzaXplRm46IGFueTtcbiAgICBwcml2YXRlIGNoYXJ0OiBhbnk7XG4gICAgcHJpdmF0ZSBjbGVhckNhbnZhczogYm9vbGVhbjtcbiAgICBwdWJsaWMgaXNMb2FkSW5Qcm9ncmVzczogYm9vbGVhbjtcbiAgICBwcml2YXRlIGZpbHRlckZpZWxkczogYm9vbGVhbiB8IGFueTtcbiAgICBwcml2YXRlIGRhdGFzZXQ6IGFueTtcbiAgICBwcml2YXRlIGF4aXNvcHRpb25zOiBhbnk7XG4gICAgcHJpdmF0ZSBudW1lcmljQ29sdW1uczogYW55O1xuICAgIHByaXZhdGUgbm9uUHJpbWFyeUNvbHVtbnM6IGFueSA9IFtdO1xuICAgIHByaXZhdGUgdmFyaWFibGVJbmZsaWdodDogYW55O1xuICAgIHByaXZhdGUgY2hhcnRSZWFkeTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHhEYXRhS2V5QXJyOiBhbnkgPSBbXTtcbiAgICBwcml2YXRlIHhBeGlzRGF0YVR5cGU6IHN0cmluZztcbiAgICBwcml2YXRlIGJ1YmJsZXNpemU6IGFueTtcbiAgICBwdWJsaWMgc2hvd05vRGF0YU1zZzogYW55O1xuICAgIHByaXZhdGUgc2FtcGxlRGF0YTogYW55W107XG4gICAgcHJpdmF0ZSBjaGFydERhdGE6IGFueVtdID0gW107XG4gICAgcHJpdmF0ZSBfcHJvY2Vzc2VkRGF0YTogYW55W10gPSBbXTtcbiAgICBwcml2YXRlIF9zdWJzY2lwdGlvbnM6IGFueSA9IFtdO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYW5lbCcpIHRpdGxlO1xuXG4gICAgaXNHcm91cEJ5RW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuZ3JvdXBieSAmJiB0aGlzLmdyb3VwYnkgIT09IE5PTkUpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHggYW5kIHkgYXhpcyB0aGF0IGFyZSBjaG9zZW4gYXJlIHZhbGlkIHRvIHBsb3QgY2hhcnRcbiAgICBpc1ZhbGlkQXhpcygpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgeCBheGlzIGFuZCB5IGF4aXMgYXJlIGNob3NlbiBhbmQgYXJlIG5vdCBlcXVhbFxuICAgICAgICByZXR1cm4gdGhpcy5iaW5kZGF0YXNldCA/ICh0aGlzLnhheGlzZGF0YWtleSAmJiB0aGlzLnlheGlzZGF0YWtleSkgOiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGFnZ3JlZ2F0aW9uIGlzIGNob3NlblxuICAgIGlzQWdncmVnYXRpb25FbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISEoKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpICYmIHRoaXMuYWdncmVnYXRpb24gIT09IE5PTkUgJiYgdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbikpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGVpdGhlciBncm91cGJ5LCBhZ2dyZWdhdGlvbiBvciBvcmRlcmJ5IGlzIGNob3NlblxuICAgIGlzRGF0YUZpbHRlcmluZ0VuYWJsZWQoKSB7XG4gICAgICAgIC8qUXVlcnkgbmVlZCB0byBiZSB0cmlnZ2VyZWQgaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY2FzZXMgc2F0aXNmeVxuICAgICAgICAqIDEuIEdyb3VwIEJ5IGFuZCBhZ2dyZWdhdGlvbiBib3RoIGNob3NlblxuICAgICAgICAqIDIuIE9ubHkgT3JkZXIgQnkgaXMgY2hvc2VuXG4gICAgICAgICogKi9cblxuICAgICAgICByZXR1cm4gdGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpIHx8ICghdGhpcy5pc1Zpc3VhbGx5R3JvdXBlZCAmJiB0aGlzLm9yZGVyYnkpO1xuICAgIH1cblxuICAgIC8qQ2hhcnRzIGxpa2UgTGluZSxBcmVhLEN1bXVsYXRpdmUgTGluZSBkb2VzIG5vdCBzdXBwb3J0IGFueSBvdGhlciBkYXRhdHlwZVxuICAgICAgICBvdGhlciB0aGFuIGludGVnZXIgdW5saWtlIHRoZSBjb2x1bW4gYW5kIGJhci5JdCBpcyBhIG52ZDMgaXNzdWUuIElub3JkZXIgdG9cbiAgICAgICAgc3VwcG9ydCB0aGF0IHRoaXMgaXMgYSBmaXgqL1xuICAgIGdldHhBeGlzVmFsKGRhdGFPYmosIHhLZXksIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gXy5nZXQoZGF0YU9iaiwgeEtleSk7XG4gICAgICAgIC8vIElmIHggYXhpcyBpcyBvdGhlciB0aGFuIG51bWJlciB0eXBlIHRoZW4gYWRkIGluZGV4ZXNcbiAgICAgICAgaWYgKGlzTGluZVR5cGVDaGFydCh0aGlzLnR5cGUpICYmICFpc051bWJlclR5cGUodGhpcy54QXhpc0RhdGFUeXBlKSkge1xuICAgICAgICAgICAgLy8gVmVyaWZpY2F0aW9uIHRvIGdldCB0aGUgdW5pcXVlIGRhdGEga2V5c1xuICAgICAgICAgICAgdGhpcy54RGF0YUtleUFyci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0IGlzIG9mIHR5cGUgRGF0ZVxuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBHZXR0aW5nIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgYW1vbmcgYWxsIHRoZSB4IHZhbHVlc1xuICAgIGdldFhNaW5NYXhWYWx1ZXMoZGF0dW0pIHtcbiAgICAgICAgaWYgKCFkYXR1bSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHhWYWx1ZXM6IGFueSA9IHt9O1xuICAgICAgICAvKlxuICAgICAgICAgY29tcHV0ZSB0aGUgbWluIHggdmFsdWVcbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIG9iamVjdHNcbiAgICAgICAgICAgIGlucHV0OiBbe3g6MSwgeToyfSwge3g6MiwgeTozfSwge3g6MywgeTo0fV1cbiAgICAgICAgICAgIG1pbiB4OiAxXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBhcnJheXNcbiAgICAgICAgICAgIGlucHV0OiBbWzEwLCAyMF0sIFsyMCwgMzBdLCBbMzAsIDQwXV07XG4gICAgICAgICAgICBtaW4geDogMTBcbiAgICAgICAgKi9cbiAgICAgICAgeFZhbHVlcy5taW4gPSBfLm1pbkJ5KGRhdHVtLnZhbHVlcywgZGF0YU9iamVjdCA9PiBkYXRhT2JqZWN0LnggfHwgZGF0YU9iamVjdFswXSk7XG4gICAgICAgIC8qXG4gICAgICAgICBjb21wdXRlIHRoZSBtYXggeCB2YWx1ZVxuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgb2JqZWN0c1xuICAgICAgICAgICAgaW5wdXQ6IFt7eDoxLCB5OjJ9LCB7eDoyLCB5OjN9LCB7eDozLCB5OjR9XVxuICAgICAgICAgICAgbWF4IHg6IDNcbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIGFycmF5c1xuICAgICAgICAgICAgaW5wdXQ6IFtbMTAsIDIwXSwgWzIwLCAzMF0sIFszMCwgNDBdXTtcbiAgICAgICAgICAgIG1heCB4OiAzMFxuICAgICAgICAgKi9cbiAgICAgICAgeFZhbHVlcy5tYXggPSBfLm1heEJ5KGRhdHVtLnZhbHVlcywgZGF0YU9iamVjdCA9PiBkYXRhT2JqZWN0LnggfHwgZGF0YU9iamVjdFswXSk7XG4gICAgICAgIHJldHVybiB4VmFsdWVzO1xuICAgIH1cblxuICAgIC8vIEdldHRpbmcgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBhbW9uZyBhbGwgdGhlIHkgdmFsdWVzXG4gICAgZ2V0WU1pbk1heFZhbHVlcyhkYXR1bSkge1xuICAgICAgICBjb25zdCB5VmFsdWVzOiBhbnkgPSB7fSxcbiAgICAgICAgICAgIG1pblZhbHVlcyA9IFtdLFxuICAgICAgICAgICAgbWF4VmFsdWVzID0gW107XG4gICAgICAgIGlmICghZGF0dW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICBHZXR0aW5nIHRoZSBtaW4gYW5kIG1heCB5IHZhbHVlcyBhbW9uZyBhbGwgdGhlIHNlcmllcyBvZiBkYXRhXG4gICAgICAgICBjb21wdXRlIHRoZSBtaW4geSB2YWx1ZVxuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgb2JqZWN0c1xuICAgICAgICAgICAgaW5wdXQ6IFtbe3g6MSwgeToyfSwge3g6MiwgeTozfSwge3g6MywgeTo0fV0sIFt7eDoyLCB5OjN9LCB7eDozLCB5OjR9LCB7eDo0LCB5OjV9XV1cbiAgICAgICAgICAgIG1pbiB5IHZhbHVlcyA6ICcyJyhhbW9uZyBmaXJzdCBzZXQpICYgJzMnKGFtb25nIHNlY29uZCBzZXQpXG4gICAgICAgICAgICBtYXggeSB2YWx1ZXMgOiAnNCcoYW1vbmcgZmlyc3Qgc2V0KSAmICc1JyhhbW9uZyBzZWNvbmQgc2V0KVxuXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBhcnJheXNcbiAgICAgICAgICAgIGlucHV0OiBbW1sxMCwgMjBdLCBbMjAsIDMwXSwgWzMwLCA0MF1dLCBbWzIwLCAzMF0sIFszMCwgNDBdLCBbNDAsIDUwXV1dXG4gICAgICAgICAgICBtaW4geSB2YWx1ZXMgOiAnMjAnKGFtb25nIGZpcnN0IHNldCkgJiAnMzAnKGFtb25nIHNlY29uZCBzZXQpXG4gICAgICAgICAgICBtYXggeSB2YWx1ZXMgOiAnNDAnKGFtb25nIGZpcnN0IHNldCkgJiAnNTAnKGFtb25nIHNlY29uZCBzZXQpXG4gICAgICAgICAqL1xuXG4gICAgICAgIF8uZm9yRWFjaChkYXR1bSwgZGF0YSA9PiB7XG4gICAgICAgICAgICBtaW5WYWx1ZXMucHVzaChfLm1pbkJ5KGRhdGEudmFsdWVzLCBmdW5jdGlvbiAoZGF0YU9iamVjdCkgeyByZXR1cm4gZGF0YU9iamVjdC55IHx8IGRhdGFPYmplY3RbMV07IH0pKTtcbiAgICAgICAgICAgIG1heFZhbHVlcy5wdXNoKF8ubWF4QnkoZGF0YS52YWx1ZXMsIGZ1bmN0aW9uIChkYXRhT2JqZWN0KSB7IHJldHVybiBkYXRhT2JqZWN0LnkgfHwgZGF0YU9iamVjdFsxXTsgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gR2V0cyB0aGUgbGVhc3QgYW5kIGhpZ2hlc3QgdmFsdWVzIGFtb25nIGFsbCB0aGUgbWluIGFuZCBtYXggdmFsdWVzIG9mIHJlc3BlY3RpdmUgc2VyaWVzIG9mIGRhdGFcbiAgICAgICAgeVZhbHVlcy5taW4gPSBfLm1pbkJ5KG1pblZhbHVlcywgZGF0YU9iamVjdCA9PiBkYXRhT2JqZWN0LnkgfHwgZGF0YU9iamVjdFsxXSk7XG4gICAgICAgIHlWYWx1ZXMubWF4ID0gXy5tYXhCeShtYXhWYWx1ZXMsIGRhdGFPYmplY3QgPT4gZGF0YU9iamVjdC55IHx8IGRhdGFPYmplY3RbMV0pO1xuICAgICAgICByZXR1cm4geVZhbHVlcztcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgeC1heGlzIHZhbHVlcyBhcmUgdW5kZWZpbmVkLCB3ZSByZXR1cm4gZW1wdHkgYXJyYXkgZWxzZSB3ZSByZXR1cm4gdGhlIHZhbHVlc1xuICAgIGdldFZhbGlkRGF0YSh2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoID09PSAxICYmIHZhbHVlc1swXSA9PT0gdW5kZWZpbmVkKSA/IFtdIDogdmFsdWVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgdGhlIHNpbmdsZSBkYXRhIHBvaW50IGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBkYXRhIGNoYXJ0IGFjY2VwdHNcbiAgICB2YWx1ZUZpbmRlcihkYXRhT2JqLCB4S2V5LCB5S2V5LCBpbmRleD8sIHNoYXBlPykge1xuICAgICAgICBjb25zdCB4VmFsID0gdGhpcy5nZXR4QXhpc1ZhbChkYXRhT2JqLCB4S2V5LCBpbmRleCksXG4gICAgICAgICAgICB2YWx1ZSA9IF8uZ2V0KGRhdGFPYmosIHlLZXkpLFxuICAgICAgICAgICAgeVZhbCA9IHBhcnNlRmxvYXQodmFsdWUpIHx8IHZhbHVlLFxuICAgICAgICAgICAgc2l6ZSA9IHBhcnNlRmxvYXQoZGF0YU9ialt0aGlzLmJ1YmJsZXNpemVdKSB8fCAyO1xuICAgICAgICBsZXQgZGF0YVBvaW50OiBhbnkgPSB7fTtcblxuICAgICAgICBpZiAoaXNDaGFydERhdGFKU09OKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIGRhdGFQb2ludC54ID0geFZhbDtcbiAgICAgICAgICAgIGRhdGFQb2ludC55ID0geVZhbDtcbiAgICAgICAgICAgIC8vIG9ubHkgQnViYmxlIGNoYXJ0IGhhcyB0aGUgdGhpcmQgZGltZW5zaW9uXG4gICAgICAgICAgICBpZiAoaXNCdWJibGVDaGFydCh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgZGF0YVBvaW50LnNpemUgPSBzaXplO1xuICAgICAgICAgICAgICAgIGRhdGFQb2ludC5zaGFwZSA9IHNoYXBlIHx8ICdjaXJjbGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzQ2hhcnREYXRhQXJyYXkodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgZGF0YVBvaW50ID0gW3hWYWwsIHlWYWxdO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFkZGluZyBhY3R1YWwgdW53cmFwcGVkIGRhdGEgdG8gY2hhcnQgZGF0YSB0byB1c2UgYXQgdGhlIHRpbWUgb2Ygc2VsZWN0ZWQgZGF0YSBwb2ludCBvZiBjaGFydCBldmVudFxuICAgICAgICBkYXRhUG9pbnQuX2RhdGFPYmogPSBkYXRhT2JqO1xuICAgICAgICByZXR1cm4gZGF0YVBvaW50O1xuICAgIH1cblxuICAgIC8vIFNldHRpbmcgYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZXNcbiAgICBzZXRFcnJNc2cobWVzc2FnZSkge1xuICAgICAgICBpZiAodGhpcy5zaG93Tm9EYXRhTXNnKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dDb250ZW50TG9hZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZENvbmZpZyA9IHRydWU7XG4gICAgICAgICAgICAvLyBUT0RPOiBTZXQgdGhlIGxvY2FsZSBmcm9tIHRoZSBtZXNzYWdlXG4gICAgICAgICAgICB0aGlzLmVyck1zZyA9ICcnOyAvLyAkcm9vdFNjb3BlLmxvY2FsZVttZXNzYWdlXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NDaGFydERhdGEoKSB7XG4gICAgICAgIHRoaXMuc2FtcGxlRGF0YSA9IGdldFNhbXBsZURhdGEodGhpcyk7XG4gICAgICAgIC8vIHNjb3BlIHZhcmlhYmxlcyB1c2VkIHRvIGtlZXAgdGhlIGFjdHVhbCBrZXkgdmFsdWVzIGZvciB4LWF4aXNcbiAgICAgICAgdGhpcy54RGF0YUtleUFyciA9IFtdO1xuICAgICAgICAvLyBQbG90dGluZyB0aGUgY2hhcnQgd2l0aCBzYW1wbGUgZGF0YSB3aGVuIHRoZSBjaGFydCBkYXRhc2V0IGlzIG5vdCBib3VuZFxuICAgICAgICBpZiAoIXRoaXMuYmluZGRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMueERhdGFLZXlBcnIgPSBnZXREYXRlTGlzdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FtcGxlRGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jaGFydERhdGEgfHwgIXRoaXMuY2hhcnREYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRhdHVtID0gW10sXG4gICAgICAgICAgICB5QXhpc0tleSxcbiAgICAgICAgICAgIHNoYXBlczogYW55ID0gW10sXG4gICAgICAgICAgICB2YWx1ZXM6IGFueSA9IFtdO1xuICAgICAgICBjb25zdCB4QXhpc0tleSA9IHRoaXMueGF4aXNkYXRha2V5LFxuICAgICAgICAgICAgeUF4aXNLZXlzID0gdGhpcy55YXhpc2RhdGFrZXkgPyB0aGlzLnlheGlzZGF0YWtleS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICBkYXRhU2V0ID0gdGhpcy5jaGFydERhdGE7XG5cbiAgICAgICAgaWYgKF8uaXNBcnJheShkYXRhU2V0KSkge1xuICAgICAgICAgICAgaWYgKGlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgeUF4aXNLZXkgPSB5QXhpc0tleXNbMF07XG4gICAgICAgICAgICAgICAgZGF0dW0gPSBfLm1hcChkYXRhU2V0LCAoZGF0YU9iaiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5T2JqZWN0KGRhdGFTZXRbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVGaW5kZXIoZGF0YVNldFtpbmRleF0sIHhBeGlzS2V5LCB5QXhpc0tleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkYXR1bSA9IHRoaXMuZ2V0VmFsaWREYXRhKGRhdHVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQnViYmxlQ2hhcnQodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBzaGFwZXMgPSB0aGlzLnNoYXBlID09PSAncmFuZG9tJyA/IGFsbFNoYXBlcyA6IHRoaXMuc2hhcGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlBeGlzS2V5cy5mb3JFYWNoKCh5QXhpc0tleSwgc2VyaWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9ICBfLm1hcChkYXRhU2V0LCAoZGF0YU9iaiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eU9iamVjdChkYXRhU2V0W2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUZpbmRlcihkYXRhU2V0W2luZGV4XSwgeEF4aXNLZXksIHlBeGlzS2V5LCBpbmRleCwgKF8uaXNBcnJheShzaGFwZXMpICYmIHNoYXBlc1tzZXJpZXNdKSB8fCB0aGlzLnNoYXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMuZ2V0VmFsaWREYXRhKHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIGRhdHVtLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHByZXR0aWZ5TGFiZWxzKHlBeGlzS2V5KVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0dW07XG4gICAgfVxuXG4gICAgc2V0Q2hhcnREYXRhKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q2hhcnREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc2VkRGF0YTtcbiAgICB9XG5cbiAgICAvLyBjb25zdHJ1Y3RpbmcgdGhlIGdyb3VwZWQgZGF0YSBiYXNlZCBvbiB0aGUgc2VsZWN0aW9uIG9mIG9yZGVyYnksIHggJiB5IGF4aXNcbiAgICBnZXRWaXN1YWxseUdyb3VwZWREYXRhKHF1ZXJ5UmVzcG9uc2UsIGdyb3VwaW5nQ29sdW1uKSB7XG4gICAgICAgIGxldCBncm91cERhdGE6IGFueSA9IHt9LFxuICAgICAgICAgICAgZ3JvdXBWYWx1ZXM6IGFueSA9IFtdLFxuICAgICAgICAgICAgb3JkZXJCeURldGFpbHMsXG4gICAgICAgICAgICBtYXhMZW5ndGg7XG4gICAgICAgIGNvbnN0IGNoYXJ0RGF0YTogYW55ID0gW10sXG4gICAgICAgICAgICBfaXNBcmVhQ2hhcnQgPSBpc0FyZWFDaGFydCh0aGlzLnR5cGUpLFxuICAgICAgICAgICAgeUF4aXNLZXkgPSBfLmZpcnN0KF8uc3BsaXQodGhpcy55YXhpc2RhdGFrZXksICcsJykpO1xuICAgICAgICB0aGlzLnhEYXRhS2V5QXJyID0gW107XG4gICAgICAgIHF1ZXJ5UmVzcG9uc2UgPSBfLm9yZGVyQnkocXVlcnlSZXNwb25zZSwgXy5zcGxpdCh0aGlzLmdyb3VwYnksICcsJykpO1xuICAgICAgICBpZiAodGhpcy5vcmRlcmJ5KSB7XG4gICAgICAgICAgICBvcmRlckJ5RGV0YWlscyA9IGdldExvZGFzaE9yZGVyQnlGb3JtYXQodGhpcy5vcmRlcmJ5KTtcbiAgICAgICAgICAgIHF1ZXJ5UmVzcG9uc2UgPSBfLm9yZGVyQnkocXVlcnlSZXNwb25zZSwgb3JkZXJCeURldGFpbHMuY29sdW1ucywgb3JkZXJCeURldGFpbHMub3JkZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBxdWVyeVJlc3BvbnNlID0gXy5ncm91cEJ5KHF1ZXJ5UmVzcG9uc2UsIGdyb3VwaW5nQ29sdW1uKTtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBhcmVhIGNoYXJ0IGFsbCB0aGUgc2VyaWVzIGRhdGEgc2hvdWxkIGJlIG9mIHNhbWUgbGVuZ3RoXG4gICAgICAgIGlmIChfaXNBcmVhQ2hhcnQpIHtcbiAgICAgICAgICAgIG1heExlbmd0aCA9IF8ubWF4KF8ubWFwKHF1ZXJ5UmVzcG9uc2UsIG9iaiA9PiBvYmoubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgXy5mb3JFYWNoKHF1ZXJ5UmVzcG9uc2UsICh2YWx1ZXMsIGdyb3VwS2V5KSA9PiB7XG4gICAgICAgICAgICBncm91cFZhbHVlcyA9IGlzQXJlYUNoYXJ0ID8gXy5maWxsKG5ldyBBcnJheShtYXhMZW5ndGgpLCBbMCwgMF0pIDogW107XG4gICAgICAgICAgICBfLmZvckVhY2hSaWdodCh2YWx1ZXMsICh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBncm91cFZhbHVlc1tpbmRleF0gPSB0aGlzLnZhbHVlRmluZGVyKHZhbHVlLCB0aGlzLnhheGlzZGF0YWtleSwgeUF4aXNLZXksIGluZGV4KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZ3JvdXBEYXRhID0ge1xuICAgICAgICAgICAgICAgIGtleSA6IGdyb3VwS2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlcyA6IGdyb3VwVmFsdWVzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2hhcnREYXRhLnB1c2goZ3JvdXBEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjaGFydERhdGE7XG4gICAgfVxuXG4gICAgLypEZWNpZGVzIHdoZXRoZXIgdGhlIGRhdGEgc2hvdWxkIGJlIHZpc3VhbGx5IGdyb3VwZWQgb3Igbm90XG4gICAgICAgICAgICBWaXN1YWxseSBncm91cGVkIHdoZW4gYSBkaWZmZXJlbnQgY29sdW1uIGlzIGNob29zZW4gaW4gdGhlIGdyb3VwIGJ5IG90aGVyIHRoYW4geCBhbmQgeSBheGlzIGFuZCBhZ2dyZWdhdGlvbiBpcyBub3QgY2hvc2VuKi9cbiAgICBnZXRHcm91cGluZ0RldGFpbHMoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzR3JvdXBCeUVuYWJsZWQoKSAmJiAhdGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBsZXQgaXNWaXN1YWxseUdyb3VwZWQgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICB2aXN1YWxHcm91cGluZ0NvbHVtbixcbiAgICAgICAgICAgICAgICBncm91cGluZ0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgY29sdW1uczogYW55ID0gW10sXG4gICAgICAgICAgICAgICAgZ3JvdXBpbmdDb2x1bW5JbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwYnlDb2x1bW5zID0gdGhpcy5ncm91cGJ5ICYmIHRoaXMuZ3JvdXBieSAhPT0gTk9ORSA/IHRoaXMuZ3JvdXBieS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICAgICAgeUF4aXNLZXlzID0gdGhpcy55YXhpc2RhdGFrZXkgPyB0aGlzLnlheGlzZGF0YWtleS5zcGxpdCgnLCcpIDogW107XG5cbiAgICAgICAgICAgIGlmIChncm91cGJ5Q29sdW1ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgLypHZXR0aW5nIHRoZSBncm91cCBieSBjb2x1bW4gd2hpY2ggaXMgbm90IHNlbGVjdGVkIGVpdGhlciBpbiB4IG9yIHkgYXhpcyovXG4gICAgICAgICAgICAgICAgZ3JvdXBieUNvbHVtbnMuZXZlcnkoKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMueGF4aXNkYXRha2V5ICE9PSBjb2x1bW4gJiYgJC5pbkFycmF5KGNvbHVtbiwgeUF4aXNLZXlzKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVmlzdWFsbHlHcm91cGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc3VhbEdyb3VwaW5nQ29sdW1uID0gY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBpbmdDb2x1bW5JbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBieUNvbHVtbnMuc3BsaWNlKGdyb3VwaW5nQ29sdW1uSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdGluZyB0aGUgZ3JvdXBieSBleHByZXNzaW9uXG4gICAgICAgICAgICAgICAgaWYgKHZpc3VhbEdyb3VwaW5nQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh2aXN1YWxHcm91cGluZ0NvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwYnlDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gXy5jb25jYXQoY29sdW1ucywgZ3JvdXBieUNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHggYW5kIHkgYXhpcyBhcmUgbm90IGluY2x1ZGVkIGluIGFnZ3JlZ2F0aW9uIG5lZWQgdG8gYmUgaW5jbHVkZWQgaW4gZ3JvdXBieVxuICAgICAgICAgICAgaWYgKHRoaXMueGF4aXNkYXRha2V5ICE9PSB0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHRoaXMueGF4aXNkYXRha2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF8uZm9yRWFjaCh5QXhpc0tleXMsIGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdyb3VwaW5nRXhwcmVzc2lvbiA9ICBjb2x1bW5zLmpvaW4oJywnKTtcbiAgICAgICAgICAgIC8vIHNldCBpc1Zpc3VhbGx5R3JvdXBlZCBmbGFnIGluIHNjb3BlIGZvciBsYXRlciB1c2VcbiAgICAgICAgICAgIHRoaXMuaXNWaXN1YWxseUdyb3VwZWQgPSBpc1Zpc3VhbGx5R3JvdXBlZDtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBncm91cGluZ0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgaXNWaXN1YWxseUdyb3VwZWQ6IGlzVmlzdWFsbHlHcm91cGVkLFxuICAgICAgICAgICAgICAgIHZpc3VhbEdyb3VwaW5nQ29sdW1uOiB2aXN1YWxHcm91cGluZ0NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXhwcmVzc2lvbjogJycsXG4gICAgICAgICAgICBpc1Zpc3VhbGx5R3JvdXBlZDogZmFsc2UsXG4gICAgICAgICAgICB2aXN1YWxHcm91cGluZ0NvbHVtbjogJydcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byBnZXQgdGhlIGFnZ3JlZ2F0ZWQgZGF0YSBhZnRlciBhcHBseWluZyB0aGUgYWdncmVnYXRpb24gJiBncm91cCBieSBvciBvcmRlciBieSBvcGVyYXRpb25zLlxuICAgIGdldEFnZ3JlZ2F0ZWREYXRhKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlOiBhbnkgPSB0aGlzLmRhdGFzb3VyY2UsXG4gICAgICAgICAgICB5QXhpc0tleXMgPSB0aGlzLnlheGlzZGF0YWtleSA/IHRoaXMueWF4aXNkYXRha2V5LnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgIGRhdGE6IGFueSA9IHt9O1xuICAgICAgICBsZXQgc29ydEV4cHIsXG4gICAgICAgICAgICBjb2x1bW5zOiBhbnkgPSBbXSxcbiAgICAgICAgICAgIGNvbEFsaWFzLFxuICAgICAgICAgICAgb3JkZXJCeUNvbHVtbnMsXG4gICAgICAgICAgICBncm91cEJ5RmllbGRzOiBhbnkgPSBbXTtcblxuICAgICAgICBpZiAoIXZhcmlhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBncm91cEJ5RmllbGRzID0gXy5zcGxpdCh0aGlzLmdyb3VwYnksICcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3JkZXJieSkge1xuICAgICAgICAgICAgc29ydEV4cHIgPSBfLnJlcGxhY2UodGhpcy5vcmRlcmJ5LCAvOi9nLCAnICcpO1xuICAgICAgICAgICAgY29sdW1ucyA9IF8udW5pcShfLmNvbmNhdChjb2x1bW5zLCBncm91cEJ5RmllbGRzLCBbdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbl0pKTtcbiAgICAgICAgICAgIG9yZGVyQnlDb2x1bW5zID0gZ2V0TG9kYXNoT3JkZXJCeUZvcm1hdCh0aGlzLm9yZGVyYnkpLmNvbHVtbnM7XG4gICAgICAgICAgICAvLyBJZiB0aGUgb3JkZXJieSBjb2x1bW4gaXMgY2hvc2VuIGVpdGhlciBpbiBncm91cGJ5IG9yIG9yZGVyYnkgdGhlbiByZXBsYWNlIC4gd2l0aCAkIGZvciB0aGF0IGNvbHVtblxuICAgICAgICAgICAgXy5mb3JFYWNoKF8uaW50ZXJzZWN0aW9uKGNvbHVtbnMsIG9yZGVyQnlDb2x1bW5zKSwgY29sID0+IHtcbiAgICAgICAgICAgICAgICBjb2xBbGlhcyA9IGdldFZhbGlkQWxpYXNOYW1lKGNvbCk7XG4gICAgICAgICAgICAgICAgc29ydEV4cHIgPSBfLnJlcGxhY2Uoc29ydEV4cHIsIGNvbCwgY29sQWxpYXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgLy8gU2VuZCB0aGUgZ3JvdXAgYnkgaW4gdGhlIGFnZ3JlZ2F0aW9ucyBhcGkgb25seSBpZiBhZ2dyZWdhdGlvbiBpcyBhbHNvIGNob3NlblxuICAgICAgICAgICAgZGF0YS5ncm91cEJ5RmllbGRzID0gZ3JvdXBCeUZpZWxkcztcbiAgICAgICAgICAgIGRhdGEuYWdncmVnYXRpb25zID0gIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICdmaWVsZCc6IHRoaXMuYWdncmVnYXRpb25jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICd0eXBlJzogIGFnZ3JlZ2F0aW9uRm5NYXBbdGhpcy5hZ2dyZWdhdGlvbl0sXG4gICAgICAgICAgICAgICAgICAgICdhbGlhcyc6IGdldFZhbGlkQWxpYXNOYW1lKHRoaXMuYWdncmVnYXRpb25jb2x1bW4pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBxdWVyeS5cbiAgICAgICAgdmFyaWFibGUuZXhlY3V0ZSgnZ2V0QWdncmVnYXRlZERhdGEnLCB7XG4gICAgICAgICAgICAnYWdncmVnYXRpb25zJyA6IGRhdGEsXG4gICAgICAgICAgICAnc29ydCcgICAgICAgICA6IHNvcnRFeHByXG4gICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSByZXN1bHQgaW50byBhIGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIGNoYXJ0LlxuICAgICAgICAgICAgY29uc3QgY2hhcnREYXRhOiBhbnkgPSBbXSxcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbkFsaWFzOiBhbnkgPSBnZXRWYWxpZEFsaWFzTmFtZSh0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKSxcbiAgICAgICAgICAgICAgICB4QXhpc0FsaWFzS2V5ID0gZ2V0VmFsaWRBbGlhc05hbWUodGhpcy54YXhpc2RhdGFrZXkpLFxuICAgICAgICAgICAgICAgIHlBeGlzQWxpYXNLZXlzID0gW107XG5cbiAgICAgICAgICAgIHlBeGlzS2V5cy5mb3JFYWNoKHlBeGlzS2V5ID0+IHlBeGlzQWxpYXNLZXlzLnB1c2goZ2V0VmFsaWRBbGlhc05hbWUoeUF4aXNLZXkpKSk7XG5cbiAgICAgICAgICAgIF8uZm9yRWFjaChyZXNwb25zZS5ib2R5LmNvbnRlbnQsIChyZXNwb25zZUNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHJlc3BvbnNlIGluIHRoZSBjaGFydERhdGEgYmFzZWQgb24gJ2FnZ3JlZ2F0aW9uQ29sdW1uJywgJ3hBeGlzRGF0YUtleScgJiAneUF4aXNEYXRhS2V5Jy5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialt0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uXSA9IHJlc3BvbnNlQ29udGVudFthZ2dyZWdhdGlvbkFsaWFzXTtcbiAgICAgICAgICAgICAgICAgICAgb2JqW3RoaXMuYWdncmVnYXRpb25jb2x1bW5dID0gXy5nZXQocmVzcG9uc2VDb250ZW50LCBhZ2dyZWdhdGlvbkFsaWFzKSB8fCBfLmdldChyZXNwb25zZUNvbnRlbnQsIHRoaXMuYWdncmVnYXRpb25jb2x1bW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9ialt0aGlzLnhheGlzZGF0YWtleV0gPSBfLmdldChyZXNwb25zZUNvbnRlbnQsIHhBeGlzQWxpYXNLZXkpIHx8IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgdGhpcy54YXhpc2RhdGFrZXkpO1xuXG4gICAgICAgICAgICAgICAgeUF4aXNLZXlzLmZvckVhY2goKHlBeGlzS2V5LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmpbeUF4aXNLZXldID0gcmVzcG9uc2VDb250ZW50W3lBeGlzQWxpYXNLZXlzW2luZGV4XV07XG4gICAgICAgICAgICAgICAgICAgIG9ialt5QXhpc0tleV0gPSBfLmdldChyZXNwb25zZUNvbnRlbnQsIHlBeGlzQWxpYXNLZXlzW2luZGV4XSkgfHwgXy5nZXQocmVzcG9uc2VDb250ZW50LCB5QXhpc0tleSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjaGFydERhdGEucHVzaChvYmopO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gY2hhcnREYXRhO1xuXG4gICAgICAgICAgICB0cmlnZ2VyRm4oY2FsbGJhY2spO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zZXRFcnJNc2coJ01FU1NBR0VfRVJST1JfRkVUQ0hfREFUQScpO1xuICAgICAgICAgICAgdHJpZ2dlckZuKGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIG1heGltdW0gd2lkdGggZm9yIHRoZSBsYWJlbHMgdGhhdCBjYW4gYmUgZGlzcGxheWVkLlRoaXMgd2lsbCBoZWxwZnVsIHdoZW4gdGhleSBhcmUgb3ZlcmxhcHBpbmdcbiAgICBzZXRMYWJlbHNNYXhXaWR0aCgpIHtcbiAgICAgICAgbGV0IHhUaWNrcyxcbiAgICAgICAgICAgIHRpY2tXaWR0aCxcbiAgICAgICAgICAgIG1heExlbmd0aCxcbiAgICAgICAgICAgIHhEaXN0LFxuICAgICAgICAgICAgeURpc3QsXG4gICAgICAgICAgICB0b3RhbEhlaWdodCxcbiAgICAgICAgICAgIG1heE5vTGFiZWxzLFxuICAgICAgICAgICAgbnRoRWxlbWVudCxcbiAgICAgICAgICAgIGxhYmVsc0F2YWlsYWJsZVdpZHRoLFxuICAgICAgICAgICAgYmFyV3JhcHBlcixcbiAgICAgICAgICAgIHlBeGlzV3JhcHBlcixcbiAgICAgICAgICAgIHN2Z1dyYXBwZXI7XG4gICAgICAgIGNvbnN0IGZvbnRzaXplID0gcGFyc2VJbnQodGhpcy5mb250c2l6ZSwgMTApIHx8IDEyLFxuICAgICAgICAgICAgaXNCYXJjaGFydCA9IGlzQmFyQ2hhcnQodGhpcy50eXBlKTtcbiAgICAgICAgLy8gZ2V0dGluZyB0aGUgeCB0aWNrcyBpbiB0aGUgY2hhcnRcbiAgICAgICAgeFRpY2tzID0gJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpLmZpbmQoJ2cubnYteCcpLmZpbmQoJ2cudGljaycpLmZpbmQoJ3RleHQnKTtcblxuICAgICAgICAvLyBnZXR0aW5nIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28gdmlzaWJsZSB0aWNrcyBhc3NvY2lhdGVkIHdpdGggdmlzaWJsZSB0ZXh0XG4gICAgICAgIHhUaWNrcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHhUaWNrID0gJCh0aGlzKTtcbiAgICAgICAgICAgIGxldCB4VHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgIHRpY2tEaXN0O1xuICAgICAgICAgICAgaWYgKHhUaWNrLnRleHQoKSAmJiB4VGljay5jc3MoJ29wYWNpdHknKSA9PT0gJzEnKSB7XG4gICAgICAgICAgICAgICAgeFRyYW5zZm9ybSA9IHhUaWNrLnBhcmVudCgpLmF0dHIoJ3RyYW5zZm9ybScpLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgeERpc3QgPSBwYXJzZUZsb2F0KHhUcmFuc2Zvcm1bMF0uc3Vic3RyKDEwKSk7XG4gICAgICAgICAgICAgICAgeURpc3QgPSBwYXJzZUZsb2F0KHhUcmFuc2Zvcm1bMV0gfHwgJzAnKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzQmFyY2hhcnQgJiYgeERpc3QgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tEaXN0ID0geERpc3Q7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh5RGlzdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGlja0Rpc3QgPSB5RGlzdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpY2tXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aWNrV2lkdGggPSB0aWNrRGlzdCAtIHRpY2tXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aWNrV2lkdGggPSB0aWNrRGlzdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSW4gY2FzZSBvZiBiYXIgY2hhcnQgZ2V0dGluZyB0aGUgYXZhaWxhYmxlIHNwYWNlIGZvciB0aGUgbGFiZWxzIHRvIGJlIGRpc3BsYXllZFxuICAgICAgICBpZiAoaXNCYXJjaGFydCkge1xuICAgICAgICAgICAgYmFyV3JhcHBlciA9ICQoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmc+Zy5udi13cmFwPmc+Zy5udi1iYXJzV3JhcCcpWzBdO1xuICAgICAgICAgICAgeUF4aXNXcmFwcGVyID0gJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2Zz5nLm52LXdyYXA+Zz5nLm52LXknKVswXTtcbiAgICAgICAgICAgIHN2Z1dyYXBwZXIgPSAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJylbMF07XG4gICAgICAgICAgICAvLyBnZXR0aW5nIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGNoYXJ0XG4gICAgICAgICAgICB0b3RhbEhlaWdodCA9IGJhcldyYXBwZXIgPyBiYXJXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA6IDA7XG4gICAgICAgICAgICAvLyBnZXR0aW5nIHRoZSBsYWJlbHMgYXZhaWxhYmxlIHNwYWNlXG4gICAgICAgICAgICBsYWJlbHNBdmFpbGFibGVXaWR0aCA9IHlBeGlzV3JhcHBlciA/IHN2Z1dyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSB5QXhpc1dyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggOiBzdmdXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgLy8gU2V0dGluZyB0aGUgbWF4IGxlbmd0aCBmb3IgdGhlIGxhYmVsXG4gICAgICAgICAgICBtYXhMZW5ndGggPSBNYXRoLnJvdW5kKGxhYmVsc0F2YWlsYWJsZVdpZHRoIC8gZm9udHNpemUpO1xuICAgICAgICAgICAgLy8gaWYgYXZhaWxhYmxlIHNwYWNlIGZvciBlYWNoIGxhYmVsIGlzIGxlc3MgdGhhbiB0aGUgZm9udC1zaXplXG4gICAgICAgICAgICAvLyB0aGVuIGxpbWl0aW5nIHRoZSBsYWJlbHMgdG8gYmUgZGlzcGxheWVkXG4gICAgICAgICAgICBpZiAodGlja1dpZHRoIDwgZm9udHNpemUpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG1heGltdW0gbm8gb2YgbGFiZWxzIHRvIGJlIGZpdHRlZFxuICAgICAgICAgICAgICAgIG1heE5vTGFiZWxzID0gdG90YWxIZWlnaHQgLyBmb250c2l6ZTtcbiAgICAgICAgICAgICAgICAvLyBzaG93aW5nIG9ubHkgdGhlIG50aCBlbGVtZW50XG4gICAgICAgICAgICAgICAgbnRoRWxlbWVudCA9IE1hdGguY2VpbCh0aGlzLmNoYXJ0RGF0YS5sZW5ndGggLyBtYXhOb0xhYmVscyk7XG4gICAgICAgICAgICAgICAgLy8gc2hvd2luZyB1cCBvbmx5IHNvbWUgbGFiZWxzXG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJykuc2VsZWN0KCdnLm52LXgnKS5zZWxlY3RBbGwoJ2cudGljaycpLnNlbGVjdCgndGV4dCcpLmVhY2goZnVuY3Rpb24gKHRleHQsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaGlkaW5nIGV2ZXJ5IG5vbiBudGggZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAlIG50aEVsZW1lbnQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5hdHRyKCdvcGFjaXR5JywgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIG1heCBsZW5ndGggZm9yIHRoZSBsYWJlbFxuICAgICAgICAgICAgbWF4TGVuZ3RoID0gTWF0aC5yb3VuZCh0aWNrV2lkdGggLyBmb250c2l6ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtYXhMZW5ndGggc2hvdWxkIGFsd2F5cyBiZSBhIHBvc2l0aXZlIG51bWJlclxuICAgICAgICBtYXhMZW5ndGggPSBNYXRoLmFicyhtYXhMZW5ndGgpO1xuICAgICAgICAvLyBWYWxpZGF0aW5nIGlmIGV2ZXJ5IGxhYmVsIGV4Y2VlZHMgdGhlIG1heCBsZW5ndGggYW5kIGlmIHNvIGxpbWl0aW5nIHRoZSBsZW5ndGggYW5kIGFkZGluZyBlbGxpcHNpc1xuICAgICAgICB4VGlja3MuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXh0Q29udGVudC5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRDb250ZW50ID0gdGhpcy50ZXh0Q29udGVudC5zdWJzdHIoMCwgbWF4TGVuZ3RoKSArICcuLi4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBjb2x1bW5zIG9mIHRoYXQgY2FuIGJlIGNob29zZW4gaW4gdGhlIHggYW5kIHkgYXhpc1xuICAgIGdldERlZmF1bHRDb2x1bW5zKCkge1xuICAgICAgICBsZXQgdHlwZSxcbiAgICAgICAgICAgIHN0cmluZ0NvbHVtbixcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICB0ZW1wO1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29sdW1ucyA9IFtdLFxuICAgICAgICAgICAgY29sdW1ucyA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QUk9QRVJUSUVTX01BUCkgfHwgW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoICYmIGRlZmF1bHRDb2x1bW5zLmxlbmd0aCA8PSAyOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHR5cGUgPSBjb2x1bW5zW2ldLnR5cGU7XG4gICAgICAgICAgICBpZiAoIWNvbHVtbnNbaV0uaXNSZWxhdGVkICYmIChpc051bWJlclR5cGUodHlwZSkpKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdENvbHVtbnMucHVzaChjb2x1bW5zW2ldLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmICFzdHJpbmdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBzdHJpbmdDb2x1bW4gPSBjb2x1bW5zW2ldLmZpZWxkTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBPdGhlciB0aGFuIGJ1YmJsZSBjaGFydCB4OiBzdHJpbmcgdHlwZSB5OiBudW1iZXIgdHlwZVxuICAgICAgICAvLyBCdWJibGUgY2hhcnQgeDogbnVtYmVyIHR5cGUgeTogbnVtYmVyIHR5cGVcbiAgICAgICAgaWYgKHN0cmluZ0NvbHVtbiAmJiBkZWZhdWx0Q29sdW1ucy5sZW5ndGggPiAwICYmICFpc0J1YmJsZUNoYXJ0KHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIHRlbXAgPSBkZWZhdWx0Q29sdW1uc1swXTtcbiAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5zWzBdID0gc3RyaW5nQ29sdW1uO1xuICAgICAgICAgICAgZGVmYXVsdENvbHVtbnNbMV0gPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRDb2x1bW5zO1xuICAgIH1cblxuICAgIC8vIENhbGwgdXNlciBkZWZpbmVkIGphdmFzY3JpcHQgZnVuY3Rpb24gd2hlbiB1c2VyIGxpbmtzIGl0IHRvIGNsaWNrIGV2ZW50IG9mIHRoZSB3aWRnZXQuXG4gICAgYXR0YWNoQ2xpY2tFdmVudCgpIHtcbiAgICAgICAgbGV0IGRhdGFPYmo7XG4gICAgICAgIGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpLnNlbGVjdEFsbChjaGFydERhdGFQb2ludFhwYXRoW3RoaXMudHlwZV0pLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdhbGwnKVxuICAgICAgICAgICAgLm9uKCdjbGljaycsIChldmVudCwgZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdDb2x1bW4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdCYXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGEuX2RhdGFPYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUGllJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRG9udXQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGEuZGF0YS5fZGF0YU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdBcmVhJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ3VtdWxhdGl2ZSBMaW5lJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTGluZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gZGF0YVswXS5fZGF0YU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdCdWJibGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZGl0ZW0gPSBkYXRhT2JqO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2VsZWN0JywgeyRldmVudDogZDMuZXZlbnQsIHNlbGVjdGVkQ2hhcnRJdGVtOiBkYXRhLCBzZWxlY3RlZEl0ZW06IHRoaXMuc2VsZWN0ZWRpdGVtfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIC8qICBSZXR1cm5zIFkgU2NhbGUgbWluIHZhbHVlXG4gICAgICAgICAgIEV4OiBJbnB1dCAgIDogOC45N1xuICAgICAgICAgICAgICAgT3V0cHV0ICA6IDguODdcblxuICAgICAgICAgICAgICAgSW5wdXQgICA6IDhcbiAgICAgICAgICAgICAgIE91dHB1dCAgOiA3XG4gICAgICAgKi9cblxuICAgIHBvc3RQbG90UHJvY2VzcyhjaGFydCkge1xuICAgICAgICBsZXQgY2hhcnRTdmcsXG4gICAgICAgICAgICBwaWVMYWJlbHMsXG4gICAgICAgICAgICBwaWVHcm91cHMsXG4gICAgICAgICAgICBhbmdsZUFycmF5O1xuICAgICAgICBjb25zdCBzdHlsZU9iaiA9IHt9O1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4kZWxlbWVudDtcblxuICAgICAgICBwb3N0UGxvdENoYXJ0UHJvY2Vzcyh0aGlzKTtcblxuICAgICAgICBpZiAoIWlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLnNldExhYmVsc01heFdpZHRoKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc2hvd2xhYmVsc291dHNpZGUpIHtcbiAgICAgICAgICAgIC8qKiBOdmQzIGhhcyBhIGlzc3VlIGluIHJvdGF0aW5nIHRleHQuIFNvIHdlIHdpbGwgdXNlIHRoaXMgYXMgYSB0ZW1wIGZpeC5cbiAgICAgICAgICAgICAqIElmIHRoZSBpc3N1ZSBpcyByZXNvbHZlZCB0aGVyZSwgd2UgY2FuIHJlbW92ZSB0aGlzLiovXG4gICAgICAgICAgICAvKiBJZiBpdCBpcyBhIGRvbnV0IGNoYXJ0LCB0aGVuIHJvdGF0ZSB0aGUgdGV4dCBhbmQgcG9zaXRpb24gdGhlbSovXG4gICAgICAgICAgICBjaGFydFN2ZyA9IGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpO1xuICAgICAgICAgICAgcGllTGFiZWxzID0gY2hhcnRTdmcuc2VsZWN0KCcubnYtcGllTGFiZWxzJykuc2VsZWN0QWxsKCcubnYtbGFiZWwnKTtcbiAgICAgICAgICAgIHBpZUdyb3VwcyA9IGNoYXJ0U3ZnLnNlbGVjdCgnLm52LXBpZScpLnNlbGVjdEFsbCgnLm52LXNsaWNlJyk7XG4gICAgICAgICAgICBhbmdsZUFycmF5ID0gW107XG4gICAgICAgICAgICBpZiAocGllR3JvdXBzICYmIHBpZUdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBwaWVHcm91cHMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVBcnJheS5wdXNoKGFuZ2xlKGQpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcGllTGFiZWxzLmVhY2goZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBkMy5zZWxlY3QodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICQoZ3JvdXBbMF1bMF0pLmZpbmQoJ3RleHQnKS5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKCcgKyBhbmdsZUFycmF5W2ldICsgJyknKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHByZXBhcmUgdGV4dCBzdHlsZSBwcm9wcyBvYmplY3QgYW5kIHNldFxuICAgICAgICBfLmZvckVhY2goc3R5bGVQcm9wcywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdmb250c2l6ZScgfHwga2V5ID09PSAnZm9udHVuaXQnKSB7XG4gICAgICAgICAgICAgICAgc3R5bGVPYmpbdmFsdWVdID0gdGhpcy5mb250c2l6ZSArIHRoaXMuZm9udHVuaXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0eWxlT2JqW3ZhbHVlXSA9IHRoaXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNldFRleHRTdHlsZShzdHlsZU9iaiwgdGhpcy4kaWQpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIGFsbG93IHdpbmRvdy1yZXNpemUgZnVuY3Rpb25hbGl0eSwgZm9yIG9ubHktcnVuIG1vZGUgYXNcbiAgICAgICAgICogdXBkYXRpbmcgY2hhcnQgaXMgYmVpbmcgaGFuZGxlZCBieSB3YXRjaGVycyBvZiBoZWlnaHQgJiB3aWR0aCBpbiBzdHVkaW8tbW9kZVxuICAgICAgICAgKiAqL1xuICAgICAgICB0cmlnZ2VyRm4odGhpcy5fcmVzaXplRm4gJiYgdGhpcy5fcmVzaXplRm4uY2xlYXIpO1xuICAgICAgICB0aGlzLl9yZXNpemVGbiA9IG52LnV0aWxzLndpbmRvd1Jlc2l6ZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBjaGFydC51cGRhdGUoKTtcbiAgICAgICAgICAgICAgICBwb3N0UGxvdENoYXJ0UHJvY2Vzcyh0aGlzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFiZWxzTWF4V2lkdGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IGdldCBwYXJlbnRzIG9mIGFjY29yZGlvbiB0eXBlXG4gICAgICAgICAgICAgICAgLypsZXQgcGFyZW50ID0gZWxlbWVudC5jbG9zZXN0KCcuYXBwLWFjY29yZGlvbi1wYW5lbCwgLnRhYi1wYW5lJykuaXNvbGF0ZVNjb3BlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9Ki9cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcHJlcGFyZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGNoYXJ0IHByb3BlcnRpZXNcbiAgICBjb25maWd1cmVDaGFydCgpIHtcbiAgICAgICAgLy8gQ29weSB0aGUgZGF0YSBvbmx5IGluIGNhc2Ugb2YgcGllIGNoYXJ0IHdpdGggZGVmYXVsdCBkYXRhXG4gICAgICAgIC8vIFJlYXNvbiA6IHdoZW4gbXVsdGlwbGUgcGllIGNoYXJ0cyBhcmUgYm91bmQgdG8gc2FtZSBkYXRhLCBmaXJzdCBjaGFydCB0aGVtZSB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGNoYXJ0c1xuICAgICAgICBsZXQgeERvbWFpblZhbHVlcztcbiAgICAgICAgbGV0IHlEb21haW5WYWx1ZXM7XG4gICAgICAgIGxldCBjaGFydDtcbiAgICAgICAgbGV0IGJlZm9yZVJlbmRlclZhbDtcbiAgICAgICAgY29uc3QgeWZvcm1hdE9wdGlvbnM6IGFueSA9IHt9O1xuXG4gICAgICAgIGlmICh0aGlzLl9wcm9jZXNzZWREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChpc0F4aXNEb21haW5WYWxpZCh0aGlzLCAneCcpKSB7XG4gICAgICAgICAgICAgICAgeERvbWFpblZhbHVlcyA9IHRoaXMuYmluZGRhdGFzZXQgPyB0aGlzLmdldFhNaW5NYXhWYWx1ZXModGhpcy5fcHJvY2Vzc2VkRGF0YVswXSkgOiB7ICdtaW4nIDogeyd4JzogMX0sICAnbWF4JyA6IHsneCcgOiA1fX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNBeGlzRG9tYWluVmFsaWQodGhpcywgJ3knKSkge1xuICAgICAgICAgICAgICAgIHlEb21haW5WYWx1ZXMgPSB0aGlzLmJpbmRkYXRhc2V0ID8gdGhpcy5nZXRZTWluTWF4VmFsdWVzKHRoaXMuX3Byb2Nlc3NlZERhdGEpIDogeyAnbWluJyA6IHsneScgOiAxfSwgJ21heCcgOiB7J3knIDogNX19O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUGllVHlwZSh0aGlzLnR5cGUpICYmICghdGhpcy5iaW5kZGF0YXNldCB8fCAhdGhpcy5zY29wZWRhdGFzZXQpKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuc2NvcGVkYXRhc2V0IHx8IHRoaXMuX3Byb2Nlc3NlZERhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZ2V0IHRoZSBjaGFydCBvYmplY3RcbiAgICAgICAgY2hhcnQgPSBpbml0Q2hhcnQodGhpcywgeERvbWFpblZhbHVlcywgeURvbWFpblZhbHVlcywgbnVsbCwgIXRoaXMuYmluZGRhdGFzZXQpO1xuXG4gICAgICAgIGlmIChfLmlzQXJyYXkodGhpcy5fcHJvY2Vzc2VkRGF0YSkpIHtcbiAgICAgICAgICAgIC8vIFdNUy0xOTQ5OTogIFRvIHJlbW92ZSBjaGFydCBYLWF4aXMgb2xkIHRpY2tzIHdoZW4gY2hhcnQgZGF0YSBsb2FkZWQgZHluYW1pY2FsbHkuXG4gICAgICAgICAgICBjb25zdCBvbGRnVGlja3MgPSAgJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpLmZpbmQoJ2cubnYteCcpLmZpbmQoJ2cudGljaycpO1xuICAgICAgICAgICAgaWYgKG9sZGdUaWNrcyAmJiBvbGRnVGlja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb2xkZ1RpY2tzLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmVmb3JlUmVuZGVyVmFsID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyZW5kZXInLCB7ICdjaGFydEluc3RhbmNlJyA6IGNoYXJ0fSk7XG4gICAgICAgICAgICBpZiAoYmVmb3JlUmVuZGVyVmFsKSB7XG4gICAgICAgICAgICAgICAgY2hhcnQgPSBiZWZvcmVSZW5kZXJWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYXJ0ID0gY2hhcnQ7XG4gICAgICAgICAgICAvLyBjaGFuZ2luZyB0aGUgZGVmYXVsdCBubyBkYXRhIG1lc3NhZ2VcbiAgICAgICAgICAgIGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpXG4gICAgICAgICAgICAgICAgLmRhdHVtKHRoaXMuX3Byb2Nlc3NlZERhdGEpXG4gICAgICAgICAgICAgICAgLmNhbGwodGhpcy5jaGFydCk7XG4gICAgICAgICAgICB0aGlzLnBvc3RQbG90UHJvY2VzcyhjaGFydCk7XG4gICAgICAgICAgICByZXR1cm4gY2hhcnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQbG90dGluZyB0aGUgY2hhcnQgd2l0aCBzZXQgb2YgdGhlIHByb3BlcnRpZXMgc2V0IHRvIGl0XG4gICAgcGxvdENoYXJ0KCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4kZWxlbWVudDtcbiAgICAgICAgLy8gY2FsbCB1c2VyLXRyYW5zZm9ybWVkIGZ1bmN0aW9uXG4gICAgICAgIHRoaXMuY2hhcnREYXRhID0gKHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygndHJhbnNmb3JtJykpIHx8IHRoaXMuY2hhcnREYXRhO1xuXG4gICAgICAgIC8vIEdldHRpbmcgdGhlIG9yZGVyIGJ5IGRhdGEgb25seSBpbiBydW4gbW9kZS4gVGhlIG9yZGVyIGJ5IGFwcGxpZXMgZm9yIGFsbCB0aGUgY2hhcnRzIG90aGVyIHRoYW4gcGllIGFuZCBkb251dCBjaGFydHNcbiAgICAgICAgaWYgKHRoaXMuaXNWaXN1YWxseUdyb3VwZWQgJiYgIWlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gdGhpcy5jaGFydERhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gdGhpcy5wcm9jZXNzQ2hhcnREYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2tpbmcgdGhlIHBhcmVudCBjb250YWluZXIgYmVmb3JlIHBsb3R0aW5nIHRoZSBjaGFydFxuICAgICAgICBpZiAoIWVsZW1lbnRbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2xlYXJDYW52YXMpIHtcbiAgICAgICAgICAgIC8vIGVtcHR5IHN2ZyB0byBhZGQtbmV3IGNoYXJ0XG4gICAgICAgICAgICBlbGVtZW50LmZpbmQoJ3N2ZycpLnJlcGxhY2VXaXRoKCc8c3ZnPjwvc3ZnPicpO1xuICAgICAgICAgICAgdGhpcy5jbGVhckNhbnZhcyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW4gY2FzZSBvZiBpbnZhbGlkIGF4aXMgc2hvdyBubyBkYXRhIGF2YWlsYWJsZSBtZXNzYWdlXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkQXhpcygpKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gW107XG4gICAgICAgIH1cbiAgICAgICAgbnYuYWRkR3JhcGgoKCkgPT4gdGhpcy5jb25maWd1cmVDaGFydCgpLCAgKCkgPT4ge1xuICAgICAgICAgICAgLypCdWJibGUgY2hhcnQgaGFzIGFuIHRpbWUgb3V0IGRlbGF5IG9mIDMwMG1zIGluIHRoZWlyIGltcGxlbWVudGF0aW9uIGR1ZSB0byB3aGljaCB3ZVxuICAgICAgICAgICAgKiB3b24ndCBiZSBnZXR0aW5nIHJlcXVpcmVkIGRhdGEgcG9pbnRzIG9uIGF0dGFjaGluZyBldmVudHNcbiAgICAgICAgICAgICogaGVuY2UgZGVsYXlpbmcgaXQgNjAwbXMqL1xuICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoQ2xpY2tFdmVudCgpO1xuICAgICAgICAgICAgfSwgNjAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXNMb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIH1cbiAgICAvLyBUT0RPOiBOZWVkIHdheSB0byBmaWd1cmUgb3V0IGlmIHRoZSBkYXRhc291cmNlIGlzIGEgbGl2ZSBzb3VyY2VcbiAgICBnZXQgaXNMaXZlVmFyaWFibGUoKSB7XG4gICAgICAgIC8vIHNldHRpbmcgdGhlIGZsYWcgZm9yIHRoZSBsaXZlIHZhcmlhYmxlIGluIHRoZSBzY29wZSBmb3IgdGhlIGNoZWNrc1xuICAgICAgICBjb25zdCB2YXJpYWJsZU9iaiA9IHRoaXMuZGF0YXNvdXJjZTtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlT2JqICYmIHZhcmlhYmxlT2JqLmNhdGVnb3J5ID09PSAnd20uTGl2ZVZhcmlhYmxlJztcbiAgICB9XG5cbiAgICBwbG90Q2hhcnRQcm94eSgpIHtcbiAgICAgICAgdGhpcy5zaG93Q29udGVudExvYWRFcnJvciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmludmFsaWRDb25maWcgPSBmYWxzZTtcbiAgICAgICAgLy8gQ2hlY2tpbmcgaWYgeCBhbmQgeSBheGlzIGFyZSBjaG9zZW5cbiAgICAgICAgdGhpcy5pc0xvYWRJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZ3JvdXBpbmdEZXRhaWxzID0gdGhpcy5nZXRHcm91cGluZ0RldGFpbHMoKTtcbiAgICAgICAgLy8gSWYgYWdncmVnYXRpb24vZ3JvdXAgYnkvb3JkZXIgYnkgcHJvcGVydGllcyBoYXZlIGJlZW4gc2V0LCB0aGVuIGdldCB0aGUgYWdncmVnYXRlZCBkYXRhIGFuZCBwbG90IHRoZSByZXN1bHQgaW4gdGhlIGNoYXJ0LlxuICAgICAgICAvLyBUT0RPOiBkYXRhc291cmNlIGZvciBsaXZlIHZhcmlhYmxlIGRldGVjdGlvblxuICAgICAgICBpZiAodGhpcy5iaW5kZGF0YXNldCAmJiB0aGlzLmlzTGl2ZVZhcmlhYmxlICYmICh0aGlzLmZpbHRlckZpZWxkcyB8fCB0aGlzLmlzRGF0YUZpbHRlcmluZ0VuYWJsZWQoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWdncmVnYXRlZERhdGEoKCkgPT4gdGhpcy5wbG90Q2hhcnQoKSk7XG4gICAgICAgIH0gZWxzZSB7IC8vIEVsc2UsIHNpbXBseSBwbG90IHRoZSBjaGFydC5cbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgbGl2ZSB2YXJpYWJsZSByZXNldHRpbmcgdGhlIGFnZ3JlZ2F0ZWQgZGF0YSB0byB0aGUgbm9ybWFsIGRhdGFzZXQgd2hlbiB0aGUgYWdncmVnYXRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNldCAmJiB0aGlzLmlzTGl2ZVZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSB0aGlzLmRhdGFzZXQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpICYmIGdyb3VwaW5nRGV0YWlscy5pc1Zpc3VhbGx5R3JvdXBlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IHRoaXMuZ2V0VmlzdWFsbHlHcm91cGVkRGF0YSh0aGlzLmNoYXJ0RGF0YSwgZ3JvdXBpbmdEZXRhaWxzLnZpc3VhbEdyb3VwaW5nQ29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGxvdENoYXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXRzIHRoZSBkZWZhdWx0IHggYW5kIHkgYXhpcyBvcHRpb25zXG4gICAgc2V0RGVmYXVsdEF4aXNPcHRpb25zKCkge1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29sdW1ucyA9IHRoaXMuZ2V0RGVmYXVsdENvbHVtbnMoKTtcbiAgICAgICAgLy8gSWYgd2UgZ2V0IHRoZSB2YWxpZCBkZWZhdWx0IGNvbHVtbnMgdGhlbiBhc3NpZ24gdGhlbSBhcyB0aGUgeCBhbmQgeSBheGlzXG4gICAgICAgIC8vIEluIGNhc2Ugb2Ygc2VydmljZSB2YXJpYWJsZSB3ZSBtYXkgbm90IGdldCB0aGUgdmFsaWQgY29sdW1ucyBiZWNhdXNlIHdlIGNhbm5vdCBrbm93IHRoZSBkYXRhdHlwZXNcbiAgICAgICAgdGhpcy54YXhpc2RhdGFrZXkgPSBkZWZhdWx0Q29sdW1uc1swXSB8fCBudWxsO1xuICAgICAgICB0aGlzLnlheGlzZGF0YWtleSA9IGRlZmF1bHRDb2x1bW5zWzFdIHx8IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0Q3V0b21pemVkT3B0aW9ucyhwcm9wLCBmaWVsZHMpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBCeUNvbHVtbnMgPSBfLnNwbGl0KHRoaXMuZ3JvdXBieSwgJywnKSxcbiAgICAgICAgICAgIGFnZ0NvbHVtbnMgPSBfLnNwbGl0KHRoaXMuYWdncmVnYXRpb25jb2x1bW4sICcsJyk7XG4gICAgICAgIGlmICghdGhpcy5iaW5kZGF0YXNldCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuYXhpc29wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXhpc29wdGlvbnMgPSBmaWVsZHM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld09wdGlvbnM7XG4gICAgICAgIHN3aXRjaCAocHJvcCkge1xuICAgICAgICAgICAgY2FzZSAneGF4aXNkYXRha2V5JzpcbiAgICAgICAgICAgICAgICAvLyBJZiBncm91cCBieSBlbmFibGVkLCBjb2x1bW5zIGNob3NlbiBpbiBncm91cGJ5IHdpbGwgYmUgcG9wdWxhdGVkIGluIHggYXhpcyBvcHRpb25zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSBncm91cEJ5Q29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd5YXhpc2RhdGFrZXknOlxuICAgICAgICAgICAgICAgIC8vIElmIGFnZ3JlZ2F0aW9uIGJ5IGVuYWJsZWQsIGNvbHVtbnMgY2hvc2VuIGluIGFnZ3JlZ2F0aW9uIHdpbGwgYmUgcG9wdWxhdGVkIGluIHkgYXhpcyBvcHRpb25zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gYWdnQ29sdW1ucztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNMaXZlVmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBsaXZlIHZhcmlhYmxlIHBvcHVsYXRpbmcgb25seSBudW1lcmljIGNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IHRoaXMubnVtZXJpY0NvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZ3JvdXBieSc6XG4gICAgICAgICAgICAgICAgLy8gRmlsdGVyaW5nIG9ubHkgbm9uIHByaW1hcnkga2V5IGNvbHVtbnNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpdmVWYXJpYWJsZSAmJiB0aGlzLm5vblByaW1hcnlDb2x1bW5zICYmIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSB0aGlzLm5vblByaW1hcnlDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FnZ3JlZ2F0aW9uY29sdW1uJzpcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlICdhZ2dyZWdhdGlvbkNvbHVtbicgdG8gc2hvdyBhbGwga2V5cyBpbiBjYXNlIG9mIGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uIGlzIGNvdW50IG9yIHRvIG51bWVyaWMga2V5cyBpbiBhbGwgb3RoZXIgY2FzZXMuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlVmFyaWFibGUgJiYgdGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpICYmIHRoaXMuYWdncmVnYXRpb24gIT09ICdjb3VudCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IHRoaXMubnVtZXJpY0NvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb3JkZXJieSc6XG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSAnYWdncmVnYXRpb25Db2x1bW4nIHRvIHNob3cgYWxsIGtleXMgaW4gY2FzZSBvZiBhZ2dyZWdhdGlvbiBmdW5jdGlvbiBpcyBjb3VudCBvciB0byBudW1lcmljIGtleXMgaW4gYWxsIG90aGVyIGNhc2VzLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGl2ZVZhcmlhYmxlICYmIHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gXy51bmlxKF8uY29uY2F0KGdyb3VwQnlDb2x1bW5zLCBhZ2dDb2x1bW5zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYnViYmxlc2l6ZSc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubnVtZXJpY0NvbHVtbnMgJiYgdGhpcy5udW1lcmljQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IHRoaXMubnVtZXJpY0NvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld09wdGlvbnMgfHwgZmllbGRzIHx8IHRoaXMuYXhpc29wdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdGhhdCBpdGVyYXRlcyB0aHJvdWdoIGFsbCB0aGUgY29sdW1ucyBhbmQgdGhlbiBmZXRjaGluZyB0aGUgbnVtZXJpYyBhbmQgbm9uIHByaW1hcnkgY29sdW1ucyBhbW9uZyB0aGVtXG4gICAgc2V0TnVtZXJpY2FuZE5vblByaW1hcnlDb2x1bW5zKCkge1xuICAgICAgICBsZXQgY29sdW1ucyxcbiAgICAgICAgICAgIHR5cGU7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNNYXAgPSB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfUFJPUEVSVElFU19NQVApO1xuICAgICAgICB0aGlzLm51bWVyaWNDb2x1bW5zID0gW107XG4gICAgICAgIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMgPSBbXTtcbiAgICAgICAgLy8gRmV0Y2hpbmcgYWxsIHRoZSBjb2x1bW5zXG4gICAgICAgIGlmICh0aGlzLmRhdGFzZXQgJiYgIV8uaXNFbXB0eShwcm9wZXJ0aWVzTWFwKSkge1xuICAgICAgICAgICAgY29sdW1ucyA9IFtdOyAvLyBUT0RPOiBmZXRjaFByb3BlcnRpZXNNYXBDb2x1bW5zKHByb3BlcnRpZXNNYXApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbnMpIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdGluZyB0aHJvdWdoIGFsbCB0aGUgY29sdW1ucyBhbmQgZmV0Y2hpbmcgdGhlIG51bWVyaWMgYW5kIG5vbiBwcmltYXJ5IGtleSBjb2x1bW5zXG4gICAgICAgICAgICBfLmZvckVhY2goT2JqZWN0LmtleXMoY29sdW1ucyksIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICB0eXBlID0gY29sdW1uc1trZXldLnR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyVHlwZSh0eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWVyaWNDb2x1bW5zLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSGlkaW5nIG9ubHkgdGFibGUncyBwcmltYXJ5IGtleVxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5zW2tleV0uaXNSZWxhdGVkUGsgPT09ICd0cnVlJyB8fCAhY29sdW1uc1trZXldLmlzUHJpbWFyeUtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vblByaW1hcnlDb2x1bW5zLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubnVtZXJpY0NvbHVtbnMgPSB0aGlzLm51bWVyaWNDb2x1bW5zLnNvcnQoKTtcbiAgICAgICAgICAgIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMgPSB0aGlzLm5vblByaW1hcnlDb2x1bW5zLnNvcnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHBsb3QgdGhlIGNoYXJ0XG4gICAgaGFuZGxlRGF0YVNldChuZXdWYWwpIHtcbiAgICAgICAgdGhpcy5lcnJNc2cgPSAnJztcbiAgICAgICAgLy8gUmVzZXR0aW5nIHRoZSBmbGFnIHRvIGZhbHNlIHdoZW4gdGhlIGJpbmRpbmcgd2FzIHJlbW92ZWRcbiAgICAgICAgaWYgKCFuZXdWYWwgJiYgIXRoaXMuYmluZGRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWaXN1YWxseUdyb3VwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYXhpc29wdGlvbnMgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbGl2ZVZhcmlhYmxlcyBjb250YWluIGRhdGEgaW4gJ2RhdGEnIHByb3BlcnR5JyBvZiB0aGUgdmFyaWFibGVcbiAgICAgICAgdGhpcy5jaGFydERhdGEgPSB0aGlzLmlzTGl2ZVZhcmlhYmxlID8gbmV3VmFsIHx8ICcnIDogKG5ld1ZhbCAmJiBuZXdWYWwuZGF0YVZhbHVlID09PSAnJyAmJiBfLmtleXMobmV3VmFsKS5sZW5ndGggPT09IDEpID8gJycgOiBuZXdWYWw7XG5cbiAgICAgICAgLy8gaWYgdGhlIGRhdGEgcmV0dXJuZWQgaXMgYW4gb2JqZWN0IG1ha2UgaXQgYW4gYXJyYXkgb2Ygb2JqZWN0XG4gICAgICAgIGlmICghXy5pc0FycmF5KHRoaXMuY2hhcnREYXRhKSAmJiBfLmlzT2JqZWN0KHRoaXMuY2hhcnREYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSBbdGhpcy5jaGFydERhdGFdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld1ZhbCAmJiBuZXdWYWwuZmlsdGVyRmllbGRzKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckZpZWxkcyA9IG5ld1ZhbC5maWx0ZXJGaWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwbG90Y2hhcnQgZm9yIG9ubHkgdmFsaWQgZGF0YSBhbmQgb25seSBhZnRlciBib3VuZCB2YXJpYWJsZSByZXR1cm5zIGRhdGFcbiAgICAgICAgaWYgKHRoaXMuY2hhcnREYXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9wbG90Q2hhcnRQcm94eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3Bsb3RDaGFydFByb3h5ID0gXy5kZWJvdW5jZSh0aGlzLnBsb3RDaGFydFByb3h5LmJpbmQodGhpcyksIDEwMCk7XG5cbiAgICAvLyBzZXRzIHRoZSBjZW50ZXIgbGFiZWwgZm9yIGRvbnV0IGNoYXJ0IHR5cGVcbiAgICBzZXREb251dENlbnRlckxhYmVsKGxhYmVsVmFsdWUpIHtcbiAgICAgICAgbGV0IGNoYXJ0U3ZnLCBwaWVHcm91cHM7XG4gICAgICAgIGNoYXJ0U3ZnID0gZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJyk7XG5cbiAgICAgICAgcGllR3JvdXBzID0gY2hhcnRTdmcuc2VsZWN0KCcubnYtd3JhcC5udi1waWUnKS5zZWxlY3QoJy5udi1waWUnKTtcbiAgICAgICAgcGllR3JvdXBzLnRleHQoJycpO1xuICAgICAgICBwaWVHcm91cHMuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgICAgIC5hdHRyKCdkeScsICcuMzVlbScpXG4gICAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdudi1waWUtdGl0bGUnKVxuICAgICAgICAgICAgLnRleHQobGFiZWxWYWx1ZSlcbiAgICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQzdGV4dCA9IGQzLnNlbGVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBjaXJjID0gZDMuc2VsZWN0KHRoaXMucGFyZW50RWxlbWVudCksXG4gICAgICAgICAgICAgICAgdG90YWxXaWR0aCA9IE51bWJlcihjaXJjLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCksXG4gICAgICAgICAgICAgICAgLy8gbWludXMgdGhlIHJpbmcgd2lkdGggZnJvbSB0b3RhbCB3aWR0aFxuICAgICAgICAgICAgICAgIGF2YWlsV2lkdGggPSB0b3RhbFdpZHRoIC0gMzAsXG4gICAgICAgICAgICAgICAgdGV4dFdpZHRoID0gdGhpcy5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtcbiAgICAgICAgICAgICAgICBkM3RleHQuYXR0cihcImRhdGEtc2NhbGVcIiwgYXZhaWxXaWR0aCAvIHRleHRXaWR0aCk7XG4gICAgICAgICAgICAgIH0pLnN0eWxlKFwiZm9udC1zaXplXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIC8vIDE2IGlzIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSB0byBtdWx0aXBseSB3aXRoIHRoZSBzY2FsZWQgdmFsdWUgYW5kIDI0IGlzIHRoZSBtYXhpbXVtIGZvbnQgc2l6ZSB0aGF0IGNhbiBiZSBhcHBsaWVkXG4gICAgICAgICAgICAgICAgdmFyIGZvbnRTaXplID0gMTYgKiBkMy5zZWxlY3QodGhpcykuYXR0cihcImRhdGEtc2NhbGVcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRTaXplID4gMjQgPyAyNCA6IGZvbnRTaXplICsgXCJweFwiO1xuICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleSwgbmV3VmFsLCBvbGRWYWw/KSB7XG4gICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBuZXdWYWwsIG9sZFZhbCk7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdkYXRhc2V0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZURhdGFTZXQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NlbnRlcmxhYmVsJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LnRpdGxlKG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RG9udXRDZW50ZXJMYWJlbChuZXdWYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICAgICAgICAgIC8vIEJhc2VkIG9uIHRoZSBjaGFuZ2UgaW4gdHlwZSBkZWNpZGluZyB0aGUgZGVmYXVsdCBtYXJnaW5zXG4gICAgICAgICAgICAgICAgaWYgKGlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0dG9wID0gMjA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0cmlnaHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldGJvdHRvbSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0bGVmdCA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvbGRWYWwgPT09ICdQaWUnIHx8IG9sZFZhbCA9PT0gJ0RvbnV0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHRvcCA9IDI1O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHJpZ2h0ID0gMjU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0Ym90dG9tID0gNTU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0bGVmdCA9IDc1O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChvbGRWYWwgIT09IG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQ2FudmFzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSW4gc3R1ZGlvIG1vZGUsIGNvbmZpZ3VyZSBwcm9wZXJ0aWVzIGRlcGVuZGVudCBvbiBjaGFydCB0eXBlXG4gICAgICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gSW4gUnVuTW9kZSwgdGhlIHBsb3RjaGFydCBtZXRob2Qgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBhbGwgcHJvcGVydHkgY2hhbmdlXG4gICAgICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5pbmNsdWRlcyhhZHZhbmNlRGF0YVByb3BzLCBrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLl9wbG90Q2hhcnRQcm94eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlTG9hZGluZyhkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmRhdGFzb3VyY2U7XG4gICAgICAgIGlmIChkYXRhU291cmNlICYmIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpICYmIGlzRGF0YVNvdXJjZUVxdWFsKGRhdGEudmFyaWFibGUsIGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBkYXRhLmFjdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkSW5Qcm9ncmVzcyA9IGRhdGEuYWN0aXZlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGlkZVRvb2x0aXAoKSB7XG4gICAgICAgIGQzLnNlbGVjdEFsbCgnLm52dG9vbHRpcCcpLnN0eWxlKCdvcGFjaXR5JywgMCk7XG4gICAgfVxuXG4gICAgb25TdHlsZUNoYW5nZShrZXksIG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlT2JqID0ge307XG4gICAgICAgIHN1cGVyLm9uU3R5bGVDaGFuZ2Uoa2V5LCBuZXdWYWwsIG9sZFZhbCk7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdmb250c2l6ZSc6XG4gICAgICAgICAgICBjYXNlICdmb250dW5pdCc6XG4gICAgICAgICAgICBjYXNlICdjb2xvcic6XG4gICAgICAgICAgICBjYXNlICdmb250ZmFtaWx5JzpcbiAgICAgICAgICAgIGNhc2UgJ2ZvbnR3ZWlnaHQnOlxuICAgICAgICAgICAgY2FzZSAnZm9udHN0eWxlJzpcbiAgICAgICAgICAgIGNhc2UgJ3RleHRkZWNvcmF0aW9uJzpcbiAgICAgICAgICAgICAgICBzdHlsZU9ialtzdHlsZVByb3BzW2tleV1dID0gKGtleSA9PT0gJ2ZvbnRzaXplJyB8fCBrZXkgPT09ICdmb250dW5pdCcpID8gdGhpcy5mb250c2l6ZSArIHRoaXMuZm9udHVuaXQgOiBuZXdWYWw7XG4gICAgICAgICAgICAgICAgc2V0VGV4dFN0eWxlKHN0eWxlT2JqLCB0aGlzLiRpZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBwcml2YXRlIGFwcDogQXBwKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRyk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMsIEFQUExZX1NUWUxFU19UWVBFLkNPTlRBSU5FUiwgWydmb250c2l6ZScsICdmb250dW5pdCcsICdjb2xvcicsICdmb250ZmFtaWx5JywgJ2ZvbnR3ZWlnaHQnLCAnZm9udHN0eWxlJywgJ3RleHRkZWNvcmF0aW9uJ10pO1xuXG4gICAgICAgIC8vIGdlbmVyYXRlIHVuaXF1ZSBpZCBmb3IgdGhlIGNvbXBvbmVudFxuICAgICAgICB0aGlzLiRpZCA9IHRoaXMud2lkZ2V0SWQgfHwgTWF0aC5yYW5kb20oKTtcbiAgICAgICAgLy8gcmVtb3ZlIHRpdGxlIGF0dHJpYnV0ZSBhcyB0aGUgZWxlbWVudCBvbiBob3ZlciBzaG93cyB5b3UgdGhlIGhpbnQgdGhyb3VnaC1vdXQgdGhlIGVsZW1lbnRcbiAgICAgICAgcmVtb3ZlQXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICd0aXRsZScpO1xuICAgICAgICB0aGlzLmNoYXJ0UmVhZHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5iaW5kZGF0YXNldCA9IHRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGFzZXQuYmluZCcpO1xuICAgICAgICAvLyBTaG93IGxvYWRpbmcgc3RhdHVzIGJhc2VkIG9uIHRoZSB2YXJpYWJsZSBsaWZlIGN5Y2xlXG4gICAgICAgIHRoaXMuX3N1YnNjaXB0aW9ucy5wdXNoKHRoaXMuYXBwLnN1YnNjcmliZSgndG9nZ2xlLXZhcmlhYmxlLXN0YXRlJywgdGhpcy5oYW5kbGVMb2FkaW5nLmJpbmQodGhpcykpKTtcbiAgICAgICAgLy8gV2lsbCBoaWRlIHRvbGx0aXAgb2YgYSBjaGFydCBpbiBtb2JpbGUgd2hlbiB0aGUgdXNlciBzY3JvbGxzLlxuICAgICAgICB0aGlzLl9zdWJzY2lwdGlvbnMucHVzaCh0aGlzLmFwcC5zdWJzY3JpYmUoJ2lzY3JvbGwtc3RhcnQnLCAoKSA9PiB7dGhpcy5oaWRlVG9vbHRpcCgpO30pKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICAvLyBGb3Igb2xkIHByb2plY3RzXG4gICAgICAgIGlmICghXy5pbmNsdWRlcyhbJ291dHNpZGUnLCAnaW5zaWRlJywgJ2hpZGUnXSwgdGhpcy5zaG93bGFiZWxzKSkge1xuICAgICAgICAgICAgdGhpcy5zaG93bGFiZWxzICAgICAgICA9IGdldEJvb2xlYW5WYWx1ZSh0aGlzLnNob3dsYWJlbHMpO1xuICAgICAgICAgICAgdGhpcy5zaG93bGFiZWxzb3V0c2lkZSA9IGdldEJvb2xlYW5WYWx1ZSh0aGlzLnNob3dsYWJlbHNvdXRzaWRlKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd2xhYmVscyAgICAgICAgPSB0aGlzLnNob3dsYWJlbHMgPyAodGhpcy5zaG93bGFiZWxzb3V0c2lkZSA/ICdvdXRzaWRlJyA6ICdpbnNpZGUnKSA6ICdoaWRlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy50aGVtZSkge1xuICAgICAgICAgICAgLy8gRGVmYXVsdCB0aGVtZSBmb3IgcGllL2RvbnV0IGlzIEF6dXJlIGFuZCBmb3Igb3RoZXIgaXQgaXMgVGVycmVzdHJpYWxcbiAgICAgICAgICAgIHRoaXMudGhlbWUgPSBpc1BpZVR5cGUodGhpcy50eXBlKSA/ICdBenVyZScgOiAnVGVycmVzdHJpYWwnO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCAnd21DaGFydCcgKyB0aGlzLiRpZCk7XG4gICAgICAgIC8vIFdoZW4gdGhlcmUgaXMgbm90IHZhbHVlIGJpbmRpbmcsIHRoZW4gcGxvdCB0aGUgY2hhcnQgd2l0aCBzYW1wbGUgZGF0YVxuICAgICAgICBpZiAoIXRoaXMuYmluZGRhdGFzZXQgJiYgIXRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3Njb3BlZGF0YXNldCcpKSB7XG4gICAgICAgICAgICB0aGlzLl9wbG90Q2hhcnRQcm94eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIGRlc3Ryb3kgYWxsIHN1YnNjcmlwdGlvbnMgdG8gcHJldmVudCBtZW1vcnkgbGVhay5cbiAgICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICAgICAgICB0aGlzLl9zdWJzY2lwdGlvbnMuZm9yRWFjaCgoc3Vic2NyaXB0aW9uKT0+e1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbiAgICByZWRyYXcgPSB0aGlzLl9wbG90Q2hhcnRQcm94eS5iaW5kKHRoaXMpO1xufVxuIiwiPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIiAqbmdJZj1cInRpdGxlXCI+XG4gICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPjxpIGNsYXNzPVwiYXBwLWljb24gcGFuZWwtaWNvbiB7e2ljb25jbGFzc319XCIgW2NsYXNzLm5nLWhpZGVdPVwiIWljb25jbGFzc1wiPjwvaT48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIiBbaW5uZXJIVE1MXT1cInRpdGxlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiICpuZ0lmPVwic3ViaGVhZGluZ1wiIFtpbm5lckhUTUxdPVwic3ViaGVhZGluZ1wiPjwvZGl2PlxuICAgIDwvaDM+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJhcHAtY2hhcnQtaW5uZXJcIiBbbmdDbGFzc109XCJ7J2xvYWRpbmcnOmlzTG9hZEluUHJvZ3Jlc3MsICdwYW5lbC1ib2R5JzogdGl0bGV9XCI+XG4gICAgPHN2Zz48L3N2Zz5cbiAgICA8ZGl2IGNsYXNzPVwid20tY29udGVudC1pbmZvIHJlYWRvbmx5LXdyYXBwZXJcIiAqbmdJZj1cInNob3dDb250ZW50TG9hZEVycm9yICYmIHNob3dOb0RhdGFNc2dcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ3bS1tZXNzYWdlXCIgW3RpdGxlXT1cImhpbnRNc2dcIiBbbmdDbGFzc109XCJ7J2Vycm9yJzogaW52YWxpZENvbmZpZ31cIiBbaW5uZXJUZXh0XT1cImVyck1zZ1wiPjwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHdtU3Bpbm5lciBzaG93LmJpbmQ9XCJpc0xvYWRJblByb2dyZXNzXCIgY2FwdGlvbi5iaW5kPVwibG9hZGluZ2RhdGFtc2dcIj48L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -899,7 +899,9 @@ const getValidAliasName = aliasName => aliasName ? aliasName.replace(/\./g, '$')
|
|
|
899
899
|
// Applying the font related styles for the chart
|
|
900
900
|
const setTextStyle = (properties, id) => {
|
|
901
901
|
const charttext = d3.select('#wmChart' + id + ' svg').selectAll('text');
|
|
902
|
-
charttext.
|
|
902
|
+
if (!charttext.empty()) {
|
|
903
|
+
charttext.style(properties);
|
|
904
|
+
}
|
|
903
905
|
};
|
|
904
906
|
const angle = d => {
|
|
905
907
|
const a = (d.startAngle + d.endAngle) * 90 / Math.PI - 90;
|