systelab-virtual-keyboard 0.0.6 → 17.1.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.
@@ -28,10 +28,10 @@ export var SystelabVirtualKeyboardInputMethods;
28
28
  SystelabVirtualKeyboardInputMethods["onlyMouseEvents"] = "onlyMouseEvents";
29
29
  SystelabVirtualKeyboardInputMethods["onlyTouchEvents"] = "onlyTouchEvents";
30
30
  })(SystelabVirtualKeyboardInputMethods || (SystelabVirtualKeyboardInputMethods = {}));
31
- export var SystelabVirtualKeyboardInputTypes;
32
- (function (SystelabVirtualKeyboardInputTypes) {
33
- SystelabVirtualKeyboardInputTypes["text"] = "text";
34
- SystelabVirtualKeyboardInputTypes["number"] = "number";
35
- SystelabVirtualKeyboardInputTypes["password"] = "password";
36
- })(SystelabVirtualKeyboardInputTypes || (SystelabVirtualKeyboardInputTypes = {}));
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC9zcmMvbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsTUFBTSxDQUFOLElBQVksNkJBU1g7QUFURCxXQUFZLDZCQUE2QjtJQUN2QyxnREFBZSxDQUFBO0lBQ2Ysa0RBQWlCLENBQUE7SUFDakIsa0RBQWlCLENBQUE7SUFDakIsZ0RBQWUsQ0FBQTtJQUNmLHFEQUFvQixDQUFBO0lBQ3BCLHdEQUF1QixDQUFBO0lBQ3ZCLGtEQUFpQixDQUFBO0lBQ2pCLDhDQUFhLENBQUE7QUFDZixDQUFDLEVBVFcsNkJBQTZCLEtBQTdCLDZCQUE2QixRQVN4QztBQUVELE1BQU0sQ0FBTixJQUFZLDhCQUlYO0FBSkQsV0FBWSw4QkFBOEI7SUFDeEMscURBQW1CLENBQUE7SUFDbkIsaURBQWUsQ0FBQTtJQUNmLHFEQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFKVyw4QkFBOEIsS0FBOUIsOEJBQThCLFFBSXpDO0FBRUQsTUFBTSxDQUFOLElBQVksbUNBR1g7QUFIRCxXQUFZLG1DQUFtQztJQUM3QywwRUFBbUMsQ0FBQTtJQUNuQywwRUFBbUMsQ0FBQTtBQUNyQyxDQUFDLEVBSFcsbUNBQW1DLEtBQW5DLG1DQUFtQyxRQUc5QztBQUVELE1BQU0sQ0FBTixJQUFZLGlDQUlYO0FBSkQsV0FBWSxpQ0FBaUM7SUFDM0Msa0RBQWEsQ0FBQTtJQUNiLHNEQUFpQixDQUFBO0lBQ2pCLDBEQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFKVyxpQ0FBaUMsS0FBakMsaUNBQWlDLFFBSTVDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMCAtIDIwMjQgLSBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55IGFuZCBTeXN0ZWxhYiBUZWNobm9sb2dpZXMsIFNBLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTk9USUNFOiAgQWxsIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaXMgYW5kIHJlbWFpbnMgdGhlIHByb3BlcnR5IG9mIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0c1xuICogYWZmaWxpYXRlcywgaWYgYW55LiAgVGhlIGludGVsbGVjdHVhbCBhbmQgdGVjaG5pY2FsIGNvbmNlcHRzIGNvbnRhaW5lZCBoZXJlaW4gYXJlIHByb3ByaWV0YXJ5IHRvIEluc3RydW1lbnRhdGlvblxuICogTGFib3JhdG9yeSBDb21wYW55IGFuZCBpdHMgYWZmaWxpYXRlcyBhbmQgbWF5IGJlIGNvdmVyZWQgYnkgVS5TLiBhbmQgZm9yZWlnbiBwYXRlbnRzIGFuZCBwYXRlbnQgYXBwbGljYXRpb25zLCBhbmQvb3JcbiAqIGFyZSBwcm90ZWN0ZWQgYnkgdHJhZGUgc2VjcmV0IG9yIGNvcHlyaWdodCBsYXcuIERpc3NlbWluYXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbiBvciByZXByb2R1Y3Rpb24gb2YgdGhpcyBtYXRlcmlhbCBpc1xuICogc3RyaWN0bHkgZm9yYmlkZGVuIHVubGVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gaXMgSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueS5cbiAqL1xuXG5leHBvcnQgZW51bSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbiB7XG4gIERvbmUgPSAne2RvbmV9JyxcbiAgRW50ZXIgPSAne2VudGVyfScsXG4gIFNoaWZ0ID0gJ3tzaGlmdH0nLFxuICBMb2NrID0gJ3tsb2NrfScsXG4gIEJhY2tzcGFjZSA9ICd7YmtzcH0nLFxuICBMYW5ndWFnZSA9ICd7bGFuZ3VhZ2V9JyxcbiAgU3BhY2UgPSAne3NwYWNlfScsXG4gIFRhYiA9ICd7dGFifScsXG59XG5cbmV4cG9ydCBlbnVtIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyB7XG4gIGRlZmF1bHQgPSAnZGVmYXVsdCcsXG4gIHNoaWZ0ID0gJ3NoaWZ0JyxcbiAgbnVtZXJpYyA9ICdudW1lcmljJyxcbn1cblxuZXhwb3J0IGVudW0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dE1ldGhvZHMge1xuICBvbmx5TW91c2VFdmVudHMgPSAnb25seU1vdXNlRXZlbnRzJyxcbiAgb25seVRvdWNoRXZlbnRzID0gJ29ubHlUb3VjaEV2ZW50cycsXG59XG5cbmV4cG9ydCBlbnVtIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRUeXBlcyB7XG4gIHRleHQgPSAndGV4dCcsXG4gIG51bWJlciA9ICdudW1iZXInLFxuICBwYXNzd29yZCA9ICdwYXNzd29yZCcsXG59XG4iXX0=
31
+ export var SystelabVirtualKeyboardInputModes;
32
+ (function (SystelabVirtualKeyboardInputModes) {
33
+ SystelabVirtualKeyboardInputModes["text"] = "text";
34
+ SystelabVirtualKeyboardInputModes["numeric"] = "numeric";
35
+ SystelabVirtualKeyboardInputModes["password"] = "password";
36
+ })(SystelabVirtualKeyboardInputModes || (SystelabVirtualKeyboardInputModes = {}));
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC9zcmMvbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsTUFBTSxDQUFOLElBQVksNkJBU1g7QUFURCxXQUFZLDZCQUE2QjtJQUNyQyxnREFBZSxDQUFBO0lBQ2Ysa0RBQWlCLENBQUE7SUFDakIsa0RBQWlCLENBQUE7SUFDakIsZ0RBQWUsQ0FBQTtJQUNmLHFEQUFvQixDQUFBO0lBQ3BCLHdEQUF1QixDQUFBO0lBQ3ZCLGtEQUFpQixDQUFBO0lBQ2pCLDhDQUFhLENBQUE7QUFDakIsQ0FBQyxFQVRXLDZCQUE2QixLQUE3Qiw2QkFBNkIsUUFTeEM7QUFFRCxNQUFNLENBQU4sSUFBWSw4QkFJWDtBQUpELFdBQVksOEJBQThCO0lBQ3RDLHFEQUFtQixDQUFBO0lBQ25CLGlEQUFlLENBQUE7SUFDZixxREFBbUIsQ0FBQTtBQUN2QixDQUFDLEVBSlcsOEJBQThCLEtBQTlCLDhCQUE4QixRQUl6QztBQUVELE1BQU0sQ0FBTixJQUFZLG1DQUdYO0FBSEQsV0FBWSxtQ0FBbUM7SUFDM0MsMEVBQW1DLENBQUE7SUFDbkMsMEVBQW1DLENBQUE7QUFDdkMsQ0FBQyxFQUhXLG1DQUFtQyxLQUFuQyxtQ0FBbUMsUUFHOUM7QUFFRCxNQUFNLENBQU4sSUFBWSxpQ0FJWDtBQUpELFdBQVksaUNBQWlDO0lBQ3pDLGtEQUFhLENBQUE7SUFDYix3REFBbUIsQ0FBQTtJQUNuQiwwREFBcUIsQ0FBQTtBQUN6QixDQUFDLEVBSlcsaUNBQWlDLEtBQWpDLGlDQUFpQyxRQUk1QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgLSAyMDI0IC0gSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgU3lzdGVsYWIgVGVjaG5vbG9naWVzLCBTQS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5PVElDRTogIEFsbCBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzIGFuZCByZW1haW5zIHRoZSBwcm9wZXJ0eSBvZiBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55IGFuZCBpdHNcbiAqIGFmZmlsaWF0ZXMsIGlmIGFueS4gIFRoZSBpbnRlbGxlY3R1YWwgYW5kIHRlY2huaWNhbCBjb25jZXB0cyBjb250YWluZWQgaGVyZWluIGFyZSBwcm9wcmlldGFyeSB0byBJbnN0cnVtZW50YXRpb25cbiAqIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgaXRzIGFmZmlsaWF0ZXMgYW5kIG1heSBiZSBjb3ZlcmVkIGJ5IFUuUy4gYW5kIGZvcmVpZ24gcGF0ZW50cyBhbmQgcGF0ZW50IGFwcGxpY2F0aW9ucywgYW5kL29yXG4gKiBhcmUgcHJvdGVjdGVkIGJ5IHRyYWRlIHNlY3JldCBvciBjb3B5cmlnaHQgbGF3LiBEaXNzZW1pbmF0aW9uIG9mIHRoaXMgaW5mb3JtYXRpb24gb3IgcmVwcm9kdWN0aW9uIG9mIHRoaXMgbWF0ZXJpYWwgaXNcbiAqIHN0cmljdGx5IGZvcmJpZGRlbiB1bmxlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGlzIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkuXG4gKi9cblxuZXhwb3J0IGVudW0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24ge1xuICAgIERvbmUgPSAne2RvbmV9JyxcbiAgICBFbnRlciA9ICd7ZW50ZXJ9JyxcbiAgICBTaGlmdCA9ICd7c2hpZnR9JyxcbiAgICBMb2NrID0gJ3tsb2NrfScsXG4gICAgQmFja3NwYWNlID0gJ3tia3NwfScsXG4gICAgTGFuZ3VhZ2UgPSAne2xhbmd1YWdlfScsXG4gICAgU3BhY2UgPSAne3NwYWNlfScsXG4gICAgVGFiID0gJ3t0YWJ9Jyxcbn1cblxuZXhwb3J0IGVudW0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzIHtcbiAgICBkZWZhdWx0ID0gJ2RlZmF1bHQnLFxuICAgIHNoaWZ0ID0gJ3NoaWZ0JyxcbiAgICBudW1lcmljID0gJ251bWVyaWMnLFxufVxuXG5leHBvcnQgZW51bSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcyB7XG4gICAgb25seU1vdXNlRXZlbnRzID0gJ29ubHlNb3VzZUV2ZW50cycsXG4gICAgb25seVRvdWNoRXZlbnRzID0gJ29ubHlUb3VjaEV2ZW50cycsXG59XG5cbmV4cG9ydCBlbnVtIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRNb2RlcyB7XG4gICAgdGV4dCA9ICd0ZXh0JyxcbiAgICBudW1lcmljID0gJ251bWVyaWMnLFxuICAgIHBhc3N3b3JkID0gJ3Bhc3N3b3JkJyxcbn1cbiJdfQ==
@@ -157,4 +157,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
157
157
  providedIn: 'root',
158
158
  }]
