@smarterplan/ngx-smarterplan-admin 0.1.45 → 0.1.46
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 +24 -24
- package/esm2020/lib/chevron/chevron.component.mjs +1 -1
- package/esm2020/lib/ngx-smarterplan-admin.service.mjs +1 -1
- package/esm2020/lib/organisation/organisation.component.mjs +1 -1
- package/esm2020/lib/user/user-mission-form/user-mission-form.component.mjs +26 -11
- package/esm2020/lib/user/user.component.mjs +3 -3
- package/esm2020/public-api.mjs +1 -1
- package/fesm2015/smarterplan-ngx-smarterplan-admin.mjs +25 -11
- package/fesm2015/smarterplan-ngx-smarterplan-admin.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-admin.mjs +25 -11
- package/fesm2020/smarterplan-ngx-smarterplan-admin.mjs.map +1 -1
- package/lib/user/user-mission-form/user-mission-form.component.d.ts +6 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
# NgxSmarterplanAdmin
|
|
2
|
-
|
|
3
|
-
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
|
|
4
|
-
|
|
5
|
-
## Code scaffolding
|
|
6
|
-
|
|
7
|
-
Run `ng generate component component-name --project ngx-smarterplan-admin` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-smarterplan-admin`.
|
|
8
|
-
> Note: Don't forget to add `--project ngx-smarterplan-admin` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
-
|
|
10
|
-
## Build
|
|
11
|
-
|
|
12
|
-
Run `ng build ngx-smarterplan-admin` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
-
|
|
14
|
-
## Publishing
|
|
15
|
-
|
|
16
|
-
After building your library with `ng build ngx-smarterplan-admin`, go to the dist folder `cd dist/ngx-smarterplan-admin` and run `npm publish`.
|
|
17
|
-
|
|
18
|
-
## Running unit tests
|
|
19
|
-
|
|
20
|
-
Run `ng test ngx-smarterplan-admin` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
-
|
|
22
|
-
## Further help
|
|
23
|
-
|
|
24
|
-
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
1
|
+
# NgxSmarterplanAdmin
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project ngx-smarterplan-admin` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-smarterplan-admin`.
|
|
8
|
+
> Note: Don't forget to add `--project ngx-smarterplan-admin` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build ngx-smarterplan-admin` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build ngx-smarterplan-admin`, go to the dist folder `cd dist/ngx-smarterplan-admin` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test ngx-smarterplan-admin` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -16,4 +16,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
16
16
|
}], ctorParameters: function () { return []; }, propDecorators: { conditionShowing: [{
|
|
17
17
|
type: Input
|
|
18
18
|
}] } });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hldnJvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi9jaGV2cm9uL2NoZXZyb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvY2hldnJvbi9jaGV2cm9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7QUFPbEQsTUFBTSxPQUFPLGdCQUFnQjtJQUczQjtRQUZTLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQUVsQixDQUFDO0lBRWpCLFFBQVE7SUFDUixDQUFDOzs2R0FOVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQixxR0NSN0IscU1BS0E7MkZER2EsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGFBQWE7MEVBS2QsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNoZXZyb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGV2cm9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jaGV2cm9uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENoZXZyb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGNvbmRpdGlvblNob3dpbmcgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAzMHB4OyB3aWR0aDogMzBweDtcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1jb250YWluZXJcIiA+XHJcbiAgICAgIDxkaXYgW2NsYXNzXT1cImNvbmRpdGlvblNob3dpbmcgPyAnaWNvbi1pbWctdXAnIDogJ2ljb24taW1nLWRvd24nXCI+PC9kaXY+XHJcbiAgICA8L3NwYW4+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -11,4 +11,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
11
11
|
providedIn: 'root'
|
|
12
12
|
}]
|
|
13
13
|
}], ctorParameters: function () { return []; } });
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNtYXJ0ZXJwbGFuLWFkbWluLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi9uZ3gtc21hcnRlcnBsYW4tYWRtaW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sMEJBQTBCO0lBRXJDLGdCQUFnQixDQUFDOzt1SEFGTiwwQkFBMEI7MkhBQTFCLDBCQUEwQixjQUZ6QixNQUFNOzJGQUVQLDBCQUEwQjtrQkFIdEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hTbWFydGVycGxhbkFkbWluU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcbn1cclxuIl19
|
|
@@ -168,4 +168,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
168
168
|
type: Component,
|
|
169
169
|
args: [{ selector: 'lib-organisation', template: "<div class=\"container-fluid\" class=\"dashboard-tab\">\r\n <h3>{{'SmarterPlan Client Organisations' | translate}}</h3>\r\n <div class=\"row\">\r\n <div class=\"col-md-8 col-lg-6\">\r\n\r\n <div *ngIf=\"error\" class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\">\r\n <strong>{{'Error' | translate}}!</strong> We haven't been able to fulfil your request.\r\n <button type=\"button\" class=\"close\" data-dismiss=\"alert\" (click)=\"onDismiss()\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"!create && !editing\">\r\n <div class=\"d-flex justify-content-between align-items-center p-1\">\r\n <input class=\"form-control search-button\" [(ngModel)]=\"query\" i18n-placeholder placeholder=\"Search\"\r\n type=\"text\"> \r\n </div>\r\n <!-- <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onAdd()\">{{'Add new client organisation' |\r\n translate}}</button> -->\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let a of clients; index as index\"\r\n (click)=\"onToggleDetail(index)\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n {{a.name}}\r\n <lib-chevron [conditionShowing]=\"index==details\"></lib-chevron>\r\n <!-- <ic-icon [icon]=\"index==details ? chevronDown : chevronRight\"></ic-icon> -->\r\n </div>\r\n\r\n <div *ngIf=\"index==details\">\r\n <ul class=\"list-group list-group-flush\">\r\n <!-- <li class=\"list-group-item bg-transparent\">{{'Activit\u00E9' | translate}}</li> -->\r\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{ a.organisation.address }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{ 'Postal Code' | translate}}: {{ a.organisation.postal }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'City' | translate}}: {{ a.organisation.city }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'SIRET' | translate}}: {{ a.organisation.siret ?\r\n a.organisation.siret : 'Not provided' | translate }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Created' | translate}}: {{ a.organisation.createdAt | date:'long' }}\r\n </li>\r\n <ng-container *ngIf=\"a.adminMissions.length > 0\">\r\n <li *ngIf=\"a.adminMissions.length <= 1\" class=\"list-group-item bg-transparent\">\r\n {{'Administrator User' | translate}} :</li>\r\n <li *ngIf=\"a.adminMissions.length > 1\" class=\"list-group-item bg-transparent\">\r\n {{'Administrator User(s)' | translate}} :</li>\r\n <li class=\"list-group-item list-group-item-action\"\r\n *ngFor=\"let admin of a.adminMissions; index as index\" (click)=\"onToggleDetail(index)\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"ml-4\"> {{admin.user.displayName}} ({{admin.user.email}})\r\n <!-- <button type=\"button\" class=\"btn btn-primary rounded-pill\" style=\"float: right;\"\r\n (click)=\"onRemoveAdmin(admin)\">\r\n {{'Remove'|translate}}</button> \r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Phone'}}: {{admin.user.phone}}</li> -->\r\n </ul>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"a.adminMissions.length == 0\">\r\n <li class=\"list-group-item bg-warning\"><span class=\"badge badge-warning\">\r\n {{'Warning' | translate}}</span> {{'No Administrator User'| translate}} </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"a.properties.length > 0\">\r\n <li class=\"list-group-item bg-transparent\">{{'Locations' | translate}}: </li>\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let property of a.properties\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"ml-4\">{{property}}</li>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n <div class=\"action-button-container\">\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onEdit(a.organisation)\">\r\n {{'Edit' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onArchive(a.organisation)\" disabled>\r\n {{'Archive' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onDeleteOrg(a.organisation)\">\r\n {{'Delete' | translate}}</button>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div *ngIf=\"form && (create || editing)\">\r\n <form (ngSubmit)=\"onSubmitOrg()\" [formGroup]=\"form\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && name.touched\" required\r\n formControlName=\"name\">\r\n <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"address\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'City' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"city\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Postal code' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"postal\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'SIRET' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"siret\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"working\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div class=\"action-button-container\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n [disabled]=\"working || form.invalid\">{{'Save' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" [disabled]=\"working\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <!--<spOrganisationForm [model]=\" editingOrganisation\" (submit)=\"onSave($event)\" (cancel)=\"onCancel()\">\r\n </spOrganisationForm>-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <div>{{'Administrator User' | translate}}</div>\r\n <div formGroupName=\"user\" *ngIf=\"create || isAddingAdmin\">\r\n <div *ngIf=\"form\" class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"email.invalid && email.touched\" required\r\n formControlName=\"email\">\r\n <div class=\"invalid-feedback\">\r\n {{'An email is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'First name' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"firstName\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Last name' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"lastName\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Phone' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"phone\">\r\n </div>\r\n </div>\r\n </div> -->", styles: [".form-group{margin:1.5rem 0}.search-button{width:-moz-fit-content;width:fit-content}li.ml-4{margin-left:3rem}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}\n"] }]
|
|
170
170
|
}], ctorParameters: function () { return [{ type: i1.OrganisationService }, { type: i2.FormBuilder }, { type: i1.BaseUserService }, { type: i1.MissionService }, { type: i3.TranslateService }, { type: i1.PropertyService }]; } });
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1hZG1pbi9zcmMvbGliL29yZ2FuaXNhdGlvbi9vcmdhbmlzYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvb3JnYW5pc2F0aW9uL29yZ2FuaXNhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFJSCxVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQStFLGFBQWEsRUFBbUIsd0JBQXdCLEVBQUUsVUFBVSxFQUFrQixNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBUXROLE1BQU0sT0FBTyxxQkFBcUI7SUFrQzlCLFlBQ1ksVUFBK0IsRUFDL0IsRUFBZSxFQUNmLFdBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFNBQTJCLEVBQzNCLGVBQWdDO1FBTGhDLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBQy9CLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXRDNUMsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUVaLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixZQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFYixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsVUFBSyxHQUFHLElBQUksQ0FBQztRQUliLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLGtC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U0FBUzsrQkFDSSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICAgIEZvcm1CdWlsZGVyLFxuICAgIEZvcm1Hcm91cCxcbiAgICBBYnN0cmFjdENvbnRyb2wsXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UsIE1pc3Npb25TZXJ2aWNlLCBPcmdhbmlzYXRpb24sIE9yZ2FuaXNhdGlvblNlcnZpY2UsIFByb2ZpbGUsIFByb2ZpbGVFbnRpdHksIFByb3BlcnR5U2VydmljZSwgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0LCBSb2xlU3RhdHVzLCB1cGxvYWRGaWxlVG9TMyB9IGZyb20gXCJAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmVcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1vcmdhbmlzYXRpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9vcmdhbmlzYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL29yZ2FuaXNhdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE9yZ2FuaXNhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBhZG1pbnMgPSBbXTtcblxuICAgIGNsaWVudHMgPSBbXTtcblxuICAgIGRldGFpbHMgPSAtMTtcblxuICAgIHF1ZXJ5ID0gXCJcIjtcblxuICAgIGVycm9yID0gbnVsbDtcblxuICAgIGZvcm06IEZvcm1Hcm91cDtcblxuICAgIGNyZWF0ZSA9IGZhbHNlO1xuXG4gICAgd29ya2luZyA9IGZhbHNlO1xuXG4gICAgaXNBZGRpbmdBZG1pbiA9IGZhbHNlO1xuXG4gICAgbWU6IFByb2ZpbGU7XG5cbiAgICBvcmc6IE9yZ2FuaXNhdGlvbjtcblxuICAgIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIGVkaXRpbmcgPSBmYWxzZTtcblxuICAgIC8vIGZ1bGxBY2Nlc3MgdHJ1ZSBnaXZlcyBhY2Nlc3MgdG8gYWxsIG9yZ3NcbiAgICAvLyB0aGlzIGlzIHJlc2VydmVkIHRvIFNtYXJ0ZXJwbGFuIEFETUlOc1xuICAgIGZ1bGxBY2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGZpbGVUb1VwbG9hZDogRmlsZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG9yZ1NlcnZpY2U6IE9yZ2FuaXNhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbWlzc2lvblNlcnZpY2U6IE1pc3Npb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwcm9wZXJ0eVNlcnZpY2U6IFByb3BlcnR5U2VydmljZSxcbiAgICApIHsgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucmVzZXRMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVzZXRMaXN0IGZldGNoZXMgYSBmcmVzaCBvcmdhbmlzYXRpb24gbGlzdCBmcm9tIHNlcnZlclxuICAgICAqL1xuICAgIGFzeW5jIHJlc2V0TGlzdCgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZVxuICAgICAgICAgICAgLmdldE1pc3Npb25zQnlPcmRlcmVkT3JnYW5pc2F0aW9uKFxuICAgICAgICAgICAgICAgIFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCIsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAudGhlbihhc3luYyAobWlzc2lvbnMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpZW50ID0ge307XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2lvbnMubWFwKGFzeW5jIChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0uZGVsZXRlZEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjbGllbnQuaGFzT3duUHJvcGVydHkobS5vcmdhbmlzYXRpb25JRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50W20ub3JnYW5pc2F0aW9uSURdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbS5vcmdhbmlzYXRpb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogbS5vcmdhbmlzYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pbk1pc3Npb25zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLkFETUlOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFscmVhZHlBZG1pbiA9IGNsaWVudFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0ub3JnYW5pc2F0aW9uSURcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5hZG1pbk1pc3Npb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaXMpID0+IG1pcy51c2VyLmlkID09PSBtLnVzZXJJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFscmVhZHlBZG1pbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFttLm9yZ2FuaXNhdGlvbklEXS5hZG1pbk1pc3Npb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyOiBuZXcgUHJvZmlsZUVudGl0eShtLnVzZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uOiBtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvcGVydHlTZXJ2aWNlLmdldFByb3BlcnRpZXNGb3JPcmdhbmlzYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLm9yZ2FuaXNhdGlvbklELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFttLm9yZ2FuaXNhdGlvbklEXS5wcm9wZXJ0aWVzID0gcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnR5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9wZXJ0eS5kZWxldGVkQXQgJiYgcHJvcGVydHkuc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgocHJvcGVydHkpID0+IHByb3BlcnR5LnNwYWNlLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpZW50cyA9IE9iamVjdC52YWx1ZXMoY2xpZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBvblRvZ2dsZURldGFpbCBmb2xkcy91bmZvbGRzIGRldGFpbHMgZm9yIGEgZ2l2ZW4gb3JnYW5pc2F0aW9uXG4gICAgICogQHBhcmFtIGkgaW5kZXggb2YgdGhlIG9yZ2FuaXNhdGlvbiB0byBiZSB0b2dnbGVkXG4gICAgICovXG4gICAgb25Ub2dnbGVEZXRhaWwoaW5kZXgpIHtcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gaW5kZXggPT09IHRoaXMuZGV0YWlscyA/IC0xIDogaW5kZXg7XG4gICAgfVxuXG4gICAgb25BZGQoKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBuYW1lOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgICAgIGFkZHJlc3M6IFtcIlwiXSxcbiAgICAgICAgICAgIGNpdHk6IFtcIlwiXSxcbiAgICAgICAgICAgIHBvc3RhbDogW251bGxdLFxuICAgICAgICAgICAgc2lyZXQ6IFtudWxsXSxcblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkVkaXQob3JnOiBPcmdhbmlzYXRpb24pIHtcbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBpZDogW29yZy5pZF0sXG4gICAgICAgICAgICBuYW1lOiBbb3JnLm5hbWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgICAgICBhZGRyZXNzOiBbb3JnLmFkZHJlc3NdLFxuICAgICAgICAgICAgY2l0eTogW29yZy5jaXR5XSxcbiAgICAgICAgICAgIHBvc3RhbDogW29yZy5wb3N0YWxdLFxuICAgICAgICAgICAgc2lyZXQ6IFtvcmcuc2lyZXRdLFxuXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ2FuY2VsKCkge1xuICAgICAgICAvLyB0aGlzLmZvcm0gPSBudWxsO1xuICAgICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IG5hbWUoKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoXCJuYW1lXCIpO1xuICAgIH1cblxuICAgIGdldCBlbWFpbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldChcInVzZXJcIikuZ2V0KFwiZW1haWxcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGNyZWF0aW9uIG9yIHVwZGF0ZSBvZiBvcmdhbmlzYXRpb25cbiAgICAgKiBAc2VlIDE3NFxuICAgICAqL1xuICAgIGFzeW5jIG9uU3VibWl0T3JnKCkge1xuICAgICAgICB0aGlzLndvcmtpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm0udmFsdWU7XG4gICAgICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChmb3JtVmFsdWUpO1xuICAgICAgICBsZXQgb3JnYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNyZWF0ZSkge1xuICAgICAgICAgICAgICAgIG9yZ2EgPSBhd2FpdCB0aGlzLm9yZ1NlcnZpY2UuY3JlYXRlT3JnYW5pc2F0aW9uKGZvcm1WYWx1ZSBhcyBPcmdhbmlzYXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcmdhID0gYXdhaXQgdGhpcy5vcmdTZXJ2aWNlLnVwZGF0ZU9yZ2FuaXNhdGlvbihmb3JtVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJlc2V0TGlzdCgpO1xuICAgICAgICB0aGlzLndvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsZVRvVXBsb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgb25BcmNoaXZlKF8pIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJVbmltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIG9uRGlzbWlzcygpIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgb25EZWxldGVPcmcob3JnOiBPcmdhbmlzYXRpb24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJjb25maXJtLmRlbGV0ZU9yZ2FuaXNhdGlvblwiKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgd2luZG93LmNvbmZpcm0obWVzc2FnZSkgJiZcbiAgICAgICAgICAgIG9yZy5pZCAhPT0gXCI2ZTI4MjAxZi00Njc5LTRjMjktOWQyZC04YTMyNWY1N2NlZTlcIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXNUb0RlbGV0ZSA9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9wZXJ0eVNlcnZpY2UuZ2V0UHJvcGVydGllc0Zvck9yZ2FuaXNhdGlvbihvcmcuaWQpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5vcmdTZXJ2aWNlLmRlbGV0ZU9yZ2FuaXNhdGlvbihvcmcuaWQpO1xuICAgICAgICAgICAgKGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNCeU9yZ2FuaXNhdGlvbihvcmcuaWQpKS5tYXAoXG4gICAgICAgICAgICAgICAgKG0pID0+IHRoaXMubWlzc2lvblNlcnZpY2Uuc29mdERlbGV0ZU1pc3Npb24obS5pZCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1RvRGVsZXRlLm1hcChhc3luYyAocHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9wZXJ0eVNlcnZpY2UuZGVsZXRlUHJvcGVydHkocHJvcGVydHkuaWQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgY2xhc3M9XCJkYXNoYm9hcmQtdGFiXCI+XHJcbiAgPGgzPnt7J1NtYXJ0ZXJQbGFuIENsaWVudCBPcmdhbmlzYXRpb25zJyB8IHRyYW5zbGF0ZX19PC9oMz5cclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggY29sLWxnLTZcIj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJlcnJvclwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGFsZXJ0LWRpc21pc3NpYmxlIGZhZGUgc2hvd1wiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgIDxzdHJvbmc+e3snRXJyb3InIHwgdHJhbnNsYXRlfX0hPC9zdHJvbmc+IFdlIGhhdmVuJ3QgYmVlbiBhYmxlIHRvIGZ1bGZpbCB5b3VyIHJlcXVlc3QuXHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cImFsZXJ0XCIgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XHJcbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhY3JlYXRlICYmICFlZGl0aW5nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgcC0xXCI+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VhcmNoLWJ1dHRvblwiIFsobmdNb2RlbCldPVwicXVlcnlcIiBpMThuLXBsYWNlaG9sZGVyIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIj4mbmJzcDtcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGxcIiAoY2xpY2spPVwib25BZGQoKVwiPnt7J0FkZCBuZXcgY2xpZW50IG9yZ2FuaXNhdGlvbicgfFxyXG4gICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgICAgICAgIDxsaWItbG9hZGVyPjwvbGliLWxvYWRlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uXCIgKm5nRm9yPVwibGV0IGEgb2YgY2xpZW50czsgaW5kZXggYXMgaW5kZXhcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25Ub2dnbGVEZXRhaWwoaW5kZXgpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAge3thLm5hbWV9fVxyXG4gICAgICAgICAgICAgIDxsaWItY2hldnJvbiBbY29uZGl0aW9uU2hvd2luZ109XCJpbmRleD09ZGV0YWlsc1wiPjwvbGliLWNoZXZyb24+XHJcbiAgICAgICAgICAgICAgPCEtLSA8aWMtaWNvbiBbaWNvbl09XCJpbmRleD09ZGV0YWlscyA/IGNoZXZyb25Eb3duIDogY2hldnJvblJpZ2h0XCI+PC9pYy1pY29uPiAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaW5kZXg9PWRldGFpbHNcIj5cclxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQWN0aXZpdMOpJyB8IHRyYW5zbGF0ZX19PC9saT4gLS0+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydBZGRyZXNzJyB8IHRyYW5zbGF0ZX19OiB7eyBhLm9yZ2FuaXNhdGlvbi5hZGRyZXNzIH19PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7ICdQb3N0YWwgQ29kZScgfCB0cmFuc2xhdGV9fToge3sgYS5vcmdhbmlzYXRpb24ucG9zdGFsIH19XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQ2l0eScgfCB0cmFuc2xhdGV9fToge3sgYS5vcmdhbmlzYXRpb24uY2l0eSB9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydTSVJFVCcgfCB0cmFuc2xhdGV9fToge3sgYS5vcmdhbmlzYXRpb24uc2lyZXQgP1xyXG4gICAgICAgICAgICAgICAgICBhLm9yZ2FuaXNhdGlvbi5zaXJldCA6ICdOb3QgcHJvdmlkZWQnIHwgdHJhbnNsYXRlIH19PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0NyZWF0ZWQnIHwgdHJhbnNsYXRlfX06IHt7IGEub3JnYW5pc2F0aW9uLmNyZWF0ZWRBdCB8IGRhdGU6J2xvbmcnIH19XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImEuYWRtaW5NaXNzaW9ucy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImEuYWRtaW5NaXNzaW9ucy5sZW5ndGggPD0gMVwiIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snQWRtaW5pc3RyYXRvciBVc2VyJyB8IHRyYW5zbGF0ZX19IDo8L2xpPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJhLmFkbWluTWlzc2lvbnMubGVuZ3RoID4gMVwiIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snQWRtaW5pc3RyYXRvciBVc2VyKHMpJyB8IHRyYW5zbGF0ZX19IDo8L2xpPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFkbWluIG9mIGEuYWRtaW5NaXNzaW9uczsgaW5kZXggYXMgaW5kZXhcIiAoY2xpY2spPVwib25Ub2dnbGVEZXRhaWwoaW5kZXgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJtbC00XCI+IHt7YWRtaW4udXNlci5kaXNwbGF5TmFtZX19ICh7e2FkbWluLnVzZXIuZW1haWx9fSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByb3VuZGVkLXBpbGxcIiBzdHlsZT1cImZsb2F0OiByaWdodDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlQWRtaW4oYWRtaW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydSZW1vdmUnfHRyYW5zbGF0ZX19PC9idXR0b24+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydQaG9uZSd9fToge3thZG1pbi51c2VyLnBob25lfX08L2xpPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImEuYWRtaW5NaXNzaW9ucy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctd2FybmluZ1wiPjxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2Utd2FybmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3snV2FybmluZycgfCB0cmFuc2xhdGV9fTwvc3Bhbj4ge3snTm8gQWRtaW5pc3RyYXRvciBVc2VyJ3wgdHJhbnNsYXRlfX0gPC9saT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImEucHJvcGVydGllcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0xvY2F0aW9ucycgfCB0cmFuc2xhdGV9fTogPC9saT5cclxuICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25cIiAqbmdGb3I9XCJsZXQgcHJvcGVydHkgb2YgYS5wcm9wZXJ0aWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJtbC00XCI+e3twcm9wZXJ0eX19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdChhLm9yZ2FuaXNhdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAge3snRWRpdCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsIGFjdGlvbi1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BcmNoaXZlKGEub3JnYW5pc2F0aW9uKVwiIGRpc2FibGVkPlxyXG4gICAgICAgICAgICAgICAgICB7eydBcmNoaXZlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZU9yZyhhLm9yZ2FuaXNhdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAge3snRGVsZXRlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmb3JtICYmIChjcmVhdGUgfHwgZWRpdGluZylcIj5cclxuICAgICAgICA8Zm9ybSAobmdTdWJtaXQpPVwib25TdWJtaXRPcmcoKVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTmFtZScgfCB0cmFuc2xhdGV9fSAqPC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbY2xhc3MuaXMtaW52YWxpZF09XCJuYW1lLmludmFsaWQgJiYgbmFtZS50b3VjaGVkXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAge3snQSBuYW1lIGlzIHJlcXVpcmVkJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQWRkcmVzcycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc1wiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0NpdHknIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImNpdHlcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydQb3N0YWwgY29kZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwicG9zdGFsXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snU0lSRVQnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInNpcmV0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwid29ya2luZ1wiPlxyXG4gICAgICAgICAgICA8bGliLWxvYWRlcj48L2xpYi1sb2FkZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwid29ya2luZyB8fCBmb3JtLmludmFsaWRcIj57eydTYXZlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbCgpXCIgW2Rpc2FibGVkXT1cIndvcmtpbmdcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIGFjdGlvbi1idXR0b25cIj57eydDYW5jZWwnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS08c3BPcmdhbmlzYXRpb25Gb3JtIFttb2RlbF09XCIgZWRpdGluZ09yZ2FuaXNhdGlvblwiIChzdWJtaXQpPVwib25TYXZlKCRldmVudClcIiAoY2FuY2VsKT1cIm9uQ2FuY2VsKClcIj5cclxuICAgICAgICAgICAgICA8L3NwT3JnYW5pc2F0aW9uRm9ybT4tLT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gPGRpdj57eydBZG1pbmlzdHJhdG9yIFVzZXInIHwgdHJhbnNsYXRlfX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwidXNlclwiICpuZ0lmPVwiY3JlYXRlIHx8IGlzQWRkaW5nQWRtaW5cIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZm9ybVwiIGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snRW1haWwnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbY2xhc3MuaXMtaW52YWxpZF09XCJlbWFpbC5pbnZhbGlkICYmIGVtYWlsLnRvdWNoZWRcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snQW4gZW1haWwgaXMgcmVxdWlyZWQnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snRmlyc3QgbmFtZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJmaXJzdE5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydMYXN0IG5hbWUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydQaG9uZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT4iXX0=
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1hZG1pbi9zcmMvbGliL29yZ2FuaXNhdGlvbi9vcmdhbmlzYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvb3JnYW5pc2F0aW9uL29yZ2FuaXNhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFJSCxVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQStFLGFBQWEsRUFBbUIsd0JBQXdCLEVBQUUsVUFBVSxFQUFrQixNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBUXROLE1BQU0sT0FBTyxxQkFBcUI7SUFrQzlCLFlBQ1ksVUFBK0IsRUFDL0IsRUFBZSxFQUNmLFdBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFNBQTJCLEVBQzNCLGVBQWdDO1FBTGhDLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBQy9CLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXRDNUMsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUVaLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixZQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFYixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsVUFBSyxHQUFHLElBQUksQ0FBQztRQUliLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLGtC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U0FBUzsrQkFDSSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBGb3JtQnVpbGRlcixcclxuICAgIEZvcm1Hcm91cCxcclxuICAgIEFic3RyYWN0Q29udHJvbCxcclxuICAgIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSwgTWlzc2lvblNlcnZpY2UsIE9yZ2FuaXNhdGlvbiwgT3JnYW5pc2F0aW9uU2VydmljZSwgUHJvZmlsZSwgUHJvZmlsZUVudGl0eSwgUHJvcGVydHlTZXJ2aWNlLCByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsIFJvbGVTdGF0dXMsIHVwbG9hZEZpbGVUb1MzIH0gZnJvbSBcIkBzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZVwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWItb3JnYW5pc2F0aW9uJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9vcmdhbmlzYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vb3JnYW5pc2F0aW9uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE9yZ2FuaXNhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgYWRtaW5zID0gW107XHJcblxyXG4gICAgY2xpZW50cyA9IFtdO1xyXG5cclxuICAgIGRldGFpbHMgPSAtMTtcclxuXHJcbiAgICBxdWVyeSA9IFwiXCI7XHJcblxyXG4gICAgZXJyb3IgPSBudWxsO1xyXG5cclxuICAgIGZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgICBjcmVhdGUgPSBmYWxzZTtcclxuXHJcbiAgICB3b3JraW5nID0gZmFsc2U7XHJcblxyXG4gICAgaXNBZGRpbmdBZG1pbiA9IGZhbHNlO1xyXG5cclxuICAgIG1lOiBQcm9maWxlO1xyXG5cclxuICAgIG9yZzogT3JnYW5pc2F0aW9uO1xyXG5cclxuICAgIGxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBlZGl0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgLy8gZnVsbEFjY2VzcyB0cnVlIGdpdmVzIGFjY2VzcyB0byBhbGwgb3Jnc1xyXG4gICAgLy8gdGhpcyBpcyByZXNlcnZlZCB0byBTbWFydGVycGxhbiBBRE1JTnNcclxuICAgIGZ1bGxBY2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBmaWxlVG9VcGxvYWQ6IEZpbGU7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBvcmdTZXJ2aWNlOiBPcmdhbmlzYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1pc3Npb25TZXJ2aWNlOiBNaXNzaW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByb3BlcnR5U2VydmljZTogUHJvcGVydHlTZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJlc2V0TGlzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogcmVzZXRMaXN0IGZldGNoZXMgYSBmcmVzaCBvcmdhbmlzYXRpb24gbGlzdCBmcm9tIHNlcnZlclxyXG4gICAgICovXHJcbiAgICBhc3luYyByZXNldExpc3QoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRNaXNzaW9uc0J5T3JkZXJlZE9yZ2FuaXNhdGlvbihcclxuICAgICAgICAgICAgICAgIFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCIsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKG1pc3Npb25zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGllbnQgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2lvbnMubWFwKGFzeW5jIChtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobS5kZWxldGVkQXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsaWVudC5oYXNPd25Qcm9wZXJ0eShtLm9yZ2FuaXNhdGlvbklEKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFttLm9yZ2FuaXNhdGlvbklEXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbS5vcmdhbmlzYXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uOiBtLm9yZ2FuaXNhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5NaXNzaW9uczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLkFETUlOKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxyZWFkeUFkbWluID0gY2xpZW50W1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLm9yZ2FuaXNhdGlvbklEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5hZG1pbk1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1pcykgPT4gbWlzLnVzZXIuaWQgPT09IG0udXNlcklELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFscmVhZHlBZG1pbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50W20ub3JnYW5pc2F0aW9uSURdLmFkbWluTWlzc2lvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyOiBuZXcgUHJvZmlsZUVudGl0eShtLnVzZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npb246IG0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb3BlcnR5U2VydmljZS5nZXRQcm9wZXJ0aWVzRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLm9yZ2FuaXNhdGlvbklELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRbbS5vcmdhbmlzYXRpb25JRF0ucHJvcGVydGllcyA9IHByb3BlcnRpZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydHkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvcGVydHkuZGVsZXRlZEF0ICYmIHByb3BlcnR5LnNwYWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkuc3BhY2UubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGllbnRzID0gT2JqZWN0LnZhbHVlcyhjbGllbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogb25Ub2dnbGVEZXRhaWwgZm9sZHMvdW5mb2xkcyBkZXRhaWxzIGZvciBhIGdpdmVuIG9yZ2FuaXNhdGlvblxyXG4gICAgICogQHBhcmFtIGkgaW5kZXggb2YgdGhlIG9yZ2FuaXNhdGlvbiB0byBiZSB0b2dnbGVkXHJcbiAgICAgKi9cclxuICAgIG9uVG9nZ2xlRGV0YWlsKGluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gaW5kZXggPT09IHRoaXMuZGV0YWlscyA/IC0xIDogaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgb25BZGQoKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBuYW1lOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICAgICAgYWRkcmVzczogW1wiXCJdLFxyXG4gICAgICAgICAgICBjaXR5OiBbXCJcIl0sXHJcbiAgICAgICAgICAgIHBvc3RhbDogW251bGxdLFxyXG4gICAgICAgICAgICBzaXJldDogW251bGxdLFxyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkVkaXQob3JnOiBPcmdhbmlzYXRpb24pIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIGlkOiBbb3JnLmlkXSxcclxuICAgICAgICAgICAgbmFtZTogW29yZy5uYW1lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgICAgICBhZGRyZXNzOiBbb3JnLmFkZHJlc3NdLFxyXG4gICAgICAgICAgICBjaXR5OiBbb3JnLmNpdHldLFxyXG4gICAgICAgICAgICBwb3N0YWw6IFtvcmcucG9zdGFsXSxcclxuICAgICAgICAgICAgc2lyZXQ6IFtvcmcuc2lyZXRdLFxyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbCgpIHtcclxuICAgICAgICAvLyB0aGlzLmZvcm0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldChcIm5hbWVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVtYWlsKCk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoXCJ1c2VyXCIpLmdldChcImVtYWlsXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlIGNyZWF0aW9uIG9yIHVwZGF0ZSBvZiBvcmdhbmlzYXRpb25cclxuICAgICAqIEBzZWUgMTc0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIG9uU3VibWl0T3JnKCkge1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5mb3JtLnZhbHVlO1xyXG4gICAgICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChmb3JtVmFsdWUpO1xyXG4gICAgICAgIGxldCBvcmdhO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNyZWF0ZSkge1xyXG4gICAgICAgICAgICAgICAgb3JnYSA9IGF3YWl0IHRoaXMub3JnU2VydmljZS5jcmVhdGVPcmdhbmlzYXRpb24oZm9ybVZhbHVlIGFzIE9yZ2FuaXNhdGlvbik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvcmdhID0gYXdhaXQgdGhpcy5vcmdTZXJ2aWNlLnVwZGF0ZU9yZ2FuaXNhdGlvbihmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLnJlc2V0TGlzdCgpO1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWxlVG9VcGxvYWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQXJjaGl2ZShfKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJVbmltcGxlbWVudGVkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGlzbWlzcygpIHtcclxuICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkRlbGV0ZU9yZyhvcmc6IE9yZ2FuaXNhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiY29uZmlybS5kZWxldGVPcmdhbmlzYXRpb25cIik7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aW5kb3cuY29uZmlybShtZXNzYWdlKSAmJlxyXG4gICAgICAgICAgICBvcmcuaWQgIT09IFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllc1RvRGVsZXRlID1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvcGVydHlTZXJ2aWNlLmdldFByb3BlcnRpZXNGb3JPcmdhbmlzYXRpb24ob3JnLmlkKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5vcmdTZXJ2aWNlLmRlbGV0ZU9yZ2FuaXNhdGlvbihvcmcuaWQpO1xyXG4gICAgICAgICAgICAoYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5nZXRNaXNzaW9uc0J5T3JnYW5pc2F0aW9uKG9yZy5pZCkpLm1hcChcclxuICAgICAgICAgICAgICAgIChtKSA9PiB0aGlzLm1pc3Npb25TZXJ2aWNlLnNvZnREZWxldGVNaXNzaW9uKG0uaWQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0RlbGV0ZS5tYXAoYXN5bmMgKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9wZXJ0eVNlcnZpY2UuZGVsZXRlUHJvcGVydHkocHJvcGVydHkuaWQpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiIGNsYXNzPVwiZGFzaGJvYXJkLXRhYlwiPlxyXG4gIDxoMz57eydTbWFydGVyUGxhbiBDbGllbnQgT3JnYW5pc2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvaDM+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC04IGNvbC1sZy02XCI+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBhbGVydC1kaXNtaXNzaWJsZSBmYWRlIHNob3dcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICA8c3Ryb25nPnt7J0Vycm9yJyB8IHRyYW5zbGF0ZX19ITwvc3Ryb25nPiBXZSBoYXZlbid0IGJlZW4gYWJsZSB0byBmdWxmaWwgeW91ciByZXF1ZXN0LlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJhbGVydFwiIChjbGljayk9XCJvbkRpc21pc3MoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPlxyXG4gICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWNyZWF0ZSAmJiAhZWRpdGluZ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHAtMVwiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlYXJjaC1idXR0b25cIiBbKG5nTW9kZWwpXT1cInF1ZXJ5XCIgaTE4bi1wbGFjZWhvbGRlciBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCI+Jm5ic3A7XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsXCIgKGNsaWNrKT1cIm9uQWRkKClcIj57eydBZGQgbmV3IGNsaWVudCBvcmdhbmlzYXRpb24nIHxcclxuICAgICAgICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICA8bGliLWxvYWRlcj48L2xpYi1sb2FkZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiICpuZ0Zvcj1cImxldCBhIG9mIGNsaWVudHM7IGluZGV4IGFzIGluZGV4XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlRGV0YWlsKGluZGV4KVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIHt7YS5uYW1lfX1cclxuICAgICAgICAgICAgICA8bGliLWNoZXZyb24gW2NvbmRpdGlvblNob3dpbmddPVwiaW5kZXg9PWRldGFpbHNcIj48L2xpYi1jaGV2cm9uPlxyXG4gICAgICAgICAgICAgIDwhLS0gPGljLWljb24gW2ljb25dPVwiaW5kZXg9PWRldGFpbHMgPyBjaGV2cm9uRG93biA6IGNoZXZyb25SaWdodFwiPjwvaWMtaWNvbj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImluZGV4PT1kZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0FjdGl2aXTDqScgfCB0cmFuc2xhdGV9fTwvbGk+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQWRkcmVzcycgfCB0cmFuc2xhdGV9fToge3sgYS5vcmdhbmlzYXRpb24uYWRkcmVzcyB9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eyAnUG9zdGFsIENvZGUnIHwgdHJhbnNsYXRlfX06IHt7IGEub3JnYW5pc2F0aW9uLnBvc3RhbCB9fVxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0NpdHknIHwgdHJhbnNsYXRlfX06IHt7IGEub3JnYW5pc2F0aW9uLmNpdHkgfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snU0lSRVQnIHwgdHJhbnNsYXRlfX06IHt7IGEub3JnYW5pc2F0aW9uLnNpcmV0ID9cclxuICAgICAgICAgICAgICAgICAgYS5vcmdhbmlzYXRpb24uc2lyZXQgOiAnTm90IHByb3ZpZGVkJyB8IHRyYW5zbGF0ZSB9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydDcmVhdGVkJyB8IHRyYW5zbGF0ZX19OiB7eyBhLm9yZ2FuaXNhdGlvbi5jcmVhdGVkQXQgfCBkYXRlOidsb25nJyB9fVxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhLmFkbWluTWlzc2lvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJhLmFkbWluTWlzc2lvbnMubGVuZ3RoIDw9IDFcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0FkbWluaXN0cmF0b3IgVXNlcicgfCB0cmFuc2xhdGV9fSA6PC9saT5cclxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiYS5hZG1pbk1pc3Npb25zLmxlbmd0aCA+IDFcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0FkbWluaXN0cmF0b3IgVXNlcihzKScgfCB0cmFuc2xhdGV9fSA6PC9saT5cclxuICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhZG1pbiBvZiBhLmFkbWluTWlzc2lvbnM7IGluZGV4IGFzIGluZGV4XCIgKGNsaWNrKT1cIm9uVG9nZ2xlRGV0YWlsKGluZGV4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibWwtNFwiPiB7e2FkbWluLnVzZXIuZGlzcGxheU5hbWV9fSAoe3thZG1pbi51c2VyLmVtYWlsfX0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsXCIgc3R5bGU9XCJmbG9hdDogcmlnaHQ7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUFkbWluKGFkbWluKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snUmVtb3ZlJ3x0cmFuc2xhdGV9fTwvYnV0dG9uPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snUGhvbmUnfX06IHt7YWRtaW4udXNlci5waG9uZX19PC9saT4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhLmFkbWluTWlzc2lvbnMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXdhcm5pbmdcIj48c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLXdhcm5pbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7J1dhcm5pbmcnIHwgdHJhbnNsYXRlfX08L3NwYW4+IHt7J05vIEFkbWluaXN0cmF0b3IgVXNlcid8IHRyYW5zbGF0ZX19IDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhLnByb3BlcnRpZXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydMb2NhdGlvbnMnIHwgdHJhbnNsYXRlfX06IDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uXCIgKm5nRm9yPVwibGV0IHByb3BlcnR5IG9mIGEucHJvcGVydGllc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibWwtNFwiPnt7cHJvcGVydHl9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkVkaXQoYS5vcmdhbmlzYXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J0VkaXQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXJjaGl2ZShhLm9yZ2FuaXNhdGlvbilcIiBkaXNhYmxlZD5cclxuICAgICAgICAgICAgICAgICAge3snQXJjaGl2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsIGFjdGlvbi1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVPcmcoYS5vcmdhbmlzYXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J0RlbGV0ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZm9ybSAmJiAoY3JlYXRlIHx8IGVkaXRpbmcpXCI+XHJcbiAgICAgICAgPGZvcm0gKG5nU3VibWl0KT1cIm9uU3VibWl0T3JnKClcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J05hbWUnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW2NsYXNzLmlzLWludmFsaWRdPVwibmFtZS5pbnZhbGlkICYmIG5hbWUudG91Y2hlZFwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgICAgICAgIHt7J0EgbmFtZSBpcyByZXF1aXJlZCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0FkZHJlc3MnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydDaXR5JyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjaXR5XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snUG9zdGFsIGNvZGUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInBvc3RhbFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J1NJUkVUJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzaXJldFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIndvcmtpbmdcIj5cclxuICAgICAgICAgICAgPGxpYi1sb2FkZXI+PC9saWItbG9hZGVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndvcmtpbmcgfHwgZm9ybS5pbnZhbGlkXCI+e3snU2F2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DYW5jZWwoKVwiIFtkaXNhYmxlZF09XCJ3b3JraW5nXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCI+e3snQ2FuY2VsJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tPHNwT3JnYW5pc2F0aW9uRm9ybSBbbW9kZWxdPVwiIGVkaXRpbmdPcmdhbmlzYXRpb25cIiAoc3VibWl0KT1cIm9uU2F2ZSgkZXZlbnQpXCIgKGNhbmNlbCk9XCJvbkNhbmNlbCgpXCI+XHJcbiAgICAgICAgICAgICAgPC9zcE9yZ2FuaXNhdGlvbkZvcm0+LS0+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIDxkaXY+e3snQWRtaW5pc3RyYXRvciBVc2VyJyB8IHRyYW5zbGF0ZX19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cInVzZXJcIiAqbmdJZj1cImNyZWF0ZSB8fCBpc0FkZGluZ0FkbWluXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZvcm1cIiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0VtYWlsJyB8IHRyYW5zbGF0ZX19ICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW2NsYXNzLmlzLWludmFsaWRdPVwiZW1haWwuaW52YWxpZCAmJiBlbWFpbC50b3VjaGVkXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0FuIGVtYWlsIGlzIHJlcXVpcmVkJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0ZpcnN0IG5hbWUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZmlyc3ROYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTGFzdCBuYW1lJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImxhc3ROYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snUGhvbmUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+Il19
|
|
@@ -1,29 +1,32 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
2
|
import { Validators } from '@angular/forms';
|
|
3
|
+
import { textValidator, noEmptyValidator, emailValidator } from '@smarterplan/ngx-smarterplan-core';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "@angular/forms";
|
|
5
6
|
import * as i2 from "@smarterplan/ngx-smarterplan-core";
|
|
6
7
|
import * as i3 from "@ngx-translate/core";
|
|
7
|
-
import * as i4 from "
|
|
8
|
-
import * as i5 from "
|
|
8
|
+
import * as i4 from "@ng-bootstrap/ng-bootstrap";
|
|
9
|
+
import * as i5 from "../form-mission/form-mission.component";
|
|
9
10
|
import * as i6 from "@angular/common";
|
|
10
11
|
export class UserMissionFormComponent {
|
|
11
|
-
constructor(fb, userService, translate) {
|
|
12
|
+
constructor(fb, userService, translate, validatorsService) {
|
|
12
13
|
this.fb = fb;
|
|
13
14
|
this.userService = userService;
|
|
14
15
|
this.translate = translate;
|
|
16
|
+
this.validatorsService = validatorsService;
|
|
15
17
|
this.createForExistingUser = false;
|
|
16
18
|
this.added = new EventEmitter();
|
|
17
19
|
this.working = false;
|
|
20
|
+
this.errorForm = false;
|
|
18
21
|
}
|
|
19
22
|
ngOnInit() {
|
|
20
23
|
this.onAddNewUserMissionToOrg();
|
|
21
24
|
}
|
|
22
25
|
async onAddNewUserMissionToOrg() {
|
|
23
26
|
this.form = this.fb.group({
|
|
24
|
-
email: [null, [Validators.required]],
|
|
25
|
-
lastName: [""],
|
|
26
|
-
firstName: [""],
|
|
27
|
+
email: [null, [Validators.required, emailValidator()]],
|
|
28
|
+
lastName: ["", [Validators.maxLength(255), textValidator(), noEmptyValidator()]],
|
|
29
|
+
firstName: ["", [Validators.maxLength(255), textValidator(), noEmptyValidator()]],
|
|
27
30
|
});
|
|
28
31
|
}
|
|
29
32
|
onCancel() {
|
|
@@ -33,6 +36,10 @@ export class UserMissionFormComponent {
|
|
|
33
36
|
return this.form.get("email");
|
|
34
37
|
}
|
|
35
38
|
async onSubmit() {
|
|
39
|
+
if (!this.form.valid) {
|
|
40
|
+
this.errorForm = true;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
36
43
|
this.working = true;
|
|
37
44
|
let p;
|
|
38
45
|
try {
|
|
@@ -86,13 +93,21 @@ export class UserMissionFormComponent {
|
|
|
86
93
|
this.added.emit(false);
|
|
87
94
|
}
|
|
88
95
|
}
|
|
96
|
+
isFormError(control) {
|
|
97
|
+
return control && control.invalid && this.errorForm;
|
|
98
|
+
}
|
|
99
|
+
onFormChange() {
|
|
100
|
+
if (this.errorForm && this.form.valid) {
|
|
101
|
+
this.errorForm = false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
89
104
|
}
|
|
90
|
-
UserMissionFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: UserMissionFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.BaseUserService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
91
|
-
UserMissionFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: UserMissionFormComponent, selector: "lib-user-mission-form", inputs: { addToOrganisation: "addToOrganisation", isSP: "isSP", createForExistingUser: "createForExistingUser", currentOrg: "currentOrg" }, outputs: { added: "added" }, ngImport: i0, template: "<div *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n <div id=\"personalInfo\">\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'User Personal Information' | translate }}</h4>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" [
|
|
105
|
+
UserMissionFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: UserMissionFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.BaseUserService }, { token: i3.TranslateService }, { token: i2.ValidatorsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
106
|
+
UserMissionFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: UserMissionFormComponent, selector: "lib-user-mission-form", inputs: { addToOrganisation: "addToOrganisation", isSP: "isSP", createForExistingUser: "createForExistingUser", currentOrg: "currentOrg" }, outputs: { added: "added" }, ngImport: i0, template: "<div *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n <div id=\"personalInfo\">\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'User Personal Information' | translate }}</h4>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" data-testid=\"new-user-email\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['email'])|| isFormError(form.controls['email'])}\"\r\n required formControlName=\"email\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-user-email-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['email']) \r\n || isFormError(form.controls['email'])\">\r\n {{validatorsService.getError(form.controls['email']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Last name' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"lastName\" data-testid=\"new-user-lastName\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['lastName'])|| isFormError(form.controls['lastName'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-user-lastName-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['lastName']) \r\n || isFormError(form.controls['lastName'])\">\r\n {{validatorsService.getError(form.controls['lastName']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'First name' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"firstName\" data-testid=\"new-user-firstName\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['firstName'])|| isFormError(form.controls['firstName'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-user-firstName-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['firstName']) \r\n || isFormError(form.controls['firstName'])\">\r\n {{validatorsService.getError(form.controls['firstName']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"working\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n\r\n <div *ngIf=\"createdUser; else waitingForUser\">\r\n <div class=\"alert alert-info\">\r\n {{'User successfully created' | translate}}\r\n </div>\r\n <lib-form-mission [organisationForMission]=\"addToOrganisation\" [userForMissionID]=\"createdUser.id\"\r\n [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\" (addedMissionInput)=\"onMissionInput($event)\">\r\n </lib-form-mission>\r\n </div>\r\n <ng-template #waitingForUser>\r\n <div class=\"action-button-container\">\r\n <button data-testid=\"new-user-submit-btn\" type=\"submit\" class=\"btn btn-outline-primary rounded-pill mr-3 action-button\"\r\n [disabled]=\"working\">{{'Create user' | translate}}</button>\r\n <button data-testid=\"new-user-cancel-btn\" type=\"button\" (click)=\"onCancel()\" [disabled]=\"working\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\r\n </div>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorForm\">\r\n <ngb-alert data-testid=\"new-user-form-invalid\" [dismissible]=\"false\" type=\"danger\">\r\n {{'errorForm.infoBtn' |translate}}\r\n </ngb-alert>\r\n </div>\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'Mission details' | translate }}</h4>\r\n </div>\r\n <ngb-alert type=\"warning\" [dismissible]=\"false\">{{'Please create a user first' | translate}}.</ngb-alert>\r\n\r\n </ng-template>\r\n </form>\r\n</div>", styles: [".form-group{margin:1.5rem 0}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}\n"], components: [{ type: i4.NgbAlert, selector: "ngb-alert", inputs: ["animation", "dismissible", "type"], outputs: ["closed"], exportAs: ["ngbAlert"] }, { type: i2.LoaderComponent, selector: "lib-loader", inputs: ["useLogo", "color"] }, { type: i5.FormMissionComponent, selector: "lib-form-mission", inputs: ["missionToEdit", "organisationForMission", "isSP", "userForMissionID", "currentUserOrganisation"], outputs: ["addedMissionInput"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i3.TranslatePipe } });
|
|
92
107
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: UserMissionFormComponent, decorators: [{
|
|
93
108
|
type: Component,
|
|
94
|
-
args: [{ selector: 'lib-user-mission-form', template: "<div *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n <div id=\"personalInfo\">\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'User Personal Information' | translate }}</h4>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" [
|
|
95
|
-
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.BaseUserService }, { type: i3.TranslateService }]; }, propDecorators: { addToOrganisation: [{
|
|
109
|
+
args: [{ selector: 'lib-user-mission-form', template: "<div *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n <div id=\"personalInfo\">\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'User Personal Information' | translate }}</h4>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" data-testid=\"new-user-email\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['email'])|| isFormError(form.controls['email'])}\"\r\n required formControlName=\"email\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-user-email-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['email']) \r\n || isFormError(form.controls['email'])\">\r\n {{validatorsService.getError(form.controls['email']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'Last name' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"lastName\" data-testid=\"new-user-lastName\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['lastName'])|| isFormError(form.controls['lastName'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-user-lastName-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['lastName']) \r\n || isFormError(form.controls['lastName'])\">\r\n {{validatorsService.getError(form.controls['lastName']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-4 col-form-label\">{{'First name' | translate}}</label>\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"firstName\" data-testid=\"new-user-firstName\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['firstName'])|| isFormError(form.controls['firstName'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-user-firstName-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['firstName']) \r\n || isFormError(form.controls['firstName'])\">\r\n {{validatorsService.getError(form.controls['firstName']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"working\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n\r\n <div *ngIf=\"createdUser; else waitingForUser\">\r\n <div class=\"alert alert-info\">\r\n {{'User successfully created' | translate}}\r\n </div>\r\n <lib-form-mission [organisationForMission]=\"addToOrganisation\" [userForMissionID]=\"createdUser.id\"\r\n [currentUserOrganisation]=\"currentOrg\" [isSP]=\"isSP\" (addedMissionInput)=\"onMissionInput($event)\">\r\n </lib-form-mission>\r\n </div>\r\n <ng-template #waitingForUser>\r\n <div class=\"action-button-container\">\r\n <button data-testid=\"new-user-submit-btn\" type=\"submit\" class=\"btn btn-outline-primary rounded-pill mr-3 action-button\"\r\n [disabled]=\"working\">{{'Create user' | translate}}</button>\r\n <button data-testid=\"new-user-cancel-btn\" type=\"button\" (click)=\"onCancel()\" [disabled]=\"working\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\r\n </div>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorForm\">\r\n <ngb-alert data-testid=\"new-user-form-invalid\" [dismissible]=\"false\" type=\"danger\">\r\n {{'errorForm.infoBtn' |translate}}\r\n </ngb-alert>\r\n </div>\r\n <div style=\"margin-top: 1rem;\">\r\n <h4>{{ 'Mission details' | translate }}</h4>\r\n </div>\r\n <ngb-alert type=\"warning\" [dismissible]=\"false\">{{'Please create a user first' | translate}}.</ngb-alert>\r\n\r\n </ng-template>\r\n </form>\r\n</div>", styles: [".form-group{margin:1.5rem 0}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}\n"] }]
|
|
110
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.BaseUserService }, { type: i3.TranslateService }, { type: i2.ValidatorsService }]; }, propDecorators: { addToOrganisation: [{
|
|
96
111
|
type: Input
|
|
97
112
|
}], isSP: [{
|
|
98
113
|
type: Input
|
|
@@ -103,4 +118,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
103
118
|
}], added: [{
|
|
104
119
|
type: Output
|
|
105
120
|
}] } });
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1taXNzaW9uLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvdXNlci91c2VyLW1pc3Npb24tZm9ybS91c2VyLW1pc3Npb24tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi91c2VyL3VzZXItbWlzc2lvbi1mb3JtL3VzZXItbWlzc2lvbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUEwQixVQUFVLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBU3JGLE1BQU0sT0FBTyx3QkFBd0I7SUFvQmpDLFlBQ1ksRUFBZSxFQUNmLFdBQTRCLEVBQzVCLFNBQTJCO1FBRjNCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFqQjlCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQU03QixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUU5QyxZQUFPLEdBQUcsS0FBSyxDQUFDO0lBVVosQ0FBQztJQUVMLFFBQVE7UUFDSixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QjtRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3RCLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQyxRQUFR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RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBPcmdhbmlzYXRpb24sIE1pc3Npb24sIFByb2ZpbGUsIEJhc2VVc2VyU2VydmljZSB9IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLXVzZXItbWlzc2lvbi1mb3JtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi91c2VyLW1pc3Npb24tZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91c2VyLW1pc3Npb24tZm9ybS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWlzc2lvbkZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIEBJbnB1dCgpIGFkZFRvT3JnYW5pc2F0aW9uOiBPcmdhbmlzYXRpb247XHJcblxyXG4gICAgQElucHV0KCkgaXNTUDogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKSBjcmVhdGVGb3JFeGlzdGluZ1VzZXIgPSBmYWxzZTtcclxuXHJcbiAgICBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gICAgQElucHV0KCkgY3VycmVudE9yZzogT3JnYW5pc2F0aW9uO1xyXG5cclxuICAgIEBPdXRwdXQoKSBhZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICB3b3JraW5nID0gZmFsc2U7XHJcblxyXG4gICAgbWlzc2lvbklucHV0OiBNaXNzaW9uO1xyXG5cclxuICAgIGNyZWF0ZWRVc2VyOiBQcm9maWxlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICkgeyB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5vbkFkZE5ld1VzZXJNaXNzaW9uVG9PcmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkFkZE5ld1VzZXJNaXNzaW9uVG9PcmcoKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIGVtYWlsOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICAgICAgbGFzdE5hbWU6IFtcIlwiXSxcclxuICAgICAgICAgICAgZmlyc3ROYW1lOiBbXCJcIl0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYW5jZWwoKSB7XHJcbiAgICAgICAgdGhpcy5hZGRlZC5lbWl0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZW1haWwoKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldChcImVtYWlsXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VibWl0KCkge1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IHRydWU7XHJcbiAgICAgICAgbGV0IHA6IFByb2ZpbGU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5mb3JtLnZhbHVlO1xyXG4gICAgICAgICAgICBwID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS5wcm9maWxlRm9yTWFpbChmb3JtVmFsdWUuZW1haWwpO1xyXG4gICAgICAgICAgICBpZiAocCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoXCJVc2VyIHdpdGggdGhpcyBlbWFpbCBleGlzdHMgYWxyZWFkeSFcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZmlsZSA9IGF3YWl0IHRoaXMudXNlclNlcnZpY2UuY3JlYXRlVXNlckFXU2FuZFByb2ZpbGUoXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybVZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJVc2VyIGNyZWF0ZWQhXCIsIHByb2ZpbGUubWV0YWRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVkVXNlciA9IHByb2ZpbGU7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KHRoaXMudHJhbnNsYXRlLmluc3RhbnQoSlNPTi5zdHJpbmdpZnkoZXJyb3IpKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy53b3JraW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYXN5bmMgdXBkYXRlQWxsTWlzc2lvbnNGcm9tVGVtcGxhdGUobWlzc2lvbklucHV0OiBVcGRhdGVNaXNzaW9uSW5wdXQpIHtcclxuICAgIC8vICAgICAvLyBhbGwgbWlzc2lvbnMgb2YgdGhpcyBvcmdhbmlzYXRpb25cclxuICAgIC8vICAgICBjb25zdCBtaXNzaW9uc0Zyb21UZW1wbGF0ZSA9XHJcbiAgICAvLyAgICAgICAgIGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNCeVRlbXBsYXRlKFxyXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5taXNzaW9uVG9FZGl0LmlkLFxyXG4gICAgLy8gICAgICAgICApO1xyXG4gICAgLy8gICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgLy8gICAgICAgICBtaXNzaW9uc0Zyb21UZW1wbGF0ZS5tYXAoYXN5bmMgKG1pc3Npb24pID0+IHtcclxuICAgIC8vICAgICAgICAgICAgIGNvbnN0IG1pc3Npb25UZW1wbGF0ZSA9IHsgLi4ubWlzc2lvbklucHV0IH07XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5zZW5kVXBkYXRlKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgbWlzc2lvblRlbXBsYXRlLmVtYWlsU3RhdHVzID0gRW1haWxTdGF0dXMuVVBEQVRFX1RPX0RFTElWRVI7XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICBtaXNzaW9uVGVtcGxhdGUuaWQgPSBtaXNzaW9uLmlkO1xyXG4gICAgLy8gICAgICAgICAgICAgYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS51cGRhdGUobWlzc2lvblRlbXBsYXRlKTtcclxuICAgIC8vICAgICAgICAgfSksXHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBhc3luYyBvbk1pc3Npb25JbnB1dChtaXNzaW9uOiBNaXNzaW9uKSB7XHJcbiAgICAgICAgaWYgKG1pc3Npb24pIHtcclxuICAgICAgICAgICAgdGhpcy5taXNzaW9uSW5wdXQgPSBtaXNzaW9uO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmNyZWF0ZU9yVXBkYXRlTWlzc2lvbkZvck9yZ1dpdGhQcm9wZXJ0eShcclxuICAgICAgICAgICAgICAgIHRoaXMubWlzc2lvbklucHV0IGFzIE1pc3Npb24sXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1pc3Npb25JbnB1dC5vcmdhbmlzYXRpb25JRCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5hZGRlZC5lbWl0KHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkZWQuZW1pdChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJmb3JtXCI+XHJcbiAgICA8Zm9ybSAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJwZXJzb25hbEluZm9cIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDFyZW07XCI+XHJcbiAgICAgICAgICAgICAgICA8aDQ+e3sgJ1VzZXIgUGVyc29uYWwgSW5mb3JtYXRpb24nIHwgdHJhbnNsYXRlIH19PC9oND5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eydFbWFpbCcgfCB0cmFuc2xhdGV9fSAqPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW2NsYXNzLmlzLWludmFsaWRdPVwiZW1haWwuaW52YWxpZCAmJiBlbWFpbC50b3VjaGVkXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydBbiBlbWFpbCBpcyByZXF1aXJlZCcgfCB0cmFuc2xhdGV9fS5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eydMYXN0IG5hbWUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJsYXN0TmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7J0ZpcnN0IG5hbWUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJmaXJzdE5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cIndvcmtpbmdcIj5cclxuICAgICAgICAgICAgPGxpYi1sb2FkZXI+PC9saWItbG9hZGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY3JlYXRlZFVzZXI7IGVsc2Ugd2FpdGluZ0ZvclVzZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgIHt7J1VzZXIgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxsaWItZm9ybS1taXNzaW9uIFtvcmdhbmlzYXRpb25Gb3JNaXNzaW9uXT1cImFkZFRvT3JnYW5pc2F0aW9uXCIgW3VzZXJGb3JNaXNzaW9uSURdPVwiY3JlYXRlZFVzZXIuaWRcIlxyXG4gICAgICAgICAgICAgICAgW2N1cnJlbnRVc2VyT3JnYW5pc2F0aW9uXT1cImN1cnJlbnRPcmdcIiBbaXNTUF09XCJpc1NQXCIgKGFkZGVkTWlzc2lvbklucHV0KT1cIm9uTWlzc2lvbklucHV0KCRldmVudClcIj5cclxuICAgICAgICAgICAgPC9saWItZm9ybS1taXNzaW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjd2FpdGluZ0ZvclVzZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbXItMyBhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwid29ya2luZyB8fCBmb3JtLmludmFsaWRcIj57eydDcmVhdGUgdXNlcicgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiBbZGlzYWJsZWRdPVwid29ya2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiPnt7J0NhbmNlbCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDFyZW07XCI+XHJcbiAgICAgICAgICAgICAgICA8aDQ+e3sgJ01pc3Npb24gZGV0YWlscycgfCB0cmFuc2xhdGUgfX08L2g0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nYi1hbGVydCB0eXBlPVwid2FybmluZ1wiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiPnt7J1BsZWFzZSBjcmVhdGUgYSB1c2VyIGZpcnN0JyB8IHRyYW5zbGF0ZX19LjwvbmdiLWFsZXJ0PlxyXG5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9mb3JtPlxyXG48L2Rpdj4iXX0=
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1taXNzaW9uLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvdXNlci91c2VyLW1pc3Npb24tZm9ybS91c2VyLW1pc3Npb24tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi91c2VyL3VzZXItbWlzc2lvbi1mb3JtL3VzZXItbWlzc2lvbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUEwQixVQUFVLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7QUFFckYsT0FBTyxFQUFxRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7O0FBT3ZLLE1BQU0sT0FBTyx3QkFBd0I7SUFzQmpDLFlBQ1ksRUFBZSxFQUNmLFdBQTRCLEVBQzVCLFNBQTJCLEVBQzVCLGlCQUFxQztRQUhwQyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzVCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBb0I7UUFwQnZDLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQU03QixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUU5QyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBTWhCLGNBQVMsR0FBWSxLQUFLLENBQUM7SUFPdkIsQ0FBQztJQUVMLFFBQVE7UUFDSixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsS0FBSyxD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LENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FDbkMsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO2FBQU07WUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBTztRQUNmLE9BQU8sT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4RCxDQUFDO0lBR0QsWUFBWTtRQUNSLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUMxQjtJQUVMLENBQUM7O3FIQTVIUSx3QkFBd0I7eUdBQXhCLHdCQUF3QixzT0NWckMsaWxLQW1GTTsyRkR6RU8sd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNJLHVCQUF1QjsrTEFNeEIsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBPcmdhbmlzYXRpb24sIE1pc3Npb24sIFByb2ZpbGUsIEJhc2VVc2VyU2VydmljZSwgVmFsaWRhdG9yc1NlcnZpY2UsdGV4dFZhbGlkYXRvciwgbm9FbXB0eVZhbGlkYXRvciwgZW1haWxWYWxpZGF0b3IgfSBmcm9tICdAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi11c2VyLW1pc3Npb24tZm9ybScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdXNlci1taXNzaW9uLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdXNlci1taXNzaW9uLWZvcm0uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlck1pc3Npb25Gb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBASW5wdXQoKSBhZGRUb09yZ2FuaXNhdGlvbjogT3JnYW5pc2F0aW9uO1xyXG5cclxuICAgIEBJbnB1dCgpIGlzU1A6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KCkgY3JlYXRlRm9yRXhpc3RpbmdVc2VyID0gZmFsc2U7XHJcblxyXG4gICAgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICAgIEBJbnB1dCgpIGN1cnJlbnRPcmc6IE9yZ2FuaXNhdGlvbjtcclxuXHJcbiAgICBAT3V0cHV0KCkgYWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gICAgd29ya2luZyA9IGZhbHNlO1xyXG5cclxuICAgIG1pc3Npb25JbnB1dDogTWlzc2lvbjtcclxuXHJcbiAgICBjcmVhdGVkVXNlcjogUHJvZmlsZTtcclxuXHJcbiAgICBlcnJvckZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIHZhbGlkYXRvcnNTZXJ2aWNlIDogVmFsaWRhdG9yc1NlcnZpY2VcclxuICAgICkgeyB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5vbkFkZE5ld1VzZXJNaXNzaW9uVG9PcmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkFkZE5ld1VzZXJNaXNzaW9uVG9PcmcoKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIGVtYWlsOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIGVtYWlsVmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgbGFzdE5hbWU6IFtcIlwiLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgZmlyc3ROYW1lOiBbXCJcIixbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLmFkZGVkLmVtaXQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBlbWFpbCgpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KFwiZW1haWxcIik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25TdWJtaXQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLndvcmtpbmcgPSB0cnVlO1xyXG4gICAgICAgIGxldCBwOiBQcm9maWxlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZm9ybS52YWx1ZTtcclxuICAgICAgICAgICAgcCA9IGF3YWl0IHRoaXMudXNlclNlcnZpY2UucHJvZmlsZUZvck1haWwoZm9ybVZhbHVlLmVtYWlsKTtcclxuICAgICAgICAgICAgaWYgKHApIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KFwiVXNlciB3aXRoIHRoaXMgZW1haWwgZXhpc3RzIGFscmVhZHkhXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53b3JraW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb2ZpbGUgPSBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmNyZWF0ZVVzZXJBV1NhbmRQcm9maWxlKFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1WYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVXNlciBjcmVhdGVkIVwiLCBwcm9maWxlLm1ldGFkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlZFVzZXIgPSBwcm9maWxlO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53b3JraW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBhbGVydCh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KEpTT04uc3RyaW5naWZ5KGVycm9yKSkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFzeW5jIHVwZGF0ZUFsbE1pc3Npb25zRnJvbVRlbXBsYXRlKG1pc3Npb25JbnB1dDogVXBkYXRlTWlzc2lvbklucHV0KSB7XHJcbiAgICAvLyAgICAgLy8gYWxsIG1pc3Npb25zIG9mIHRoaXMgb3JnYW5pc2F0aW9uXHJcbiAgICAvLyAgICAgY29uc3QgbWlzc2lvbnNGcm9tVGVtcGxhdGUgPVxyXG4gICAgLy8gICAgICAgICBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlLmdldE1pc3Npb25zQnlUZW1wbGF0ZShcclxuICAgIC8vICAgICAgICAgICAgIHRoaXMubWlzc2lvblRvRWRpdC5pZCxcclxuICAgIC8vICAgICAgICAgKTtcclxuICAgIC8vICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgIC8vICAgICAgICAgbWlzc2lvbnNGcm9tVGVtcGxhdGUubWFwKGFzeW5jIChtaXNzaW9uKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICBjb25zdCBtaXNzaW9uVGVtcGxhdGUgPSB7IC4uLm1pc3Npb25JbnB1dCB9O1xyXG4gICAgLy8gICAgICAgICAgICAgaWYgKHRoaXMuc2VuZFVwZGF0ZSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIG1pc3Npb25UZW1wbGF0ZS5lbWFpbFN0YXR1cyA9IEVtYWlsU3RhdHVzLlVQREFURV9UT19ERUxJVkVSO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgbWlzc2lvblRlbXBsYXRlLmlkID0gbWlzc2lvbi5pZDtcclxuICAgIC8vICAgICAgICAgICAgIGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UudXBkYXRlKG1pc3Npb25UZW1wbGF0ZSk7XHJcbiAgICAvLyAgICAgICAgIH0pLFxyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgYXN5bmMgb25NaXNzaW9uSW5wdXQobWlzc2lvbjogTWlzc2lvbikge1xyXG4gICAgICAgIGlmIChtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWlzc2lvbklucHV0ID0gbWlzc2lvbjtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5jcmVhdGVPclVwZGF0ZU1pc3Npb25Gb3JPcmdXaXRoUHJvcGVydHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1pc3Npb25JbnB1dCBhcyBNaXNzaW9uLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5taXNzaW9uSW5wdXQub3JnYW5pc2F0aW9uSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkZWQuZW1pdCh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFkZGVkLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc0Zvcm1FcnJvcihjb250cm9sKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2wgJiYgY29udHJvbC5pbnZhbGlkICYmIHRoaXMuZXJyb3JGb3JtO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBvbkZvcm1DaGFuZ2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JGb3JtICYmIHRoaXMuZm9ybS52YWxpZCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImZvcm1cIj5cclxuICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICAgICAgPGRpdiBpZD1cInBlcnNvbmFsSW5mb1wiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMXJlbTtcIj5cclxuICAgICAgICAgICAgICAgIDxoND57eyAnVXNlciBQZXJzb25hbCBJbmZvcm1hdGlvbicgfCB0cmFuc2xhdGUgfX08L2g0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7J0VtYWlsJyB8IHRyYW5zbGF0ZX19ICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLXRlc3RpZD1cIm5ldy11c2VyLWVtYWlsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2VtYWlsJ10pfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2VtYWlsJ10pfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy11c2VyLWVtYWlsLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCIgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydlbWFpbCddKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snZW1haWwnXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snZW1haWwnXSkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3snTGFzdCBuYW1lJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIiBkYXRhLXRlc3RpZD1cIm5ldy11c2VyLWxhc3ROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snbGFzdE5hbWUnXSl8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snbGFzdE5hbWUnXSl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy11c2VyLWxhc3ROYW1lLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCIgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydsYXN0TmFtZSddKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snbGFzdE5hbWUnXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snbGFzdE5hbWUnXSkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3snRmlyc3QgbmFtZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiIGRhdGEtdGVzdGlkPVwibmV3LXVzZXItZmlyc3ROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snZmlyc3ROYW1lJ10pfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2ZpcnN0TmFtZSddKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwibmV3LXVzZXItZmlyc3ROYW1lLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCIgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydmaXJzdE5hbWUnXSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2ZpcnN0TmFtZSddKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3t2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihmb3JtLmNvbnRyb2xzWydmaXJzdE5hbWUnXSkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJ3b3JraW5nXCI+XHJcbiAgICAgICAgICAgIDxsaWItbG9hZGVyPjwvbGliLWxvYWRlcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImNyZWF0ZWRVc2VyOyBlbHNlIHdhaXRpbmdGb3JVc2VyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICB7eydVc2VyIHN1Y2Nlc3NmdWxseSBjcmVhdGVkJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bGliLWZvcm0tbWlzc2lvbiBbb3JnYW5pc2F0aW9uRm9yTWlzc2lvbl09XCJhZGRUb09yZ2FuaXNhdGlvblwiIFt1c2VyRm9yTWlzc2lvbklEXT1cImNyZWF0ZWRVc2VyLmlkXCJcclxuICAgICAgICAgICAgICAgIFtjdXJyZW50VXNlck9yZ2FuaXNhdGlvbl09XCJjdXJyZW50T3JnXCIgW2lzU1BdPVwiaXNTUFwiIChhZGRlZE1pc3Npb25JbnB1dCk9XCJvbk1pc3Npb25JbnB1dCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvbGliLWZvcm0tbWlzc2lvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3dhaXRpbmdGb3JVc2VyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS10ZXN0aWQ9XCJuZXctdXNlci1zdWJtaXQtYnRuXCIgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1yLTMgYWN0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndvcmtpbmdcIj57eydDcmVhdGUgdXNlcicgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLXRlc3RpZD1cIm5ldy11c2VyLWNhbmNlbC1idG5cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiBbZGlzYWJsZWRdPVwid29ya2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiPnt7J0NhbmNlbCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImVycm9yRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy11c2VyLWZvcm0taW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eydlcnJvckZvcm0uaW5mb0J0bicgfHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAxcmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgPGg0Pnt7ICdNaXNzaW9uIGRldGFpbHMnIHwgdHJhbnNsYXRlIH19PC9oND5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZ2ItYWxlcnQgdHlwZT1cIndhcm5pbmdcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIj57eydQbGVhc2UgY3JlYXRlIGEgdXNlciBmaXJzdCcgfCB0cmFuc2xhdGV9fS48L25nYi1hbGVydD5cclxuXHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZm9ybT5cclxuPC9kaXY+Il19
|