@klippa/ngx-enhancy-forms 18.27.0 → 18.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/elements/date-time-picker/date-time-picker.component.mjs +3 -1
- package/esm2022/lib/form/form-element/form-element.component.mjs +3 -3
- package/fesm2022/klippa-ngx-enhancy-forms.mjs +4 -2
- package/fesm2022/klippa-ngx-enhancy-forms.mjs.map +1 -1
- package/lib/form/form-element/form-element.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -341,9 +341,11 @@ export class DateTimePickerComponent extends MultipleValueAccessorBase {
|
|
|
341
341
|
}
|
|
342
342
|
setHour(hour) {
|
|
343
343
|
this.hours = hour > 9 ? String(hour) : '0' + hour;
|
|
344
|
+
this.notifyNewDate();
|
|
344
345
|
}
|
|
345
346
|
setMinute(minute) {
|
|
346
347
|
this.minutes = minute > 9 ? String(minute) : '0' + minute;
|
|
348
|
+
this.notifyNewDate();
|
|
347
349
|
}
|
|
348
350
|
blurredHours() {
|
|
349
351
|
this.formatTime();
|
|
@@ -427,4 +429,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
427
429
|
type: ViewChild,
|
|
428
430
|
args: ['timeDoubleDropdown']
|
|
429
431
|
}] } });
|
|
430
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9kYXRlLXRpbWUtcGlja2VyL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvZWxlbWVudHMvZGF0ZS10aW1lLXBpY2tlci9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTixTQUFTLEVBRVQsSUFBSSxFQUNKLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUdMLFFBQVEsRUFFUixTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RCxPQUFPLEVBQWMsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFHOUcsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFDeEcsT0FBTyxFQUFDLFVBQVUsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxJQUFJLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25GLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7O0FBRXRELE1BQU0sQ0FB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ImltcG9ydCB7XG5cdEFmdGVyVmlld0luaXQsXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnQsXG5cdEVsZW1lbnRSZWYsXG5cdEhvc3QsXG5cdEluamVjdCxcblx0SW5qZWN0aW9uVG9rZW4sXG5cdElucHV0LCBOZ1pvbmUsXG5cdE9uQ2hhbmdlcyxcblx0T25Jbml0LFxuXHRPcHRpb25hbCxcblx0U2ltcGxlQ2hhbmdlcyxcblx0Vmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sQ29udGFpbmVyLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtpbnZhbGlkRGF0ZUtleX0gZnJvbSAnLi4vLi4vdmFsaWRhdG9ycy9kYXRlVmFsaWRhdG9yJztcbmltcG9ydCB7RGF0ZUZpbHRlckZuLCBNYXREYXRlcGlja2VyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7RGF0ZUFkYXB0ZXIsIE1BVF9EQVRFX0ZPUk1BVFMsIE1BVF9OQVRJVkVfREFURV9GT1JNQVRTLCBNYXREYXRlRm9ybWF0c30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQge0tscERhdGVGb3JtYXRzfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge0Zvcm1FbGVtZW50Q29tcG9uZW50fSBmcm9tICcuLi8uLi9mb3JtL2Zvcm0tZWxlbWVudC9mb3JtLWVsZW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7TXVsdGlwbGVWYWx1ZUFjY2Vzc29yQmFzZX0gZnJvbSAnLi4vdmFsdWUtYWNjZXNzb3ItYmFzZS9tdWx0aXBsZS12YWx1ZS1hY2Nlc3Nvci1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQge2lzVmFsdWVTZXQsIHN0cmluZ0lzU2V0QW5kRmlsbGVkfSBmcm9tICcuLi8uLi91dGlsL3ZhbHVlcyc7XG5pbXBvcnQge2VuZE9mTW9udGgsIGZvcm1hdCBhcyBmb3JtYXREYXRlLCBzdGFydE9mTW9udGgsIGlzU2FtZURheX0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHthcnJheUlzU2V0QW5kRmlsbGVkLCByZW1vdmVEdXBsaWNhdGVzRnJvbUFycmF5IH0gZnJvbSAnLi4vLi4vdXRpbC9hcnJheXMnO1xuaW1wb3J0IHtydW5OZXh0UmVuZGVyQ3ljbGV9IGZyb20gXCIuLi8uLi91dGlsL2FuZ3VsYXJcIjtcblxuZXhwb3J0IGNvbnN0IEtMUF9EQVRFX0ZPUk1BVFMgPSBuZXcgSW5qZWN0aW9uVG9rZW48S2xwRGF0ZUZvcm1hdHM+KCdrbHAuZm9ybS5kYXRlLmZvcm1hdHMnKTtcbmV4cG9ydCBjb25zdCBEQVRFX1RJTUVfUElDS0VSX1RSQU5TTEFUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxhbnk+KCdrbHAuZm9ybS5kYXRlVGltZS50cmFuc2xhdGlvbnMnKTtcbmV4cG9ydCBjb25zdCBEQVRFX1BJQ0tFUl9MT0NBTEUgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55Pigna2xwLmZvcm0uZGF0ZVRpbWUubG9jYWxlJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXREYXRlRm9ybWF0c0ZhY3RvcnkoY29tcG9uZW50OiBEYXRlVGltZVBpY2tlckNvbXBvbmVudCwgZGF0ZUZvcm1hdHM/OiBLbHBEYXRlRm9ybWF0cyk6IE1hdERhdGVGb3JtYXRzIHtcblx0cmV0dXJuIGRhdGVGb3JtYXRzPy4oY29tcG9uZW50LmZvcm1hdCkgPz8gTUFUX05BVElWRV9EQVRFX0ZPUk1BVFM7XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2tscC1mb3JtLWRhdGUtdGltZS1waWNrZXInLFxuXHR0ZW1wbGF0ZVVybDogJy4vZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcblx0cHJvdmlkZXJzOiBbXG5cdFx0e3Byb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQsIG11bHRpOiB0cnVlfSxcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBNQVRfREFURV9GT1JNQVRTLFxuXHRcdFx0ZGVwczogW0RhdGVUaW1lUGlja2VyQ29tcG9uZW50LCBbbmV3IE9wdGlvbmFsKCksIEtMUF9EQVRFX0ZPUk1BVFNdXSxcblx0XHRcdHVzZUZhY3Rvcnk6IG1hdERhdGVGb3JtYXRzRmFjdG9yeSxcblx0XHR9LFxuXHRdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlVGltZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIE11bHRpcGxlVmFsdWVBY2Nlc3NvckJhc2U8RGF0ZSB8IHR5cGVvZiBpbnZhbGlkRGF0ZUtleT4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG5cdEBJbnB1dCgpIHB1YmxpYyBtaW5EYXRlOiBEYXRlID0gdW5kZWZpbmVkO1xuXHRASW5wdXQoKSBwdWJsaWMgbWF4RGF0ZTogRGF0ZSA9IHVuZGVmaW5lZDtcblx0QElucHV0KCkgcHVibGljIHNhbWVNb250aE9ubHkgPSBmYWxzZTtcblx0QElucHV0KCkgcHVibGljIGZvcm1hdCA9ICdkZC1NTS15eXl5Jztcblx0QElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cdEBJbnB1dCgpIHB1YmxpYyBjbGVhcmFibGUgPSBmYWxzZTtcblx0QElucHV0KCkgcHVibGljIHNob3dUaW1lSW5wdXQgPSB0cnVlO1xuXHRASW5wdXQoKSBwdWJsaWMgaW5pdEhvdXI6IHN0cmluZyA9IG51bGw7XG5cdEBJbnB1dCgpIHB1YmxpYyBpbml0TWludXRlOiBzdHJpbmcgPSBudWxsO1xuXHRASW5wdXQoKSBwdWJsaWMgaW52YWxpZFRpbWVBc01pZG5pZ2h0ID0gZmFsc2U7IC8vIGlmIHRoZSB0aW1lIGlzIG5vdCB2YWxpZCwgdXNlIDAwOjAwIGFzIHRoZSB0aW1lXG5cblx0QFZpZXdDaGlsZCgnbmF0aXZlSW5wdXQnKSBuYXRpdmVJbnB1dFJlZjogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZCgncGlja2VyJykgZGF0ZVBpY2tlclJlZjogTWF0RGF0ZXBpY2tlcjxEYXRlPjtcblx0QFZpZXdDaGlsZCgndGltZURvdWJsZURyb3Bkb3duJykgdGltZURvdWJsZURyb3Bkb3duOiBFbGVtZW50UmVmO1xuXG5cdG9wZW5QaWNrZXJPbkRhdGU6IERhdGUgPSBudWxsO1xuXHRtaW5EYXRlU3RhcnRPZkRheTogRGF0ZSA9IHVuZGVmaW5lZDtcblx0bWF4RGF0ZUVuZE9mRGF5OiBEYXRlID0gdW5kZWZpbmVkO1xuXG5cdC8vIHRoaXMgaXMgcGFzc2VkIGFzIG5nbW9kZWwgYW5kIGlzIHVzZWQgdG8gc2V0IHRoZSBpbml0aWFsIGRhdGUuIEJ1dCB3ZSBhbHNvXG5cdC8vIHVzZSBpbnB1dCBhbmQgbmF0aXZlSW5wdXQgY2FsbGJhY2tzIHRvIGV4dGVuZCB0aGUgdmFsaWRhdGlvbiBsb2dpYyBzbyB3ZVxuXHQvLyBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiBlbXB0eSBhbmQgaW52YWxpZCBkYXRlcy5cblx0dmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXI6IERhdGU7XG5cdGhvdXJzOiBzdHJpbmc7IC8vIHN0cmluZyBiZWNhdXNlIGl0J3MgYSB0ZXh0IGlucHV0XG5cdG1pbnV0ZXM6IHN0cmluZzsgLy8gc3RyaW5nIGJlY2F1c2UgaXQncyBhIHRleHQgaW5wdXRcblx0cHJvdGVjdGVkIHNlbGVjdGVkRGF0ZXM6IEFycmF5PERhdGU+ID0gW107XG5cdHByaXZhdGUgZGF0ZVBpY2tpbmdDbG9zaW5nRm46ICgpID0+IHZvaWQ7XG5cdHByaXZhdGUgZGF0ZVRvdWNoZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBob3Vyc1RvdWNoZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBtaW51dGVzVG91Y2hlZCA9IGZhbHNlO1xuXHRwcm90ZWN0ZWQgZHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG5cdHByb3RlY3RlZCBtaW51dGVzT2ZIb3VyOiBBcnJheTxudW1iZXI+ID0gW107XG5cdHByb3RlY3RlZCBOdW1iZXIgPSBOdW1iZXI7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0QEhvc3QoKSBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgcGFyZW50OiBGb3JtRWxlbWVudENvbXBvbmVudCxcblx0XHRASG9zdCgpIEBPcHRpb25hbCgpIHByb3RlY3RlZCBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuXHRcdEBJbmplY3QoREFURV9USU1FX1BJQ0tFUl9UUkFOU0xBVElPTlMpIEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRpb25zOiBhbnksXG5cdFx0QEluamVjdChEQVRFX1BJQ0tFUl9MT0NBTEUpIEBPcHRpb25hbCgpIHByaXZhdGUgZGF0ZVBpY2tlckxvY2FsZTogYW55LFxuXHRcdHByaXZhdGUgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPERhdGU+LFxuXHRcdHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG5cdFx0cHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuXHRcdHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG5cdCkge1xuXHRcdHN1cGVyKHBhcmVudCwgY29udHJvbENvbnRhaW5lcik7XG5cdFx0aWYgKGlzVmFsdWVTZXQoZGF0ZVBpY2tlckxvY2FsZSkpIHtcblx0XHRcdGRhdGVBZGFwdGVyLnNldExvY2FsZShkYXRlUGlja2VyTG9jYWxlKCkpO1xuXHRcdH1cblx0fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdHN1cGVyLm5nT25Jbml0KCk7XG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdHRoaXMucGxhY2Vob2xkZXIgPSAnJztcblx0XHRcdHRoaXMuc2hvd1RpbWVJbnB1dCA9IGZhbHNlO1xuXHRcdH1cblx0XHR0aGlzLmhvdXJzID0gdGhpcy5pbml0SG91cjtcblx0XHR0aGlzLm1pbnV0ZXMgPSB0aGlzLmluaXRNaW51dGU7XG5cdFx0dGhpcy5taW51dGVzT2ZIb3VyID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiA2MH0sICh2LCBrKSA9PiBrKS5maWx0ZXIoZSA9PiBlICUgNSA9PT0gMCk7XG5cdH1cblxuXG5cblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm11bHRpcGxlKSB7XG5cdFx0XHQvLyB3ZSBhcmUgZ29pbmcgdG8gb3ZlcndyaXRlIHRoZSBkYXRlcGlja2VyIGNsb3NpbmcgZm4gbGF0ZXIsIHNvIHdlIGFyZSBzYXZpbmcgaXQgaGVyZSB0byByZXN0b3JlIGl0IHdoZW4gbmVlZGVkXG5cdFx0XHR0aGlzLmRhdGVQaWNraW5nQ2xvc2luZ0ZuID0gdGhpcy5kYXRlUGlja2VyUmVmLmNsb3NlO1xuXHRcdH1cblx0fVxuXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcblx0XHRpZiAoY2hhbmdlcy5taW5EYXRlKSB7XG5cdFx0XHR0aGlzLmRldGVybWluZU1pbkFuZE1heERhdGVzKCk7XG5cdFx0fVxuXHRcdGlmIChjaGFuZ2VzLm1heERhdGUpIHtcblx0XHRcdHRoaXMuZGV0ZXJtaW5lTWluQW5kTWF4RGF0ZXMoKTtcblx0XHR9XG5cdH1cblxuXHRzZXRNaW5EYXRlKG1pbkRhdGU6IERhdGUpOiB2b2lkIHtcblx0XHRpZiAobWluRGF0ZSkge1xuXHRcdFx0dGhpcy5taW5EYXRlU3RhcnRPZkRheSA9IG5ldyBEYXRlKG1pbkRhdGUpO1xuXHRcdFx0dGhpcy5taW5EYXRlU3RhcnRPZkRheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5taW5EYXRlU3RhcnRPZkRheSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRzZXRNYXhEYXRlKG1heERhdGU6IERhdGUpOiB2b2lkIHtcblx0XHRpZiAobWF4RGF0ZSkge1xuXHRcdFx0dGhpcy5tYXhEYXRlRW5kT2ZEYXkgPSBuZXcgRGF0ZShtYXhEYXRlKTtcblx0XHRcdHRoaXMubWF4RGF0ZUVuZE9mRGF5LnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubWF4RGF0ZUVuZE9mRGF5ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdGdldFNlbGVjdGVkTW9udGhzKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHJlbW92ZUR1cGxpY2F0ZXNGcm9tQXJyYXkodGhpcy5zZWxlY3RlZERhdGVzLm1hcCgoZSkgPT4gZm9ybWF0RGF0ZShlLCAnTU1NTScpKSkubGVuZ3RoO1xuXHR9XG5cblx0Ly8gZGF0ZUNoYW5nZWQgaXMgY2FsbGVkIHdoZW4gdGhlIG91dHB1dCBvZiB0aGUgZGF0ZXBpY2tlciBpcyBjaGFuZ2VkIGFuZFxuXHQvLyBwYXJzZWQgY29ycmVjdGx5LiBJZiB0aGUgZGF0ZSBpcyBpbnZhbGlkLCBpdCB3aWxsIGJlIGNhbGxlZCB0aGUgZmlyc3QgdGltZVxuXHQvLyB3aXRoIG51bGwgYnV0IG5ldmVyIGFnYWluIHVudGlsIGEgdmFsaWQgaW5wdXQgaXMgcHJvdmlkZWQuXG5cdGRhdGVDaGFuZ2VkKGV2ZW50OiBhbnkpOiB2b2lkIHtcblx0XHRjb25zdCBkYXRlID0gZXZlbnQudmFsdWU7XG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdHRoaXMuZGF0ZVBpY2tlclJlZi5jbG9zZSA9ICgpID0+IHtcblx0XHRcdH07XG5cblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRGF0ZXMuc29tZSgoZSkgPT4gaXNTYW1lRGF5KGUsIGRhdGUpKSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkRGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKChlKSA9PiAhaXNTYW1lRGF5KGUsIGRhdGUpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IFsuLi50aGlzLnNlbGVjdGVkRGF0ZXMsIGRhdGVdO1xuXHRcdFx0fVxuXHRcdFx0Ly8gU1RBUlQgSEFDS1xuXHRcdFx0Ly8gdGhlIGRhdGUgcGlja2VyIGRvZXMgbm90IHByb3ZpZGUgYW55IHJlcmVuZGVyIGNhbGxzLiBUaGVyZWZvcmUsIHdlIGFyZSBnb2luZyB0byBjaGFuZ2UgdGhlIG1pbkRhdGUgaW4gb3JkZXIgdG8gZm9yY2UgdGhlIHJlbmRlclxuXHRcdFx0Ly8gVGhpcyBpcyBuZWVkZWQgdG8gc2hvdyBhbGwgc2VsZWN0ZWQgZGF5cyBpbiBvdXIgZGF0ZSBwaWNrZXJcblx0XHRcdC8vIFdlIGFsc28gc2V0IHRoZSBpbm5lclZhbHVlIHRvIG51bGwgKHdpdGggdGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciA9IG51bGw7KSwgb3RoZXJ3aXNlIHlvdSBjYW4gbm90XG5cdFx0XHQvLyBkZXNlbGVjdCB5b3VyIGxhc3QgcGlja2VkIGRhdGVcblx0XHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgPSBudWxsO1xuXHRcdFx0Y29uc3Qgb2xkTWluRGF0ZSA9IHRoaXMubWluRGF0ZVN0YXJ0T2ZEYXk7XG5cdFx0XHR0aGlzLm1pbkRhdGVTdGFydE9mRGF5ID0gbmV3IERhdGUoMCk7XG5cdFx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHR0aGlzLm1pbkRhdGVTdGFydE9mRGF5ID0gb2xkTWluRGF0ZTtcblx0XHRcdC8vIEVORCBIQUNLXG5cblx0XHRcdGlmICh0aGlzLnNhbWVNb250aE9ubHkpIHtcblx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWREYXRlcy5sZW5ndGggPj0gMikge1xuXHRcdFx0XHRcdGlmIChkYXRlIDwgc3RhcnRPZk1vbnRoKHRoaXMuc2VsZWN0ZWREYXRlc1swXSkgfHwgZGF0ZSA+IGVuZE9mTW9udGgodGhpcy5zZWxlY3RlZERhdGVzWzBdKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZERhdGVzID0gW2RhdGVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmRldGVybWluZU1pbkFuZE1heERhdGVzKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeSh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZGF0ZVBpY2tlclJlZi5jbG9zZSA9IHRoaXMuZGF0ZVBpY2tpbmdDbG9zaW5nRm47XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5ub3RpZnlOZXdEYXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0ZGV0ZXJtaW5lTWluQW5kTWF4RGF0ZXMoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuc2FtZU1vbnRoT25seSkge1xuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWREYXRlcy5sZW5ndGggPj0gMikge1xuXHRcdFx0XHR0aGlzLnNldE1pbkRhdGUoc3RhcnRPZk1vbnRoKHRoaXMuc2VsZWN0ZWREYXRlc1swXSkpO1xuXHRcdFx0XHR0aGlzLnNldE1heERhdGUoZW5kT2ZNb250aCh0aGlzLnNlbGVjdGVkRGF0ZXNbMF0pKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0TWluRGF0ZSh0aGlzLm1pbkRhdGUpO1xuXHRcdFx0XHR0aGlzLnNldE1heERhdGUodGhpcy5tYXhEYXRlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRNaW5EYXRlKHRoaXMubWluRGF0ZSk7XG5cdFx0XHR0aGlzLnNldE1heERhdGUodGhpcy5tYXhEYXRlKTtcblx0XHR9XG5cdH1cblxuXHRub3RpZnlOZXdEYXRlKCk6IHZvaWQge1xuXHRcdGNvbnN0IG5hdGl2ZUlucHV0VmFsdWUgPSB0aGlzLm5hdGl2ZUlucHV0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG5cdFx0Y29uc3QgcGFyc2VkSG91cnMgPSBOdW1iZXIodGhpcy5ob3Vycyk7XG5cdFx0Y29uc3QgcGFyc2VkTWludXRlcyA9IE51bWJlcih0aGlzLm1pbnV0ZXMpO1xuXG5cdFx0Ly8gaWYgd2UgZG9udCBoYXZlIHRoZSB0aW1lIGVsZW1lbnRcblx0XHRpZiAoIXRoaXMuc2hvd1RpbWVJbnB1dCkge1xuXHRcdFx0aWYgKCFzdHJpbmdJc1NldEFuZEZpbGxlZChuYXRpdmVJbnB1dFZhbHVlKSkge1xuXHRcdFx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkobnVsbCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkodGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlcik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gd2hlbiBhbGwgaW5wdXRzIGFyZSBlbXB0eVxuXHRcdGlmICghc3RyaW5nSXNTZXRBbmRGaWxsZWQobmF0aXZlSW5wdXRWYWx1ZSkgJiYgIXN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMuaG91cnMpICYmICFzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLm1pbnV0ZXMpKSB7XG5cdFx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkobnVsbCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8vIGlmIHdlIGhhdmUgZGF0ZSBhbmQgdGltZVxuXHRcdGlmIChcblx0XHRcdHN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMuaG91cnMpICYmXG5cdFx0XHROdW1iZXIuaXNGaW5pdGUocGFyc2VkSG91cnMpICYmXG5cdFx0XHRwYXJzZWRIb3VycyA+PSAwICYmXG5cdFx0XHRwYXJzZWRIb3VycyA8PSAyMyAmJlxuXHRcdFx0c3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5taW51dGVzKSAmJlxuXHRcdFx0TnVtYmVyLmlzRmluaXRlKHBhcnNlZE1pbnV0ZXMpICYmXG5cdFx0XHRwYXJzZWRNaW51dGVzID49IDAgJiZcblx0XHRcdHBhcnNlZE1pbnV0ZXMgPD0gNTkgJiZcblx0XHRcdHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgaW5zdGFuY2VvZiBEYXRlXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBuZXdEYXRlV2l0aEhvdXJzID0gbmV3IERhdGUodGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlci5zZXRIb3VycyhwYXJzZWRIb3VycykpO1xuXHRcdFx0Y29uc3QgbmV3RGF0ZVdpdGhNaW51dGVzID0gbmV3IERhdGUobmV3RGF0ZVdpdGhIb3Vycy5zZXRNaW51dGVzKHBhcnNlZE1pbnV0ZXMpKTtcblx0XHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeShuZXdEYXRlV2l0aE1pbnV0ZXMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodGhpcy5pbnZhbGlkVGltZUFzTWlkbmlnaHQpIHtcblx0XHRcdGlmICh0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkodGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlcik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gYWxsIG90aGVyIGNhc2VzLCB3ZSBhcmUgbm90IGluIGEgdmFsaWQgc3RhdGVcblx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkoaW52YWxpZERhdGVLZXkpO1xuXHR9XG5cblx0d3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IEFycmF5PERhdGU+IHwgdHlwZW9mIGludmFsaWREYXRlS2V5KTogdm9pZCB7XG5cdFx0c3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHR0aGlzLnNlbGVjdGVkRGF0ZXMgPSB2YWx1ZTtcblx0XHRcdHRoaXMuZGV0ZXJtaW5lTWluQW5kTWF4RGF0ZXMoKTtcblx0XHRcdHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgPSBudWxsO1xuXHRcdFx0aWYgKGFycmF5SXNTZXRBbmRGaWxsZWQodmFsdWUpKSB7XG5cdFx0XHRcdHRoaXMub3BlblBpY2tlck9uRGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlc1swXTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciA9IHZhbHVlID09PSBpbnZhbGlkRGF0ZUtleSA/IG51bGwgOiB2YWx1ZTtcblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRcdFx0dGhpcy5ob3VycyA9IFN0cmluZyh2YWx1ZS5nZXRIb3VycygpKTtcblx0XHRcdFx0dGhpcy5taW51dGVzID0gU3RyaW5nKHZhbHVlLmdldE1pbnV0ZXMoKSk7XG5cdFx0XHRcdHRoaXMuZm9ybWF0VGltZSgpO1xuXHRcdFx0XHR0aGlzLm9wZW5QaWNrZXJPbkRhdGUgPSB2YWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuaG91cnMgPSB0aGlzLmluaXRIb3VyID8/ICcnO1xuXHRcdFx0XHR0aGlzLm1pbnV0ZXMgPSB0aGlzLmluaXRNaW51dGUgPz8gJyc7XG5cdFx0XHRcdHRoaXMub3BlblBpY2tlck9uRGF0ZSA9IG51bGw7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IFtdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIG5hdGl2ZVZhbHVlQ2hhbmdlZCBpcyBjYWxsZWQgd2hlbiB0aGUgaW50ZXJuYWwgdGV4dCB2YWx1ZSBjaGFuZ2VzLCBidXQgbm90XG5cdC8vIHdoZW4gdGhlIGRhdGUgaXMgY2hhbmdlZCB2aWEgdGhlIGRhdGUgcGlja2VyLiBXZSBuZWVkIHRoaXMgc28gdGhhdCB3ZSBjYW5cblx0Ly8gZGV0ZXJtaW5lIGlmIHRoZSBkYXRlcGlja2VyIGlzIGVtcHR5IG9yIGludmFsaWQuXG5cdG5hdGl2ZVZhbHVlQ2hhbmdlZCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5kYXRlUGlja2VyUmVmLm9wZW5lZCkge1xuXHRcdFx0Ly8gaWYgdGhlIHVzZXIgaXMgdHlwaW5nIGluc3RlYWQgb2YgdXNpbmcgdGhlIHBpY2tlciwgY2xvc2UgaXQuXG5cdFx0XHR0aGlzLmRhdGVQaWNrZXJSZWYuY2xvc2UoKTtcblx0XHR9XG5cdFx0dGhpcy5ub3RpZnlOZXdEYXRlKCk7XG5cdH1cblxuXHRyZXNldFRvTnVsbCgpOiB2b2lkIHtcblx0XHR0aGlzLnNldElubmVyVmFsdWVBbmROb3RpZnkobnVsbCk7XG5cdFx0dGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciA9IG51bGw7XG5cdFx0dGhpcy5uYXRpdmVJbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcblx0XHR0aGlzLmhvdXJzID0gJyc7XG5cdFx0dGhpcy5taW51dGVzID0gJyc7XG5cdFx0dGhpcy5zZWxlY3RlZERhdGVzID0gW107XG5cdH1cblxuXHRpc1NlbGVjdGVkID0gKGQ6IERhdGUpID0+IHtcblx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlcy5zb21lKChlKSA9PiBpc1NhbWVEYXkoZSwgZCkpID8gJ3NlbGVjdGVkJyA6ICcnO1xuXHRcdH1cblx0XHRyZXR1cm4gJyc7XG5cdH07XG5cdGZpbHRlckRhdGVzOiBEYXRlRmlsdGVyRm48YW55PiA9IChlKSA9PiB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH07XG5cblxuXHRmb3JtYXRUaW1lKCk6IHZvaWQge1xuXHRcdGlmIChOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHRoaXMuaG91cnMpKSAmJiB0aGlzLmhvdXJzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0dGhpcy5ob3VycyA9ICcwJyArIHRoaXMuaG91cnM7XG5cdFx0fVxuXHRcdGlmIChOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHRoaXMubWludXRlcykpICYmIHRoaXMubWludXRlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHRoaXMubWludXRlcyA9ICcwJyArIHRoaXMubWludXRlcztcblx0XHR9XG5cdH1cblxuXHR0b3VjaERhdGUoKTogdm9pZCB7XG5cdFx0dGhpcy5kYXRlVG91Y2hlZCA9IHRydWU7XG5cdFx0dGhpcy5kZXRlcm1pbmVBbGxUb3VjaGVkKCk7XG5cdH1cblxuXHR0b3VjaEhvdXJzKCk6IHZvaWQge1xuXHRcdHRoaXMuaG91cnNUb3VjaGVkID0gdHJ1ZTtcblx0XHR0aGlzLmRldGVybWluZUFsbFRvdWNoZWQoKTtcblx0fVxuXG5cdHRvdWNoTWludXRlcygpOiB2b2lkIHtcblx0XHR0aGlzLm1pbnV0ZXNUb3VjaGVkID0gdHJ1ZTtcblx0XHR0aGlzLmRldGVybWluZUFsbFRvdWNoZWQoKTtcblx0fVxuXG5cdGRldGVybWluZUFsbFRvdWNoZWQoKTogdm9pZCB7XG5cdFx0aWYgKCh0aGlzLmRhdGVUb3VjaGVkICYmIHRoaXMuaG91cnNUb3VjaGVkICYmIHRoaXMubWludXRlc1RvdWNoZWQpIHx8ICh0aGlzLmRhdGVUb3VjaGVkICYmICF0aGlzLnNob3dUaW1lSW5wdXQpKSB7XG5cdFx0XHR0aGlzLnRvdWNoKCk7XG5cdFx0fVxuXHR9XG5cblxuXHRnZXREZWZhdWx0VHJhbnNsYXRpb24oa2V5OiBzdHJpbmcpOiAoeDogYW55KSA9PiBzdHJpbmcge1xuXHRcdHN3aXRjaCAoa2V5KSB7XG5cdFx0XHRjYXNlICdwbGFjZWhvbGRlcic6XG5cdFx0XHRcdHJldHVybiAoKSA9PiAnU2VsZWN0IGRhdGUnO1xuXHRcdFx0Y2FzZSAnc2VsZWN0RGF5cyc6XG5cdFx0XHRcdHJldHVybiAoKSA9PiAnU2VsZWN0IGRheShzKSc7XG5cdFx0XHRjYXNlICdzZWxlY3RlZERhdGUnOlxuXHRcdFx0XHRyZXR1cm4gKGQ6IERhdGUpID0+IGQudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG5cdFx0XHRjYXNlICdkYXlzU2VsZWN0ZWQnOlxuXHRcdFx0XHRyZXR1cm4gKGFtb3VudCkgPT4gYCR7YW1vdW50fSBkYXlzIHNlbGVjdGVkYDtcblx0XHRcdGNhc2UgJ3NlbGVjdGVkSW5Nb250aCc6XG5cdFx0XHRcdHJldHVybiAoZDogRGF0ZSkgPT4gYCBpbiAke2Zvcm1hdERhdGUoZCwgJ01NTU0nKX1gO1xuXHRcdH1cblx0fVxuXG5cdGdldFRyYW5zbGF0aW9uKGtleTogc3RyaW5nLCBwYXJhbXM6IGFueSA9IG51bGwpOiBzdHJpbmcge1xuXHRcdGlmIChrZXkgPT09ICdwbGFjZWhvbGRlcicgJiYgdGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblx0XHRpZiAoa2V5ID09PSAncGxhY2Vob2xkZXInICYmIHN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMucGxhY2Vob2xkZXIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudHJhbnNsYXRpb25zPy5ba2V5XT8uKHBhcmFtcykgPz8gdGhpcy5nZXREZWZhdWx0VHJhbnNsYXRpb24oa2V5KShwYXJhbXMpO1xuXHR9XG5cblx0Y291bnRlcihpOiBudW1iZXIpOiBBcnJheTxudW1iZXI+IHtcblx0XHRyZXR1cm4gbmV3IEFycmF5KGkpLmZpbGwoMCkubWFwKCh4LCBqKSA9PiBqKTtcblx0fVxuXG5cdHNldEhvdXIoaG91cjogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy5ob3VycyA9IGhvdXIgPiA5ID8gU3RyaW5nKGhvdXIpIDogJzAnICsgaG91cjtcblx0fVxuXG5cdHNldE1pbnV0ZShtaW51dGU6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMubWludXRlcyA9IG1pbnV0ZSA+IDkgPyBTdHJpbmcobWludXRlKSA6ICcwJyArIG1pbnV0ZTtcblx0fVxuXG5cdGJsdXJyZWRIb3VycygpOiB2b2lkIHtcblx0XHR0aGlzLmZvcm1hdFRpbWUoKTtcblx0XHR0aGlzLnRvdWNoSG91cnMoKTtcblx0fVxuXG5cdGJsdXJyZWRNaW51dGVzKCk6IHZvaWQge1xuXHRcdHRoaXMuZm9ybWF0VGltZSgpO1xuXHRcdHRoaXMudG91Y2hNaW51dGVzKCk7XG5cdH1cblxuXHRpc0FjdGl2ZSh0b0NoZWNrOiBudW1iZXIsIGFjdHVhbFZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRpZiAoIXN0cmluZ0lzU2V0QW5kRmlsbGVkKGFjdHVhbFZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gTnVtYmVyKGFjdHVhbFZhbHVlKSA9PT0gdG9DaGVjaztcblx0fVxuXG5cdHRpbWVEcm9wZG93blJlbmRlcmVkID0gKCkgPT4ge1xuXHRcdHJ1bk5leHRSZW5kZXJDeWNsZSgoKSA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG5cdFx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICB0aGlzLmNsaWNrSGFuZGxlckZvclRpbWVEcm9wZG93bik7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IGFjdGl2ZUhvdXIgPSB0aGlzLnRpbWVEb3VibGVEcm9wZG93bi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ob3VyT2ZEYXkgLmlzQWN0aXZlJyk7XG5cdFx0Y29uc3QgYWN0aXZlTWludXRlID0gdGhpcy50aW1lRG91YmxlRHJvcGRvd24ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubWludXRlT2ZIb3VyIC5pc0FjdGl2ZScpO1xuXHRcdGNvbnN0IGFjdGl2ZUhvdXJQYXJlbnQgPSBhY3RpdmVIb3VyPy5wYXJlbnRFbGVtZW50O1xuXHRcdGNvbnN0IGFjdGl2ZU1pbnV0ZVBhcmVudCA9IGFjdGl2ZU1pbnV0ZT8ucGFyZW50RWxlbWVudDtcblx0XHRpZiAoYWN0aXZlSG91clBhcmVudCkge1xuXHRcdFx0YWN0aXZlSG91clBhcmVudC5zY3JvbGxUb3AgPSBhY3RpdmVIb3VyPy5vZmZzZXRUb3AgLSAxMTA7XG5cdFx0fVxuXHRcdGlmIChhY3RpdmVNaW51dGVQYXJlbnQpIHtcblx0XHRcdGFjdGl2ZU1pbnV0ZVBhcmVudC5zY3JvbGxUb3AgPSBhY3RpdmVNaW51dGU/Lm9mZnNldFRvcCAtIDExMDtcblx0XHR9XG5cdH1cblxuXHRjbGlja0hhbmRsZXJGb3JUaW1lRHJvcGRvd24gPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcblx0XHRpZiAodGhpcy5kcm9wZG93blZpc2libGUpIHtcblx0XHRcdGNvbnN0IGRyb3Bkb3duID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50aW1lRG91YmxlRHJvcGRvd24nKTtcblx0XHRcdGlmICghZHJvcGRvd24uY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuXHRcdFx0XHR0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgIHRoaXMuY2xpY2tIYW5kbGVyRm9yVGltZURyb3Bkb3duKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuIiwiPGRpdiBjbGFzcz1cImNvbXBvbmVudENvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntzaG93RXJyb3JzOiBpc0luRXJyb3JTdGF0ZSgpfVwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogZGlzYWJsZWR9XCI+XG5cdDxkaXYgY2xhc3M9XCJkYXRlQ29udGFpbmVyXCIgW25nQ2xhc3NdPVwie25vUmlnaHRCb3JkZXI6ICFzaG93VGltZUlucHV0ICYmIGNsZWFyYWJsZSAmJiAhZGlzYWJsZWQsIGRpc2FibGVkOiBkaXNhYmxlZH1cIj5cblx0XHQ8bWF0LWZvcm0tZmllbGQgZmxvYXRMYWJlbD1cIm5ldmVyXCI+XG5cdFx0XHQ8ZGl2ICpuZ0lmPVwibXVsdGlwbGVcIiBjbGFzcz1cImRheXNTZWxlY3RlZENhcHRpb25cIiAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogZGlzYWJsZWR9XCI+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZERhdGVzLmxlbmd0aCA+PSAyXCI+XG5cdFx0XHRcdFx0PHNwYW4+e3tnZXRUcmFuc2xhdGlvbignZGF5c1NlbGVjdGVkJywgc2VsZWN0ZWREYXRlcy5sZW5ndGgpfX08L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJnZXRTZWxlY3RlZE1vbnRocygpID09PSAxXCI+e3tnZXRUcmFuc2xhdGlvbignc2VsZWN0ZWRJbk1vbnRoJywgc2VsZWN0ZWREYXRlc1swXSl9fTwvc3Bhbj5cblx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxzcGFuICpuZ0lmPVwic2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDFcIj57e2dldFRyYW5zbGF0aW9uKCdzZWxlY3RlZERhdGUnLCBzZWxlY3RlZERhdGVzWzBdKX19PC9zcGFuPlxuXHRcdFx0XHQ8c3BhbiAqbmdJZj1cInNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJwbGFjZWhvbGRlckZvck11bHRpcGxlU2VsZWN0aW9uXCI+e3tnZXRUcmFuc2xhdGlvbignc2VsZWN0RGF5cycpfX08L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxpbnB1dFxuXHRcdFx0XHQjbmF0aXZlSW5wdXRcblx0XHRcdFx0bWF0SW5wdXRcblx0XHRcdFx0W21hdERhdGVwaWNrZXJdPVwicGlja2VyXCJcblx0XHRcdFx0W21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZmlsdGVyRGF0ZXNcIlxuXHRcdFx0XHRbKG5nTW9kZWwpXT1cInZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyXCJcblx0XHRcdFx0KGRhdGVJbnB1dCk9XCJkYXRlQ2hhbmdlZCgkZXZlbnQpXCJcblx0XHRcdFx0KGlucHV0KT1cIm5hdGl2ZVZhbHVlQ2hhbmdlZCgpXCJcblx0XHRcdFx0W21pbl09XCJtaW5EYXRlU3RhcnRPZkRheVwiXG5cdFx0XHRcdFttYXhdPVwibWF4RGF0ZUVuZE9mRGF5XCJcblx0XHRcdFx0W3BsYWNlaG9sZGVyXT1cImdldFRyYW5zbGF0aW9uKCdwbGFjZWhvbGRlcicpXCJcblx0XHRcdFx0KGNsaWNrKT1cInBpY2tlci5vcGVuKClcIlxuXHRcdFx0XHQoYmx1cik9XCJ0b3VjaERhdGUoKVwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cIntpbnB1dEZvck11bHRpcGxlRGF5czogbXVsdGlwbGV9XCJcblx0XHRcdD5cblx0XHRcdDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG5cdFx0XHQ8bWF0LWRhdGVwaWNrZXJcblx0XHRcdFx0I3BpY2tlclxuXHRcdFx0XHRbZGF0ZUNsYXNzXT1cImlzU2VsZWN0ZWRcIlxuXHRcdFx0XHRbc3RhcnRBdF09XCJvcGVuUGlja2VyT25EYXRlXCJcblx0XHRcdD48L21hdC1kYXRlcGlja2VyPlxuXHRcdDwvbWF0LWZvcm0tZmllbGQ+XG5cdFx0PGRpdiBjbGFzcz1cInRhaWxcIj5cblx0XHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0VGFpbFRwbCgpXCI+PC9uZy1jb250YWluZXI+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwidGltZUNvbnRhaW5lclwiICpuZ0lmPVwic2hvd1RpbWVJbnB1dFwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogZGlzYWJsZWR9XCI+XG5cblx0XHQ8ZGl2IGNsYXNzPVwidGltZUNvbnRhaW5lcklubmVyXCI+XG5cdFx0XHQ8c3ZnIGNsYXNzPVwiY2xvY2tJY29uXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIChjbGljayk9XCJob3VySW5wdXQuZm9jdXMoKVwiPlxuXHRcdFx0XHQ8cGF0aCBkPVwiTTEyIDZWMTJMMTYgMTRNMjIgMTJDMjIgMTcuNTIyOCAxNy41MjI4IDIyIDEyIDIyQzYuNDc3MTUgMjIgMiAxNy41MjI4IDIgMTJDMiA2LjQ3NzE1IDYuNDc3MTUgMiAxMiAyQzE3LjUyMjggMiAyMiA2LjQ3NzE1IDIyIDEyWlwiIHN0cm9rZT1cIiM4ODhkYThcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuXHRcdFx0PC9zdmc+XG5cblx0XHRcdDxpbnB1dCAjaG91cklucHV0IG1heGxlbmd0aD1cIjJcIiBwbGFjZWhvbGRlcj1cIl9fXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgWyhuZ01vZGVsKV09XCJob3Vyc1wiIChuZ01vZGVsQ2hhbmdlKT1cIm5vdGlmeU5ld0RhdGUoKVwiIChmb2N1cyk9XCJkcm9wZG93blZpc2libGUgPSB0cnVlXCIgKGJsdXIpPVwiYmx1cnJlZEhvdXJzKCk7XCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjo8L2Rpdj5cblx0XHRcdDxpbnB1dCBtYXhsZW5ndGg9XCIyXCIgcGxhY2Vob2xkZXI9XCJfX1wiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFsobmdNb2RlbCldPVwibWludXRlc1wiIChuZ01vZGVsQ2hhbmdlKT1cIm5vdGlmeU5ld0RhdGUoKVwiIChmb2N1cyk9XCJkcm9wZG93blZpc2libGUgPSB0cnVlXCIgKGJsdXIpPVwiYmx1cnJlZE1pbnV0ZXMoKTtcIj5cblx0XHQ8L2Rpdj5cblxuXHRcdDxkaXYgY2xhc3M9XCJ0aW1lRG91YmxlRHJvcGRvd25cIiAjdGltZURvdWJsZURyb3Bkb3duICpuZ0lmPVwiZHJvcGRvd25WaXNpYmxlXCIgW29uUmVuZGVyRm5dPVwidGltZURyb3Bkb3duUmVuZGVyZWRcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJob3VyT2ZEYXlcIj5cblx0XHRcdFx0QGZvciAoaG91ciBvZiBjb3VudGVyKDI0KTsgdHJhY2sgaG91cikge1xuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJlbnRyeVwiIChtb3VzZWRvd24pPVwic2V0SG91cihob3VyKVwiIFtuZ0NsYXNzXT1cIntpc0FjdGl2ZTogaXNBY3RpdmUoaG91ciwgaG91cnMpfVwiPnt7aG91ciA+IDkgPyBob3VyIDogJzAnICsgaG91ciB9fTwvZGl2PlxuXHRcdFx0XHR9XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJtaW51dGVPZkhvdXJcIj5cblx0XHRcdFx0QGZvciAobWludXRlIG9mIG1pbnV0ZXNPZkhvdXI7IHRyYWNrIG1pbnV0ZSkge1xuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJlbnRyeVwiIChtb3VzZWRvd24pPVwic2V0TWludXRlKG1pbnV0ZSlcIiBbbmdDbGFzc109XCJ7aXNBY3RpdmU6IGlzQWN0aXZlKG1pbnV0ZSwgbWludXRlcyl9XCI+e3ttaW51dGUgPiA5ID8gbWludXRlIDogJzAnICsgbWludXRlfX08L2Rpdj5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
432
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9kYXRlLXRpbWUtcGlja2VyL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvZWxlbWVudHMvZGF0ZS10aW1lLXBpY2tlci9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTixTQUFTLEVBRVQsSUFBSSxFQUNKLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUdMLFFBQVEsRUFFUixTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RCxPQUFPLEVBQWMsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFHOUcsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFDeEcsT0FBTyxFQUFDLFVBQVUsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxJQUFJLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25GLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7O0FBRXRELE1BQU0sQ0FB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UUFBUTtnQkFDYyxrQkFBa0I7c0JBQWxELFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdENvbXBvbmVudCxcblx0RWxlbWVudFJlZixcblx0SG9zdCxcblx0SW5qZWN0LFxuXHRJbmplY3Rpb25Ub2tlbixcblx0SW5wdXQsIE5nWm9uZSxcblx0T25DaGFuZ2VzLFxuXHRPbkluaXQsXG5cdE9wdGlvbmFsLFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xDb250YWluZXIsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2ludmFsaWREYXRlS2V5fSBmcm9tICcuLi8uLi92YWxpZGF0b3JzL2RhdGVWYWxpZGF0b3InO1xuaW1wb3J0IHtEYXRlRmlsdGVyRm4sIE1hdERhdGVwaWNrZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtEYXRlQWRhcHRlciwgTUFUX0RBVEVfRk9STUFUUywgTUFUX05BVElWRV9EQVRFX0ZPUk1BVFMsIE1hdERhdGVGb3JtYXRzfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7S2xwRGF0ZUZvcm1hdHN9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7Rm9ybUVsZW1lbnRDb21wb25lbnR9IGZyb20gJy4uLy4uL2Zvcm0vZm9ybS1lbGVtZW50L2Zvcm0tZWxlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHtNdWx0aXBsZVZhbHVlQWNjZXNzb3JCYXNlfSBmcm9tICcuLi92YWx1ZS1hY2Nlc3Nvci1iYXNlL211bHRpcGxlLXZhbHVlLWFjY2Vzc29yLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7aXNWYWx1ZVNldCwgc3RyaW5nSXNTZXRBbmRGaWxsZWR9IGZyb20gJy4uLy4uL3V0aWwvdmFsdWVzJztcbmltcG9ydCB7ZW5kT2ZNb250aCwgZm9ybWF0IGFzIGZvcm1hdERhdGUsIHN0YXJ0T2ZNb250aCwgaXNTYW1lRGF5fSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQge2FycmF5SXNTZXRBbmRGaWxsZWQsIHJlbW92ZUR1cGxpY2F0ZXNGcm9tQXJyYXkgfSBmcm9tICcuLi8uLi91dGlsL2FycmF5cyc7XG5pbXBvcnQge3J1bk5leHRSZW5kZXJDeWNsZX0gZnJvbSBcIi4uLy4uL3V0aWwvYW5ndWxhclwiO1xuXG5leHBvcnQgY29uc3QgS0xQX0RBVEVfRk9STUFUUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxLbHBEYXRlRm9ybWF0cz4oJ2tscC5mb3JtLmRhdGUuZm9ybWF0cycpO1xuZXhwb3J0IGNvbnN0IERBVEVfVElNRV9QSUNLRVJfVFJBTlNMQVRJT05TID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ2tscC5mb3JtLmRhdGVUaW1lLnRyYW5zbGF0aW9ucycpO1xuZXhwb3J0IGNvbnN0IERBVEVfUElDS0VSX0xPQ0FMRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxhbnk+KCdrbHAuZm9ybS5kYXRlVGltZS5sb2NhbGUnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1hdERhdGVGb3JtYXRzRmFjdG9yeShjb21wb25lbnQ6IERhdGVUaW1lUGlja2VyQ29tcG9uZW50LCBkYXRlRm9ybWF0cz86IEtscERhdGVGb3JtYXRzKTogTWF0RGF0ZUZvcm1hdHMge1xuXHRyZXR1cm4gZGF0ZUZvcm1hdHM/Lihjb21wb25lbnQuZm9ybWF0KSA/PyBNQVRfTkFUSVZFX0RBVEVfRk9STUFUUztcbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAna2xwLWZvcm0tZGF0ZS10aW1lLXBpY2tlcicsXG5cdHRlbXBsYXRlVXJsOiAnLi9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuXHRwcm92aWRlcnM6IFtcblx0XHR7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBEYXRlVGltZVBpY2tlckNvbXBvbmVudCwgbXVsdGk6IHRydWV9LFxuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsXG5cdFx0XHRkZXBzOiBbRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQsIFtuZXcgT3B0aW9uYWwoKSwgS0xQX0RBVEVfRk9STUFUU11dLFxuXHRcdFx0dXNlRmFjdG9yeTogbWF0RGF0ZUZvcm1hdHNGYWN0b3J5LFxuXHRcdH0sXG5cdF0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGVUaW1lUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgTXVsdGlwbGVWYWx1ZUFjY2Vzc29yQmFzZTxEYXRlIHwgdHlwZW9mIGludmFsaWREYXRlS2V5PiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblx0QElucHV0KCkgcHVibGljIG1pbkRhdGU6IERhdGUgPSB1bmRlZmluZWQ7XG5cdEBJbnB1dCgpIHB1YmxpYyBtYXhEYXRlOiBEYXRlID0gdW5kZWZpbmVkO1xuXHRASW5wdXQoKSBwdWJsaWMgc2FtZU1vbnRoT25seSA9IGZhbHNlO1xuXHRASW5wdXQoKSBwdWJsaWMgZm9ybWF0ID0gJ2RkLU1NLXl5eXknO1xuXHRASW5wdXQoKSBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcblx0QElucHV0KCkgcHVibGljIGNsZWFyYWJsZSA9IGZhbHNlO1xuXHRASW5wdXQoKSBwdWJsaWMgc2hvd1RpbWVJbnB1dCA9IHRydWU7XG5cdEBJbnB1dCgpIHB1YmxpYyBpbml0SG91cjogc3RyaW5nID0gbnVsbDtcblx0QElucHV0KCkgcHVibGljIGluaXRNaW51dGU6IHN0cmluZyA9IG51bGw7XG5cdEBJbnB1dCgpIHB1YmxpYyBpbnZhbGlkVGltZUFzTWlkbmlnaHQgPSBmYWxzZTsgLy8gaWYgdGhlIHRpbWUgaXMgbm90IHZhbGlkLCB1c2UgMDA6MDAgYXMgdGhlIHRpbWVcblxuXHRAVmlld0NoaWxkKCduYXRpdmVJbnB1dCcpIG5hdGl2ZUlucHV0UmVmOiBFbGVtZW50UmVmO1xuXHRAVmlld0NoaWxkKCdwaWNrZXInKSBkYXRlUGlja2VyUmVmOiBNYXREYXRlcGlja2VyPERhdGU+O1xuXHRAVmlld0NoaWxkKCd0aW1lRG91YmxlRHJvcGRvd24nKSB0aW1lRG91YmxlRHJvcGRvd246IEVsZW1lbnRSZWY7XG5cblx0b3BlblBpY2tlck9uRGF0ZTogRGF0ZSA9IG51bGw7XG5cdG1pbkRhdGVTdGFydE9mRGF5OiBEYXRlID0gdW5kZWZpbmVkO1xuXHRtYXhEYXRlRW5kT2ZEYXk6IERhdGUgPSB1bmRlZmluZWQ7XG5cblx0Ly8gdGhpcyBpcyBwYXNzZWQgYXMgbmdtb2RlbCBhbmQgaXMgdXNlZCB0byBzZXQgdGhlIGluaXRpYWwgZGF0ZS4gQnV0IHdlIGFsc29cblx0Ly8gdXNlIGlucHV0IGFuZCBuYXRpdmVJbnB1dCBjYWxsYmFja3MgdG8gZXh0ZW5kIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIHNvIHdlXG5cdC8vIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVtcHR5IGFuZCBpbnZhbGlkIGRhdGVzLlxuXHR2YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlcjogRGF0ZTtcblx0aG91cnM6IHN0cmluZzsgLy8gc3RyaW5nIGJlY2F1c2UgaXQncyBhIHRleHQgaW5wdXRcblx0bWludXRlczogc3RyaW5nOyAvLyBzdHJpbmcgYmVjYXVzZSBpdCdzIGEgdGV4dCBpbnB1dFxuXHRwcm90ZWN0ZWQgc2VsZWN0ZWREYXRlczogQXJyYXk8RGF0ZT4gPSBbXTtcblx0cHJpdmF0ZSBkYXRlUGlja2luZ0Nsb3NpbmdGbjogKCkgPT4gdm9pZDtcblx0cHJpdmF0ZSBkYXRlVG91Y2hlZCA9IGZhbHNlO1xuXHRwcml2YXRlIGhvdXJzVG91Y2hlZCA9IGZhbHNlO1xuXHRwcml2YXRlIG1pbnV0ZXNUb3VjaGVkID0gZmFsc2U7XG5cdHByb3RlY3RlZCBkcm9wZG93blZpc2libGUgPSBmYWxzZTtcblx0cHJvdGVjdGVkIG1pbnV0ZXNPZkhvdXI6IEFycmF5PG51bWJlcj4gPSBbXTtcblx0cHJvdGVjdGVkIE51bWJlciA9IE51bWJlcjtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRASG9zdCgpIEBPcHRpb25hbCgpIHByb3RlY3RlZCBwYXJlbnQ6IEZvcm1FbGVtZW50Q29tcG9uZW50LFxuXHRcdEBIb3N0KCkgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG5cdFx0QEluamVjdChEQVRFX1RJTUVfUElDS0VSX1RSQU5TTEFUSU9OUykgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGlvbnM6IGFueSxcblx0XHRASW5qZWN0KERBVEVfUElDS0VSX0xPQ0FMRSkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkYXRlUGlja2VyTG9jYWxlOiBhbnksXG5cdFx0cHJpdmF0ZSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RGF0ZT4sXG5cdFx0cHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcblx0XHRwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG5cdFx0cHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcblx0KSB7XG5cdFx0c3VwZXIocGFyZW50LCBjb250cm9sQ29udGFpbmVyKTtcblx0XHRpZiAoaXNWYWx1ZVNldChkYXRlUGlja2VyTG9jYWxlKSkge1xuXHRcdFx0ZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKGRhdGVQaWNrZXJMb2NhbGUoKSk7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0c3VwZXIubmdPbkluaXQoKTtcblx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0dGhpcy5wbGFjZWhvbGRlciA9ICcnO1xuXHRcdFx0dGhpcy5zaG93VGltZUlucHV0ID0gZmFsc2U7XG5cdFx0fVxuXHRcdHRoaXMuaG91cnMgPSB0aGlzLmluaXRIb3VyO1xuXHRcdHRoaXMubWludXRlcyA9IHRoaXMuaW5pdE1pbnV0ZTtcblx0XHR0aGlzLm1pbnV0ZXNPZkhvdXIgPSBBcnJheS5mcm9tKHtsZW5ndGg6IDYwfSwgKHYsIGspID0+IGspLmZpbHRlcihlID0+IGUgJSA1ID09PSAwKTtcblx0fVxuXG5cblxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdC8vIHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgdGhlIGRhdGVwaWNrZXIgY2xvc2luZyBmbiBsYXRlciwgc28gd2UgYXJlIHNhdmluZyBpdCBoZXJlIHRvIHJlc3RvcmUgaXQgd2hlbiBuZWVkZWRcblx0XHRcdHRoaXMuZGF0ZVBpY2tpbmdDbG9zaW5nRm4gPSB0aGlzLmRhdGVQaWNrZXJSZWYuY2xvc2U7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuXHRcdGlmIChjaGFuZ2VzLm1pbkRhdGUpIHtcblx0XHRcdHRoaXMuZGV0ZXJtaW5lTWluQW5kTWF4RGF0ZXMoKTtcblx0XHR9XG5cdFx0aWYgKGNoYW5nZXMubWF4RGF0ZSkge1xuXHRcdFx0dGhpcy5kZXRlcm1pbmVNaW5BbmRNYXhEYXRlcygpO1xuXHRcdH1cblx0fVxuXG5cdHNldE1pbkRhdGUobWluRGF0ZTogRGF0ZSk6IHZvaWQge1xuXHRcdGlmIChtaW5EYXRlKSB7XG5cdFx0XHR0aGlzLm1pbkRhdGVTdGFydE9mRGF5ID0gbmV3IERhdGUobWluRGF0ZSk7XG5cdFx0XHR0aGlzLm1pbkRhdGVTdGFydE9mRGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1pbkRhdGVTdGFydE9mRGF5ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdHNldE1heERhdGUobWF4RGF0ZTogRGF0ZSk6IHZvaWQge1xuXHRcdGlmIChtYXhEYXRlKSB7XG5cdFx0XHR0aGlzLm1heERhdGVFbmRPZkRheSA9IG5ldyBEYXRlKG1heERhdGUpO1xuXHRcdFx0dGhpcy5tYXhEYXRlRW5kT2ZEYXkuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5tYXhEYXRlRW5kT2ZEYXkgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0Z2V0U2VsZWN0ZWRNb250aHMoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gcmVtb3ZlRHVwbGljYXRlc0Zyb21BcnJheSh0aGlzLnNlbGVjdGVkRGF0ZXMubWFwKChlKSA9PiBmb3JtYXREYXRlKGUsICdNTU1NJykpKS5sZW5ndGg7XG5cdH1cblxuXHQvLyBkYXRlQ2hhbmdlZCBpcyBjYWxsZWQgd2hlbiB0aGUgb3V0cHV0IG9mIHRoZSBkYXRlcGlja2VyIGlzIGNoYW5nZWQgYW5kXG5cdC8vIHBhcnNlZCBjb3JyZWN0bHkuIElmIHRoZSBkYXRlIGlzIGludmFsaWQsIGl0IHdpbGwgYmUgY2FsbGVkIHRoZSBmaXJzdCB0aW1lXG5cdC8vIHdpdGggbnVsbCBidXQgbmV2ZXIgYWdhaW4gdW50aWwgYSB2YWxpZCBpbnB1dCBpcyBwcm92aWRlZC5cblx0ZGF0ZUNoYW5nZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xuXHRcdGNvbnN0IGRhdGUgPSBldmVudC52YWx1ZTtcblx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0dGhpcy5kYXRlUGlja2VyUmVmLmNsb3NlID0gKCkgPT4ge1xuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWREYXRlcy5zb21lKChlKSA9PiBpc1NhbWVEYXkoZSwgZGF0ZSkpKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcy5maWx0ZXIoKGUpID0+ICFpc1NhbWVEYXkoZSwgZGF0ZSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZERhdGVzID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRlcywgZGF0ZV07XG5cdFx0XHR9XG5cdFx0XHQvLyBTVEFSVCBIQUNLXG5cdFx0XHQvLyB0aGUgZGF0ZSBwaWNrZXIgZG9lcyBub3QgcHJvdmlkZSBhbnkgcmVyZW5kZXIgY2FsbHMuIFRoZXJlZm9yZSwgd2UgYXJlIGdvaW5nIHRvIGNoYW5nZSB0aGUgbWluRGF0ZSBpbiBvcmRlciB0byBmb3JjZSB0aGUgcmVuZGVyXG5cdFx0XHQvLyBUaGlzIGlzIG5lZWRlZCB0byBzaG93IGFsbCBzZWxlY3RlZCBkYXlzIGluIG91ciBkYXRlIHBpY2tlclxuXHRcdFx0Ly8gV2UgYWxzbyBzZXQgdGhlIGlubmVyVmFsdWUgdG8gbnVsbCAod2l0aCB0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyID0gbnVsbDspLCBvdGhlcndpc2UgeW91IGNhbiBub3Rcblx0XHRcdC8vIGRlc2VsZWN0IHlvdXIgbGFzdCBwaWNrZWQgZGF0ZVxuXHRcdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdFx0dGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciA9IG51bGw7XG5cdFx0XHRjb25zdCBvbGRNaW5EYXRlID0gdGhpcy5taW5EYXRlU3RhcnRPZkRheTtcblx0XHRcdHRoaXMubWluRGF0ZVN0YXJ0T2ZEYXkgPSBuZXcgRGF0ZSgwKTtcblx0XHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdHRoaXMubWluRGF0ZVN0YXJ0T2ZEYXkgPSBvbGRNaW5EYXRlO1xuXHRcdFx0Ly8gRU5EIEhBQ0tcblxuXHRcdFx0aWYgKHRoaXMuc2FtZU1vbnRoT25seSkge1xuXHRcdFx0XHRpZiAodGhpcy5zZWxlY3RlZERhdGVzLmxlbmd0aCA+PSAyKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGUgPCBzdGFydE9mTW9udGgodGhpcy5zZWxlY3RlZERhdGVzWzBdKSB8fCBkYXRlID4gZW5kT2ZNb250aCh0aGlzLnNlbGVjdGVkRGF0ZXNbMF0pKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbZGF0ZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZGV0ZXJtaW5lTWluQW5kTWF4RGF0ZXMoKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KHRoaXMuc2VsZWN0ZWREYXRlcyk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5kYXRlUGlja2VyUmVmLmNsb3NlID0gdGhpcy5kYXRlUGlja2luZ0Nsb3NpbmdGbjtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5vdGlmeU5ld0RhdGUoKTtcblx0XHR9XG5cdH1cblxuXHRkZXRlcm1pbmVNaW5BbmRNYXhEYXRlcygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5zYW1lTW9udGhPbmx5KSB7XG5cdFx0XHRpZiAodGhpcy5zZWxlY3RlZERhdGVzLmxlbmd0aCA+PSAyKSB7XG5cdFx0XHRcdHRoaXMuc2V0TWluRGF0ZShzdGFydE9mTW9udGgodGhpcy5zZWxlY3RlZERhdGVzWzBdKSk7XG5cdFx0XHRcdHRoaXMuc2V0TWF4RGF0ZShlbmRPZk1vbnRoKHRoaXMuc2VsZWN0ZWREYXRlc1swXSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRNaW5EYXRlKHRoaXMubWluRGF0ZSk7XG5cdFx0XHRcdHRoaXMuc2V0TWF4RGF0ZSh0aGlzLm1heERhdGUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE1pbkRhdGUodGhpcy5taW5EYXRlKTtcblx0XHRcdHRoaXMuc2V0TWF4RGF0ZSh0aGlzLm1heERhdGUpO1xuXHRcdH1cblx0fVxuXG5cdG5vdGlmeU5ld0RhdGUoKTogdm9pZCB7XG5cdFx0Y29uc3QgbmF0aXZlSW5wdXRWYWx1ZSA9IHRoaXMubmF0aXZlSW5wdXRSZWYubmF0aXZlRWxlbWVudC52YWx1ZTtcblx0XHRjb25zdCBwYXJzZWRIb3VycyA9IE51bWJlcih0aGlzLmhvdXJzKTtcblx0XHRjb25zdCBwYXJzZWRNaW51dGVzID0gTnVtYmVyKHRoaXMubWludXRlcyk7XG5cblx0XHQvLyBpZiB3ZSBkb250IGhhdmUgdGhlIHRpbWUgZWxlbWVudFxuXHRcdGlmICghdGhpcy5zaG93VGltZUlucHV0KSB7XG5cdFx0XHRpZiAoIXN0cmluZ0lzU2V0QW5kRmlsbGVkKG5hdGl2ZUlucHV0VmFsdWUpKSB7XG5cdFx0XHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeShudWxsKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeSh0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyB3aGVuIGFsbCBpbnB1dHMgYXJlIGVtcHR5XG5cdFx0aWYgKCFzdHJpbmdJc1NldEFuZEZpbGxlZChuYXRpdmVJbnB1dFZhbHVlKSAmJiAhc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5ob3VycykgJiYgIXN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMubWludXRlcykpIHtcblx0XHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeShudWxsKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Ly8gaWYgd2UgaGF2ZSBkYXRlIGFuZCB0aW1lXG5cdFx0aWYgKFxuXHRcdFx0c3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5ob3VycykgJiZcblx0XHRcdE51bWJlci5pc0Zpbml0ZShwYXJzZWRIb3VycykgJiZcblx0XHRcdHBhcnNlZEhvdXJzID49IDAgJiZcblx0XHRcdHBhcnNlZEhvdXJzIDw9IDIzICYmXG5cdFx0XHRzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLm1pbnV0ZXMpICYmXG5cdFx0XHROdW1iZXIuaXNGaW5pdGUocGFyc2VkTWludXRlcykgJiZcblx0XHRcdHBhcnNlZE1pbnV0ZXMgPj0gMCAmJlxuXHRcdFx0cGFyc2VkTWludXRlcyA8PSA1OSAmJlxuXHRcdFx0dGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciBpbnN0YW5jZW9mIERhdGVcblx0XHQpIHtcblx0XHRcdGNvbnN0IG5ld0RhdGVXaXRoSG91cnMgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyLnNldEhvdXJzKHBhcnNlZEhvdXJzKSk7XG5cdFx0XHRjb25zdCBuZXdEYXRlV2l0aE1pbnV0ZXMgPSBuZXcgRGF0ZShuZXdEYXRlV2l0aEhvdXJzLnNldE1pbnV0ZXMocGFyc2VkTWludXRlcykpO1xuXHRcdFx0dGhpcy5zZXRJbm5lclZhbHVlQW5kTm90aWZ5KG5ld0RhdGVXaXRoTWludXRlcyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLmludmFsaWRUaW1lQXNNaWRuaWdodCkge1xuXHRcdFx0aWYgKHRoaXMudmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXIgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeSh0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBhbGwgb3RoZXIgY2FzZXMsIHdlIGFyZSBub3QgaW4gYSB2YWxpZCBzdGF0ZVxuXHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeShpbnZhbGlkRGF0ZUtleSk7XG5cdH1cblxuXHR3cml0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgQXJyYXk8RGF0ZT4gfCB0eXBlb2YgaW52YWxpZERhdGVLZXkpOiB2b2lkIHtcblx0XHRzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlcyA9IHZhbHVlO1xuXHRcdFx0dGhpcy5kZXRlcm1pbmVNaW5BbmRNYXhEYXRlcygpO1xuXHRcdFx0dGhpcy52YWx1ZUZvck1hdGVyaWFsRGF0ZVBpY2tlciA9IG51bGw7XG5cdFx0XHRpZiAoYXJyYXlJc1NldEFuZEZpbGxlZCh2YWx1ZSkpIHtcblx0XHRcdFx0dGhpcy5vcGVuUGlja2VyT25EYXRlID0gdGhpcy5zZWxlY3RlZERhdGVzWzBdO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyID0gdmFsdWUgPT09IGludmFsaWREYXRlS2V5ID8gbnVsbCA6IHZhbHVlO1xuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHR0aGlzLmhvdXJzID0gU3RyaW5nKHZhbHVlLmdldEhvdXJzKCkpO1xuXHRcdFx0XHR0aGlzLm1pbnV0ZXMgPSBTdHJpbmcodmFsdWUuZ2V0TWludXRlcygpKTtcblx0XHRcdFx0dGhpcy5mb3JtYXRUaW1lKCk7XG5cdFx0XHRcdHRoaXMub3BlblBpY2tlck9uRGF0ZSA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5ob3VycyA9IHRoaXMuaW5pdEhvdXIgPz8gJyc7XG5cdFx0XHRcdHRoaXMubWludXRlcyA9IHRoaXMuaW5pdE1pbnV0ZSA/PyAnJztcblx0XHRcdFx0dGhpcy5vcGVuUGlja2VyT25EYXRlID0gbnVsbDtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZERhdGVzID0gW107XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gbmF0aXZlVmFsdWVDaGFuZ2VkIGlzIGNhbGxlZCB3aGVuIHRoZSBpbnRlcm5hbCB0ZXh0IHZhbHVlIGNoYW5nZXMsIGJ1dCBub3Rcblx0Ly8gd2hlbiB0aGUgZGF0ZSBpcyBjaGFuZ2VkIHZpYSB0aGUgZGF0ZSBwaWNrZXIuIFdlIG5lZWQgdGhpcyBzbyB0aGF0IHdlIGNhblxuXHQvLyBkZXRlcm1pbmUgaWYgdGhlIGRhdGVwaWNrZXIgaXMgZW1wdHkgb3IgaW52YWxpZC5cblx0bmF0aXZlVmFsdWVDaGFuZ2VkKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmRhdGVQaWNrZXJSZWYub3BlbmVkKSB7XG5cdFx0XHQvLyBpZiB0aGUgdXNlciBpcyB0eXBpbmcgaW5zdGVhZCBvZiB1c2luZyB0aGUgcGlja2VyLCBjbG9zZSBpdC5cblx0XHRcdHRoaXMuZGF0ZVBpY2tlclJlZi5jbG9zZSgpO1xuXHRcdH1cblx0XHR0aGlzLm5vdGlmeU5ld0RhdGUoKTtcblx0fVxuXG5cdHJlc2V0VG9OdWxsKCk6IHZvaWQge1xuXHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeShudWxsKTtcblx0XHR0aGlzLnZhbHVlRm9yTWF0ZXJpYWxEYXRlUGlja2VyID0gbnVsbDtcblx0XHR0aGlzLm5hdGl2ZUlucHV0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xuXHRcdHRoaXMuaG91cnMgPSAnJztcblx0XHR0aGlzLm1pbnV0ZXMgPSAnJztcblx0XHR0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbXTtcblx0fVxuXG5cdGlzU2VsZWN0ZWQgPSAoZDogRGF0ZSkgPT4ge1xuXHRcdGlmICh0aGlzLm11bHRpcGxlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZWxlY3RlZERhdGVzLnNvbWUoKGUpID0+IGlzU2FtZURheShlLCBkKSkgPyAnc2VsZWN0ZWQnIDogJyc7XG5cdFx0fVxuXHRcdHJldHVybiAnJztcblx0fTtcblx0ZmlsdGVyRGF0ZXM6IERhdGVGaWx0ZXJGbjxhbnk+ID0gKGUpID0+IHtcblx0XHRpZiAodGhpcy5kaXNhYmxlZCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXG5cdGZvcm1hdFRpbWUoKTogdm9pZCB7XG5cdFx0aWYgKE51bWJlci5pc0Zpbml0ZShOdW1iZXIodGhpcy5ob3VycykpICYmIHRoaXMuaG91cnMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHR0aGlzLmhvdXJzID0gJzAnICsgdGhpcy5ob3Vycztcblx0XHR9XG5cdFx0aWYgKE51bWJlci5pc0Zpbml0ZShOdW1iZXIodGhpcy5taW51dGVzKSkgJiYgdGhpcy5taW51dGVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0dGhpcy5taW51dGVzID0gJzAnICsgdGhpcy5taW51dGVzO1xuXHRcdH1cblx0fVxuXG5cdHRvdWNoRGF0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLmRhdGVUb3VjaGVkID0gdHJ1ZTtcblx0XHR0aGlzLmRldGVybWluZUFsbFRvdWNoZWQoKTtcblx0fVxuXG5cdHRvdWNoSG91cnMoKTogdm9pZCB7XG5cdFx0dGhpcy5ob3Vyc1RvdWNoZWQgPSB0cnVlO1xuXHRcdHRoaXMuZGV0ZXJtaW5lQWxsVG91Y2hlZCgpO1xuXHR9XG5cblx0dG91Y2hNaW51dGVzKCk6IHZvaWQge1xuXHRcdHRoaXMubWludXRlc1RvdWNoZWQgPSB0cnVlO1xuXHRcdHRoaXMuZGV0ZXJtaW5lQWxsVG91Y2hlZCgpO1xuXHR9XG5cblx0ZGV0ZXJtaW5lQWxsVG91Y2hlZCgpOiB2b2lkIHtcblx0XHRpZiAoKHRoaXMuZGF0ZVRvdWNoZWQgJiYgdGhpcy5ob3Vyc1RvdWNoZWQgJiYgdGhpcy5taW51dGVzVG91Y2hlZCkgfHwgKHRoaXMuZGF0ZVRvdWNoZWQgJiYgIXRoaXMuc2hvd1RpbWVJbnB1dCkpIHtcblx0XHRcdHRoaXMudG91Y2goKTtcblx0XHR9XG5cdH1cblxuXG5cdGdldERlZmF1bHRUcmFuc2xhdGlvbihrZXk6IHN0cmluZyk6ICh4OiBhbnkpID0+IHN0cmluZyB7XG5cdFx0c3dpdGNoIChrZXkpIHtcblx0XHRcdGNhc2UgJ3BsYWNlaG9sZGVyJzpcblx0XHRcdFx0cmV0dXJuICgpID0+ICdTZWxlY3QgZGF0ZSc7XG5cdFx0XHRjYXNlICdzZWxlY3REYXlzJzpcblx0XHRcdFx0cmV0dXJuICgpID0+ICdTZWxlY3QgZGF5KHMpJztcblx0XHRcdGNhc2UgJ3NlbGVjdGVkRGF0ZSc6XG5cdFx0XHRcdHJldHVybiAoZDogRGF0ZSkgPT4gZC50b0xvY2FsZURhdGVTdHJpbmcoKTtcblx0XHRcdGNhc2UgJ2RheXNTZWxlY3RlZCc6XG5cdFx0XHRcdHJldHVybiAoYW1vdW50KSA9PiBgJHthbW91bnR9IGRheXMgc2VsZWN0ZWRgO1xuXHRcdFx0Y2FzZSAnc2VsZWN0ZWRJbk1vbnRoJzpcblx0XHRcdFx0cmV0dXJuIChkOiBEYXRlKSA9PiBgIGluICR7Zm9ybWF0RGF0ZShkLCAnTU1NTScpfWA7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VHJhbnNsYXRpb24oa2V5OiBzdHJpbmcsIHBhcmFtczogYW55ID0gbnVsbCk6IHN0cmluZyB7XG5cdFx0aWYgKGtleSA9PT0gJ3BsYWNlaG9sZGVyJyAmJiB0aGlzLm11bHRpcGxlKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdGlmIChrZXkgPT09ICdwbGFjZWhvbGRlcicgJiYgc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5wbGFjZWhvbGRlcikpIHtcblx0XHRcdHJldHVybiB0aGlzLnBsYWNlaG9sZGVyO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGlvbnM/LltrZXldPy4ocGFyYW1zKSA/PyB0aGlzLmdldERlZmF1bHRUcmFuc2xhdGlvbihrZXkpKHBhcmFtcyk7XG5cdH1cblxuXHRjb3VudGVyKGk6IG51bWJlcik6IEFycmF5PG51bWJlcj4ge1xuXHRcdHJldHVybiBuZXcgQXJyYXkoaSkuZmlsbCgwKS5tYXAoKHgsIGopID0+IGopO1xuXHR9XG5cblx0c2V0SG91cihob3VyOiBudW1iZXIpOiB2b2lkIHtcblx0XHR0aGlzLmhvdXJzID0gaG91ciA+IDkgPyBTdHJpbmcoaG91cikgOiAnMCcgKyBob3VyO1xuXHRcdHRoaXMubm90aWZ5TmV3RGF0ZSgpO1xuXHR9XG5cblx0c2V0TWludXRlKG1pbnV0ZTogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy5taW51dGVzID0gbWludXRlID4gOSA/IFN0cmluZyhtaW51dGUpIDogJzAnICsgbWludXRlO1xuXHRcdHRoaXMubm90aWZ5TmV3RGF0ZSgpO1xuXHR9XG5cblx0Ymx1cnJlZEhvdXJzKCk6IHZvaWQge1xuXHRcdHRoaXMuZm9ybWF0VGltZSgpO1xuXHRcdHRoaXMudG91Y2hIb3VycygpO1xuXHR9XG5cblx0Ymx1cnJlZE1pbnV0ZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5mb3JtYXRUaW1lKCk7XG5cdFx0dGhpcy50b3VjaE1pbnV0ZXMoKTtcblx0fVxuXG5cdGlzQWN0aXZlKHRvQ2hlY2s6IG51bWJlciwgYWN0dWFsVmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGlmICghc3RyaW5nSXNTZXRBbmRGaWxsZWQoYWN0dWFsVmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBOdW1iZXIoYWN0dWFsVmFsdWUpID09PSB0b0NoZWNrO1xuXHR9XG5cblx0dGltZURyb3Bkb3duUmVuZGVyZWQgPSAoKSA9PiB7XG5cdFx0cnVuTmV4dFJlbmRlckN5Y2xlKCgpID0+IHtcblx0XHRcdHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgIHRoaXMuY2xpY2tIYW5kbGVyRm9yVGltZURyb3Bkb3duKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgYWN0aXZlSG91ciA9IHRoaXMudGltZURvdWJsZURyb3Bkb3duLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmhvdXJPZkRheSAuaXNBY3RpdmUnKTtcblx0XHRjb25zdCBhY3RpdmVNaW51dGUgPSB0aGlzLnRpbWVEb3VibGVEcm9wZG93bi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5taW51dGVPZkhvdXIgLmlzQWN0aXZlJyk7XG5cdFx0Y29uc3QgYWN0aXZlSG91clBhcmVudCA9IGFjdGl2ZUhvdXI/LnBhcmVudEVsZW1lbnQ7XG5cdFx0Y29uc3QgYWN0aXZlTWludXRlUGFyZW50ID0gYWN0aXZlTWludXRlPy5wYXJlbnRFbGVtZW50O1xuXHRcdGlmIChhY3RpdmVIb3VyUGFyZW50KSB7XG5cdFx0XHRhY3RpdmVIb3VyUGFyZW50LnNjcm9sbFRvcCA9IGFjdGl2ZUhvdXI/Lm9mZnNldFRvcCAtIDExMDtcblx0XHR9XG5cdFx0aWYgKGFjdGl2ZU1pbnV0ZVBhcmVudCkge1xuXHRcdFx0YWN0aXZlTWludXRlUGFyZW50LnNjcm9sbFRvcCA9IGFjdGl2ZU1pbnV0ZT8ub2Zmc2V0VG9wIC0gMTEwO1xuXHRcdH1cblx0fVxuXG5cdGNsaWNrSGFuZGxlckZvclRpbWVEcm9wZG93biA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuXHRcdGlmICh0aGlzLmRyb3Bkb3duVmlzaWJsZSkge1xuXHRcdFx0Y29uc3QgZHJvcGRvd24gPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnRpbWVEb3VibGVEcm9wZG93bicpO1xuXHRcdFx0aWYgKCFkcm9wZG93bi5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG5cdFx0XHRcdHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5kcm9wZG93blZpc2libGUgPSBmYWxzZTtcblx0XHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgdGhpcy5jbGlja0hhbmRsZXJGb3JUaW1lRHJvcGRvd24pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29tcG9uZW50Q29udGFpbmVyXCIgW25nQ2xhc3NdPVwie3Nob3dFcnJvcnM6IGlzSW5FcnJvclN0YXRlKCl9XCIgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBkaXNhYmxlZH1cIj5cblx0PGRpdiBjbGFzcz1cImRhdGVDb250YWluZXJcIiBbbmdDbGFzc109XCJ7bm9SaWdodEJvcmRlcjogIXNob3dUaW1lSW5wdXQgJiYgY2xlYXJhYmxlICYmICFkaXNhYmxlZCwgZGlzYWJsZWQ6IGRpc2FibGVkfVwiPlxuXHRcdDxtYXQtZm9ybS1maWVsZCBmbG9hdExhYmVsPVwibmV2ZXJcIj5cblx0XHRcdDxkaXYgKm5nSWY9XCJtdWx0aXBsZVwiIGNsYXNzPVwiZGF5c1NlbGVjdGVkQ2FwdGlvblwiIChjbGljayk9XCJwaWNrZXIub3BlbigpXCIgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBkaXNhYmxlZH1cIj5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkRGF0ZXMubGVuZ3RoID49IDJcIj5cblx0XHRcdFx0XHQ8c3Bhbj57e2dldFRyYW5zbGF0aW9uKCdkYXlzU2VsZWN0ZWQnLCBzZWxlY3RlZERhdGVzLmxlbmd0aCl9fTwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cImdldFNlbGVjdGVkTW9udGhzKCkgPT09IDFcIj57e2dldFRyYW5zbGF0aW9uKCdzZWxlY3RlZEluTW9udGgnLCBzZWxlY3RlZERhdGVzWzBdKX19PC9zcGFuPlxuXHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0PHNwYW4gKm5nSWY9XCJzZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMVwiPnt7Z2V0VHJhbnNsYXRpb24oJ3NlbGVjdGVkRGF0ZScsIHNlbGVjdGVkRGF0ZXNbMF0pfX08L3NwYW4+XG5cdFx0XHRcdDxzcGFuICpuZ0lmPVwic2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInBsYWNlaG9sZGVyRm9yTXVsdGlwbGVTZWxlY3Rpb25cIj57e2dldFRyYW5zbGF0aW9uKCdzZWxlY3REYXlzJyl9fTwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGlucHV0XG5cdFx0XHRcdCNuYXRpdmVJbnB1dFxuXHRcdFx0XHRtYXRJbnB1dFxuXHRcdFx0XHRbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIlxuXHRcdFx0XHRbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJmaWx0ZXJEYXRlc1wiXG5cdFx0XHRcdFsobmdNb2RlbCldPVwidmFsdWVGb3JNYXRlcmlhbERhdGVQaWNrZXJcIlxuXHRcdFx0XHQoZGF0ZUlucHV0KT1cImRhdGVDaGFuZ2VkKCRldmVudClcIlxuXHRcdFx0XHQoaW5wdXQpPVwibmF0aXZlVmFsdWVDaGFuZ2VkKClcIlxuXHRcdFx0XHRbbWluXT1cIm1pbkRhdGVTdGFydE9mRGF5XCJcblx0XHRcdFx0W21heF09XCJtYXhEYXRlRW5kT2ZEYXlcIlxuXHRcdFx0XHRbcGxhY2Vob2xkZXJdPVwiZ2V0VHJhbnNsYXRpb24oJ3BsYWNlaG9sZGVyJylcIlxuXHRcdFx0XHQoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiXG5cdFx0XHRcdChibHVyKT1cInRvdWNoRGF0ZSgpXCJcblx0XHRcdFx0W25nQ2xhc3NdPVwie2lucHV0Rm9yTXVsdGlwbGVEYXlzOiBtdWx0aXBsZX1cIlxuXHRcdFx0PlxuXHRcdFx0PG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cblx0XHRcdDxtYXQtZGF0ZXBpY2tlclxuXHRcdFx0XHQjcGlja2VyXG5cdFx0XHRcdFtkYXRlQ2xhc3NdPVwiaXNTZWxlY3RlZFwiXG5cdFx0XHRcdFtzdGFydEF0XT1cIm9wZW5QaWNrZXJPbkRhdGVcIlxuXHRcdFx0PjwvbWF0LWRhdGVwaWNrZXI+XG5cdFx0PC9tYXQtZm9ybS1maWVsZD5cblx0XHQ8ZGl2IGNsYXNzPVwidGFpbFwiPlxuXHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRUYWlsVHBsKClcIj48L25nLWNvbnRhaW5lcj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJ0aW1lQ29udGFpbmVyXCIgKm5nSWY9XCJzaG93VGltZUlucHV0XCIgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBkaXNhYmxlZH1cIj5cblxuXHRcdDxkaXYgY2xhc3M9XCJ0aW1lQ29udGFpbmVySW5uZXJcIj5cblx0XHRcdDxzdmcgY2xhc3M9XCJjbG9ja0ljb25cIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgKGNsaWNrKT1cImhvdXJJbnB1dC5mb2N1cygpXCI+XG5cdFx0XHRcdDxwYXRoIGQ9XCJNMTIgNlYxMkwxNiAxNE0yMiAxMkMyMiAxNy41MjI4IDE3LjUyMjggMjIgMTIgMjJDNi40NzcxNSAyMiAyIDE3LjUyMjggMiAxMkMyIDYuNDc3MTUgNi40NzcxNSAyIDEyIDJDMTcuNTIyOCAyIDIyIDYuNDc3MTUgMjIgMTJaXCIgc3Ryb2tlPVwiIzg4OGRhOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG5cdFx0XHQ8L3N2Zz5cblxuXHRcdFx0PGlucHV0ICNob3VySW5wdXQgbWF4bGVuZ3RoPVwiMlwiIHBsYWNlaG9sZGVyPVwiX19cIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbKG5nTW9kZWwpXT1cImhvdXJzXCIgKG5nTW9kZWxDaGFuZ2UpPVwibm90aWZ5TmV3RGF0ZSgpXCIgKGZvY3VzKT1cImRyb3Bkb3duVmlzaWJsZSA9IHRydWVcIiAoYmx1cik9XCJibHVycmVkSG91cnMoKTtcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+OjwvZGl2PlxuXHRcdFx0PGlucHV0IG1heGxlbmd0aD1cIjJcIiBwbGFjZWhvbGRlcj1cIl9fXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgWyhuZ01vZGVsKV09XCJtaW51dGVzXCIgKG5nTW9kZWxDaGFuZ2UpPVwibm90aWZ5TmV3RGF0ZSgpXCIgKGZvY3VzKT1cImRyb3Bkb3duVmlzaWJsZSA9IHRydWVcIiAoYmx1cik9XCJibHVycmVkTWludXRlcygpO1wiPlxuXHRcdDwvZGl2PlxuXG5cdFx0PGRpdiBjbGFzcz1cInRpbWVEb3VibGVEcm9wZG93blwiICN0aW1lRG91YmxlRHJvcGRvd24gKm5nSWY9XCJkcm9wZG93blZpc2libGVcIiBbb25SZW5kZXJGbl09XCJ0aW1lRHJvcGRvd25SZW5kZXJlZFwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImhvdXJPZkRheVwiPlxuXHRcdFx0XHRAZm9yIChob3VyIG9mIGNvdW50ZXIoMjQpOyB0cmFjayBob3VyKSB7XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImVudHJ5XCIgKG1vdXNlZG93bik9XCJzZXRIb3VyKGhvdXIpXCIgW25nQ2xhc3NdPVwie2lzQWN0aXZlOiBpc0FjdGl2ZShob3VyLCBob3Vycyl9XCI+e3tob3VyID4gOSA/IGhvdXIgOiAnMCcgKyBob3VyIH19PC9kaXY+XG5cdFx0XHRcdH1cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cIm1pbnV0ZU9mSG91clwiPlxuXHRcdFx0XHRAZm9yIChtaW51dGUgb2YgbWludXRlc09mSG91cjsgdHJhY2sgbWludXRlKSB7XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImVudHJ5XCIgKG1vdXNlZG93bik9XCJzZXRNaW51dGUobWludXRlKVwiIFtuZ0NsYXNzXT1cIntpc0FjdGl2ZTogaXNBY3RpdmUobWludXRlLCBtaW51dGVzKX1cIj57e21pbnV0ZSA+IDkgPyBtaW51dGUgOiAnMCcgKyBtaW51dGV9fTwvZGl2PlxuXHRcdFx0XHR9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -258,11 +258,11 @@ export class FormElementComponent {
|
|
|
258
258
|
}
|
|
259
259
|
}
|
|
260
260
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FormElementComponent, deps: [{ token: i1.FormComponent, optional: true }, { token: FORM_ERROR_MESSAGES, optional: true }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
261
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: FormElementComponent, selector: "klp-form-element", inputs: { caption: "caption", direction: "direction", captionSpacing: "captionSpacing", verticalAlignment: "verticalAlignment", spaceDistribution: "spaceDistribution", swapInputAndCaption: "swapInputAndCaption", errorMessageAsTooltip: "errorMessageAsTooltip", errorMessageHasMaxWidth: "errorMessageHasMaxWidth" }, queries: [{ propertyName: "fieldInput", first: true, predicate: NG_VALUE_ACCESSOR, descendants: true }], viewQueries: [{ propertyName: "internalComponentRef", first: true, predicate: ["internalComponentRef"], descendants: true }, { propertyName: "tailTpl", first: true, predicate: ["tailTpl"], descendants: true }, { propertyName: "captionDummyForSpaceCalculation", first: true, predicate: ["captionDummyForSpaceCalculation"], descendants: true }, { propertyName: "absoluteAnchor", first: true, predicate: ["absoluteAnchor"], descendants: true }, { propertyName: "fixedAnchor", first: true, predicate: ["fixedAnchor"], descendants: true }, { propertyName: "fixedWrapper", first: true, predicate: ["fixedWrapper"], descendants: true }, { propertyName: "inputContainer", first: true, predicate: ["inputContainer"], descendants: true }], ngImport: i0, template: "<div\n\tclass=\"componentContainer\"\n\t[ngClass]=\"{\n\t\thasCaption: caption || captionRef,\n\t\tvertical: direction === 'vertical',\n\t\thorizontal: direction === 'horizontal',\n\t\ttopAlignment: verticalAlignment === 'top',\n\t\treverseOrder: swapInputAndCaption,\n\t\thasErrors: getErrorToShow() && attachedControl.touched,\n\t\tpercentageSpacing: captionSpacing === 'percentages' && spaceDistribution !== 'fixedInputWidth',\n\t\t'd40-60': spaceDistribution === '40-60',\n\t\t'd30-70': spaceDistribution === '30-70',\n\t\t'd34-66': spaceDistribution === '34-66',\n\t\t'fixedInputWidth': spaceDistribution === 'fixedInputWidth'\n\t}\"\n>\n\t<div class=\"errorAboveInputContainer\" *ngIf=\"direction === 'horizontal' && !errorMessageAsTooltip\">\n\t\t<div class=\"spacer\"></div>\n\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t</div>\n\n\t<div class=\"captionInputAndError\" #internalComponentRef>\n\t\t<div class=\"captionDummyForSpaceCalculation\" #captionDummyForSpaceCalculation *ngIf=\"hasRightOfCaptionError()\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\" [ngTemplateOutletContext]=\"{forCalculation: true}\"></ng-container>\n\t\t</div>\n\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\"></ng-container>\n\t\t<ng-container *ngIf=\"direction === 'vertical' && getErrorLocation() === 'belowCaption' && !errorMessageAsTooltip\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t<div class=\"inputContainer\" #inputContainer>\n\t\t\t<ng-container *ngIf=\"errorMessageAsTooltip && shouldShowErrorMessages() && getErrorToShow()\">\n\t\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\t\t\t\t<div class=\"errorTooltip\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t</div>\n</div>\n\n<ng-template #captionTpl let-forCalculation=\"forCalculation\">\n\t<div class=\"caption\"\n\t\t*ngIf=\"caption || captionRef\"\n\t\t[ngClass]=\"{\n\t\t\twithErrorRightOfCaption: getErrorLocation() === 'rightOfCaption'\n\t\t}\"\n\t>\n\t\t<div *ngIf=\"captionRef\" class=\"captionRefContainer\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionRef\"></ng-container>\n\t\t\t<div *ngIf=\"isRequired()\"> *</div>\n\t\t</div>\n\t\t<div *ngIf=\"!captionRef\" class=\"captionText\">{{caption}}<span *ngIf=\"isRequired()\"> *</span></div>\n\t\t<div class=\"rightOfCaptionError\" *ngIf=\"hasRightOfCaptionError()\" [ngClass]=\"{errorFullyVisible: errorFullyVisible, errorMessageHasMaxWidth: errorMessageHasMaxWidth}\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\" [ngTemplateOutletContext]=\"{forCalculation: forCalculation}\"></ng-container>\n\t\t</div>\n\t</div>\n</ng-template>\n\n<ng-template #errorRef let-forCalculation=\"forCalculation\">\n\t<div *ngIf=\"shouldShowErrorMessages() && getErrorToShow()\" class=\"errorContainer\" [elementIsTruncatedCb]=\"forCalculation ? setErrorMessageIsTruncated : null\" [ngClass]=\"{horizontal: direction === 'horizontal', hasCaption: caption || captionRef, 'd30-70': spaceDistribution === '30-70', 'd34-66': spaceDistribution === '34-66'}\">\n\t\t<div *ngIf=\"showDefaultError('min')\">{{substituteParameters(getErrorMessage(\"min\"), {min: attachedControl.errors.min.min})}}</div>\n\t\t<div *ngIf=\"showDefaultError('max')\">{{substituteParameters(getErrorMessage(\"max\"), {max: attachedControl.errors.max.max})}}</div>\n\t\t<div *ngIf=\"showDefaultError('required')\">{{getErrorMessage(\"required\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('email')\">{{getErrorMessage(\"email\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('minlength')\">{{substituteParameters(getErrorMessage(\"minLength\"), {minLength: attachedControl.errors.minlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('maxlength')\">{{substituteParameters(getErrorMessage(\"maxLength\"), {maxLength: attachedControl.errors.maxlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('pattern')\">{{getErrorMessage(\"pattern\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('MatchPassword')\">{{getErrorMessage(\"matchPassword\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('date')\">{{getErrorMessage(\"date\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('message')\">{{attachedControl.errors.message.value}}</div>\n\t\t<div *ngIf=\"showDefaultError('formLevel')\">{{getErrorMessage(\"formLevel\")}}</div>\n\t\t<div [ngTemplateOutlet]=\"getCustomErrorHandler(getErrorToShow())?.templateRef\"></div>\n\t</div>\n</ng-template>\n\n<ng-template #tailTpl>\n\t<div class=\"errorTooltipContainer\" [ngClass]=\"{alwaysOpen: shouldShowErrorTooltipOpened()}\">\n\t\t<ng-container *ngIf=\"hasHoverableErrorTooltip() || shouldShowErrorTooltipOpened()\">\n\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\n\t\t\t<div class=\"absoluteAnchor\" #absoluteAnchor></div>\n\t\t\t<div class=\"fixedAnchor\" #fixedAnchor [onRenderFn]=\"setErrorTooltipOffset\"></div>\n\t\t\t<div class=\"fixedWrapper\" #fixedWrapper>\n\t\t\t\t<div class=\"errorTooltip\" [ngClass]=\"{noPointerEvents: !shouldShowErrorTooltipOpened()}\">\n\t\t\t\t\t<div class=\"errorTooltipInner\">\n\t\t\t\t\t\t<i class=\"closeBtn\" (click)=\"closePopup();\">\u00D7</i>\n\t\t\t\t\t\t<ng-container *ngIf=\"getErrorToShow()\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t\t\t<div *ngIf=\"!getErrorToShow() && shouldShowWarningPopup()\">\n\t\t\t\t\t\t\t<ng-container *ngIf=\"getWarningToShowIsTemplateRef()\" [ngTemplateOutlet]=\"getWarningToShowAsTemplateRef()\"></ng-container>\n\t\t\t\t\t\t\t<span *ngIf=\"!getWarningToShowIsTemplateRef()\">{{getWarningToShow()}}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</ng-container>\n\t\t<klp-form-warning-icon variant=\"fill\" *ngIf=\"getErrorToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t\t<klp-form-warning-icon variant=\"line\" *ngIf=\"!getErrorToShow() && getWarningToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t</div>\n</ng-template>\n", styles: [":host{display:block}.componentContainer:not(.hasCaption) .captionInputAndError{display:block}.componentContainer:not(.hasCaption) .captionInputAndError .inputContainer{margin-top:0;padding-left:0;max-width:initial}.componentContainer:not(.hasCaption) .errorContainer{padding-left:0}.componentContainer.hasCaption .errorAboveInputContainer .spacer{display:block}.componentContainer.reverseOrder .captionInputAndError{flex-direction:row-reverse;justify-content:flex-end}.componentContainer.vertical .captionInputAndError{display:block}.componentContainer.vertical .captionInputAndError .inputContainer{margin-top:.3125rem}.componentContainer.vertical .captionInputAndError .errorContainer{margin-left:0}.componentContainer.topAlignment .captionInputAndError{align-items:flex-start}.componentContainer.horizontal.hasCaption .inputContainer,.componentContainer.horizontal.hasCaption .errorAboveInputContainer .errorContainer{padding-left:1rem}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .spacer{flex:0 1 40%}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .errorContainer{flex:60 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .caption{max-width:40%;flex:40 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .inputContainer{max-width:60%;flex:60 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .spacer{flex:0 1 34%}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .errorContainer{flex:66 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .caption{max-width:34%;flex:34 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .inputContainer{max-width:66%;flex:66 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .spacer{flex:0 1 30%}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .errorContainer{flex:70 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .caption{max-width:30%;flex:30 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .inputContainer{max-width:70%;flex:70 1 0px}.componentContainer.fixedInputWidth .caption{flex:1 1 0px;overflow:hidden}.componentContainer.fixedInputWidth .inputContainer{flex:0 0 auto}.captionInputAndError{display:flex;align-items:center;min-height:42px}.errorAboveInputContainer{display:flex}.errorAboveInputContainer .spacer{display:none}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption{height:0px;overflow:hidden}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption .rightOfCaptionError{display:block}.captionRefContainer{display:flex}.caption{font-weight:700;flex:0 0 auto;color:#515365}.caption.percentageSpacing{max-width:40%;flex:40 1 0px}.caption.percentageSpacing.d30-70{max-width:30%;flex:30 1 0px}.caption.percentageSpacing.d34-66{max-width:34%;flex:34 1 0px}.caption.withErrorRightOfCaption{display:flex;justify-content:space-between;gap:1rem}.caption.withErrorRightOfCaption .captionText{flex:1 2 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.caption.withErrorRightOfCaption .rightOfCaptionError{display:none;font-weight:400;overflow:hidden;flex:1 0 auto;text-align:right}.caption.withErrorRightOfCaption .rightOfCaptionError.errorFullyVisible{display:block}.caption.withErrorRightOfCaption .rightOfCaptionError.errorMessageHasMaxWidth{max-width:40%}.caption.withErrorRightOfCaption .rightOfCaptionError ::ng-deep *{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inputContainer{position:relative;flex:1}.inputContainer .errorTooltipContainer{position:relative}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangle,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangleWhite,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltip{display:flex}.inputContainer .errorTooltipContainer.alwaysOpen .closeBtn{display:block}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipInner{padding-right:1.4rem}.inputContainer .errorTooltipContainer klp-form-warning-icon{cursor:pointer}.inputContainer .errorTooltipContainer .absoluteAnchor{position:absolute}.inputContainer .errorTooltipContainer .fixedAnchor,.inputContainer .errorTooltipContainer .fixedWrapper{position:fixed}.inputContainer .errorTooltipTriangle{display:none;z-index:1;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid rgba(0,0,0,.13)}.inputContainer .errorTooltipTriangleWhite{display:none;z-index:3;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem - 2px)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid white}.inputContainer .errorTooltip{display:none;justify-content:flex-end;position:absolute;top:-.6rem;right:-1.875rem;transform:translateY(-100%);width:20rem}.inputContainer .errorTooltip.noPointerEvents{pointer-events:none}.inputContainer .errorTooltip .closeBtn{display:none;position:absolute;top:.2rem;right:.2rem;padding:.2rem .4rem;cursor:pointer;color:#666;font-size:1rem}.inputContainer .errorTooltip .closeBtn:hover{color:#515365}.inputContainer .errorTooltipInner{background:#fff;padding:.4rem .6rem;border-radius:.4rem;border:1px solid rgba(0,0,0,.13);box-shadow:#00000021 2px 3px 10px}.inputContainer:hover .errorTooltipContainer .errorTooltip,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangle,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangleWhite{display:flex}.errorContainer{color:#ff8000}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.OnRenderDirective, selector: "[onRenderFn]", inputs: ["onRenderFn"] }, { kind: "component", type: i4.WarningIconComponent, selector: "klp-form-warning-icon", inputs: ["variant"] }, { kind: "directive", type: i5.ElementIsTruncatedCbComponent, selector: "[elementIsTruncatedCb]", inputs: ["elementIsTruncatedCb"] }] }); }
|
|
261
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: FormElementComponent, selector: "klp-form-element", inputs: { caption: "caption", direction: "direction", captionSpacing: "captionSpacing", verticalAlignment: "verticalAlignment", spaceDistribution: "spaceDistribution", swapInputAndCaption: "swapInputAndCaption", errorMessageAsTooltip: "errorMessageAsTooltip", errorMessageHasMaxWidth: "errorMessageHasMaxWidth" }, queries: [{ propertyName: "fieldInput", first: true, predicate: NG_VALUE_ACCESSOR, descendants: true }], viewQueries: [{ propertyName: "internalComponentRef", first: true, predicate: ["internalComponentRef"], descendants: true }, { propertyName: "tailTpl", first: true, predicate: ["tailTpl"], descendants: true }, { propertyName: "captionDummyForSpaceCalculation", first: true, predicate: ["captionDummyForSpaceCalculation"], descendants: true }, { propertyName: "absoluteAnchor", first: true, predicate: ["absoluteAnchor"], descendants: true }, { propertyName: "fixedAnchor", first: true, predicate: ["fixedAnchor"], descendants: true }, { propertyName: "fixedWrapper", first: true, predicate: ["fixedWrapper"], descendants: true }, { propertyName: "inputContainer", first: true, predicate: ["inputContainer"], descendants: true }], ngImport: i0, template: "<div\n\tclass=\"componentContainer\"\n\t[ngClass]=\"{\n\t\thasCaption: caption || captionRef,\n\t\tvertical: direction === 'vertical',\n\t\thorizontal: direction === 'horizontal',\n\t\ttopAlignment: verticalAlignment === 'top',\n\t\treverseOrder: swapInputAndCaption,\n\t\thasErrors: getErrorToShow() && attachedControl.touched,\n\t\tpercentageSpacing: captionSpacing === 'percentages' && spaceDistribution !== 'fixedInputWidth',\n\t\t'd40-60': spaceDistribution === '40-60',\n\t\t'd30-70': spaceDistribution === '30-70',\n\t\t'd34-66': spaceDistribution === '34-66',\n\t\t'fixedInputWidth': spaceDistribution === 'fixedInputWidth',\n\t\t'fixedCaptionWidth': spaceDistribution === 'fixedCaptionWidth'\n\t}\"\n>\n\t<div class=\"errorAboveInputContainer\" *ngIf=\"direction === 'horizontal' && !errorMessageAsTooltip\">\n\t\t<div class=\"spacer\"></div>\n\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t</div>\n\n\t<div class=\"captionInputAndError\" #internalComponentRef>\n\t\t<div class=\"captionDummyForSpaceCalculation\" #captionDummyForSpaceCalculation *ngIf=\"hasRightOfCaptionError()\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\" [ngTemplateOutletContext]=\"{forCalculation: true}\"></ng-container>\n\t\t</div>\n\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\"></ng-container>\n\t\t<ng-container *ngIf=\"direction === 'vertical' && getErrorLocation() === 'belowCaption' && !errorMessageAsTooltip\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t<div class=\"inputContainer\" #inputContainer>\n\t\t\t<ng-container *ngIf=\"errorMessageAsTooltip && shouldShowErrorMessages() && getErrorToShow()\">\n\t\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\t\t\t\t<div class=\"errorTooltip\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t</div>\n</div>\n\n<ng-template #captionTpl let-forCalculation=\"forCalculation\">\n\t<div class=\"caption\"\n\t\t*ngIf=\"caption || captionRef\"\n\t\t[ngClass]=\"{\n\t\t\twithErrorRightOfCaption: getErrorLocation() === 'rightOfCaption'\n\t\t}\"\n\t>\n\t\t<div *ngIf=\"captionRef\" class=\"captionRefContainer\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionRef\"></ng-container>\n\t\t\t<div *ngIf=\"isRequired()\"> *</div>\n\t\t</div>\n\t\t<div *ngIf=\"!captionRef\" class=\"captionText\">{{caption}}<span *ngIf=\"isRequired()\"> *</span></div>\n\t\t<div class=\"rightOfCaptionError\" *ngIf=\"hasRightOfCaptionError()\" [ngClass]=\"{errorFullyVisible: errorFullyVisible, errorMessageHasMaxWidth: errorMessageHasMaxWidth}\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\" [ngTemplateOutletContext]=\"{forCalculation: forCalculation}\"></ng-container>\n\t\t</div>\n\t</div>\n</ng-template>\n\n<ng-template #errorRef let-forCalculation=\"forCalculation\">\n\t<div *ngIf=\"shouldShowErrorMessages() && getErrorToShow()\" class=\"errorContainer\" [elementIsTruncatedCb]=\"forCalculation ? setErrorMessageIsTruncated : null\" [ngClass]=\"{horizontal: direction === 'horizontal', hasCaption: caption || captionRef, 'd30-70': spaceDistribution === '30-70', 'd34-66': spaceDistribution === '34-66'}\">\n\t\t<div *ngIf=\"showDefaultError('min')\">{{substituteParameters(getErrorMessage(\"min\"), {min: attachedControl.errors.min.min})}}</div>\n\t\t<div *ngIf=\"showDefaultError('max')\">{{substituteParameters(getErrorMessage(\"max\"), {max: attachedControl.errors.max.max})}}</div>\n\t\t<div *ngIf=\"showDefaultError('required')\">{{getErrorMessage(\"required\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('email')\">{{getErrorMessage(\"email\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('minlength')\">{{substituteParameters(getErrorMessage(\"minLength\"), {minLength: attachedControl.errors.minlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('maxlength')\">{{substituteParameters(getErrorMessage(\"maxLength\"), {maxLength: attachedControl.errors.maxlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('pattern')\">{{getErrorMessage(\"pattern\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('MatchPassword')\">{{getErrorMessage(\"matchPassword\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('date')\">{{getErrorMessage(\"date\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('message')\">{{attachedControl.errors.message.value}}</div>\n\t\t<div *ngIf=\"showDefaultError('formLevel')\">{{getErrorMessage(\"formLevel\")}}</div>\n\t\t<div [ngTemplateOutlet]=\"getCustomErrorHandler(getErrorToShow())?.templateRef\"></div>\n\t</div>\n</ng-template>\n\n<ng-template #tailTpl>\n\t<div class=\"errorTooltipContainer\" [ngClass]=\"{alwaysOpen: shouldShowErrorTooltipOpened()}\">\n\t\t<ng-container *ngIf=\"hasHoverableErrorTooltip() || shouldShowErrorTooltipOpened()\">\n\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\n\t\t\t<div class=\"absoluteAnchor\" #absoluteAnchor></div>\n\t\t\t<div class=\"fixedAnchor\" #fixedAnchor [onRenderFn]=\"setErrorTooltipOffset\"></div>\n\t\t\t<div class=\"fixedWrapper\" #fixedWrapper>\n\t\t\t\t<div class=\"errorTooltip\" [ngClass]=\"{noPointerEvents: !shouldShowErrorTooltipOpened()}\">\n\t\t\t\t\t<div class=\"errorTooltipInner\">\n\t\t\t\t\t\t<i class=\"closeBtn\" (click)=\"closePopup();\">\u00D7</i>\n\t\t\t\t\t\t<ng-container *ngIf=\"getErrorToShow()\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t\t\t<div *ngIf=\"!getErrorToShow() && shouldShowWarningPopup()\">\n\t\t\t\t\t\t\t<ng-container *ngIf=\"getWarningToShowIsTemplateRef()\" [ngTemplateOutlet]=\"getWarningToShowAsTemplateRef()\"></ng-container>\n\t\t\t\t\t\t\t<span *ngIf=\"!getWarningToShowIsTemplateRef()\">{{getWarningToShow()}}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</ng-container>\n\t\t<klp-form-warning-icon variant=\"fill\" *ngIf=\"getErrorToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t\t<klp-form-warning-icon variant=\"line\" *ngIf=\"!getErrorToShow() && getWarningToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t</div>\n</ng-template>\n", styles: [":host{display:block}.componentContainer:not(.hasCaption) .captionInputAndError{display:block}.componentContainer:not(.hasCaption) .captionInputAndError .inputContainer{margin-top:0;padding-left:0;max-width:initial}.componentContainer:not(.hasCaption) .errorContainer{padding-left:0}.componentContainer.hasCaption .errorAboveInputContainer .spacer{display:block}.componentContainer.reverseOrder .captionInputAndError{flex-direction:row-reverse;justify-content:flex-end}.componentContainer.vertical .captionInputAndError{display:block}.componentContainer.vertical .captionInputAndError .inputContainer{margin-top:.3125rem}.componentContainer.vertical .captionInputAndError .errorContainer{margin-left:0}.componentContainer.topAlignment .captionInputAndError{align-items:flex-start}.componentContainer.horizontal.hasCaption .inputContainer,.componentContainer.horizontal.hasCaption .errorAboveInputContainer .errorContainer{padding-left:1rem}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .spacer{flex:0 1 40%}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .errorContainer{flex:60 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .caption{max-width:40%;flex:40 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .inputContainer{max-width:60%;flex:60 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .spacer{flex:0 1 34%}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .errorContainer{flex:66 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .caption{max-width:34%;flex:34 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .inputContainer{max-width:66%;flex:66 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .spacer{flex:0 1 30%}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .errorContainer{flex:70 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .caption{max-width:30%;flex:30 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .inputContainer{max-width:70%;flex:70 1 0px}.componentContainer.fixedInputWidth .caption{flex:1 1 0px;overflow:hidden}.componentContainer.fixedInputWidth .inputContainer,.componentContainer.fixedCaptionWidth .caption{flex:0 0 auto}.componentContainer.fixedCaptionWidth .inputContainer{flex:1 1 0px;overflow:hidden}.captionInputAndError{display:flex;align-items:center;min-height:42px}.errorAboveInputContainer{display:flex}.errorAboveInputContainer .spacer{display:none}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption{height:0px;overflow:hidden}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption .rightOfCaptionError{display:block}.captionRefContainer{display:flex}.caption{font-weight:700;flex:0 0 auto;color:#515365}.caption.percentageSpacing{max-width:40%;flex:40 1 0px}.caption.percentageSpacing.d30-70{max-width:30%;flex:30 1 0px}.caption.percentageSpacing.d34-66{max-width:34%;flex:34 1 0px}.caption.withErrorRightOfCaption{display:flex;justify-content:space-between;gap:1rem}.caption.withErrorRightOfCaption .captionText{flex:1 2 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.caption.withErrorRightOfCaption .rightOfCaptionError{display:none;font-weight:400;overflow:hidden;flex:1 0 auto;text-align:right}.caption.withErrorRightOfCaption .rightOfCaptionError.errorFullyVisible{display:block}.caption.withErrorRightOfCaption .rightOfCaptionError.errorMessageHasMaxWidth{max-width:40%}.caption.withErrorRightOfCaption .rightOfCaptionError ::ng-deep *{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inputContainer{position:relative;flex:1}.inputContainer .errorTooltipContainer{position:relative}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangle,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangleWhite,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltip{display:flex}.inputContainer .errorTooltipContainer.alwaysOpen .closeBtn{display:block}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipInner{padding-right:1.4rem}.inputContainer .errorTooltipContainer klp-form-warning-icon{cursor:pointer}.inputContainer .errorTooltipContainer .absoluteAnchor{position:absolute}.inputContainer .errorTooltipContainer .fixedAnchor,.inputContainer .errorTooltipContainer .fixedWrapper{position:fixed}.inputContainer .errorTooltipTriangle{display:none;z-index:1;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid rgba(0,0,0,.13)}.inputContainer .errorTooltipTriangleWhite{display:none;z-index:3;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem - 2px)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid white}.inputContainer .errorTooltip{display:none;justify-content:flex-end;position:absolute;top:-.6rem;right:-1.875rem;transform:translateY(-100%);width:20rem}.inputContainer .errorTooltip.noPointerEvents{pointer-events:none}.inputContainer .errorTooltip .closeBtn{display:none;position:absolute;top:.2rem;right:.2rem;padding:.2rem .4rem;cursor:pointer;color:#666;font-size:1rem}.inputContainer .errorTooltip .closeBtn:hover{color:#515365}.inputContainer .errorTooltipInner{background:#fff;padding:.4rem .6rem;border-radius:.4rem;border:1px solid rgba(0,0,0,.13);box-shadow:#00000021 2px 3px 10px}.inputContainer:hover .errorTooltipContainer .errorTooltip,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangle,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangleWhite{display:flex}.errorContainer{color:#ff8000}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.OnRenderDirective, selector: "[onRenderFn]", inputs: ["onRenderFn"] }, { kind: "component", type: i4.WarningIconComponent, selector: "klp-form-warning-icon", inputs: ["variant"] }, { kind: "directive", type: i5.ElementIsTruncatedCbComponent, selector: "[elementIsTruncatedCb]", inputs: ["elementIsTruncatedCb"] }] }); }
|
|
262
262
|
}
|
|
263
263
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FormElementComponent, decorators: [{
|
|
264
264
|
type: Component,
|
|
265
|
-
args: [{ selector: 'klp-form-element', template: "<div\n\tclass=\"componentContainer\"\n\t[ngClass]=\"{\n\t\thasCaption: caption || captionRef,\n\t\tvertical: direction === 'vertical',\n\t\thorizontal: direction === 'horizontal',\n\t\ttopAlignment: verticalAlignment === 'top',\n\t\treverseOrder: swapInputAndCaption,\n\t\thasErrors: getErrorToShow() && attachedControl.touched,\n\t\tpercentageSpacing: captionSpacing === 'percentages' && spaceDistribution !== 'fixedInputWidth',\n\t\t'd40-60': spaceDistribution === '40-60',\n\t\t'd30-70': spaceDistribution === '30-70',\n\t\t'd34-66': spaceDistribution === '34-66',\n\t\t'fixedInputWidth': spaceDistribution === 'fixedInputWidth'\n\t}\"\n>\n\t<div class=\"errorAboveInputContainer\" *ngIf=\"direction === 'horizontal' && !errorMessageAsTooltip\">\n\t\t<div class=\"spacer\"></div>\n\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t</div>\n\n\t<div class=\"captionInputAndError\" #internalComponentRef>\n\t\t<div class=\"captionDummyForSpaceCalculation\" #captionDummyForSpaceCalculation *ngIf=\"hasRightOfCaptionError()\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\" [ngTemplateOutletContext]=\"{forCalculation: true}\"></ng-container>\n\t\t</div>\n\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\"></ng-container>\n\t\t<ng-container *ngIf=\"direction === 'vertical' && getErrorLocation() === 'belowCaption' && !errorMessageAsTooltip\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t<div class=\"inputContainer\" #inputContainer>\n\t\t\t<ng-container *ngIf=\"errorMessageAsTooltip && shouldShowErrorMessages() && getErrorToShow()\">\n\t\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\t\t\t\t<div class=\"errorTooltip\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t</div>\n</div>\n\n<ng-template #captionTpl let-forCalculation=\"forCalculation\">\n\t<div class=\"caption\"\n\t\t*ngIf=\"caption || captionRef\"\n\t\t[ngClass]=\"{\n\t\t\twithErrorRightOfCaption: getErrorLocation() === 'rightOfCaption'\n\t\t}\"\n\t>\n\t\t<div *ngIf=\"captionRef\" class=\"captionRefContainer\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionRef\"></ng-container>\n\t\t\t<div *ngIf=\"isRequired()\"> *</div>\n\t\t</div>\n\t\t<div *ngIf=\"!captionRef\" class=\"captionText\">{{caption}}<span *ngIf=\"isRequired()\"> *</span></div>\n\t\t<div class=\"rightOfCaptionError\" *ngIf=\"hasRightOfCaptionError()\" [ngClass]=\"{errorFullyVisible: errorFullyVisible, errorMessageHasMaxWidth: errorMessageHasMaxWidth}\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\" [ngTemplateOutletContext]=\"{forCalculation: forCalculation}\"></ng-container>\n\t\t</div>\n\t</div>\n</ng-template>\n\n<ng-template #errorRef let-forCalculation=\"forCalculation\">\n\t<div *ngIf=\"shouldShowErrorMessages() && getErrorToShow()\" class=\"errorContainer\" [elementIsTruncatedCb]=\"forCalculation ? setErrorMessageIsTruncated : null\" [ngClass]=\"{horizontal: direction === 'horizontal', hasCaption: caption || captionRef, 'd30-70': spaceDistribution === '30-70', 'd34-66': spaceDistribution === '34-66'}\">\n\t\t<div *ngIf=\"showDefaultError('min')\">{{substituteParameters(getErrorMessage(\"min\"), {min: attachedControl.errors.min.min})}}</div>\n\t\t<div *ngIf=\"showDefaultError('max')\">{{substituteParameters(getErrorMessage(\"max\"), {max: attachedControl.errors.max.max})}}</div>\n\t\t<div *ngIf=\"showDefaultError('required')\">{{getErrorMessage(\"required\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('email')\">{{getErrorMessage(\"email\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('minlength')\">{{substituteParameters(getErrorMessage(\"minLength\"), {minLength: attachedControl.errors.minlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('maxlength')\">{{substituteParameters(getErrorMessage(\"maxLength\"), {maxLength: attachedControl.errors.maxlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('pattern')\">{{getErrorMessage(\"pattern\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('MatchPassword')\">{{getErrorMessage(\"matchPassword\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('date')\">{{getErrorMessage(\"date\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('message')\">{{attachedControl.errors.message.value}}</div>\n\t\t<div *ngIf=\"showDefaultError('formLevel')\">{{getErrorMessage(\"formLevel\")}}</div>\n\t\t<div [ngTemplateOutlet]=\"getCustomErrorHandler(getErrorToShow())?.templateRef\"></div>\n\t</div>\n</ng-template>\n\n<ng-template #tailTpl>\n\t<div class=\"errorTooltipContainer\" [ngClass]=\"{alwaysOpen: shouldShowErrorTooltipOpened()}\">\n\t\t<ng-container *ngIf=\"hasHoverableErrorTooltip() || shouldShowErrorTooltipOpened()\">\n\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\n\t\t\t<div class=\"absoluteAnchor\" #absoluteAnchor></div>\n\t\t\t<div class=\"fixedAnchor\" #fixedAnchor [onRenderFn]=\"setErrorTooltipOffset\"></div>\n\t\t\t<div class=\"fixedWrapper\" #fixedWrapper>\n\t\t\t\t<div class=\"errorTooltip\" [ngClass]=\"{noPointerEvents: !shouldShowErrorTooltipOpened()}\">\n\t\t\t\t\t<div class=\"errorTooltipInner\">\n\t\t\t\t\t\t<i class=\"closeBtn\" (click)=\"closePopup();\">\u00D7</i>\n\t\t\t\t\t\t<ng-container *ngIf=\"getErrorToShow()\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t\t\t<div *ngIf=\"!getErrorToShow() && shouldShowWarningPopup()\">\n\t\t\t\t\t\t\t<ng-container *ngIf=\"getWarningToShowIsTemplateRef()\" [ngTemplateOutlet]=\"getWarningToShowAsTemplateRef()\"></ng-container>\n\t\t\t\t\t\t\t<span *ngIf=\"!getWarningToShowIsTemplateRef()\">{{getWarningToShow()}}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</ng-container>\n\t\t<klp-form-warning-icon variant=\"fill\" *ngIf=\"getErrorToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t\t<klp-form-warning-icon variant=\"line\" *ngIf=\"!getErrorToShow() && getWarningToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t</div>\n</ng-template>\n", styles: [":host{display:block}.componentContainer:not(.hasCaption) .captionInputAndError{display:block}.componentContainer:not(.hasCaption) .captionInputAndError .inputContainer{margin-top:0;padding-left:0;max-width:initial}.componentContainer:not(.hasCaption) .errorContainer{padding-left:0}.componentContainer.hasCaption .errorAboveInputContainer .spacer{display:block}.componentContainer.reverseOrder .captionInputAndError{flex-direction:row-reverse;justify-content:flex-end}.componentContainer.vertical .captionInputAndError{display:block}.componentContainer.vertical .captionInputAndError .inputContainer{margin-top:.3125rem}.componentContainer.vertical .captionInputAndError .errorContainer{margin-left:0}.componentContainer.topAlignment .captionInputAndError{align-items:flex-start}.componentContainer.horizontal.hasCaption .inputContainer,.componentContainer.horizontal.hasCaption .errorAboveInputContainer .errorContainer{padding-left:1rem}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .spacer{flex:0 1 40%}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .errorContainer{flex:60 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .caption{max-width:40%;flex:40 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .inputContainer{max-width:60%;flex:60 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .spacer{flex:0 1 34%}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .errorContainer{flex:66 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .caption{max-width:34%;flex:34 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .inputContainer{max-width:66%;flex:66 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .spacer{flex:0 1 30%}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .errorContainer{flex:70 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .caption{max-width:30%;flex:30 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .inputContainer{max-width:70%;flex:70 1 0px}.componentContainer.fixedInputWidth .caption{flex:1 1 0px;overflow:hidden}.componentContainer.fixedInputWidth .inputContainer{flex:0 0 auto}.captionInputAndError{display:flex;align-items:center;min-height:42px}.errorAboveInputContainer{display:flex}.errorAboveInputContainer .spacer{display:none}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption{height:0px;overflow:hidden}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption .rightOfCaptionError{display:block}.captionRefContainer{display:flex}.caption{font-weight:700;flex:0 0 auto;color:#515365}.caption.percentageSpacing{max-width:40%;flex:40 1 0px}.caption.percentageSpacing.d30-70{max-width:30%;flex:30 1 0px}.caption.percentageSpacing.d34-66{max-width:34%;flex:34 1 0px}.caption.withErrorRightOfCaption{display:flex;justify-content:space-between;gap:1rem}.caption.withErrorRightOfCaption .captionText{flex:1 2 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.caption.withErrorRightOfCaption .rightOfCaptionError{display:none;font-weight:400;overflow:hidden;flex:1 0 auto;text-align:right}.caption.withErrorRightOfCaption .rightOfCaptionError.errorFullyVisible{display:block}.caption.withErrorRightOfCaption .rightOfCaptionError.errorMessageHasMaxWidth{max-width:40%}.caption.withErrorRightOfCaption .rightOfCaptionError ::ng-deep *{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inputContainer{position:relative;flex:1}.inputContainer .errorTooltipContainer{position:relative}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangle,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangleWhite,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltip{display:flex}.inputContainer .errorTooltipContainer.alwaysOpen .closeBtn{display:block}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipInner{padding-right:1.4rem}.inputContainer .errorTooltipContainer klp-form-warning-icon{cursor:pointer}.inputContainer .errorTooltipContainer .absoluteAnchor{position:absolute}.inputContainer .errorTooltipContainer .fixedAnchor,.inputContainer .errorTooltipContainer .fixedWrapper{position:fixed}.inputContainer .errorTooltipTriangle{display:none;z-index:1;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid rgba(0,0,0,.13)}.inputContainer .errorTooltipTriangleWhite{display:none;z-index:3;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem - 2px)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid white}.inputContainer .errorTooltip{display:none;justify-content:flex-end;position:absolute;top:-.6rem;right:-1.875rem;transform:translateY(-100%);width:20rem}.inputContainer .errorTooltip.noPointerEvents{pointer-events:none}.inputContainer .errorTooltip .closeBtn{display:none;position:absolute;top:.2rem;right:.2rem;padding:.2rem .4rem;cursor:pointer;color:#666;font-size:1rem}.inputContainer .errorTooltip .closeBtn:hover{color:#515365}.inputContainer .errorTooltipInner{background:#fff;padding:.4rem .6rem;border-radius:.4rem;border:1px solid rgba(0,0,0,.13);box-shadow:#00000021 2px 3px 10px}.inputContainer:hover .errorTooltipContainer .errorTooltip,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangle,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangleWhite{display:flex}.errorContainer{color:#ff8000}\n"] }]
|
|
265
|
+
args: [{ selector: 'klp-form-element', template: "<div\n\tclass=\"componentContainer\"\n\t[ngClass]=\"{\n\t\thasCaption: caption || captionRef,\n\t\tvertical: direction === 'vertical',\n\t\thorizontal: direction === 'horizontal',\n\t\ttopAlignment: verticalAlignment === 'top',\n\t\treverseOrder: swapInputAndCaption,\n\t\thasErrors: getErrorToShow() && attachedControl.touched,\n\t\tpercentageSpacing: captionSpacing === 'percentages' && spaceDistribution !== 'fixedInputWidth',\n\t\t'd40-60': spaceDistribution === '40-60',\n\t\t'd30-70': spaceDistribution === '30-70',\n\t\t'd34-66': spaceDistribution === '34-66',\n\t\t'fixedInputWidth': spaceDistribution === 'fixedInputWidth',\n\t\t'fixedCaptionWidth': spaceDistribution === 'fixedCaptionWidth'\n\t}\"\n>\n\t<div class=\"errorAboveInputContainer\" *ngIf=\"direction === 'horizontal' && !errorMessageAsTooltip\">\n\t\t<div class=\"spacer\"></div>\n\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t</div>\n\n\t<div class=\"captionInputAndError\" #internalComponentRef>\n\t\t<div class=\"captionDummyForSpaceCalculation\" #captionDummyForSpaceCalculation *ngIf=\"hasRightOfCaptionError()\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\" [ngTemplateOutletContext]=\"{forCalculation: true}\"></ng-container>\n\t\t</div>\n\t\t<ng-container [ngTemplateOutlet]=\"captionTpl\"></ng-container>\n\t\t<ng-container *ngIf=\"direction === 'vertical' && getErrorLocation() === 'belowCaption' && !errorMessageAsTooltip\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t<div class=\"inputContainer\" #inputContainer>\n\t\t\t<ng-container *ngIf=\"errorMessageAsTooltip && shouldShowErrorMessages() && getErrorToShow()\">\n\t\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\t\t\t\t<div class=\"errorTooltip\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t</div>\n\t\t\t</ng-container>\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t</div>\n</div>\n\n<ng-template #captionTpl let-forCalculation=\"forCalculation\">\n\t<div class=\"caption\"\n\t\t*ngIf=\"caption || captionRef\"\n\t\t[ngClass]=\"{\n\t\t\twithErrorRightOfCaption: getErrorLocation() === 'rightOfCaption'\n\t\t}\"\n\t>\n\t\t<div *ngIf=\"captionRef\" class=\"captionRefContainer\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"captionRef\"></ng-container>\n\t\t\t<div *ngIf=\"isRequired()\"> *</div>\n\t\t</div>\n\t\t<div *ngIf=\"!captionRef\" class=\"captionText\">{{caption}}<span *ngIf=\"isRequired()\"> *</span></div>\n\t\t<div class=\"rightOfCaptionError\" *ngIf=\"hasRightOfCaptionError()\" [ngClass]=\"{errorFullyVisible: errorFullyVisible, errorMessageHasMaxWidth: errorMessageHasMaxWidth}\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"errorRef\" [ngTemplateOutletContext]=\"{forCalculation: forCalculation}\"></ng-container>\n\t\t</div>\n\t</div>\n</ng-template>\n\n<ng-template #errorRef let-forCalculation=\"forCalculation\">\n\t<div *ngIf=\"shouldShowErrorMessages() && getErrorToShow()\" class=\"errorContainer\" [elementIsTruncatedCb]=\"forCalculation ? setErrorMessageIsTruncated : null\" [ngClass]=\"{horizontal: direction === 'horizontal', hasCaption: caption || captionRef, 'd30-70': spaceDistribution === '30-70', 'd34-66': spaceDistribution === '34-66'}\">\n\t\t<div *ngIf=\"showDefaultError('min')\">{{substituteParameters(getErrorMessage(\"min\"), {min: attachedControl.errors.min.min})}}</div>\n\t\t<div *ngIf=\"showDefaultError('max')\">{{substituteParameters(getErrorMessage(\"max\"), {max: attachedControl.errors.max.max})}}</div>\n\t\t<div *ngIf=\"showDefaultError('required')\">{{getErrorMessage(\"required\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('email')\">{{getErrorMessage(\"email\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('minlength')\">{{substituteParameters(getErrorMessage(\"minLength\"), {minLength: attachedControl.errors.minlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('maxlength')\">{{substituteParameters(getErrorMessage(\"maxLength\"), {maxLength: attachedControl.errors.maxlength.requiredLength})}}</div>\n\t\t<div *ngIf=\"showDefaultError('pattern')\">{{getErrorMessage(\"pattern\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('MatchPassword')\">{{getErrorMessage(\"matchPassword\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('date')\">{{getErrorMessage(\"date\")}}</div>\n\t\t<div *ngIf=\"showDefaultError('message')\">{{attachedControl.errors.message.value}}</div>\n\t\t<div *ngIf=\"showDefaultError('formLevel')\">{{getErrorMessage(\"formLevel\")}}</div>\n\t\t<div [ngTemplateOutlet]=\"getCustomErrorHandler(getErrorToShow())?.templateRef\"></div>\n\t</div>\n</ng-template>\n\n<ng-template #tailTpl>\n\t<div class=\"errorTooltipContainer\" [ngClass]=\"{alwaysOpen: shouldShowErrorTooltipOpened()}\">\n\t\t<ng-container *ngIf=\"hasHoverableErrorTooltip() || shouldShowErrorTooltipOpened()\">\n\t\t\t<div class=\"errorTooltipTriangle\"></div>\n\t\t\t<div class=\"errorTooltipTriangleWhite\"></div>\n\n\t\t\t<div class=\"absoluteAnchor\" #absoluteAnchor></div>\n\t\t\t<div class=\"fixedAnchor\" #fixedAnchor [onRenderFn]=\"setErrorTooltipOffset\"></div>\n\t\t\t<div class=\"fixedWrapper\" #fixedWrapper>\n\t\t\t\t<div class=\"errorTooltip\" [ngClass]=\"{noPointerEvents: !shouldShowErrorTooltipOpened()}\">\n\t\t\t\t\t<div class=\"errorTooltipInner\">\n\t\t\t\t\t\t<i class=\"closeBtn\" (click)=\"closePopup();\">\u00D7</i>\n\t\t\t\t\t\t<ng-container *ngIf=\"getErrorToShow()\" [ngTemplateOutlet]=\"errorRef\"></ng-container>\n\t\t\t\t\t\t<div *ngIf=\"!getErrorToShow() && shouldShowWarningPopup()\">\n\t\t\t\t\t\t\t<ng-container *ngIf=\"getWarningToShowIsTemplateRef()\" [ngTemplateOutlet]=\"getWarningToShowAsTemplateRef()\"></ng-container>\n\t\t\t\t\t\t\t<span *ngIf=\"!getWarningToShowIsTemplateRef()\">{{getWarningToShow()}}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</ng-container>\n\t\t<klp-form-warning-icon variant=\"fill\" *ngIf=\"getErrorToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t\t<klp-form-warning-icon variant=\"line\" *ngIf=\"!getErrorToShow() && getWarningToShow()\" (click)=\"togglePopup()\"></klp-form-warning-icon>\n\t</div>\n</ng-template>\n", styles: [":host{display:block}.componentContainer:not(.hasCaption) .captionInputAndError{display:block}.componentContainer:not(.hasCaption) .captionInputAndError .inputContainer{margin-top:0;padding-left:0;max-width:initial}.componentContainer:not(.hasCaption) .errorContainer{padding-left:0}.componentContainer.hasCaption .errorAboveInputContainer .spacer{display:block}.componentContainer.reverseOrder .captionInputAndError{flex-direction:row-reverse;justify-content:flex-end}.componentContainer.vertical .captionInputAndError{display:block}.componentContainer.vertical .captionInputAndError .inputContainer{margin-top:.3125rem}.componentContainer.vertical .captionInputAndError .errorContainer{margin-left:0}.componentContainer.topAlignment .captionInputAndError{align-items:flex-start}.componentContainer.horizontal.hasCaption .inputContainer,.componentContainer.horizontal.hasCaption .errorAboveInputContainer .errorContainer{padding-left:1rem}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .spacer{flex:0 1 40%}.componentContainer.horizontal.hasCaption.d40-60 .errorAboveInputContainer .errorContainer{flex:60 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .caption{max-width:40%;flex:40 1 0px}.componentContainer.horizontal.hasCaption.d40-60 .inputContainer{max-width:60%;flex:60 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .spacer{flex:0 1 34%}.componentContainer.horizontal.hasCaption.d34-66 .errorAboveInputContainer .errorContainer{flex:66 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .caption{max-width:34%;flex:34 1 0px}.componentContainer.horizontal.hasCaption.d34-66 .inputContainer{max-width:66%;flex:66 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .spacer{flex:0 1 30%}.componentContainer.horizontal.hasCaption.d30-70 .errorAboveInputContainer .errorContainer{flex:70 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .caption{max-width:30%;flex:30 1 0px}.componentContainer.horizontal.hasCaption.d30-70 .inputContainer{max-width:70%;flex:70 1 0px}.componentContainer.fixedInputWidth .caption{flex:1 1 0px;overflow:hidden}.componentContainer.fixedInputWidth .inputContainer,.componentContainer.fixedCaptionWidth .caption{flex:0 0 auto}.componentContainer.fixedCaptionWidth .inputContainer{flex:1 1 0px;overflow:hidden}.captionInputAndError{display:flex;align-items:center;min-height:42px}.errorAboveInputContainer{display:flex}.errorAboveInputContainer .spacer{display:none}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption{height:0px;overflow:hidden}.captionDummyForSpaceCalculation .caption.withErrorRightOfCaption .rightOfCaptionError{display:block}.captionRefContainer{display:flex}.caption{font-weight:700;flex:0 0 auto;color:#515365}.caption.percentageSpacing{max-width:40%;flex:40 1 0px}.caption.percentageSpacing.d30-70{max-width:30%;flex:30 1 0px}.caption.percentageSpacing.d34-66{max-width:34%;flex:34 1 0px}.caption.withErrorRightOfCaption{display:flex;justify-content:space-between;gap:1rem}.caption.withErrorRightOfCaption .captionText{flex:1 2 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.caption.withErrorRightOfCaption .rightOfCaptionError{display:none;font-weight:400;overflow:hidden;flex:1 0 auto;text-align:right}.caption.withErrorRightOfCaption .rightOfCaptionError.errorFullyVisible{display:block}.caption.withErrorRightOfCaption .rightOfCaptionError.errorMessageHasMaxWidth{max-width:40%}.caption.withErrorRightOfCaption .rightOfCaptionError ::ng-deep *{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inputContainer{position:relative;flex:1}.inputContainer .errorTooltipContainer{position:relative}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangle,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipTriangleWhite,.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltip{display:flex}.inputContainer .errorTooltipContainer.alwaysOpen .closeBtn{display:block}.inputContainer .errorTooltipContainer.alwaysOpen .errorTooltipInner{padding-right:1.4rem}.inputContainer .errorTooltipContainer klp-form-warning-icon{cursor:pointer}.inputContainer .errorTooltipContainer .absoluteAnchor{position:absolute}.inputContainer .errorTooltipContainer .fixedAnchor,.inputContainer .errorTooltipContainer .fixedWrapper{position:fixed}.inputContainer .errorTooltipTriangle{display:none;z-index:1;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid rgba(0,0,0,.13)}.inputContainer .errorTooltipTriangleWhite{display:none;z-index:3;position:absolute;right:0;transform:translate(-.15rem,calc(-100% - .1rem - 2px)) scaleX(.8);width:0px;height:0px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid white}.inputContainer .errorTooltip{display:none;justify-content:flex-end;position:absolute;top:-.6rem;right:-1.875rem;transform:translateY(-100%);width:20rem}.inputContainer .errorTooltip.noPointerEvents{pointer-events:none}.inputContainer .errorTooltip .closeBtn{display:none;position:absolute;top:.2rem;right:.2rem;padding:.2rem .4rem;cursor:pointer;color:#666;font-size:1rem}.inputContainer .errorTooltip .closeBtn:hover{color:#515365}.inputContainer .errorTooltipInner{background:#fff;padding:.4rem .6rem;border-radius:.4rem;border:1px solid rgba(0,0,0,.13);box-shadow:#00000021 2px 3px 10px}.inputContainer:hover .errorTooltipContainer .errorTooltip,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangle,.inputContainer:hover .errorTooltipContainer .errorTooltipTriangleWhite{display:flex}.errorContainer{color:#ff8000}\n"] }]
|
|
266
266
|
}], ctorParameters: () => [{ type: i1.FormComponent, decorators: [{
|
|
267
267
|
type: Optional
|
|
268
268
|
}] }, { type: undefined, decorators: [{
|
|
@@ -311,4 +311,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
311
311
|
type: ContentChild,
|
|
312
312
|
args: [NG_VALUE_ACCESSOR]
|
|
313
313
|
}] } });
|
|
314
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbGVtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tsaXBwYS9uZ3gtZW5oYW5jeS1mb3Jtcy9zcmMvbGliL2Zvcm0vZm9ybS1lbGVtZW50L2Zvcm0tZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9mb3JtL2Zvcm0tZWxlbWVudC9mb3JtLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLFNBQVMsRUFDVCxZQUFZLEVBRVosTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFrQixpQkFBaUIsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0RixPQUFPLEVBQUMsVUFBVSxFQUFFLG9CQUFvQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFbkUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFJeEQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQXNCLHFCQUFxQixDQUFDLENBQUM7QUFFbEcsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQXNCO0lBQ3hELEdBQUcsRUFBRSxnQ0FBZ0M7SUFDckMsR0FBRyxFQUFFLGlDQUFpQztJQUN0QyxRQUFRLEVBQUUsVUFBVTtJQUNwQixLQUFLLEVBQUUsMkJBQTJCO0lBQ2xDLFNBQVMsRUFBRSxnREFBZ0Q7SUFDM0QsU0FBUyxFQUFFLGlEQUFpRDtJQUM1RCxPQUFPLEVBQUUseUJBQXlCO0lBQ2xDLGFBQWEsRUFBRSxzQkFBc0I7SUFDckMsSUFBSSxFQUFFLG9CQUFvQjtDQUMxQixDQUFDO0FB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S0FBSztnQkFDVSx1QkFBdUI7c0JBQXRDLEtBQUs7Z0JBQ29DLG9CQUFvQjtzQkFBN0QsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBQ0osT0FBTztzQkFBbkMsU0FBUzt1QkFBQyxTQUFTO2dCQUNpQywrQkFBK0I7c0JBQW5GLFNBQVM7dUJBQUMsaUNBQWlDO2dCQUNSLGNBQWM7c0JBQWpELFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNNLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsYUFBYTtnQkFDVSxZQUFZO3NCQUE3QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ1csY0FBYztzQkFBakQsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ00sVUFBVTtzQkFBMUMsWUFBWTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBZnRlclZpZXdJbml0LFxuXHRDb21wb25lbnQsXG5cdENvbnRlbnRDaGlsZCxcblx0RWxlbWVudFJlZixcblx0SW5qZWN0LFxuXHRJbmplY3Rpb25Ub2tlbixcblx0SW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LFxuXHRPcHRpb25hbCxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiwgVW50eXBlZEZvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1ZhbHVlQWNjZXNzb3JCYXNlfSBmcm9tICcuLi8uLi9lbGVtZW50cy92YWx1ZS1hY2Nlc3Nvci1iYXNlL3ZhbHVlLWFjY2Vzc29yLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7Q3VzdG9tRXJyb3JNZXNzYWdlcywgRm9ybUVycm9yTWVzc2FnZXN9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7aXNWYWx1ZVNldCwgc3RyaW5nSXNTZXRBbmRGaWxsZWR9IGZyb20gJy4uLy4uL3V0aWwvdmFsdWVzJztcbmltcG9ydCB7Rm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtnZXRBbGxMaW1pdGluZ0NvbnRhaW5lcnN9IGZyb20gJy4uLy4uL3V0aWwvZG9tJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xuXG5cbmV4cG9ydCBjb25zdCBGT1JNX0VSUk9SX01FU1NBR0VTID0gbmV3IEluamVjdGlvblRva2VuPEN1c3RvbUVycm9yTWVzc2FnZXM+KCdmb3JtLmVycm9yLm1lc3NhZ2VzJyk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VSUk9SX01FU1NBR0VTOiBGb3JtRXJyb3JNZXNzYWdlcyA9IHtcblx0bWluOiAnVXNlIGEgbnVtYmVyIGxhcmdlciB0aGFuICVtaW4lJyxcblx0bWF4OiAnVXNlIGEgbnVtYmVyIHNtYWxsZXIgdGhhbiAlbWF4JScsXG5cdHJlcXVpcmVkOiAnUmVxdWlyZWQnLFxuXHRlbWFpbDogJ1VzZSBhIHZhbGlkIGVtYWlsIGFkZHJlc3MnLFxuXHRtaW5MZW5ndGg6ICdIYXMgdG8gYmUgbG9uZ2VyIHRoYW4gJW1pbkxlbmd0aCUgY2hhcmFjdGVyKHMpJyxcblx0bWF4TGVuZ3RoOiAnSGFzIHRvIGJlIHNob3J0ZXIgdGhhbiAlbWF4TGVuZ3RoJSBjaGFyYWN0ZXIocyknLFxuXHRwYXR0ZXJuOiAnVGhpcyBpbnB1dCBpcyBub3QgdmFsaWQnLFxuXHRtYXRjaFBhc3N3b3JkOiAnUGFzc3dvcmRzIG11c3QgbWF0Y2gnLFxuXHRkYXRlOiAnRW50ZXIgYSB2YWxpZCBkYXRlJyxcbn07XG5cbnR5cGUgUG9wdXBTdGF0ZSA9ICdvbkhvdmVyJyB8ICdsb2NrZWRPcGVuJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAna2xwLWZvcm0tZWxlbWVudCcsXG5cdHRlbXBsYXRlVXJsOiAnLi9mb3JtLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9mb3JtLWVsZW1lbnQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUVsZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXHRwdWJsaWMgYXR0YWNoZWRDb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG5cdEBJbnB1dCgpIHB1YmxpYyBjYXB0aW9uOiBzdHJpbmc7XG5cdEBJbnB1dCgpIHB1YmxpYyBkaXJlY3Rpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAnaG9yaXpvbnRhbCc7XG5cdEBJbnB1dCgpIHB1YmxpYyBjYXB0aW9uU3BhY2luZzogJ3BlcmNlbnRhZ2VzJyB8ICdub25lJyA9ICdwZXJjZW50YWdlcyc7XG5cdEBJbnB1dCgpIHB1YmxpYyB2ZXJ0aWNhbEFsaWdubWVudDogJ2NlbnRlcicgfCAndG9wJyA9ICdjZW50ZXInO1xuXHRASW5wdXQoKSBwdWJsaWMgc3BhY2VEaXN0cmlidXRpb246ICc0MC02MCcgfCAnMzQtNjYnIHwgJzMwLTcwJyB8ICdmaXhlZElucHV0V2lkdGgnID0gJzQwLTYwJztcblx0QElucHV0KCkgcHVibGljIHN3YXBJbnB1dEFuZENhcHRpb24gPSBmYWxzZTtcblx0QElucHV0KCkgcHVibGljIGVycm9yTWVzc2FnZUFzVG9vbHRpcCA9IGZhbHNlO1xuXHRASW5wdXQoKSBwdWJsaWMgZXJyb3JNZXNzYWdlSGFzTWF4V2lkdGggPSB0cnVlO1xuXHRAVmlld0NoaWxkKCdpbnRlcm5hbENvbXBvbmVudFJlZicpIHB1YmxpYyBpbnRlcm5hbENvbXBvbmVudFJlZjogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZCgndGFpbFRwbCcpIHB1YmxpYyB0YWlsVHBsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRAVmlld0NoaWxkKCdjYXB0aW9uRHVtbXlGb3JTcGFjZUNhbGN1bGF0aW9uJykgcHVibGljIGNhcHRpb25EdW1teUZvclNwYWNlQ2FsY3VsYXRpb246IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoJ2Fic29sdXRlQW5jaG9yJykgcHVibGljIGFic29sdXRlQW5jaG9yOiBFbGVtZW50UmVmO1xuXHRAVmlld0NoaWxkKCdmaXhlZEFuY2hvcicpIHB1YmxpYyBmaXhlZEFuY2hvcjogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZCgnZml4ZWRXcmFwcGVyJykgcHVibGljIGZpeGVkV3JhcHBlcjogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZCgnaW5wdXRDb250YWluZXInKSBwdWJsaWMgaW5wdXRDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cdEBDb250ZW50Q2hpbGQoTkdfVkFMVUVfQUNDRVNTT1IpIGZpZWxkSW5wdXQ6IFZhbHVlQWNjZXNzb3JCYXNlPGFueT47XG5cblx0cHVibGljIGNhcHRpb25SZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cdHB1YmxpYyBlcnJvck1lc3NhZ2VzOiBGb3JtRXJyb3JNZXNzYWdlcyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVM7XG5cdHB1YmxpYyBjdXN0b21FcnJvckhhbmRsZXJzOiBBcnJheTx7IGVycm9yOiBzdHJpbmc7IHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+IH0+ID0gW107XG5cdHByaXZhdGUgaW5wdXQ6IFZhbHVlQWNjZXNzb3JCYXNlPGFueT47XG5cdHB1YmxpYyBlcnJvckZ1bGx5VmlzaWJsZTogYm9vbGVhbjtcblx0cHJpdmF0ZSBwb3B1cFN0YXRlOiBQb3B1cFN0YXRlID0gJ29uSG92ZXInO1xuXHRwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRAT3B0aW9uYWwoKSBwcml2YXRlIHBhcmVudDogRm9ybUNvbXBvbmVudCxcblx0XHRASW5qZWN0KEZPUk1fRVJST1JfTUVTU0FHRVMpIEBPcHRpb25hbCgpIHByaXZhdGUgY3VzdG9tTWVzc2FnZXM6IEN1c3RvbUVycm9yTWVzc2FnZXMsXG5cdFx0cHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcblx0XHRwcml2YXRlIG5nWm9uZTogTmdab25lLFxuXHQpIHtcblx0fVxuXG5cdGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLmZpZWxkSW5wdXQ/Lm9uVG91Y2guYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuZGV0ZXJtaW5lUG9wdXBTdGF0ZSgpO1xuXHRcdH0pO1xuXHRcdGlmIChpc1ZhbHVlU2V0KHN1YnNjcmlwdGlvbikpICB7XG5cdFx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuXHRcdH1cblx0XHR0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG5cdFx0XHR0aGlzLmlucHV0Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0RXJyb3JUb29sdGlwT2Zmc2V0KCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBzaG91bGRTaG93RXJyb3JNZXNzYWdlcygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQ/LnNob3dFcnJvck1lc3NhZ2VzICE9PSBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyBzdWJzdGl0dXRlUGFyYW1ldGVycyhtZXNzYWdlOiBzdHJpbmcsIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5yZWR1Y2UoKG1zZywga2V5KSA9PiB7XG5cdFx0XHRyZXR1cm4gbXNnLnJlcGxhY2UoYCUke2tleX0lYCwgcGFyYW1ldGVyc1trZXldKTtcblx0XHR9LCBtZXNzYWdlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCwgaW5wdXQ6IFZhbHVlQWNjZXNzb3JCYXNlPGFueT4gPSBudWxsKTogKCkgPT4gYW55IHtcblx0XHR0aGlzLmF0dGFjaGVkQ29udHJvbCA9IGZvcm1Db250cm9sO1xuXHRcdHRoaXMuaW5wdXQgPSBpbnB1dDtcblx0XHRjb25zdCBnZXRJbW11dGFibGVWYWx1ZUZuID0gdGhpcy5wYXJlbnQucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sLCB0aGlzKTtcblxuXG5cdFx0Y29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5hdHRhY2hlZENvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5kZXRlcm1pbmVQb3B1cFN0YXRlKCk7XG5cdFx0fSk7XG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcblx0XHR0aGlzLmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHRyZXR1cm4gZ2V0SW1tdXRhYmxlVmFsdWVGbjtcblx0fVxuXG5cdHB1YmxpYyBkZXRlcm1pbmVQb3B1cFN0YXRlKCk6IHZvaWQge1xuXHRcdGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMucG9wdXBTdGF0ZTtcblx0XHR0aGlzLmluaXRpYWxpemVUYWlsVHBsKCk7XG5cdFx0aWYgKHN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMuZ2V0RXJyb3JUb1Nob3coKSkpIHtcblx0XHRcdHRoaXMucG9wdXBTdGF0ZSA9ICdvbkhvdmVyJztcblx0XHR9IGVsc2UgaWYgKGlzVmFsdWVTZXQodGhpcy5nZXRXYXJuaW5nVG9TaG93KCkpKSB7XG5cdFx0XHR0aGlzLnBvcHVwU3RhdGUgPSAnbG9ja2VkT3Blbic7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9wdXBTdGF0ZSA9ICdvbkhvdmVyJztcblx0XHR9XG5cblx0XHR0aGlzLnNldFVwRXJyb3JUb29sdGlwTGlzdGVuZXJzKHByZXZTdGF0ZSwgdGhpcy5wb3B1cFN0YXRlKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0VXBFcnJvclRvb2x0aXBMaXN0ZW5lcnMocHJldjogUG9wdXBTdGF0ZSwgY3VycmVudDogUG9wdXBTdGF0ZSk6IHZvaWQge1xuXHRcdGlmIChwcmV2ID09PSBjdXJyZW50KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGNvbnRhaW5lcnMgPSBbLi4uZ2V0QWxsTGltaXRpbmdDb250YWluZXJzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCksIHdpbmRvd107XG5cdFx0dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0aWYgKGN1cnJlbnQgPT09ICdsb2NrZWRPcGVuJykge1xuXHRcdFx0XHRjb250YWluZXJzLmZvckVhY2goZSA9PiB7XG5cdFx0XHRcdFx0ZS5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNldEVycm9yVG9vbHRpcE9mZnNldCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udGFpbmVycy5mb3JFYWNoKGUgPT4ge1xuXHRcdFx0XHRcdGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zZXRFcnJvclRvb2x0aXBPZmZzZXQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyB1bnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogdm9pZCB7XG5cdFx0dGhpcy5hdHRhY2hlZENvbnRyb2wgPSBudWxsO1xuXHRcdHRoaXMucGFyZW50LnVucmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRBdHRhY2hlZENvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcblx0XHRyZXR1cm4gdGhpcy5hdHRhY2hlZENvbnRyb2w7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QXR0YWNoZWRJbnB1dCgpOiBWYWx1ZUFjY2Vzc29yQmFzZTxhbnk+IHtcblx0XHRyZXR1cm4gdGhpcy5pbnB1dDtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlckVycm9ySGFuZGxlcihlcnJvcjogc3RyaW5nLCB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pik6IHZvaWQge1xuXHRcdHRoaXMuY3VzdG9tRXJyb3JIYW5kbGVycy5wdXNoKHtlcnJvciwgdGVtcGxhdGVSZWZ9KTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlckNhcHRpb24odGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pOiB2b2lkIHtcblx0XHR0aGlzLmNhcHRpb25SZWYgPSB0ZW1wbGF0ZVJlZjtcblx0fVxuXG5cdHB1YmxpYyBnZXRXYXJuaW5nVG9TaG93KCk6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4ge1xuXHRcdHJldHVybiB0aGlzLnBhcmVudD8uZ2V0V2FybmluZ1RvU2hvdyh0aGlzLmF0dGFjaGVkQ29udHJvbCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0V2FybmluZ1RvU2hvd0FzVGVtcGxhdGVSZWYoKTogVGVtcGxhdGVSZWY8YW55PiB7XG5cdFx0aWYgKHRoaXMucGFyZW50Py5nZXRXYXJuaW5nVG9TaG93KHRoaXMuYXR0YWNoZWRDb250cm9sKSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJlbnQ/LmdldFdhcm5pbmdUb1Nob3codGhpcy5hdHRhY2hlZENvbnRyb2wpIGFzIFRlbXBsYXRlUmVmPGFueT47XG5cdFx0fVxuXHRcdHRocm93IG5ldyBFcnJvcignV2FybmluZyBpcyBub3QgYSBUZW1wbGF0ZVJlZicpO1xuXHR9XG5cblx0cHVibGljIGdldFdhcm5pbmdUb1Nob3dJc1RlbXBsYXRlUmVmKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFdhcm5pbmdUb1Nob3coKSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuXHR9XG5cblx0Z2V0RXJyb3JUb1Nob3coKTogc3RyaW5nIHtcblx0XHRjb25zdCBmaXJzdEVycm9yID0gT2JqZWN0LmtleXModGhpcy5hdHRhY2hlZENvbnRyb2w/LmVycm9ycyA/PyB7fSlbMF07XG5cdFx0aWYgKHRoaXMuYXR0YWNoZWRDb250cm9sPy50b3VjaGVkICE9PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLmF0dGFjaGVkQ29udHJvbD8uZXJyb3JzKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIGZpcnN0RXJyb3I7XG5cdH1cblxuXHRnZXRDdXN0b21FcnJvckhhbmRsZXIoZXJyb3I6IHN0cmluZyk6IHsgZXJyb3I6IHN0cmluZzsgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4gfSB7XG5cdFx0cmV0dXJuIHRoaXMuY3VzdG9tRXJyb3JIYW5kbGVycy5maW5kKChlKSA9PiBlLmVycm9yID09PSBlcnJvcik7XG5cdH1cblxuXHRzaG93RGVmYXVsdEVycm9yKGVycm9yOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRFcnJvclRvU2hvdygpID09PSBlcnJvciAmJiAhdGhpcy5jdXN0b21FcnJvckhhbmRsZXJzLnNvbWUoKGUpID0+IGUuZXJyb3IgPT09IGVycm9yKTtcblx0fVxuXG5cdGdldFNjcm9sbGFibGVQYXJlbnQobm9kZSk6IGFueSB7XG5cdFx0aWYgKG5vZGUgPT09IHdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcblx0XHRcdHJldHVybiB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRcdH1cblx0XHRjb25zdCBvdmVyZmxvd1kgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpLm92ZXJmbG93WTtcblx0XHRpZiAobm9kZS5jbGllbnRIZWlnaHQgPCBub2RlLnNjcm9sbEhlaWdodCAmJiAob3ZlcmZsb3dZID09PSAnYXV0bycgfHwgb3ZlcmZsb3dZID09PSAnc2Nyb2xsJykpIHtcblx0XHRcdHJldHVybiBub2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRTY3JvbGxhYmxlUGFyZW50KG5vZGUucGFyZW50Tm9kZSk7XG5cdFx0fVxuXHR9XG5cblx0c2Nyb2xsVG8oKTogdm9pZCB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5nZXRTY3JvbGxhYmxlUGFyZW50KHRoaXMuaW50ZXJuYWxDb21wb25lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cdFx0Y29uc3QgcGFyZW50VG9wID0gcGFyZW50ID09PSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ID8gMCA6IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG5cdFx0Y29uc3QgZWxlbWVudFRvcCA9IHRoaXMuaW50ZXJuYWxDb21wb25lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG5cdFx0Y29uc3QgcGFyZW50U2Nyb2xsVG9wID0gcGFyZW50LnNjcm9sbFRvcDtcblx0XHRjb25zdCBhbnN3ZXIgPSBlbGVtZW50VG9wIC0gcGFyZW50VG9wICsgcGFyZW50U2Nyb2xsVG9wO1xuXG5cdFx0cGFyZW50LnNjcm9sbFRvKHtcblx0XHRcdHRvcDogYW5zd2VyIC0gMzAsXG5cdFx0XHRiZWhhdmlvcjogJ3Ntb290aCdcblx0XHR9KTtcblx0fVxuXG5cdGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5pbnB1dCkpIHtcblx0XHRcdHJldHVybiB0aGlzLmlucHV0Lmhhc1ZhbGlkYXRvcigncmVxdWlyZWQnKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0RXJyb3JNZXNzYWdlKGtleToga2V5b2YgRm9ybUVycm9yTWVzc2FnZXMpOiBzdHJpbmcge1xuXHRcdGlmIChrZXkgPT09ICdmb3JtTGV2ZWwnKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRhY2hlZENvbnRyb2wuZXJyb3JzPy5mb3JtTGV2ZWw7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmN1c3RvbU1lc3NhZ2VzPy5ba2V5XT8uKCkgPz8gdGhpcy5lcnJvck1lc3NhZ2VzW2tleV07XG5cdH1cblxuXHRwdWJsaWMgZ2V0RXJyb3JMb2NhdGlvbigpOiAnYmVsb3dDYXB0aW9uJyB8ICdyaWdodE9mQ2FwdGlvbicge1xuXHRcdHJldHVybiB0aGlzLnBhcmVudD8uZXJyb3JNZXNzYWdlTG9jYXRpb24gPz8gJ2JlbG93Q2FwdGlvbic7XG5cdH1cblxuXHRwdWJsaWMgc2hvdWxkU2hvd0Vycm9yVG9vbHRpcE9wZW5lZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5wb3B1cFN0YXRlID09PSAnbG9ja2VkT3Blbic7XG5cdH1cblxuXHRwdWJsaWMgaGFzSG92ZXJhYmxlRXJyb3JUb29sdGlwKCk6IGJvb2xlYW4ge1xuXHRcdGlmICghdGhpcy5oYXNSaWdodE9mQ2FwdGlvbkVycm9yKCkgJiYgIXRoaXMuZXJyb3JNZXNzYWdlQXNUb29sdGlwKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnBvcHVwU3RhdGUgIT09ICdvbkhvdmVyJykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5nZXRFcnJvclRvU2hvdygpKSkge1xuXHRcdFx0cmV0dXJuICF0aGlzLmVycm9yRnVsbHlWaXNpYmxlO1xuXHRcdH1cblx0XHRpZiAoaXNWYWx1ZVNldCh0aGlzLmdldFdhcm5pbmdUb1Nob3coKSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgaGFzUmlnaHRPZkNhcHRpb25FcnJvcigpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5lcnJvck1lc3NhZ2VBc1Rvb2x0aXApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuZGlyZWN0aW9uICE9PSAndmVydGljYWwnIHx8IHRoaXMuZ2V0RXJyb3JMb2NhdGlvbigpICE9PSAncmlnaHRPZkNhcHRpb24nKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cHVibGljIHNldEVycm9yTWVzc2FnZUlzVHJ1bmNhdGVkID0gKGlzVHJ1bmNhdGVkOiBib29sZWFuKSA9PiB7XG5cdFx0dGhpcy5lcnJvckZ1bGx5VmlzaWJsZSA9ICFpc1RydW5jYXRlZDtcblx0fVxuXG5cdHB1YmxpYyBzaG91bGRTaG93V2FybmluZ1BvcHVwKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBpc1ZhbHVlU2V0KHRoaXMuZ2V0V2FybmluZ1RvU2hvdygpKTtcblx0fVxuXG5cdHB1YmxpYyBjbG9zZVBvcHVwKCk6IHZvaWQge1xuXHRcdGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMucG9wdXBTdGF0ZTtcblx0XHR0aGlzLnBvcHVwU3RhdGUgPSAnb25Ib3Zlcic7XG5cdFx0dGhpcy5zZXRVcEVycm9yVG9vbHRpcExpc3RlbmVycyhwcmV2U3RhdGUsIHRoaXMucG9wdXBTdGF0ZSk7XG5cdH1cblxuXHRwdWJsaWMgdG9nZ2xlUG9wdXAoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmVycm9yTWVzc2FnZUFzVG9vbHRpcCAmJiAhdGhpcy5oYXNSaWdodE9mQ2FwdGlvbkVycm9yKCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXJyb3JGdWxseVZpc2libGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcHJldlN0YXRlID0gdGhpcy5wb3B1cFN0YXRlO1xuXHRcdGlmICh0aGlzLnBvcHVwU3RhdGUgPT09ICdsb2NrZWRPcGVuJykge1xuXHRcdFx0dGhpcy5wb3B1cFN0YXRlID0gJ29uSG92ZXInO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcHVwU3RhdGUgPSAnbG9ja2VkT3Blbic7XG5cdFx0fVxuXHRcdHRoaXMuc2V0VXBFcnJvclRvb2x0aXBMaXN0ZW5lcnMocHJldlN0YXRlLCB0aGlzLnBvcHVwU3RhdGUpO1xuXHR9XG5cblx0cHVibGljIHNldEVycm9yVG9vbHRpcE9mZnNldCA9ICgpOiB2b2lkID0+IHtcblx0XHRpZiAodGhpcy5wb3B1cFN0YXRlICE9PSAnbG9ja2VkT3BlbicgJiYgdGhpcy5wb3B1cFN0YXRlICE9PSAnb25Ib3ZlcicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcG9wdXBPZmZzZXRZID0gdGhpcy5hYnNvbHV0ZUFuY2hvcj8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmZpeGVkQW5jaG9yPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcblx0XHRpZiAodGhpcy5maXhlZFdyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcblx0XHRcdHRoaXMuZml4ZWRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtwb3B1cE9mZnNldFl9cHgpYDtcblx0XHR9XG5cdH07XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goZSA9PiBlLnVuc3Vic2NyaWJlKCkpO1xuXHR9XG5cblx0cHJpdmF0ZSBpbml0aWFsaXplVGFpbFRwbCgpOiB2b2lkIHtcblx0XHRpZiAoc3RyaW5nSXNTZXRBbmRGaWxsZWQodGhpcy5nZXRFcnJvclRvU2hvdygpKSB8fCBpc1ZhbHVlU2V0KHRoaXMuZ2V0V2FybmluZ1RvU2hvdygpKSkge1xuXHRcdFx0aWYgKCFpc1ZhbHVlU2V0KHRoaXMuZmllbGRJbnB1dD8uZ2V0VGFpbFRwbCgpKSkge1xuXHRcdFx0XHR0aGlzLmZpZWxkSW5wdXQ/LnNldFRhaWxUcGwodGhpcy50YWlsVHBsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiIsIjxkaXZcblx0Y2xhc3M9XCJjb21wb25lbnRDb250YWluZXJcIlxuXHRbbmdDbGFzc109XCJ7XG5cdFx0aGFzQ2FwdGlvbjogY2FwdGlvbiB8fCBjYXB0aW9uUmVmLFxuXHRcdHZlcnRpY2FsOiBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcsXG5cdFx0aG9yaXpvbnRhbDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcsXG5cdFx0dG9wQWxpZ25tZW50OiB2ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3RvcCcsXG5cdFx0cmV2ZXJzZU9yZGVyOiBzd2FwSW5wdXRBbmRDYXB0aW9uLFxuXHRcdGhhc0Vycm9yczogZ2V0RXJyb3JUb1Nob3coKSAmJiBhdHRhY2hlZENvbnRyb2wudG91Y2hlZCxcblx0XHRwZXJjZW50YWdlU3BhY2luZzogY2FwdGlvblNwYWNpbmcgPT09ICdwZXJjZW50YWdlcycgJiYgc3BhY2VEaXN0cmlidXRpb24gIT09ICdmaXhlZElucHV0V2lkdGgnLFxuXHRcdCdkNDAtNjAnOiBzcGFjZURpc3RyaWJ1dGlvbiA9PT0gJzQwLTYwJyxcblx0XHQnZDMwLTcwJzogc3BhY2VEaXN0cmlidXRpb24gPT09ICczMC03MCcsXG5cdFx0J2QzNC02Nic6IHNwYWNlRGlzdHJpYnV0aW9uID09PSAnMzQtNjYnLFxuXHRcdCdmaXhlZElucHV0V2lkdGgnOiBzcGFjZURpc3RyaWJ1dGlvbiA9PT0gJ2ZpeGVkSW5wdXRXaWR0aCdcblx0fVwiXG4+XG5cdDxkaXYgY2xhc3M9XCJlcnJvckFib3ZlSW5wdXRDb250YWluZXJcIiAqbmdJZj1cImRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnICYmICFlcnJvck1lc3NhZ2VBc1Rvb2x0aXBcIj5cblx0XHQ8ZGl2IGNsYXNzPVwic3BhY2VyXCI+PC9kaXY+XG5cdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvclJlZlwiPjwvbmctY29udGFpbmVyPlxuXHQ8L2Rpdj5cblxuXHQ8ZGl2IGNsYXNzPVwiY2FwdGlvbklucHV0QW5kRXJyb3JcIiAjaW50ZXJuYWxDb21wb25lbnRSZWY+XG5cdFx0PGRpdiBjbGFzcz1cImNhcHRpb25EdW1teUZvclNwYWNlQ2FsY3VsYXRpb25cIiAjY2FwdGlvbkR1bW15Rm9yU3BhY2VDYWxjdWxhdGlvbiAqbmdJZj1cImhhc1JpZ2h0T2ZDYXB0aW9uRXJyb3IoKVwiPlxuXHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXB0aW9uVHBsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntmb3JDYWxjdWxhdGlvbjogdHJ1ZX1cIj48L25nLWNvbnRhaW5lcj5cblx0XHQ8L2Rpdj5cblx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNhcHRpb25UcGxcIj48L25nLWNvbnRhaW5lcj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZGlyZWN0aW9uID09PSAndmVydGljYWwnICYmIGdldEVycm9yTG9jYXRpb24oKSA9PT0gJ2JlbG93Q2FwdGlvbicgJiYgIWVycm9yTWVzc2FnZUFzVG9vbHRpcFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVycm9yUmVmXCI+PC9uZy1jb250YWluZXI+XG5cdFx0PGRpdiBjbGFzcz1cImlucHV0Q29udGFpbmVyXCIgI2lucHV0Q29udGFpbmVyPlxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImVycm9yTWVzc2FnZUFzVG9vbHRpcCAmJiBzaG91bGRTaG93RXJyb3JNZXNzYWdlcygpICYmIGdldEVycm9yVG9TaG93KClcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImVycm9yVG9vbHRpcFRyaWFuZ2xlXCI+PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJlcnJvclRvb2x0aXBUcmlhbmdsZVdoaXRlXCI+PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJlcnJvclRvb2x0aXBcIj5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVycm9yUmVmXCI+PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHQ8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY2FwdGlvblRwbCBsZXQtZm9yQ2FsY3VsYXRpb249XCJmb3JDYWxjdWxhdGlvblwiPlxuXHQ8ZGl2IGNsYXNzPVwiY2FwdGlvblwiXG5cdFx0Km5nSWY9XCJjYXB0aW9uIHx8IGNhcHRpb25SZWZcIlxuXHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdHdpdGhFcnJvclJpZ2h0T2ZDYXB0aW9uOiBnZXRFcnJvckxvY2F0aW9uKCkgPT09ICdyaWdodE9mQ2FwdGlvbidcblx0XHR9XCJcblx0PlxuXHRcdDxkaXYgKm5nSWY9XCJjYXB0aW9uUmVmXCIgY2xhc3M9XCJjYXB0aW9uUmVmQ29udGFpbmVyXCI+XG5cdFx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNhcHRpb25SZWZcIj48L25nLWNvbnRhaW5lcj5cblx0XHRcdDxkaXYgKm5nSWY9XCJpc1JlcXVpcmVkKClcIj4mbmJzcDsqPC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cIiFjYXB0aW9uUmVmXCIgY2xhc3M9XCJjYXB0aW9uVGV4dFwiPnt7Y2FwdGlvbn19PHNwYW4gKm5nSWY9XCJpc1JlcXVpcmVkKClcIj4mbmJzcDsqPC9zcGFuPjwvZGl2PlxuXHRcdDxkaXYgY2xhc3M9XCJyaWdodE9mQ2FwdGlvbkVycm9yXCIgKm5nSWY9XCJoYXNSaWdodE9mQ2FwdGlvbkVycm9yKClcIiBbbmdDbGFzc109XCJ7ZXJyb3JGdWxseVZpc2libGU6IGVycm9yRnVsbHlWaXNpYmxlLCBlcnJvck1lc3NhZ2VIYXNNYXhXaWR0aDogZXJyb3JNZXNzYWdlSGFzTWF4V2lkdGh9XCI+XG5cdFx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVycm9yUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntmb3JDYWxjdWxhdGlvbjogZm9yQ2FsY3VsYXRpb259XCI+PC9uZy1jb250YWluZXI+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlcnJvclJlZiBsZXQtZm9yQ2FsY3VsYXRpb249XCJmb3JDYWxjdWxhdGlvblwiPlxuXHQ8ZGl2ICpuZ0lmPVwic2hvdWxkU2hvd0Vycm9yTWVzc2FnZXMoKSAmJiBnZXRFcnJvclRvU2hvdygpXCIgY2xhc3M9XCJlcnJvckNvbnRhaW5lclwiIFtlbGVtZW50SXNUcnVuY2F0ZWRDYl09XCJmb3JDYWxjdWxhdGlvbiA/IHNldEVycm9yTWVzc2FnZUlzVHJ1bmNhdGVkIDogbnVsbFwiIFtuZ0NsYXNzXT1cIntob3Jpem9udGFsOiBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJywgaGFzQ2FwdGlvbjogY2FwdGlvbiB8fCBjYXB0aW9uUmVmLCAnZDMwLTcwJzogc3BhY2VEaXN0cmlidXRpb24gPT09ICczMC03MCcsICdkMzQtNjYnOiBzcGFjZURpc3RyaWJ1dGlvbiA9PT0gJzM0LTY2J31cIj5cblx0XHQ8ZGl2ICpuZ0lmPVwic2hvd0RlZmF1bHRFcnJvcignbWluJylcIj57e3N1YnN0aXR1dGVQYXJhbWV0ZXJzKGdldEVycm9yTWVzc2FnZShcIm1pblwiKSwge21pbjogYXR0YWNoZWRDb250cm9sLmVycm9ycy5taW4ubWlufSl9fTwvZGl2PlxuXHRcdDxkaXYgKm5nSWY9XCJzaG93RGVmYXVsdEVycm9yKCdtYXgnKVwiPnt7c3Vic3RpdHV0ZVBhcmFtZXRlcnMoZ2V0RXJyb3JNZXNzYWdlKFwibWF4XCIpLCB7bWF4OiBhdHRhY2hlZENvbnRyb2wuZXJyb3JzLm1heC5tYXh9KX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ3JlcXVpcmVkJylcIj57e2dldEVycm9yTWVzc2FnZShcInJlcXVpcmVkXCIpfX08L2Rpdj5cblx0XHQ8ZGl2ICpuZ0lmPVwic2hvd0RlZmF1bHRFcnJvcignZW1haWwnKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKFwiZW1haWxcIil9fTwvZGl2PlxuXHRcdDxkaXYgKm5nSWY9XCJzaG93RGVmYXVsdEVycm9yKCdtaW5sZW5ndGgnKVwiPnt7c3Vic3RpdHV0ZVBhcmFtZXRlcnMoZ2V0RXJyb3JNZXNzYWdlKFwibWluTGVuZ3RoXCIpLCB7bWluTGVuZ3RoOiBhdHRhY2hlZENvbnRyb2wuZXJyb3JzLm1pbmxlbmd0aC5yZXF1aXJlZExlbmd0aH0pfX08L2Rpdj5cblx0XHQ8ZGl2ICpuZ0lmPVwic2hvd0RlZmF1bHRFcnJvcignbWF4bGVuZ3RoJylcIj57e3N1YnN0aXR1dGVQYXJhbWV0ZXJzKGdldEVycm9yTWVzc2FnZShcIm1heExlbmd0aFwiKSwge21heExlbmd0aDogYXR0YWNoZWRDb250cm9sLmVycm9ycy5tYXhsZW5ndGgucmVxdWlyZWRMZW5ndGh9KX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ3BhdHRlcm4nKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKFwicGF0dGVyblwiKX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ01hdGNoUGFzc3dvcmQnKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKFwibWF0Y2hQYXNzd29yZFwiKX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ2RhdGUnKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKFwiZGF0ZVwiKX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ21lc3NhZ2UnKVwiPnt7YXR0YWNoZWRDb250cm9sLmVycm9ycy5tZXNzYWdlLnZhbHVlfX08L2Rpdj5cblx0XHQ8ZGl2ICpuZ0lmPVwic2hvd0RlZmF1bHRFcnJvcignZm9ybUxldmVsJylcIj57e2dldEVycm9yTWVzc2FnZShcImZvcm1MZXZlbFwiKX19PC9kaXY+XG5cdFx0PGRpdiBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRDdXN0b21FcnJvckhhbmRsZXIoZ2V0RXJyb3JUb1Nob3coKSk/LnRlbXBsYXRlUmVmXCI+PC9kaXY+XG5cdDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0YWlsVHBsPlxuXHQ8ZGl2IGNsYXNzPVwiZXJyb3JUb29sdGlwQ29udGFpbmVyXCIgW25nQ2xhc3NdPVwie2Fsd2F5c09wZW46IHNob3VsZFNob3dFcnJvclRvb2x0aXBPcGVuZWQoKX1cIj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzSG92ZXJhYmxlRXJyb3JUb29sdGlwKCkgfHwgc2hvdWxkU2hvd0Vycm9yVG9vbHRpcE9wZW5lZCgpXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZXJyb3JUb29sdGlwVHJpYW5nbGVcIj48L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJlcnJvclRvb2x0aXBUcmlhbmdsZVdoaXRlXCI+PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3M9XCJhYnNvbHV0ZUFuY2hvclwiICNhYnNvbHV0ZUFuY2hvcj48L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJmaXhlZEFuY2hvclwiICNmaXhlZEFuY2hvciBbb25SZW5kZXJGbl09XCJzZXRFcnJvclRvb2x0aXBPZmZzZXRcIj48L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJmaXhlZFdyYXBwZXJcIiAjZml4ZWRXcmFwcGVyPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZXJyb3JUb29sdGlwXCIgW25nQ2xhc3NdPVwie25vUG9pbnRlckV2ZW50czogIXNob3VsZFNob3dFcnJvclRvb2x0aXBPcGVuZWQoKX1cIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZXJyb3JUb29sdGlwSW5uZXJcIj5cblx0XHRcdFx0XHRcdDxpIGNsYXNzPVwiY2xvc2VCdG5cIiAoY2xpY2spPVwiY2xvc2VQb3B1cCgpO1wiPsOXPC9pPlxuXHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEVycm9yVG9TaG93KClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvclJlZlwiPjwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdFx0PGRpdiAqbmdJZj1cIiFnZXRFcnJvclRvU2hvdygpICYmIHNob3VsZFNob3dXYXJuaW5nUG9wdXAoKVwiPlxuXHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0V2FybmluZ1RvU2hvd0lzVGVtcGxhdGVSZWYoKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldFdhcm5pbmdUb1Nob3dBc1RlbXBsYXRlUmVmKClcIj48L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCIhZ2V0V2FybmluZ1RvU2hvd0lzVGVtcGxhdGVSZWYoKVwiPnt7Z2V0V2FybmluZ1RvU2hvdygpfX08L3NwYW4+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdDwvbmctY29udGFpbmVyPlxuXHRcdDxrbHAtZm9ybS13YXJuaW5nLWljb24gdmFyaWFudD1cImZpbGxcIiAqbmdJZj1cImdldEVycm9yVG9TaG93KClcIiAoY2xpY2spPVwidG9nZ2xlUG9wdXAoKVwiPjwva2xwLWZvcm0td2FybmluZy1pY29uPlxuXHRcdDxrbHAtZm9ybS13YXJuaW5nLWljb24gdmFyaWFudD1cImxpbmVcIiAqbmdJZj1cIiFnZXRFcnJvclRvU2hvdygpICYmIGdldFdhcm5pbmdUb1Nob3coKVwiIChjbGljayk9XCJ0b2dnbGVQb3B1cCgpXCI+PC9rbHAtZm9ybS13YXJuaW5nLWljb24+XG5cdDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbGVtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tsaXBwYS9uZ3gtZW5oYW5jeS1mb3Jtcy9zcmMvbGliL2Zvcm0vZm9ybS1lbGVtZW50L2Zvcm0tZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9mb3JtL2Zvcm0tZWxlbWVudC9mb3JtLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLFNBQVMsRUFDVCxZQUFZLEVBRVosTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFrQixpQkFBaUIsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0RixPQUFPLEVBQUMsVUFBVSxFQUFFLG9CQUFvQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFbkUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFJeEQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQXNCLHFCQUFxQixDQUFDLENBQUM7QUFFbEcsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQXNCO0lBQ3hELEdBQUcsRUFBRSxnQ0FBZ0M7SUFDckMsR0FBRyxFQUFFLGlDQUFpQztJQUN0QyxRQUFRLEVBQUUsVUFBVTtJQUNwQixLQUFLLEVBQUUsMkJBQTJCO0lBQ2xDLFNBQVMsRUFBRSxnREFBZ0Q7SUFDM0QsU0FBUyxFQUFFLGlEQUFpRDtJQUM1RCxPQUFPLEVBQUUseUJBQXlCO0lBQ2xDLGFBQWEsRUFBRSxzQkFBc0I7SUFDckMsSUFBSSxFQUFFLG9CQUFvQjtDQUMxQixDQUFDO0FB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S0FBSztnQkFDVSx1QkFBdUI7c0JBQXRDLEtBQUs7Z0JBQ29DLG9CQUFvQjtzQkFBN0QsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBQ0osT0FBTztzQkFBbkMsU0FBUzt1QkFBQyxTQUFTO2dCQUNpQywrQkFBK0I7c0JBQW5GLFNBQVM7dUJBQUMsaUNBQWlDO2dCQUNSLGNBQWM7c0JBQWpELFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNNLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsYUFBYTtnQkFDVSxZQUFZO3NCQUE3QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ1csY0FBYztzQkFBakQsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ00sVUFBVTtzQkFBMUMsWUFBWTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBZnRlclZpZXdJbml0LFxuXHRDb21wb25lbnQsXG5cdENvbnRlbnRDaGlsZCxcblx0RWxlbWVudFJlZixcblx0SW5qZWN0LFxuXHRJbmplY3Rpb25Ub2tlbixcblx0SW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LFxuXHRPcHRpb25hbCxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiwgVW50eXBlZEZvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1ZhbHVlQWNjZXNzb3JCYXNlfSBmcm9tICcuLi8uLi9lbGVtZW50cy92YWx1ZS1hY2Nlc3Nvci1iYXNlL3ZhbHVlLWFjY2Vzc29yLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7Q3VzdG9tRXJyb3JNZXNzYWdlcywgRm9ybUVycm9yTWVzc2FnZXN9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7aXNWYWx1ZVNldCwgc3RyaW5nSXNTZXRBbmRGaWxsZWR9IGZyb20gJy4uLy4uL3V0aWwvdmFsdWVzJztcbmltcG9ydCB7Rm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtnZXRBbGxMaW1pdGluZ0NvbnRhaW5lcnN9IGZyb20gJy4uLy4uL3V0aWwvZG9tJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xuXG5cbmV4cG9ydCBjb25zdCBGT1JNX0VSUk9SX01FU1NBR0VTID0gbmV3IEluamVjdGlvblRva2VuPEN1c3RvbUVycm9yTWVzc2FnZXM+KCdmb3JtLmVycm9yLm1lc3NhZ2VzJyk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VSUk9SX01FU1NBR0VTOiBGb3JtRXJyb3JNZXNzYWdlcyA9IHtcblx0bWluOiAnVXNlIGEgbnVtYmVyIGxhcmdlciB0aGFuICVtaW4lJyxcblx0bWF4OiAnVXNlIGEgbnVtYmVyIHNtYWxsZXIgdGhhbiAlbWF4JScsXG5cdHJlcXVpcmVkOiAnUmVxdWlyZWQnLFxuXHRlbWFpbDogJ1VzZSBhIHZhbGlkIGVtYWlsIGFkZHJlc3MnLFxuXHRtaW5MZW5ndGg6ICdIYXMgdG8gYmUgbG9uZ2VyIHRoYW4gJW1pbkxlbmd0aCUgY2hhcmFjdGVyKHMpJyxcblx0bWF4TGVuZ3RoOiAnSGFzIHRvIGJlIHNob3J0ZXIgdGhhbiAlbWF4TGVuZ3RoJSBjaGFyYWN0ZXIocyknLFxuXHRwYXR0ZXJuOiAnVGhpcyBpbnB1dCBpcyBub3QgdmFsaWQnLFxuXHRtYXRjaFBhc3N3b3JkOiAnUGFzc3dvcmRzIG11c3QgbWF0Y2gnLFxuXHRkYXRlOiAnRW50ZXIgYSB2YWxpZCBkYXRlJyxcbn07XG5cbnR5cGUgUG9wdXBTdGF0ZSA9ICdvbkhvdmVyJyB8ICdsb2NrZWRPcGVuJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAna2xwLWZvcm0tZWxlbWVudCcsXG5cdHRlbXBsYXRlVXJsOiAnLi9mb3JtLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9mb3JtLWVsZW1lbnQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUVsZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXHRwdWJsaWMgYXR0YWNoZWRDb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG5cdEBJbnB1dCgpIHB1YmxpYyBjYXB0aW9uOiBzdHJpbmc7XG5cdEBJbnB1dCgpIHB1YmxpYyBkaXJlY3Rpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAnaG9yaXpvbnRhbCc7XG5cdEBJbnB1dCgpIHB1YmxpYyBjYXB0aW9uU3BhY2luZzogJ3BlcmNlbnRhZ2VzJyB8ICdub25lJyA9ICdwZXJjZW50YWdlcyc7XG5cdEBJbnB1dCgpIHB1YmxpYyB2ZXJ0aWNhbEFsaWdubWVudDogJ2NlbnRlcicgfCAndG9wJyA9ICdjZW50ZXInO1xuXHRASW5wdXQoKSBwdWJsaWMgc3BhY2VEaXN0cmlidXRpb246ICc0MC02MCcgfCAnMzQtNjYnIHwgJzMwLTcwJyB8ICdmaXhlZElucHV0V2lkdGgnIHwgJ2ZpeGVkQ2FwdGlvbldpZHRoJyA9ICc0MC02MCc7XG5cdEBJbnB1dCgpIHB1YmxpYyBzd2FwSW5wdXRBbmRDYXB0aW9uID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBlcnJvck1lc3NhZ2VBc1Rvb2x0aXAgPSBmYWxzZTtcblx0QElucHV0KCkgcHVibGljIGVycm9yTWVzc2FnZUhhc01heFdpZHRoID0gdHJ1ZTtcblx0QFZpZXdDaGlsZCgnaW50ZXJuYWxDb21wb25lbnRSZWYnKSBwdWJsaWMgaW50ZXJuYWxDb21wb25lbnRSZWY6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoJ3RhaWxUcGwnKSBwdWJsaWMgdGFpbFRwbDogVGVtcGxhdGVSZWY8YW55Pjtcblx0QFZpZXdDaGlsZCgnY2FwdGlvbkR1bW15Rm9yU3BhY2VDYWxjdWxhdGlvbicpIHB1YmxpYyBjYXB0aW9uRHVtbXlGb3JTcGFjZUNhbGN1bGF0aW9uOiBFbGVtZW50UmVmO1xuXHRAVmlld0NoaWxkKCdhYnNvbHV0ZUFuY2hvcicpIHB1YmxpYyBhYnNvbHV0ZUFuY2hvcjogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZCgnZml4ZWRBbmNob3InKSBwdWJsaWMgZml4ZWRBbmNob3I6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoJ2ZpeGVkV3JhcHBlcicpIHB1YmxpYyBmaXhlZFdyYXBwZXI6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoJ2lucHV0Q29udGFpbmVyJykgcHVibGljIGlucHV0Q29udGFpbmVyOiBFbGVtZW50UmVmO1xuXHRAQ29udGVudENoaWxkKE5HX1ZBTFVFX0FDQ0VTU09SKSBmaWVsZElucHV0OiBWYWx1ZUFjY2Vzc29yQmFzZTxhbnk+O1xuXG5cdHB1YmxpYyBjYXB0aW9uUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRwdWJsaWMgZXJyb3JNZXNzYWdlczogRm9ybUVycm9yTWVzc2FnZXMgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTO1xuXHRwdWJsaWMgY3VzdG9tRXJyb3JIYW5kbGVyczogQXJyYXk8eyBlcnJvcjogc3RyaW5nOyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiB9PiA9IFtdO1xuXHRwcml2YXRlIGlucHV0OiBWYWx1ZUFjY2Vzc29yQmFzZTxhbnk+O1xuXHRwdWJsaWMgZXJyb3JGdWxseVZpc2libGU6IGJvb2xlYW47XG5cdHByaXZhdGUgcG9wdXBTdGF0ZTogUG9wdXBTdGF0ZSA9ICdvbkhvdmVyJztcblx0cHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0QE9wdGlvbmFsKCkgcHJpdmF0ZSBwYXJlbnQ6IEZvcm1Db21wb25lbnQsXG5cdFx0QEluamVjdChGT1JNX0VSUk9SX01FU1NBR0VTKSBAT3B0aW9uYWwoKSBwcml2YXRlIGN1c3RvbU1lc3NhZ2VzOiBDdXN0b21FcnJvck1lc3NhZ2VzLFxuXHRcdHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG5cdFx0cHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcblx0KSB7XG5cdH1cblxuXHRhc3luYyBuZ0FmdGVyVmlld0luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5maWVsZElucHV0Py5vblRvdWNoLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmRldGVybWluZVBvcHVwU3RhdGUoKTtcblx0XHR9KTtcblx0XHRpZiAoaXNWYWx1ZVNldChzdWJzY3JpcHRpb24pKSAge1xuXHRcdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcblx0XHR9XG5cdFx0dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0dGhpcy5pbnB1dENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnNldEVycm9yVG9vbHRpcE9mZnNldCgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgc2hvdWxkU2hvd0Vycm9yTWVzc2FnZXMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50Py5zaG93RXJyb3JNZXNzYWdlcyAhPT0gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgc3Vic3RpdHV0ZVBhcmFtZXRlcnMobWVzc2FnZTogc3RyaW5nLCBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMocGFyYW1ldGVycykucmVkdWNlKChtc2csIGtleSkgPT4ge1xuXHRcdFx0cmV0dXJuIG1zZy5yZXBsYWNlKGAlJHtrZXl9JWAsIHBhcmFtZXRlcnNba2V5XSk7XG5cdFx0fSwgbWVzc2FnZSk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJDb250cm9sKGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wsIGlucHV0OiBWYWx1ZUFjY2Vzc29yQmFzZTxhbnk+ID0gbnVsbCk6ICgpID0+IGFueSB7XG5cdFx0dGhpcy5hdHRhY2hlZENvbnRyb2wgPSBmb3JtQ29udHJvbDtcblx0XHR0aGlzLmlucHV0ID0gaW5wdXQ7XG5cdFx0Y29uc3QgZ2V0SW1tdXRhYmxlVmFsdWVGbiA9IHRoaXMucGFyZW50LnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbCwgdGhpcyk7XG5cblxuXHRcdGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuYXR0YWNoZWRDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuZGV0ZXJtaW5lUG9wdXBTdGF0ZSgpO1xuXHRcdH0pO1xuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG5cdFx0dGhpcy5kZXRlcm1pbmVQb3B1cFN0YXRlKCk7XG5cdFx0cmV0dXJuIGdldEltbXV0YWJsZVZhbHVlRm47XG5cdH1cblxuXHRwdWJsaWMgZGV0ZXJtaW5lUG9wdXBTdGF0ZSgpOiB2b2lkIHtcblx0XHRjb25zdCBwcmV2U3RhdGUgPSB0aGlzLnBvcHVwU3RhdGU7XG5cdFx0dGhpcy5pbml0aWFsaXplVGFpbFRwbCgpO1xuXHRcdGlmIChzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLmdldEVycm9yVG9TaG93KCkpKSB7XG5cdFx0XHR0aGlzLnBvcHVwU3RhdGUgPSAnb25Ib3Zlcic7XG5cdFx0fSBlbHNlIGlmIChpc1ZhbHVlU2V0KHRoaXMuZ2V0V2FybmluZ1RvU2hvdygpKSkge1xuXHRcdFx0dGhpcy5wb3B1cFN0YXRlID0gJ2xvY2tlZE9wZW4nO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcHVwU3RhdGUgPSAnb25Ib3Zlcic7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRVcEVycm9yVG9vbHRpcExpc3RlbmVycyhwcmV2U3RhdGUsIHRoaXMucG9wdXBTdGF0ZSk7XG5cdH1cblxuXHRwcml2YXRlIHNldFVwRXJyb3JUb29sdGlwTGlzdGVuZXJzKHByZXY6IFBvcHVwU3RhdGUsIGN1cnJlbnQ6IFBvcHVwU3RhdGUpOiB2b2lkIHtcblx0XHRpZiAocHJldiA9PT0gY3VycmVudCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBjb250YWluZXJzID0gWy4uLmdldEFsbExpbWl0aW5nQ29udGFpbmVycyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpLCB3aW5kb3ddO1xuXHRcdHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdGlmIChjdXJyZW50ID09PSAnbG9ja2VkT3BlbicpIHtcblx0XHRcdFx0Y29udGFpbmVycy5mb3JFYWNoKGUgPT4ge1xuXHRcdFx0XHRcdGUuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zZXRFcnJvclRvb2x0aXBPZmZzZXQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRhaW5lcnMuZm9yRWFjaChlID0+IHtcblx0XHRcdFx0XHRlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2V0RXJyb3JUb29sdGlwT2Zmc2V0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgdW5yZWdpc3RlckNvbnRyb2woZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IHZvaWQge1xuXHRcdHRoaXMuYXR0YWNoZWRDb250cm9sID0gbnVsbDtcblx0XHR0aGlzLnBhcmVudC51bnJlZ2lzdGVyQ29udHJvbChmb3JtQ29udHJvbCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QXR0YWNoZWRDb250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0YWNoZWRDb250cm9sO1xuXHR9XG5cblx0cHVibGljIGdldEF0dGFjaGVkSW5wdXQoKTogVmFsdWVBY2Nlc3NvckJhc2U8YW55PiB7XG5cdFx0cmV0dXJuIHRoaXMuaW5wdXQ7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJFcnJvckhhbmRsZXIoZXJyb3I6IHN0cmluZywgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pOiB2b2lkIHtcblx0XHR0aGlzLmN1c3RvbUVycm9ySGFuZGxlcnMucHVzaCh7ZXJyb3IsIHRlbXBsYXRlUmVmfSk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJDYXB0aW9uKHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XG5cdFx0dGhpcy5jYXB0aW9uUmVmID0gdGVtcGxhdGVSZWY7XG5cdH1cblxuXHRwdWJsaWMgZ2V0V2FybmluZ1RvU2hvdygpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQ/LmdldFdhcm5pbmdUb1Nob3codGhpcy5hdHRhY2hlZENvbnRyb2wpO1xuXHR9XG5cblx0cHVibGljIGdldFdhcm5pbmdUb1Nob3dBc1RlbXBsYXRlUmVmKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuXHRcdGlmICh0aGlzLnBhcmVudD8uZ2V0V2FybmluZ1RvU2hvdyh0aGlzLmF0dGFjaGVkQ29udHJvbCkgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuXHRcdFx0cmV0dXJuIHRoaXMucGFyZW50Py5nZXRXYXJuaW5nVG9TaG93KHRoaXMuYXR0YWNoZWRDb250cm9sKSBhcyBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1dhcm5pbmcgaXMgbm90IGEgVGVtcGxhdGVSZWYnKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRXYXJuaW5nVG9TaG93SXNUZW1wbGF0ZVJlZigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRXYXJuaW5nVG9TaG93KCkgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcblx0fVxuXG5cdGdldEVycm9yVG9TaG93KCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZmlyc3RFcnJvciA9IE9iamVjdC5rZXlzKHRoaXMuYXR0YWNoZWRDb250cm9sPy5lcnJvcnMgPz8ge30pWzBdO1xuXHRcdGlmICh0aGlzLmF0dGFjaGVkQ29udHJvbD8udG91Y2hlZCAhPT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGlmICghdGhpcy5hdHRhY2hlZENvbnRyb2w/LmVycm9ycykge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiBmaXJzdEVycm9yO1xuXHR9XG5cblx0Z2V0Q3VzdG9tRXJyb3JIYW5kbGVyKGVycm9yOiBzdHJpbmcpOiB7IGVycm9yOiBzdHJpbmc7IHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+IH0ge1xuXHRcdHJldHVybiB0aGlzLmN1c3RvbUVycm9ySGFuZGxlcnMuZmluZCgoZSkgPT4gZS5lcnJvciA9PT0gZXJyb3IpO1xuXHR9XG5cblx0c2hvd0RlZmF1bHRFcnJvcihlcnJvcjogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RXJyb3JUb1Nob3coKSA9PT0gZXJyb3IgJiYgIXRoaXMuY3VzdG9tRXJyb3JIYW5kbGVycy5zb21lKChlKSA9PiBlLmVycm9yID09PSBlcnJvcik7XG5cdH1cblxuXHRnZXRTY3JvbGxhYmxlUGFyZW50KG5vZGUpOiBhbnkge1xuXHRcdGlmIChub2RlID09PSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG5cdFx0XHRyZXR1cm4gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0XHR9XG5cdFx0Y29uc3Qgb3ZlcmZsb3dZID0gZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS5vdmVyZmxvd1k7XG5cdFx0aWYgKG5vZGUuY2xpZW50SGVpZ2h0IDwgbm9kZS5zY3JvbGxIZWlnaHQgJiYgKG92ZXJmbG93WSA9PT0gJ2F1dG8nIHx8IG92ZXJmbG93WSA9PT0gJ3Njcm9sbCcpKSB7XG5cdFx0XHRyZXR1cm4gbm9kZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsYWJsZVBhcmVudChub2RlLnBhcmVudE5vZGUpO1xuXHRcdH1cblx0fVxuXG5cdHNjcm9sbFRvKCk6IHZvaWQge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuZ2V0U2Nyb2xsYWJsZVBhcmVudCh0aGlzLmludGVybmFsQ29tcG9uZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdGNvbnN0IHBhcmVudFRvcCA9IHBhcmVudCA9PT0gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA/IDAgOiBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXHRcdGNvbnN0IGVsZW1lbnRUb3AgPSB0aGlzLmludGVybmFsQ29tcG9uZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXHRcdGNvbnN0IHBhcmVudFNjcm9sbFRvcCA9IHBhcmVudC5zY3JvbGxUb3A7XG5cdFx0Y29uc3QgYW5zd2VyID0gZWxlbWVudFRvcCAtIHBhcmVudFRvcCArIHBhcmVudFNjcm9sbFRvcDtcblxuXHRcdHBhcmVudC5zY3JvbGxUbyh7XG5cdFx0XHR0b3A6IGFuc3dlciAtIDMwLFxuXHRcdFx0YmVoYXZpb3I6ICdzbW9vdGgnXG5cdFx0fSk7XG5cdH1cblxuXHRpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuXHRcdGlmIChpc1ZhbHVlU2V0KHRoaXMuaW5wdXQpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnB1dC5oYXNWYWxpZGF0b3IoJ3JlcXVpcmVkJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldEVycm9yTWVzc2FnZShrZXk6IGtleW9mIEZvcm1FcnJvck1lc3NhZ2VzKTogc3RyaW5nIHtcblx0XHRpZiAoa2V5ID09PSAnZm9ybUxldmVsJykge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXR0YWNoZWRDb250cm9sLmVycm9ycz8uZm9ybUxldmVsO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5jdXN0b21NZXNzYWdlcz8uW2tleV0/LigpID8/IHRoaXMuZXJyb3JNZXNzYWdlc1trZXldO1xuXHR9XG5cblx0cHVibGljIGdldEVycm9yTG9jYXRpb24oKTogJ2JlbG93Q2FwdGlvbicgfCAncmlnaHRPZkNhcHRpb24nIHtcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQ/LmVycm9yTWVzc2FnZUxvY2F0aW9uID8/ICdiZWxvd0NhcHRpb24nO1xuXHR9XG5cblx0cHVibGljIHNob3VsZFNob3dFcnJvclRvb2x0aXBPcGVuZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucG9wdXBTdGF0ZSA9PT0gJ2xvY2tlZE9wZW4nO1xuXHR9XG5cblx0cHVibGljIGhhc0hvdmVyYWJsZUVycm9yVG9vbHRpcCgpOiBib29sZWFuIHtcblx0XHRpZiAoIXRoaXMuaGFzUmlnaHRPZkNhcHRpb25FcnJvcigpICYmICF0aGlzLmVycm9yTWVzc2FnZUFzVG9vbHRpcCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAodGhpcy5wb3B1cFN0YXRlICE9PSAnb25Ib3ZlcicpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKHN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMuZ2V0RXJyb3JUb1Nob3coKSkpIHtcblx0XHRcdHJldHVybiAhdGhpcy5lcnJvckZ1bGx5VmlzaWJsZTtcblx0XHR9XG5cdFx0aWYgKGlzVmFsdWVTZXQodGhpcy5nZXRXYXJuaW5nVG9TaG93KCkpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cHVibGljIGhhc1JpZ2h0T2ZDYXB0aW9uRXJyb3IoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuZXJyb3JNZXNzYWdlQXNUb29sdGlwKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmRpcmVjdGlvbiAhPT0gJ3ZlcnRpY2FsJyB8fCB0aGlzLmdldEVycm9yTG9jYXRpb24oKSAhPT0gJ3JpZ2h0T2ZDYXB0aW9uJykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBzZXRFcnJvck1lc3NhZ2VJc1RydW5jYXRlZCA9IChpc1RydW5jYXRlZDogYm9vbGVhbikgPT4ge1xuXHRcdHRoaXMuZXJyb3JGdWxseVZpc2libGUgPSAhaXNUcnVuY2F0ZWQ7XG5cdH1cblxuXHRwdWJsaWMgc2hvdWxkU2hvd1dhcm5pbmdQb3B1cCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gaXNWYWx1ZVNldCh0aGlzLmdldFdhcm5pbmdUb1Nob3coKSk7XG5cdH1cblxuXHRwdWJsaWMgY2xvc2VQb3B1cCgpOiB2b2lkIHtcblx0XHRjb25zdCBwcmV2U3RhdGUgPSB0aGlzLnBvcHVwU3RhdGU7XG5cdFx0dGhpcy5wb3B1cFN0YXRlID0gJ29uSG92ZXInO1xuXHRcdHRoaXMuc2V0VXBFcnJvclRvb2x0aXBMaXN0ZW5lcnMocHJldlN0YXRlLCB0aGlzLnBvcHVwU3RhdGUpO1xuXHR9XG5cblx0cHVibGljIHRvZ2dsZVBvcHVwKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5lcnJvck1lc3NhZ2VBc1Rvb2x0aXAgJiYgIXRoaXMuaGFzUmlnaHRPZkNhcHRpb25FcnJvcigpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLmVycm9yRnVsbHlWaXNpYmxlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMucG9wdXBTdGF0ZTtcblx0XHRpZiAodGhpcy5wb3B1cFN0YXRlID09PSAnbG9ja2VkT3BlbicpIHtcblx0XHRcdHRoaXMucG9wdXBTdGF0ZSA9ICdvbkhvdmVyJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wb3B1cFN0YXRlID0gJ2xvY2tlZE9wZW4nO1xuXHRcdH1cblx0XHR0aGlzLnNldFVwRXJyb3JUb29sdGlwTGlzdGVuZXJzKHByZXZTdGF0ZSwgdGhpcy5wb3B1cFN0YXRlKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRFcnJvclRvb2x0aXBPZmZzZXQgPSAoKTogdm9pZCA9PiB7XG5cdFx0aWYgKHRoaXMucG9wdXBTdGF0ZSAhPT0gJ2xvY2tlZE9wZW4nICYmIHRoaXMucG9wdXBTdGF0ZSAhPT0gJ29uSG92ZXInKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHBvcHVwT2Zmc2V0WSA9IHRoaXMuYWJzb2x1dGVBbmNob3I/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gdGhpcy5maXhlZEFuY2hvcj8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG5cdFx0aWYgKHRoaXMuZml4ZWRXcmFwcGVyPy5uYXRpdmVFbGVtZW50KSB7XG5cdFx0XHR0aGlzLmZpeGVkV3JhcHBlci5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7cG9wdXBPZmZzZXRZfXB4KWA7XG5cdFx0fVxuXHR9O1xuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGUgPT4gZS51bnN1YnNjcmliZSgpKTtcblx0fVxuXG5cdHByaXZhdGUgaW5pdGlhbGl6ZVRhaWxUcGwoKTogdm9pZCB7XG5cdFx0aWYgKHN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMuZ2V0RXJyb3JUb1Nob3coKSkgfHwgaXNWYWx1ZVNldCh0aGlzLmdldFdhcm5pbmdUb1Nob3coKSkpIHtcblx0XHRcdGlmICghaXNWYWx1ZVNldCh0aGlzLmZpZWxkSW5wdXQ/LmdldFRhaWxUcGwoKSkpIHtcblx0XHRcdFx0dGhpcy5maWVsZElucHV0Py5zZXRUYWlsVHBsKHRoaXMudGFpbFRwbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCI8ZGl2XG5cdGNsYXNzPVwiY29tcG9uZW50Q29udGFpbmVyXCJcblx0W25nQ2xhc3NdPVwie1xuXHRcdGhhc0NhcHRpb246IGNhcHRpb24gfHwgY2FwdGlvblJlZixcblx0XHR2ZXJ0aWNhbDogZGlyZWN0aW9uID09PSAndmVydGljYWwnLFxuXHRcdGhvcml6b250YWw6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnLFxuXHRcdHRvcEFsaWdubWVudDogdmVydGljYWxBbGlnbm1lbnQgPT09ICd0b3AnLFxuXHRcdHJldmVyc2VPcmRlcjogc3dhcElucHV0QW5kQ2FwdGlvbixcblx0XHRoYXNFcnJvcnM6IGdldEVycm9yVG9TaG93KCkgJiYgYXR0YWNoZWRDb250cm9sLnRvdWNoZWQsXG5cdFx0cGVyY2VudGFnZVNwYWNpbmc6IGNhcHRpb25TcGFjaW5nID09PSAncGVyY2VudGFnZXMnICYmIHNwYWNlRGlzdHJpYnV0aW9uICE9PSAnZml4ZWRJbnB1dFdpZHRoJyxcblx0XHQnZDQwLTYwJzogc3BhY2VEaXN0cmlidXRpb24gPT09ICc0MC02MCcsXG5cdFx0J2QzMC03MCc6IHNwYWNlRGlzdHJpYnV0aW9uID09PSAnMzAtNzAnLFxuXHRcdCdkMzQtNjYnOiBzcGFjZURpc3RyaWJ1dGlvbiA9PT0gJzM0LTY2Jyxcblx0XHQnZml4ZWRJbnB1dFdpZHRoJzogc3BhY2VEaXN0cmlidXRpb24gPT09ICdmaXhlZElucHV0V2lkdGgnLFxuXHRcdCdmaXhlZENhcHRpb25XaWR0aCc6IHNwYWNlRGlzdHJpYnV0aW9uID09PSAnZml4ZWRDYXB0aW9uV2lkdGgnXG5cdH1cIlxuPlxuXHQ8ZGl2IGNsYXNzPVwiZXJyb3JBYm92ZUlucHV0Q29udGFpbmVyXCIgKm5nSWY9XCJkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyAmJiAhZXJyb3JNZXNzYWdlQXNUb29sdGlwXCI+XG5cdFx0PGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxuXHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3JSZWZcIj48L25nLWNvbnRhaW5lcj5cblx0PC9kaXY+XG5cblx0PGRpdiBjbGFzcz1cImNhcHRpb25JbnB1dEFuZEVycm9yXCIgI2ludGVybmFsQ29tcG9uZW50UmVmPlxuXHRcdDxkaXYgY2xhc3M9XCJjYXB0aW9uRHVtbXlGb3JTcGFjZUNhbGN1bGF0aW9uXCIgI2NhcHRpb25EdW1teUZvclNwYWNlQ2FsY3VsYXRpb24gKm5nSWY9XCJoYXNSaWdodE9mQ2FwdGlvbkVycm9yKClcIj5cblx0XHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FwdGlvblRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Zm9yQ2FsY3VsYXRpb246IHRydWV9XCI+PC9uZy1jb250YWluZXI+XG5cdFx0PC9kaXY+XG5cdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXB0aW9uVHBsXCI+PC9uZy1jb250YWluZXI+XG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJiBnZXRFcnJvckxvY2F0aW9uKCkgPT09ICdiZWxvd0NhcHRpb24nICYmICFlcnJvck1lc3NhZ2VBc1Rvb2x0aXBcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvclJlZlwiPjwvbmctY29udGFpbmVyPlxuXHRcdDxkaXYgY2xhc3M9XCJpbnB1dENvbnRhaW5lclwiICNpbnB1dENvbnRhaW5lcj5cblx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJlcnJvck1lc3NhZ2VBc1Rvb2x0aXAgJiYgc2hvdWxkU2hvd0Vycm9yTWVzc2FnZXMoKSAmJiBnZXRFcnJvclRvU2hvdygpXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJlcnJvclRvb2x0aXBUcmlhbmdsZVwiPjwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZXJyb3JUb29sdGlwVHJpYW5nbGVXaGl0ZVwiPjwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZXJyb3JUb29sdGlwXCI+XG5cdFx0XHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvclJlZlwiPjwvbmctY29udGFpbmVyPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2NhcHRpb25UcGwgbGV0LWZvckNhbGN1bGF0aW9uPVwiZm9yQ2FsY3VsYXRpb25cIj5cblx0PGRpdiBjbGFzcz1cImNhcHRpb25cIlxuXHRcdCpuZ0lmPVwiY2FwdGlvbiB8fCBjYXB0aW9uUmVmXCJcblx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHR3aXRoRXJyb3JSaWdodE9mQ2FwdGlvbjogZ2V0RXJyb3JMb2NhdGlvbigpID09PSAncmlnaHRPZkNhcHRpb24nXG5cdFx0fVwiXG5cdD5cblx0XHQ8ZGl2ICpuZ0lmPVwiY2FwdGlvblJlZlwiIGNsYXNzPVwiY2FwdGlvblJlZkNvbnRhaW5lclwiPlxuXHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXB0aW9uUmVmXCI+PC9uZy1jb250YWluZXI+XG5cdFx0XHQ8ZGl2ICpuZ0lmPVwiaXNSZXF1aXJlZCgpXCI+Jm5ic3A7KjwvZGl2PlxuXHRcdDwvZGl2PlxuXHRcdDxkaXYgKm5nSWY9XCIhY2FwdGlvblJlZlwiIGNsYXNzPVwiY2FwdGlvblRleHRcIj57e2NhcHRpb259fTxzcGFuICpuZ0lmPVwiaXNSZXF1aXJlZCgpXCI+Jm5ic3A7Kjwvc3Bhbj48L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwicmlnaHRPZkNhcHRpb25FcnJvclwiICpuZ0lmPVwiaGFzUmlnaHRPZkNhcHRpb25FcnJvcigpXCIgW25nQ2xhc3NdPVwie2Vycm9yRnVsbHlWaXNpYmxlOiBlcnJvckZ1bGx5VmlzaWJsZSwgZXJyb3JNZXNzYWdlSGFzTWF4V2lkdGg6IGVycm9yTWVzc2FnZUhhc01heFdpZHRofVwiPlxuXHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvclJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Zm9yQ2FsY3VsYXRpb246IGZvckNhbGN1bGF0aW9ufVwiPjwvbmctY29udGFpbmVyPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZXJyb3JSZWYgbGV0LWZvckNhbGN1bGF0aW9uPVwiZm9yQ2FsY3VsYXRpb25cIj5cblx0PGRpdiAqbmdJZj1cInNob3VsZFNob3dFcnJvck1lc3NhZ2VzKCkgJiYgZ2V0RXJyb3JUb1Nob3coKVwiIGNsYXNzPVwiZXJyb3JDb250YWluZXJcIiBbZWxlbWVudElzVHJ1bmNhdGVkQ2JdPVwiZm9yQ2FsY3VsYXRpb24gPyBzZXRFcnJvck1lc3NhZ2VJc1RydW5jYXRlZCA6IG51bGxcIiBbbmdDbGFzc109XCJ7aG9yaXpvbnRhbDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcsIGhhc0NhcHRpb246IGNhcHRpb24gfHwgY2FwdGlvblJlZiwgJ2QzMC03MCc6IHNwYWNlRGlzdHJpYnV0aW9uID09PSAnMzAtNzAnLCAnZDM0LTY2Jzogc3BhY2VEaXN0cmlidXRpb24gPT09ICczNC02Nid9XCI+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ21pbicpXCI+e3tzdWJzdGl0dXRlUGFyYW1ldGVycyhnZXRFcnJvck1lc3NhZ2UoXCJtaW5cIiksIHttaW46IGF0dGFjaGVkQ29udHJvbC5lcnJvcnMubWluLm1pbn0pfX08L2Rpdj5cblx0XHQ8ZGl2ICpuZ0lmPVwic2hvd0RlZmF1bHRFcnJvcignbWF4JylcIj57e3N1YnN0aXR1dGVQYXJhbWV0ZXJzKGdldEVycm9yTWVzc2FnZShcIm1heFwiKSwge21heDogYXR0YWNoZWRDb250cm9sLmVycm9ycy5tYXgubWF4fSl9fTwvZGl2PlxuXHRcdDxkaXYgKm5nSWY9XCJzaG93RGVmYXVsdEVycm9yKCdyZXF1aXJlZCcpXCI+e3tnZXRFcnJvck1lc3NhZ2UoXCJyZXF1aXJlZFwiKX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ2VtYWlsJylcIj57e2dldEVycm9yTWVzc2FnZShcImVtYWlsXCIpfX08L2Rpdj5cblx0XHQ8ZGl2ICpuZ0lmPVwic2hvd0RlZmF1bHRFcnJvcignbWlubGVuZ3RoJylcIj57e3N1YnN0aXR1dGVQYXJhbWV0ZXJzKGdldEVycm9yTWVzc2FnZShcIm1pbkxlbmd0aFwiKSwge21pbkxlbmd0aDogYXR0YWNoZWRDb250cm9sLmVycm9ycy5taW5sZW5ndGgucmVxdWlyZWRMZW5ndGh9KX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ21heGxlbmd0aCcpXCI+e3tzdWJzdGl0dXRlUGFyYW1ldGVycyhnZXRFcnJvck1lc3NhZ2UoXCJtYXhMZW5ndGhcIiksIHttYXhMZW5ndGg6IGF0dGFjaGVkQ29udHJvbC5lcnJvcnMubWF4bGVuZ3RoLnJlcXVpcmVkTGVuZ3RofSl9fTwvZGl2PlxuXHRcdDxkaXYgKm5nSWY9XCJzaG93RGVmYXVsdEVycm9yKCdwYXR0ZXJuJylcIj57e2dldEVycm9yTWVzc2FnZShcInBhdHRlcm5cIil9fTwvZGl2PlxuXHRcdDxkaXYgKm5nSWY9XCJzaG93RGVmYXVsdEVycm9yKCdNYXRjaFBhc3N3b3JkJylcIj57e2dldEVycm9yTWVzc2FnZShcIm1hdGNoUGFzc3dvcmRcIil9fTwvZGl2PlxuXHRcdDxkaXYgKm5nSWY9XCJzaG93RGVmYXVsdEVycm9yKCdkYXRlJylcIj57e2dldEVycm9yTWVzc2FnZShcImRhdGVcIil9fTwvZGl2PlxuXHRcdDxkaXYgKm5nSWY9XCJzaG93RGVmYXVsdEVycm9yKCdtZXNzYWdlJylcIj57e2F0dGFjaGVkQ29udHJvbC5lcnJvcnMubWVzc2FnZS52YWx1ZX19PC9kaXY+XG5cdFx0PGRpdiAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3IoJ2Zvcm1MZXZlbCcpXCI+e3tnZXRFcnJvck1lc3NhZ2UoXCJmb3JtTGV2ZWxcIil9fTwvZGl2PlxuXHRcdDxkaXYgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q3VzdG9tRXJyb3JIYW5kbGVyKGdldEVycm9yVG9TaG93KCkpPy50ZW1wbGF0ZVJlZlwiPjwvZGl2PlxuXHQ8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFpbFRwbD5cblx0PGRpdiBjbGFzcz1cImVycm9yVG9vbHRpcENvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInthbHdheXNPcGVuOiBzaG91bGRTaG93RXJyb3JUb29sdGlwT3BlbmVkKCl9XCI+XG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0hvdmVyYWJsZUVycm9yVG9vbHRpcCgpIHx8IHNob3VsZFNob3dFcnJvclRvb2x0aXBPcGVuZWQoKVwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImVycm9yVG9vbHRpcFRyaWFuZ2xlXCI+PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZXJyb3JUb29sdGlwVHJpYW5nbGVXaGl0ZVwiPjwvZGl2PlxuXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiYWJzb2x1dGVBbmNob3JcIiAjYWJzb2x1dGVBbmNob3I+PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZml4ZWRBbmNob3JcIiAjZml4ZWRBbmNob3IgW29uUmVuZGVyRm5dPVwic2V0RXJyb3JUb29sdGlwT2Zmc2V0XCI+PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZml4ZWRXcmFwcGVyXCIgI2ZpeGVkV3JhcHBlcj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImVycm9yVG9vbHRpcFwiIFtuZ0NsYXNzXT1cIntub1BvaW50ZXJFdmVudHM6ICFzaG91bGRTaG93RXJyb3JUb29sdGlwT3BlbmVkKCl9XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImVycm9yVG9vbHRpcElubmVyXCI+XG5cdFx0XHRcdFx0XHQ8aSBjbGFzcz1cImNsb3NlQnRuXCIgKGNsaWNrKT1cImNsb3NlUG9wdXAoKTtcIj7DlzwvaT5cblx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRFcnJvclRvU2hvdygpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3JSZWZcIj48L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9XCIhZ2V0RXJyb3JUb1Nob3coKSAmJiBzaG91bGRTaG93V2FybmluZ1BvcHVwKClcIj5cblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFdhcm5pbmdUb1Nob3dJc1RlbXBsYXRlUmVmKClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRXYXJuaW5nVG9TaG93QXNUZW1wbGF0ZVJlZigpXCI+PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwiIWdldFdhcm5pbmdUb1Nob3dJc1RlbXBsYXRlUmVmKClcIj57e2dldFdhcm5pbmdUb1Nob3coKX19PC9zcGFuPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHQ8a2xwLWZvcm0td2FybmluZy1pY29uIHZhcmlhbnQ9XCJmaWxsXCIgKm5nSWY9XCJnZXRFcnJvclRvU2hvdygpXCIgKGNsaWNrKT1cInRvZ2dsZVBvcHVwKClcIj48L2tscC1mb3JtLXdhcm5pbmctaWNvbj5cblx0XHQ8a2xwLWZvcm0td2FybmluZy1pY29uIHZhcmlhbnQ9XCJsaW5lXCIgKm5nSWY9XCIhZ2V0RXJyb3JUb1Nob3coKSAmJiBnZXRXYXJuaW5nVG9TaG93KClcIiAoY2xpY2spPVwidG9nZ2xlUG9wdXAoKVwiPjwva2xwLWZvcm0td2FybmluZy1pY29uPlxuXHQ8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|