159
159
  }], ctorParameters: () => [{ type: i1.Overlay }] });
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBWXpGLE1BQU0sT0FBTyxxQ0FBcUM7SUFTaEQsWUFBNkIsT0FBZ0I7UUFBaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUZyQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUd2QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLFNBQVM7UUFDZCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFTSxNQUFNLENBQ1gsV0FBNkIsRUFDN0IseUJBQXNDLEVBQ3RDLFdBQW9CLEVBQ3BCLFNBQXlDLDhCQUE4QixDQUFDLE9BQU87UUFFL0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO1FBQzNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFD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RSxDQUFDLENBQUMsQ0FBQztRQUM5RSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFFN0QsTUFBTSxVQUFVLEdBQUcsWUFBWSxHQUFHLFVBQVUsQ0FBQztRQUU3QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OEdBbkxVLHFDQUFxQztrSEFBckMscUNBQXFDLGNBRnBDLE1BQU07OzJGQUVQLHFDQUFxQztrQkFIakQsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIwIC0gMjAyNCAtIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIFN5c3RlbGFiIFRlY2hub2xvZ2llcywgU0EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOT1RJQ0U6ICBBbGwgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBpcyBhbmQgcmVtYWlucyB0aGUgcHJvcGVydHkgb2YgSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgaXRzXG4gKiBhZmZpbGlhdGVzLCBpZiBhbnkuICBUaGUgaW50ZWxsZWN0dWFsIGFuZCB0ZWNobmljYWwgY29uY2VwdHMgY29udGFpbmVkIGhlcmVpbiBhcmUgcHJvcHJpZXRhcnkgdG8gSW5zdHJ1bWVudGF0aW9uXG4gKiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0cyBhZmZpbGlhdGVzIGFuZCBtYXkgYmUgY292ZXJlZCBieSBVLlMuIGFuZCBmb3JlaWduIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMsIGFuZC9vclxuICogYXJlIHByb3RlY3RlZCBieSB0cmFkZSBzZWNyZXQgb3IgY29weXJpZ2h0IGxhdy4gRGlzc2VtaW5hdGlvbiBvZiB0aGlzIGluZm9ybWF0aW9uIG9yIHJlcHJvZHVjdGlvbiBvZiB0aGlzIG1hdGVyaWFsIGlzXG4gKiBzdHJpY3RseSBmb3JiaWRkZW4gdW5sZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55LlxuICovXG5cbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYsIE92ZXJsYXlTaXplQ29uZmlnLCBQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbXBvbmVudCc7XG5cbmludGVyZmFjZSBQb3NpdGlvblN0cmF0ZWd5T3JpZ2luIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE92ZXJsYXlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBvdmVybGF5UmVmITogT3ZlcmxheVJlZjtcbiAgcHJpdmF0ZSBpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudDtcbiAgcHJpdmF0ZSBmaXhlZEJvdHRvbTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBvcGVuOiBib29sZWFuO1xuICBwcml2YXRlIGxheW91dDogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzO1xuICBwcml2YXRlIGZvY3VzRGlzcGF0Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSkge1xuICAgIHRoaXMuaW5pdExpc3RlbmVyKCk7XG4gIH1cblxuICBwdWJsaWMgaXNDcmVhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMub3ZlcmxheVJlZjtcbiAgfVxuXG4gIHB1YmxpYyBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3BlbjtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGUoXG4gICAgaW5wdXRPcmlnaW46IEhUTUxJbnB1dEVsZW1lbnQsXG4gICAgc2hvd0tleWJvYXJkQnV0dG9uRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgZml4ZWRCb3R0b206IGJvb2xlYW4sXG4gICAgbGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMgPSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuZGVmYXVsdCxcbiAgKTogQ29tcG9uZW50UmVmPFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50PiB7XG4gICAgdGhpcy5pbnB1dE9yaWdpbiA9IGlucHV0T3JpZ2luO1xuICAgIHRoaXMuZml4ZWRCb3R0b20gPSBmaXhlZEJvdHRvbTtcbiAgICB0aGlzLnNob3dLZXlib2FyZEJ1dHRvbkVsZW1lbnQgPSBzaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50O1xuICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcbiAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3MoJ3ZpcnR1YWwta2V5Ym9hcmQtb3ZlcmxheS1wYW5lJyk7XG4gICAgaWYgKGZpeGVkQm90dG9tKSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcygndmlydHVhbC1rZXlib2FyZC1maXhlZC1ib3R0b20nKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3koaW5wdXRPcmlnaW4sIGZpeGVkQm90dG9tKTtcbiAgICB0aGlzLnVwZGF0ZVNpemUoKTtcblxuICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmxheVJlZi5hdHRhY2gobmV3IENvbXBvbmVudFBvcnRhbChTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbXBvbmVudCkpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLmlucHV0T3JpZ2luLCB0aGlzLmZpeGVkQm90dG9tKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRGb2N1c0Rpc3BhdGNoZWQoZGlzcGF0Y2hlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNEaXNwYXRjaGVkID0gZGlzcGF0Y2hlZDtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGluaXRMaXN0ZW5lcigpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZm9jdXNEaXNwYXRjaGVkKSB7XG4gICAgICB0aGlzLmZvY3VzRGlzcGF0Y2hlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygnRG9jdW1lbnQgY2xpY2tlZDonLCBldmVudCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3Qgc2ltcGxlS2V5Ym9hcmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNpbXBsZS1rZXlib2FyZCcpO1xuICAgIGNvbnN0IHNob3dLZXlib2FyZEJ1dHRvbkNsaWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uY2xhc3NMaXN0LmNvbnRhaW5zKCd2aXJ0dWFsLWtleWJvYXJkLXNob3ctYnV0dG9uJyk7XG5cbiAgICBjb25zdCBjb250YWluc0tleWJvYXJkID0gc2ltcGxlS2V5Ym9hcmRFbGVtZW50Py5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSk7XG4gICAgY29uc3QgY29udGFpbnNFbGVtZW50UmVmID0gdGhpcy5pbnB1dE9yaWdpbj8uY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpO1xuICAgIC8vIGNvbnN0IGNvbnRhaW5zRm9jdXNlZEVsZW1lbnQgPSB0aGlzLmZvY3VzZWRFbGVtZW50Py5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSk7XG4gICAgY29uc3QgY29udGFpbnNTaG93QnV0dG9uID0gdGhpcy5zaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50Py5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSk7XG4gICAgaWYgKFxuICAgICAgIWNvbnRhaW5zS2V5Ym9hcmQgJiZcbiAgICAgICFjb250YWluc0VsZW1lbnRSZWYgJiZcbiAgICAgIC8vICFjb250YWluc0ZvY3VzZWRFbGVtZW50ICYmXG4gICAgICAhY29udGFpbnNTaG93QnV0dG9uICYmXG4gICAgICAhc2hvd0tleWJvYXJkQnV0dG9uQ2xpY2tlZFxuICAgICkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGVkKCkpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhc0F0dGFjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3koaW5wdXRPcmlnaW46IEhUTUxJbnB1dEVsZW1lbnQsIGZpeGVkQm90dG9tOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5nZXRQb3NpdGlvblN0cmF0ZWd5KGlucHV0T3JpZ2luLCBmaXhlZEJvdHRvbSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTaXplKCk6IHZvaWQge1xuICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVTaXplKHRoaXMuZ2V0T3ZlcmxheVNpemUoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBvc2l0aW9uU3RyYXRlZ3koaW5wdXRPcmlnaW46IEhUTUxJbnB1dEVsZW1lbnQsIGZpeGVkQm90dG9tOiBib29sZWFuKTogUG9zaXRpb25TdHJhdGVneSB7XG4gICAgaWYgKGZpeGVkQm90dG9tKSB7XG4gICAgICByZXR1cm4gdGhpcy5vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuYm90dG9tKCcwJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcG9pbnRXaXRoRGltZW5zaW9uczogUG9zaXRpb25TdHJhdGVneU9yaWdpbiA9IHRoaXMuY29tcHV0ZVBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oaW5wdXRPcmlnaW4pO1xuXG4gICAgcmV0dXJuIHRoaXMub3ZlcmxheVxuICAgICAgLnBvc2l0aW9uKClcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHBvaW50V2l0aERpbWVuc2lvbnMpXG4gICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24odHJ1ZSlcbiAgICAgIC53aXRoUHVzaChmYWxzZSlcbiAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPdmVybGF5U2l6ZSgpOiBPdmVybGF5U2l6ZUNvbmZpZyB7XG4gICAgY29uc3Qgb3ZlcmxheVdpZHRoID0gdGhpcy5sYXlvdXQgPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5udW1lcmljID8gJzQwMHB4JyA6ICcxMjAwcHgnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiBvdmVybGF5V2lkdGgsXG4gICAgICBtYXhXaWR0aDogb3ZlcmxheVdpZHRoLFxuICAgICAgbWluV2lkdGg6IG92ZXJsYXlXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlUG9zaXRpb25TdHJhdGVneU9yaWdpbihpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudCk6IFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4ge1xuICAgIGNvbnN0IG92ZXJsYXlPZmZzZXRYID0gdGhpcy5jb21wdXRlT3ZlcmxheU9mZnNldFgoaW5wdXRPcmlnaW4pO1xuICAgIGNvbnN0IHsgd2lkdGg6IG92ZXJsYXlXaWR0aFN0cmluZyB9ID0gdGhpcy5nZXRPdmVybGF5U2l6ZSgpO1xuICAgIGNvbnN0IG92ZXJsYXlXaWR0aCA9IE51bWJlcigob3ZlcmxheVdpZHRoU3RyaW5nIGFzIHN0cmluZykucmVwbGFjZSgncHgnLCAnJykpO1xuICAgIGNvbnN0IHt4LCB5LCB3aWR0aCwgaGVpZ2h0fSA9IGlucHV0T3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIHg6IHdpZHRoIDwgb3ZlcmxheVdpZHRoID8geCAtIG92ZXJsYXlPZmZzZXRYIDogeCArIG92ZXJsYXlPZmZzZXRYLFxuICAgICAgeSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlT3ZlcmxheU9mZnNldFgoaW5wdXRPcmlnaW46IEhUTUxJbnB1dEVsZW1lbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IHsgd2lkdGg6IG92ZXJsYXlXaWR0aFN0cmluZyB9ID0gdGhpcy5nZXRPdmVybGF5U2l6ZSgpO1xuICAgIGNvbnN0IG92ZXJsYXlXaWR0aCA9IE51bWJlcigob3ZlcmxheVdpZHRoU3RyaW5nIGFzIHN0cmluZykucmVwbGFjZSgncHgnLCAnJykpO1xuICAgIGNvbnN0IGlucHV0V2lkdGggPSBpbnB1dE9yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuICAgIGNvbnN0IGV4dHJhV2lkdGggPSBvdmVybGF5V2lkdGggLSBpbnB1dFdpZHRoO1xuXG4gICAgcmV0dXJuIE1hdGguYWJzKGV4dHJhV2lkdGgpIC8gMjtcbiAgfVxufVxuIl19
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBWXpGLE1BQU0sT0FBTyxxQ0FBcUM7SUFTOUMsWUFBNkIsT0FBZ0I7UUFBaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUZyQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUdyQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLFNBQVM7UUFDWixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFFTSxNQUFNO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxNQUFNLENBQ1QsV0FBNkIsRUFDN0IseUJBQXNDLEVBQ3RDLFdBQW9CLEVBQ3BCLFNBQXlDLDhCQUE4QixDQUFDLE9BQU87UUFFL0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO1FBQzNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDbEMsV0FBVyxFQUFFLEtBQUs7WUFDbEIsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFO1lBQzFELG1CQUFtQixFQUFFLElBQUk7U0FDNUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUMvRCxJQUFJLFdBQVcsRUFBRTtZQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLCtCQUErQixDQUFDLENBQUM7U0FDbEU7UUFFRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRU0sY0FBYztRQUNqQixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVNLGtCQUFrQixDQUFDLFVBQW1CO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxPQUFPO1FBQ1YsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDN0I7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRU8sWUFBWTtRQUNoQixRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFpQjtRQUNqQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsT0FBTztTQUNWO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDekUsTUFBTSx5QkFBeUIsR0FBSSxLQUFLLENBQUMsTUFBc0IsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFFcEgsTUFBTSxnQkFBZ0IsR0FBRyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQWMsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQWMsQ0FBQyxDQUFDO1FBQzVFLHNGQUFzRjtRQUN0RixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQWMsQ0FBQyxDQUFDO1FBQzFGLElBQ0ksQ0FBQyxnQkFBZ0I7WUFDdkIsQ0FBQyxrQkFBa0I7WUFDbkIsNkJBQTZCO1lBQzdCLENBQUMsa0JBQWtCO1lBQ25CLENBQUMseUJBQXlCLEVBQ3RCO1lBQ0UsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNsQjtTQUNKO0lBQ0wsQ0FBQztJQUVNLFdBQVc7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFdBQTZCLEVBQUUsV0FBb0I7UUFDOUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVPLFVBQVU7UUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsV0FBNkIsRUFBRSxXQUFvQjtRQUMzRSxJQUFJLFdBQVcsRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM1RTtRQUVELE1BQU0sbUJBQW1CLEdBQTJCLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVwRyxPQUFPLElBQUksQ0FBQyxPQUFPO2FBQ2QsUUFBUSxFQUFFO2FBQ1YsbUJBQW1CLENBQUMsbUJBQW1CLENBQUM7YUFDeEMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO2FBQzdCLGtCQUFrQixDQUFDLElBQUksQ0FBQzthQUN4QixRQUFRLENBQUMsS0FBSyxDQUFDO2FBQ2YsYUFBYSxDQUFDO1lBQ1g7Z0JBQ0ksT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixRQUFRLEVBQUUsT0FBTztnQkFDakIsUUFBUSxFQUFFLEtBQUs7YUFDbEI7WUFDRDtnQkFDSSxPQUFPLEVBQUUsT0FBTztnQkFDaEIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLFFBQVEsRUFBRSxRQUFRO2FBQ3JCO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFFBQVEsRUFBRSxLQUFLO2FBQ2xCO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLFFBQVE7YUFDckI7U0FDSixDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sY0FBYztRQUNsQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFakcsT0FBTztZQUNILEtBQUssRUFBRSxZQUFZO1lBQ25CLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLFFBQVEsRUFBRSxZQUFZO1NBQ3pCLENBQUM7SUFDTixDQUFDO0lBRU8sNkJBQTZCLENBQUMsV0FBNkI7UUFDL0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFFLGtCQUE2QixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RSxNQUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbEUsT0FBTztZQUNILEtBQUs7WUFDTCxNQUFNO1lBQ04sQ0FBQyxFQUFFLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjO1lBQ2pFLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztJQUVPLHFCQUFxQixDQUFDLFdBQTZCO1FBQ3ZELE1BQU0sRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFFLGtCQUE2QixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFFN0QsTUFBTSxVQUFVLEdBQUcsWUFBWSxHQUFHLFVBQVUsQ0FBQztRQUU3QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OEdBbkxRLHFDQUFxQztrSEFBckMscUNBQXFDLGNBRmxDLE1BQU07OzJGQUVULHFDQUFxQztrQkFIakQsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIwIC0gMjAyNCAtIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIFN5c3RlbGFiIFRlY2hub2xvZ2llcywgU0EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOT1RJQ0U6ICBBbGwgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBpcyBhbmQgcmVtYWlucyB0aGUgcHJvcGVydHkgb2YgSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgaXRzXG4gKiBhZmZpbGlhdGVzLCBpZiBhbnkuICBUaGUgaW50ZWxsZWN0dWFsIGFuZCB0ZWNobmljYWwgY29uY2VwdHMgY29udGFpbmVkIGhlcmVpbiBhcmUgcHJvcHJpZXRhcnkgdG8gSW5zdHJ1bWVudGF0aW9uXG4gKiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0cyBhZmZpbGlhdGVzIGFuZCBtYXkgYmUgY292ZXJlZCBieSBVLlMuIGFuZCBmb3JlaWduIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMsIGFuZC9vclxuICogYXJlIHByb3RlY3RlZCBieSB0cmFkZSBzZWNyZXQgb3IgY29weXJpZ2h0IGxhdy4gRGlzc2VtaW5hdGlvbiBvZiB0aGlzIGluZm9ybWF0aW9uIG9yIHJlcHJvZHVjdGlvbiBvZiB0aGlzIG1hdGVyaWFsIGlzXG4gKiBzdHJpY3RseSBmb3JiaWRkZW4gdW5sZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55LlxuICovXG5cbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYsIE92ZXJsYXlTaXplQ29uZmlnLCBQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbXBvbmVudCc7XG5cbmludGVyZmFjZSBQb3NpdGlvblN0cmF0ZWd5T3JpZ2luIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkT3ZlcmxheVNlcnZpY2Uge1xuICAgIHByaXZhdGUgb3ZlcmxheVJlZiE6IE92ZXJsYXlSZWY7XG4gICAgcHJpdmF0ZSBpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudDtcbiAgICBwcml2YXRlIGZpeGVkQm90dG9tOiBib29sZWFuO1xuICAgIHByaXZhdGUgc2hvd0tleWJvYXJkQnV0dG9uRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBvcGVuOiBib29sZWFuO1xuICAgIHByaXZhdGUgbGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHM7XG4gICAgcHJpdmF0ZSBmb2N1c0Rpc3BhdGNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSkge1xuICAgICAgICB0aGlzLmluaXRMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0NyZWF0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMub3ZlcmxheVJlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGUoXG4gICAgICAgIGlucHV0T3JpZ2luOiBIVE1MSW5wdXRFbGVtZW50LFxuICAgICAgICBzaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICAgICAgZml4ZWRCb3R0b206IGJvb2xlYW4sXG4gICAgICAgIGxheW91dDogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzID0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHQsXG4gICAgKTogQ29tcG9uZW50UmVmPFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50PiB7XG4gICAgICAgIHRoaXMuaW5wdXRPcmlnaW4gPSBpbnB1dE9yaWdpbjtcbiAgICAgICAgdGhpcy5maXhlZEJvdHRvbSA9IGZpeGVkQm90dG9tO1xuICAgICAgICB0aGlzLnNob3dLZXlib2FyZEJ1dHRvbkVsZW1lbnQgPSBzaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50O1xuICAgICAgICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZi5hZGRQYW5lbENsYXNzKCd2aXJ0dWFsLWtleWJvYXJkLW92ZXJsYXktcGFuZScpO1xuICAgICAgICBpZiAoZml4ZWRCb3R0b20pIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5hZGRQYW5lbENsYXNzKCd2aXJ0dWFsLWtleWJvYXJkLWZpeGVkLWJvdHRvbScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KGlucHV0T3JpZ2luLCBmaXhlZEJvdHRvbSk7XG4gICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xuXG4gICAgICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKG5ldyBDb21wb25lbnRQb3J0YWwoU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLmlucHV0T3JpZ2luLCB0aGlzLmZpeGVkQm90dG9tKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Rm9jdXNEaXNwYXRjaGVkKGRpc3BhdGNoZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1c0Rpc3BhdGNoZWQgPSBkaXNwYXRjaGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdExpc3RlbmVyKCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5mb2N1c0Rpc3BhdGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNEaXNwYXRjaGVkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ0RvY3VtZW50IGNsaWNrZWQ6JywgZXZlbnQpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgY29uc3Qgc2ltcGxlS2V5Ym9hcmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNpbXBsZS1rZXlib2FyZCcpO1xuICAgICAgICBjb25zdCBzaG93S2V5Ym9hcmRCdXR0b25DbGlja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmNsYXNzTGlzdC5jb250YWlucygndmlydHVhbC1rZXlib2FyZC1zaG93LWJ1dHRvbicpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5zS2V5Ym9hcmQgPSBzaW1wbGVLZXlib2FyZEVsZW1lbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKTtcbiAgICAgICAgY29uc3QgY29udGFpbnNFbGVtZW50UmVmID0gdGhpcy5pbnB1dE9yaWdpbj8uY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpO1xuICAgICAgICAvLyBjb25zdCBjb250YWluc0ZvY3VzZWRFbGVtZW50ID0gdGhpcy5mb2N1c2VkRWxlbWVudD8uY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpO1xuICAgICAgICBjb25zdCBjb250YWluc1Nob3dCdXR0b24gPSB0aGlzLnNob3dLZXlib2FyZEJ1dHRvbkVsZW1lbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWNvbnRhaW5zS2V5Ym9hcmQgJiZcbiAgICAgICFjb250YWluc0VsZW1lbnRSZWYgJiZcbiAgICAgIC8vICFjb250YWluc0ZvY3VzZWRFbGVtZW50ICYmXG4gICAgICAhY29udGFpbnNTaG93QnV0dG9uICYmXG4gICAgICAhc2hvd0tleWJvYXJkQnV0dG9uQ2xpY2tlZFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ3JlYXRlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzQXR0YWNoZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQb3NpdGlvblN0cmF0ZWd5KGlucHV0T3JpZ2luOiBIVE1MSW5wdXRFbGVtZW50LCBmaXhlZEJvdHRvbTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLmdldFBvc2l0aW9uU3RyYXRlZ3koaW5wdXRPcmlnaW4sIGZpeGVkQm90dG9tKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh0aGlzLmdldE92ZXJsYXlTaXplKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UG9zaXRpb25TdHJhdGVneShpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudCwgZml4ZWRCb3R0b206IGJvb2xlYW4pOiBQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICAgICAgaWYgKGZpeGVkQm90dG9tKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuYm90dG9tKCcwJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb2ludFdpdGhEaW1lbnNpb25zOiBQb3NpdGlvblN0cmF0ZWd5T3JpZ2luID0gdGhpcy5jb21wdXRlUG9zaXRpb25TdHJhdGVneU9yaWdpbihpbnB1dE9yaWdpbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheVxuICAgICAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHBvaW50V2l0aERpbWVuc2lvbnMpXG4gICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24odHJ1ZSlcbiAgICAgICAgICAgIC53aXRoUHVzaChmYWxzZSlcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPdmVybGF5U2l6ZSgpOiBPdmVybGF5U2l6ZUNvbmZpZyB7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlXaWR0aCA9IHRoaXMubGF5b3V0ID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMubnVtZXJpYyA/ICc0MDBweCcgOiAnMTIwMHB4JztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGg6IG92ZXJsYXlXaWR0aCxcbiAgICAgICAgICAgIG1heFdpZHRoOiBvdmVybGF5V2lkdGgsXG4gICAgICAgICAgICBtaW5XaWR0aDogb3ZlcmxheVdpZHRoLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcHV0ZVBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oaW5wdXRPcmlnaW46IEhUTUxJbnB1dEVsZW1lbnQpOiBQb3NpdGlvblN0cmF0ZWd5T3JpZ2luIHtcbiAgICAgICAgY29uc3Qgb3ZlcmxheU9mZnNldFggPSB0aGlzLmNvbXB1dGVPdmVybGF5T2Zmc2V0WChpbnB1dE9yaWdpbik7XG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IG92ZXJsYXlXaWR0aFN0cmluZyB9ID0gdGhpcy5nZXRPdmVybGF5U2l6ZSgpO1xuICAgICAgICBjb25zdCBvdmVybGF5V2lkdGggPSBOdW1iZXIoKG92ZXJsYXlXaWR0aFN0cmluZyBhcyBzdHJpbmcpLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgY29uc3Qge3gsIHksIHdpZHRoLCBoZWlnaHR9ID0gaW5wdXRPcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHg6IHdpZHRoIDwgb3ZlcmxheVdpZHRoID8geCAtIG92ZXJsYXlPZmZzZXRYIDogeCArIG92ZXJsYXlPZmZzZXRYLFxuICAgICAgICAgICAgeSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVPdmVybGF5T2Zmc2V0WChpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IG92ZXJsYXlXaWR0aFN0cmluZyB9ID0gdGhpcy5nZXRPdmVybGF5U2l6ZSgpO1xuICAgICAgICBjb25zdCBvdmVybGF5V2lkdGggPSBOdW1iZXIoKG92ZXJsYXlXaWR0aFN0cmluZyBhcyBzdHJpbmcpLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgY29uc3QgaW5wdXRXaWR0aCA9IGlucHV0T3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXG4gICAgICAgIGNvbnN0IGV4dHJhV2lkdGggPSBvdmVybGF5V2lkdGggLSBpbnB1dFdpZHRoO1xuXG4gICAgICAgIHJldHVybiBNYXRoLmFicyhleHRyYVdpZHRoKSAvIDI7XG4gICAgfVxufVxuIl19
@@ -1,6 +1,6 @@
1
1
  import { Component, EventEmitter, HostListener, Inject, Optional, Output } from '@angular/core';
