@bnsights/bbsf-controls 1.0.186 → 1.0.188
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 +13 -0
- package/esm2022/lib/Shared/Components/app-base-component.mjs +2 -2
- package/esm2022/lib/controls/TextBox/TextBox.component.mjs +42 -4
- package/fesm2022/bnsights-bbsf-controls.mjs +42 -4
- package/fesm2022/bnsights-bbsf-controls.mjs.map +1 -1
- package/lib/controls/TextBox/TextBox.component.d.ts +9 -0
- package/package.json +2 -2
- package/src/lib/assets/sass/base.scss +72 -7
package/README.md
CHANGED
|
@@ -6,6 +6,19 @@ For more info please visit [BBSF Controls documenation](https://bbsfadmin.bnsigh
|
|
|
6
6
|
|
|
7
7
|
## Change Log
|
|
8
8
|
|
|
9
|
+
## 1.0.188 / 15/9/2025
|
|
10
|
+
|
|
11
|
+
=====================
|
|
12
|
+
|
|
13
|
+
- Update utilities package to 1.0.68
|
|
14
|
+
- Add Password Validation disclaimer
|
|
15
|
+
|
|
16
|
+
## 1.0.187 / 15/9/2025
|
|
17
|
+
|
|
18
|
+
=====================
|
|
19
|
+
|
|
20
|
+
- Update utilities package to 1.0.67
|
|
21
|
+
|
|
9
22
|
## 1.0.186 11-09-2025
|
|
10
23
|
|
|
11
24
|
====================
|
|
@@ -156,7 +156,7 @@ export class AppBaseComponent {
|
|
|
156
156
|
}
|
|
157
157
|
calculateInitials(name) {
|
|
158
158
|
let language = localStorage.getItem('language');
|
|
159
|
-
let currentUser =
|
|
159
|
+
let currentUser = AuthService.user.profile;
|
|
160
160
|
console.log(currentUser);
|
|
161
161
|
let userName = language == 'en' ? currentUser.given_nameEn : currentUser.given_nameAr;
|
|
162
162
|
if (currentUser) {
|
|
@@ -223,4 +223,4 @@ export class AppBaseComponent {
|
|
|
223
223
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AppBaseComponent, decorators: [{
|
|
224
224
|
type: Injectable
|
|
225
225
|
}], ctorParameters: () => [{ type: i0.Injector }] });
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWJhc2UtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL1NoYXJlZC9Db21wb25lbnRzL2FwcC1iYXNlLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLFdBQVcsRUFDWCxvQkFBb0IsR0FDckIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBSTlELE1BQU0sT0FBZ0IsZ0JBQWdCO0lBZ0JwQyxZQUFZLFFBQWtCO1FBRnZCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQXlKOUIsd0JBQW1CLEdBQUcsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUN0QyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUNyQixJQUFJLEVBQ0osSUFBSSxFQUNKLEtBQUssQ0FDTixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYseUJBQW9CLEdBQUcsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUN0QyxJQUFJLENBQUMsQ0FB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SSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDOztnQkFFN0QsT0FBTyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCLENBQUMscUJBQTRCLEVBQUUsSUFBZTtRQUNsRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBSSxXQUFXO2dCQUNiLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBM1FtQixnQkFBZ0I7bUhBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7XHJcbiAgVXRpbGl0eVNlcnZpY2UsXHJcbiAgQXV0aFNlcnZpY2UsXHJcbiAgQ29uZmlndXJhdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uL3NlcnZpY2VzL0NvbnRyb2xVdGlsaXR5JztcclxuaW1wb3J0IHsgRmlsdGVySXRlbSB9IGZyb20gJy4uL01vZGVscy9GaWx0ZXJJdGVtJztcclxuaW1wb3J0IHsgQ3VzdG9tVmFsaWRhdGlvbiB9IGZyb20gJy4uL01vZGVscy9DdXN0b21WYWxpZGF0aW9uJztcclxuaW1wb3J0IHsgRW5nbGlzaEFyYWJpY0RUTyB9IGZyb20gJy4uL01vZGVscy9FbmdsaXNoQXJhYmljRFRPJztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IEZvcm1PcHRpb25zIH0gZnJvbSAnLi4vTW9kZWxzL0Zvcm1PcHRpb25zJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFwcEJhc2VDb21wb25lbnQge1xyXG4gIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2U7XHJcbiAgcHVibGljIG1vZGFsU2VydmljZTogTmdiTW9kYWw7XHJcbiAgcHJpdmF0ZSBjb250cm9sVXRpbGl0eTogQ29udHJvbFV0aWxpdHk7XHJcbiAgcHJpdmF0ZSB0aXRsZVNlcnZpY2U6IFRpdGxlO1xyXG4gIHByaXZhdGUgYXVoU2VydmljZTogQXV0aFNlcnZpY2U7XHJcbiAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2U7XHJcbiAgcHVibGljIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlO1xyXG4gIHB1YmxpYyBpc0VOOiBib29sZWFuO1xyXG4gIC8vTGFiZWxzXHJcbiAgcHVibGljIGV4cG9ydExhYmVsOiBzdHJpbmc7XHJcbiAgcHVibGljIGZpbHRlcnNMYWJlbDogc3RyaW5nO1xyXG4gIHB1YmxpYyBhZGRMYWJlbDogc3RyaW5nO1xyXG4gIHB1YmxpYyB1c2VyTmFtZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBwYWdlVGl0bGU6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBQYWdlQ291bnQ6IG51bWJlciA9IDEyO1xyXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZSA9IGluamVjdG9yLmdldChVdGlsaXR5U2VydmljZSk7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5ID0gaW5qZWN0b3IuZ2V0KENvbnRyb2xVdGlsaXR5KTtcclxuICAgIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ29uZmlndXJhdGlvblNlcnZpY2UpO1xyXG4gICAgdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRW52aXJvbm1lbnRTZXJ2aWNlKTtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KE5nYk1vZGFsKTtcclxuICAgIHRoaXMudGl0bGVTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFRpdGxlKTtcclxuICAgIHRoaXMuYXVoU2VydmljZSA9IGluamVjdG9yLmdldChBdXRoU2VydmljZSk7XHJcbiAgICB0aGlzLmV4cG9ydExhYmVsID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFeHBvcnQnKTtcclxuICAgIHRoaXMuZmlsdGVyc0xhYmVsID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdGaWx0ZXJzJyk7XHJcbiAgICB0aGlzLmFkZExhYmVsID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBZGQnKTtcclxuICAgIHRoaXMudXNlck5hbWUgPSB0aGlzLmF1aFNlcnZpY2UubmFtZSgpO1xyXG4gICAgdGhpcy5pc0VOID0gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUVuZ2xpc2goKTtcclxuICB9XHJcbiAgdXBkYXRlUGFnZVRpdGxlKHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRoaXMuY2FsY3VsYXRlUGFnZVRpdGxlKHRpdGxlKSk7XHJcbiAgfVxyXG5cclxuICBsKGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoa2V5KTtcclxuICB9XHJcbiAgZ2V0Q29uZmlndXJhdGlvblZhbHVlKGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRDb25maWd1cmF0aW9uVmFsdWUoa2V5KTtcclxuICB9XHJcbiAgZ2V0TGFuZ3VhZ2VNb2RlVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRDb25maWd1cmF0aW9uVmFsdWUoJ0xhbmd1YWdlTW9kZScpO1xyXG4gIH1cclxuICBzdG9wQmxvY2tVSSgpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0QmxvY2tVSSgpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuTW9kYWwobW9kYWw6IGFueSwgc2l6ZT86IHN0cmluZykge1xyXG4gICAgaWYgKHNpemUpXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHtcclxuICAgICAgICBzaXplOiBzaXplLFxyXG4gICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgZWxzZSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKG1vZGFsLCB7IGJhY2tkcm9wOiAnc3RhdGljJywga2V5Ym9hcmQ6IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWQoZmlsZURUTzogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvKmxldCBibG9iID0gbmV3IEJsb2IoW2ZpbGVdKTsqL1xyXG4gICAgbGV0IGZpbGUgPSBuZXcgQmxvYihbZmlsZURUT10sIHtcclxuICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcclxuICAgIH0pO1xyXG4gICAgc2F2ZUFzKGZpbGUsIGZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkUERGKGZpbGVEVE86IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGZpbGUgPSBuZXcgQmxvYihbZmlsZURUT10sIHsgdHlwZTogXCJhcHBsaWNhdGlvbi9wZGZcIiB9KTtcclxuICAgIHNhdmVBcyhmaWxlLCBmaWxlTmFtZSk7XHJcbiAgfVxyXG4gIGRvd25sb2FkV29yZChmaWxlRFRPOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBmaWxlID0gbmV3IEJsb2IoW2ZpbGVEVE9dLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnRcIiB9KTtcclxuICAgIHNhdmVBcyhmaWxlLCBmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBiYXNlNjR0b0Jsb2IoYmFzZTY0RGF0YSwgY29udGVudFR5cGUpIHtcclxuICAgIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGUgfHwgJyc7XHJcbiAgICB2YXIgc2xpY2VTaXplID0gMTAyNDtcclxuICAgIHZhciBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYmFzZTY0RGF0YSk7XHJcbiAgICB2YXIgYnl0ZXNMZW5ndGggPSBieXRlQ2hhcmFjdGVycy5sZW5ndGg7XHJcbiAgICB2YXIgc2xpY2VzQ291bnQgPSBNYXRoLmNlaWwoYnl0ZXNMZW5ndGggLyBzbGljZVNpemUpO1xyXG4gICAgdmFyIGJ5dGVBcnJheXMgPSBuZXcgQXJyYXkoc2xpY2VzQ291bnQpO1xyXG5cclxuICAgIGZvciAodmFyIHNsaWNlSW5kZXggPSAwOyBzbGljZUluZGV4IDwgc2xpY2VzQ291bnQ7ICsrc2xpY2VJbmRleCkge1xyXG4gICAgICB2YXIgYmVnaW4gPSBzbGljZUluZGV4ICogc2xpY2VTaXplO1xyXG4gICAgICB2YXIgZW5kID0gTWF0aC5taW4oYmVnaW4gKyBzbGljZVNpemUsIGJ5dGVzTGVuZ3RoKTtcclxuXHJcbiAgICAgIHZhciBieXRlcyA9IG5ldyBBcnJheShlbmQgLSBiZWdpbik7XHJcbiAgICAgIGZvciAodmFyIG9mZnNldCA9IGJlZ2luLCBpID0gMDsgb2Zmc2V0IDwgZW5kOyArK2ksICsrb2Zmc2V0KSB7XHJcbiAgICAgICAgYnl0ZXNbaV0gPSBieXRlQ2hhcmFjdGVyc1tvZmZzZXRdLmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgIH1cclxuICAgICAgYnl0ZUFycmF5c1tzbGljZUluZGV4XSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgQmxvYihieXRlQXJyYXlzLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVQYWdlVGl0bGUodGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGl0bGVcclxuICAgICAgPyB0aXRsZS5zdWJzdHJpbmcoMCwgMTAwKSArIGAgfCAke3RoaXMubCgnQXBwbGljYXRpb25OYW1lJyl9YFxyXG4gICAgICA6IGAke3RoaXMubCgnQXBwbGljYXRpb25OYW1lJyl9YDtcclxuICB9XHJcblxyXG4gIGdldFBhZ2luZ0ZpbHRlcnNWYWx1ZXMoZm9ybTogRm9ybUdyb3VwLCBmaWx0ZXJzOiBGaWx0ZXJJdGVtW10pOiBhbnkge1xyXG4gICAgbGV0IG1vZGVsID0gbmV3IE9iamVjdCgpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBmaWx0ZXJJdGVtID0gZmlsdGVyc1tpXTtcclxuICAgICAgaWYgKGZvcm0uY29udHJvbHNbZmlsdGVySXRlbS5mb3JtQ29udHJvbE5hbWVdLnZhbHVlID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgbW9kZWxbZmlsdGVySXRlbS5hY3Rpb25QYXJhbWV0ZXJOYW1lXSA9XHJcbiAgICAgICAgZm9ybS5jb250cm9sc1tmaWx0ZXJJdGVtLmZvcm1Db250cm9sTmFtZV0udmFsdWUgPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICA6IGZvcm0uY29udHJvbHNbZmlsdGVySXRlbS5mb3JtQ29udHJvbE5hbWVdLnZhbHVlO1xyXG4gICAgICAvLyBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKGZpbHRlckl0ZW0uQWN0aW9uUGFyYW1ldGVyTmFtZSwgZm9ybS5jb250cm9sc1tmaWx0ZXJJdGVtLkZvcm1Db250cm9sTmFtZV0udmFsdWUgPT0gdW5kZWZpbmVkID8gJycgOiBmb3JtLmNvbnRyb2xzW2ZpbHRlckl0ZW0uRm9ybUNvbnRyb2xOYW1lXS52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9kZWw7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDb250cm9sKGNvbnRyb2xOYW1lOiBzdHJpbmcsIGZvcm06IEZvcm1Hcm91cCkge1xyXG4gICAgZm9ybS5yZW1vdmVDb250cm9sKGNvbnRyb2xOYW1lKTtcclxuICB9XHJcblxyXG4gIGNvcHlUb0NsaXBib2FyZCh2YWw6IHN0cmluZykge1xyXG4gICAgY29uc3Qgc2VsQm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgIHNlbEJveC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICBzZWxCb3guc3R5bGUubGVmdCA9ICcwJztcclxuICAgIHNlbEJveC5zdHlsZS50b3AgPSAnMCc7XHJcbiAgICBzZWxCb3guc3R5bGUub3BhY2l0eSA9ICcwJztcclxuICAgIHNlbEJveC52YWx1ZSA9IHZhbDtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2VsQm94KTtcclxuICAgIHNlbEJveC5mb2N1cygpO1xyXG4gICAgc2VsQm94LnNlbGVjdCgpO1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2VsQm94KTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5U3VjY2Vzc01lc3NhZ2UodGhpcy5sKCdDb3BpZWRTdWNjZXNzZnVsbHknKSk7XHJcbiAgfVxyXG5cclxuICBhZGRSZXF1aXJlZFJ1bGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBjb250cm9sT3B0aW9uczogYW55KSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LmFkZFJlcXVpcmVkVG9Db250cm9sKGNvbnRyb2wsIGNvbnRyb2xPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVJlcXVpcmVkUnVsZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGNvbnRyb2xPcHRpb25zOiBhbnkpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkucmVtb3ZlUmVxdWlyZWRGcm9tQ29udHJvbChjb250cm9sLCBjb250cm9sT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZURhdGVzKFxyXG4gICAgZm9ybTogRm9ybUdyb3VwLFxyXG4gICAgZnJvbURhdGVDb250cm9sOiBzdHJpbmcsXHJcbiAgICB0b0RhdGVDb250cm9sOiBzdHJpbmcsXHJcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUtleTogc3RyaW5nXHJcbiAgKTogQ3VzdG9tVmFsaWRhdGlvbiB7XHJcbiAgICB2YXIgdmFsaWRhdG9yID0gbmV3IEN1c3RvbVZhbGlkYXRpb24oKTtcclxuICAgIHZhbGlkYXRvci5mdW5jdGlvbkJvZHkgPSAoY29udHJvbCkgPT4ge1xyXG4gICAgICBsZXQgZnJvbURhdGUgPSBmb3JtLmNvbnRyb2xzW2Zyb21EYXRlQ29udHJvbF0udmFsdWU7XHJcbiAgICAgIGxldCB0b0RhdGUgPSBmb3JtLmNvbnRyb2xzW3RvRGF0ZUNvbnRyb2xdLnZhbHVlO1xyXG5cclxuICAgICAgaWYgKGZyb21EYXRlICYmIHRvRGF0ZSAmJiB0b0RhdGUgPD0gZnJvbURhdGUpXHJcbiAgICAgICAgcmV0dXJuIHsgY3VzdG9tZXJFcnJvcjogdHJ1ZSB9O1xyXG5cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gICAgdmFsaWRhdG9yLm1hc3NhZ2UgPSB0aGlzLmwodmFsaWRhdGlvbk1lc3NhZ2VLZXkpO1xyXG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcclxuICB9XHJcblxyXG4gIG9uU3VjY2Vzc0FkZEhhbmRsZXIgPSAoc3VjY2VzczogYW55KSA9PiB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeVN1Y2Nlc3NNZXNzYWdlKFxyXG4gICAgICB0aGlzLmwoJ1JlY29yZEFkZGVkJyksXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIGZhbHNlXHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIG9uU3VjY2Vzc0VkaXRIYW5kbGVyID0gKHN1Y2Nlc3M6IGFueSkgPT4ge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlTdWNjZXNzTWVzc2FnZShcclxuICAgICAgdGhpcy5sKCdSZWNvcmRVcGRhdGVkJyksXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIGZhbHNlXHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIG9uU3VjY2Vzc0RlbGV0ZUhhbmRsZXIgPSAoc3VjY2VzczogYW55KSA9PiB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeVN1Y2Nlc3NNZXNzYWdlKFxyXG4gICAgICB0aGlzLmwoJ1JlY29yZERlbGV0ZWQnKSxcclxuICAgICAgbnVsbCxcclxuICAgICAgbnVsbCxcclxuICAgICAgZmFsc2VcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgcmVjYWxjdWxhdGVQYWdlVGl0bGUoKSB7XHJcbiAgICB0aGlzLnRpdGxlU2VydmljZS5zZXRUaXRsZSh0aGlzLmNhbGN1bGF0ZVBhZ2VUaXRsZSgnJykpO1xyXG4gIH1cclxuXHJcbiAgaXNFbmdsaXNoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudXRpbGl0eVNlcnZpY2UuaXNDdXJyZW50TGFuZ3VhZ2VFbmdsaXNoKCk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVJbml0aWFscyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGxhbmd1YWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJyk7XHJcbiAgICBsZXQgY3VycmVudFVzZXIgPSB0aGlzLmF1aFNlcnZpY2UudXNlci5wcm9maWxlO1xyXG4gICAgY29uc29sZS5sb2coY3VycmVudFVzZXIpO1xyXG4gICAgbGV0IHVzZXJOYW1lID1cclxuICAgICAgbGFuZ3VhZ2UgPT0gJ2VuJyA/IGN1cnJlbnRVc2VyLmdpdmVuX25hbWVFbiA6IGN1cnJlbnRVc2VyLmdpdmVuX25hbWVBcjtcclxuICAgIGlmIChjdXJyZW50VXNlcikge1xyXG4gICAgICBsZXQgZnVsbE5hbWUgPSB1c2VyTmFtZS5zcGxpdCgnICcpO1xyXG4gICAgICBsZXQgaW5pdGlhbHM6IHN0cmluZztcclxuICAgICAgaWYgKGZ1bGxOYW1lLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0VOKVxyXG4gICAgICAgICAgaW5pdGlhbHMgPSBmdWxsTmFtZS5zaGlmdCgpLmNoYXJBdCgwKSArIGZ1bGxOYW1lLnBvcCgpLmNoYXJBdCgwKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBpbml0aWFscyA9XHJcbiAgICAgICAgICAgIGZ1bGxOYW1lLnNoaWZ0KCkuY2hhckF0KDApICsgJyAnICsgZnVsbE5hbWUucG9wKCkuY2hhckF0KDApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGluaXRpYWxzID0gZnVsbE5hbWUucG9wKCkuY2hhckF0KDApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBpbml0aWFscy50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudFVzZXJJbml0aWFscygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlSW5pdGlhbHModGhpcy5hdWhTZXJ2aWNlLm5hbWUoKSk7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50RmFpbE92ZXIodmFsOiBFbmdsaXNoQXJhYmljRFRPKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmlzRW5nbGlzaCgpKSB7XHJcbiAgICAgIGlmICh2YWwuZW5nbGlzaCkgcmV0dXJuIHZhbC5lbmdsaXNoO1xyXG4gICAgICBlbHNlIHJldHVybiB2YWwuYXJhYmljO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHZhbC5hcmFiaWMpIHJldHVybiB2YWwuYXJhYmljO1xyXG4gICAgICBlbHNlIHJldHVybiB2YWwuZW5nbGlzaDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyNyZWdpb24gdmFsaWRhdGlvbiBhY3Rpb25zXHJcblxyXG4gIGFkZFJlcXVpcmVkVmFsaWRhdGlvbihjdXN0b21Db250cm9sT3B0aW9uOiBhbnlbXSwgZm9ybTogRm9ybUdyb3VwLCBmb3JtT3B0aW9uczogRm9ybU9wdGlvbnMpOiB2b2lkIHtcclxuICAgIGN1c3RvbUNvbnRyb2xPcHRpb24uZm9yRWFjaChjb250cm9sID0+IHtcclxuICAgICAgaWYgKGZvcm0uZ2V0KGNvbnRyb2wuTmFtZSkpXHJcbiAgICAgICAgdGhpcy5hZGRSZXF1aXJlZFJ1bGUoZm9ybS5nZXQoY29udHJvbC5OYW1lKSwgZm9ybU9wdGlvbnMpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgY29udHJvbC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uKGN1c3RvbUNvbnRyb2xPcHRpb246IGFueVtdLCBmb3JtOiBGb3JtR3JvdXAsIGZvcm1PcHRpb25zOiBGb3JtT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgY3VzdG9tQ29udHJvbE9wdGlvbi5mb3JFYWNoKGNvbnRyb2wgPT4ge1xyXG4gICAgICBpZiAoZm9ybS5nZXQoY29udHJvbC5OYW1lKSlcclxuICAgICAgICB0aGlzLnJlbW92ZVJlcXVpcmVkUnVsZShmb3JtLmdldChjb250cm9sLk5hbWUpLCBmb3JtT3B0aW9ucyk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBjb250cm9sLklzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRGb3JtQ29udHJvbHNWYWx1ZShjdXN0b21Db250cm9sc09wdGlvbnM6IGFueVtdLCBmb3JtOiBGb3JtR3JvdXApOiB2b2lkIHtcclxuICAgIGN1c3RvbUNvbnRyb2xzT3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgIGxldCBmb3JtQ29udHJvbCA9IGZvcm0uZ2V0KG9wdGlvbi5OYW1lKTtcclxuICAgICAgaWYgKGZvcm1Db250cm9sKVxyXG4gICAgICAgIGZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxufVxyXG4iXX0=
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWJhc2UtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL1NoYXJlZC9Db21wb25lbnRzL2FwcC1iYXNlLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLFdBQVcsRUFDWCxvQkFBb0IsR0FDckIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBSTlELE1BQU0sT0FBZ0IsZ0JBQWdCO0lBZ0JwQyxZQUFZLFFBQWtCO1FBRnZCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQXlKOUIsd0JBQW1CLEdBQUcsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUN0QyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUNyQixJQUFJLEVBQ0osSUFBSSxFQUNKLEtBQUssQ0FDTixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYseUJBQW9CLEdBQUcsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUN0QyxJQUFJLENBQUMsQ0FB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QWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7O2dCQUU3RCxPQUFPLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxxQkFBNEIsRUFBRSxJQUFlO1FBQ2xFLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxJQUFJLFdBQVc7Z0JBQ2IsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0EzUW1CLGdCQUFnQjttSEFBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHtcclxuICBVdGlsaXR5U2VydmljZSxcclxuICBBdXRoU2VydmljZSxcclxuICBDb25maWd1cmF0aW9uU2VydmljZSxcclxufSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbnRyb2xVdGlsaXR5IH0gZnJvbSAnLi4vc2VydmljZXMvQ29udHJvbFV0aWxpdHknO1xyXG5pbXBvcnQgeyBGaWx0ZXJJdGVtIH0gZnJvbSAnLi4vTW9kZWxzL0ZpbHRlckl0ZW0nO1xyXG5pbXBvcnQgeyBDdXN0b21WYWxpZGF0aW9uIH0gZnJvbSAnLi4vTW9kZWxzL0N1c3RvbVZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBFbmdsaXNoQXJhYmljRFRPIH0gZnJvbSAnLi4vTW9kZWxzL0VuZ2xpc2hBcmFiaWNEVE8nO1xyXG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgRm9ybU9wdGlvbnMgfSBmcm9tICcuLi9Nb2RlbHMvRm9ybU9wdGlvbnMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwQmFzZUNvbXBvbmVudCB7XHJcbiAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZTtcclxuICBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbDtcclxuICBwcml2YXRlIGNvbnRyb2xVdGlsaXR5OiBDb250cm9sVXRpbGl0eTtcclxuICBwcml2YXRlIHRpdGxlU2VydmljZTogVGl0bGU7XHJcbiAgcHJpdmF0ZSBhdWhTZXJ2aWNlOiBBdXRoU2VydmljZTtcclxuICBwcml2YXRlIGNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZTtcclxuICBwdWJsaWMgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2U7XHJcbiAgcHVibGljIGlzRU46IGJvb2xlYW47XHJcbiAgLy9MYWJlbHNcclxuICBwdWJsaWMgZXhwb3J0TGFiZWw6IHN0cmluZztcclxuICBwdWJsaWMgZmlsdGVyc0xhYmVsOiBzdHJpbmc7XHJcbiAgcHVibGljIGFkZExhYmVsOiBzdHJpbmc7XHJcbiAgcHVibGljIHVzZXJOYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIHBhZ2VUaXRsZTogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIFBhZ2VDb3VudDogbnVtYmVyID0gMTI7XHJcbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFV0aWxpdHlTZXJ2aWNlKTtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkgPSBpbmplY3Rvci5nZXQoQ29udHJvbFV0aWxpdHkpO1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdG9yLmdldChDb25maWd1cmF0aW9uU2VydmljZSk7XHJcbiAgICB0aGlzLmVudmlyb25tZW50U2VydmljZSA9IGluamVjdG9yLmdldChFbnZpcm9ubWVudFNlcnZpY2UpO1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoTmdiTW9kYWwpO1xyXG4gICAgdGhpcy50aXRsZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoVGl0bGUpO1xyXG4gICAgdGhpcy5hdWhTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KEF1dGhTZXJ2aWNlKTtcclxuICAgIHRoaXMuZXhwb3J0TGFiZWwgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0V4cG9ydCcpO1xyXG4gICAgdGhpcy5maWx0ZXJzTGFiZWwgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0ZpbHRlcnMnKTtcclxuICAgIHRoaXMuYWRkTGFiZWwgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0FkZCcpO1xyXG4gICAgdGhpcy51c2VyTmFtZSA9IHRoaXMuYXVoU2VydmljZS5uYW1lKCk7XHJcbiAgICB0aGlzLmlzRU4gPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzQ3VycmVudExhbmd1YWdlRW5nbGlzaCgpO1xyXG4gIH1cclxuICB1cGRhdGVQYWdlVGl0bGUodGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGhpcy5jYWxjdWxhdGVQYWdlVGl0bGUodGl0bGUpKTtcclxuICB9XHJcblxyXG4gIGwoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShrZXkpO1xyXG4gIH1cclxuICBnZXRDb25maWd1cmF0aW9uVmFsdWUoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldENvbmZpZ3VyYXRpb25WYWx1ZShrZXkpO1xyXG4gIH1cclxuICBnZXRMYW5ndWFnZU1vZGVWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldENvbmZpZ3VyYXRpb25WYWx1ZSgnTGFuZ3VhZ2VNb2RlJyk7XHJcbiAgfVxyXG4gIHN0b3BCbG9ja1VJKCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRCbG9ja1VJKCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICB9XHJcblxyXG4gIG9wZW5Nb2RhbChtb2RhbDogYW55LCBzaXplPzogc3RyaW5nKSB7XHJcbiAgICBpZiAoc2l6ZSlcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihtb2RhbCwge1xyXG4gICAgICAgIHNpemU6IHNpemUsXHJcbiAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICBlbHNlIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHsgYmFja2Ryb3A6ICdzdGF0aWMnLCBrZXlib2FyZDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZChmaWxlRFRPOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8qbGV0IGJsb2IgPSBuZXcgQmxvYihbZmlsZV0pOyovXHJcbiAgICBsZXQgZmlsZSA9IG5ldyBCbG9iKFtmaWxlRFRPXSwge1xyXG4gICAgICB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnLFxyXG4gICAgfSk7XHJcbiAgICBzYXZlQXMoZmlsZSwgZmlsZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRQREYoZmlsZURUTzogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgZmlsZSA9IG5ldyBCbG9iKFtmaWxlRFRPXSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL3BkZlwiIH0pO1xyXG4gICAgc2F2ZUFzKGZpbGUsIGZpbGVOYW1lKTtcclxuICB9XHJcbiAgZG93bmxvYWRXb3JkKGZpbGVEVE86IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGZpbGUgPSBuZXcgQmxvYihbZmlsZURUT10sIHsgdHlwZTogXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiIH0pO1xyXG4gICAgc2F2ZUFzKGZpbGUsIGZpbGVOYW1lKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGJhc2U2NHRvQmxvYihiYXNlNjREYXRhLCBjb250ZW50VHlwZSkge1xyXG4gICAgY29udGVudFR5cGUgPSBjb250ZW50VHlwZSB8fCAnJztcclxuICAgIHZhciBzbGljZVNpemUgPSAxMDI0O1xyXG4gICAgdmFyIGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiYXNlNjREYXRhKTtcclxuICAgIHZhciBieXRlc0xlbmd0aCA9IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDtcclxuICAgIHZhciBzbGljZXNDb3VudCA9IE1hdGguY2VpbChieXRlc0xlbmd0aCAvIHNsaWNlU2l6ZSk7XHJcbiAgICB2YXIgYnl0ZUFycmF5cyA9IG5ldyBBcnJheShzbGljZXNDb3VudCk7XHJcblxyXG4gICAgZm9yICh2YXIgc2xpY2VJbmRleCA9IDA7IHNsaWNlSW5kZXggPCBzbGljZXNDb3VudDsgKytzbGljZUluZGV4KSB7XHJcbiAgICAgIHZhciBiZWdpbiA9IHNsaWNlSW5kZXggKiBzbGljZVNpemU7XHJcbiAgICAgIHZhciBlbmQgPSBNYXRoLm1pbihiZWdpbiArIHNsaWNlU2l6ZSwgYnl0ZXNMZW5ndGgpO1xyXG5cclxuICAgICAgdmFyIGJ5dGVzID0gbmV3IEFycmF5KGVuZCAtIGJlZ2luKTtcclxuICAgICAgZm9yICh2YXIgb2Zmc2V0ID0gYmVnaW4sIGkgPSAwOyBvZmZzZXQgPCBlbmQ7ICsraSwgKytvZmZzZXQpIHtcclxuICAgICAgICBieXRlc1tpXSA9IGJ5dGVDaGFyYWN0ZXJzW29mZnNldF0uY2hhckNvZGVBdCgwKTtcclxuICAgICAgfVxyXG4gICAgICBieXRlQXJyYXlzW3NsaWNlSW5kZXhdID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBCbG9iKGJ5dGVBcnJheXMsIHsgdHlwZTogY29udGVudFR5cGUgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZVBhZ2VUaXRsZSh0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aXRsZVxyXG4gICAgICA/IHRpdGxlLnN1YnN0cmluZygwLCAxMDApICsgYCB8ICR7dGhpcy5sKCdBcHBsaWNhdGlvbk5hbWUnKX1gXHJcbiAgICAgIDogYCR7dGhpcy5sKCdBcHBsaWNhdGlvbk5hbWUnKX1gO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnaW5nRmlsdGVyc1ZhbHVlcyhmb3JtOiBGb3JtR3JvdXAsIGZpbHRlcnM6IEZpbHRlckl0ZW1bXSk6IGFueSB7XHJcbiAgICBsZXQgbW9kZWwgPSBuZXcgT2JqZWN0KCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGZpbHRlckl0ZW0gPSBmaWx0ZXJzW2ldO1xyXG4gICAgICBpZiAoZm9ybS5jb250cm9sc1tmaWx0ZXJJdGVtLmZvcm1Db250cm9sTmFtZV0udmFsdWUgPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICBtb2RlbFtmaWx0ZXJJdGVtLmFjdGlvblBhcmFtZXRlck5hbWVdID1cclxuICAgICAgICBmb3JtLmNvbnRyb2xzW2ZpbHRlckl0ZW0uZm9ybUNvbnRyb2xOYW1lXS52YWx1ZSA9PSB1bmRlZmluZWRcclxuICAgICAgICAgID8gJydcclxuICAgICAgICAgIDogZm9ybS5jb250cm9sc1tmaWx0ZXJJdGVtLmZvcm1Db250cm9sTmFtZV0udmFsdWU7XHJcbiAgICAgIC8vIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoZmlsdGVySXRlbS5BY3Rpb25QYXJhbWV0ZXJOYW1lLCBmb3JtLmNvbnRyb2xzW2ZpbHRlckl0ZW0uRm9ybUNvbnRyb2xOYW1lXS52YWx1ZSA9PSB1bmRlZmluZWQgPyAnJyA6IGZvcm0uY29udHJvbHNbZmlsdGVySXRlbS5Gb3JtQ29udHJvbE5hbWVdLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb2RlbDtcclxuICB9XHJcblxyXG4gIHJlbW92ZUNvbnRyb2woY29udHJvbE5hbWU6IHN0cmluZywgZm9ybTogRm9ybUdyb3VwKSB7XHJcbiAgICBmb3JtLnJlbW92ZUNvbnRyb2woY29udHJvbE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgY29weVRvQ2xpcGJvYXJkKHZhbDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBzZWxCb3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xyXG4gICAgc2VsQm94LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcclxuICAgIHNlbEJveC5zdHlsZS5sZWZ0ID0gJzAnO1xyXG4gICAgc2VsQm94LnN0eWxlLnRvcCA9ICcwJztcclxuICAgIHNlbEJveC5zdHlsZS5vcGFjaXR5ID0gJzAnO1xyXG4gICAgc2VsQm94LnZhbHVlID0gdmFsO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzZWxCb3gpO1xyXG4gICAgc2VsQm94LmZvY3VzKCk7XHJcbiAgICBzZWxCb3guc2VsZWN0KCk7XHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzZWxCb3gpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlTdWNjZXNzTWVzc2FnZSh0aGlzLmwoJ0NvcGllZFN1Y2Nlc3NmdWxseScpKTtcclxuICB9XHJcblxyXG4gIGFkZFJlcXVpcmVkUnVsZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGNvbnRyb2xPcHRpb25zOiBhbnkpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuYWRkUmVxdWlyZWRUb0NvbnRyb2woY29udHJvbCwgY29udHJvbE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUmVxdWlyZWRSdWxlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgY29udHJvbE9wdGlvbnM6IGFueSkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5yZW1vdmVSZXF1aXJlZEZyb21Db250cm9sKGNvbnRyb2wsIGNvbnRyb2xPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRGF0ZXMoXHJcbiAgICBmb3JtOiBGb3JtR3JvdXAsXHJcbiAgICBmcm9tRGF0ZUNvbnRyb2w6IHN0cmluZyxcclxuICAgIHRvRGF0ZUNvbnRyb2w6IHN0cmluZyxcclxuICAgIHZhbGlkYXRpb25NZXNzYWdlS2V5OiBzdHJpbmdcclxuICApOiBDdXN0b21WYWxpZGF0aW9uIHtcclxuICAgIHZhciB2YWxpZGF0b3IgPSBuZXcgQ3VzdG9tVmFsaWRhdGlvbigpO1xyXG4gICAgdmFsaWRhdG9yLmZ1bmN0aW9uQm9keSA9IChjb250cm9sKSA9PiB7XHJcbiAgICAgIGxldCBmcm9tRGF0ZSA9IGZvcm0uY29udHJvbHNbZnJvbURhdGVDb250cm9sXS52YWx1ZTtcclxuICAgICAgbGV0IHRvRGF0ZSA9IGZvcm0uY29udHJvbHNbdG9EYXRlQ29udHJvbF0udmFsdWU7XHJcblxyXG4gICAgICBpZiAoZnJvbURhdGUgJiYgdG9EYXRlICYmIHRvRGF0ZSA8PSBmcm9tRGF0ZSlcclxuICAgICAgICByZXR1cm4geyBjdXN0b21lckVycm9yOiB0cnVlIH07XHJcblxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgICB2YWxpZGF0b3IubWFzc2FnZSA9IHRoaXMubCh2YWxpZGF0aW9uTWVzc2FnZUtleSk7XHJcbiAgICByZXR1cm4gdmFsaWRhdG9yO1xyXG4gIH1cclxuXHJcbiAgb25TdWNjZXNzQWRkSGFuZGxlciA9IChzdWNjZXNzOiBhbnkpID0+IHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5U3VjY2Vzc01lc3NhZ2UoXHJcbiAgICAgIHRoaXMubCgnUmVjb3JkQWRkZWQnKSxcclxuICAgICAgbnVsbCxcclxuICAgICAgbnVsbCxcclxuICAgICAgZmFsc2VcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgb25TdWNjZXNzRWRpdEhhbmRsZXIgPSAoc3VjY2VzczogYW55KSA9PiB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeVN1Y2Nlc3NNZXNzYWdlKFxyXG4gICAgICB0aGlzLmwoJ1JlY29yZFVwZGF0ZWQnKSxcclxuICAgICAgbnVsbCxcclxuICAgICAgbnVsbCxcclxuICAgICAgZmFsc2VcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgb25TdWNjZXNzRGVsZXRlSGFuZGxlciA9IChzdWNjZXNzOiBhbnkpID0+IHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5U3VjY2Vzc01lc3NhZ2UoXHJcbiAgICAgIHRoaXMubCgnUmVjb3JkRGVsZXRlZCcpLFxyXG4gICAgICBudWxsLFxyXG4gICAgICBudWxsLFxyXG4gICAgICBmYWxzZVxyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICByZWNhbGN1bGF0ZVBhZ2VUaXRsZSgpIHtcclxuICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRoaXMuY2FsY3VsYXRlUGFnZVRpdGxlKCcnKSk7XHJcbiAgfVxyXG5cclxuICBpc0VuZ2xpc2goKSB7XHJcbiAgICByZXR1cm4gdGhpcy51dGlsaXR5U2VydmljZS5pc0N1cnJlbnRMYW5ndWFnZUVuZ2xpc2goKTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZUluaXRpYWxzKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFuZ3VhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKTtcclxuICAgIGxldCBjdXJyZW50VXNlciA9IEF1dGhTZXJ2aWNlLnVzZXIucHJvZmlsZTtcclxuICAgIGNvbnNvbGUubG9nKGN1cnJlbnRVc2VyKTtcclxuICAgIGxldCB1c2VyTmFtZSA9XHJcbiAgICAgIGxhbmd1YWdlID09ICdlbicgPyBjdXJyZW50VXNlci5naXZlbl9uYW1lRW4gOiBjdXJyZW50VXNlci5naXZlbl9uYW1lQXI7XHJcbiAgICBpZiAoY3VycmVudFVzZXIpIHtcclxuICAgICAgbGV0IGZ1bGxOYW1lID0gdXNlck5hbWUuc3BsaXQoJyAnKTtcclxuICAgICAgbGV0IGluaXRpYWxzOiBzdHJpbmc7XHJcbiAgICAgIGlmIChmdWxsTmFtZS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFTilcclxuICAgICAgICAgIGluaXRpYWxzID0gZnVsbE5hbWUuc2hpZnQoKS5jaGFyQXQoMCkgKyBmdWxsTmFtZS5wb3AoKS5jaGFyQXQoMCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaW5pdGlhbHMgPVxyXG4gICAgICAgICAgICBmdWxsTmFtZS5zaGlmdCgpLmNoYXJBdCgwKSArICcgJyArIGZ1bGxOYW1lLnBvcCgpLmNoYXJBdCgwKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbml0aWFscyA9IGZ1bGxOYW1lLnBvcCgpLmNoYXJBdCgwKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaW5pdGlhbHMudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRVc2VySW5pdGlhbHMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZUluaXRpYWxzKHRoaXMuYXVoU2VydmljZS5uYW1lKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudEZhaWxPdmVyKHZhbDogRW5nbGlzaEFyYWJpY0RUTyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5pc0VuZ2xpc2goKSkge1xyXG4gICAgICBpZiAodmFsLmVuZ2xpc2gpIHJldHVybiB2YWwuZW5nbGlzaDtcclxuICAgICAgZWxzZSByZXR1cm4gdmFsLmFyYWJpYztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh2YWwuYXJhYmljKSByZXR1cm4gdmFsLmFyYWJpYztcclxuICAgICAgZWxzZSByZXR1cm4gdmFsLmVuZ2xpc2g7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIHZhbGlkYXRpb24gYWN0aW9uc1xyXG5cclxuICBhZGRSZXF1aXJlZFZhbGlkYXRpb24oY3VzdG9tQ29udHJvbE9wdGlvbjogYW55W10sIGZvcm06IEZvcm1Hcm91cCwgZm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zKTogdm9pZCB7XHJcbiAgICBjdXN0b21Db250cm9sT3B0aW9uLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgIGlmIChmb3JtLmdldChjb250cm9sLk5hbWUpKVxyXG4gICAgICAgIHRoaXMuYWRkUmVxdWlyZWRSdWxlKGZvcm0uZ2V0KGNvbnRyb2wuTmFtZSksIGZvcm1PcHRpb25zKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGNvbnRyb2wuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbihjdXN0b21Db250cm9sT3B0aW9uOiBhbnlbXSwgZm9ybTogRm9ybUdyb3VwLCBmb3JtT3B0aW9uczogRm9ybU9wdGlvbnMpOiB2b2lkIHtcclxuICAgIGN1c3RvbUNvbnRyb2xPcHRpb24uZm9yRWFjaChjb250cm9sID0+IHtcclxuICAgICAgaWYgKGZvcm0uZ2V0KGNvbnRyb2wuTmFtZSkpXHJcbiAgICAgICAgdGhpcy5yZW1vdmVSZXF1aXJlZFJ1bGUoZm9ybS5nZXQoY29udHJvbC5OYW1lKSwgZm9ybU9wdGlvbnMpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgY29udHJvbC5Jc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlc2V0Rm9ybUNvbnRyb2xzVmFsdWUoY3VzdG9tQ29udHJvbHNPcHRpb25zOiBhbnlbXSwgZm9ybTogRm9ybUdyb3VwKTogdm9pZCB7XHJcbiAgICBjdXN0b21Db250cm9sc09wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICBsZXQgZm9ybUNvbnRyb2wgPSBmb3JtLmdldChvcHRpb24uTmFtZSk7XHJcbiAgICAgIGlmIChmb3JtQ29udHJvbClcclxuICAgICAgICBmb3JtQ29udHJvbC5yZXNldCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbn1cclxuIl19
|
|
@@ -38,6 +38,12 @@ export class TextboxComponent {
|
|
|
38
38
|
this.hasCharsLimitValidationError = false;
|
|
39
39
|
this.minCharsLimit = -1; //To disable chars limit feature by default
|
|
40
40
|
this.maxLimitWarningMsg = '';
|
|
41
|
+
this.passwordMinLength = 8; // Default value, will be updated based on actual validator
|
|
42
|
+
this.hasNumber = false;
|
|
43
|
+
this.hasCapitalLetter = false;
|
|
44
|
+
this.hasSmallLetter = false;
|
|
45
|
+
this.hasSpecialLetter = false;
|
|
46
|
+
this.hasMinLength = false;
|
|
41
47
|
this.resetError = () => {
|
|
42
48
|
this.controlValidationService.removeGlobalError();
|
|
43
49
|
};
|
|
@@ -123,6 +129,8 @@ export class TextboxComponent {
|
|
|
123
129
|
break;
|
|
124
130
|
case InputType.Password:
|
|
125
131
|
if (!this.options.removeDefaultPasswordValidation) {
|
|
132
|
+
// Use options.minLength if set, otherwise default to 8
|
|
133
|
+
this.passwordMinLength = this.options.minLength > 0 ? this.options.minLength : 8;
|
|
126
134
|
this.validationRules.push(Validators.compose([
|
|
127
135
|
this.controlUtility.patternValidator(/\d/, {
|
|
128
136
|
passwordComplexityHasNumber: this.passwordComplexityHasNumber,
|
|
@@ -136,7 +144,7 @@ export class TextboxComponent {
|
|
|
136
144
|
this.controlUtility.patternValidator(/[!@#$%^&*(),.?":{}|<>]/, {
|
|
137
145
|
passwordComplexityHasSpecialLetter: this.passwordComplexityHasSpecialLetter,
|
|
138
146
|
}),
|
|
139
|
-
Validators.minLength(
|
|
147
|
+
Validators.minLength(this.passwordMinLength),
|
|
140
148
|
]));
|
|
141
149
|
}
|
|
142
150
|
break;
|
|
@@ -183,6 +191,10 @@ export class TextboxComponent {
|
|
|
183
191
|
this.markAllAsTouched = true;
|
|
184
192
|
});
|
|
185
193
|
this.options.validationRules = this.validationRules;
|
|
194
|
+
// Initialize password complexity check if it's a password field with existing value
|
|
195
|
+
if (this.options.type == InputType.Password && !this.options.removeDefaultPasswordValidation && this.options.value) {
|
|
196
|
+
this.checkPasswordComplexity(this.options.value);
|
|
197
|
+
}
|
|
186
198
|
}
|
|
187
199
|
ngAfterViewInit() {
|
|
188
200
|
this.controlUtility.setAttributeForControl(this.options);
|
|
@@ -222,6 +234,9 @@ export class TextboxComponent {
|
|
|
222
234
|
this.maxWordCountValidationKey = this.utilityService.getResourceValue('MaxWordCountValidationKey');
|
|
223
235
|
this.arabicLetterOnly = this.utilityService.getResourceValue('VAL_ArabicIsRequiredAndOnly50CharactersEnglish');
|
|
224
236
|
this.englishLetterOnly = this.utilityService.getResourceValue('EnglishLetterOnly');
|
|
237
|
+
// Password disclaimer messages
|
|
238
|
+
this.passwordRequirementsTitle = this.utilityService.getResourceValue('PasswordRequirementsTitle');
|
|
239
|
+
this.minLengthRequirement = this.utilityService.getResourceValue('MinLengthRequirement').replace('${minLength}', this.passwordMinLength.toString());
|
|
225
240
|
}
|
|
226
241
|
onTextChange() {
|
|
227
242
|
if (this.options.type == InputType.Number)
|
|
@@ -229,11 +244,23 @@ export class TextboxComponent {
|
|
|
229
244
|
this.textBoxFormControl.setErrors({ integerNumberValidationKey: '' });
|
|
230
245
|
return;
|
|
231
246
|
}
|
|
247
|
+
// Check password complexity requirements in real-time
|
|
248
|
+
if (this.options.type == InputType.Password && !this.options.removeDefaultPasswordValidation) {
|
|
249
|
+
this.checkPasswordComplexity(this.textBoxFormControl.value || '');
|
|
250
|
+
}
|
|
232
251
|
if (this.textBoxFormControl.value == '') {
|
|
233
252
|
this.wordCountArray = 0;
|
|
234
253
|
this.wordCount = 0;
|
|
235
254
|
this.showCharsLimitMsg = false;
|
|
236
255
|
this.hasCharsLimitValidationError = false;
|
|
256
|
+
// Reset password complexity flags when field is empty
|
|
257
|
+
if (this.options.type == InputType.Password && !this.options.removeDefaultPasswordValidation) {
|
|
258
|
+
this.hasNumber = false;
|
|
259
|
+
this.hasCapitalLetter = false;
|
|
260
|
+
this.hasSmallLetter = false;
|
|
261
|
+
this.hasSpecialLetter = false;
|
|
262
|
+
this.hasMinLength = false;
|
|
263
|
+
}
|
|
237
264
|
}
|
|
238
265
|
else {
|
|
239
266
|
this.wordCountArray = this.textBoxFormControl.value?.split(' ').length;
|
|
@@ -291,14 +318,25 @@ export class TextboxComponent {
|
|
|
291
318
|
this.showCharsLimitMsg = false;
|
|
292
319
|
}
|
|
293
320
|
onTextBlur() {
|
|
321
|
+
// Check password complexity on blur as well
|
|
322
|
+
if (this.options.type == InputType.Password && !this.options.removeDefaultPasswordValidation) {
|
|
323
|
+
this.checkPasswordComplexity(this.textBoxFormControl.value || '');
|
|
324
|
+
}
|
|
294
325
|
this.onBlur.emit(this.textBoxFormControl.value);
|
|
295
326
|
}
|
|
327
|
+
checkPasswordComplexity(password) {
|
|
328
|
+
this.hasNumber = /\d/.test(password);
|
|
329
|
+
this.hasCapitalLetter = /[A-Z]/.test(password);
|
|
330
|
+
this.hasSmallLetter = /[a-z]/.test(password);
|
|
331
|
+
this.hasSpecialLetter = /[!@#$%^&*(),.?":{}|<>]/.test(password);
|
|
332
|
+
this.hasMinLength = password.length >= this.passwordMinLength;
|
|
333
|
+
}
|
|
296
334
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextboxComponent, deps: [{ token: i1.ControlUtility }, { token: i2.ControlContainer, optional: true }, { token: i2.FormGroupDirective }, { token: i3.UtilityService }, { token: i3.ControlValidationService }, { token: i4.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
297
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TextboxComponent, selector: "BBSF-TextBox", inputs: { group: "group", options: "options" }, outputs: { onChange: "onChange", onBlur: "onBlur" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"options.viewType == 1 ? 'bbsf-vertical' : 'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label {{ options.labelExtraClasses }}\">\r\n {{ options.labelValue }}\r\n <!--Asterisk-->\r\n @if (((options.showAsterisk && options.isRequired) || options.isRequired) && !options.isReadonly) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <!--MaskPattern-->\r\n @if (maskPattern != null && maskPattern != '' && !options.isReadonly) {\r\n <div class=\"bbsf-input-container\" [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div *ngIf=\"options.icon != null\" class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }}\" [mask]=\"maskPattern\" placeHolderCharacter=\" \"\r\n [showMaskTyped]=\"true\" [validation]=\"true\" [dir]=\"textDir\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{ options.name }}\" type=\"{{ getInputType(options.type) }}\" [(ngModel)]=\"options.value\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [readonly]=\"options.isReadonly\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n }\r\n <!--NoMaskPattern-->\r\n <div *ngIf=\"maskPattern == null || (maskPattern == '' && !options.isReadonly)\" class=\"bbsf-input-container\"\r\n [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\" *ngIf=\"options.icon != null\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }} \" [dir]=\"textDir\" (focus)=\"onFocus(true)\"\r\n (focusout)=\"onFocus(false)\" maxlength=\"{{ options.maxLength }}\" minlength=\"{{ options.minLength }}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{ options.name }}\"\r\n type=\"{{ getInputType(options.type) }}\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [(ngModel)]=\"options.value\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n [readonly]=\"options.isReadonly\" #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" triggers=\"click:blur\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n <!-- readonly -->\r\n @if (options.isReadonly) {\r\n <div>\r\n <a *ngIf=\"options.type == inputType.Email\" href=\"mailto: {{ options.value }}\">{{ options.value }}</a>\r\n <a *ngIf=\"options.type == inputType.URL\" href=\"{{ options.value }}\" target=\"_blank\">{{ options.value }}</a>\r\n <span *ngIf=\"options.type != inputType.URL && options.type != inputType.Email\"\r\n class=\"readonly-view\">{{ options.value }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.maxWordCount > 0 && isShowWordCount\">\r\n {{ wordCount }}/{{ options.maxWordCount }} Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showCharsLimitMsg\"\r\n [ngClass]=\"{ 'badge-light-warning': charsLimitMsgClass === 'warning', 'badge-light-danger': charsLimitMsgClass === 'danger' }\">\r\n {{ maxLimitWarningMsg }}\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription != null\">{{ options.labelDescription }}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" [dir]=\"textDir\" *ngIf=\"textBoxFormControl.invalid && textBoxFormControl.touched\">\r\n {{ getErrorValidation(textBoxFormControl.errors | keyvalue) }}\r\n </div>\r\n </div>\r\n\r\n @if ((group.valid && group.dirty && group.touched) || (group.untouched && group.invalid && group.dirty)) {\r\n <div>{{ resetError() }}</div>\r\n }\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i7.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "directive", type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i9.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "pipe", type: i5.KeyValuePipe, name: "keyvalue" }] }); }
|
|
335
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TextboxComponent, selector: "BBSF-TextBox", inputs: { group: "group", options: "options" }, outputs: { onChange: "onChange", onBlur: "onBlur" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"options.viewType == 1 ? 'bbsf-vertical' : 'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label {{ options.labelExtraClasses }}\">\r\n {{ options.labelValue }}\r\n <!--Asterisk-->\r\n @if (((options.showAsterisk && options.isRequired) || options.isRequired) && !options.isReadonly) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <!--MaskPattern-->\r\n @if (maskPattern != null && maskPattern != '' && !options.isReadonly) {\r\n <div class=\"bbsf-input-container\" [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div *ngIf=\"options.icon != null\" class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }}\" [mask]=\"maskPattern\" placeHolderCharacter=\" \"\r\n [showMaskTyped]=\"true\" [validation]=\"true\" [dir]=\"textDir\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{ options.name }}\" type=\"{{ getInputType(options.type) }}\" [(ngModel)]=\"options.value\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [readonly]=\"options.isReadonly\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n }\r\n <!--NoMaskPattern-->\r\n <div *ngIf=\"maskPattern == null || (maskPattern == '' && !options.isReadonly)\" class=\"bbsf-input-container\"\r\n [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\" *ngIf=\"options.icon != null\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }} \" [dir]=\"textDir\" (focus)=\"onFocus(true)\"\r\n (focusout)=\"onFocus(false)\" maxlength=\"{{ options.maxLength }}\" minlength=\"{{ options.minLength }}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{ options.name }}\"\r\n type=\"{{ getInputType(options.type) }}\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [(ngModel)]=\"options.value\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n [readonly]=\"options.isReadonly\" #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" triggers=\"click:blur\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n <!-- readonly -->\r\n @if (options.isReadonly) {\r\n <div>\r\n <a *ngIf=\"options.type == inputType.Email\" href=\"mailto: {{ options.value }}\">{{ options.value }}</a>\r\n <a *ngIf=\"options.type == inputType.URL\" href=\"{{ options.value }}\" target=\"_blank\">{{ options.value }}</a>\r\n <span *ngIf=\"options.type != inputType.URL && options.type != inputType.Email\"\r\n class=\"readonly-view\">{{ options.value }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.maxWordCount > 0 && isShowWordCount\">\r\n {{ wordCount }}/{{ options.maxWordCount }} Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showCharsLimitMsg\"\r\n [ngClass]=\"{ 'badge-light-warning': charsLimitMsgClass === 'warning', 'badge-light-danger': charsLimitMsgClass === 'danger' }\">\r\n {{ maxLimitWarningMsg }}\r\n </div>\r\n <!-- Password Disclaimer -->\r\n <div class=\"bbsf-password-disclaimer\"\r\n *ngIf=\"options.type == inputType.Password && !options.removeDefaultPasswordValidation && !options.isReadonly\">\r\n <div class=\"password-requirements\">\r\n <div class=\"requirement-title\">{{ passwordRequirementsTitle }}</div>\r\n <ul class=\"requirements-list\">\r\n <li [ngClass]=\"{'requirement-met': hasNumber, 'requirement-not-met': !hasNumber}\">\r\n <i class=\"fas\" [ngClass]=\"hasNumber ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasNumber }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasCapitalLetter, 'requirement-not-met': !hasCapitalLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasCapitalLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasCapitalLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasSmallLetter, 'requirement-not-met': !hasSmallLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasSmallLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasSmallLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasSpecialLetter, 'requirement-not-met': !hasSpecialLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasSpecialLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasSpecialLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasMinLength, 'requirement-not-met': !hasMinLength}\">\r\n <i class=\"fas\" [ngClass]=\"hasMinLength ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ minLengthRequirement }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription != null\">{{ options.labelDescription }}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" [dir]=\"textDir\" *ngIf=\"textBoxFormControl.invalid && textBoxFormControl.touched\">\r\n {{ getErrorValidation(textBoxFormControl.errors | keyvalue) }}\r\n </div>\r\n </div>\r\n\r\n @if ((group.valid && group.dirty && group.touched) || (group.untouched && group.invalid && group.dirty)) {\r\n <div>{{ resetError() }}</div>\r\n }\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i7.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "directive", type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i9.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "pipe", type: i5.KeyValuePipe, name: "keyvalue" }] }); }
|
|
298
336
|
}
|
|
299
337
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextboxComponent, decorators: [{
|
|
300
338
|
type: Component,
|
|
301
|
-
args: [{ selector: 'BBSF-TextBox', template: "<div class=\"form-group bbsf-control bbsf-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"options.viewType == 1 ? 'bbsf-vertical' : 'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label {{ options.labelExtraClasses }}\">\r\n {{ options.labelValue }}\r\n <!--Asterisk-->\r\n @if (((options.showAsterisk && options.isRequired) || options.isRequired) && !options.isReadonly) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <!--MaskPattern-->\r\n @if (maskPattern != null && maskPattern != '' && !options.isReadonly) {\r\n <div class=\"bbsf-input-container\" [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div *ngIf=\"options.icon != null\" class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }}\" [mask]=\"maskPattern\" placeHolderCharacter=\" \"\r\n [showMaskTyped]=\"true\" [validation]=\"true\" [dir]=\"textDir\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{ options.name }}\" type=\"{{ getInputType(options.type) }}\" [(ngModel)]=\"options.value\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [readonly]=\"options.isReadonly\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n }\r\n <!--NoMaskPattern-->\r\n <div *ngIf=\"maskPattern == null || (maskPattern == '' && !options.isReadonly)\" class=\"bbsf-input-container\"\r\n [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\" *ngIf=\"options.icon != null\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }} \" [dir]=\"textDir\" (focus)=\"onFocus(true)\"\r\n (focusout)=\"onFocus(false)\" maxlength=\"{{ options.maxLength }}\" minlength=\"{{ options.minLength }}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{ options.name }}\"\r\n type=\"{{ getInputType(options.type) }}\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [(ngModel)]=\"options.value\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n [readonly]=\"options.isReadonly\" #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" triggers=\"click:blur\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n <!-- readonly -->\r\n @if (options.isReadonly) {\r\n <div>\r\n <a *ngIf=\"options.type == inputType.Email\" href=\"mailto: {{ options.value }}\">{{ options.value }}</a>\r\n <a *ngIf=\"options.type == inputType.URL\" href=\"{{ options.value }}\" target=\"_blank\">{{ options.value }}</a>\r\n <span *ngIf=\"options.type != inputType.URL && options.type != inputType.Email\"\r\n class=\"readonly-view\">{{ options.value }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.maxWordCount > 0 && isShowWordCount\">\r\n {{ wordCount }}/{{ options.maxWordCount }} Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showCharsLimitMsg\"\r\n [ngClass]=\"{ 'badge-light-warning': charsLimitMsgClass === 'warning', 'badge-light-danger': charsLimitMsgClass === 'danger' }\">\r\n {{ maxLimitWarningMsg }}\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription != null\">{{ options.labelDescription }}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" [dir]=\"textDir\" *ngIf=\"textBoxFormControl.invalid && textBoxFormControl.touched\">\r\n {{ getErrorValidation(textBoxFormControl.errors | keyvalue) }}\r\n </div>\r\n </div>\r\n\r\n @if ((group.valid && group.dirty && group.touched) || (group.untouched && group.invalid && group.dirty)) {\r\n <div>{{ resetError() }}</div>\r\n }\r\n</div>" }]
|
|
339
|
+
args: [{ selector: 'BBSF-TextBox', template: "<div class=\"form-group bbsf-control bbsf-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"options.viewType == 1 ? 'bbsf-vertical' : 'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label {{ options.labelExtraClasses }}\">\r\n {{ options.labelValue }}\r\n <!--Asterisk-->\r\n @if (((options.showAsterisk && options.isRequired) || options.isRequired) && !options.isReadonly) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <!--MaskPattern-->\r\n @if (maskPattern != null && maskPattern != '' && !options.isReadonly) {\r\n <div class=\"bbsf-input-container\" [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div *ngIf=\"options.icon != null\" class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }}\" [mask]=\"maskPattern\" placeHolderCharacter=\" \"\r\n [showMaskTyped]=\"true\" [validation]=\"true\" [dir]=\"textDir\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{ options.name }}\" type=\"{{ getInputType(options.type) }}\" [(ngModel)]=\"options.value\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [readonly]=\"options.isReadonly\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n }\r\n <!--NoMaskPattern-->\r\n <div *ngIf=\"maskPattern == null || (maskPattern == '' && !options.isReadonly)\" class=\"bbsf-input-container\"\r\n [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\" *ngIf=\"options.icon != null\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }} \" [dir]=\"textDir\" (focus)=\"onFocus(true)\"\r\n (focusout)=\"onFocus(false)\" maxlength=\"{{ options.maxLength }}\" minlength=\"{{ options.minLength }}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{ options.name }}\"\r\n type=\"{{ getInputType(options.type) }}\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [(ngModel)]=\"options.value\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n [readonly]=\"options.isReadonly\" #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" triggers=\"click:blur\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n <!-- readonly -->\r\n @if (options.isReadonly) {\r\n <div>\r\n <a *ngIf=\"options.type == inputType.Email\" href=\"mailto: {{ options.value }}\">{{ options.value }}</a>\r\n <a *ngIf=\"options.type == inputType.URL\" href=\"{{ options.value }}\" target=\"_blank\">{{ options.value }}</a>\r\n <span *ngIf=\"options.type != inputType.URL && options.type != inputType.Email\"\r\n class=\"readonly-view\">{{ options.value }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.maxWordCount > 0 && isShowWordCount\">\r\n {{ wordCount }}/{{ options.maxWordCount }} Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showCharsLimitMsg\"\r\n [ngClass]=\"{ 'badge-light-warning': charsLimitMsgClass === 'warning', 'badge-light-danger': charsLimitMsgClass === 'danger' }\">\r\n {{ maxLimitWarningMsg }}\r\n </div>\r\n <!-- Password Disclaimer -->\r\n <div class=\"bbsf-password-disclaimer\"\r\n *ngIf=\"options.type == inputType.Password && !options.removeDefaultPasswordValidation && !options.isReadonly\">\r\n <div class=\"password-requirements\">\r\n <div class=\"requirement-title\">{{ passwordRequirementsTitle }}</div>\r\n <ul class=\"requirements-list\">\r\n <li [ngClass]=\"{'requirement-met': hasNumber, 'requirement-not-met': !hasNumber}\">\r\n <i class=\"fas\" [ngClass]=\"hasNumber ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasNumber }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasCapitalLetter, 'requirement-not-met': !hasCapitalLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasCapitalLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasCapitalLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasSmallLetter, 'requirement-not-met': !hasSmallLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasSmallLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasSmallLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasSpecialLetter, 'requirement-not-met': !hasSpecialLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasSpecialLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasSpecialLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasMinLength, 'requirement-not-met': !hasMinLength}\">\r\n <i class=\"fas\" [ngClass]=\"hasMinLength ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ minLengthRequirement }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription != null\">{{ options.labelDescription }}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" [dir]=\"textDir\" *ngIf=\"textBoxFormControl.invalid && textBoxFormControl.touched\">\r\n {{ getErrorValidation(textBoxFormControl.errors | keyvalue) }}\r\n </div>\r\n </div>\r\n\r\n @if ((group.valid && group.dirty && group.touched) || (group.untouched && group.invalid && group.dirty)) {\r\n <div>{{ resetError() }}</div>\r\n }\r\n</div>" }]
|
|
302
340
|
}], ctorParameters: () => [{ type: i1.ControlUtility }, { type: i2.ControlContainer, decorators: [{
|
|
303
341
|
type: Optional
|
|
304
342
|
}] }, { type: i2.FormGroupDirective }, { type: i3.UtilityService }, { type: i3.ControlValidationService }, { type: i4.GlobalSettings }], propDecorators: { group: [{
|
|
@@ -310,4 +348,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
310
348
|
}], onBlur: [{
|
|
311
349
|
type: Output
|
|
312
350
|
}] } });
|
|
313
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvVGV4dEJveC9UZXh0Qm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9UZXh0Qm94L1RleHRCb3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQW9FLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSXpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7Ozs7QUFNM0UsTUFBTSxPQUFPLGdCQUFnQjthQUNwQiwyQkFBc0IsR0FBRyxJQUFJLEFBQVAsQ0FBUTtJQUNyQyxZQUFvQixjQUE4QixFQUMxQixnQkFBa0MsRUFDL0MsZUFBbUMsRUFDbkMsY0FBOEIsRUFDN0Isd0JBQWtELEVBQ2xELGNBQThCO1FBTHRCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQy9DLG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQUNuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDN0IsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFLaEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDOUIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFL0IsY0FB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bnQsIE9uSW5pdCwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMsIEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtR3JvdXBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUZXh0Qm94T3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvVGV4dEJveE9wdGlvbnMnO1xuaW1wb3J0IHsgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vU2hhcmVkL0VudW1zL0lucHV0VHlwZSc7XG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XG5pbXBvcnQgeyBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcbmltcG9ydCB7IEdsb2JhbFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0dsb2JhbFNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VWYWxpZGF0aW9uIH0gZnJvbSAnLi4vLi4vU2hhcmVkL0VudW1zL0xhbmd1YWdlVmFsaWRhdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0JCU0YtVGV4dEJveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9UZXh0Qm94LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUZXh0Ym94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc3RhdGljIGNvbnRyb2xDb250YWluZXJTdGF0aWMgPSBudWxsO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnRyb2xVdGlsaXR5OiBDb250cm9sVXRpbGl0eVxuICAgICwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyXG4gICAgLCBwdWJsaWMgdGV4dENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmVcbiAgICAsIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2VcbiAgICAsIHByaXZhdGUgY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlOiBDb250cm9sVmFsaWRhdGlvblNlcnZpY2VcbiAgICAsIHByaXZhdGUgZ2xvYmFsU2V0dGluZ3M6IEdsb2JhbFNldHRpbmdzKSB7XG4gICAgVGV4dGJveENvbXBvbmVudC5jb250cm9sQ29udGFpbmVyU3RhdGljID0gdGhpcy5jb250cm9sQ29udGFpbmVyO1xuICB9XG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIG9wdGlvbnM6IFRleHRCb3hPcHRpb25zO1xuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIGlucHV0VHlwZSA9IElucHV0VHlwZTtcbiAgdGV4dEJveEZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG4gIG1hc2tQYXR0ZXJuOiBzdHJpbmcgPSAnJztcbiAgd29yZENvdW50OiBudW1iZXIgPSAwO1xuICB3b3JkQ291bnRBcnJheTogbnVtYmVyID0gMDtcbiAgZW1haWxWYWxpZGF0aW9uS2V5OiBzdHJpbmc7XG4gIHVSTFZhbGlkYXRpb25LZXk6IHN0cmluZztcbiAgcGFzc3dvcmRDb21wbGV4aXR5SGFzTnVtYmVyOiBzdHJpbmc7XG4gIGFyYWJpY0xldHRlck9ubHk6IHN0cmluZztcbiAgZW5nbGlzaExldHRlck9ubHk6IHN0cmluZztcbiAgcGFzc3dvcmRDb21wbGV4aXR5SGFzQ2FwaXRhbExldHRlcjogc3RyaW5nO1xuICBwYXNzd29yZENvbXBsZXhpdHlIYXNTbWFsbExldHRlcjogc3RyaW5nO1xuICBwYXNzd29yZENvbXBsZXhpdHlIYXNTcGVjaWFsTGV0dGVyOiBzdHJpbmc7XG4gIG1heFdvcmRDb3VudFZhbGlkYXRpb25LZXk6IHN0cmluZztcbiAgaXNTaG93V29yZENvdW50OiBib29sZWFuID0gZmFsc2U7XG4gIG1hcmtBbGxBc1RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdmFsaWRhdGlvblJ1bGVzID0gW107XG4gIHZhbGlkYXRpb25SdWxlc0FzeW5jID0gW107XG5cbiAgLy9Gb3IgU2hvdyB3YXJuaW5nIG1lc3NhZ2Ugb2YgbWF4IGxlbmd0aCBsaW1pdFxuICBjdXJyZW50Q2hhcnNDb3VudDogbnVtYmVyID0gMDtcbiAgc2hvd0NoYXJzTGltaXRNc2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBjaGFyc0xpbWl0TXNnQ2xhc3M6IHN0cmluZztcbiAgbWluQ2hhcnNMaW1pdDogbnVtYmVyID0gLTE7IC8vVG8gZGlzYWJsZSBjaGFycyBsaW1pdCBmZWF0dXJlIGJ5IGRlZmF1bHRcbiAgbWF4TGltaXRXYXJuaW5nTXNnOiBzdHJpbmcgPSAnJztcbiAgdGV4dERpcjogYW55O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaXNSZWFkb25seSAmJiAhdGhpcy5vcHRpb25zLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMudmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05BJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VEaXJlY3Rpb24pXG4gICAgICB0aGlzLnRleHREaXIgPSB0aGlzLm9wdGlvbnMuZm9yY2VEaXJlY3Rpb24gPT0gMiA/ICdydGwnIDogJ2x0cic7XG4gICAgZWxzZVxuICAgICAgdGhpcy50ZXh0RGlyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJykgPT0gJ2FyJyA/ICdydGwnIDogJ2x0cic7XG5cbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5pc0NyZWF0ZWRCZWZvciA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubWF4TGVuZ3RoKVxuICAgICAgdGhpcy5vcHRpb25zLm1heExlbmd0aCA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MubWF4TGVuZ3RoVGV4dEJveDtcblxuICAgIGlmICghdGhpcy5vcHRpb25zLnZpZXdUeXBlKVxuICAgICAgdGhpcy5vcHRpb25zLnZpZXdUeXBlID0gdGhpcy5nbG9iYWxTZXR0aW5ncy52aWV3VHlwZTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubWFza1BhdHRlcm4gIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMubWFza1BhdHRlcm4gIT0gJycpIHtcbiAgICAgIHRoaXMubWFza1BhdHRlcm4gPSB0aGlzLm9wdGlvbnMubWFza1BhdHRlcm47XG4gICAgICB0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIgPSB0aGlzLm1hc2tQYXR0ZXJuO1xuICAgIH1cbiAgICB0aGlzLmdyb3VwLmFkZENvbnRyb2wodGhpcy5vcHRpb25zLm5hbWUsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xuICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sID0gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm9wdGlvbnMubmFtZV07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcbiAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnMudmFsdWUpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5sYWJlbEtleSAhPSAnJylcbiAgICAgIHRoaXMub3B0aW9ucy5sYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFxuICAgICAgICB0aGlzLm9wdGlvbnMubGFiZWxLZXlcbiAgICAgICk7XG5cbiAgICB0aGlzLmdldEN1c3RvbUVycm9yc01hc3NhZ2VzKCk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5pc1JlcXVpcmVkKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy50eXBlKSB7XG4gICAgICBjYXNlIElucHV0VHlwZS5FbWFpbDpcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChcbiAgICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKFxuICAgICAgICAgICAgICAvXigoW148PigpW1xcXVxcXFwuLDs6XFxzQFxcXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKSopfChcXFwiLitcXFwiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFxdKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLyxcbiAgICAgICAgICAgICAgeyBFbWFpbFZhbGlkYXRpb25LZXk6IHRoaXMuZW1haWxWYWxpZGF0aW9uS2V5IH1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0VHlwZS5VUkw6XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvXig/Omh0dHAocyk/OlxcL1xcLyk/W1xcdy4tXSsoPzpcXC5bXFx3XFwuLV0rKStbXFx3XFwtXFwuX346Lz8jW1xcXSFcXCQmJ1xcKFxcKVxcKlxcKyw7PS5dKyQvO1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxuICAgICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoXG4gICAgICAgICAgICAgIHBhdHRlcm4sXG4gICAgICAgICAgICAgIHsgVVJMVmFsaWRhdGlvbktleTogdGhpcy51UkxWYWxpZGF0aW9uS2V5IH1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0VHlwZS5FSUQ6XG4gICAgICAgIHRoaXMubWFza1BhdHRlcm4gPSAnMDAwLTAwMDAtMDAwMDAwMC0wJztcbiAgICAgICAgdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyID0gdGhpcy5tYXNrUGF0dGVybjtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRUeXBlLk51bWJlcjpcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChcbiAgICAgICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvXlswLTldKiQvLCB7XG4gICAgICAgICAgICAgICAgaW50ZWdlck51bWJlclZhbGlkYXRpb25LZXk6ICcnLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxuICAgICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKFxuICAgICAgICAgICAgICAgIC9eWytdPyhbLl1cXGQrfFxcZCtbLl0/XFxkKikkLyxcbiAgICAgICAgICAgICAgICB7IHBvc2l0aXZlTnVtYmVyVmFsaWRhdGlvbktleTogJycgfVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubnVtYmVyUmFuZ2UgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXG4gICAgICAgICAgICBWYWxpZGF0b3JzLm1pbih0aGlzLm9wdGlvbnMubnVtYmVyUmFuZ2UuZnJvbSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXG4gICAgICAgICAgICBWYWxpZGF0b3JzLm1heCh0aGlzLm9wdGlvbnMubnVtYmVyUmFuZ2UudG8pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRUeXBlLlBhc3N3b3JkOlxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChcbiAgICAgICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvXFxkLywge1xuICAgICAgICAgICAgICAgIHBhc3N3b3JkQ29tcGxleGl0eUhhc051bWJlcjogdGhpcy5wYXNzd29yZENvbXBsZXhpdHlIYXNOdW1iZXIsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL1tBLVpdLywge1xuICAgICAgICAgICAgICAgIHBhc3N3b3JkQ29tcGxleGl0eUhhc0NhcGl0YWxMZXR0ZXI6IHRoaXMucGFzc3dvcmRDb21wbGV4aXR5SGFzQ2FwaXRhbExldHRlcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvW2Etel0vLCB7XG4gICAgICAgICAgICAgICAgcGFzc3dvcmRDb21wbGV4aXR5SGFzU21hbGxMZXR0ZXI6IHRoaXMucGFzc3dvcmRDb21wbGV4aXR5SGFzU21hbGxMZXR0ZXIsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL1shQCMkJV4mKigpLC4/XCI6e318PD5dLywge1xuICAgICAgICAgICAgICAgIHBhc3N3b3JkQ29tcGxleGl0eUhhc1NwZWNpYWxMZXR0ZXI6IHRoaXMucGFzc3dvcmRDb21wbGV4aXR5SGFzU3BlY2lhbExldHRlcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDgpLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmxhbmd1YWdlVmFsaWRhdGlvbikge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYW5ndWFnZVZhbGlkYXRpb24gPT0gTGFuZ3VhZ2VWYWxpZGF0aW9uLkFyYWJpYykge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxuICAgICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL15bXkEtWmEtel0qJC8sIHtcbiAgICAgICAgICAgICAgQXJhYmljTGV0dGVyT25seTogdGhpcy5hcmFiaWNMZXR0ZXJPbmx5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMub3B0aW9ucy5sYW5ndWFnZVZhbGlkYXRpb24gPT0gTGFuZ3VhZ2VWYWxpZGF0aW9uLkVuZ2xpc2hcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxuICAgICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoXG4gICAgICAgICAgICAgIC9eW35gIUAjJCVeJiooKeKAmOKAmeKAnOKAnV8rPVtcXF1cXFxce318Oyc6XCIsLlxcLzw+P2EtekEtWjAtOS0gXSokLyxcbiAgICAgICAgICAgICAgeyBFbmdsaXNoTGV0dGVyT25seTogdGhpcy5lbmdsaXNoTGV0dGVyT25seSB9XG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBWYWxpZGF0aW9ucyA9IHRoaXMub3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFZhbGlkYXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBWYWxpZGF0aW9uID0gVmFsaWRhdGlvbnNbaW5kZXhdO1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5taW5MZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMub3B0aW9ucy5taW5MZW5ndGgpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXhMZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMub3B0aW9ucy5tYXhMZW5ndGgpKTtcblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMubWF4TGVuZ3RoV2FybmluZ0xpbWl0KVxuICAgICAgICB0aGlzLm9wdGlvbnMubWF4TGVuZ3RoV2FybmluZ0xpbWl0ID1cbiAgICAgICAgICB0aGlzLmdsb2JhbFNldHRpbmdzLm1heExlbmd0aFdhcm5pbmdMaW1pdDtcblxuICAgICAgdGhpcy5taW5DaGFyc0xpbWl0ID1cbiAgICAgICAgdGhpcy5vcHRpb25zLm1heExlbmd0aCAtIHRoaXMub3B0aW9ucy5tYXhMZW5ndGhXYXJuaW5nTGltaXQ7XG4gICAgfVxuICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXMpO1xuICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlc0FzeW5jKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmlzRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRDb250cm9sSG9zdC5uZ1N1Ym1pdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICB0aGlzLmdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9wdGlvbnMudmFsaWRhdGlvblJ1bGVzID0gdGhpcy52YWxpZGF0aW9uUnVsZXM7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5zZXRBdHRyaWJ1dGVGb3JDb250cm9sKHRoaXMub3B0aW9ucyk7XG4gIH1cblxuICByZXNldEVycm9yID0gKCkgPT4ge1xuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLnJlbW92ZUdsb2JhbEVycm9yKCk7XG4gIH07XG5cbiAgc2hvd0dsb2JhbEVycm9yKCkge1xuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2hvd0dsb2JhbEVycm9yKCk7XG4gIH1cblxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JMaXN0KSB7XG4gICAgaWYgKHRoaXMubWFya0FsbEFzVG91Y2hlZCAmJiB0aGlzLmdyb3VwLmludmFsaWQpIHtcbiAgICAgIHRoaXMuc2hvd0dsb2JhbEVycm9yKCk7XG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb250cm9sVXRpbGl0eS5nZXRFcnJvclZhbGlkYXRpb25NYXNzYWdlKEVycm9yTGlzdCwgdGhpcy5ncm91cCwgdGhpcy5vcHRpb25zKTtcbiAgfVxuXG4gIGdldElucHV0VHlwZSh0eXBlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sVXRpbGl0eS5nZXRJbnB1dFR5cGUodHlwZSk7XG4gIH1cblxuICB0cmltQ29udHJvbFZhbHVlKCkge1xuICAgIGxldCBvcmlnaW5hbFZhbHVlID0gdGhpcy5jb250cm9sVXRpbGl0eS50cmltQ29udHJvbFZhbHVlKFxuICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWVcbiAgICApO1xuICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnBhdGNoVmFsdWUob3JpZ2luYWxWYWx1ZSk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLnBhdGNoRnVuY3Rpb24gJiZcbiAgICAgIHRoaXMub3B0aW9ucy5wYXRjaFBhdGggJiZcbiAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbGlkXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdGNoQ29udHJvbFZhbHVlKFxuICAgICAgICBvcmlnaW5hbFZhbHVlLFxuICAgICAgICB0aGlzLm9wdGlvbnMucGF0Y2hGdW5jdGlvbixcbiAgICAgICAgdGhpcy5vcHRpb25zLnBhdGNoUGF0aFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudCkge1xuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQ29weUlucHV0TWVzc2FnZShpbnB1dEVsZW1lbnQpO1xuICB9XG5cbiAgZ2V0Q3VzdG9tRXJyb3JzTWFzc2FnZXMoKSB7XG4gICAgdGhpcy5lbWFpbFZhbGlkYXRpb25LZXkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VtYWlsVmFsaWRhdGlvbktleScpO1xuICAgIHRoaXMudVJMVmFsaWRhdGlvbktleSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgndXJsVmFsaWRhdGlvbkVycm9yJyk7XG4gICAgdGhpcy5wYXNzd29yZENvbXBsZXhpdHlIYXNDYXBpdGFsTGV0dGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdQYXNzd29yZENvbXBsZXhpdHlIYXNDYXBpdGFsTGV0dGVyJyk7XG4gICAgdGhpcy5wYXNzd29yZENvbXBsZXhpdHlIYXNOdW1iZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Bhc3N3b3JkQ29tcGxleGl0eUhhc051bWJlcicpO1xuICAgIHRoaXMucGFzc3dvcmRDb21wbGV4aXR5SGFzU21hbGxMZXR0ZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Bhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyJyk7XG4gICAgdGhpcy5wYXNzd29yZENvbXBsZXhpdHlIYXNTcGVjaWFsTGV0dGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdQYXNzd29yZENvbXBsZXhpdHlIYXNTcGVjaWFsTGV0dGVyJyk7XG4gICAgdGhpcy5tYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdNYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5Jyk7XG4gICAgdGhpcy5hcmFiaWNMZXR0ZXJPbmx5ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdWQUxfQXJhYmljSXNSZXF1aXJlZEFuZE9ubHk1MENoYXJhY3RlcnNFbmdsaXNoJyk7XG4gICAgdGhpcy5lbmdsaXNoTGV0dGVyT25seSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRW5nbGlzaExldHRlck9ubHknKTtcbiAgfVxuXG4gIG9uVGV4dENoYW5nZSgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT0gSW5wdXRUeXBlLk51bWJlcilcbiAgICAgIGlmICghdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHsgaW50ZWdlck51bWJlclZhbGlkYXRpb25LZXk6ICcnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWUgPT0gJycpIHtcbiAgICAgIHRoaXMud29yZENvdW50QXJyYXkgPSAwO1xuICAgICAgdGhpcy53b3JkQ291bnQgPSAwO1xuICAgICAgdGhpcy5zaG93Q2hhcnNMaW1pdE1zZyA9IGZhbHNlO1xuICAgICAgdGhpcy5oYXNDaGFyc0xpbWl0VmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud29yZENvdW50QXJyYXkgPSB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC52YWx1ZT8uc3BsaXQoJyAnKS5sZW5ndGg7XG4gICAgICBpZiAodGhpcy53b3JkQ291bnRBcnJheSA+IDApIHtcbiAgICAgICAgaWYgKHRoaXMud29yZENvdW50QXJyYXkgPiB0aGlzLm9wdGlvbnMubWF4V29yZENvdW50KSB7XG4gICAgICAgICAgdGhpcy53b3JkQ291bnQgPSB0aGlzLm9wdGlvbnMubWF4V29yZENvdW50O1xuICAgICAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnNldEVycm9ycyh7XG4gICAgICAgICAgICBNYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5OiB0aGlzLm9wdGlvbnMubWF4V29yZENvdW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5pbnZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMud29yZENvdW50ID0gdGhpcy53b3JkQ291bnRBcnJheTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL0NoZWNrIGZvciBtYXhfbGVuZ3RoIGxpbWl0IGNvdW50XG4gICAgICAvL01heExlbmd0aCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFscyBjaGFycyBsaW1pdCBzbyB0aGF0IG1pbkNoYXJzTGltaXQgd291bGQgYmUgPj0gMFxuICAgICAgaWYgKHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbHVlICYmIHRoaXMub3B0aW9ucy5tYXhMZW5ndGggJiYgdGhpcy5taW5DaGFyc0xpbWl0ID49IDApIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hhcnNDb3VudCA9IHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJzQ291bnQgPiB0aGlzLm1pbkNoYXJzTGltaXQpIHtcbiAgICAgICAgICB0aGlzLnNob3dDaGFyc0xpbWl0TXNnID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmhhc0NoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyc0NvdW50ID09IHRoaXMub3B0aW9ucy5tYXhMZW5ndGgpXG4gICAgICAgICAgICB0aGlzLmNoYXJzTGltaXRNc2dDbGFzcyA9ICdkYW5nZXInO1xuICAgICAgICAgIGVsc2UgdGhpcy5jaGFyc0xpbWl0TXNnQ2xhc3MgPSAnd2FybmluZyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zaG93Q2hhcnNMaW1pdE1zZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1heDogbnVtYmVyID0gdGhpcy5vcHRpb25zLm1heExlbmd0aDtcbiAgICAgICAgbGV0IGN1cnJlbnQ6IG51bWJlciA9IHRoaXMuY3VycmVudENoYXJzQ291bnQ7XG4gICAgICAgIGxldCBtc2c6IHN0cmluZyA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk1heExlbmd0aExpbWl0V2FybmluZ1wiKTtcblxuICAgICAgICAvLyBSZXBsYWNlIHBsYWNlaG9sZGVycyB3aXRoIGFjdHVhbCB2YWx1ZXNcbiAgICAgICAgdGhpcy5tYXhMaW1pdFdhcm5pbmdNc2cgPSBtc2cucmVwbGFjZShcIiR7bWF4fVwiLCBtYXgudG9TdHJpbmcoKSkucmVwbGFjZShcIiR7Y3VycmVudH1cIiwgY3VycmVudC50b1N0cmluZygpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dDaGFyc0xpbWl0TXNnID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLnRleHRCb3hGb3JtQ29udHJvbC52YWx1ZSk7XG4gIH1cblxuICBvbkZvY3VzKGlzRm9jdXM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzU2hvd1dvcmRDb3VudCA9IGlzRm9jdXM7XG5cbiAgICAvL29uRm9jdXNcbiAgICBpZiAoaXNGb2N1cykge1xuICAgICAgaWYgKHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvcilcbiAgICAgICAgLy9jaGVjayBpZiB0aGVyZSB3YXMgcHJldmlvdXMgdmFsaWRhdGlvbiBlcnJvclxuICAgICAgICB0aGlzLnNob3dDaGFyc0xpbWl0TXNnID0gdHJ1ZTtcbiAgICB9IC8vb25Gb2N1c091dFxuICAgIGVsc2UgdGhpcy5zaG93Q2hhcnNMaW1pdE1zZyA9IGZhbHNlO1xuICB9XG4gIC8vRXh0ZXJuYWwgTWV0aG9kXG4gIHJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbihcbiAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLFxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMsXG4gICAgICB0aGlzLm9wdGlvbnNcbiAgICApO1xuICB9O1xuICAvL0V4dGVybmFsIE1ldGhvZFxuICBhZGRSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5hZGRSZXF1aXJlZFZhbGlkYXRpb24oXG4gICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbCxcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLFxuICAgICAgdGhpcy5vcHRpb25zXG4gICAgKTtcbiAgfTtcblxuICAvL0V4dGVybmFsIE1ldGhvZFxuICByZW1vdmVDdXN0b21WYWxpZGF0aW9uID0gKGN1c3RvbVZhbGlkYXRpb24pID0+IHtcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnJlbW92ZUN1c3RvbVZhbGlkYXRpb24oXG4gICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbCxcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLFxuICAgICAgY3VzdG9tVmFsaWRhdGlvblxuICAgICk7XG4gIH07XG4gIC8vRXh0ZXJuYWwgTWV0aG9kXG4gIGFkZEN1c3RvbVZhbGlkYXRpb24gPSAoY3VzdG9tVmFsaWRhdGlvbikgPT4ge1xuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuYWRkQ3VzdG9tVmFsaWRhdGlvbihcbiAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLFxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMsXG4gICAgICBjdXN0b21WYWxpZGF0aW9uXG4gICAgKTtcbiAgfTtcbiAgLy9FeHRlcm5hbCBNZXRob2RcbiAgaXNWYWxpZCA9ICgpID0+IHtcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LmlzVmFsaWQodGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wpO1xuICB9O1xuXG4gIG9uVGV4dEJsdXIoKSB7XG4gICAgdGhpcy5vbkJsdXIuZW1pdCh0aGlzLnRleHRCb3hGb3JtQ29udHJvbC52YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGJic2YtY29udHJvbCBiYnNmLXRleHRib3hcIiBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJvcHRpb25zLnZpZXdUeXBlID09IDEgPyAnYmJzZi12ZXJ0aWNhbCcgOiAnYmJzZi1ob3Jpem9udGFsJ1wiPlxyXG4gICAgPCEtLWxhYmVsLS0+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCIhb3B0aW9ucy5oaWRlTGFiZWxcIiBjbGFzcz1cImJic2YtbGFiZWwge3sgb3B0aW9ucy5sYWJlbEV4dHJhQ2xhc3NlcyB9fVwiPlxyXG4gICAgICB7eyBvcHRpb25zLmxhYmVsVmFsdWUgfX1cclxuICAgICAgPCEtLUFzdGVyaXNrLS0+XHJcbiAgICAgIEBpZiAoKChvcHRpb25zLnNob3dBc3RlcmlzayAmJiBvcHRpb25zLmlzUmVxdWlyZWQpIHx8IG9wdGlvbnMuaXNSZXF1aXJlZCkgJiYgIW9wdGlvbnMuaXNSZWFkb25seSkge1xyXG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgPC9sYWJlbD5cclxuICAgIDwhLS1NYXNrUGF0dGVybi0tPlxyXG4gICAgQGlmIChtYXNrUGF0dGVybiAhPSBudWxsICYmIG1hc2tQYXR0ZXJuICE9ICcnICYmICFvcHRpb25zLmlzUmVhZG9ubHkpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLWlucHV0LWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIm9wdGlvbnMuZW5hYmxlQ29weVRvQ2xpcGJvYXJkID8gJ3AtNDBweCcgOiAnJ1wiPlxyXG4gICAgICA8IS0tSWNvbi0tPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwib3B0aW9ucy5pY29uICE9IG51bGxcIiBjbGFzcz1cInN2ZyBzdmctaWNvbi1ncmV5IGJic2YtaWNvblwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwib3B0aW9ucy5pY29uUG9zaXRpb24gPT0gMSA/ICdiYnNmLWxlZnQtaWNvbicgOiAnYmJzZi1yaWdodC1pY29uJ1wiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwib3B0aW9ucy5pY29uXCI+PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLWlucHV0LS0+XHJcbiAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCB7eyBvcHRpb25zLmV4dHJhQ2xhc3NlcyB9fVwiIFttYXNrXT1cIm1hc2tQYXR0ZXJuXCIgcGxhY2VIb2xkZXJDaGFyYWN0ZXI9XCIgXCJcclxuICAgICAgICBbc2hvd01hc2tUeXBlZF09XCJ0cnVlXCIgW3ZhbGlkYXRpb25dPVwidHJ1ZVwiIFtkaXJdPVwidGV4dERpclwiIGFyaWEtZGVzY3JpYmVkYnk9XCJlbWFpbC1lcnJvclwiIGFyaWEtaW52YWxpZD1cInRydWVcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7IG9wdGlvbnMubmFtZSB9fVwiIHR5cGU9XCJ7eyBnZXRJbnB1dFR5cGUob3B0aW9ucy50eXBlKSB9fVwiIFsobmdNb2RlbCldPVwib3B0aW9ucy52YWx1ZVwiXHJcbiAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwidGV4dEJveEZvcm1Db250cm9sLmludmFsaWQgJiYgdGV4dEJveEZvcm1Db250cm9sLnRvdWNoZWRcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgb3B0aW9ucy5wbGFjZWhvbGRlciB9fVwiIGlkPVwie3sgb3B0aW9ucy5uYW1lIH19XCIgYXV0b2NvbXBsZXRlPVwie3sgb3B0aW9ucy5hdXRvQ29tcGxldGUgfX1cIlxyXG4gICAgICAgIChjaGFuZ2UpPVwidHJpbUNvbnRyb2xWYWx1ZSgpXCIgKGtleXVwKT1cIm9uVGV4dENoYW5nZSgpXCIgW3JlYWRvbmx5XT1cIm9wdGlvbnMuaXNSZWFkb25seVwiXHJcbiAgICAgICAgKGtleWRvd24pPVwid29yZENvdW50QXJyYXkgPiBvcHRpb25zLm1heFdvcmRDb3VudCAmJiAkZXZlbnQua2V5Q29kZSAhPSA4ID8gJGV2ZW50LnByZXZlbnREZWZhdWx0KCkgOiBudWxsXCJcclxuICAgICAgICAjdXNlcklucHV0IChibHVyKT1cIm9uVGV4dEJsdXIoKVwiIC8+XHJcbiAgICAgIDwhLS1Db3B5VG9DbGlwYm9hcmQtLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjb3B5LWNsaXBib2FyZFwiIG5nYlRvb2x0aXA9XCJDb3BpZWQhXCIgKm5nSWY9XCJvcHRpb25zLmVuYWJsZUNvcHlUb0NsaXBib2FyZFwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNvcHlJbnB1dE1lc3NhZ2UodXNlcklucHV0KVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNvcHlcIj48L2k+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gICAgPCEtLU5vTWFza1BhdHRlcm4tLT5cclxuICAgIDxkaXYgKm5nSWY9XCJtYXNrUGF0dGVybiA9PSBudWxsIHx8IChtYXNrUGF0dGVybiA9PSAnJyAmJiAhb3B0aW9ucy5pc1JlYWRvbmx5KVwiIGNsYXNzPVwiYmJzZi1pbnB1dC1jb250YWluZXJcIlxyXG4gICAgICBbbmdDbGFzc109XCJvcHRpb25zLmVuYWJsZUNvcHlUb0NsaXBib2FyZCA/ICdwLTQwcHgnIDogJydcIj5cclxuICAgICAgPCEtLUljb24tLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInN2ZyBzdmctaWNvbi1ncmV5IGJic2YtaWNvblwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwib3B0aW9ucy5pY29uUG9zaXRpb24gPT0gMSA/ICdiYnNmLWxlZnQtaWNvbicgOiAnYmJzZi1yaWdodC1pY29uJ1wiICpuZ0lmPVwib3B0aW9ucy5pY29uICE9IG51bGxcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIm9wdGlvbnMuaWNvblwiPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wge3sgb3B0aW9ucy5leHRyYUNsYXNzZXMgfX0gXCIgW2Rpcl09XCJ0ZXh0RGlyXCIgKGZvY3VzKT1cIm9uRm9jdXModHJ1ZSlcIlxyXG4gICAgICAgIChmb2N1c291dCk9XCJvbkZvY3VzKGZhbHNlKVwiIG1heGxlbmd0aD1cInt7IG9wdGlvbnMubWF4TGVuZ3RoIH19XCIgbWlubGVuZ3RoPVwie3sgb3B0aW9ucy5taW5MZW5ndGggfX1cIlxyXG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJlbWFpbC1lcnJvclwiIGFyaWEtaW52YWxpZD1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJ7eyBvcHRpb25zLm5hbWUgfX1cIlxyXG4gICAgICAgIHR5cGU9XCJ7eyBnZXRJbnB1dFR5cGUob3B0aW9ucy50eXBlKSB9fVwiXHJcbiAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwidGV4dEJveEZvcm1Db250cm9sLmludmFsaWQgJiYgdGV4dEJveEZvcm1Db250cm9sLnRvdWNoZWRcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgb3B0aW9ucy5wbGFjZWhvbGRlciB9fVwiIGlkPVwie3sgb3B0aW9ucy5uYW1lIH19XCIgYXV0b2NvbXBsZXRlPVwie3sgb3B0aW9ucy5hdXRvQ29tcGxldGUgfX1cIlxyXG4gICAgICAgIChjaGFuZ2UpPVwidHJpbUNvbnRyb2xWYWx1ZSgpXCIgKGtleXVwKT1cIm9uVGV4dENoYW5nZSgpXCIgWyhuZ01vZGVsKV09XCJvcHRpb25zLnZhbHVlXCJcclxuICAgICAgICAoa2V5ZG93bik9XCJ3b3JkQ291bnRBcnJheSA+IG9wdGlvbnMubWF4V29yZENvdW50ICYmICRldmVudC5rZXlDb2RlICE9IDggPyAkZXZlbnQucHJldmVudERlZmF1bHQoKSA6IG51bGxcIlxyXG4gICAgICAgIFtyZWFkb25seV09XCJvcHRpb25zLmlzUmVhZG9ubHlcIiAjdXNlcklucHV0IChibHVyKT1cIm9uVGV4dEJsdXIoKVwiIC8+XHJcbiAgICAgIDwhLS1Db3B5VG9DbGlwYm9hcmQtLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjb3B5LWNsaXBib2FyZFwiIG5nYlRvb2x0aXA9XCJDb3BpZWQhXCIgdHJpZ2dlcnM9XCJjbGljazpibHVyXCIgKm5nSWY9XCJvcHRpb25zLmVuYWJsZUNvcHlUb0NsaXBib2FyZFwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNvcHlJbnB1dE1lc3NhZ2UodXNlcklucHV0KVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNvcHlcIj48L2k+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSByZWFkb25seSAtLT5cclxuICAgIEBpZiAob3B0aW9ucy5pc1JlYWRvbmx5KSB7XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8YSAqbmdJZj1cIm9wdGlvbnMudHlwZSA9PSBpbnB1dFR5cGUuRW1haWxcIiBocmVmPVwibWFpbHRvOiB7eyBvcHRpb25zLnZhbHVlIH19XCI+e3sgb3B0aW9ucy52YWx1ZSB9fTwvYT5cclxuICAgICAgPGEgKm5nSWY9XCJvcHRpb25zLnR5cGUgPT0gaW5wdXRUeXBlLlVSTFwiIGhyZWY9XCJ7eyBvcHRpb25zLnZhbHVlIH19XCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3sgb3B0aW9ucy52YWx1ZSB9fTwvYT5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJvcHRpb25zLnR5cGUgIT0gaW5wdXRUeXBlLlVSTCAmJiBvcHRpb25zLnR5cGUgIT0gaW5wdXRUeXBlLkVtYWlsXCJcclxuICAgICAgICBjbGFzcz1cInJlYWRvbmx5LXZpZXdcIj57eyBvcHRpb25zLnZhbHVlIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInN1YnRleHQtY29udGFpbmVyXCI+XHJcbiAgICA8IS0td29yZENvdW50LS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi13b3JkLWNvdW50XCIgKm5nSWY9XCJvcHRpb25zLm1heFdvcmRDb3VudCA+IDAgJiYgaXNTaG93V29yZENvdW50XCI+XHJcbiAgICAgIHt7IHdvcmRDb3VudCB9fS97eyBvcHRpb25zLm1heFdvcmRDb3VudCB9fSBXb3JkczwvZGl2PlxyXG4gICAgPCEtLSBDaGFyc0xpbWl0TXNnLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi1jaGFyYWN0ZXItY291bnRcIiAqbmdJZj1cInNob3dDaGFyc0xpbWl0TXNnXCJcclxuICAgICAgW25nQ2xhc3NdPVwieyAnYmFkZ2UtbGlnaHQtd2FybmluZyc6IGNoYXJzTGltaXRNc2dDbGFzcyA9PT0gJ3dhcm5pbmcnLCAnYmFkZ2UtbGlnaHQtZGFuZ2VyJzogY2hhcnNMaW1pdE1zZ0NsYXNzID09PSAnZGFuZ2VyJyB9XCI+XHJcbiAgICAgIHt7IG1heExpbWl0V2FybmluZ01zZyB9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIExhYmVsRGVzY3JpcHRpb24tLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLWNvbnRyb2wtZGVzY1wiICpuZ0lmPVwib3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uICE9IG51bGxcIj57eyBvcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gfX08L2Rpdj5cclxuICAgIDwhLS0gcmVxdWlyZWRUZXh0LS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi12YWxpZGF0aW9uXCIgW2Rpcl09XCJ0ZXh0RGlyXCIgKm5nSWY9XCJ0ZXh0Qm94Rm9ybUNvbnRyb2wuaW52YWxpZCAmJiB0ZXh0Qm94Rm9ybUNvbnRyb2wudG91Y2hlZFwiPlxyXG4gICAgICB7eyBnZXRFcnJvclZhbGlkYXRpb24odGV4dEJveEZvcm1Db250cm9sLmVycm9ycyB8IGtleXZhbHVlKSB9fVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIEBpZiAoKGdyb3VwLnZhbGlkICYmIGdyb3VwLmRpcnR5ICYmIGdyb3VwLnRvdWNoZWQpIHx8IChncm91cC51bnRvdWNoZWQgJiYgZ3JvdXAuaW52YWxpZCAmJiBncm91cC5kaXJ0eSkpIHtcclxuICA8ZGl2Pnt7IHJlc2V0RXJyb3IoKSB9fTwvZGl2PlxyXG4gIH1cclxuPC9kaXY+Il19
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvVGV4dEJveC9UZXh0Qm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9UZXh0Qm94L1RleHRCb3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQW9FLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSXpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7Ozs7QUFNM0UsTUFBTSxPQUFPLGdCQUFnQjthQUNwQiwyQkFBc0IsR0FBRyxJQUFJLEFBQVAsQ0FBUTtJQUNyQyxZQUFvQixjQUE4QixFQUMxQixnQkFBa0MsRUFDL0MsZUFBbUMsRUFDbkMsY0FBOEIsRUFDN0Isd0JBQWtELEVBQ2xELGNBQThCO1FBTHRCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQy9DLG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQUNuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDN0IsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFLaEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDOUIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFL0IsY0FB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IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3B0aW9uYWwsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUZXh0Qm94T3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvVGV4dEJveE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvSW5wdXRUeXBlJztcclxuaW1wb3J0IHsgQ29udHJvbFV0aWxpdHkgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvQ29udHJvbFV0aWxpdHknO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvR2xvYmFsU2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IExhbmd1YWdlVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL1NoYXJlZC9FbnVtcy9MYW5ndWFnZVZhbGlkYXRpb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdCQlNGLVRleHRCb3gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9UZXh0Qm94LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dGJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgc3RhdGljIGNvbnRyb2xDb250YWluZXJTdGF0aWMgPSBudWxsO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udHJvbFV0aWxpdHk6IENvbnRyb2xVdGlsaXR5XHJcbiAgICAsIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lclxyXG4gICAgLCBwdWJsaWMgdGV4dENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmVcclxuICAgICwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZVxyXG4gICAgLCBwcml2YXRlIGNvbnRyb2xWYWxpZGF0aW9uU2VydmljZTogQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZ2xvYmFsU2V0dGluZ3M6IEdsb2JhbFNldHRpbmdzKSB7XHJcbiAgICBUZXh0Ym94Q29tcG9uZW50LmNvbnRyb2xDb250YWluZXJTdGF0aWMgPSB0aGlzLmNvbnRyb2xDb250YWluZXI7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogVGV4dEJveE9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyBpbnB1dFR5cGUgPSBJbnB1dFR5cGU7XHJcbiAgdGV4dEJveEZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgbWFza1BhdHRlcm46IHN0cmluZyA9ICcnO1xyXG4gIHdvcmRDb3VudDogbnVtYmVyID0gMDtcclxuICB3b3JkQ291bnRBcnJheTogbnVtYmVyID0gMDtcclxuICBlbWFpbFZhbGlkYXRpb25LZXk6IHN0cmluZztcclxuICB1UkxWYWxpZGF0aW9uS2V5OiBzdHJpbmc7XHJcbiAgcGFzc3dvcmRDb21wbGV4aXR5SGFzTnVtYmVyOiBzdHJpbmc7XHJcbiAgYXJhYmljTGV0dGVyT25seTogc3RyaW5nO1xyXG4gIGVuZ2xpc2hMZXR0ZXJPbmx5OiBzdHJpbmc7XHJcbiAgcGFzc3dvcmRDb21wbGV4aXR5SGFzQ2FwaXRhbExldHRlcjogc3RyaW5nO1xyXG4gIHBhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyOiBzdHJpbmc7XHJcbiAgcGFzc3dvcmRDb21wbGV4aXR5SGFzU3BlY2lhbExldHRlcjogc3RyaW5nO1xyXG4gIG1heFdvcmRDb3VudFZhbGlkYXRpb25LZXk6IHN0cmluZztcclxuICBpc1Nob3dXb3JkQ291bnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtYXJrQWxsQXNUb3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgdmFsaWRhdGlvblJ1bGVzQXN5bmMgPSBbXTtcclxuXHJcbiAgLy9Gb3IgU2hvdyB3YXJuaW5nIG1lc3NhZ2Ugb2YgbWF4IGxlbmd0aCBsaW1pdFxyXG4gIGN1cnJlbnRDaGFyc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIHNob3dDaGFyc0xpbWl0TXNnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoYXJzTGltaXRNc2dDbGFzczogc3RyaW5nO1xyXG4gIG1pbkNoYXJzTGltaXQ6IG51bWJlciA9IC0xOyAvL1RvIGRpc2FibGUgY2hhcnMgbGltaXQgZmVhdHVyZSBieSBkZWZhdWx0XHJcbiAgbWF4TGltaXRXYXJuaW5nTXNnOiBzdHJpbmcgPSAnJztcclxuICB0ZXh0RGlyOiBhbnk7XHJcblxyXG4gIC8vIFBhc3N3b3JkIGRpc2NsYWltZXIgcHJvcGVydGllc1xyXG4gIHBhc3N3b3JkUmVxdWlyZW1lbnRzVGl0bGU6IHN0cmluZztcclxuICBtaW5MZW5ndGhSZXF1aXJlbWVudDogc3RyaW5nO1xyXG4gIHBhc3N3b3JkTWluTGVuZ3RoOiBudW1iZXIgPSA4OyAvLyBEZWZhdWx0IHZhbHVlLCB3aWxsIGJlIHVwZGF0ZWQgYmFzZWQgb24gYWN0dWFsIHZhbGlkYXRvclxyXG4gIGhhc051bWJlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhhc0NhcGl0YWxMZXR0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXNTbWFsbExldHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhhc1NwZWNpYWxMZXR0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXNNaW5MZW5ndGg6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmlzUmVhZG9ubHkgJiYgIXRoaXMub3B0aW9ucy52YWx1ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMudmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05BJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlRGlyZWN0aW9uKVxyXG4gICAgICB0aGlzLnRleHREaXIgPSB0aGlzLm9wdGlvbnMuZm9yY2VEaXJlY3Rpb24gPT0gMiA/ICdydGwnIDogJ2x0cic7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMudGV4dERpciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpID09ICdhcicgPyAncnRsJyA6ICdsdHInO1xyXG5cclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLmlzQ3JlYXRlZEJlZm9yID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICB0aGlzLm9wdGlvbnMubWF4TGVuZ3RoID0gdGhpcy5nbG9iYWxTZXR0aW5ncy5tYXhMZW5ndGhUZXh0Qm94O1xyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLnZpZXdUeXBlKVxyXG4gICAgICB0aGlzLm9wdGlvbnMudmlld1R5cGUgPSB0aGlzLmdsb2JhbFNldHRpbmdzLnZpZXdUeXBlO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubWFza1BhdHRlcm4gIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMubWFza1BhdHRlcm4gIT0gJycpIHtcclxuICAgICAgdGhpcy5tYXNrUGF0dGVybiA9IHRoaXMub3B0aW9ucy5tYXNrUGF0dGVybjtcclxuICAgICAgdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyID0gdGhpcy5tYXNrUGF0dGVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMubmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbCA9IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLm5hbWVdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnMudmFsdWUpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWxLZXkgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMubGFiZWxLZXkgIT0gJycpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5sYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbEtleVxyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuZ2V0Q3VzdG9tRXJyb3JzTWFzc2FnZXMoKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuaXNSZXF1aXJlZCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMudHlwZSkge1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5FbWFpbDpcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvLFxyXG4gICAgICAgICAgICAgIHsgRW1haWxWYWxpZGF0aW9uS2V5OiB0aGlzLmVtYWlsVmFsaWRhdGlvbktleSB9XHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlLlVSTDpcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gL14oPzpodHRwKHMpPzpcXC9cXC8pP1tcXHcuLV0rKD86XFwuW1xcd1xcLi1dKykrW1xcd1xcLVxcLl9+Oi8/I1tcXF0hXFwkJidcXChcXClcXCpcXCssOz0uXSskLztcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgIHBhdHRlcm4sXHJcbiAgICAgICAgICAgICAgeyBVUkxWYWxpZGF0aW9uS2V5OiB0aGlzLnVSTFZhbGlkYXRpb25LZXkgfVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5FSUQ6XHJcbiAgICAgICAgdGhpcy5tYXNrUGF0dGVybiA9ICcwMDAtMDAwMC0wMDAwMDAwLTAnO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlciA9IHRoaXMubWFza1BhdHRlcm47XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5OdW1iZXI6XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvXlswLTldKiQvLCB7XHJcbiAgICAgICAgICAgICAgICBpbnRlZ2VyTnVtYmVyVmFsaWRhdGlvbktleTogJycsXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoXHJcbiAgICAgICAgICAgICAgICAvXlsrXT8oWy5dXFxkK3xcXGQrWy5dP1xcZCopJC8sXHJcbiAgICAgICAgICAgICAgICB7IHBvc2l0aXZlTnVtYmVyVmFsaWRhdGlvbktleTogJycgfVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm51bWJlclJhbmdlICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWluKHRoaXMub3B0aW9ucy5udW1iZXJSYW5nZS5mcm9tKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KHRoaXMub3B0aW9ucy5udW1iZXJSYW5nZS50bylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5QYXNzd29yZDpcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAvLyBVc2Ugb3B0aW9ucy5taW5MZW5ndGggaWYgc2V0LCBvdGhlcndpc2UgZGVmYXVsdCB0byA4XHJcbiAgICAgICAgICB0aGlzLnBhc3N3b3JkTWluTGVuZ3RoID0gdGhpcy5vcHRpb25zLm1pbkxlbmd0aCA+IDAgPyB0aGlzLm9wdGlvbnMubWluTGVuZ3RoIDogODtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKC9cXGQvLCB7XHJcbiAgICAgICAgICAgICAgICBwYXNzd29yZENvbXBsZXhpdHlIYXNOdW1iZXI6IHRoaXMucGFzc3dvcmRDb21wbGV4aXR5SGFzTnVtYmVyLFxyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvW0EtWl0vLCB7XHJcbiAgICAgICAgICAgICAgICBwYXNzd29yZENvbXBsZXhpdHlIYXNDYXBpdGFsTGV0dGVyOiB0aGlzLnBhc3N3b3JkQ29tcGxleGl0eUhhc0NhcGl0YWxMZXR0ZXIsXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKC9bYS16XS8sIHtcclxuICAgICAgICAgICAgICAgIHBhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyOiB0aGlzLnBhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyLFxyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvWyFAIyQlXiYqKCksLj9cIjp7fXw8Pl0vLCB7XHJcbiAgICAgICAgICAgICAgICBwYXNzd29yZENvbXBsZXhpdHlIYXNTcGVjaWFsTGV0dGVyOiB0aGlzLnBhc3N3b3JkQ29tcGxleGl0eUhhc1NwZWNpYWxMZXR0ZXIsXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5wYXNzd29yZE1pbkxlbmd0aCksXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uID09IExhbmd1YWdlVmFsaWRhdGlvbi5BcmFiaWMpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKC9eW15BLVphLXpdKiQvLCB7XHJcbiAgICAgICAgICAgICAgQXJhYmljTGV0dGVyT25seTogdGhpcy5hcmFiaWNMZXR0ZXJPbmx5LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICB0aGlzLm9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uID09IExhbmd1YWdlVmFsaWRhdGlvbi5FbmdsaXNoXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoXHJcbiAgICAgICAgICAgICAgL15bfmAhQCMkJV4mKigp4oCY4oCZ4oCc4oCdXys9W1xcXVxcXFx7fXw7JzpcIiwuXFwvPD4/YS16QS1aMC05LSBdKiQvLFxyXG4gICAgICAgICAgICAgIHsgRW5nbGlzaExldHRlck9ubHk6IHRoaXMuZW5nbGlzaExldHRlck9ubHkgfVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IFZhbGlkYXRpb25zID0gdGhpcy5vcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBWYWxpZGF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBWYWxpZGF0aW9uID0gVmFsaWRhdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm1pbkxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCh0aGlzLm9wdGlvbnMubWluTGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm1heExlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLm9wdGlvbnMubWF4TGVuZ3RoKSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5tYXhMZW5ndGhXYXJuaW5nTGltaXQpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLm1heExlbmd0aFdhcm5pbmdMaW1pdCA9XHJcbiAgICAgICAgICB0aGlzLmdsb2JhbFNldHRpbmdzLm1heExlbmd0aFdhcm5pbmdMaW1pdDtcclxuXHJcbiAgICAgIHRoaXMubWluQ2hhcnNMaW1pdCA9XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLm1heExlbmd0aCAtIHRoaXMub3B0aW9ucy5tYXhMZW5ndGhXYXJuaW5nTGltaXQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlc0FzeW5jKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuaXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50ZXh0Q29udHJvbEhvc3QubmdTdWJtaXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICB0aGlzLmdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub3B0aW9ucy52YWxpZGF0aW9uUnVsZXMgPSB0aGlzLnZhbGlkYXRpb25SdWxlcztcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHBhc3N3b3JkIGNvbXBsZXhpdHkgY2hlY2sgaWYgaXQncyBhIHBhc3N3b3JkIGZpZWxkIHdpdGggZXhpc3RpbmcgdmFsdWVcclxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PSBJbnB1dFR5cGUuUGFzc3dvcmQgJiYgIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uICYmIHRoaXMub3B0aW9ucy52YWx1ZSkge1xyXG4gICAgICB0aGlzLmNoZWNrUGFzc3dvcmRDb21wbGV4aXR5KHRoaXMub3B0aW9ucy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNldEF0dHJpYnV0ZUZvckNvbnRyb2wodGhpcy5vcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHJlc2V0RXJyb3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5yZW1vdmVHbG9iYWxFcnJvcigpO1xyXG4gIH07XHJcblxyXG4gIHNob3dHbG9iYWxFcnJvcigpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2hvd0dsb2JhbEVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JMaXN0KSB7XHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpO1xyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5jb250cm9sVXRpbGl0eS5nZXRFcnJvclZhbGlkYXRpb25NYXNzYWdlKEVycm9yTGlzdCwgdGhpcy5ncm91cCwgdGhpcy5vcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldElucHV0VHlwZSh0eXBlOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRyb2xVdGlsaXR5LmdldElucHV0VHlwZSh0eXBlKTtcclxuICB9XHJcblxyXG4gIHRyaW1Db250cm9sVmFsdWUoKSB7XHJcbiAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuY29udHJvbFV0aWxpdHkudHJpbUNvbnRyb2xWYWx1ZShcclxuICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWVcclxuICAgICk7XHJcbiAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5wYXRjaFZhbHVlKG9yaWdpbmFsVmFsdWUpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm9wdGlvbnMucGF0Y2hGdW5jdGlvbiAmJlxyXG4gICAgICB0aGlzLm9wdGlvbnMucGF0Y2hQYXRoICYmXHJcbiAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbGlkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXRjaENvbnRyb2xWYWx1ZShcclxuICAgICAgICBvcmlnaW5hbFZhbHVlLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wYXRjaEZ1bmN0aW9uLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wYXRjaFBhdGhcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvcHlJbnB1dE1lc3NhZ2UoaW5wdXRFbGVtZW50KSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkNvcHlJbnB1dE1lc3NhZ2UoaW5wdXRFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGdldEN1c3RvbUVycm9yc01hc3NhZ2VzKCkge1xyXG4gICAgdGhpcy5lbWFpbFZhbGlkYXRpb25LZXkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VtYWlsVmFsaWRhdGlvbktleScpO1xyXG4gICAgdGhpcy51UkxWYWxpZGF0aW9uS2V5ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCd1cmxWYWxpZGF0aW9uRXJyb3InKTtcclxuICAgIHRoaXMucGFzc3dvcmRDb21wbGV4aXR5SGFzQ2FwaXRhbExldHRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUGFzc3dvcmRDb21wbGV4aXR5SGFzQ2FwaXRhbExldHRlcicpO1xyXG4gICAgdGhpcy5wYXNzd29yZENvbXBsZXhpdHlIYXNOdW1iZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Bhc3N3b3JkQ29tcGxleGl0eUhhc051bWJlcicpO1xyXG4gICAgdGhpcy5wYXNzd29yZENvbXBsZXhpdHlIYXNTbWFsbExldHRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUGFzc3dvcmRDb21wbGV4aXR5SGFzU21hbGxMZXR0ZXInKTtcclxuICAgIHRoaXMucGFzc3dvcmRDb21wbGV4aXR5SGFzU3BlY2lhbExldHRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUGFzc3dvcmRDb21wbGV4aXR5SGFzU3BlY2lhbExldHRlcicpO1xyXG4gICAgdGhpcy5tYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdNYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5Jyk7XHJcbiAgICB0aGlzLmFyYWJpY0xldHRlck9ubHkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1ZBTF9BcmFiaWNJc1JlcXVpcmVkQW5kT25seTUwQ2hhcmFjdGVyc0VuZ2xpc2gnKTtcclxuICAgIHRoaXMuZW5nbGlzaExldHRlck9ubHkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VuZ2xpc2hMZXR0ZXJPbmx5Jyk7XHJcblxyXG4gICAgLy8gUGFzc3dvcmQgZGlzY2xhaW1lciBtZXNzYWdlc1xyXG4gICAgdGhpcy5wYXNzd29yZFJlcXVpcmVtZW50c1RpdGxlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdQYXNzd29yZFJlcXVpcmVtZW50c1RpdGxlJyk7XHJcbiAgICB0aGlzLm1pbkxlbmd0aFJlcXVpcmVtZW50ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdNaW5MZW5ndGhSZXF1aXJlbWVudCcpLnJlcGxhY2UoJyR7bWluTGVuZ3RofScsIHRoaXMucGFzc3dvcmRNaW5MZW5ndGgudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBvblRleHRDaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT0gSW5wdXRUeXBlLk51bWJlcilcclxuICAgICAgaWYgKCF0aGlzLnRleHRCb3hGb3JtQ29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnNldEVycm9ycyh7IGludGVnZXJOdW1iZXJWYWxpZGF0aW9uS2V5OiAnJyB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBwYXNzd29yZCBjb21wbGV4aXR5IHJlcXVpcmVtZW50cyBpbiByZWFsLXRpbWVcclxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PSBJbnB1dFR5cGUuUGFzc3dvcmQgJiYgIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tQYXNzd29yZENvbXBsZXhpdHkodGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWUgfHwgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRleHRCb3hGb3JtQ29udHJvbC52YWx1ZSA9PSAnJykge1xyXG4gICAgICB0aGlzLndvcmRDb3VudEFycmF5ID0gMDtcclxuICAgICAgdGhpcy53b3JkQ291bnQgPSAwO1xyXG4gICAgICB0aGlzLnNob3dDaGFyc0xpbWl0TXNnID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG5cclxuICAgICAgLy8gUmVzZXQgcGFzc3dvcmQgY29tcGxleGl0eSBmbGFncyB3aGVuIGZpZWxkIGlzIGVtcHR5XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PSBJbnB1dFR5cGUuUGFzc3dvcmQgJiYgIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5oYXNOdW1iZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhhc0NhcGl0YWxMZXR0ZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhhc1NtYWxsTGV0dGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5oYXNTcGVjaWFsTGV0dGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5oYXNNaW5MZW5ndGggPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53b3JkQ291bnRBcnJheSA9IHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbHVlPy5zcGxpdCgnICcpLmxlbmd0aDtcclxuICAgICAgaWYgKHRoaXMud29yZENvdW50QXJyYXkgPiAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud29yZENvdW50QXJyYXkgPiB0aGlzLm9wdGlvbnMubWF4V29yZENvdW50KSB7XHJcbiAgICAgICAgICB0aGlzLndvcmRDb3VudCA9IHRoaXMub3B0aW9ucy5tYXhXb3JkQ291bnQ7XHJcbiAgICAgICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5zZXRFcnJvcnMoe1xyXG4gICAgICAgICAgICBNYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5OiB0aGlzLm9wdGlvbnMubWF4V29yZENvdW50LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5pbnZhbGlkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLndvcmRDb3VudCA9IHRoaXMud29yZENvdW50QXJyYXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvL0NoZWNrIGZvciBtYXhfbGVuZ3RoIGxpbWl0IGNvdW50XHJcbiAgICAgIC8vTWF4TGVuZ3RoIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWxzIGNoYXJzIGxpbWl0IHNvIHRoYXQgbWluQ2hhcnNMaW1pdCB3b3VsZCBiZSA+PSAwXHJcbiAgICAgIGlmICh0aGlzLnRleHRCb3hGb3JtQ29udHJvbC52YWx1ZSAmJiB0aGlzLm9wdGlvbnMubWF4TGVuZ3RoICYmIHRoaXMubWluQ2hhcnNMaW1pdCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hhcnNDb3VudCA9IHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2hhcnNDb3VudCA+IHRoaXMubWluQ2hhcnNMaW1pdCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93Q2hhcnNMaW1pdE1zZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmhhc0NoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJzQ291bnQgPT0gdGhpcy5vcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5jaGFyc0xpbWl0TXNnQ2xhc3MgPSAnZGFuZ2VyJztcclxuICAgICAgICAgIGVsc2UgdGhpcy5jaGFyc0xpbWl0TXNnQ2xhc3MgPSAnd2FybmluZyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0NoYXJzTGltaXRNc2cgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1heDogbnVtYmVyID0gdGhpcy5vcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICBsZXQgY3VycmVudDogbnVtYmVyID0gdGhpcy5jdXJyZW50Q2hhcnNDb3VudDtcclxuICAgICAgICBsZXQgbXNnOiBzdHJpbmcgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJNYXhMZW5ndGhMaW1pdFdhcm5pbmdcIik7XHJcblxyXG4gICAgICAgIC8vIFJlcGxhY2UgcGxhY2Vob2xkZXJzIHdpdGggYWN0dWFsIHZhbHVlc1xyXG4gICAgICAgIHRoaXMubWF4TGltaXRXYXJuaW5nTXNnID0gbXNnLnJlcGxhY2UoXCIke21heH1cIiwgbWF4LnRvU3RyaW5nKCkpLnJlcGxhY2UoXCIke2N1cnJlbnR9XCIsIGN1cnJlbnQudG9TdHJpbmcoKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93Q2hhcnNMaW1pdE1zZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoaXNGb2N1czogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc1Nob3dXb3JkQ291bnQgPSBpc0ZvY3VzO1xyXG5cclxuICAgIC8vb25Gb2N1c1xyXG4gICAgaWYgKGlzRm9jdXMpIHtcclxuICAgICAgaWYgKHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvcilcclxuICAgICAgICAvL2NoZWNrIGlmIHRoZXJlIHdhcyBwcmV2aW91cyB2YWxpZGF0aW9uIGVycm9yXHJcbiAgICAgICAgdGhpcy5zaG93Q2hhcnNMaW1pdE1zZyA9IHRydWU7XHJcbiAgICB9IC8vb25Gb2N1c091dFxyXG4gICAgZWxzZSB0aGlzLnNob3dDaGFyc0xpbWl0TXNnID0gZmFsc2U7XHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgcmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5yZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24oXHJcbiAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLFxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcyxcclxuICAgICAgdGhpcy5vcHRpb25zXHJcbiAgICApO1xyXG4gIH07XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBhZGRSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LmFkZFJlcXVpcmVkVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wsXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLFxyXG4gICAgICB0aGlzLm9wdGlvbnNcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICByZW1vdmVDdXN0b21WYWxpZGF0aW9uID0gKGN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkucmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wsXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLFxyXG4gICAgICBjdXN0b21WYWxpZGF0aW9uXHJcbiAgICApO1xyXG4gIH07XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBhZGRDdXN0b21WYWxpZGF0aW9uID0gKGN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuYWRkQ3VzdG9tVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wsXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLFxyXG4gICAgICBjdXN0b21WYWxpZGF0aW9uXHJcbiAgICApO1xyXG4gIH07XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBpc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5pc1ZhbGlkKHRoaXMudGV4dEJveEZvcm1Db250cm9sKTtcclxuICB9O1xyXG5cclxuICBvblRleHRCbHVyKCkge1xyXG4gICAgLy8gQ2hlY2sgcGFzc3dvcmQgY29tcGxleGl0eSBvbiBibHVyIGFzIHdlbGxcclxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PSBJbnB1dFR5cGUuUGFzc3dvcmQgJiYgIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tQYXNzd29yZENvbXBsZXhpdHkodGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWUgfHwgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25CbHVyLmVtaXQodGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tQYXNzd29yZENvbXBsZXhpdHkocGFzc3dvcmQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5oYXNOdW1iZXIgPSAvXFxkLy50ZXN0KHBhc3N3b3JkKTtcclxuICAgIHRoaXMuaGFzQ2FwaXRhbExldHRlciA9IC9bQS1aXS8udGVzdChwYXNzd29yZCk7XHJcbiAgICB0aGlzLmhhc1NtYWxsTGV0dGVyID0gL1thLXpdLy50ZXN0KHBhc3N3b3JkKTtcclxuICAgIHRoaXMuaGFzU3BlY2lhbExldHRlciA9IC9bIUAjJCVeJiooKSwuP1wiOnt9fDw+XS8udGVzdChwYXNzd29yZCk7XHJcbiAgICB0aGlzLmhhc01pbkxlbmd0aCA9IHBhc3N3b3JkLmxlbmd0aCA+PSB0aGlzLnBhc3N3b3JkTWluTGVuZ3RoO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBiYnNmLWNvbnRyb2wgYmJzZi10ZXh0Ym94XCIgW2Zvcm1Hcm91cF09XCJncm91cFwiPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwib3B0aW9ucy52aWV3VHlwZSA9PSAxID8gJ2Jic2YtdmVydGljYWwnIDogJ2Jic2YtaG9yaXpvbnRhbCdcIj5cclxuICAgIDwhLS1sYWJlbC0tPlxyXG4gICAgPGxhYmVsICpuZ0lmPVwiIW9wdGlvbnMuaGlkZUxhYmVsXCIgY2xhc3M9XCJiYnNmLWxhYmVsIHt7IG9wdGlvbnMubGFiZWxFeHRyYUNsYXNzZXMgfX1cIj5cclxuICAgICAge3sgb3B0aW9ucy5sYWJlbFZhbHVlIH19XHJcbiAgICAgIDwhLS1Bc3Rlcmlzay0tPlxyXG4gICAgICBAaWYgKCgob3B0aW9ucy5zaG93QXN0ZXJpc2sgJiYgb3B0aW9ucy5pc1JlcXVpcmVkKSB8fCBvcHRpb25zLmlzUmVxdWlyZWQpICYmICFvcHRpb25zLmlzUmVhZG9ubHkpIHtcclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgIH1cclxuICAgIDwvbGFiZWw+XHJcbiAgICA8IS0tTWFza1BhdHRlcm4tLT5cclxuICAgIEBpZiAobWFza1BhdHRlcm4gIT0gbnVsbCAmJiBtYXNrUGF0dGVybiAhPSAnJyAmJiAhb3B0aW9ucy5pc1JlYWRvbmx5KSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi1pbnB1dC1jb250YWluZXJcIiBbbmdDbGFzc109XCJvcHRpb25zLmVuYWJsZUNvcHlUb0NsaXBib2FyZCA/ICdwLTQwcHgnIDogJydcIj5cclxuICAgICAgPCEtLUljb24tLT5cclxuICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnMuaWNvbiAhPSBudWxsXCIgY2xhc3M9XCJzdmcgc3ZnLWljb24tZ3JleSBiYnNmLWljb25cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIm9wdGlvbnMuaWNvblBvc2l0aW9uID09IDEgPyAnYmJzZi1sZWZ0LWljb24nIDogJ2Jic2YtcmlnaHQtaWNvbidcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIm9wdGlvbnMuaWNvblwiPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wge3sgb3B0aW9ucy5leHRyYUNsYXNzZXMgfX1cIiBbbWFza109XCJtYXNrUGF0dGVyblwiIHBsYWNlSG9sZGVyQ2hhcmFjdGVyPVwiIFwiXHJcbiAgICAgICAgW3Nob3dNYXNrVHlwZWRdPVwidHJ1ZVwiIFt2YWxpZGF0aW9uXT1cInRydWVcIiBbZGlyXT1cInRleHREaXJcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiBhcmlhLWludmFsaWQ9XCJ0cnVlXCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ7eyBvcHRpb25zLm5hbWUgfX1cIiB0eXBlPVwie3sgZ2V0SW5wdXRUeXBlKG9wdGlvbnMudHlwZSkgfX1cIiBbKG5nTW9kZWwpXT1cIm9wdGlvbnMudmFsdWVcIlxyXG4gICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cInRleHRCb3hGb3JtQ29udHJvbC5pbnZhbGlkICYmIHRleHRCb3hGb3JtQ29udHJvbC50b3VjaGVkXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7IG9wdGlvbnMucGxhY2Vob2xkZXIgfX1cIiBpZD1cInt7IG9wdGlvbnMubmFtZSB9fVwiIGF1dG9jb21wbGV0ZT1cInt7IG9wdGlvbnMuYXV0b0NvbXBsZXRlIH19XCJcclxuICAgICAgICAoY2hhbmdlKT1cInRyaW1Db250cm9sVmFsdWUoKVwiIChrZXl1cCk9XCJvblRleHRDaGFuZ2UoKVwiIFtyZWFkb25seV09XCJvcHRpb25zLmlzUmVhZG9ubHlcIlxyXG4gICAgICAgIChrZXlkb3duKT1cIndvcmRDb3VudEFycmF5ID4gb3B0aW9ucy5tYXhXb3JkQ291bnQgJiYgJGV2ZW50LmtleUNvZGUgIT0gOCA/ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpIDogbnVsbFwiXHJcbiAgICAgICAgI3VzZXJJbnB1dCAoYmx1cik9XCJvblRleHRCbHVyKClcIiAvPlxyXG4gICAgICA8IS0tQ29weVRvQ2xpcGJvYXJkLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY29weS1jbGlwYm9hcmRcIiBuZ2JUb29sdGlwPVwiQ29waWVkIVwiICpuZ0lmPVwib3B0aW9ucy5lbmFibGVDb3B5VG9DbGlwYm9hcmRcIlxyXG4gICAgICAgIChjbGljayk9XCJjb3B5SW5wdXRNZXNzYWdlKHVzZXJJbnB1dClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jb3B5XCI+PC9pPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIDwhLS1Ob01hc2tQYXR0ZXJuLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwibWFza1BhdHRlcm4gPT0gbnVsbCB8fCAobWFza1BhdHRlcm4gPT0gJycgJiYgIW9wdGlvbnMuaXNSZWFkb25seSlcIiBjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCJcclxuICAgICAgW25nQ2xhc3NdPVwib3B0aW9ucy5lbmFibGVDb3B5VG9DbGlwYm9hcmQgPyAncC00MHB4JyA6ICcnXCI+XHJcbiAgICAgIDwhLS1JY29uLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdmcgc3ZnLWljb24tZ3JleSBiYnNmLWljb25cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIm9wdGlvbnMuaWNvblBvc2l0aW9uID09IDEgPyAnYmJzZi1sZWZ0LWljb24nIDogJ2Jic2YtcmlnaHQtaWNvbidcIiAqbmdJZj1cIm9wdGlvbnMuaWNvbiAhPSBudWxsXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCJvcHRpb25zLmljb25cIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0taW5wdXQtLT5cclxuICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHt7IG9wdGlvbnMuZXh0cmFDbGFzc2VzIH19IFwiIFtkaXJdPVwidGV4dERpclwiIChmb2N1cyk9XCJvbkZvY3VzKHRydWUpXCJcclxuICAgICAgICAoZm9jdXNvdXQpPVwib25Gb2N1cyhmYWxzZSlcIiBtYXhsZW5ndGg9XCJ7eyBvcHRpb25zLm1heExlbmd0aCB9fVwiIG1pbmxlbmd0aD1cInt7IG9wdGlvbnMubWluTGVuZ3RoIH19XCJcclxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiBhcmlhLWludmFsaWQ9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgb3B0aW9ucy5uYW1lIH19XCJcclxuICAgICAgICB0eXBlPVwie3sgZ2V0SW5wdXRUeXBlKG9wdGlvbnMudHlwZSkgfX1cIlxyXG4gICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cInRleHRCb3hGb3JtQ29udHJvbC5pbnZhbGlkICYmIHRleHRCb3hGb3JtQ29udHJvbC50b3VjaGVkXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7IG9wdGlvbnMucGxhY2Vob2xkZXIgfX1cIiBpZD1cInt7IG9wdGlvbnMubmFtZSB9fVwiIGF1dG9jb21wbGV0ZT1cInt7IG9wdGlvbnMuYXV0b0NvbXBsZXRlIH19XCJcclxuICAgICAgICAoY2hhbmdlKT1cInRyaW1Db250cm9sVmFsdWUoKVwiIChrZXl1cCk9XCJvblRleHRDaGFuZ2UoKVwiIFsobmdNb2RlbCldPVwib3B0aW9ucy52YWx1ZVwiXHJcbiAgICAgICAgKGtleWRvd24pPVwid29yZENvdW50QXJyYXkgPiBvcHRpb25zLm1heFdvcmRDb3VudCAmJiAkZXZlbnQua2V5Q29kZSAhPSA4ID8gJGV2ZW50LnByZXZlbnREZWZhdWx0KCkgOiBudWxsXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwib3B0aW9ucy5pc1JlYWRvbmx5XCIgI3VzZXJJbnB1dCAoYmx1cik9XCJvblRleHRCbHVyKClcIiAvPlxyXG4gICAgICA8IS0tQ29weVRvQ2xpcGJvYXJkLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY29weS1jbGlwYm9hcmRcIiBuZ2JUb29sdGlwPVwiQ29waWVkIVwiIHRyaWdnZXJzPVwiY2xpY2s6Ymx1clwiICpuZ0lmPVwib3B0aW9ucy5lbmFibGVDb3B5VG9DbGlwYm9hcmRcIlxyXG4gICAgICAgIChjbGljayk9XCJjb3B5SW5wdXRNZXNzYWdlKHVzZXJJbnB1dClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jb3B5XCI+PC9pPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gcmVhZG9ubHkgLS0+XHJcbiAgICBAaWYgKG9wdGlvbnMuaXNSZWFkb25seSkge1xyXG4gICAgPGRpdj5cclxuICAgICAgPGEgKm5nSWY9XCJvcHRpb25zLnR5cGUgPT0gaW5wdXRUeXBlLkVtYWlsXCIgaHJlZj1cIm1haWx0bzoge3sgb3B0aW9ucy52YWx1ZSB9fVwiPnt7IG9wdGlvbnMudmFsdWUgfX08L2E+XHJcbiAgICAgIDxhICpuZ0lmPVwib3B0aW9ucy50eXBlID09IGlucHV0VHlwZS5VUkxcIiBocmVmPVwie3sgb3B0aW9ucy52YWx1ZSB9fVwiIHRhcmdldD1cIl9ibGFua1wiPnt7IG9wdGlvbnMudmFsdWUgfX08L2E+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwib3B0aW9ucy50eXBlICE9IGlucHV0VHlwZS5VUkwgJiYgb3B0aW9ucy50eXBlICE9IGlucHV0VHlwZS5FbWFpbFwiXHJcbiAgICAgICAgY2xhc3M9XCJyZWFkb25seS12aWV3XCI+e3sgb3B0aW9ucy52YWx1ZSB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzdWJ0ZXh0LWNvbnRhaW5lclwiPlxyXG4gICAgPCEtLXdvcmRDb3VudC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2Ytd29yZC1jb3VudFwiICpuZ0lmPVwib3B0aW9ucy5tYXhXb3JkQ291bnQgPiAwICYmIGlzU2hvd1dvcmRDb3VudFwiPlxyXG4gICAgICB7eyB3b3JkQ291bnQgfX0ve3sgb3B0aW9ucy5tYXhXb3JkQ291bnQgfX0gV29yZHM8L2Rpdj5cclxuICAgIDwhLS0gQ2hhcnNMaW1pdE1zZy0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtY2hhcmFjdGVyLWNvdW50XCIgKm5nSWY9XCJzaG93Q2hhcnNMaW1pdE1zZ1wiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2JhZGdlLWxpZ2h0LXdhcm5pbmcnOiBjaGFyc0xpbWl0TXNnQ2xhc3MgPT09ICd3YXJuaW5nJywgJ2JhZGdlLWxpZ2h0LWRhbmdlcic6IGNoYXJzTGltaXRNc2dDbGFzcyA9PT0gJ2RhbmdlcicgfVwiPlxyXG4gICAgICB7eyBtYXhMaW1pdFdhcm5pbmdNc2cgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBQYXNzd29yZCBEaXNjbGFpbWVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtcGFzc3dvcmQtZGlzY2xhaW1lclwiXHJcbiAgICAgICpuZ0lmPVwib3B0aW9ucy50eXBlID09IGlucHV0VHlwZS5QYXNzd29yZCAmJiAhb3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uICYmICFvcHRpb25zLmlzUmVhZG9ubHlcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkLXJlcXVpcmVtZW50c1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXF1aXJlbWVudC10aXRsZVwiPnt7IHBhc3N3b3JkUmVxdWlyZW1lbnRzVGl0bGUgfX08L2Rpdj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJyZXF1aXJlbWVudHMtbGlzdFwiPlxyXG4gICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsncmVxdWlyZW1lbnQtbWV0JzogaGFzTnVtYmVyLCAncmVxdWlyZW1lbnQtbm90LW1ldCc6ICFoYXNOdW1iZXJ9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW25nQ2xhc3NdPVwiaGFzTnVtYmVyID8gJ2ZhLWNoZWNrIHRleHQtc3VjY2VzcycgOiAnZmEtdGltZXMgdGV4dC1kYW5nZXInXCI+PC9pPlxyXG4gICAgICAgICAgICB7eyBwYXNzd29yZENvbXBsZXhpdHlIYXNOdW1iZXIgfX1cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieydyZXF1aXJlbWVudC1tZXQnOiBoYXNDYXBpdGFsTGV0dGVyLCAncmVxdWlyZW1lbnQtbm90LW1ldCc6ICFoYXNDYXBpdGFsTGV0dGVyfVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhc1wiIFtuZ0NsYXNzXT1cImhhc0NhcGl0YWxMZXR0ZXIgPyAnZmEtY2hlY2sgdGV4dC1zdWNjZXNzJyA6ICdmYS10aW1lcyB0ZXh0LWRhbmdlcidcIj48L2k+XHJcbiAgICAgICAgICAgIHt7IHBhc3N3b3JkQ29tcGxleGl0eUhhc0NhcGl0YWxMZXR0ZXIgfX1cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieydyZXF1aXJlbWVudC1tZXQnOiBoYXNTbWFsbExldHRlciwgJ3JlcXVpcmVtZW50LW5vdC1tZXQnOiAhaGFzU21hbGxMZXR0ZXJ9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW25nQ2xhc3NdPVwiaGFzU21hbGxMZXR0ZXIgPyAnZmEtY2hlY2sgdGV4dC1zdWNjZXNzJyA6ICdmYS10aW1lcyB0ZXh0LWRhbmdlcidcIj48L2k+XHJcbiAgICAgICAgICAgIHt7IHBhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyIH19XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsncmVxdWlyZW1lbnQtbWV0JzogaGFzU3BlY2lhbExldHRlciwgJ3JlcXVpcmVtZW50LW5vdC1tZXQnOiAhaGFzU3BlY2lhbExldHRlcn1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXNcIiBbbmdDbGFzc109XCJoYXNTcGVjaWFsTGV0dGVyID8gJ2ZhLWNoZWNrIHRleHQtc3VjY2VzcycgOiAnZmEtdGltZXMgdGV4dC1kYW5nZXInXCI+PC9pPlxyXG4gICAgICAgICAgICB7eyBwYXNzd29yZENvbXBsZXhpdHlIYXNTcGVjaWFsTGV0dGVyIH19XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsncmVxdWlyZW1lbnQtbWV0JzogaGFzTWluTGVuZ3RoLCAncmVxdWlyZW1lbnQtbm90LW1ldCc6ICFoYXNNaW5MZW5ndGh9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW25nQ2xhc3NdPVwiaGFzTWluTGVuZ3RoID8gJ2ZhLWNoZWNrIHRleHQtc3VjY2VzcycgOiAnZmEtdGltZXMgdGV4dC1kYW5nZXInXCI+PC9pPlxyXG4gICAgICAgICAgICB7eyBtaW5MZW5ndGhSZXF1aXJlbWVudCB9fVxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBMYWJlbERlc2NyaXB0aW9uLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi1jb250cm9sLWRlc2NcIiAqbmdJZj1cIm9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiAhPSBudWxsXCI+e3sgb3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIH19PC9kaXY+XHJcbiAgICA8IS0tIHJlcXVpcmVkVGV4dC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtdmFsaWRhdGlvblwiIFtkaXJdPVwidGV4dERpclwiICpuZ0lmPVwidGV4dEJveEZvcm1Db250cm9sLmludmFsaWQgJiYgdGV4dEJveEZvcm1Db250cm9sLnRvdWNoZWRcIj5cclxuICAgICAge3sgZ2V0RXJyb3JWYWxpZGF0aW9uKHRleHRCb3hGb3JtQ29udHJvbC5lcnJvcnMgfCBrZXl2YWx1ZSkgfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICBAaWYgKChncm91cC52YWxpZCAmJiBncm91cC5kaXJ0eSAmJiBncm91cC50b3VjaGVkKSB8fCAoZ3JvdXAudW50b3VjaGVkICYmIGdyb3VwLmludmFsaWQgJiYgZ3JvdXAuZGlydHkpKSB7XHJcbiAgPGRpdj57eyByZXNldEVycm9yKCkgfX08L2Rpdj5cclxuICB9XHJcbjwvZGl2PiJdfQ==
|