systelab-virtual-keyboard 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -7
- package/esm2022/lib/constants.mjs +6 -1
- package/esm2022/lib/systelab-virtual-keyboard-overlay.service.mjs +27 -2
- package/esm2022/lib/systelab-virtual-keyboard.component.mjs +64 -21
- package/esm2022/lib/systelab-virtual-keyboard.config.mjs +1 -1
- package/esm2022/lib/systelab-virtual-keyboard.directive.mjs +12 -19
- package/fesm2022/systelab-virtual-keyboard.mjs +104 -39
- package/fesm2022/systelab-virtual-keyboard.mjs.map +1 -1
- package/lib/constants.d.ts +4 -0
- package/lib/constants.d.ts.map +1 -1
- package/lib/systelab-virtual-keyboard-overlay.service.d.ts +5 -1
- package/lib/systelab-virtual-keyboard-overlay.service.d.ts.map +1 -1
- package/lib/systelab-virtual-keyboard.component.d.ts +5 -2
- package/lib/systelab-virtual-keyboard.component.d.ts.map +1 -1
- package/lib/systelab-virtual-keyboard.config.d.ts +2 -1
- package/lib/systelab-virtual-keyboard.config.d.ts.map +1 -1
- package/lib/systelab-virtual-keyboard.directive.d.ts +1 -1
- package/lib/systelab-virtual-keyboard.directive.d.ts.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -10,11 +10,13 @@ Before use the directive you have to import the module into your application.
|
|
|
10
10
|
NgModule({
|
|
11
11
|
imports: [
|
|
12
12
|
...,
|
|
13
|
-
SystelabVirtualKeyboardModule,
|
|
13
|
+
SystelabVirtualKeyboardModule.forRoot(config),
|
|
14
14
|
]
|
|
15
15
|
})
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
+
Where config is an object with type *SystelabVirtualKeyboardConfig*. See [SystelabVirtualKeyboardConfig](src/lib/systelab-virtual-keyboard.config.ts) for details
|
|
19
|
+
|
|
18
20
|
Then the virtual keyboard can be enabled for inputs or textareas. To enable it the attribute *vkEnabled* can be used into the desire HTML element. It can be binding dynamically in the same way *[vkEnabled]="vkEnabledVariable"*
|
|
19
21
|
|
|
20
22
|
```html
|
|
@@ -23,15 +25,20 @@ Then the virtual keyboard can be enabled for inputs or textareas. To enable it t
|
|
|
23
25
|
|
|
24
26
|
## Directive options
|
|
25
27
|
|
|
26
|
-
The default behaviour can be
|
|
28
|
+
The default behaviour can be changed through some attributes:
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
| Name | Type | Default | Description |
|
|
31
|
+
|-----------|:----:|:-------:| ----------- |
|
|
32
|
+
| vkEnabled | boolean | true | Enable the virtual keyboard for the element. If the property exists, the default value is true; if not, is false
|
|
33
|
+
| vkFixedBottom | booles | true | Fix the virtual keyboard to the bottom of the page. If the property exists, the default value is true; if not, is false
|
|
34
|
+
| vkConfig | SystelabVirtualKeyboardConfig | | Configuration object that overrides some default behaviours. See [SystelabVirtualKeyboardConfig](src/lib/systelab-virtual-keyboard.config.ts) for details
|
|
31
35
|
|
|
32
36
|
### Configuration object
|
|
33
37
|
|
|
34
|
-
The configuration params are describe into the interface
|
|
38
|
+
The configuration params are describe into the interface [SystelabVirtualKeyboardConfig](src/lib/systelab-virtual-keyboard.config.ts)
|
|
35
39
|
|
|
36
|
-
|
|
40
|
+
| Name | Type | Default | Description |
|
|
41
|
+
|-----------|:----:|:-------:| ----------- |
|
|
42
|
+
| layout | SystelabVirtualKeyboardLayouts | | Usually the virtual keyboard select the layout between *default* or *numeric* depending on the input type. But with the config object you can override this behaviour and force the desired layout. The available layouts are described in the enum *SystelabVirtualKeyboardLayouts*
|
|
43
|
+
| inputMethod | SystelabVirtualKeyboardInputMethods | | The method detected for the keyboard to click or touch the keys
|
|
37
44
|
|
|
@@ -23,10 +23,15 @@ export var SystelabVirtualKeyboardLayouts;
|
|
|
23
23
|
SystelabVirtualKeyboardLayouts["shift"] = "shift";
|
|
24
24
|
SystelabVirtualKeyboardLayouts["numeric"] = "numeric";
|
|
25
25
|
})(SystelabVirtualKeyboardLayouts || (SystelabVirtualKeyboardLayouts = {}));
|
|
26
|
+
export var SystelabVirtualKeyboardInputMethods;
|
|
27
|
+
(function (SystelabVirtualKeyboardInputMethods) {
|
|
28
|
+
SystelabVirtualKeyboardInputMethods["onlyMouseEvents"] = "onlyMouseEvents";
|
|
29
|
+
SystelabVirtualKeyboardInputMethods["onlyTouchEvents"] = "onlyTouchEvents";
|
|
30
|
+
})(SystelabVirtualKeyboardInputMethods || (SystelabVirtualKeyboardInputMethods = {}));
|
|
26
31
|
export var SystelabVirtualKeyboardInputTypes;
|
|
27
32
|
(function (SystelabVirtualKeyboardInputTypes) {
|
|
28
33
|
SystelabVirtualKeyboardInputTypes["text"] = "text";
|
|
29
34
|
SystelabVirtualKeyboardInputTypes["number"] = "number";
|
|
30
35
|
SystelabVirtualKeyboardInputTypes["password"] = "password";
|
|
31
36
|
})(SystelabVirtualKeyboardInputTypes || (SystelabVirtualKeyboardInputTypes = {}));
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC9zcmMvbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsTUFBTSxDQUFOLElBQVksNkJBU1g7QUFURCxXQUFZLDZCQUE2QjtJQUN2QyxnREFBZSxDQUFBO0lBQ2Ysa0RBQWlCLENBQUE7SUFDakIsa0RBQWlCLENBQUE7SUFDakIsZ0RBQWUsQ0FBQTtJQUNmLHFEQUFvQixDQUFBO0lBQ3BCLHdEQUF1QixDQUFBO0lBQ3ZCLGtEQUFpQixDQUFBO0lBQ2pCLDhDQUFhLENBQUE7QUFDZixDQUFDLEVBVFcsNkJBQTZCLEtBQTdCLDZCQUE2QixRQVN4QztBQUVELE1BQU0sQ0FBTixJQUFZLDhCQUlYO0FBSkQsV0FBWSw4QkFBOEI7SUFDeEMscURBQW1CLENBQUE7SUFDbkIsaURBQWUsQ0FBQTtJQUNmLHFEQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFKVyw4QkFBOEIsS0FBOUIsOEJBQThCLFFBSXpDO0FBRUQsTUFBTSxDQUFOLElBQVksbUNBR1g7QUFIRCxXQUFZLG1DQUFtQztJQUM3QywwRUFBbUMsQ0FBQTtJQUNuQywwRUFBbUMsQ0FBQTtBQUNyQyxDQUFDLEVBSFcsbUNBQW1DLEtBQW5DLG1DQUFtQyxRQUc5QztBQUVELE1BQU0sQ0FBTixJQUFZLGlDQUlYO0FBSkQsV0FBWSxpQ0FBaUM7SUFDM0Msa0RBQWEsQ0FBQTtJQUNiLHNEQUFpQixDQUFBO0lBQ2pCLDBEQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFKVyxpQ0FBaUMsS0FBakMsaUNBQWlDLFFBSTVDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMCAtIDIwMjQgLSBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55IGFuZCBTeXN0ZWxhYiBUZWNobm9sb2dpZXMsIFNBLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTk9USUNFOiAgQWxsIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaXMgYW5kIHJlbWFpbnMgdGhlIHByb3BlcnR5IG9mIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0c1xuICogYWZmaWxpYXRlcywgaWYgYW55LiAgVGhlIGludGVsbGVjdHVhbCBhbmQgdGVjaG5pY2FsIGNvbmNlcHRzIGNvbnRhaW5lZCBoZXJlaW4gYXJlIHByb3ByaWV0YXJ5IHRvIEluc3RydW1lbnRhdGlvblxuICogTGFib3JhdG9yeSBDb21wYW55IGFuZCBpdHMgYWZmaWxpYXRlcyBhbmQgbWF5IGJlIGNvdmVyZWQgYnkgVS5TLiBhbmQgZm9yZWlnbiBwYXRlbnRzIGFuZCBwYXRlbnQgYXBwbGljYXRpb25zLCBhbmQvb3JcbiAqIGFyZSBwcm90ZWN0ZWQgYnkgdHJhZGUgc2VjcmV0IG9yIGNvcHlyaWdodCBsYXcuIERpc3NlbWluYXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbiBvciByZXByb2R1Y3Rpb24gb2YgdGhpcyBtYXRlcmlhbCBpc1xuICogc3RyaWN0bHkgZm9yYmlkZGVuIHVubGVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gaXMgSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueS5cbiAqL1xuXG5leHBvcnQgZW51bSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbiB7XG4gIERvbmUgPSAne2RvbmV9JyxcbiAgRW50ZXIgPSAne2VudGVyfScsXG4gIFNoaWZ0ID0gJ3tzaGlmdH0nLFxuICBMb2NrID0gJ3tsb2NrfScsXG4gIEJhY2tzcGFjZSA9ICd7YmtzcH0nLFxuICBMYW5ndWFnZSA9ICd7bGFuZ3VhZ2V9JyxcbiAgU3BhY2UgPSAne3NwYWNlfScsXG4gIFRhYiA9ICd7dGFifScsXG59XG5cbmV4cG9ydCBlbnVtIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyB7XG4gIGRlZmF1bHQgPSAnZGVmYXVsdCcsXG4gIHNoaWZ0ID0gJ3NoaWZ0JyxcbiAgbnVtZXJpYyA9ICdudW1lcmljJyxcbn1cblxuZXhwb3J0IGVudW0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dE1ldGhvZHMge1xuICBvbmx5TW91c2VFdmVudHMgPSAnb25seU1vdXNlRXZlbnRzJyxcbiAgb25seVRvdWNoRXZlbnRzID0gJ29ubHlUb3VjaEV2ZW50cycsXG59XG5cbmV4cG9ydCBlbnVtIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRUeXBlcyB7XG4gIHRleHQgPSAndGV4dCcsXG4gIG51bWJlciA9ICdudW1iZXInLFxuICBwYXNzd29yZCA9ICdwYXNzd29yZCcsXG59XG4iXX0=
|
|
@@ -7,6 +7,7 @@ import * as i1 from "@angular/cdk/overlay";
|
|
|
7
7
|
export class SystelabVirtualKeyboardOverlayService {
|
|
8
8
|
constructor(overlay) {
|
|
9
9
|
this.overlay = overlay;
|
|
10
|
+
this.initListener();
|
|
10
11
|
}
|
|
11
12
|
isCreated() {
|
|
12
13
|
return !!this.overlayRef;
|
|
@@ -14,7 +15,9 @@ export class SystelabVirtualKeyboardOverlayService {
|
|
|
14
15
|
isOpen() {
|
|
15
16
|
return this.open;
|
|
16
17
|
}
|
|
17
|
-
create(inputOrigin, fixedBottom, layout = SystelabVirtualKeyboardLayouts.default) {
|
|
18
|
+
create(inputOrigin, showKeyboardButtonElement, fixedBottom, layout = SystelabVirtualKeyboardLayouts.default) {
|
|
19
|
+
this.inputOrigin = inputOrigin;
|
|
20
|
+
this.showKeyboardButtonElement = showKeyboardButtonElement;
|
|
18
21
|
this.layout = layout;
|
|
19
22
|
this.overlayRef = this.overlay.create({
|
|
20
23
|
hasBackdrop: false,
|
|
@@ -37,6 +40,28 @@ export class SystelabVirtualKeyboardOverlayService {
|
|
|
37
40
|
this.overlayRef = null;
|
|
38
41
|
this.open = false;
|
|
39
42
|
}
|
|
43
|
+
initListener() {
|
|
44
|
+
document.addEventListener('click', this.handleClick.bind(this));
|
|
45
|
+
}
|
|
46
|
+
handleClick(event) {
|
|
47
|
+
console.log('Document clicked:', event);
|
|
48
|
+
event.stopPropagation();
|
|
49
|
+
const simpleKeyboardElement = document.querySelector('.simple-keyboard');
|
|
50
|
+
const showKeyboardButtonClicked = event.target?.classList.contains('virtual-keyboard-show-button');
|
|
51
|
+
const containsKeyboard = simpleKeyboardElement?.contains(event.target);
|
|
52
|
+
const containsElementRef = this.inputOrigin?.contains(event.target);
|
|
53
|
+
// const containsFocusedElement = this.focusedElement?.contains(event.target as Node);
|
|
54
|
+
const containsShowButton = this.showKeyboardButtonElement?.contains(event.target);
|
|
55
|
+
if (!containsKeyboard &&
|
|
56
|
+
!containsElementRef &&
|
|
57
|
+
// !containsFocusedElement &&
|
|
58
|
+
!containsShowButton &&
|
|
59
|
+
!showKeyboardButtonClicked) {
|
|
60
|
+
if (this.isCreated()) {
|
|
61
|
+
this.destroy();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
40
65
|
hasAttached() {
|
|
41
66
|
return this.overlayRef?.hasAttached();
|
|
42
67
|
}
|
|
@@ -120,4 +145,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
|
|
|
120
145
|
providedIn: 'root',
|
|
121
146
|
}]
|
|
122
147
|
}], ctorParameters: () => [{ type: i1.Overlay }] });
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBWXpGLE1BQU0sT0FBTyxxQ0FBcUM7SUFLaEQsWUFBNkIsT0FBZ0I7UUFBaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztJQUFHLENBQUM7SUFFMUMsU0FBUztRQUNkLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVNLE1BQU0sQ0FDWCxXQUE2QixFQUM3QixXQUFvQixFQUNwQixTQUF5Qyw4QkFBOEIsQ0FBQyxPQUFPO1FBRS9FLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDcEMsV0FBVyxFQUFFLEtBQUs7WUFDbEIsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFO1lBQzFELG1CQUFtQixFQUFFLElBQUk7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsK0JBQStCLENB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Q29weXJpZ2h0IChjKSAyMDIwIC0gMjAyNCAtIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIFN5c3RlbGFiIFRlY2hub2xvZ2llcywgU0EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOT1RJQ0U6ICBBbGwgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBpcyBhbmQgcmVtYWlucyB0aGUgcHJvcGVydHkgb2YgSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgaXRzXG4gKiBhZmZpbGlhdGVzLCBpZiBhbnkuICBUaGUgaW50ZWxsZWN0dWFsIGFuZCB0ZWNobmljYWwgY29uY2VwdHMgY29udGFpbmVkIGhlcmVpbiBhcmUgcHJvcHJpZXRhcnkgdG8gSW5zdHJ1bWVudGF0aW9uXG4gKiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0cyBhZmZpbGlhdGVzIGFuZCBtYXkgYmUgY292ZXJlZCBieSBVLlMuIGFuZCBmb3JlaWduIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMsIGFuZC9vclxuICogYXJlIHByb3RlY3RlZCBieSB0cmFkZSBzZWNyZXQgb3IgY29weXJpZ2h0IGxhdy4gRGlzc2VtaW5hdGlvbiBvZiB0aGlzIGluZm9ybWF0aW9uIG9yIHJlcHJvZHVjdGlvbiBvZiB0aGlzIG1hdGVyaWFsIGlzXG4gKiBzdHJpY3RseSBmb3JiaWRkZW4gdW5sZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55LlxuICovXG5cbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYsIE92ZXJsYXlTaXplQ29uZmlnLCBQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbXBvbmVudCc7XG5cbmludGVyZmFjZSBQb3NpdGlvblN0cmF0ZWd5T3JpZ2luIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE92ZXJsYXlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBvdmVybGF5UmVmITogT3ZlcmxheVJlZjtcbiAgcHJpdmF0ZSBvcGVuOiBib29sZWFuO1xuICBwcml2YXRlIGxheW91dDogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSkge31cblxuICBwdWJsaWMgaXNDcmVhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMub3ZlcmxheVJlZjtcbiAgfVxuXG4gIHB1YmxpYyBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3BlbjtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGUoXG4gICAgaW5wdXRPcmlnaW46IEhUTUxJbnB1dEVsZW1lbnQsXG4gICAgZml4ZWRCb3R0b206IGJvb2xlYW4sXG4gICAgbGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMgPSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuZGVmYXVsdCxcbiAgKTogQ29tcG9uZW50UmVmPFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50PiB7XG4gICAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLm92ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcygndmlydHVhbC1rZXlib2FyZC1vdmVybGF5LXBhbmUnKTtcbiAgICBpZiAoZml4ZWRCb3R0b20pIHtcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5hZGRQYW5lbENsYXNzKCd2aXJ0dWFsLWtleWJvYXJkLWZpeGVkLWJvdHRvbScpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUG9zaXRpb25TdHJhdGVneShpbnB1dE9yaWdpbiwgZml4ZWRCb3R0b20pO1xuICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xuXG4gICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5vdmVybGF5UmVmLmF0dGFjaChuZXcgQ29tcG9uZW50UG9ydGFsKFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50KSk7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGhhc0F0dGFjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3koaW5wdXRPcmlnaW46IEhUTUxJbnB1dEVsZW1lbnQsIGZpeGVkQm90dG9tOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5nZXRQb3NpdGlvblN0cmF0ZWd5KGlucHV0T3JpZ2luLCBmaXhlZEJvdHRvbSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTaXplKCk6IHZvaWQge1xuICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVTaXplKHRoaXMuZ2V0T3ZlcmxheVNpemUoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBvc2l0aW9uU3RyYXRlZ3koaW5wdXRPcmlnaW46IEhUTUxJbnB1dEVsZW1lbnQsIGZpeGVkQm90dG9tOiBib29sZWFuKTogUG9zaXRpb25TdHJhdGVneSB7XG4gICAgaWYgKGZpeGVkQm90dG9tKSB7XG4gICAgICByZXR1cm4gdGhpcy5vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuYm90dG9tKCcwJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcG9pbnRXaXRoRGltZW5zaW9uczogUG9zaXRpb25TdHJhdGVneU9yaWdpbiA9IHRoaXMuY29tcHV0ZVBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oaW5wdXRPcmlnaW4pO1xuXG4gICAgcmV0dXJuIHRoaXMub3ZlcmxheVxuICAgICAgLnBvc2l0aW9uKClcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHBvaW50V2l0aERpbWVuc2lvbnMpXG4gICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24odHJ1ZSlcbiAgICAgIC53aXRoUHVzaChmYWxzZSlcbiAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPdmVybGF5U2l6ZSgpOiBPdmVybGF5U2l6ZUNvbmZpZyB7XG4gICAgY29uc3Qgb3ZlcmxheVdpZHRoID0gdGhpcy5sYXlvdXQgPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5udW1lcmljID8gJzQwMHB4JyA6ICcxMjAwcHgnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiBvdmVybGF5V2lkdGgsXG4gICAgICBtYXhXaWR0aDogb3ZlcmxheVdpZHRoLFxuICAgICAgbWluV2lkdGg6IG92ZXJsYXlXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlUG9zaXRpb25TdHJhdGVneU9yaWdpbihpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudCk6IFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4ge1xuICAgIGNvbnN0IG92ZXJsYXlPZmZzZXRYID0gdGhpcy5jb21wdXRlT3ZlcmxheU9mZnNldFgoaW5wdXRPcmlnaW4pO1xuICAgIGNvbnN0IHsgd2lkdGg6IG92ZXJsYXlXaWR0aFN0cmluZyB9ID0gdGhpcy5nZXRPdmVybGF5U2l6ZSgpO1xuICAgIGNvbnN0IG92ZXJsYXlXaWR0aCA9IE51bWJlcigob3ZlcmxheVdpZHRoU3RyaW5nIGFzIHN0cmluZykucmVwbGFjZSgncHgnLCAnJykpO1xuICAgIGNvbnN0IHt4LCB5LCB3aWR0aCwgaGVpZ2h0fSA9IGlucHV0T3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIHg6IHdpZHRoIDwgb3ZlcmxheVdpZHRoID8geCAtIG92ZXJsYXlPZmZzZXRYIDogeCArIG92ZXJsYXlPZmZzZXRYLFxuICAgICAgeSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlT3ZlcmxheU9mZnNldFgoaW5wdXRPcmlnaW46IEhUTUxJbnB1dEVsZW1lbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IHsgd2lkdGg6IG92ZXJsYXlXaWR0aFN0cmluZyB9ID0gdGhpcy5nZXRPdmVybGF5U2l6ZSgpO1xuICAgIGNvbnN0IG92ZXJsYXlXaWR0aCA9IE51bWJlcigob3ZlcmxheVdpZHRoU3RyaW5nIGFzIHN0cmluZykucmVwbGFjZSgncHgnLCAnJykpO1xuICAgIGNvbnN0IGlucHV0V2lkdGggPSBpbnB1dE9yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuICAgIGNvbnN0IGV4dHJhV2lkdGggPSBvdmVybGF5V2lkdGggLSBpbnB1dFdpZHRoO1xuXG4gICAgcmV0dXJuIE1hdGguYWJzKGV4dHJhV2lkdGgpIC8gMjtcbiAgfVxufVxuIl19
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBWXpGLE1BQU0sT0FBTyxxQ0FBcUM7SUFPaEQsWUFBNkIsT0FBZ0I7UUFBaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUMzQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLFNBQVM7UUFDZCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFTSxNQUFNLENBQ1gsV0FBNkIsRUFDN0IseUJBQXNDLEVBQ3RDLFdBQW9CLEVBQ3BCLFNBQXlDLDhCQUE4QixDQUFDLE9BQU87UUFFL0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO1FBQzNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDcEMsV0FBVyxFQUFFLEtBQUs7WUFDbEIsY0FBYyxFQUFFLElBQUks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Q29weXJpZ2h0IChjKSAyMDIwIC0gMjAyNCAtIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIFN5c3RlbGFiIFRlY2hub2xvZ2llcywgU0EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOT1RJQ0U6ICBBbGwgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBpcyBhbmQgcmVtYWlucyB0aGUgcHJvcGVydHkgb2YgSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgaXRzXG4gKiBhZmZpbGlhdGVzLCBpZiBhbnkuICBUaGUgaW50ZWxsZWN0dWFsIGFuZCB0ZWNobmljYWwgY29uY2VwdHMgY29udGFpbmVkIGhlcmVpbiBhcmUgcHJvcHJpZXRhcnkgdG8gSW5zdHJ1bWVudGF0aW9uXG4gKiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0cyBhZmZpbGlhdGVzIGFuZCBtYXkgYmUgY292ZXJlZCBieSBVLlMuIGFuZCBmb3JlaWduIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMsIGFuZC9vclxuICogYXJlIHByb3RlY3RlZCBieSB0cmFkZSBzZWNyZXQgb3IgY29weXJpZ2h0IGxhdy4gRGlzc2VtaW5hdGlvbiBvZiB0aGlzIGluZm9ybWF0aW9uIG9yIHJlcHJvZHVjdGlvbiBvZiB0aGlzIG1hdGVyaWFsIGlzXG4gKiBzdHJpY3RseSBmb3JiaWRkZW4gdW5sZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55LlxuICovXG5cbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYsIE92ZXJsYXlTaXplQ29uZmlnLCBQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbXBvbmVudCc7XG5cbmludGVyZmFjZSBQb3NpdGlvblN0cmF0ZWd5T3JpZ2luIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE92ZXJsYXlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBvdmVybGF5UmVmITogT3ZlcmxheVJlZjtcbiAgcHJpdmF0ZSBpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudDtcbiAgcHJpdmF0ZSBzaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBvcGVuOiBib29sZWFuO1xuICBwcml2YXRlIGxheW91dDogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSkge1xuICAgIHRoaXMuaW5pdExpc3RlbmVyKCk7XG4gIH1cblxuICBwdWJsaWMgaXNDcmVhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMub3ZlcmxheVJlZjtcbiAgfVxuXG4gIHB1YmxpYyBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3BlbjtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGUoXG4gICAgaW5wdXRPcmlnaW46IEhUTUxJbnB1dEVsZW1lbnQsXG4gICAgc2hvd0tleWJvYXJkQnV0dG9uRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgZml4ZWRCb3R0b206IGJvb2xlYW4sXG4gICAgbGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMgPSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuZGVmYXVsdCxcbiAgKTogQ29tcG9uZW50UmVmPFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50PiB7XG4gICAgdGhpcy5pbnB1dE9yaWdpbiA9IGlucHV0T3JpZ2luO1xuICAgIHRoaXMuc2hvd0tleWJvYXJkQnV0dG9uRWxlbWVudCA9IHNob3dLZXlib2FyZEJ1dHRvbkVsZW1lbnQ7XG4gICAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLm92ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcygndmlydHVhbC1rZXlib2FyZC1vdmVybGF5LXBhbmUnKTtcbiAgICBpZiAoZml4ZWRCb3R0b20pIHtcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5hZGRQYW5lbENsYXNzKCd2aXJ0dWFsLWtleWJvYXJkLWZpeGVkLWJvdHRvbScpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUG9zaXRpb25TdHJhdGVneShpbnB1dE9yaWdpbiwgZml4ZWRCb3R0b20pO1xuICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xuXG4gICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5vdmVybGF5UmVmLmF0dGFjaChuZXcgQ29tcG9uZW50UG9ydGFsKFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50KSk7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0TGlzdGVuZXIoKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGNvbnNvbGUubG9nKCdEb2N1bWVudCBjbGlja2VkOicsIGV2ZW50KTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBzaW1wbGVLZXlib2FyZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2ltcGxlLWtleWJvYXJkJyk7XG4gICAgY29uc3Qgc2hvd0tleWJvYXJkQnV0dG9uQ2xpY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5jbGFzc0xpc3QuY29udGFpbnMoJ3ZpcnR1YWwta2V5Ym9hcmQtc2hvdy1idXR0b24nKTtcblxuICAgIGNvbnN0IGNvbnRhaW5zS2V5Ym9hcmQgPSBzaW1wbGVLZXlib2FyZEVsZW1lbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKTtcbiAgICBjb25zdCBjb250YWluc0VsZW1lbnRSZWYgPSB0aGlzLmlucHV0T3JpZ2luPy5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSk7XG4gICAgLy8gY29uc3QgY29udGFpbnNGb2N1c2VkRWxlbWVudCA9IHRoaXMuZm9jdXNlZEVsZW1lbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKTtcbiAgICBjb25zdCBjb250YWluc1Nob3dCdXR0b24gPSB0aGlzLnNob3dLZXlib2FyZEJ1dHRvbkVsZW1lbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKTtcbiAgICBpZiAoXG4gICAgICAhY29udGFpbnNLZXlib2FyZCAmJlxuICAgICAgIWNvbnRhaW5zRWxlbWVudFJlZiAmJlxuICAgICAgLy8gIWNvbnRhaW5zRm9jdXNlZEVsZW1lbnQgJiZcbiAgICAgICFjb250YWluc1Nob3dCdXR0b24gJiZcbiAgICAgICFzaG93S2V5Ym9hcmRCdXR0b25DbGlja2VkXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0ZWQoKSkge1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFzQXR0YWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmxheVJlZj8uaGFzQXR0YWNoZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9zaXRpb25TdHJhdGVneShpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudCwgZml4ZWRCb3R0b206IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLmdldFBvc2l0aW9uU3RyYXRlZ3koaW5wdXRPcmlnaW4sIGZpeGVkQm90dG9tKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNpemUoKTogdm9pZCB7XG4gICAgdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVNpemUodGhpcy5nZXRPdmVybGF5U2l6ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UG9zaXRpb25TdHJhdGVneShpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudCwgZml4ZWRCb3R0b206IGJvb2xlYW4pOiBQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICBpZiAoZml4ZWRCb3R0b20pIHtcbiAgICAgIHJldHVybiB0aGlzLm92ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5ib3R0b20oJzAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb2ludFdpdGhEaW1lbnNpb25zOiBQb3NpdGlvblN0cmF0ZWd5T3JpZ2luID0gdGhpcy5jb21wdXRlUG9zaXRpb25TdHJhdGVneU9yaWdpbihpbnB1dE9yaWdpbik7XG5cbiAgICByZXR1cm4gdGhpcy5vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8ocG9pbnRXaXRoRGltZW5zaW9ucylcbiAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgLndpdGhMb2NrZWRQb3NpdGlvbih0cnVlKVxuICAgICAgLndpdGhQdXNoKGZhbHNlKVxuICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICB7XG4gICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gIH1cblxuICBwcml2YXRlIGdldE92ZXJsYXlTaXplKCk6IE92ZXJsYXlTaXplQ29uZmlnIHtcbiAgICBjb25zdCBvdmVybGF5V2lkdGggPSB0aGlzLmxheW91dCA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLm51bWVyaWMgPyAnNDAwcHgnIDogJzEyMDBweCc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IG92ZXJsYXlXaWR0aCxcbiAgICAgIG1heFdpZHRoOiBvdmVybGF5V2lkdGgsXG4gICAgICBtaW5XaWR0aDogb3ZlcmxheVdpZHRoLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKGlucHV0T3JpZ2luOiBIVE1MSW5wdXRFbGVtZW50KTogUG9zaXRpb25TdHJhdGVneU9yaWdpbiB7XG4gICAgY29uc3Qgb3ZlcmxheU9mZnNldFggPSB0aGlzLmNvbXB1dGVPdmVybGF5T2Zmc2V0WChpbnB1dE9yaWdpbik7XG4gICAgY29uc3QgeyB3aWR0aDogb3ZlcmxheVdpZHRoU3RyaW5nIH0gPSB0aGlzLmdldE92ZXJsYXlTaXplKCk7XG4gICAgY29uc3Qgb3ZlcmxheVdpZHRoID0gTnVtYmVyKChvdmVybGF5V2lkdGhTdHJpbmcgYXMgc3RyaW5nKS5yZXBsYWNlKCdweCcsICcnKSk7XG4gICAgY29uc3Qge3gsIHksIHdpZHRoLCBoZWlnaHR9ID0gaW5wdXRPcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgeDogd2lkdGggPCBvdmVybGF5V2lkdGggPyB4IC0gb3ZlcmxheU9mZnNldFggOiB4ICsgb3ZlcmxheU9mZnNldFgsXG4gICAgICB5LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVPdmVybGF5T2Zmc2V0WChpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudCk6IG51bWJlciB7XG4gICAgY29uc3QgeyB3aWR0aDogb3ZlcmxheVdpZHRoU3RyaW5nIH0gPSB0aGlzLmdldE92ZXJsYXlTaXplKCk7XG4gICAgY29uc3Qgb3ZlcmxheVdpZHRoID0gTnVtYmVyKChvdmVybGF5V2lkdGhTdHJpbmcgYXMgc3RyaW5nKS5yZXBsYWNlKCdweCcsICcnKSk7XG4gICAgY29uc3QgaW5wdXRXaWR0aCA9IGlucHV0T3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXG4gICAgY29uc3QgZXh0cmFXaWR0aCA9IG92ZXJsYXlXaWR0aCAtIGlucHV0V2lkdGg7XG5cbiAgICByZXR1cm4gTWF0aC5hYnMoZXh0cmFXaWR0aCkgLyAyO1xuICB9XG59XG4iXX0=
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Component, EventEmitter, HostListener, Output } from '@angular/core';
|
|
2
|
-
import SimpleKeyboard from 'simple-keyboard';
|
|
3
|
-
import { SystelabVirtualKeyboardButton, SystelabVirtualKeyboardInputTypes, SystelabVirtualKeyboardLayouts } from './constants';
|
|
1
|
+
import { Component, EventEmitter, HostListener, Inject, Optional, Output } from '@angular/core';
|
|
2
|
+
import { SimpleKeyboard } from 'simple-keyboard';
|
|
3
|
+
import { SystelabVirtualKeyboardButton, SystelabVirtualKeyboardInputMethods, SystelabVirtualKeyboardInputTypes, SystelabVirtualKeyboardLayouts } from './constants';
|
|
4
|
+
import { VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export class SystelabVirtualKeyboardComponent {
|
|
6
7
|
handleKeyUp(event) {
|
|
@@ -23,8 +24,9 @@ export class SystelabVirtualKeyboardComponent {
|
|
|
23
24
|
get isTextarea() {
|
|
24
25
|
return this.activeInputElement?.type === 'textarea';
|
|
25
26
|
}
|
|
26
|
-
constructor(elementRef) {
|
|
27
|
+
constructor(elementRef, virtualKeyboardConfig) {
|
|
27
28
|
this.elementRef = elementRef;
|
|
29
|
+
this.virtualKeyboardConfig = virtualKeyboardConfig;
|
|
28
30
|
this.debug = false;
|
|
29
31
|
this.selectedLayout = SystelabVirtualKeyboardLayouts.default;
|
|
30
32
|
this.caretPosition = null;
|
|
@@ -49,20 +51,8 @@ export class SystelabVirtualKeyboardComponent {
|
|
|
49
51
|
],
|
|
50
52
|
[SystelabVirtualKeyboardLayouts.numeric]: ['7 8 9', '4 5 6', '1 2 3', '0 {bksp}'],
|
|
51
53
|
};
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
mergeDisplay: true,
|
|
55
|
-
display: {
|
|
56
|
-
[SystelabVirtualKeyboardButton.Backspace]: 'delete',
|
|
57
|
-
},
|
|
58
|
-
buttonTheme: [
|
|
59
|
-
{
|
|
60
|
-
class: 'virtual-keyboard-delete-button',
|
|
61
|
-
buttons: `${SystelabVirtualKeyboardButton.Backspace}`,
|
|
62
|
-
},
|
|
63
|
-
],
|
|
64
|
-
layout,
|
|
65
|
-
});
|
|
54
|
+
const keyboardOptions = this.prepareKeyboardConfig();
|
|
55
|
+
this.keyboard = new SimpleKeyboard('.simple-keyboard', keyboardOptions);
|
|
66
56
|
this.setLayout(this.selectedLayout);
|
|
67
57
|
if (this.debug) {
|
|
68
58
|
console.log('Layout: ', layout);
|
|
@@ -98,6 +88,54 @@ export class SystelabVirtualKeyboardComponent {
|
|
|
98
88
|
});
|
|
99
89
|
}
|
|
100
90
|
}
|
|
91
|
+
prepareKeyboardConfig() {
|
|
92
|
+
const layout = {
|
|
93
|
+
[SystelabVirtualKeyboardLayouts.default]: [
|
|
94
|
+
'` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
|
|
95
|
+
'{tab} q w e r t y u i o p [ ] \\',
|
|
96
|
+
"{lock} a s d f g h j k l ; ' {enter}",
|
|
97
|
+
'{shift} z x c v b n m , . / {shift}',
|
|
98
|
+
'{space}',
|
|
99
|
+
],
|
|
100
|
+
[SystelabVirtualKeyboardLayouts.shift]: [
|
|
101
|
+
'~ ! @ # $ % ^ & * ( ) _ + {bksp}',
|
|
102
|
+
'{tab} Q W E R T Y U I O P { } |',
|
|
103
|
+
'{lock} A S D F G H J K L : " {enter}',
|
|
104
|
+
'{shift} Z X C V B N M < > ? {shift}',
|
|
105
|
+
'{space}',
|
|
106
|
+
],
|
|
107
|
+
[SystelabVirtualKeyboardLayouts.numeric]: ['7 8 9', '4 5 6', '1 2 3', '0 {bksp}'],
|
|
108
|
+
};
|
|
109
|
+
let keyboardOptions = {
|
|
110
|
+
onKeyPress: (button) => this.handleKeyPress(button),
|
|
111
|
+
mergeDisplay: true,
|
|
112
|
+
display: {
|
|
113
|
+
[SystelabVirtualKeyboardButton.Backspace]: 'delete',
|
|
114
|
+
},
|
|
115
|
+
buttonTheme: [
|
|
116
|
+
{
|
|
117
|
+
class: 'virtual-keyboard-delete-button',
|
|
118
|
+
buttons: `${SystelabVirtualKeyboardButton.Backspace}`,
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
layout,
|
|
122
|
+
};
|
|
123
|
+
if (this.virtualKeyboardConfig?.hasOwnProperty('inputMethod')) {
|
|
124
|
+
if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboardInputMethods.onlyMouseEvents) {
|
|
125
|
+
keyboardOptions = {
|
|
126
|
+
...keyboardOptions,
|
|
127
|
+
useMouseEvents: true,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
else if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboardInputMethods.onlyTouchEvents) {
|
|
131
|
+
keyboardOptions = {
|
|
132
|
+
...keyboardOptions,
|
|
133
|
+
useTouchEvents: true,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return keyboardOptions;
|
|
138
|
+
}
|
|
101
139
|
isInputAlphabetic(activeInputElement) {
|
|
102
140
|
const inputType = activeInputElement?.type;
|
|
103
141
|
return inputType && [SystelabVirtualKeyboardInputTypes.text, SystelabVirtualKeyboardInputTypes.password].some((i) => i === inputType);
|
|
@@ -328,13 +366,18 @@ export class SystelabVirtualKeyboardComponent {
|
|
|
328
366
|
this.caretPosition = position;
|
|
329
367
|
this.caretPositionEnd = endPosition;
|
|
330
368
|
}
|
|
331
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
369
|
+
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 }); }
|
|
332
370
|
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%}\n"] }); }
|
|
333
371
|
}
|
|
334
372
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardComponent, decorators: [{
|
|
335
373
|
type: Component,
|
|
336
374
|
args: [{ selector: 'systelab-virtual-keyboard.component', standalone: true, imports: [], 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%}\n"] }]
|
|
337
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }
|
|
375
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: undefined, decorators: [{
|
|
376
|
+
type: Optional
|
|
377
|
+
}, {
|
|
378
|
+
type: Inject,
|
|
379
|
+
args: [VIRTUAL_KEYBOARD_CONFIG]
|
|
380
|
+
}] }], propDecorators: { handleKeyUp: [{
|
|
338
381
|
type: HostListener,
|
|
339
382
|
args: ['window:keyup', ['$event']]
|
|
340
383
|
}], handleMouseUp: [{
|
|
@@ -349,4 +392,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
|
|
|
349
392
|
}], closePanel: [{
|
|
350
393
|
type: Output
|
|
351
394
|
}] } });
|
|
352
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLGNBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLGlDQUFpQyxFQUNqQyw4QkFBOEIsRUFDL0IsTUFBTSxhQUFhLENBQUM7O0FBU3JCLE1BQU0sT0FBTyxnQ0FBZ0M7SUFFM0MsV0FBVyxDQUFDLEtBQW9CO1FBQzlCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBR0QsYUFBYSxDQUFDLEtBQW1CO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBR0QsWUFBWSxDQUFDLEtBQVk7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFHRCxxQkFBcUIsQ0FBQyxLQUFZO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxJQUFJLENB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Z0IsQ0FBQyxRQUF1QixFQUFFLFdBQVcsR0FBRyxRQUFRO1FBQ3RFLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7SUFDdEMsQ0FBQzs4R0F0WFUsZ0NBQWdDO2tHQUFoQyxnQ0FBZ0MsdVZDZjdDLG12QkFVQTs7MkZES2EsZ0NBQWdDO2tCQVA1QyxTQUFTOytCQUNFLHFDQUFxQyxjQUNuQyxJQUFJLFdBQ1AsRUFBRTsrRUFNWCxXQUFXO3NCQURWLFlBQVk7dUJBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVF4QyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTTVDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTXpDLHFCQUFxQjtzQkFEcEIsWUFBWTt1QkFBQyx3QkFBd0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFvQnhDLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBTaW1wbGVLZXlib2FyZCBmcm9tICdzaW1wbGUta2V5Ym9hcmQnO1xuaW1wb3J0IHtcbiAgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24sXG4gIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRUeXBlcyxcbiAgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzXG59IGZyb20gJy4vY29uc3RhbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJ3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAnLCBbJyRldmVudCddKVxuICBoYW5kbGVLZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5pc1RydXN0ZWQpIHtcbiAgICAgIHRoaXMuY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpwb2ludGVydXAnLCBbJyRldmVudCddKVxuICBoYW5kbGVNb3VzZVVwKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNhcmV0RXZlbnRIYW5kbGVyKGV2ZW50KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzZWxlY3QnLCBbJyRldmVudCddKVxuICBoYW5kbGVTZWxlY3QoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jYXJldEV2ZW50SGFuZGxlcihldmVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2VsZWN0aW9uY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xuICB9XG5cbiAgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudD8ubWF4TGVuZ3RoID8/IC0xO1xuICB9XG5cbiAgZ2V0IGlzVGV4dGFyZWEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50Py50eXBlID09PSAndGV4dGFyZWEnO1xuICB9XG5cbiAgcHVibGljIGRlYnVnID0gZmFsc2U7XG4gIHByaXZhdGUgc2VsZWN0ZWRMYXlvdXQ6IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyA9IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5kZWZhdWx0O1xuICBwcml2YXRlIGtleWJvYXJkOiBTaW1wbGVLZXlib2FyZDtcbiAgcHJpdmF0ZSBjYXJldFBvc2l0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjYXJldFBvc2l0aW9uRW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBhY3RpdmVJbnB1dEVsZW1lbnQhOiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGw7XG5cbiAgQE91dHB1dCgpIGNsb3NlUGFuZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+KSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBsYXlvdXQgPSB7XG4gICAgICBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHRdOiBbXG4gICAgICAgICdgIDEgMiAzIDQgNSA2IDcgOCA5IDAgLSA9IHtia3NwfScsXG4gICAgICAgICd7dGFifSBxIHcgZSByIHQgeSB1IGkgbyBwIFsgXSBcXFxcJyxcbiAgICAgICAgXCJ7bG9ja30gYSBzIGQgZiBnIGggaiBrIGwgOyAnIHtlbnRlcn1cIixcbiAgICAgICAgJ3tzaGlmdH0geiB4IGMgdiBiIG4gbSAsIC4gLyB7c2hpZnR9JyxcbiAgICAgICAgJ3tzcGFjZX0nLFxuICAgICAgXSxcbiAgICAgIFtTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuc2hpZnRdOiBbXG4gICAgICAgICd+ICEgQCAjICQgJSBeICZhbXA7ICogKCApIF8gKyB7YmtzcH0nLFxuICAgICAgICAne3RhYn0gUSBXIEUgUiBUIFkgVSBJIE8gUCB7IH0gfCcsXG4gICAgICAgICd7bG9ja30gQSBTIEQgRiBHIEggSiBLIEwgOiBcIiB7ZW50ZXJ9JyxcbiAgICAgICAgJ3tzaGlmdH0gWiBYIEMgViBCIE4gTSAmbHQ7ICZndDsgPyB7c2hpZnR9JyxcbiAgICAgICAgJ3tzcGFjZX0nLFxuICAgICAgXSxcbiAgICAgIFtTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMubnVtZXJpY106IFsnNyA4IDknLCAnNCA1IDYnLCAnMSAyIDMnLCAnMCB7YmtzcH0nXSxcbiAgICB9O1xuICAgIHRoaXMua2V5Ym9hcmQgPSBuZXcgU2ltcGxlS2V5Ym9hcmQoJy5zaW1wbGUta2V5Ym9hcmQnLCB7XG4gICAgICBvbktleVByZXNzOiAoYnV0dG9uKSA9PiB0aGlzLmhhbmRsZUtleVByZXNzKGJ1dHRvbiksXG4gICAgICBtZXJnZURpc3BsYXk6IHRydWUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIFtTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5CYWNrc3BhY2VdOiAnZGVsZXRlJyxcbiAgICAgIH0sXG4gICAgICBidXR0b25UaGVtZTogW1xuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6ICd2aXJ0dWFsLWtleWJvYXJkLWRlbGV0ZS1idXR0b24nLFxuICAgICAgICAgIGJ1dHRvbnM6IGAke1N5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkJhY2tzcGFjZX1gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGxheW91dCxcbiAgICB9KTtcbiAgICB0aGlzLnNldExheW91dCh0aGlzLnNlbGVjdGVkTGF5b3V0KTtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgY29uc29sZS5sb2coJ0xheW91dDogJywgbGF5b3V0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0QWN0aXZlSW5wdXQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQgPSBpbnB1dDtcblxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zdCBpbnB1dFR5cGUgPSB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudD8udHlwZTtcbiAgICAgIGNvbnNvbGUubG9nKCdMYXlvdXQ6JywgYCR7aW5wdXRUeXBlfV8ke3RoaXMuc2VsZWN0ZWRMYXlvdXR9YCk7XG4gICAgfVxuXG4gICAgbGV0IHNlbGVjdGlvblN0YXJ0OiBudW1iZXI7XG4gICAgbGV0IHNlbGVjdGlvbkVuZDogbnVtYmVyO1xuICAgIGlmICh0aGlzLmlzSW5wdXROdW1lcmljKGlucHV0KSkge1xuICAgICAgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudC52YWx1ZS50b1N0cmluZygpLmxlbmd0aDtcbiAgICAgIHNlbGVjdGlvbkVuZCA9IHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50LnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb25TdGFydCA9IHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgc2VsZWN0aW9uRW5kID0gdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQuc2VsZWN0aW9uRW5kO1xuICAgIH1cblxuICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcblxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmxvZygnQ2FyZXQgc3RhcnQgYXQ6JywgdGhpcy5jYXJldFBvc2l0aW9uLCB0aGlzLmNhcmV0UG9zaXRpb25FbmQpO1xuICAgIH1cbiAgICB0aGlzLmZvY3VzQWN0aXZlSW5wdXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRMYXlvdXQobGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkTGF5b3V0ID0gbGF5b3V0O1xuICAgIGlmICh0aGlzLmtleWJvYXJkKSB7XG4gICAgICB0aGlzLmtleWJvYXJkLnNldE9wdGlvbnMoe1xuICAgICAgICBsYXlvdXROYW1lOiBsYXlvdXQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzSW5wdXRBbHBoYWJldGljKGFjdGl2ZUlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBpbnB1dFR5cGUgPSBhY3RpdmVJbnB1dEVsZW1lbnQ/LnR5cGU7XG4gICAgcmV0dXJuIGlucHV0VHlwZSAmJiBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dFR5cGVzLnRleHQsIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRUeXBlcy5wYXNzd29yZF0uc29tZSgoaSkgPT4gaSA9PT0gaW5wdXRUeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJbnB1dE51bWVyaWMoYWN0aXZlSW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlucHV0VHlwZSA9IGFjdGl2ZUlucHV0RWxlbWVudD8udHlwZTtcbiAgICByZXR1cm4gaW5wdXRUeXBlICYmIFtTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0VHlwZXMubnVtYmVyXS5zb21lKChpKSA9PiBpID09PSBpbnB1dFR5cGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVLZXlQcmVzcyhidXR0b246IHN0cmluZywgZT86IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdLZXkgcHJlc3M6JywgYnV0dG9uKTtcbiAgICB9XG5cbiAgICBpZiAoYnV0dG9uID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5TaGlmdCB8fCBidXR0b24gPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkxvY2spIHtcbiAgICAgIHRoaXMudG9nZ2xlU2hpZnQoKTtcbiAgICB9IGVsc2UgaWYgKGJ1dHRvbiA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uRG9uZSkge1xuICAgICAgdGhpcy5jbG9zZVBhbmVsLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNBY2NlcHRlZE5vblN0YW5kYXJkQnV0dG9uKGJ1dHRvbikgJiYgIXRoaXMuaXNTdGFuZGFyZEJ1dHRvbihidXR0b24pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5oYW5kbGVCdXR0b25PdXRwdXQoYnV0dG9uKTtcblxuICAgIGlmICh0aGlzLmFjdGl2ZUlucHV0RWxlbWVudCkge1xuICAgICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQudmFsdWUgPSBvdXRwdXQ7XG5cbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDYXJldCBhdDonLCB0aGlzLmNhcmV0UG9zaXRpb24sIHRoaXMuY2FyZXRQb3NpdGlvbkVuZCwgJ0J1dHRvbicsIGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudHMoYnV0dG9uKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQnV0dG9uT3V0cHV0KGJ1dHRvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb21tb25QYXJhbXM6IFtudW1iZXIsIG51bWJlciwgYm9vbGVhbl0gPSB0aGlzLmdldENvbW1vblBhcmFtcygpO1xuICAgIGxldCBvdXRwdXQgPSB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudD8udmFsdWUgfHwgJyc7XG4gICAgaWYgKCF0aGlzLmlzU3RhbmRhcmRCdXR0b24oYnV0dG9uKSkge1xuICAgICAgaWYgKGJ1dHRvbiA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uQmFja3NwYWNlKSB7XG4gICAgICAgIG91dHB1dCA9IHRoaXMucmVtb3ZlQXQob3V0cHV0LCAuLi5jb21tb25QYXJhbXMpO1xuICAgICAgfSBlbHNlIGlmIChidXR0b24gPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLlNwYWNlKSB7XG4gICAgICAgIG91dHB1dCA9IHRoaXMuYWRkU3RyaW5nQXQob3V0cHV0LCAnICcsIC4uLmNvbW1vblBhcmFtcyk7XG4gICAgICB9IGVsc2UgaWYgKGJ1dHRvbiA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uVGFiKSB7XG4gICAgICAgIG91dHB1dCA9IHRoaXMuYWRkU3RyaW5nQXQob3V0cHV0LCAnXFx0JywgLi4uY29tbW9uUGFyYW1zKTtcbiAgICAgIH0gZWxzZSBpZiAoYnV0dG9uID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5FbnRlcikge1xuICAgICAgICBpZiAodGhpcy5pc1RleHRhcmVhKSB7XG4gICAgICAgICAgb3V0cHV0ID0gdGhpcy5hZGRTdHJpbmdBdChvdXRwdXQsICdcXG4nLCAuLi5jb21tb25QYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dCA9IHRoaXMuYWRkU3RyaW5nQXQob3V0cHV0LCBidXR0b24sIC4uLmNvbW1vblBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tbW9uUGFyYW1zKCk6IFtudW1iZXIsIG51bWJlciwgYm9vbGVhbl0ge1xuICAgIHJldHVybiBbdGhpcy5jYXJldFBvc2l0aW9uIHx8IDAsIHRoaXMuY2FyZXRQb3NpdGlvbkVuZCB8fCAwLCB0cnVlXTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBY2NlcHRlZE5vblN0YW5kYXJkQnV0dG9uKGJ1dHRvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkJhY2tzcGFjZS50b1N0cmluZygpLFxuICAgICAgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uU3BhY2UudG9TdHJpbmcoKSxcbiAgICAgIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLlRhYi50b1N0cmluZygpLFxuICAgICAgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uRW50ZXIudG9TdHJpbmcoKSxcbiAgICBdLmluY2x1ZGVzKGJ1dHRvbik7XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoRXZlbnRzKGJ1dHRvbjogc3RyaW5nKSB7XG4gICAgY29uc3QgeyBrZXksIGNvZGUgfSA9IHRoaXMuY29udmVydEZyb21CdXR0b25Ub0NvZGUoYnV0dG9uKTtcblxuICAgIGNvbnN0IGV2ZW50SW5pdDogS2V5Ym9hcmRFdmVudEluaXQgPSB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgIHNoaWZ0S2V5OiB0aGlzLnNlbGVjdGVkTGF5b3V0ID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuc2hpZnQsXG4gICAgICBrZXk6IGtleSxcbiAgICAgIGNvZGU6IGNvZGUsXG4gICAgICBsb2NhdGlvbjogMCxcbiAgICB9O1xuXG4gICAgLy8gU2ltdWxhdGUgYWxsIG5lZWRlZCBldmVudHMgb24gYmFzZSBlbGVtZW50XG4gICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleWRvd24nLCBldmVudEluaXQpKTtcbiAgICB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudD8uZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCgna2V5cHJlc3MnLCBldmVudEluaXQpKTtcbiAgICB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudD8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudD8uZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCgna2V5dXAnLCBldmVudEluaXQpKTtcblxuICAgIC8vIEFuZCBzZXQgZm9jdXMgdG8gaW5wdXRcbiAgICB0aGlzLmZvY3VzQWN0aXZlSW5wdXQoKTtcbiAgfVxuXG4gIC8qXG4gICAqIEFVWElMSUFSWSBNRVRIT0RTXG4gICAqICovXG4gIHByaXZhdGUgY29udmVydEZyb21CdXR0b25Ub0NvZGUoYnV0dG9uOiBzdHJpbmcpOiB7IGtleTogc3RyaW5nOyBjb2RlOiBzdHJpbmcgfSB7XG4gICAgbGV0IGtleTogc3RyaW5nO1xuICAgIGxldCBjb2RlOiBzdHJpbmc7XG4gICAgaWYgKGJ1dHRvbi5pbmNsdWRlcygneycpICYmIGJ1dHRvbi5pbmNsdWRlcygnfScpKSB7XG4gICAgICAvLyBDYXBpdGFsaXplIG5hbWVcbiAgICAgIGtleSA9IGJ1dHRvbi5zbGljZSgxLCBidXR0b24ubGVuZ3RoIC0gMSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGtleSA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTtcbiAgICAgIGNvZGUgPSBrZXk7XG5cbiAgICAgIC8vIEZpeCB0byBzdGFuZGFyZCBrZXkgY29kZVxuICAgICAgaWYgKGNvZGUudG9Mb3dlckNhc2UoKSA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uQmFja3NwYWNlLnNsaWNlKDEsIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkJhY2tzcGFjZS5sZW5ndGggLSAxKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNvZGUgPSAnQmFja3NwYWNlJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gYnV0dG9uO1xuICAgICAgY29kZSA9IE51bWJlci5pc0ludGVnZXIoTnVtYmVyKGJ1dHRvbikpID8gYERpZ2l0JHtidXR0b259YCA6IGBLZXkke2J1dHRvbi50b1VwcGVyQ2FzZSgpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsga2V5LCBjb2RlIH07XG4gIH1cblxuICBwcml2YXRlIGZvY3VzQWN0aXZlSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgaWYgKCF0aGlzLmlzSW5wdXROdW1lcmljKHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50KSkge1xuICAgICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LnNldFNlbGVjdGlvblJhbmdlKHRoaXMuY2FyZXRQb3NpdGlvbiwgdGhpcy5jYXJldFBvc2l0aW9uRW5kKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZVNoaWZ0KCkge1xuICAgIGxldCBjdXJyZW50TGF5b3V0ID0gdGhpcy5rZXlib2FyZC5vcHRpb25zLmxheW91dE5hbWU7XG4gICAgbGV0IHNlbGVjdGVkTGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMgPVxuICAgICAgY3VycmVudExheW91dCA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHQgPyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuc2hpZnQgOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuZGVmYXVsdDtcblxuICAgIHRoaXMuc2V0TGF5b3V0KHNlbGVjdGVkTGF5b3V0KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTdGFuZGFyZEJ1dHRvbihidXR0b246IHN0cmluZykge1xuICAgIHJldHVybiBidXR0b24gJiYgIShidXR0b25bMF0gPT09ICd7JyAmJiBidXR0b25bYnV0dG9uLmxlbmd0aCAtIDFdID09PSAnfScpO1xuICB9XG5cbiAgLypcbiAgICogT1VUUFVUIFNUUklORyBNRVRIT0RTXG4gICAqICovXG4gIHByaXZhdGUgcmVtb3ZlQXQoc291cmNlOiBzdHJpbmcsIHBvc2l0aW9uID0gc291cmNlLmxlbmd0aCwgcG9zaXRpb25FbmQgPSBzb3VyY2UubGVuZ3RoLCBtb3ZlQ2FyZXQgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgaWYgKHBvc2l0aW9uID09PSAwICYmIHBvc2l0aW9uRW5kID09PSAwKSB7XG4gICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cblxuICAgIGxldCBvdXRwdXQ6IHN0cmluZztcblxuICAgIGlmIChwb3NpdGlvbiA9PT0gcG9zaXRpb25FbmQpIHtcbiAgICAgIGlmIChwb3NpdGlvbiAmJiBwb3NpdGlvbiA+PSAwKSB7XG4gICAgICAgIG91dHB1dCA9IHNvdXJjZS5zbGljZSgwLCBwb3NpdGlvbiAtIDEpICsgc291cmNlLnNsaWNlKHBvc2l0aW9uKTtcbiAgICAgICAgaWYgKG1vdmVDYXJldCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZXRQb3NpdGlvbigxLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0ID0gc291cmNlLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgaWYgKG1vdmVDYXJldCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZXRQb3NpdGlvbigxLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoMCwgcG9zaXRpb24pICsgc291cmNlLnNsaWNlKHBvc2l0aW9uRW5kKTtcbiAgICAgIGlmIChtb3ZlQ2FyZXQpIHtcbiAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTdHJpbmdBdChzb3VyY2U6IHN0cmluZywgc3RyOiBzdHJpbmcsIHBvc2l0aW9uID0gc291cmNlLmxlbmd0aCwgcG9zaXRpb25FbmQgPSBzb3VyY2UubGVuZ3RoLCBtb3ZlQ2FyZXQgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubWF4TGVuZ3RoICE9PSAtMSAmJiBzb3VyY2UubGVuZ3RoID49IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cblxuICAgIGxldCBvdXRwdXQ6IHN0cmluZztcblxuICAgIGlmICghcG9zaXRpb24gJiYgcG9zaXRpb24gIT09IDApIHtcbiAgICAgIG91dHB1dCA9IHNvdXJjZSArIHN0cjtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0ID0gW3NvdXJjZS5zbGljZSgwLCBwb3NpdGlvbiksIHN0ciwgc291cmNlLnNsaWNlKHBvc2l0aW9uRW5kKV0uam9pbignJyk7XG4gICAgICBpZiAobW92ZUNhcmV0KSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FyZXRQb3NpdGlvbihzdHIubGVuZ3RoLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIC8qXG4gICAqIENBUkVUIE1FVEhPRFNcbiAgICogKi9cbiAgcHJpdmF0ZSBjYXJldEV2ZW50SGFuZGxlcihldmVudDogYW55KSB7XG4gICAgbGV0IHRhcmdldFRhZ05hbWUgPSAnJztcbiAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUpIHtcbiAgICAgIHRhcmdldFRhZ05hbWUgPSBldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVGV4dElucHV0ID1cbiAgICAgIHRhcmdldFRhZ05hbWUgPT09ICd0ZXh0YXJlYScgfHxcbiAgICAgICh0YXJnZXRUYWdOYW1lID09PSAnaW5wdXQnICYmIFsndGV4dCcsICdzZWFyY2gnLCAnZW1haWwnLCAncGFzc3dvcmQnLCAndXJsJywgJ3RlbCddLmluY2x1ZGVzKGV2ZW50LnRhcmdldC50eXBlKSk7XG5cbiAgICBjb25zdCBpc0tleWJvYXJkID1cbiAgICAgIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgfHwgKGV2ZW50LnRhcmdldCAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKTtcblxuICAgIGlmIChpc1RleHRJbnB1dCAmJiB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudCA9PSBldmVudC50YXJnZXQpIHtcbiAgICAgIC8qKlxuICAgICAgICogVHJhY2tzIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uXG4gICAgICAgKiBBcyBrZXlzIGFyZSBwcmVzc2VkLCB0ZXh0IHdpbGwgYmUgYWRkZWQvcmVtb3ZlZCBhdCB0aGF0IHBvc2l0aW9uIHdpdGhpbiB0aGUgaW5wdXQuXG4gICAgICAgKi9cbiAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQsIGV2ZW50LnRhcmdldC5zZWxlY3Rpb25FbmQpO1xuXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2FyZXQgYXQ6JywgdGhpcy5jYXJldFBvc2l0aW9uLCB0aGlzLmNhcmV0UG9zaXRpb25FbmQsIGV2ZW50ICYmIGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCksIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdwb2ludGVydXAnICYmIHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICghaXNLZXlib2FyZCAmJiBldmVudD8udHlwZSAhPT0gJ3NlbGVjdGlvbmNoYW5nZScpIHtcbiAgICAgIC8qKlxuICAgICAgICogd2UgbXVzdCBlbnN1cmUgY2FyZXRQb3NpdGlvbiBkb2Vzbid0IHBlcnNpc3Qgb25jZSByZWFjdGl2YXRlZC5cbiAgICAgICAqL1xuICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKG51bGwpO1xuXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhgQ2FyZXQgcG9zaXRpb24gcmVzZXQgZHVlIHRvIFwiJHtldmVudD8udHlwZX1cIiBldmVudGAsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNhcmV0UG9zaXRpb24obGVuZ3RoOiBudW1iZXIsIG1pbnVzID0gZmFsc2UpIHtcbiAgICBjb25zdCBuZXdDYXJldFBvcyA9IHRoaXMuY29tcHV0ZU5ld0NhcmV0UG9zaXRpb24obGVuZ3RoLCBtaW51cyk7XG4gICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKG5ld0NhcmV0UG9zKTtcbiAgICAvLyBTY3JvbGwgdG8gYm90dG9tXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudD8uc2Nyb2xsVG8oe1xuICAgICAgICB0b3A6IHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50LnNjcm9sbEhlaWdodCxcbiAgICAgIH0gYXMgU2Nyb2xsVG9PcHRpb25zKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZU5ld0NhcmV0UG9zaXRpb24obGVuZ3RoOiBudW1iZXIsIG1pbnVzID0gZmFsc2UpIHtcbiAgICBsZXQgY2FyZXRQb3NpdGlvbiA9IHRoaXMuY2FyZXRQb3NpdGlvbjtcblxuICAgIGlmIChjYXJldFBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgIGlmIChtaW51cykge1xuICAgICAgICBpZiAoY2FyZXRQb3NpdGlvbiA+IDApIGNhcmV0UG9zaXRpb24gPSBjYXJldFBvc2l0aW9uIC0gbGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FyZXRQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb24gKyBsZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYXJldFBvc2l0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYXJldFBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXIgfCBudWxsLCBlbmRQb3NpdGlvbiA9IHBvc2l0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5jYXJldFBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgdGhpcy5jYXJldFBvc2l0aW9uRW5kID0gZW5kUG9zaXRpb247XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgKGMpIDIwMjAgLSAyMDI0IC0gSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgU3lzdGVsYWIgVGVjaG5vbG9naWVzLCBTQS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAgfiBOT1RJQ0U6ICBBbGwgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBpcyBhbmQgcmVtYWlucyB0aGUgcHJvcGVydHkgb2YgSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgaXRzXG4gIH4gYWZmaWxpYXRlcywgaWYgYW55LiAgVGhlIGludGVsbGVjdHVhbCBhbmQgdGVjaG5pY2FsIGNvbmNlcHRzIGNvbnRhaW5lZCBoZXJlaW4gYXJlIHByb3ByaWV0YXJ5IHRvIEluc3RydW1lbnRhdGlvblxuICB+IExhYm9yYXRvcnkgQ29tcGFueSBhbmQgaXRzIGFmZmlsaWF0ZXMgYW5kIG1heSBiZSBjb3ZlcmVkIGJ5IFUuUy4gYW5kIGZvcmVpZ24gcGF0ZW50cyBhbmQgcGF0ZW50IGFwcGxpY2F0aW9ucywgYW5kL29yXG4gIH4gYXJlIHByb3RlY3RlZCBieSB0cmFkZSBzZWNyZXQgb3IgY29weXJpZ2h0IGxhdy4gRGlzc2VtaW5hdGlvbiBvZiB0aGlzIGluZm9ybWF0aW9uIG9yIHJlcHJvZHVjdGlvbiBvZiB0aGlzIG1hdGVyaWFsIGlzXG4gIH4gc3RyaWN0bHkgZm9yYmlkZGVuIHVubGVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gaXMgSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueS5cbiAgLS0+XG5cbjxkaXYgY2xhc3M9XCJzaW1wbGUta2V5Ym9hcmRcIj48L2Rpdj5cbiJdfQ==
|
|
395
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsbUNBQW1DLEVBQ25DLGlDQUFpQyxFQUNqQyw4QkFBOEIsRUFDL0IsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFpQyx1QkFBdUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOztBQVU1RyxNQUFNLE9BQU8sZ0NBQWdDO0lBRTNDLFdBQVcsQ0FBQyxLQUFvQjtRQUM5QixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUdELGFBQWEsQ0FBQyxLQUFtQjtRQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUdELFlBQVksQ0FBQyxLQUFZO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBR0QscUJBQXFCLENBQUMsS0FBWTtRQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxLQUFLLFVBQVUsQ0FBQztJQUN0RCxDQUFDO0lBV0QsWUFBb0IsVUFBd0MsRUFBdUQscUJBQW9EO1FBQW5KLGVBQVUsR0FBVixVQUFVLENBQThCO1FBQXVELDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBK0I7UUFUaEssVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNiLG1CQUFjLEdBQW1DLDhCQUE4QixDQUFDLE9BQU8sQ0FBQztRQUV4RixrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDcEMscUJBQWdCLEdBQWtCLElBQUksQ0FBQztRQUdyQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUUySCxDQUFDO0lBRTVLLGVBQWU7UUFDYixNQUFNLE1BQU0sR0FBRztZQUNiLENBQUMsOEJBQThCLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3hDLGtDQUFrQztnQkFDbEMsa0NBQWtDO2dCQUNsQyxzQ0FBc0M7Z0JBQ3RDLHFDQUFxQztnQkFDckMsU0FBUzthQUNWO1lBQ0QsQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdEMsc0NBQXNDO2dCQUN0QyxpQ0FBaUM7Z0JBQ2pDLHNDQUFzQztnQkFDdEMsMkNBQTJDO2dCQUMzQyxTQUFTO2FBQ1Y7WUFDRCxDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDO1NBQ2xGLENBQUM7UUFFRixNQUFNLGVBQWUsR0FBb0IsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFTSxjQUFjLENBQUMsS0FBNkM7UUFDakUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUVoQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsU0FBUyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsSUFBSSxjQUFzQixDQUFDO1FBQzNCLElBQUksWUFBb0IsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUIsY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pFLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUNoRTthQUFNO1lBQ0wsY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUM7WUFDeEQsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUM7U0FDckQ7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXBELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMzRTtRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxTQUFTLENBQUMsTUFBc0M7UUFDckQsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2dCQUN2QixVQUFVLEVBQUUsTUFBTTthQUNuQixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsTUFBTSxNQUFNLEdBQUc7WUFDYixDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN4QyxrQ0FBa0M7Z0JBQ2xDLGtDQUFrQztnQkFDbEMsc0NBQXNDO2dCQUN0QyxxQ0FBcUM7Z0JBQ3JDLFNBQVM7YUFDVjtZQUNELENBQUMsOEJBQThCLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3RDLHNDQUFzQztnQkFDdEMsaUNBQWlDO2dCQUNqQyxzQ0FBc0M7Z0JBQ3RDLDJDQUEyQztnQkFDM0MsU0FBUzthQUNWO1lBQ0QsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQztTQUNsRixDQUFDO1FBRUYsSUFBSSxlQUFlLEdBQW9CO1lBQ3JDLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDbkQsWUFBWSxFQUFFLElBQUk7WUFDbEIsT0FBTyxFQUFFO2dCQUNQLENBQUMsNkJBQTZCLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUTthQUNwRDtZQUNELFdBQVcsRUFBRTtnQkFDWDtvQkFDRSxLQUFLLEVBQUUsZ0NBQWdDO29CQUN2QyxPQUFPLEVBQUUsR0FBRyw2QkFBNkIsQ0FBQyxTQUFTLEVBQUU7aUJBQ3REO2FBQ0Y7WUFDRCxNQUFNO1NBQ1AsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLGNBQWMsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUM3RCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEtBQUssbUNBQW1DLENBQUMsZUFBZSxFQUFFO2dCQUNsRyxlQUFlLEdBQUc7b0JBQ2hCLEdBQUcsZUFBZTtvQkFDbEIsY0FBYyxFQUFFLElBQUk7aUJBQ3JCLENBQUE7YUFDRjtpQkFBTSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEtBQUssbUNBQW1DLENBQUMsZUFBZSxFQUFFO2dCQUN6RyxlQUFlLEdBQUc7b0JBQ2hCLEdBQUcsZUFBZTtvQkFDbEIsY0FBYyxFQUFFLElBQUk7aUJBQ3JCLENBQUE7YUFDRjtTQUNGO1FBRUQsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLGtCQUEwRDtRQUNsRixNQUFNLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxJQUFJLENBQUM7UUFDM0MsT0FBTyxTQUFTLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLEVBQUUsaUNBQWlDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDeEksQ0FBQztJQUVPLGNBQWMsQ0FBQyxrQkFBMEQ7UUFDL0UsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLEVBQUUsSUFBSSxDQUFDO1FBQzNDLE9BQU8sU0FBUyxJQUFJLENBQUMsaUNBQWlDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFjLEVBQUUsQ0FBUztRQUM5QyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNuQztRQUVELElBQUksTUFBTSxLQUFLLDZCQUE2QixDQUFDLEtBQUssSUFBSSxNQUFNLEtBQUssNkJBQTZCLENBQUMsSUFBSSxFQUFFO1lBQ25HLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjthQUFNLElBQUksTUFBTSxLQUFLLDZCQUE2QixDQUFDLElBQUksRUFBRTtZQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0UsT0FBTztTQUNSO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRS9DLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBRXZDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbEY7U0FDRjtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE1BQWM7UUFDdkMsTUFBTSxZQUFZLEdBQThCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2RSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xDLElBQUksTUFBTSxLQUFLLDZCQUE2QixDQUFDLFNBQVMsRUFBRTtnQkFDdEQsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7YUFDakQ7aUJBQU0sSUFBSSxNQUFNLEtBQUssNkJBQTZCLENBQUMsS0FBSyxFQUFFO2dCQUN6RCxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7YUFDekQ7aUJBQU0sSUFBSSxNQUFNLEtBQUssNkJBQTZCLENBQUMsR0FBRyxFQUFFO2dCQUN2RCxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7YUFDMUQ7aUJBQU0sSUFBSSxNQUFNLEtBQUssNkJBQTZCLENBQUMsS0FBSyxFQUFFO2dCQUN6RCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ25CLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQztpQkFDMUQ7YUFDRjtpQkFBTTtnQkFDTCxPQUFPO2FBQ1I7U0FDRjthQUFNO1lBQ0wsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO1NBQzVEO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLGVBQWU7UUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVPLDJCQUEyQixDQUFDLE1BQWM7UUFDaEQsT0FBTztZQUNMLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7WUFDbEQsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUM5Qyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQzVDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7U0FDL0MsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFjO1FBQ25DLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNELE1BQU0sU0FBUyxHQUFzQjtZQUNuQyxPQUFPLEVBQUUsSUFBSTtZQUNiLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxLQUFLLDhCQUE4QixDQUFDLEtBQUs7WUFDdEUsR0FBRyxFQUFFLEdBQUc7WUFDUixJQUFJLEVBQUUsSUFBSTtZQUNWLFFBQVEsRUFBRSxDQUFDO1NBQ1osQ0FBQztRQUVGLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUMsSUFBSSxhQUFhLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFOUUseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7U0FFSztJQUNHLHVCQUF1QixDQUFDLE1BQWM7UUFDNUMsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxJQUFZLENBQUM7UUFDakIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDaEQsa0JBQWtCO1lBQ2xCLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZELEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakQsSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUVYLDJCQUEyQjtZQUMzQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUM3SSxJQUFJLEdBQUcsV0FBVyxDQUFDO2FBQ3BCO1NBQ0Y7YUFBTTtZQUNMLEdBQUcsR0FBRyxNQUFNLENBQUM7WUFDYixJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztTQUMzRjtRQUVELE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDdkY7SUFDSCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckQsSUFBSSxjQUFjLEdBQ2hCLGFBQWEsS0FBSyw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUMsT0FBTyxDQUFDO1FBRTNJLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQWM7UUFDckMsT0FBTyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVEOztTQUVLO0lBQ0csUUFBUSxDQUFDLE1BQWMsRUFBRSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLEdBQUcsS0FBSztRQUN2RyxJQUFJLFFBQVEsS0FBSyxDQUFDLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRTtZQUN2QyxPQUFPLE1BQU0sQ0FBQztTQUNmO1FBRUQsSUFBSSxNQUFjLENBQUM7UUFFbkIsSUFBSSxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQzVCLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7Z0JBQzdCLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDbkM7YUFDRjtpQkFBTTtnQkFDTCxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDbkM7YUFDRjtTQUNGO2FBQU07WUFDTCxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMvRCxJQUFJLFNBQVMsRUFBRTtnQkFDYixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDakM7U0FDRjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxXQUFXLENBQUMsTUFBYyxFQUFFLEdBQVcsRUFBRSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLEdBQUcsS0FBSztRQUN2SCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzVELE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLE1BQWMsQ0FBQztRQUVuQixJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7U0FDdkI7YUFBTTtZQUNMLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLElBQUksU0FBUyxFQUFFO2dCQUNiLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzdDO1NBQ0Y7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O1NBRUs7SUFDRyxpQkFBaUIsQ0FBQyxLQUFVO1FBQ2xDLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3hCLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwRDtRQUVELE1BQU0sV0FBVyxHQUNmLGFBQWEsS0FBSyxVQUFVO1lBQzVCLENBQUMsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVuSCxNQUFNLFVBQVUsR0FDZCxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFM0gsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDMUQ7OztlQUdHO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFOUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6SDtTQUNGO2FBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEtBQUssUUFBUSxDQUFDLGFBQWEsRUFBRTtZQUMzRixPQUFPO1NBQ1I7YUFBTSxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssaUJBQWlCLEVBQUU7WUFDM0Q7O2VBRUc7WUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFNUIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEtBQUssRUFBRSxJQUFJLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUMxRTtTQUNGO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQixDQUFDLE1BQWMsRUFBRSxLQUFLLEdBQUcsS0FBSztRQUN2RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQyxtQkFBbUI7UUFDbkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUM7Z0JBQ2hDLEdBQUcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWTthQUN2QixDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsTUFBYyxFQUFFLEtBQUssR0FBRyxLQUFLO1FBQzNELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFFdkMsSUFBSSxhQUFhLElBQUksSUFBSSxFQUFFO1lBQ3pCLElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksYUFBYSxHQUFHLENBQUM7b0JBQUUsYUFBYSxHQUFHLGFBQWEsR0FBRyxNQUFNLENBQUM7YUFDL0Q7aUJBQU07Z0JBQ0wsYUFBYSxHQUFHLGFBQWEsR0FBRyxNQUFNLENBQUM7YUFDeEM7U0FDRjtRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxRQUF1QixFQUFFLFdBQVcsR0FBRyxRQUFRO1FBQ3RFLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7SUFDdEMsQ0FBQzs4R0E5WlUsZ0NBQWdDLDRDQXdDdUMsdUJBQXVCO2tHQXhDOUYsZ0NBQWdDLHVWQzNCN0MsbXZCQVVBOzsyRkRpQmEsZ0NBQWdDO2tCQVA1QyxTQUFTOytCQUNFLHFDQUFxQyxjQUNuQyxJQUFJLFdBQ1AsRUFBRTs7MEJBNENvRCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHVCQUF1Qjt5Q0F0Q3pHLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUXhDLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNNUMsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNekMscUJBQXFCO3NCQURwQixZQUFZO3VCQUFDLHdCQUF3QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW9CeEMsVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNpbXBsZUtleWJvYXJkIH0gZnJvbSAnc2ltcGxlLWtleWJvYXJkJztcbmltcG9ydCB7XG4gIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLFxuICBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcyxcbiAgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dFR5cGVzLFxuICBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHNcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWcsIFZJUlRVQUxfS0VZQk9BUkRfQ09ORklHIH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbmZpZyc7XG5pbXBvcnQgeyBLZXlib2FyZE9wdGlvbnMgfSBmcm9tICdzaW1wbGUta2V5Ym9hcmQvYnVpbGQvaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQuY29tcG9uZW50JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW10sXG4gIHRlbXBsYXRlVXJsOiAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICdzeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuaXNUcnVzdGVkKSB7XG4gICAgICB0aGlzLmNhcmV0RXZlbnRIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cG9pbnRlcnVwJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlTW91c2VVcChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jYXJldEV2ZW50SGFuZGxlcihldmVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2VsZWN0JywgWyckZXZlbnQnXSlcbiAgaGFuZGxlU2VsZWN0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNlbGVjdGlvbmNoYW5nZScsIFsnJGV2ZW50J10pXG4gIGhhbmRsZVNlbGVjdGlvbkNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNhcmV0RXZlbnRIYW5kbGVyKGV2ZW50KTtcbiAgfVxuXG4gIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/Lm1heExlbmd0aCA/PyAtMTtcbiAgfVxuXG4gIGdldCBpc1RleHRhcmVhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudD8udHlwZSA9PT0gJ3RleHRhcmVhJztcbiAgfVxuXG4gIHB1YmxpYyBkZWJ1ZyA9IGZhbHNlO1xuICBwcml2YXRlIHNlbGVjdGVkTGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMgPSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuZGVmYXVsdDtcbiAgcHJpdmF0ZSBrZXlib2FyZDogU2ltcGxlS2V5Ym9hcmQ7XG4gIHByaXZhdGUgY2FyZXRQb3NpdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2FyZXRQb3NpdGlvbkVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYWN0aXZlSW5wdXRFbGVtZW50ITogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsO1xuXG4gIEBPdXRwdXQoKSBjbG9zZVBhbmVsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PiwgQE9wdGlvbmFsKCkgQEluamVjdChWSVJUVUFMX0tFWUJPQVJEX0NPTkZJRykgcHJpdmF0ZSB2aXJ0dWFsS2V5Ym9hcmRDb25maWc6IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnLCkge31cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgY29uc3QgbGF5b3V0ID0ge1xuICAgICAgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5kZWZhdWx0XTogW1xuICAgICAgICAnYCAxIDIgMyA0IDUgNiA3IDggOSAwIC0gPSB7YmtzcH0nLFxuICAgICAgICAne3RhYn0gcSB3IGUgciB0IHkgdSBpIG8gcCBbIF0gXFxcXCcsXG4gICAgICAgIFwie2xvY2t9IGEgcyBkIGYgZyBoIGogayBsIDsgJyB7ZW50ZXJ9XCIsXG4gICAgICAgICd7c2hpZnR9IHogeCBjIHYgYiBuIG0gLCAuIC8ge3NoaWZ0fScsXG4gICAgICAgICd7c3BhY2V9JyxcbiAgICAgIF0sXG4gICAgICBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLnNoaWZ0XTogW1xuICAgICAgICAnfiAhIEAgIyAkICUgXiAmYW1wOyAqICggKSBfICsge2Jrc3B9JyxcbiAgICAgICAgJ3t0YWJ9IFEgVyBFIFIgVCBZIFUgSSBPIFAgeyB9IHwnLFxuICAgICAgICAne2xvY2t9IEEgUyBEIEYgRyBIIEogSyBMIDogXCIge2VudGVyfScsXG4gICAgICAgICd7c2hpZnR9IFogWCBDIFYgQiBOIE0gJmx0OyAmZ3Q7ID8ge3NoaWZ0fScsXG4gICAgICAgICd7c3BhY2V9JyxcbiAgICAgIF0sXG4gICAgICBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLm51bWVyaWNdOiBbJzcgOCA5JywgJzQgNSA2JywgJzEgMiAzJywgJzAge2Jrc3B9J10sXG4gICAgfTtcblxuICAgIGNvbnN0IGtleWJvYXJkT3B0aW9uczogS2V5Ym9hcmRPcHRpb25zID0gdGhpcy5wcmVwYXJlS2V5Ym9hcmRDb25maWcoKTtcbiAgICB0aGlzLmtleWJvYXJkID0gbmV3IFNpbXBsZUtleWJvYXJkKCcuc2ltcGxlLWtleWJvYXJkJywga2V5Ym9hcmRPcHRpb25zKTtcbiAgICB0aGlzLnNldExheW91dCh0aGlzLnNlbGVjdGVkTGF5b3V0KTtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgY29uc29sZS5sb2coJ0xheW91dDogJywgbGF5b3V0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0QWN0aXZlSW5wdXQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQgPSBpbnB1dDtcblxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zdCBpbnB1dFR5cGUgPSB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudD8udHlwZTtcbiAgICAgIGNvbnNvbGUubG9nKCdMYXlvdXQ6JywgYCR7aW5wdXRUeXBlfV8ke3RoaXMuc2VsZWN0ZWRMYXlvdXR9YCk7XG4gICAgfVxuXG4gICAgbGV0IHNlbGVjdGlvblN0YXJ0OiBudW1iZXI7XG4gICAgbGV0IHNlbGVjdGlvbkVuZDogbnVtYmVyO1xuICAgIGlmICh0aGlzLmlzSW5wdXROdW1lcmljKGlucHV0KSkge1xuICAgICAgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudC52YWx1ZS50b1N0cmluZygpLmxlbmd0aDtcbiAgICAgIHNlbGVjdGlvbkVuZCA9IHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50LnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb25TdGFydCA9IHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgc2VsZWN0aW9uRW5kID0gdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQuc2VsZWN0aW9uRW5kO1xuICAgIH1cblxuICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcblxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmxvZygnQ2FyZXQgc3RhcnQgYXQ6JywgdGhpcy5jYXJldFBvc2l0aW9uLCB0aGlzLmNhcmV0UG9zaXRpb25FbmQpO1xuICAgIH1cbiAgICB0aGlzLmZvY3VzQWN0aXZlSW5wdXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRMYXlvdXQobGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkTGF5b3V0ID0gbGF5b3V0O1xuICAgIGlmICh0aGlzLmtleWJvYXJkKSB7XG4gICAgICB0aGlzLmtleWJvYXJkLnNldE9wdGlvbnMoe1xuICAgICAgICBsYXlvdXROYW1lOiBsYXlvdXQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVLZXlib2FyZENvbmZpZygpOiBLZXlib2FyZE9wdGlvbnMge1xuICAgIGNvbnN0IGxheW91dCA9IHtcbiAgICAgIFtTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuZGVmYXVsdF06IFtcbiAgICAgICAgJ2AgMSAyIDMgNCA1IDYgNyA4IDkgMCAtID0ge2Jrc3B9JyxcbiAgICAgICAgJ3t0YWJ9IHEgdyBlIHIgdCB5IHUgaSBvIHAgWyBdIFxcXFwnLFxuICAgICAgICBcIntsb2NrfSBhIHMgZCBmIGcgaCBqIGsgbCA7ICcge2VudGVyfVwiLFxuICAgICAgICAne3NoaWZ0fSB6IHggYyB2IGIgbiBtICwgLiAvIHtzaGlmdH0nLFxuICAgICAgICAne3NwYWNlfScsXG4gICAgICBdLFxuICAgICAgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5zaGlmdF06IFtcbiAgICAgICAgJ34gISBAICMgJCAlIF4gJmFtcDsgKiAoICkgXyArIHtia3NwfScsXG4gICAgICAgICd7dGFifSBRIFcgRSBSIFQgWSBVIEkgTyBQIHsgfSB8JyxcbiAgICAgICAgJ3tsb2NrfSBBIFMgRCBGIEcgSCBKIEsgTCA6IFwiIHtlbnRlcn0nLFxuICAgICAgICAne3NoaWZ0fSBaIFggQyBWIEIgTiBNICZsdDsgJmd0OyA/IHtzaGlmdH0nLFxuICAgICAgICAne3NwYWNlfScsXG4gICAgICBdLFxuICAgICAgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5udW1lcmljXTogWyc3IDggOScsICc0IDUgNicsICcxIDIgMycsICcwIHtia3NwfSddLFxuICAgIH07XG5cbiAgICBsZXQga2V5Ym9hcmRPcHRpb25zOiBLZXlib2FyZE9wdGlvbnMgPSB7XG4gICAgICBvbktleVByZXNzOiAoYnV0dG9uKSA9PiB0aGlzLmhhbmRsZUtleVByZXNzKGJ1dHRvbiksXG4gICAgICBtZXJnZURpc3BsYXk6IHRydWUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIFtTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5CYWNrc3BhY2VdOiAnZGVsZXRlJyxcbiAgICAgIH0sXG4gICAgICBidXR0b25UaGVtZTogW1xuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6ICd2aXJ0dWFsLWtleWJvYXJkLWRlbGV0ZS1idXR0b24nLFxuICAgICAgICAgIGJ1dHRvbnM6IGAke1N5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkJhY2tzcGFjZX1gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGxheW91dCxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMudmlydHVhbEtleWJvYXJkQ29uZmlnPy5oYXNPd25Qcm9wZXJ0eSgnaW5wdXRNZXRob2QnKSkge1xuICAgICAgaWYgKHRoaXMudmlydHVhbEtleWJvYXJkQ29uZmlnLmlucHV0TWV0aG9kID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcy5vbmx5TW91c2VFdmVudHMpIHtcbiAgICAgICAga2V5Ym9hcmRPcHRpb25zID0ge1xuICAgICAgICAgIC4uLmtleWJvYXJkT3B0aW9ucyxcbiAgICAgICAgICB1c2VNb3VzZUV2ZW50czogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnZpcnR1YWxLZXlib2FyZENvbmZpZy5pbnB1dE1ldGhvZCA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dE1ldGhvZHMub25seVRvdWNoRXZlbnRzKSB7XG4gICAgICAgIGtleWJvYXJkT3B0aW9ucyA9IHtcbiAgICAgICAgICAuLi5rZXlib2FyZE9wdGlvbnMsXG4gICAgICAgICAgdXNlVG91Y2hFdmVudHM6IHRydWUsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ga2V5Ym9hcmRPcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0lucHV0QWxwaGFiZXRpYyhhY3RpdmVJbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5wdXRUeXBlID0gYWN0aXZlSW5wdXRFbGVtZW50Py50eXBlO1xuICAgIHJldHVybiBpbnB1dFR5cGUgJiYgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRUeXBlcy50ZXh0LCBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0VHlwZXMucGFzc3dvcmRdLnNvbWUoKGkpID0+IGkgPT09IGlucHV0VHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5wdXROdW1lcmljKGFjdGl2ZUlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBpbnB1dFR5cGUgPSBhY3RpdmVJbnB1dEVsZW1lbnQ/LnR5cGU7XG4gICAgcmV0dXJuIGlucHV0VHlwZSAmJiBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dFR5cGVzLm51bWJlcl0uc29tZSgoaSkgPT4gaSA9PT0gaW5wdXRUeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlS2V5UHJlc3MoYnV0dG9uOiBzdHJpbmcsIGU/OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmxvZygnS2V5IHByZXNzOicsIGJ1dHRvbik7XG4gICAgfVxuXG4gICAgaWYgKGJ1dHRvbiA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uU2hpZnQgfHwgYnV0dG9uID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5Mb2NrKSB7XG4gICAgICB0aGlzLnRvZ2dsZVNoaWZ0KCk7XG4gICAgfSBlbHNlIGlmIChidXR0b24gPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkRvbmUpIHtcbiAgICAgIHRoaXMuY2xvc2VQYW5lbC5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzQWNjZXB0ZWROb25TdGFuZGFyZEJ1dHRvbihidXR0b24pICYmICF0aGlzLmlzU3RhbmRhcmRCdXR0b24oYnV0dG9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IHRoaXMuaGFuZGxlQnV0dG9uT3V0cHV0KGJ1dHRvbik7XG5cbiAgICBpZiAodGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50LnZhbHVlID0gb3V0cHV0O1xuXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2FyZXQgYXQ6JywgdGhpcy5jYXJldFBvc2l0aW9uLCB0aGlzLmNhcmV0UG9zaXRpb25FbmQsICdCdXR0b24nLCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnRzKGJ1dHRvbik7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUJ1dHRvbk91dHB1dChidXR0b246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tbW9uUGFyYW1zOiBbbnVtYmVyLCBudW1iZXIsIGJvb2xlYW5dID0gdGhpcy5nZXRDb21tb25QYXJhbXMoKTtcbiAgICBsZXQgb3V0cHV0ID0gdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LnZhbHVlIHx8ICcnO1xuICAgIGlmICghdGhpcy5pc1N0YW5kYXJkQnV0dG9uKGJ1dHRvbikpIHtcbiAgICAgIGlmIChidXR0b24gPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkJhY2tzcGFjZSkge1xuICAgICAgICBvdXRwdXQgPSB0aGlzLnJlbW92ZUF0KG91dHB1dCwgLi4uY29tbW9uUGFyYW1zKTtcbiAgICAgIH0gZWxzZSBpZiAoYnV0dG9uID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5TcGFjZSkge1xuICAgICAgICBvdXRwdXQgPSB0aGlzLmFkZFN0cmluZ0F0KG91dHB1dCwgJyAnLCAuLi5jb21tb25QYXJhbXMpO1xuICAgICAgfSBlbHNlIGlmIChidXR0b24gPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLlRhYikge1xuICAgICAgICBvdXRwdXQgPSB0aGlzLmFkZFN0cmluZ0F0KG91dHB1dCwgJ1xcdCcsIC4uLmNvbW1vblBhcmFtcyk7XG4gICAgICB9IGVsc2UgaWYgKGJ1dHRvbiA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRCdXR0b24uRW50ZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUZXh0YXJlYSkge1xuICAgICAgICAgIG91dHB1dCA9IHRoaXMuYWRkU3RyaW5nQXQob3V0cHV0LCAnXFxuJywgLi4uY29tbW9uUGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQgPSB0aGlzLmFkZFN0cmluZ0F0KG91dHB1dCwgYnV0dG9uLCAuLi5jb21tb25QYXJhbXMpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBwcml2YXRlIGdldENvbW1vblBhcmFtcygpOiBbbnVtYmVyLCBudW1iZXIsIGJvb2xlYW5dIHtcbiAgICByZXR1cm4gW3RoaXMuY2FyZXRQb3NpdGlvbiB8fCAwLCB0aGlzLmNhcmV0UG9zaXRpb25FbmQgfHwgMCwgdHJ1ZV07XG4gIH1cblxuICBwcml2YXRlIGlzQWNjZXB0ZWROb25TdGFuZGFyZEJ1dHRvbihidXR0b246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBbXG4gICAgICBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5CYWNrc3BhY2UudG9TdHJpbmcoKSxcbiAgICAgIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLlNwYWNlLnRvU3RyaW5nKCksXG4gICAgICBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5UYWIudG9TdHJpbmcoKSxcbiAgICAgIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkVudGVyLnRvU3RyaW5nKCksXG4gICAgXS5pbmNsdWRlcyhidXR0b24pO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaEV2ZW50cyhidXR0b246IHN0cmluZykge1xuICAgIGNvbnN0IHsga2V5LCBjb2RlIH0gPSB0aGlzLmNvbnZlcnRGcm9tQnV0dG9uVG9Db2RlKGJ1dHRvbik7XG5cbiAgICBjb25zdCBldmVudEluaXQ6IEtleWJvYXJkRXZlbnRJbml0ID0ge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICBzaGlmdEtleTogdGhpcy5zZWxlY3RlZExheW91dCA9PT0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLnNoaWZ0LFxuICAgICAga2V5OiBrZXksXG4gICAgICBjb2RlOiBjb2RlLFxuICAgICAgbG9jYXRpb246IDAsXG4gICAgfTtcblxuICAgIC8vIFNpbXVsYXRlIGFsbCBuZWVkZWQgZXZlbnRzIG9uIGJhc2UgZWxlbWVudFxuICAgIHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50Py5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgZXZlbnRJbml0KSk7XG4gICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleXByZXNzJywgZXZlbnRJbml0KSk7XG4gICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleXVwJywgZXZlbnRJbml0KSk7XG5cbiAgICAvLyBBbmQgc2V0IGZvY3VzIHRvIGlucHV0XG4gICAgdGhpcy5mb2N1c0FjdGl2ZUlucHV0KCk7XG4gIH1cblxuICAvKlxuICAgKiBBVVhJTElBUlkgTUVUSE9EU1xuICAgKiAqL1xuICBwcml2YXRlIGNvbnZlcnRGcm9tQnV0dG9uVG9Db2RlKGJ1dHRvbjogc3RyaW5nKTogeyBrZXk6IHN0cmluZzsgY29kZTogc3RyaW5nIH0ge1xuICAgIGxldCBrZXk6IHN0cmluZztcbiAgICBsZXQgY29kZTogc3RyaW5nO1xuICAgIGlmIChidXR0b24uaW5jbHVkZXMoJ3snKSAmJiBidXR0b24uaW5jbHVkZXMoJ30nKSkge1xuICAgICAgLy8gQ2FwaXRhbGl6ZSBuYW1lXG4gICAgICBrZXkgPSBidXR0b24uc2xpY2UoMSwgYnV0dG9uLmxlbmd0aCAtIDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBrZXkgPSBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7XG4gICAgICBjb2RlID0ga2V5O1xuXG4gICAgICAvLyBGaXggdG8gc3RhbmRhcmQga2V5IGNvZGVcbiAgICAgIGlmIChjb2RlLnRvTG93ZXJDYXNlKCkgPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQnV0dG9uLkJhY2tzcGFjZS5zbGljZSgxLCBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZEJ1dHRvbi5CYWNrc3BhY2UubGVuZ3RoIC0gMSkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjb2RlID0gJ0JhY2tzcGFjZSc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IGJ1dHRvbjtcbiAgICAgIGNvZGUgPSBOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcihidXR0b24pKSA/IGBEaWdpdCR7YnV0dG9ufWAgOiBgS2V5JHtidXR0b24udG9VcHBlckNhc2UoKX1gO1xuICAgIH1cblxuICAgIHJldHVybiB7IGtleSwgY29kZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0FjdGl2ZUlucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50Py5mb2N1cygpO1xuICAgIGlmICghdGhpcy5pc0lucHV0TnVtZXJpYyh0aGlzLmFjdGl2ZUlucHV0RWxlbWVudCkpIHtcbiAgICAgIHRoaXMuYWN0aXZlSW5wdXRFbGVtZW50Py5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLmNhcmV0UG9zaXRpb24sIHRoaXMuY2FyZXRQb3NpdGlvbkVuZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVTaGlmdCgpIHtcbiAgICBsZXQgY3VycmVudExheW91dCA9IHRoaXMua2V5Ym9hcmQub3B0aW9ucy5sYXlvdXROYW1lO1xuICAgIGxldCBzZWxlY3RlZExheW91dDogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzID1cbiAgICAgIGN1cnJlbnRMYXlvdXQgPT09IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5kZWZhdWx0ID8gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLnNoaWZ0IDogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHQ7XG5cbiAgICB0aGlzLnNldExheW91dChzZWxlY3RlZExheW91dCk7XG4gIH1cblxuICBwcml2YXRlIGlzU3RhbmRhcmRCdXR0b24oYnV0dG9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYnV0dG9uICYmICEoYnV0dG9uWzBdID09PSAneycgJiYgYnV0dG9uW2J1dHRvbi5sZW5ndGggLSAxXSA9PT0gJ30nKTtcbiAgfVxuXG4gIC8qXG4gICAqIE9VVFBVVCBTVFJJTkcgTUVUSE9EU1xuICAgKiAqL1xuICBwcml2YXRlIHJlbW92ZUF0KHNvdXJjZTogc3RyaW5nLCBwb3NpdGlvbiA9IHNvdXJjZS5sZW5ndGgsIHBvc2l0aW9uRW5kID0gc291cmNlLmxlbmd0aCwgbW92ZUNhcmV0ID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmIChwb3NpdGlvbiA9PT0gMCAmJiBwb3NpdGlvbkVuZCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG5cbiAgICBsZXQgb3V0cHV0OiBzdHJpbmc7XG5cbiAgICBpZiAocG9zaXRpb24gPT09IHBvc2l0aW9uRW5kKSB7XG4gICAgICBpZiAocG9zaXRpb24gJiYgcG9zaXRpb24gPj0gMCkge1xuICAgICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoMCwgcG9zaXRpb24gLSAxKSArIHNvdXJjZS5zbGljZShwb3NpdGlvbik7XG4gICAgICAgIGlmIChtb3ZlQ2FyZXQpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmV0UG9zaXRpb24oMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dCA9IHNvdXJjZS5zbGljZSgwLCAtMSk7XG4gICAgICAgIGlmIChtb3ZlQ2FyZXQpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmV0UG9zaXRpb24oMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0ID0gc291cmNlLnNsaWNlKDAsIHBvc2l0aW9uKSArIHNvdXJjZS5zbGljZShwb3NpdGlvbkVuZCk7XG4gICAgICBpZiAobW92ZUNhcmV0KSB7XG4gICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU3RyaW5nQXQoc291cmNlOiBzdHJpbmcsIHN0cjogc3RyaW5nLCBwb3NpdGlvbiA9IHNvdXJjZS5sZW5ndGgsIHBvc2l0aW9uRW5kID0gc291cmNlLmxlbmd0aCwgbW92ZUNhcmV0ID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm1heExlbmd0aCAhPT0gLTEgJiYgc291cmNlLmxlbmd0aCA+PSB0aGlzLm1heExlbmd0aCkge1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG5cbiAgICBsZXQgb3V0cHV0OiBzdHJpbmc7XG5cbiAgICBpZiAoIXBvc2l0aW9uICYmIHBvc2l0aW9uICE9PSAwKSB7XG4gICAgICBvdXRwdXQgPSBzb3VyY2UgKyBzdHI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dCA9IFtzb3VyY2Uuc2xpY2UoMCwgcG9zaXRpb24pLCBzdHIsIHNvdXJjZS5zbGljZShwb3NpdGlvbkVuZCldLmpvaW4oJycpO1xuICAgICAgaWYgKG1vdmVDYXJldCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNhcmV0UG9zaXRpb24oc3RyLmxlbmd0aCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICAvKlxuICAgKiBDQVJFVCBNRVRIT0RTXG4gICAqICovXG4gIHByaXZhdGUgY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIGxldCB0YXJnZXRUYWdOYW1lID0gJyc7XG4gICAgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lKSB7XG4gICAgICB0YXJnZXRUYWdOYW1lID0gZXZlbnQudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1RleHRJbnB1dCA9XG4gICAgICB0YXJnZXRUYWdOYW1lID09PSAndGV4dGFyZWEnIHx8XG4gICAgICAodGFyZ2V0VGFnTmFtZSA9PT0gJ2lucHV0JyAmJiBbJ3RleHQnLCAnc2VhcmNoJywgJ2VtYWlsJywgJ3Bhc3N3b3JkJywgJ3VybCcsICd0ZWwnXS5pbmNsdWRlcyhldmVudC50YXJnZXQudHlwZSkpO1xuXG4gICAgY29uc3QgaXNLZXlib2FyZCA9XG4gICAgICBldmVudC50YXJnZXQgPT09IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IHx8IChldmVudC50YXJnZXQgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSk7XG5cbiAgICBpZiAoaXNUZXh0SW5wdXQgJiYgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQgPT0gZXZlbnQudGFyZ2V0KSB7XG4gICAgICAvKipcbiAgICAgICAqIFRyYWNrcyBjdXJyZW50IGN1cnNvciBwb3NpdGlvblxuICAgICAgICogQXMga2V5cyBhcmUgcHJlc3NlZCwgdGV4dCB3aWxsIGJlIGFkZGVkL3JlbW92ZWQgYXQgdGhhdCBwb3NpdGlvbiB3aXRoaW4gdGhlIGlucHV0LlxuICAgICAgICovXG4gICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24oZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0LCBldmVudC50YXJnZXQuc2VsZWN0aW9uRW5kKTtcblxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0NhcmV0IGF0OicsIHRoaXMuY2FyZXRQb3NpdGlvbiwgdGhpcy5jYXJldFBvc2l0aW9uRW5kLCBldmVudCAmJiBldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCBldmVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAncG9pbnRlcnVwJyAmJiB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoIWlzS2V5Ym9hcmQgJiYgZXZlbnQ/LnR5cGUgIT09ICdzZWxlY3Rpb25jaGFuZ2UnKSB7XG4gICAgICAvKipcbiAgICAgICAqIHdlIG11c3QgZW5zdXJlIGNhcmV0UG9zaXRpb24gZG9lc24ndCBwZXJzaXN0IG9uY2UgcmVhY3RpdmF0ZWQuXG4gICAgICAgKi9cbiAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihudWxsKTtcblxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coYENhcmV0IHBvc2l0aW9uIHJlc2V0IGR1ZSB0byBcIiR7ZXZlbnQ/LnR5cGV9XCIgZXZlbnRgLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDYXJldFBvc2l0aW9uKGxlbmd0aDogbnVtYmVyLCBtaW51cyA9IGZhbHNlKSB7XG4gICAgY29uc3QgbmV3Q2FyZXRQb3MgPSB0aGlzLmNvbXB1dGVOZXdDYXJldFBvc2l0aW9uKGxlbmd0aCwgbWludXMpO1xuICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihuZXdDYXJldFBvcyk7XG4gICAgLy8gU2Nyb2xsIHRvIGJvdHRvbVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hY3RpdmVJbnB1dEVsZW1lbnQ/LnNjcm9sbFRvKHtcbiAgICAgICAgdG9wOiB0aGlzLmFjdGl2ZUlucHV0RWxlbWVudC5zY3JvbGxIZWlnaHQsXG4gICAgICB9IGFzIFNjcm9sbFRvT3B0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVOZXdDYXJldFBvc2l0aW9uKGxlbmd0aDogbnVtYmVyLCBtaW51cyA9IGZhbHNlKSB7XG4gICAgbGV0IGNhcmV0UG9zaXRpb24gPSB0aGlzLmNhcmV0UG9zaXRpb247XG5cbiAgICBpZiAoY2FyZXRQb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICBpZiAobWludXMpIHtcbiAgICAgICAgaWYgKGNhcmV0UG9zaXRpb24gPiAwKSBjYXJldFBvc2l0aW9uID0gY2FyZXRQb3NpdGlvbiAtIGxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcmV0UG9zaXRpb24gPSBjYXJldFBvc2l0aW9uICsgbGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FyZXRQb3NpdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FyZXRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyIHwgbnVsbCwgZW5kUG9zaXRpb24gPSBwb3NpdGlvbik6IHZvaWQge1xuICAgIHRoaXMuY2FyZXRQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIHRoaXMuY2FyZXRQb3NpdGlvbkVuZCA9IGVuZFBvc2l0aW9uO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IChjKSAyMDIwIC0gMjAyNCAtIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIFN5c3RlbGFiIFRlY2hub2xvZ2llcywgU0EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gIH4gTk9USUNFOiAgQWxsIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaXMgYW5kIHJlbWFpbnMgdGhlIHByb3BlcnR5IG9mIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0c1xuICB+IGFmZmlsaWF0ZXMsIGlmIGFueS4gIFRoZSBpbnRlbGxlY3R1YWwgYW5kIHRlY2huaWNhbCBjb25jZXB0cyBjb250YWluZWQgaGVyZWluIGFyZSBwcm9wcmlldGFyeSB0byBJbnN0cnVtZW50YXRpb25cbiAgfiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0cyBhZmZpbGlhdGVzIGFuZCBtYXkgYmUgY292ZXJlZCBieSBVLlMuIGFuZCBmb3JlaWduIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMsIGFuZC9vclxuICB+IGFyZSBwcm90ZWN0ZWQgYnkgdHJhZGUgc2VjcmV0IG9yIGNvcHlyaWdodCBsYXcuIERpc3NlbWluYXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbiBvciByZXByb2R1Y3Rpb24gb2YgdGhpcyBtYXRlcmlhbCBpc1xuICB+IHN0cmljdGx5IGZvcmJpZGRlbiB1bmxlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGlzIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwic2ltcGxlLWtleWJvYXJkXCI+PC9kaXY+XG4iXX0=
|
|
@@ -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,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FBZ0MseUJBQXlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcywgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgVklSVFVBTF9LRVlCT0FSRF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWc+KCdWSVJUVUFMX0tFWUJPQVJEX0NPTkZJRycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnIHtcbiAgbGF5b3V0PzogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzO1xuICBpbnB1dE1ldGhvZD86IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRNZXRob2RzO1xufVxuIl19
|