2
2
  import { SimpleKeyboard } from 'simple-keyboard';
3
- import { SystelabVirtualKeyboardButton, SystelabVirtualKeyboardInputMethods, SystelabVirtualKeyboardInputTypes, SystelabVirtualKeyboardLayouts } from './constants';
3
+ import { SystelabVirtualKeyboardButton, SystelabVirtualKeyboardInputMethods, SystelabVirtualKeyboardLayouts } from './constants';
4
4
  import { VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';
5
5
  import * as i0 from "@angular/core";
6
6
  export class SystelabVirtualKeyboardComponent {
@@ -31,6 +31,7 @@ export class SystelabVirtualKeyboardComponent {
31
31
  this.selectedLayout = SystelabVirtualKeyboardLayouts.default;
32
32
  this.caretPosition = null;
33
33
  this.caretPositionEnd = null;
34
+ this.shiftPressed = false;
34
35
  this.closePanel = new EventEmitter();
35
36
  }
36
37
  ngAfterViewInit() {
@@ -64,20 +65,12 @@ export class SystelabVirtualKeyboardComponent {
64
65
  const inputType = this.activeInputElement?.type;
65
66
  console.log('Layout:', `${inputType}_${this.selectedLayout}`);
66
67
  }
67
- let selectionStart;
68
- let selectionEnd;
69
- if (this.isInputNumeric(input)) {
70
- selectionStart = this.activeInputElement.value.toString().length;
71
- selectionEnd = this.activeInputElement.value.toString().length;
72
- }
73
- else {
74
- selectionStart = this.activeInputElement.selectionStart;
75
- selectionEnd = this.activeInputElement.selectionEnd;
76
- }
68
+ const { selectionStart, selectionEnd } = this.activeInputElement;
77
69
  this.setCaretPosition(selectionStart, selectionEnd);
78
70
  if (this.debug) {
79
71
  console.log('Caret start at:', this.caretPosition, this.caretPositionEnd);
80
72
  }
73
+ this.focusActiveInput();
81
74
  }
82
75
  setLayout(layout) {
83
76
  this.selectedLayout = layout;
@@ -136,14 +129,6 @@ export class SystelabVirtualKeyboardComponent {
136
129
  }
137
130
  return keyboardOptions;
138
131
  }
139
- isInputAlphabetic(activeInputElement) {
140
- const inputType = activeInputElement?.type;
141
- return inputType && [SystelabVirtualKeyboardInputTypes.text, SystelabVirtualKeyboardInputTypes.password].some((i) => i === inputType);
142
- }
143
- isInputNumeric(activeInputElement) {
144
- const inputType = activeInputElement?.type;
145
- return inputType && [SystelabVirtualKeyboardInputTypes.number].some((i) => i === inputType);
146
- }
147
132
  handleKeyPress(button, e) {
148
133
  if (this.debug) {
149
134
  console.log('Key press:', button);
@@ -152,7 +137,8 @@ export class SystelabVirtualKeyboardComponent {
152
137
  button = new DOMParser().parseFromString(button, 'text/html').body.textContent;
153
138
  }
154
139
  if (button === SystelabVirtualKeyboardButton.Shift || button === SystelabVirtualKeyboardButton.Lock) {
155
- this.toggleShift();
140
+ this.shiftPressed = button === SystelabVirtualKeyboardButton.Shift;
141
+ this.toggleShiftLayout();
156
142
  }
157
143
  else if (button === SystelabVirtualKeyboardButton.Done) {
158
144
  this.closePanel.emit();
@@ -169,6 +155,10 @@ export class SystelabVirtualKeyboardComponent {
169
155
  }
170
156
  }
171
157
  this.dispatchEvents(button);
158
+ if (this.shiftPressed) {
159
+ this.toggleShiftLayout();
160
+ }
161
+ this.shiftPressed = button === SystelabVirtualKeyboardButton.Shift;
172
162
  }
173
163
  handleButtonOutput(button) {
174
164
  const commonParams = this.getCommonParams();
@@ -181,7 +171,7 @@ export class SystelabVirtualKeyboardComponent {
181
171
  output = this.addStringAt(output, ' ', ...commonParams);
182
172
  }
183
173
  else if (button === SystelabVirtualKeyboardButton.Tab) {
184
- output = this.addStringAt(output, '\t', ...commonParams);
174
+ // Do nothing for tab
185
175
  }
186
176
  else if (button === SystelabVirtualKeyboardButton.Enter) {
187
177
  if (this.isTextarea) {
@@ -246,9 +236,9 @@ export class SystelabVirtualKeyboardComponent {
246
236
  }
247
237
  return { key, code };
248
238
  }
249
- toggleShift() {
250
- let currentLayout = this.keyboard.options.layoutName;
251
- let selectedLayout = currentLayout === SystelabVirtualKeyboardLayouts.default ? SystelabVirtualKeyboardLayouts.shift : SystelabVirtualKeyboardLayouts.default;
239
+ toggleShiftLayout() {
240
+ const currentLayout = this.keyboard.options.layoutName;
241
+ const selectedLayout = currentLayout === SystelabVirtualKeyboardLayouts.default ? SystelabVirtualKeyboardLayouts.shift : SystelabVirtualKeyboardLayouts.default;
252
242
  this.setLayout(selectedLayout);
253
243
  }
254
244
  isStandardButton(button) {
@@ -301,8 +291,8 @@ export class SystelabVirtualKeyboardComponent {
301
291
  return output;
302
292
  }
303
293
  /*
304
- * CARET METHODS
305
- * */
294
+ * CARET METHODS
295
+ * */
306
296
  caretEventHandler(event) {
307
297
  let targetTagName = '';
308
298
  if (event.target.tagName) {
@@ -334,6 +324,10 @@ export class SystelabVirtualKeyboardComponent {
334
324
  }
335
325
  }
336
326
  }
327
+ focusActiveInput() {
328
+ this.activeInputElement?.focus();
329
+ this.activeInputElement?.setSelectionRange(this.caretPosition, this.caretPositionEnd);
330
+ }
337
331
  updateCaretPosition(length, minus = false) {
338
332
  const newCaretPos = this.computeNewCaretPosition(length, minus);
339
333
  this.setCaretPosition(newCaretPos);
@@ -362,7 +356,7 @@ export class SystelabVirtualKeyboardComponent {
362
356
  this.caretPositionEnd = endPosition;
363
357
  }
364
358
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardComponent, deps: [{ token: i0.ElementRef }, { token: VIRTUAL_KEYBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
365
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.9", type: SystelabVirtualKeyboardComponent, isStandalone: true, selector: "systelab-virtual-keyboard.component", outputs: { closePanel: "closePanel" }, host: { listeners: { "window:keyup": "handleKeyUp($event)", "window:pointerup": "handleMouseUp($event)", "window:select": "handleSelect($event)", "window:selectionchange": "handleSelectionChange($event)" } }, ngImport: i0, template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n", styles: [":host{width:100%}.simple-keyboard.hg-theme-default.myTheme{font-family:Lato,HelveticaNeue-Light,Helvetica Neue Light,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif}\n"] }); }
359
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.9", type: SystelabVirtualKeyboardComponent, isStandalone: true, selector: "systelab-virtual-keyboard.component", outputs: { closePanel: "closePanel" }, host: { listeners: { "window:keyup": "handleKeyUp($event)", "window:pointerup": "handleMouseUp($event)", "window:mouseup": "handleMouseUp($event)", "window:select": "handleSelect($event)", "window:selectionchange": "handleSelectionChange($event)" } }, ngImport: i0, template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n", styles: [":host{width:100%}.simple-keyboard.hg-theme-default.myTheme{font-family:Lato,HelveticaNeue-Light,Helvetica Neue Light,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif}\n"] }); }
366
360
  }
367
361
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardComponent, decorators: [{
368
362
  type: Component,
@@ -378,6 +372,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
378
372
  }], handleMouseUp: [{
379
373
  type: HostListener,
380
374
  args: ['window:pointerup', ['$event']]
375
+ }, {
376
+ type: HostListener,
377
+ args: ['window:mouseup', ['$event']]
381
378
  }], handleSelect: [{
382
379
  type: HostListener,
383
380
  args: ['window:select', ['$event']]
@@ -387,4 +384,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
387
384
  }], closePanel: [{
388
385
  type: Output
389
386
  }] } });
390
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsbUNBQW1DLEVBQ25DLGlDQUFpQyxFQUNqQyw4QkFBOEIsRUFDL0IsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFpQyx1QkFBdUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOztBQVU1RyxNQUFNLE9BQU8sZ0NBQWdDO0lBRTNDLFdBQVcsQ0FBQyxLQUFvQjtRQUM5QixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUdELGFBQWEsQ0FBQyxLQUFtQjtRQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUdELFlBQVksQ0FBQyxLQUFZO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBR0QscUJBQXFCLENBQUMsS0FBWTtRQUNoQyxJQUFJLENBQUMsaUJBQWlCLENB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LElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7SUFDdEMsQ0FBQzs4R0F4WlUsZ0NBQWdDLDRDQXdDdUMsdUJBQXVCO2tHQXhDOUYsZ0NBQWdDLHVWQzNCN0MsbXZCQVVBOzsyRkRpQmEsZ0NBQWdDO2tCQVA1QyxTQUFTOytCQUNFLHFDQUFxQyxjQUNuQyxJQUFJLFdBQ1AsRUFBRTs7MEJBNENvRCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHVCQUF1Qjt5Q0F0Q3pHLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUXhDLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNNUMsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNekMscUJBQXFCO3NCQURwQixZQUFZO3VCQUFDLHdCQUF3QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW9CeEMsVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNpbXBsZUtleWJvYXJkIH0gZnJvbSAnc2ltcGxlLWtleWJvYXJkJztcbmltcG9ydCB7XG4gIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLFxuICBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcyxcbiAgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dFR5cGVzLFxuICBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHNcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWcsIFZJUlRVQUxfS0VZQk9BUkRfQ09ORklHIH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbmZpZyc7XG5pbXBvcnQgeyBLZXlib2FyZE9wdGlvbnMgfSBmcm9tICdzaW1wbGUta2V5Ym9hcmQvYnVpbGQvaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQuY29tcG9uZW50JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW10sXG4gIHRlbXBsYXRlVXJsOiAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICdzeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuaXNUcnVzdGVkKSB7XG4gICAgICB0aGlzLmNhcmV0RXZlbnRIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cG9pbnRlcnVwJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlTW91c2VVcChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jYXJldEV2ZW50SGFuZGxlcihldmVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2VsZWN0JywgWyckZXZlbnQnXSlcbiAgaGFuZGxlU2VsZWN0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNlbGVjdGlvbmNoYW5nZScsIFsnJGV2ZW50J10pXG4gIGhhbmRsZVNlbGVjdGlvbkNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNhcmV0RXZlbnRIYW5kbGVyKGV2ZW50KTtcbiAgfVxuXG4gIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/Lm1heExlbmd0aCA/PyAtMTtcbiAgfVxuXG4gIGdldCBpc1RleHRhcmVhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudD8udHlwZSA9PT0gJ3RleHRhcmVhJztcbiAgfVxuXG4gIHB1YmxpYyBkZWJ1ZyA9IGZhbHNlO1xuICBwcml2YXRlIHNlbGVjdGVkTGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMgPSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuZGVmYXVsdDtcbiAgcHJpdmF0ZSBrZXlib2FyZDogU2ltcGxlS2V5Ym9hcmQ7XG4gIHByaXZhdGUgY2FyZXRQb3NpdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2FyZXRQb3NpdGlvbkVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYWN0aXZlSW5wdXRFbGVtZW50ITogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsO1xuXG4gIEBPdXRwdXQoKSBjbG9zZVBhbmVsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PiwgQE9wdGlvbmFsKCkgQEluamVjdChWSVJUVUFMX0tFWUJPQVJEX0NPTkZJRykgcHJpdmF0ZSB2aXJ0dWFsS2V5Ym9hcmRDb25maWc6IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnLCkge31cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgY29uc3QgbGF5b3V0ID0ge1xuICAgICAgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5kZWZhdWx0XTogW1xuICAgICAgICAnYCAxIDIgMyA0IDUgNiA3IDggOSAwIC0gPSB7YmtzcH0nLFxuICAgICAgICAne3RhYn0gcSB3IGUgciB0IHkgdSBpIG8gcCBbIF0gXFxcXCcsXG4gICAgICAgIFwie2xvY2t9IGEgcyBkIGYgZyBoIGogayBsIDsgJyB7ZW50ZXJ9XCIsXG4gICAgICAgICd7c2hpZnR9IHogeCBjIHYgYiBuIG0gLCAuIC8ge3NoaWZ0fScsXG4gICAgICAgICd7c3BhY2V9JyxcbiAgICAgIF0sXG4gICAgICBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLnNoaWZ0XTogW1xuICAgICAgICAnfiAhIEAgIyAkICUgXiAmYW1wOyAqICggKSBfICsge2Jrc3B9JyxcbiAgICAgICAgJ3t0YWJ9IFEgVyBFIFIgVCBZIFUgSSBPIFAgeyB9IHwnLFxuICAgICAgICAne2xvY2t9IEEgUyBEIEYgRyBIIEogSyBMIDogXCIge2VudGVyfScsXG4gICAgICAgICd7c2hpZnR9IFogWCBDIFYgQiBOIE0gJmx0OyAmZ3Q7ID8ge3NoaWZ0fScsXG4gICAgICAgICd7c3BhY2V9JyxcbiAgICAgIF0sXG4gICAgICBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLm51bWVyaWNdOiBbJzcgOCA5JywgJzQgNSA2JywgJzEgMiAzJywgJzAge2Jrc3B9J10sXG4gICAgfTtcblxuICAgIGNvbnN0IGtleWJvYXJkT3B0aW9uczogS2V5Ym9hcmRPcHRpb25zID0gdGhpcy5wcmVwYXJlS2V5Ym9hcmRDb25maWcoKTtcbiAgICB0aGlzLmtleWJvYXJkID0gbmV3IFNpbXBsZUtleWJvYXJkKCcuc2ltcGxlLWtleWJvYXJkJywga2V5Ym9hcmRPcHRpb25zKTtcbiAgICB0aGlzLnNldExheW91dCh0aGlzLnNlbGVjdGVkTGF5b3V0KTtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgY29uc29sZS5sb2coJ0xheW91dDogJywgbGF5b3V0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0QWN0aXZlSW5wdXQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQgPSBpbnB1dDtcblxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zdCBpbnB1dFR5cGUgPSB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudD8udHlwZTtcbiAgICAgIGNvbnNvbGUubG9nKCdMYXlvdXQ6JywgYCR7aW5wdXRUeXBlfV8ke3RoaXMuc2VsZWN0ZWRMYXlvdXR9YCk7XG4gICAgfVxuXG4gICAgbGV0IHNlbGVjdGlvblN0YXJ0OiBudW1iZXI7XG4gICAgbGV0IHNlbGVjdGlvbkVuZDogbnVtYmVyO1xuICAgIGlmICh0aGlzLmlzSW5wdXROdW1lcmljKGlucHV0KSkge1xuICAgICAgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudC52YWx1ZS50b1N0cmluZygpLmxlbmd0aDtcbiAgICAgIHNlbGVjdGlvbkVuZCA9IHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50LnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb25TdGFydCA9IHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgc2VsZWN0aW9uRW5kID0gdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQuc2VsZWN0aW9uRW5kO1xuICAgIH1cblxuICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcblxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmxvZygnQ2FyZXQgc3RhcnQgYXQ6JywgdGhpcy5jYXJldFBvc2l0aW9uLCB0aGlzLmNhcmV0UG9zaXRpb25FbmQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRMYXlvdXQobGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkTGF5b3V0ID0gbGF5b3V0O1xuICAgIGlmICh0aGlzLmtleWJvYXJkKSB7XG4gICAgICB0aGlzLmtleWJvYXJkLnNldE9wdGlvbnMoe1xuICAgICAgICBsYXlvdXROYW1lOiBsYXlvdXQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVLZXlib2FyZENvbmZpZygpOiBLZXlib2FyZE9wdGlvbnMge1xuICAgIGNvbnN0IGxheW91dCA9IHtcbiAgICAgIFtTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuZGVmYXVsdF06IFtcbiAgICAgICAgJ2AgMSAyIDMgNCA1IDYgNyA4IDkgMCAtID0ge2Jrc3B9JyxcbiAgICAgICAgJ3t0YWJ9IHEgdyBlIHIgdCB5IHUgaSBvIHAgWyBdIFxcXFwnLFxuICAgICAgICBcIntsb2NrfSBhIHMgZCBmIGcgaCBqIGsgbCA7ICcge2VudGVyfVwiLFxuICAgICAgICAne3NoaWZ0fSB6IHggYyB2IGIgbiBtICwgLiAvIHtzaGlmdH0nLFxuICAgICAgICAne3NwYWNlfScsXG4gICAgICBdLFxuICAgICAgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5zaGlmdF06IFtcbiAgICAgICAgJ34gISBAICMgJCAlIF4gJmFtcDsgKiAoICkgXyArIHtia3NwfScsXG4gICAgICAgICd7dGFifSBRIFcgRSBSIFQgWSBVIEkgTyBQIHsgfSB8JyxcbiAgICAgICAgJ3tsb2NrfSBBIFMgRCBGIEcgSCBKIEsgTCA6IFwiIHtlbnRlcn0nLFxuICAgICAgICAne3NoaWZ0fSBaIFggQyBWIEIgTiBNICZsdDsgJmd0OyA/IHtzaGlmdH0nLFxuICAgICAgICAne3NwYWNlfScsXG4gICAgICBdLFxuICAgICAgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5udW1lcmljXTogWyc3IDggOScsICc0IDUgNicsICcxIDIgMycsICcwIHtia3NwfSddLFxuICAgIH07XG5cbiAgICBsZXQga2V5Ym9hcmRPcHRpb25zOiBLZXlib2FyZE9wdGlvbnMgPSB7XG4gICAgICBvbktleVByZXNzOiAoYnV0dG9uKSA9PiB0aGlzLmhhbmRsZUtleVByZXNzKGJ1dHRvbiksXG4gICAgICBtZXJnZURpc3BsYXk6IHRydWUsXG4gICAgICB0aGVtZTogJ2hnLXRoZW1lLWRlZmF1bHQgaGctbGF5b3V0LWRlZmF1bHQgbXlUaGVtZScsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIFtTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5CYWNrc3BhY2VdOiAnZGVsZXRlJyxcbiAgICAgIH0sXG4gICAgICBidXR0b25UaGVtZTogW1xuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6ICd2aXJ0dWFsLWtleWJvYXJkLWRlbGV0ZS1idXR0b24nLFxuICAgICAgICAgIGJ1dHRvbnM6IGAke1N5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkJhY2tzcGFjZX1gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGxheW91dCxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMudmlydHVhbEtleWJvYXJkQ29uZmlnPy5oYXNPd25Qcm9wZXJ0eSgnaW5wdXRNZXRob2QnKSkge1xuICAgICAgaWYgKHRoaXMudmlydHVhbEtleWJvYXJkQ29uZmlnLmlucHV0TWV0aG9kID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcy5vbmx5TW91c2VFdmVudHMpIHtcbiAgICAgICAga2V5Ym9hcmRPcHRpb25zID0ge1xuICAgICAgICAgIC4uLmtleWJvYXJkT3B0aW9ucyxcbiAgICAgICAgICB1c2VNb3VzZUV2ZW50czogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnZpcnR1YWxLZXlib2FyZENvbmZpZy5pbnB1dE1ldGhvZCA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dE1ldGhvZHMub25seVRvdWNoRXZlbnRzKSB7XG4gICAgICAgIGtleWJvYXJkT3B0aW9ucyA9IHtcbiAgICAgICAgICAuLi5rZXlib2FyZE9wdGlvbnMsXG4gICAgICAgICAgdXNlVG91Y2hFdmVudHM6IHRydWUsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ga2V5Ym9hcmRPcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0lucHV0QWxwaGFiZXRpYyhhY3RpdmVJbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5wdXRUeXBlID0gYWN0aXZlSW5wdXRFbGVtZW50Py50eXBlO1xuICAgIHJldHVybiBpbnB1dFR5cGUgJiYgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRUeXBlcy50ZXh0LCBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0VHlwZXMucGFzc3dvcmRdLnNvbWUoKGkpID0+IGkgPT09IGlucHV0VHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5wdXROdW1lcmljKGFjdGl2ZUlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBpbnB1dFR5cGUgPSBhY3RpdmVJbnB1dEVsZW1lbnQ/LnR5cGU7XG4gICAgcmV0dXJuIGlucHV0VHlwZSAmJiBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dFR5cGVzLm51bWJlcl0uc29tZSgoaSkgPT4gaSA9PT0gaW5wdXRUeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlS2V5UHJlc3MoYnV0dG9uOiBzdHJpbmcsIGU/OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmxvZygnS2V5IHByZXNzOicsIGJ1dHRvbik7XG4gICAgfVxuXG4gICAgaWYgKGJ1dHRvblswXSA9PT0gJyYnICYmIGJ1dHRvbi5sZW5ndGggPiAxKSB7XG4gICAgICBidXR0b24gPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGJ1dHRvbiwgJ3RleHQvaHRtbCcpLmJvZHkudGV4dENvbnRlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGJ1dHRvbiA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uU2hpZnQgfHwgYnV0dG9uID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5Mb2NrKSB7XG4gICAgICB0aGlzLnRvZ2dsZVNoaWZ0KCk7XG4gICAgfSBlbHNlIGlmIChidXR0b24gPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkRvbmUpIHtcbiAgICAgIHRoaXMuY2xvc2VQYW5lbC5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzQWNjZXB0ZWROb25TdGFuZGFyZEJ1dHRvbihidXR0b24pICYmICF0aGlzLmlzU3RhbmRhcmRCdXR0b24oYnV0dG9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IHRoaXMuaGFuZGxlQnV0dG9uT3V0cHV0KGJ1dHRvbik7XG5cbiAgICBpZiAodGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50LnZhbHVlID0gb3V0cHV0O1xuXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2FyZXQgYXQ6JywgdGhpcy5jYXJldFBvc2l0aW9uLCB0aGlzLmNhcmV0UG9zaXRpb25FbmQsICdCdXR0b24nLCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnRzKGJ1dHRvbik7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUJ1dHRvbk91dHB1dChidXR0b246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tbW9uUGFyYW1zOiBbbnVtYmVyLCBudW1iZXIsIGJvb2xlYW5dID0gdGhpcy5nZXRDb21tb25QYXJhbXMoKTtcbiAgICBsZXQgb3V0cHV0ID0gdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LnZhbHVlIHx8ICcnO1xuICAgIGlmICghdGhpcy5pc1N0YW5kYXJkQnV0dG9uKGJ1dHRvbikpIHtcbiAgICAgIGlmIChidXR0b24gPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkJhY2tzcGFjZSkge1xuICAgICAgICBvdXRwdXQgPSB0aGlzLnJlbW92ZUF0KG91dHB1dCwgLi4uY29tbW9uUGFyYW1zKTtcbiAgICAgIH0gZWxzZSBpZiAoYnV0dG9uID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5TcGFjZSkge1xuICAgICAgICBvdXRwdXQgPSB0aGlzLmFkZFN0cmluZ0F0KG91dHB1dCwgJyAnLCAuLi5jb21tb25QYXJhbXMpO1xuICAgICAgfSBlbHNlIGlmIChidXR0b24gPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLlRhYikge1xuICAgICAgICBvdXRwdXQgPSB0aGlzLmFkZFN0cmluZ0F0KG91dHB1dCwgJ1xcdCcsIC4uLmNvbW1vblBhcmFtcyk7XG4gICAgICB9IGVsc2UgaWYgKGJ1dHRvbiA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uRW50ZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUZXh0YXJlYSkge1xuICAgICAgICAgIG91dHB1dCA9IHRoaXMuYWRkU3RyaW5nQXQob3V0cHV0LCAnXFxuJywgLi4uY29tbW9uUGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQgPSB0aGlzLmFkZFN0cmluZ0F0KG91dHB1dCwgYnV0dG9uLCAuLi5jb21tb25QYXJhbXMpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBwcml2YXRlIGdldENvbW1vblBhcmFtcygpOiBbbnVtYmVyLCBudW1iZXIsIGJvb2xlYW5dIHtcbiAgICByZXR1cm4gW3RoaXMuY2FyZXRQb3NpdGlvbiB8fCAwLCB0aGlzLmNhcmV0UG9zaXRpb25FbmQgfHwgMCwgdHJ1ZV07XG4gIH1cblxuICBwcml2YXRlIGlzQWNjZXB0ZWROb25TdGFuZGFyZEJ1dHRvbihidXR0b246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBbXG4gICAgICBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5CYWNrc3BhY2UudG9TdHJpbmcoKSxcbiAgICAgIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLlNwYWNlLnRvU3RyaW5nKCksXG4gICAgICBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5UYWIudG9TdHJpbmcoKSxcbiAgICAgIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkVudGVyLnRvU3RyaW5nKCksXG4gICAgXS5pbmNsdWRlcyhidXR0b24pO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaEV2ZW50cyhidXR0b246IHN0cmluZykge1xuICAgIGNvbnN0IHsga2V5LCBjb2RlIH0gPSB0aGlzLmNvbnZlcnRGcm9tQnV0dG9uVG9Db2RlKGJ1dHRvbik7XG5cbiAgICBjb25zdCBldmVudEluaXQ6IEtleWJvYXJkRXZlbnRJbml0ID0ge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICBzaGlmdEtleTogdGhpcy5zZWxlY3RlZExheW91dCA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLnNoaWZ0LFxuICAgICAga2V5OiBrZXksXG4gICAgICBjb2RlOiBjb2RlLFxuICAgICAgbG9jYXRpb246IDAsXG4gICAgfTtcblxuICAgIC8vIFNpbXVsYXRlIGFsbCBuZWVkZWQgZXZlbnRzIG9uIGJhc2UgZWxlbWVudFxuICAgIHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50Py5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgZXZlbnRJbml0KSk7XG4gICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleXByZXNzJywgZXZlbnRJbml0KSk7XG4gICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleXVwJywgZXZlbnRJbml0KSk7XG4gIH1cblxuICAvKlxuICAgKiBBVVhJTElBUlkgTUVUSE9EU1xuICAgKiAqL1xuICBwcml2YXRlIGNvbnZlcnRGcm9tQnV0dG9uVG9Db2RlKGJ1dHRvbjogc3RyaW5nKTogeyBrZXk6IHN0cmluZzsgY29kZTogc3RyaW5nIH0ge1xuICAgIGxldCBrZXk6IHN0cmluZztcbiAgICBsZXQgY29kZTogc3RyaW5nO1xuICAgIGlmIChidXR0b24uaW5jbHVkZXMoJ3snKSAmJiBidXR0b24uaW5jbHVkZXMoJ30nKSkge1xuICAgICAgLy8gQ2FwaXRhbGl6ZSBuYW1lXG4gICAgICBrZXkgPSBidXR0b24uc2xpY2UoMSwgYnV0dG9uLmxlbmd0aCAtIDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBrZXkgPSBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7XG4gICAgICBjb2RlID0ga2V5O1xuXG4gICAgICAvLyBGaXggdG8gc3RhbmRhcmQga2V5IGNvZGVcbiAgICAgIGlmIChjb2RlLnRvTG93ZXJDYXNlKCkgPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkJhY2tzcGFjZS5zbGljZSgxLCBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5CYWNrc3BhY2UubGVuZ3RoIC0gMSkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjb2RlID0gJ0JhY2tzcGFjZSc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IGJ1dHRvbjtcbiAgICAgIGNvZGUgPSBOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcihidXR0b24pKSA/IGBEaWdpdCR7YnV0dG9ufWAgOiBgS2V5JHtidXR0b24udG9VcHBlckNhc2UoKX1gO1xuICAgIH1cblxuICAgIHJldHVybiB7IGtleSwgY29kZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVTaGlmdCgpIHtcbiAgICBsZXQgY3VycmVudExheW91dCA9IHRoaXMua2V5Ym9hcmQub3B0aW9ucy5sYXlvdXROYW1lO1xuICAgIGxldCBzZWxlY3RlZExheW91dDogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzID1cbiAgICAgIGN1cnJlbnRMYXlvdXQgPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5kZWZhdWx0ID8gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLnNoaWZ0IDogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHQ7XG5cbiAgICB0aGlzLnNldExheW91dChzZWxlY3RlZExheW91dCk7XG4gIH1cblxuICBwcml2YXRlIGlzU3RhbmRhcmRCdXR0b24oYnV0dG9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYnV0dG9uICYmICEoYnV0dG9uWzBdID09PSAneycgJiYgYnV0dG9uW2J1dHRvbi5sZW5ndGggLSAxXSA9PT0gJ30nKTtcbiAgfVxuXG4gIC8qXG4gICAqIE9VVFBVVCBTVFJJTkcgTUVUSE9EU1xuICAgKiAqL1xuICBwcml2YXRlIHJlbW92ZUF0KHNvdXJjZTogc3RyaW5nLCBwb3NpdGlvbiA9IHNvdXJjZS5sZW5ndGgsIHBvc2l0aW9uRW5kID0gc291cmNlLmxlbmd0aCwgbW92ZUNhcmV0ID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmIChwb3NpdGlvbiA9PT0gMCAmJiBwb3NpdGlvbkVuZCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG5cbiAgICBsZXQgb3V0cHV0OiBzdHJpbmc7XG5cbiAgICBpZiAocG9zaXRpb24gPT09IHBvc2l0aW9uRW5kKSB7XG4gICAgICBpZiAocG9zaXRpb24gJiYgcG9zaXRpb24gPj0gMCkge1xuICAgICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoMCwgcG9zaXRpb24gLSAxKSArIHNvdXJjZS5zbGljZShwb3NpdGlvbik7XG4gICAgICAgIGlmIChtb3ZlQ2FyZXQpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmV0UG9zaXRpb24oMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dCA9IHNvdXJjZS5zbGljZSgwLCAtMSk7XG4gICAgICAgIGlmIChtb3ZlQ2FyZXQpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmV0UG9zaXRpb24oMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0ID0gc291cmNlLnNsaWNlKDAsIHBvc2l0aW9uKSArIHNvdXJjZS5zbGljZShwb3NpdGlvbkVuZCk7XG4gICAgICBpZiAobW92ZUNhcmV0KSB7XG4gICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU3RyaW5nQXQoc291cmNlOiBzdHJpbmcsIHN0cjogc3RyaW5nLCBwb3NpdGlvbiA9IHNvdXJjZS5sZW5ndGgsIHBvc2l0aW9uRW5kID0gc291cmNlLmxlbmd0aCwgbW92ZUNhcmV0ID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm1heExlbmd0aCAhPT0gLTEgJiYgc291cmNlLmxlbmd0aCA+PSB0aGlzLm1heExlbmd0aCkge1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG5cbiAgICBsZXQgb3V0cHV0OiBzdHJpbmc7XG5cbiAgICBpZiAoIXBvc2l0aW9uICYmIHBvc2l0aW9uICE9PSAwKSB7XG4gICAgICBvdXRwdXQgPSBzb3VyY2UgKyBzdHI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dCA9IFtzb3VyY2Uuc2xpY2UoMCwgcG9zaXRpb24pLCBzdHIsIHNvdXJjZS5zbGljZShwb3NpdGlvbkVuZCldLmpvaW4oJycpO1xuICAgICAgaWYgKG1vdmVDYXJldCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNhcmV0UG9zaXRpb24oc3RyLmxlbmd0aCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICAvKlxuICAgKiBDQVJFVCBNRVRIT0RTXG4gICAqICovXG4gIHByaXZhdGUgY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIGxldCB0YXJnZXRUYWdOYW1lID0gJyc7XG4gICAgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lKSB7XG4gICAgICB0YXJnZXRUYWdOYW1lID0gZXZlbnQudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1RleHRJbnB1dCA9XG4gICAgICB0YXJnZXRUYWdOYW1lID09PSAndGV4dGFyZWEnIHx8XG4gICAgICAodGFyZ2V0VGFnTmFtZSA9PT0gJ2lucHV0JyAmJiBbJ3RleHQnLCAnc2VhcmNoJywgJ2VtYWlsJywgJ3Bhc3N3b3JkJywgJ3VybCcsICd0ZWwnXS5pbmNsdWRlcyhldmVudC50YXJnZXQudHlwZSkpO1xuXG4gICAgY29uc3QgaXNLZXlib2FyZCA9XG4gICAgICBldmVudC50YXJnZXQgPT09IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IHx8IChldmVudC50YXJnZXQgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSk7XG5cbiAgICBpZiAoaXNUZXh0SW5wdXQgJiYgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQgPT0gZXZlbnQudGFyZ2V0KSB7XG4gICAgICAvKipcbiAgICAgICAqIFRyYWNrcyBjdXJyZW50IGN1cnNvciBwb3NpdGlvblxuICAgICAgICogQXMga2V5cyBhcmUgcHJlc3NlZCwgdGV4dCB3aWxsIGJlIGFkZGVkL3JlbW92ZWQgYXQgdGhhdCBwb3NpdGlvbiB3aXRoaW4gdGhlIGlucHV0LlxuICAgICAgICovXG4gICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24oZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0LCBldmVudC50YXJnZXQuc2VsZWN0aW9uRW5kKTtcblxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0NhcmV0IGF0OicsIHRoaXMuY2FyZXRQb3NpdGlvbiwgdGhpcy5jYXJldFBvc2l0aW9uRW5kLCBldmVudCAmJiBldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCBldmVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAncG9pbnRlcnVwJyAmJiB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoIWlzS2V5Ym9hcmQgJiYgZXZlbnQ/LnR5cGUgIT09ICdzZWxlY3Rpb25jaGFuZ2UnKSB7XG4gICAgICAvKipcbiAgICAgICAqIHdlIG11c3QgZW5zdXJlIGNhcmV0UG9zaXRpb24gZG9lc24ndCBwZXJzaXN0IG9uY2UgcmVhY3RpdmF0ZWQuXG4gICAgICAgKi9cbiAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihudWxsKTtcblxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coYENhcmV0IHBvc2l0aW9uIHJlc2V0IGR1ZSB0byBcIiR7ZXZlbnQ/LnR5cGV9XCIgZXZlbnRgLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDYXJldFBvc2l0aW9uKGxlbmd0aDogbnVtYmVyLCBtaW51cyA9IGZhbHNlKSB7XG4gICAgY29uc3QgbmV3Q2FyZXRQb3MgPSB0aGlzLmNvbXB1dGVOZXdDYXJldFBvc2l0aW9uKGxlbmd0aCwgbWludXMpO1xuICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihuZXdDYXJldFBvcyk7XG4gICAgLy8gU2Nyb2xsIHRvIGJvdHRvbVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LnNjcm9sbFRvKHtcbiAgICAgICAgdG9wOiB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudC5zY3JvbGxIZWlnaHQsXG4gICAgICB9IGFzIFNjcm9sbFRvT3B0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVOZXdDYXJldFBvc2l0aW9uKGxlbmd0aDogbnVtYmVyLCBtaW51cyA9IGZhbHNlKSB7XG4gICAgbGV0IGNhcmV0UG9zaXRpb24gPSB0aGlzLmNhcmV0UG9zaXRpb247XG5cbiAgICBpZiAoY2FyZXRQb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICBpZiAobWludXMpIHtcbiAgICAgICAgaWYgKGNhcmV0UG9zaXRpb24gPiAwKSBjYXJldFBvc2l0aW9uID0gY2FyZXRQb3NpdGlvbiAtIGxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcmV0UG9zaXRpb24gPSBjYXJldFBvc2l0aW9uICsgbGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FyZXRQb3NpdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FyZXRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyIHwgbnVsbCwgZW5kUG9zaXRpb24gPSBwb3NpdGlvbik6IHZvaWQge1xuICAgIHRoaXMuY2FyZXRQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIHRoaXMuY2FyZXRQb3NpdGlvbkVuZCA9IGVuZFBvc2l0aW9uO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IChjKSAyMDIwIC0gMjAyNCAtIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIFN5c3RlbGFiIFRlY2hub2xvZ2llcywgU0EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gIH4gTk9USUNFOiAgQWxsIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaXMgYW5kIHJlbWFpbnMgdGhlIHByb3BlcnR5IG9mIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0c1xuICB+IGFmZmlsaWF0ZXMsIGlmIGFueS4gIFRoZSBpbnRlbGxlY3R1YWwgYW5kIHRlY2huaWNhbCBjb25jZXB0cyBjb250YWluZWQgaGVyZWluIGFyZSBwcm9wcmlldGFyeSB0byBJbnN0cnVtZW50YXRpb25cbiAgfiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0cyBhZmZpbGlhdGVzIGFuZCBtYXkgYmUgY292ZXJlZCBieSBVLlMuIGFuZCBmb3JlaWduIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMsIGFuZC9vclxuICB+IGFyZSBwcm90ZWN0ZWQgYnkgdHJhZGUgc2VjcmV0IG9yIGNvcHlyaWdodCBsYXcuIERpc3NlbWluYXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbiBvciByZXByb2R1Y3Rpb24gb2YgdGhpcyBtYXRlcmlhbCBpc1xuICB+IHN0cmljdGx5IGZvcmJpZGRlbiB1bmxlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGlzIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwic2ltcGxlLWtleWJvYXJkXCI+PC9kaXY+XG4iXX0=
387
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFDSCw2QkFBNkIsRUFDN0IsbUNBQW1DLEVBQ25DLDhCQUE4QixFQUNqQyxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQWlDLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBVTVHLE1BQU0sT0FBTyxnQ0FBZ0M7SUFFekMsV0FBVyxDQUFDLEtBQW9CO1FBQzVCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBSUQsYUFBYSxDQUFDLEtBQW1CO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBR0QsWUFBWSxDQUFDLEtBQVk7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFHRCxxQkFBcUIsQ0FBQyxLQUFZO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMs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Z0JBTTFDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTXpDLHFCQUFxQjtzQkFEcEIsWUFBWTt1QkFBQyx3QkFBd0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFxQnhDLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2ltcGxlS2V5Ym9hcmQgfSBmcm9tICdzaW1wbGUta2V5Ym9hcmQnO1xuaW1wb3J0IHtcbiAgICBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbixcbiAgICBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcyxcbiAgICBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHNcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWcsIFZJUlRVQUxfS0VZQk9BUkRfQ09ORklHIH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbmZpZyc7XG5pbXBvcnQgeyBLZXlib2FyZE9wdGlvbnMgfSBmcm9tICdzaW1wbGUta2V5Ym9hcmQvYnVpbGQvaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW10sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVLZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQuaXNUcnVzdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNhcmV0RXZlbnRIYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpwb2ludGVydXAnLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptb3VzZXVwJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVNb3VzZVVwKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYXJldEV2ZW50SGFuZGxlcihldmVudCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNlbGVjdCcsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlU2VsZWN0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhcmV0RXZlbnRIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2VsZWN0aW9uY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xuICAgIH1cblxuICAgIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50Py5tYXhMZW5ndGggPz8gLTE7XG4gICAgfVxuXG4gICAgZ2V0IGlzVGV4dGFyZWEoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudD8udHlwZSA9PT0gJ3RleHRhcmVhJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVidWcgPSBmYWxzZTtcbiAgICBwcml2YXRlIHNlbGVjdGVkTGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMgPSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuZGVmYXVsdDtcbiAgICBwcml2YXRlIGtleWJvYXJkOiBTaW1wbGVLZXlib2FyZDtcbiAgICBwcml2YXRlIGNhcmV0UG9zaXRpb246IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgY2FyZXRQb3NpdGlvbkVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBhY3RpdmVJbnB1dEVsZW1lbnQhOiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGw7XG4gICAgcHJpdmF0ZSBzaGlmdFByZXNzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBjbG9zZVBhbmVsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+LCBAT3B0aW9uYWwoKSBASW5qZWN0KFZJUlRVQUxfS0VZQk9BUkRfQ09ORklHKSBwcml2YXRlIHZpcnR1YWxLZXlib2FyZENvbmZpZzogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWcsKSB7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSB7XG4gICAgICAgICAgICBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHRdOiBbXG4gICAgICAgICAgICAgICAgJ2AgMSAyIDMgNCA1IDYgNyA4IDkgMCAtID0ge2Jrc3B9JyxcbiAgICAgICAgICAgICAgICAne3RhYn0gcSB3IGUgciB0IHkgdSBpIG8gcCBbIF0gXFxcXCcsXG4gICAgICAgICAgICAgICAgXCJ7bG9ja30gYSBzIGQgZiBnIGggaiBrIGwgOyAnIHtlbnRlcn1cIixcbiAgICAgICAgICAgICAgICAne3NoaWZ0fSB6IHggYyB2IGIgbiBtICwgLiAvIHtzaGlmdH0nLFxuICAgICAgICAgICAgICAgICd7c3BhY2V9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLnNoaWZ0XTogW1xuICAgICAgICAgICAgICAgICd+ICEgQCAjICQgJSBeICZhbXA7ICogKCApIF8gKyB7YmtzcH0nLFxuICAgICAgICAgICAgICAgICd7dGFifSBRIFcgRSBSIFQgWSBVIEkgTyBQIHsgfSB8JyxcbiAgICAgICAgICAgICAgICAne2xvY2t9IEEgUyBEIEYgRyBIIEogSyBMIDogXCIge2VudGVyfScsXG4gICAgICAgICAgICAgICAgJ3tzaGlmdH0gWiBYIEMgViBCIE4gTSAmbHQ7ICZndDsgPyB7c2hpZnR9JyxcbiAgICAgICAgICAgICAgICAne3NwYWNlfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5udW1lcmljXTogWyc3IDggOScsICc0IDUgNicsICcxIDIgMycsICcwIHtia3NwfSddLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGtleWJvYXJkT3B0aW9uczogS2V5Ym9hcmRPcHRpb25zID0gdGhpcy5wcmVwYXJlS2V5Ym9hcmRDb25maWcoKTtcbiAgICAgICAgdGhpcy5rZXlib2FyZCA9IG5ldyBTaW1wbGVLZXlib2FyZCgnLnNpbXBsZS1rZXlib2FyZCcsIGtleWJvYXJkT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc2V0TGF5b3V0KHRoaXMuc2VsZWN0ZWRMYXlvdXQpO1xuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0xheW91dDogJywgbGF5b3V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBY3RpdmVJbnB1dChpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQgPSBpbnB1dDtcblxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRUeXBlID0gdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LnR5cGU7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnTGF5b3V0OicsIGAke2lucHV0VHlwZX1fJHt0aGlzLnNlbGVjdGVkTGF5b3V0fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kIH0gPSB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudDtcbiAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuXG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQ2FyZXQgc3RhcnQgYXQ6JywgdGhpcy5jYXJldFBvc2l0aW9uLCB0aGlzLmNhcmV0UG9zaXRpb25FbmQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNBY3RpdmVJbnB1dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRMYXlvdXQobGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExheW91dCA9IGxheW91dDtcbiAgICAgICAgaWYgKHRoaXMua2V5Ym9hcmQpIHtcbiAgICAgICAgICAgIHRoaXMua2V5Ym9hcmQuc2V0T3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgbGF5b3V0TmFtZTogbGF5b3V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVLZXlib2FyZENvbmZpZygpOiBLZXlib2FyZE9wdGlvbnMge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSB7XG4gICAgICAgICAgICBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHRdOiBbXG4gICAgICAgICAgICAgICAgJ2AgMSAyIDMgNCA1IDYgNyA4IDkgMCAtID0ge2Jrc3B9JyxcbiAgICAgICAgICAgICAgICAne3RhYn0gcSB3IGUgciB0IHkgdSBpIG8gcCBbIF0gXFxcXCcsXG4gICAgICAgICAgICAgICAgXCJ7bG9ja30gYSBzIGQgZiBnIGggaiBrIGwgOyAnIHtlbnRlcn1cIixcbiAgICAgICAgICAgICAgICAne3NoaWZ0fSB6IHggYyB2IGIgbiBtICwgLiAvIHtzaGlmdH0nLFxuICAgICAgICAgICAgICAgICd7c3BhY2V9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLnNoaWZ0XTogW1xuICAgICAgICAgICAgICAgICd+ICEgQCAjICQgJSBeICZhbXA7ICogKCApIF8gKyB7YmtzcH0nLFxuICAgICAgICAgICAgICAgICd7dGFifSBRIFcgRSBSIFQgWSBVIEkgTyBQIHsgfSB8JyxcbiAgICAgICAgICAgICAgICAne2xvY2t9IEEgUyBEIEYgRyBIIEogSyBMIDogXCIge2VudGVyfScsXG4gICAgICAgICAgICAgICAgJ3tzaGlmdH0gWiBYIEMgViBCIE4gTSAmbHQ7ICZndDsgPyB7c2hpZnR9JyxcbiAgICAgICAgICAgICAgICAne3NwYWNlfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5udW1lcmljXTogWyc3IDggOScsICc0IDUgNicsICcxIDIgMycsICcwIHtia3NwfSddLFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBrZXlib2FyZE9wdGlvbnM6IEtleWJvYXJkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG9uS2V5UHJlc3M6IChidXR0b24pID0+IHRoaXMuaGFuZGxlS2V5UHJlc3MoYnV0dG9uKSxcbiAgICAgICAgICAgIG1lcmdlRGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICAgIHRoZW1lOiAnaGctdGhlbWUtZGVmYXVsdCBoZy1sYXlvdXQtZGVmYXVsdCBteVRoZW1lJyxcbiAgICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgICAgICBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uQmFja3NwYWNlXTogJ2RlbGV0ZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnV0dG9uVGhlbWU6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiAndmlydHVhbC1rZXlib2FyZC1kZWxldGUtYnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogYCR7U3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uQmFja3NwYWNlfWAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsYXlvdXQsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMudmlydHVhbEtleWJvYXJkQ29uZmlnPy5oYXNPd25Qcm9wZXJ0eSgnaW5wdXRNZXRob2QnKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlydHVhbEtleWJvYXJkQ29uZmlnLmlucHV0TWV0aG9kID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcy5vbmx5TW91c2VFdmVudHMpIHtcbiAgICAgICAgICAgICAgICBrZXlib2FyZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmtleWJvYXJkT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgdXNlTW91c2VFdmVudHM6IHRydWUsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpcnR1YWxLZXlib2FyZENvbmZpZy5pbnB1dE1ldGhvZCA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dE1ldGhvZHMub25seVRvdWNoRXZlbnRzKSB7XG4gICAgICAgICAgICAgICAga2V5Ym9hcmRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5rZXlib2FyZE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHVzZVRvdWNoRXZlbnRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBrZXlib2FyZE9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVLZXlQcmVzcyhidXR0b246IHN0cmluZywgZT86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnS2V5IHByZXNzOicsIGJ1dHRvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnV0dG9uWzBdID09PSAnJicgJiYgYnV0dG9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGJ1dHRvbiA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoYnV0dG9uLCAndGV4dC9odG1sJykuYm9keS50ZXh0Q29udGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChidXR0b24gPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLlNoaWZ0IHx8IGJ1dHRvbiA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uTG9jaykge1xuICAgICAgICAgICAgdGhpcy5zaGlmdFByZXNzZWQgPSBidXR0b24gPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLlNoaWZ0O1xuICAgICAgICAgICAgdGhpcy50b2dnbGVTaGlmdExheW91dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGJ1dHRvbiA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uRG9uZSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBhbmVsLmVtaXQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc0FjY2VwdGVkTm9uU3RhbmRhcmRCdXR0b24oYnV0dG9uKSAmJiAhdGhpcy5pc1N0YW5kYXJkQnV0dG9uKGJ1dHRvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG91dHB1dCA9IHRoaXMuaGFuZGxlQnV0dG9uT3V0cHV0KGJ1dHRvbik7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudC52YWx1ZSA9IG91dHB1dDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ2FyZXQgYXQ6JywgdGhpcy5jYXJldFBvc2l0aW9uLCB0aGlzLmNhcmV0UG9zaXRpb25FbmQsICdCdXR0b24nLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudHMoYnV0dG9uKTtcblxuICAgICAgICBpZiAodGhpcy5zaGlmdFByZXNzZWQpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlU2hpZnRMYXlvdXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNoaWZ0UHJlc3NlZCA9IGJ1dHRvbiA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uU2hpZnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVCdXR0b25PdXRwdXQoYnV0dG9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjb21tb25QYXJhbXM6IFtudW1iZXIsIG51bWJlciwgYm9vbGVhbl0gPSB0aGlzLmdldENvbW1vblBhcmFtcygpO1xuICAgICAgICBsZXQgb3V0cHV0ID0gdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LnZhbHVlIHx8ICcnO1xuICAgICAgICBpZiAoIXRoaXMuaXNTdGFuZGFyZEJ1dHRvbihidXR0b24pKSB7XG4gICAgICAgICAgICBpZiAoYnV0dG9uID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5CYWNrc3BhY2UpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSB0aGlzLnJlbW92ZUF0KG91dHB1dCwgLi4uY29tbW9uUGFyYW1zKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYnV0dG9uID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5TcGFjZSkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMuYWRkU3RyaW5nQXQob3V0cHV0LCAnICcsIC4uLmNvbW1vblBhcmFtcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJ1dHRvbiA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uVGFiKSB7XG4gICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZyBmb3IgdGFiXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJ1dHRvbiA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uRW50ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1RleHRhcmVhKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMuYWRkU3RyaW5nQXQob3V0cHV0LCAnXFxuJywgLi4uY29tbW9uUGFyYW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dHB1dCA9IHRoaXMuYWRkU3RyaW5nQXQob3V0cHV0LCBidXR0b24sIC4uLmNvbW1vblBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29tbW9uUGFyYW1zKCk6IFtudW1iZXIsIG51bWJlciwgYm9vbGVhbl0ge1xuICAgICAgICByZXR1cm4gW3RoaXMuY2FyZXRQb3NpdGlvbiB8fCAwLCB0aGlzLmNhcmV0UG9zaXRpb25FbmQgfHwgMCwgdHJ1ZV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FjY2VwdGVkTm9uU3RhbmRhcmRCdXR0b24oYnV0dG9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkJhY2tzcGFjZS50b1N0cmluZygpLFxuICAgICAgICAgICAgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uU3BhY2UudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLlRhYi50b1N0cmluZygpLFxuICAgICAgICAgICAgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uRW50ZXIudG9TdHJpbmcoKSxcbiAgICAgICAgXS5pbmNsdWRlcyhidXR0b24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlzcGF0Y2hFdmVudHMoYnV0dG9uOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qge2tleSwgY29kZX0gPSB0aGlzLmNvbnZlcnRGcm9tQnV0dG9uVG9Db2RlKGJ1dHRvbik7XG5cbiAgICAgICAgY29uc3QgZXZlbnRJbml0OiBLZXlib2FyZEV2ZW50SW5pdCA9IHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICAgICAgc2hpZnRLZXk6IHRoaXMuc2VsZWN0ZWRMYXlvdXQgPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5zaGlmdCxcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgY29kZTogY29kZSxcbiAgICAgICAgICAgIGxvY2F0aW9uOiAwLFxuICAgICAgICB9O1xuICAgICAgICAvLyBTaW11bGF0ZSBhbGwgbmVlZGVkIGV2ZW50cyBvbiBiYXNlIGVsZW1lbnRcbiAgICAgICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleWRvd24nLCBldmVudEluaXQpKTtcbiAgICAgICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleXByZXNzJywgZXZlbnRJbml0KSk7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50Py5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnLCB7YnViYmxlczogdHJ1ZX0pKTtcbiAgICAgICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleXVwJywgZXZlbnRJbml0KSk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBBVVhJTElBUlkgTUVUSE9EU1xuICAgICAqICovXG4gICAgcHJpdmF0ZSBjb252ZXJ0RnJvbUJ1dHRvblRvQ29kZShidXR0b246IHN0cmluZyk6IHsga2V5OiBzdHJpbmc7IGNvZGU6IHN0cmluZyB9IHtcbiAgICAgICAgbGV0IGtleTogc3RyaW5nO1xuICAgICAgICBsZXQgY29kZTogc3RyaW5nO1xuICAgICAgICBpZiAoYnV0dG9uLmluY2x1ZGVzKCd7JykgJiYgYnV0dG9uLmluY2x1ZGVzKCd9JykpIHtcbiAgICAgICAgICAgIC8vIENhcGl0YWxpemUgbmFtZVxuICAgICAgICAgICAga2V5ID0gYnV0dG9uLnNsaWNlKDEsIGJ1dHRvbi5sZW5ndGggLSAxKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAga2V5ID0ga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpO1xuICAgICAgICAgICAgY29kZSA9IGtleTtcblxuICAgICAgICAgICAgLy8gRml4IHRvIHN0YW5kYXJkIGtleSBjb2RlXG4gICAgICAgICAgICBpZiAoY29kZS50b0xvd2VyQ2FzZSgpID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5CYWNrc3BhY2Uuc2xpY2UoMSwgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uQmFja3NwYWNlLmxlbmd0aCAtIDEpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gJ0JhY2tzcGFjZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXkgPSBidXR0b247XG4gICAgICAgICAgICBjb2RlID0gTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIoYnV0dG9uKSkgPyBgRGlnaXQke2J1dHRvbn1gIDogYEtleSR7YnV0dG9uLnRvVXBwZXJDYXNlKCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7a2V5LCBjb2RlfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZVNoaWZ0TGF5b3V0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50TGF5b3V0ID0gdGhpcy5rZXlib2FyZC5vcHRpb25zLmxheW91dE5hbWU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMgPVxuICAgICAgICAgICAgY3VycmVudExheW91dCA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHQgPyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuc2hpZnQgOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuZGVmYXVsdDtcblxuICAgICAgICB0aGlzLnNldExheW91dChzZWxlY3RlZExheW91dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1N0YW5kYXJkQnV0dG9uKGJ1dHRvbjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBidXR0b24gJiYgIShidXR0b25bMF0gPT09ICd7JyAmJiBidXR0b25bYnV0dG9uLmxlbmd0aCAtIDFdID09PSAnfScpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogT1VUUFVUIFNUUklORyBNRVRIT0RTXG4gICAgICogKi9cbiAgICBwcml2YXRlIHJlbW92ZUF0KHNvdXJjZTogc3RyaW5nLCBwb3NpdGlvbiA9IHNvdXJjZS5sZW5ndGgsIHBvc2l0aW9uRW5kID0gc291cmNlLmxlbmd0aCwgbW92ZUNhcmV0ID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAocG9zaXRpb24gPT09IDAgJiYgcG9zaXRpb25FbmQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb3V0cHV0OiBzdHJpbmc7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSBwb3NpdGlvbkVuZCkge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uICYmIHBvc2l0aW9uID49IDApIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoMCwgcG9zaXRpb24gLSAxKSArIHNvdXJjZS5zbGljZShwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgaWYgKG1vdmVDYXJldCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmV0UG9zaXRpb24oMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgICAgIGlmIChtb3ZlQ2FyZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJldFBvc2l0aW9uKDEsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dHB1dCA9IHNvdXJjZS5zbGljZSgwLCBwb3NpdGlvbikgKyBzb3VyY2Uuc2xpY2UocG9zaXRpb25FbmQpO1xuICAgICAgICAgICAgaWYgKG1vdmVDYXJldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkU3RyaW5nQXQoc291cmNlOiBzdHJpbmcsIHN0cjogc3RyaW5nLCBwb3NpdGlvbiA9IHNvdXJjZS5sZW5ndGgsIHBvc2l0aW9uRW5kID0gc291cmNlLmxlbmd0aCwgbW92ZUNhcmV0ID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5tYXhMZW5ndGggIT09IC0xICYmIHNvdXJjZS5sZW5ndGggPj0gdGhpcy5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb3V0cHV0OiBzdHJpbmc7XG5cbiAgICAgICAgaWYgKCFwb3NpdGlvbiAmJiBwb3NpdGlvbiAhPT0gMCkge1xuICAgICAgICAgICAgb3V0cHV0ID0gc291cmNlICsgc3RyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0ID0gW3NvdXJjZS5zbGljZSgwLCBwb3NpdGlvbiksIHN0ciwgc291cmNlLnNsaWNlKHBvc2l0aW9uRW5kKV0uam9pbignJyk7XG4gICAgICAgICAgICBpZiAobW92ZUNhcmV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJldFBvc2l0aW9uKHN0ci5sZW5ndGgsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgLypcbiAgICAgICAqIENBUkVUIE1FVEhPRFNcbiAgICAgICAqICovXG4gICAgcHJpdmF0ZSBjYXJldEV2ZW50SGFuZGxlcihldmVudDogYW55KSB7XG4gICAgICAgIGxldCB0YXJnZXRUYWdOYW1lID0gJyc7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQudGFnTmFtZSkge1xuICAgICAgICAgICAgdGFyZ2V0VGFnTmFtZSA9IGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc1RleHRJbnB1dCA9XG4gICAgICAgICAgICB0YXJnZXRUYWdOYW1lID09PSAndGV4dGFyZWEnIHx8XG4gICAgICAgICAgICAodGFyZ2V0VGFnTmFtZSA9PT0gJ2lucHV0JyAmJiBbJ3RleHQnLCAnc2VhcmNoJywgJ2VtYWlsJywgJ3Bhc3N3b3JkJywgJ3VybCcsICd0ZWwnXS5pbmNsdWRlcyhldmVudC50YXJnZXQudHlwZSkpO1xuXG4gICAgICAgIGNvbnN0IGlzS2V5Ym9hcmQgPVxuICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID09PSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCB8fCAoZXZlbnQudGFyZ2V0ICYmIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpO1xuXG4gICAgICAgIGlmIChpc1RleHRJbnB1dCAmJiB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudCA9PSBldmVudC50YXJnZXQpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVHJhY2tzIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uXG4gICAgICAgICAgICAgKiBBcyBrZXlzIGFyZSBwcmVzc2VkLCB0ZXh0IHdpbGwgYmUgYWRkZWQvcmVtb3ZlZCBhdCB0aGF0IHBvc2l0aW9uIHdpdGhpbiB0aGUgaW5wdXQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQsIGV2ZW50LnRhcmdldC5zZWxlY3Rpb25FbmQpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDYXJldCBhdDonLCB0aGlzLmNhcmV0UG9zaXRpb24sIHRoaXMuY2FyZXRQb3NpdGlvbkVuZCwgZXZlbnQgJiYgZXZlbnQudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdwb2ludGVydXAnICYmIHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzS2V5Ym9hcmQgJiYgZXZlbnQ/LnR5cGUgIT09ICdzZWxlY3Rpb25jaGFuZ2UnKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHdlIG11c3QgZW5zdXJlIGNhcmV0UG9zaXRpb24gZG9lc24ndCBwZXJzaXN0IG9uY2UgcmVhY3RpdmF0ZWQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihudWxsKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ2FyZXQgcG9zaXRpb24gcmVzZXQgZHVlIHRvIFwiJHtldmVudD8udHlwZX1cIiBldmVudGAsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNBY3RpdmVJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50Py5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICAgIHRoaXMuY2FyZXRQb3NpdGlvbixcbiAgICAgICAgICAgIHRoaXMuY2FyZXRQb3NpdGlvbkVuZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2FyZXRQb3NpdGlvbihsZW5ndGg6IG51bWJlciwgbWludXMgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBuZXdDYXJldFBvcyA9IHRoaXMuY29tcHV0ZU5ld0NhcmV0UG9zaXRpb24obGVuZ3RoLCBtaW51cyk7XG4gICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihuZXdDYXJldFBvcyk7XG4gICAgICAgIC8vIFNjcm9sbCB0byBib3R0b21cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudD8uc2Nyb2xsVG8oe1xuICAgICAgICAgICAgICAgIHRvcDogdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgfSBhcyBTY3JvbGxUb09wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVOZXdDYXJldFBvc2l0aW9uKGxlbmd0aDogbnVtYmVyLCBtaW51cyA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBjYXJldFBvc2l0aW9uID0gdGhpcy5jYXJldFBvc2l0aW9uO1xuXG4gICAgICAgIGlmIChjYXJldFBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChtaW51cykge1xuICAgICAgICAgICAgICAgIGlmIChjYXJldFBvc2l0aW9uID4gMCkgY2FyZXRQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb24gLSBsZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhcmV0UG9zaXRpb24gPSBjYXJldFBvc2l0aW9uICsgbGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYXJldFBvc2l0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q2FyZXRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyIHwgbnVsbCwgZW5kUG9zaXRpb24gPSBwb3NpdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmNhcmV0UG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgdGhpcy5jYXJldFBvc2l0aW9uRW5kID0gZW5kUG9zaXRpb247XG4gICAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAoYykgMjAyMCAtIDIwMjQgLSBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55IGFuZCBTeXN0ZWxhYiBUZWNobm9sb2dpZXMsIFNBLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICB+IE5PVElDRTogIEFsbCBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzIGFuZCByZW1haW5zIHRoZSBwcm9wZXJ0eSBvZiBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55IGFuZCBpdHNcbiAgfiBhZmZpbGlhdGVzLCBpZiBhbnkuICBUaGUgaW50ZWxsZWN0dWFsIGFuZCB0ZWNobmljYWwgY29uY2VwdHMgY29udGFpbmVkIGhlcmVpbiBhcmUgcHJvcHJpZXRhcnkgdG8gSW5zdHJ1bWVudGF0aW9uXG4gIH4gTGFib3JhdG9yeSBDb21wYW55IGFuZCBpdHMgYWZmaWxpYXRlcyBhbmQgbWF5IGJlIGNvdmVyZWQgYnkgVS5TLiBhbmQgZm9yZWlnbiBwYXRlbnRzIGFuZCBwYXRlbnQgYXBwbGljYXRpb25zLCBhbmQvb3JcbiAgfiBhcmUgcHJvdGVjdGVkIGJ5IHRyYWRlIHNlY3JldCBvciBjb3B5cmlnaHQgbGF3LiBEaXNzZW1pbmF0aW9uIG9mIHRoaXMgaW5mb3JtYXRpb24gb3IgcmVwcm9kdWN0aW9uIG9mIHRoaXMgbWF0ZXJpYWwgaXNcbiAgfiBzdHJpY3RseSBmb3JiaWRkZW4gdW5sZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55LlxuICAtLT5cblxuPGRpdiBjbGFzcz1cInNpbXBsZS1rZXlib2FyZFwiPjwvZGl2PlxuIl19
@@ -1,3 +1,3 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const VIRTUAL_KEYBOARD_CONFIG = new InjectionToken('VIRTUAL_KEYBOARD_CONFIG');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FBZ0MseUJBQXlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcywgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgVklSVFVBTF9LRVlCT0FSRF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWc+KCdWSVJUVUFMX0tFWUJPQVJEX0NPTkZJRycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnIHtcbiAgbGF5b3V0PzogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzO1xuICBpbnB1dE1ldGhvZD86IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRNZXRob2RzO1xuICBzaG93SWNvbj86IGJvb2xlYW47XG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FBZ0MseUJBQXlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcywgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgVklSVFVBTF9LRVlCT0FSRF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWc+KCdWSVJUVUFMX0tFWUJPQVJEX0NPTkZJRycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnIHtcbiAgICBsYXlvdXQ/OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHM7XG4gICAgaW5wdXRNZXRob2Q/OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcztcbiAgICBzaG93SWNvbj86IGJvb2xlYW47XG59XG4iXX0=
@@ -8,18 +8,23 @@
8
8
  */
9
9
  import { Directive, HostListener, Inject, Input, Optional, } from '@angular/core';
10
10
  import { DOCUMENT } from '@angular/common';
11
- import { SystelabVirtualKeyboardInputTypes, SystelabVirtualKeyboardLayouts } from './constants';
11
+ import { SystelabVirtualKeyboardInputModes, SystelabVirtualKeyboardLayouts } from './constants';
12
12
  import { VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';
13
13
  import * as i0 from "@angular/core";
14
14
  import * as i1 from "./systelab-virtual-keyboard-overlay.service";
15
15
  export class SystelabVirtualKeyboardDirective {
16
16
  onDocumentScroll() {
17
+ if (!this.vkEnabled) {
18
+ return;
19
+ }
17
20
  if (this.overlayService.isCreated()) {
18
21
  this.overlayService.updatePosition();
19
22
  }
20
23
  }
21
- onFocus(event) {
22
- console.log('Focused');
24
+ onFocus() {
25
+ if (!this.vkEnabled) {
26
+ return;
27
+ }
23
28
  if (this.overlayService.isCreated()) {
24
29
  this.closePanel();
25
30
  }
@@ -86,11 +91,18 @@ export class SystelabVirtualKeyboardDirective {
86
91
  }
87
92
  }
88
93
  ngOnDestroy() {
94
+ if (this.vkEnabled && this.config?.showIcon) {
95
+ const keyboardIcon = this.elementRef.nativeElement.parentElement.querySelector('i');
96
+ keyboardIcon.removeEventListener('click', this.togglePanel.bind(this));
97
+ }
89
98
  if (this.overlayService.isCreated()) {
90
99
  this.overlayService.destroy();
91
100
  }
92
101
  }
93
102
  togglePanel() {
103
+ if (!this.vkEnabled) {
104
+ return;
105
+ }
94
106
  if (this.overlayService.isOpen()) {
95
107
  this.closePanel();
96
108
  }
@@ -99,6 +111,9 @@ export class SystelabVirtualKeyboardDirective {
99
111
  }
100
112
  }
101
113
  openPanel() {
114
+ if (!this.vkEnabled) {
115
+ return;
116
+ }
102
117
  if (this.overlayService.isCreated()) {
103
118
  this.overlayService.destroy();
104
119
  }
@@ -127,12 +142,15 @@ export class SystelabVirtualKeyboardDirective {
127
142
  }
128
143
  }
129
144
  isInputAlphabetic(activeInputElement) {
130
- const inputType = activeInputElement?.type;
131
- return inputType && [SystelabVirtualKeyboardInputTypes.text, SystelabVirtualKeyboardInputTypes.password].some((i) => i === inputType);
145
+ const inputMode = this.getInputMode(activeInputElement);
146
+ return inputMode && [SystelabVirtualKeyboardInputModes.text, SystelabVirtualKeyboardInputModes.password].some((i) => i === inputMode);
132
147
  }
133
148
  isInputNumeric(activeInputElement) {
134
- const inputType = activeInputElement?.type;
135
- return inputType && [SystelabVirtualKeyboardInputTypes.number].some((i) => i === inputType);
149
+ const inputMode = this.getInputMode(activeInputElement);
150
+ return inputMode && [SystelabVirtualKeyboardInputModes.numeric].some((i) => i === inputMode);
151
+ }
152
+ getInputMode(activeInputElement) {
153
+ return activeInputElement?.inputMode ?? activeInputElement?.type;
136
154
  }
137
155
  closePanel() {
138
156
  this.overlayService.destroy();
@@ -190,4 +208,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
190
208
  }], vkConfig: [{
191
209
  type: Input
192
210
  }] } });
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHaEcsT0FBTyxFQUFpQyx1QkFBdUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7QUFLNUcsTUFBTSxPQUFPLGdDQUFnQztJQUszQyxnQkFBZ0I7UUFDZCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN0QztJQUNILENBQUM7SUFHRCxPQUFPLENBQUMsS0FBOEI7UUFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBR0QsSUFDSSxTQUFTLENB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QUFDO1NBQ3hDO0lBQ0gsQ0FBQzs4R0FwS1UsZ0NBQWdDLDBIQTBFakMsUUFBUSxhQUNJLHVCQUF1QjtrR0EzRWxDLGdDQUFnQzs7MkZBQWhDLGdDQUFnQztrQkFINUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUNBQXVDO2lCQUNsRDs7MEJBMkVJLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx1QkFBdUI7eUNBdEU3QyxnQkFBZ0I7c0JBSmYsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQzNDLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUMxQyxZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3ZDLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUTNDLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBYzdCLFNBQVM7c0JBRFosS0FBSztnQkFjRixhQUFhO3NCQURoQixLQUFLO2dCQWNGLE9BQU87c0JBRFYsS0FBSztnQkFVRixRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIwIC0gMjAyNCAtIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIFN5c3RlbGFiIFRlY2hub2xvZ2llcywgU0EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOT1RJQ0U6ICBBbGwgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBpcyBhbmQgcmVtYWlucyB0aGUgcHJvcGVydHkgb2YgSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgaXRzXG4gKiBhZmZpbGlhdGVzLCBpZiBhbnkuICBUaGUgaW50ZWxsZWN0dWFsIGFuZCB0ZWNobmljYWwgY29uY2VwdHMgY29udGFpbmVkIGhlcmVpbiBhcmUgcHJvcHJpZXRhcnkgdG8gSW5zdHJ1bWVudGF0aW9uXG4gKiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0cyBhZmZpbGlhdGVzIGFuZCBtYXkgYmUgY292ZXJlZCBieSBVLlMuIGFuZCBmb3JlaWduIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMsIGFuZC9vclxuICogYXJlIHByb3RlY3RlZCBieSB0cmFkZSBzZWNyZXQgb3IgY29weXJpZ2h0IGxhdy4gRGlzc2VtaW5hdGlvbiBvZiB0aGlzIGluZm9ybWF0aW9uIG9yIHJlcHJvZHVjdGlvbiBvZiB0aGlzIG1hdGVyaWFsIGlzXG4gKiBzdHJpY3RseSBmb3JiaWRkZW4gdW5sZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55LlxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudFJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0VHlwZXMsIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLW92ZXJsYXkuc2VydmljZSc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZywgVklSVFVBTF9LRVlCT0FSRF9DT05GSUcgfSBmcm9tICcuL3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQuY29uZmlnJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnaW5wdXRbdmtFbmFibGVkXSwgdGV4dGFyZWFbdmtFbmFibGVkXScsXG59KVxuZXhwb3J0IGNsYXNzIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6dG91Y2htb3ZlJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnRvdWNoZW5kJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OndoZWVsJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6c2Nyb2xsJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudFNjcm9sbCgpIHtcbiAgICBpZiAodGhpcy5vdmVybGF5U2VydmljZS5pc0NyZWF0ZWQoKSkge1xuICAgICAgdGhpcy5vdmVybGF5U2VydmljZS51cGRhdGVQb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJywgWyckZXZlbnQnXSlcbiAgb25Gb2N1cyhldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnRm9jdXNlZCcpO1xuICAgIGlmICh0aGlzLm92ZXJsYXlTZXJ2aWNlLmlzQ3JlYXRlZCgpKSB7XG4gICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICB9XG4gICAgdGhpcy5vdmVybGF5U2VydmljZS5zZXRGb2N1c0Rpc3BhdGNoZWQodHJ1ZSk7XG4gICAgaWYgKCF0aGlzLm92ZXJsYXlTZXJ2aWNlLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLm9wZW5QYW5lbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBzZXQgdmtFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4gfCBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIGVuYWJsZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuYWJsZWQgPSBlbmFibGVkO1xuICAgIH1cbiAgfTtcbiAgZ2V0IHZrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXhlZEJvdHRvbSA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBnZXQgdmtGaXhlZEJvdHRvbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZEJvdHRvbTtcbiAgfVxuICBzZXQgdmtGaXhlZEJvdHRvbShmaXhlZEJvdHRvbTogYm9vbGVhbiB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgZml4ZWRCb3R0b20gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmZpeGVkQm90dG9tID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maXhlZEJvdHRvbSA9IGZpeGVkQm90dG9tO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVidWcgPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZ2V0IHZrRGVidWcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVidWc7XG4gIH1cbiAgc2V0IHZrRGVidWcoZGVidWc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRlYnVnID0gZGVidWc7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZzogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWc7XG4gIEBJbnB1dCgpXG4gIGdldCB2a0NvbmZpZygpOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICB9XG4gIHNldCB2a0NvbmZpZyhjb25maWc6IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIH1cblxuICBwcml2YXRlIHBhbmVsUmVmITogQ29tcG9uZW50UmVmPFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50PjtcbiAgcHJpdmF0ZSBzaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBvdmVybGF5U2VydmljZTogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRPdmVybGF5U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogYW55LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVklSVFVBTF9LRVlCT0FSRF9DT05GSUcpIHByaXZhdGUgdmlydHVhbEtleWJvYXJkQ29uZmlnOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZyxcbiAgKSB7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLnZpcnR1YWxLZXlib2FyZENvbmZpZztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmNvbmZpZz8uc2hvd0ljb24pIHtcbiAgICAgIHRoaXMuYXR0YWNoS2V5Ym9hcmRJY29uKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLnZrRW5hYmxlZCAmJiB0aGlzLmNvbmZpZz8uc2hvd0ljb24pIHtcbiAgICAgIGNvbnN0IGtleWJvYXJkSWNvbiA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcignaScpO1xuICAgICAga2V5Ym9hcmRJY29uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy50b2dnbGVQYW5lbC5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vdmVybGF5U2VydmljZS5pc0NyZWF0ZWQoKSkge1xuICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVQYW5lbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vdmVybGF5U2VydmljZS5pc09wZW4oKSkge1xuICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlblBhbmVsKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuUGFuZWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3ZlcmxheVNlcnZpY2UuaXNDcmVhdGVkKCkpIHtcbiAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuZGVzdHJveSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vdmVybGF5U2VydmljZS5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudExheW91dCA9IHRoaXMuZ2V0TGF5b3V0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgIHRoaXMucGFuZWxSZWYgPSB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNyZWF0ZSh0aGlzLmlucHV0T3JpZ2luKCksIHRoaXMuc2hvd0tleWJvYXJkQnV0dG9uRWxlbWVudCwgdGhpcy52a0ZpeGVkQm90dG9tLCBjdXJyZW50TGF5b3V0KTtcbiAgICB0aGlzLnBhbmVsUmVmLmluc3RhbmNlLmRlYnVnID0gdGhpcy52a0RlYnVnO1xuICAgIHRoaXMucGFuZWxSZWYuaW5zdGFuY2Uuc2V0QWN0aXZlSW5wdXQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMucGFuZWxSZWYuaW5zdGFuY2Uuc2V0TGF5b3V0KGN1cnJlbnRMYXlvdXQpO1xuICAgIHRoaXMucGFuZWxSZWYuaW5zdGFuY2UuY2xvc2VQYW5lbC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZVBhbmVsKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXlvdXQoYWN0aXZlSW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCk6IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyB7XG4gICAgaWYgKHRoaXMuY29uZmlnPy5oYXNPd25Qcm9wZXJ0eSgnbGF5b3V0JykpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5sYXlvdXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzSW5wdXRBbHBoYWJldGljKGFjdGl2ZUlucHV0RWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnB1dE51bWVyaWMoYWN0aXZlSW5wdXRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5udW1lcmljO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0lucHV0QWxwaGFiZXRpYyhhY3RpdmVJbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5wdXRUeXBlID0gYWN0aXZlSW5wdXRFbGVtZW50Py50eXBlO1xuICAgIHJldHVybiBpbnB1dFR5cGUgJiYgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRUeXBlcy50ZXh0LCBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0VHlwZXMucGFzc3dvcmRdLnNvbWUoKGkpID0+IGkgPT09IGlucHV0VHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5wdXROdW1lcmljKGFjdGl2ZUlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBpbnB1dFR5cGUgPSBhY3RpdmVJbnB1dEVsZW1lbnQ/LnR5cGU7XG4gICAgcmV0dXJuIGlucHV0VHlwZSAmJiBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dFR5cGVzLm51bWJlcl0uc29tZSgoaSkgPT4gaSA9PT0gaW5wdXRUeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VQYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5wdXRPcmlnaW4oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaEtleWJvYXJkSWNvbigpIHtcbiAgICBpZiAodGhpcy52a0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyk7XG4gICAgICBjaGlsZC5jbGFzc0xpc3QuYWRkKCdmYScpO1xuICAgICAgY2hpbGQuY2xhc3NMaXN0LmFkZCgnZmEta2V5Ym9hcmQnKTtcbiAgICAgIGNoaWxkLmNsYXNzTGlzdC5hZGQoJ3ZpcnR1YWwta2V5Ym9hcmQtc2hvdy1idXR0b24nKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCwgY2hpbGQpO1xuICAgICAgdGhpcy5zaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50ID0gY2hpbGQ7XG4gICAgfVxuICB9XG59XG4iXX0=
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxHQUVYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHaEcsT0FBTyxFQUFpQyx1QkFBdUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7QUFLNUcsTUFBTSxPQUFPLGdDQUFnQztJQUt6QyxnQkFBZ0I7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QztJQUNMLENBQUM7SUFHRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNyQjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFD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QkFXM0MsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFpQjdCLFNBQVM7c0JBRFosS0FBSztnQkFnQkYsYUFBYTtzQkFEaEIsS0FBSztnQkFnQkYsT0FBTztzQkFEVixLQUFLO2dCQVlGLFFBQVE7c0JBRFgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgLSAyMDI0IC0gSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgU3lzdGVsYWIgVGVjaG5vbG9naWVzLCBTQS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5PVElDRTogIEFsbCBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzIGFuZCByZW1haW5zIHRoZSBwcm9wZXJ0eSBvZiBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55IGFuZCBpdHNcbiAqIGFmZmlsaWF0ZXMsIGlmIGFueS4gIFRoZSBpbnRlbGxlY3R1YWwgYW5kIHRlY2huaWNhbCBjb25jZXB0cyBjb250YWluZWQgaGVyZWluIGFyZSBwcm9wcmlldGFyeSB0byBJbnN0cnVtZW50YXRpb25cbiAqIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgaXRzIGFmZmlsaWF0ZXMgYW5kIG1heSBiZSBjb3ZlcmVkIGJ5IFUuUy4gYW5kIGZvcmVpZ24gcGF0ZW50cyBhbmQgcGF0ZW50IGFwcGxpY2F0aW9ucywgYW5kL29yXG4gKiBhcmUgcHJvdGVjdGVkIGJ5IHRyYWRlIHNlY3JldCBvciBjb3B5cmlnaHQgbGF3LiBEaXNzZW1pbmF0aW9uIG9mIHRoaXMgaW5mb3JtYXRpb24gb3IgcmVwcm9kdWN0aW9uIG9mIHRoaXMgbWF0ZXJpYWwgaXNcbiAqIHN0cmljdGx5IGZvcmJpZGRlbiB1bmxlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGlzIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkuXG4gKi9cblxuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TW9kZXMsIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLW92ZXJsYXkuc2VydmljZSc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZywgVklSVFVBTF9LRVlCT0FSRF9DT05GSUcgfSBmcm9tICcuL3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQuY29uZmlnJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdpbnB1dFt2a0VuYWJsZWRdLCB0ZXh0YXJlYVt2a0VuYWJsZWRdJyxcbn0pXG5leHBvcnQgY2xhc3MgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnRvdWNobW92ZScsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnRvdWNoZW5kJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6d2hlZWwnLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnNjcm9sbCcsIFsnJGV2ZW50J10pXG4gICAgb25Eb2N1bWVudFNjcm9sbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZrRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlTZXJ2aWNlLmlzQ3JlYXRlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycsIFsnJGV2ZW50J10pXG4gICAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnZrRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlTZXJ2aWNlLmlzQ3JlYXRlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLnNldEZvY3VzRGlzcGF0Y2hlZCh0cnVlKTtcbiAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXlTZXJ2aWNlLmlzT3BlbigpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5QYW5lbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCB2a0VuYWJsZWQoZW5hYmxlZDogYm9vbGVhbiB8IHN0cmluZykge1xuICAgICAgICBpZiAodHlwZW9mIGVuYWJsZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBnZXQgdmtFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmFibGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZml4ZWRCb3R0b20gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHZrRml4ZWRCb3R0b20oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpeGVkQm90dG9tO1xuICAgIH1cblxuICAgIHNldCB2a0ZpeGVkQm90dG9tKGZpeGVkQm90dG9tOiBib29sZWFuIHwgc3RyaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZml4ZWRCb3R0b20gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmZpeGVkQm90dG9tID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZml4ZWRCb3R0b20gPSBmaXhlZEJvdHRvbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVidWcgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHZrRGVidWcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlYnVnO1xuICAgIH1cblxuICAgIHNldCB2a0RlYnVnKGRlYnVnOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZGVidWcgPSBkZWJ1ZztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpZzogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWc7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCB2a0NvbmZpZygpOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgICB9XG5cbiAgICBzZXQgdmtDb25maWcoY29uZmlnOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZykge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhbmVsUmVmITogQ29tcG9uZW50UmVmPFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50PjtcbiAgICBwcml2YXRlIHNob3dLZXlib2FyZEJ1dHRvbkVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBvdmVybGF5U2VydmljZTogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRPdmVybGF5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBhbnksXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVklSVFVBTF9LRVlCT0FSRF9DT05GSUcpIHByaXZhdGUgdmlydHVhbEtleWJvYXJkQ29uZmlnOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZyxcbiAgICApIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLnZpcnR1YWxLZXlib2FyZENvbmZpZztcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5zaG93SWNvbikge1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hLZXlib2FyZEljb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmtFbmFibGVkICYmIHRoaXMuY29uZmlnPy5zaG93SWNvbikge1xuICAgICAgICAgICAgY29uc3Qga2V5Ym9hcmRJY29uID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpJyk7XG4gICAgICAgICAgICBrZXlib2FyZEljb24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnRvZ2dsZVBhbmVsLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnZrRW5hYmxlZCAmJiB0aGlzLmNvbmZpZz8uc2hvd0ljb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGtleWJvYXJkSWNvbiA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcignaScpO1xuICAgICAgICAgICAga2V5Ym9hcmRJY29uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy50b2dnbGVQYW5lbC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vdmVybGF5U2VydmljZS5pc0NyZWF0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZVBhbmVsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmtFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVNlcnZpY2UuaXNPcGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb3BlblBhbmVsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmtFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVNlcnZpY2UuaXNDcmVhdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlTZXJ2aWNlLmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRMYXlvdXQgPSB0aGlzLmdldExheW91dCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5wYW5lbFJlZiA9IHRoaXMub3ZlcmxheVNlcnZpY2UuY3JlYXRlKHRoaXMuaW5wdXRPcmlnaW4oKSwgdGhpcy5zaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50LCB0aGlzLnZrRml4ZWRCb3R0b20sIGN1cnJlbnRMYXlvdXQpO1xuICAgICAgICB0aGlzLnBhbmVsUmVmLmluc3RhbmNlLmRlYnVnID0gdGhpcy52a0RlYnVnO1xuICAgICAgICB0aGlzLnBhbmVsUmVmLmluc3RhbmNlLnNldEFjdGl2ZUlucHV0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5wYW5lbFJlZi5pbnN0YW5jZS5zZXRMYXlvdXQoY3VycmVudExheW91dCk7XG4gICAgICAgIHRoaXMucGFuZWxSZWYuaW5zdGFuY2UuY2xvc2VQYW5lbC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZVBhbmVsKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGF5b3V0KGFjdGl2ZUlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMge1xuICAgICAgICBpZiAodGhpcy5jb25maWc/Lmhhc093blByb3BlcnR5KCdsYXlvdXQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmxheW91dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0lucHV0QWxwaGFiZXRpYyhhY3RpdmVJbnB1dEVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0lucHV0TnVtZXJpYyhhY3RpdmVJbnB1dEVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLm51bWVyaWM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzSW5wdXRBbHBoYWJldGljKGFjdGl2ZUlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaW5wdXRNb2RlID0gdGhpcy5nZXRJbnB1dE1vZGUoYWN0aXZlSW5wdXRFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGlucHV0TW9kZSAmJiAgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRNb2Rlcy50ZXh0LCBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TW9kZXMucGFzc3dvcmRdLnNvbWUoKGkpID0+IGkgPT09IGlucHV0TW9kZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0lucHV0TnVtZXJpYyhhY3RpdmVJbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGlucHV0TW9kZSA9IHRoaXMuZ2V0SW5wdXRNb2RlKGFjdGl2ZUlucHV0RWxlbWVudCk7XG4gICAgICAgIHJldHVybiBpbnB1dE1vZGUgJiYgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRNb2Rlcy5udW1lcmljXS5zb21lKChpKSA9PiBpID09PSBpbnB1dE1vZGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SW5wdXRNb2RlKGFjdGl2ZUlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYWN0aXZlSW5wdXRFbGVtZW50Py5pbnB1dE1vZGUgPz8gYWN0aXZlSW5wdXRFbGVtZW50Py50eXBlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VQYW5lbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnB1dE9yaWdpbigpOiBIVE1MSW5wdXRFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXR0YWNoS2V5Ym9hcmRJY29uKCkge1xuICAgICAgICBpZiAodGhpcy52a0VuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyk7XG4gICAgICAgICAgICBjaGlsZC5jbGFzc0xpc3QuYWRkKCdmYScpO1xuICAgICAgICAgICAgY2hpbGQuY2xhc3NMaXN0LmFkZCgnZmEta2V5Ym9hcmQnKTtcbiAgICAgICAgICAgIGNoaWxkLmNsYXNzTGlzdC5hZGQoJ3ZpcnR1YWwta2V5Ym9hcmQtc2hvdy1idXR0b24nKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCwgY2hpbGQpO1xuICAgICAgICAgICAgdGhpcy5zaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50ID0gY2hpbGQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=